From c23e7832605883e5999f2eccb9adb661d0a0135a Mon Sep 17 00:00:00 2001 From: dijangh904 Date: Thu, 19 Feb 2026 23:42:05 +0100 Subject: [PATCH] health check and test --- .env.example | 14 + index.js | 65 +- node_modules/.bin/sha.js | 16 + node_modules/.bin/sha.js.cmd | 17 + node_modules/.bin/sha.js.ps1 | 28 + node_modules/.package-lock.json | 755 + node_modules/@stellar/js-xdr/.eslintrc.js | 10 + .../.github/ISSUE_TEMPLATE/bug_report.md | 27 + .../.github/ISSUE_TEMPLATE/feature_request.md | 20 + .../js-xdr/.github/workflows/codeql.yml | 43 + .../js-xdr/.github/workflows/npm-publish.yml | 40 + .../js-xdr/.github/workflows/tests.yml | 30 + node_modules/@stellar/js-xdr/.prettierignore | 4 + node_modules/@stellar/js-xdr/.travis.yml | 25 + node_modules/@stellar/js-xdr/CHANGELOG.md | 130 + node_modules/@stellar/js-xdr/CONTRIBUTING.md | 6 + node_modules/@stellar/js-xdr/Gemfile | 8 + node_modules/@stellar/js-xdr/Gemfile.lock | 46 + node_modules/@stellar/js-xdr/LICENSE.md | 202 + node_modules/@stellar/js-xdr/README.md | 140 + .../@stellar/js-xdr/babel.config.json | 16 + node_modules/@stellar/js-xdr/bower.json | 9 + node_modules/@stellar/js-xdr/buffer.js | 12 + node_modules/@stellar/js-xdr/dist/xdr.js | 3 + .../@stellar/js-xdr/dist/xdr.js.LICENSE.txt | 8 + node_modules/@stellar/js-xdr/dist/xdr.js.map | 1 + node_modules/@stellar/js-xdr/examples/enum.js | 27 + .../@stellar/js-xdr/examples/linked_list.js | 13 + .../@stellar/js-xdr/examples/struct.js | 30 + node_modules/@stellar/js-xdr/examples/test.x | 164 + .../@stellar/js-xdr/examples/typedef.js | 14 + .../@stellar/js-xdr/examples/union.js | 39 + node_modules/@stellar/js-xdr/karma.conf.js | 37 + node_modules/@stellar/js-xdr/lib/xdr.js | 2391 + node_modules/@stellar/js-xdr/lib/xdr.js.map | 1 + node_modules/@stellar/js-xdr/package.json | 81 + .../@stellar/js-xdr/prettier.config.js | 12 + node_modules/@stellar/js-xdr/src/.eslintrc.js | 117 + node_modules/@stellar/js-xdr/src/array.js | 54 + .../@stellar/js-xdr/src/bigint-encoder.js | 141 + node_modules/@stellar/js-xdr/src/bool.js | 36 + node_modules/@stellar/js-xdr/src/browser.js | 3 + node_modules/@stellar/js-xdr/src/config.js | 239 + node_modules/@stellar/js-xdr/src/double.js | 27 + node_modules/@stellar/js-xdr/src/enum.js | 94 + node_modules/@stellar/js-xdr/src/errors.js | 25 + node_modules/@stellar/js-xdr/src/float.js | 27 + node_modules/@stellar/js-xdr/src/hyper.js | 38 + node_modules/@stellar/js-xdr/src/index.js | 5 + node_modules/@stellar/js-xdr/src/int.js | 39 + node_modules/@stellar/js-xdr/src/large-int.js | 133 + node_modules/@stellar/js-xdr/src/opaque.js | 35 + node_modules/@stellar/js-xdr/src/option.js | 43 + node_modules/@stellar/js-xdr/src/quadruple.js | 16 + node_modules/@stellar/js-xdr/src/reference.js | 11 + .../js-xdr/src/serialization/xdr-reader.js | 160 + .../js-xdr/src/serialization/xdr-writer.js | 179 + node_modules/@stellar/js-xdr/src/string.js | 58 + node_modules/@stellar/js-xdr/src/struct.js | 83 + node_modules/@stellar/js-xdr/src/types.js | 26 + node_modules/@stellar/js-xdr/src/union.js | 171 + .../@stellar/js-xdr/src/unsigned-hyper.js | 38 + .../@stellar/js-xdr/src/unsigned-int.js | 42 + node_modules/@stellar/js-xdr/src/var-array.js | 59 + .../@stellar/js-xdr/src/var-opaque.js | 43 + node_modules/@stellar/js-xdr/src/void.js | 19 + node_modules/@stellar/js-xdr/src/xdr-type.js | 217 + .../@stellar/js-xdr/test/.eslintrc.js | 16 + node_modules/@stellar/js-xdr/test/setup.js | 23 + .../@stellar/js-xdr/test/unit/array_test.js | 89 + .../js-xdr/test/unit/bigint-encoder_test.js | 318 + .../@stellar/js-xdr/test/unit/bool_test.js | 47 + .../@stellar/js-xdr/test/unit/define_test.js | 175 + .../@stellar/js-xdr/test/unit/double_test.js | 62 + .../test/unit/dynamic-buffer-resize_test.js | 19 + .../@stellar/js-xdr/test/unit/enum_test.js | 117 + .../@stellar/js-xdr/test/unit/float_test.js | 58 + .../@stellar/js-xdr/test/unit/hyper_test.js | 86 + .../@stellar/js-xdr/test/unit/int_test.js | 78 + .../@stellar/js-xdr/test/unit/opaque_test.js | 54 + .../@stellar/js-xdr/test/unit/option_test.js | 49 + .../js-xdr/test/unit/quadruple_test.js | 35 + .../@stellar/js-xdr/test/unit/string_test.js | 148 + .../@stellar/js-xdr/test/unit/struct_test.js | 135 + .../js-xdr/test/unit/struct_union_test.js | 43 + .../@stellar/js-xdr/test/unit/union_test.js | 161 + .../js-xdr/test/unit/unsigned-hyper_test.js | 74 + .../js-xdr/test/unit/unsigned-int_test.js | 70 + .../js-xdr/test/unit/var-array_test.js | 87 + .../js-xdr/test/unit/var-opaque_test.js | 84 + .../@stellar/js-xdr/test/unit/void_test.js | 44 + .../@stellar/js-xdr/webpack.config.js | 57 + .../@stellar/stellar-base/CHANGELOG.md | 1393 + node_modules/@stellar/stellar-base/LICENSE | 202 + node_modules/@stellar/stellar-base/README.md | 198 + .../stellar-base/dist/stellar-base.js | 32371 ++++++++ .../stellar-base/dist/stellar-base.min.js | 2 + .../@stellar/stellar-base/lib/account.js | 79 + .../@stellar/stellar-base/lib/address.js | 168 + .../@stellar/stellar-base/lib/asset.js | 322 + .../@stellar/stellar-base/lib/auth.js | 279 + .../@stellar/stellar-base/lib/claimant.js | 192 + .../@stellar/stellar-base/lib/contract.js | 112 + .../@stellar/stellar-base/lib/events.js | 49 + .../stellar-base/lib/fee_bump_transaction.js | 132 + .../lib/generated/curr_generated.js | 9166 +++ .../lib/generated/next_generated.js | 9227 +++ .../stellar-base/lib/get_liquidity_pool_id.js | 57 + .../@stellar/stellar-base/lib/hashing.js | 12 + .../@stellar/stellar-base/lib/index.js | 389 + .../@stellar/stellar-base/lib/invocation.js | 212 + .../@stellar/stellar-base/lib/jsxdr.js | 12 + .../@stellar/stellar-base/lib/keypair.js | 307 + .../stellar-base/lib/liquidity_pool_asset.js | 125 + .../stellar-base/lib/liquidity_pool_id.js | 100 + .../@stellar/stellar-base/lib/memo.js | 269 + .../stellar-base/lib/muxed_account.js | 158 + .../@stellar/stellar-base/lib/network.js | 22 + .../stellar-base/lib/numbers/index.js | 85 + .../stellar-base/lib/numbers/int128.js | 48 + .../stellar-base/lib/numbers/int256.js | 48 + .../stellar-base/lib/numbers/sc_int.js | 131 + .../stellar-base/lib/numbers/uint128.js | 48 + .../stellar-base/lib/numbers/uint256.js | 48 + .../stellar-base/lib/numbers/xdr_large_int.js | 266 + .../@stellar/stellar-base/lib/operation.js | 719 + .../lib/operations/account_merge.js | 32 + .../lib/operations/allow_trust.js | 57 + .../begin_sponsoring_future_reserves.js | 38 + .../lib/operations/bump_sequence.js | 37 + .../lib/operations/change_trust.js | 52 + .../lib/operations/claim_claimable_balance.js | 40 + .../stellar-base/lib/operations/clawback.js | 46 + .../operations/clawback_claimable_balance.js | 39 + .../lib/operations/create_account.js | 37 + .../operations/create_claimable_balance.js | 65 + .../operations/create_passive_sell_offer.js | 44 + .../end_sponsoring_future_reserves.js | 27 + .../lib/operations/extend_footprint_ttl.js | 53 + .../stellar-base/lib/operations/index.js | 254 + .../stellar-base/lib/operations/inflation.js | 23 + .../lib/operations/invoke_host_function.js | 225 + .../lib/operations/liquidity_pool_deposit.js | 64 + .../lib/operations/liquidity_pool_withdraw.js | 50 + .../lib/operations/manage_buy_offer.js | 50 + .../lib/operations/manage_data.js | 41 + .../lib/operations/manage_sell_offer.js | 50 + .../operations/path_payment_strict_receive.js | 68 + .../operations/path_payment_strict_send.js | 68 + .../stellar-base/lib/operations/payment.js | 47 + .../lib/operations/restore_footprint.js | 42 + .../lib/operations/revoke_sponsorship.js | 301 + .../lib/operations/set_options.js | 135 + .../lib/operations/set_trustline_flags.js | 84 + .../@stellar/stellar-base/lib/scval.js | 412 + .../@stellar/stellar-base/lib/signerkey.js | 102 + .../@stellar/stellar-base/lib/signing.js | 96 + .../@stellar/stellar-base/lib/soroban.js | 95 + .../stellar-base/lib/sorobandata_builder.js | 217 + .../@stellar/stellar-base/lib/strkey.js | 399 + .../@stellar/stellar-base/lib/transaction.js | 367 + .../stellar-base/lib/transaction_base.js | 247 + .../stellar-base/lib/transaction_builder.js | 781 + .../stellar-base/lib/util/bignumber.js | 11 + .../stellar-base/lib/util/checksum.js | 20 + .../lib/util/continued_fraction.js | 58 + .../lib/util/decode_encode_muxed_account.js | 116 + .../@stellar/stellar-base/lib/util/util.js | 14 + node_modules/@stellar/stellar-base/lib/xdr.js | 9 + .../@stellar/stellar-base/package.json | 136 + .../@stellar/stellar-base/types/curr.d.ts | 15724 ++++ .../@stellar/stellar-base/types/index.d.ts | 1319 + .../@stellar/stellar-base/types/next.d.ts | 15884 ++++ .../@stellar/stellar-base/types/xdr.d.ts | 1 + node_modules/asynckit/LICENSE | 21 + node_modules/asynckit/README.md | 233 + node_modules/asynckit/bench.js | 76 + node_modules/asynckit/index.js | 6 + node_modules/asynckit/lib/abort.js | 29 + node_modules/asynckit/lib/async.js | 34 + node_modules/asynckit/lib/defer.js | 26 + node_modules/asynckit/lib/iterate.js | 75 + .../asynckit/lib/readable_asynckit.js | 91 + .../asynckit/lib/readable_parallel.js | 25 + node_modules/asynckit/lib/readable_serial.js | 25 + .../asynckit/lib/readable_serial_ordered.js | 29 + node_modules/asynckit/lib/state.js | 37 + node_modules/asynckit/lib/streamify.js | 141 + node_modules/asynckit/lib/terminator.js | 29 + node_modules/asynckit/package.json | 63 + node_modules/asynckit/parallel.js | 43 + node_modules/asynckit/serial.js | 17 + node_modules/asynckit/serialOrdered.js | 75 + node_modules/asynckit/stream.js | 21 + node_modules/available-typed-arrays/.eslintrc | 5 + .../.github/FUNDING.yml | 12 + node_modules/available-typed-arrays/.nycrc | 9 + .../available-typed-arrays/CHANGELOG.md | 100 + node_modules/available-typed-arrays/LICENSE | 21 + node_modules/available-typed-arrays/README.md | 55 + .../available-typed-arrays/index.d.ts | 8 + node_modules/available-typed-arrays/index.js | 17 + .../available-typed-arrays/package.json | 93 + .../available-typed-arrays/test/index.js | 18 + .../available-typed-arrays/tsconfig.json | 49 + node_modules/axios/CHANGELOG.md | 1416 + node_modules/axios/LICENSE | 7 + node_modules/axios/MIGRATION_GUIDE.md | 877 + node_modules/axios/README.md | 1921 + node_modules/axios/dist/axios.js | 4353 ++ node_modules/axios/dist/axios.js.map | 1 + node_modules/axios/dist/axios.min.js | 5 + node_modules/axios/dist/axios.min.js.map | 1 + node_modules/axios/dist/browser/axios.cjs | 3979 + node_modules/axios/dist/browser/axios.cjs.map | 1 + node_modules/axios/dist/esm/axios.js | 4002 + node_modules/axios/dist/esm/axios.js.map | 1 + node_modules/axios/dist/esm/axios.min.js | 3 + node_modules/axios/dist/esm/axios.min.js.map | 1 + node_modules/axios/dist/node/axios.cjs | 5315 ++ node_modules/axios/dist/node/axios.cjs.map | 1 + node_modules/axios/index.d.cts | 591 + node_modules/axios/index.d.ts | 810 + node_modules/axios/index.js | 43 + node_modules/axios/lib/adapters/README.md | 37 + node_modules/axios/lib/adapters/adapters.js | 126 + node_modules/axios/lib/adapters/fetch.js | 288 + node_modules/axios/lib/adapters/http.js | 898 + node_modules/axios/lib/adapters/xhr.js | 200 + node_modules/axios/lib/axios.js | 89 + node_modules/axios/lib/cancel/CancelToken.js | 135 + .../axios/lib/cancel/CanceledError.js | 22 + node_modules/axios/lib/cancel/isCancel.js | 5 + node_modules/axios/lib/core/Axios.js | 249 + node_modules/axios/lib/core/AxiosError.js | 73 + node_modules/axios/lib/core/AxiosHeaders.js | 314 + .../axios/lib/core/InterceptorManager.js | 72 + node_modules/axios/lib/core/README.md | 8 + node_modules/axios/lib/core/buildFullPath.js | 22 + .../axios/lib/core/dispatchRequest.js | 81 + node_modules/axios/lib/core/mergeConfig.js | 119 + node_modules/axios/lib/core/settle.js | 27 + node_modules/axios/lib/core/transformData.js | 28 + node_modules/axios/lib/defaults/index.js | 161 + .../axios/lib/defaults/transitional.js | 8 + node_modules/axios/lib/env/README.md | 3 + .../axios/lib/env/classes/FormData.js | 2 + node_modules/axios/lib/env/data.js | 1 + .../axios/lib/helpers/AxiosTransformStream.js | 143 + .../axios/lib/helpers/AxiosURLSearchParams.js | 58 + .../axios/lib/helpers/HttpStatusCode.js | 77 + node_modules/axios/lib/helpers/README.md | 7 + .../lib/helpers/ZlibHeaderTransformStream.js | 28 + node_modules/axios/lib/helpers/bind.js | 14 + node_modules/axios/lib/helpers/buildURL.js | 64 + node_modules/axios/lib/helpers/callbackify.js | 16 + node_modules/axios/lib/helpers/combineURLs.js | 15 + .../axios/lib/helpers/composeSignals.js | 48 + node_modules/axios/lib/helpers/cookies.js | 53 + .../axios/lib/helpers/deprecatedMethod.js | 26 + .../helpers/estimateDataURLDecodedBytes.js | 73 + .../axios/lib/helpers/formDataToJSON.js | 95 + .../axios/lib/helpers/formDataToStream.js | 112 + node_modules/axios/lib/helpers/fromDataURI.js | 53 + .../axios/lib/helpers/isAbsoluteURL.js | 20 + .../axios/lib/helpers/isAxiosError.js | 14 + .../axios/lib/helpers/isURLSameOrigin.js | 14 + node_modules/axios/lib/helpers/null.js | 2 + .../axios/lib/helpers/parseHeaders.js | 55 + .../axios/lib/helpers/parseProtocol.js | 6 + .../axios/lib/helpers/progressEventReducer.js | 44 + node_modules/axios/lib/helpers/readBlob.js | 15 + .../axios/lib/helpers/resolveConfig.js | 61 + node_modules/axios/lib/helpers/speedometer.js | 55 + node_modules/axios/lib/helpers/spread.js | 28 + node_modules/axios/lib/helpers/throttle.js | 44 + node_modules/axios/lib/helpers/toFormData.js | 223 + .../axios/lib/helpers/toURLEncodedForm.js | 19 + node_modules/axios/lib/helpers/trackStream.js | 87 + node_modules/axios/lib/helpers/validator.js | 99 + .../lib/platform/browser/classes/Blob.js | 3 + .../lib/platform/browser/classes/FormData.js | 3 + .../browser/classes/URLSearchParams.js | 4 + .../axios/lib/platform/browser/index.js | 13 + .../axios/lib/platform/common/utils.js | 51 + node_modules/axios/lib/platform/index.js | 7 + .../lib/platform/node/classes/FormData.js | 3 + .../platform/node/classes/URLSearchParams.js | 4 + node_modules/axios/lib/platform/node/index.js | 38 + node_modules/axios/lib/utils.js | 863 + node_modules/axios/package.json | 220 + node_modules/bare-addon-resolve/LICENSE | 201 + node_modules/bare-addon-resolve/README.md | 156 + node_modules/bare-addon-resolve/index.d.ts | 85 + node_modules/bare-addon-resolve/index.js | 471 + .../bare-addon-resolve/lib/errors.d.ts | 8 + node_modules/bare-addon-resolve/lib/errors.js | 30 + node_modules/bare-addon-resolve/package.json | 52 + node_modules/bare-module-resolve/LICENSE | 201 + node_modules/bare-module-resolve/README.md | 352 + node_modules/bare-module-resolve/index.d.ts | 147 + node_modules/bare-module-resolve/index.js | 796 + .../bare-module-resolve/lib/errors.d.ts | 11 + .../bare-module-resolve/lib/errors.js | 50 + node_modules/bare-module-resolve/package.json | 51 + node_modules/bare-semver/LICENSE | 201 + node_modules/bare-semver/README.md | 19 + node_modules/bare-semver/index.d.ts | 61 + node_modules/bare-semver/index.js | 13 + node_modules/bare-semver/lib/comparator.js | 37 + node_modules/bare-semver/lib/constants.js | 7 + node_modules/bare-semver/lib/errors.js | 22 + node_modules/bare-semver/lib/range.js | 121 + node_modules/bare-semver/lib/version.js | 208 + node_modules/bare-semver/package.json | 40 + node_modules/base32.js/.npmignore | 4 + node_modules/base32.js/.travis.yml | 4 + node_modules/base32.js/HISTORY.md | 4 + node_modules/base32.js/README.md | 71 + node_modules/base32.js/base32.js | 312 + node_modules/base32.js/dist/.gitkeep | 0 node_modules/base32.js/dist/base32.js | 364 + node_modules/base32.js/dist/base32.js.map | 1 + node_modules/base32.js/dist/base32.min.js | 2 + node_modules/base32.js/dist/base32.min.js.map | 1 + node_modules/base32.js/index.js | 16 + node_modules/base32.js/jsdoc.json | 33 + node_modules/base32.js/karma.conf.js | 33 + node_modules/base32.js/package.json | 42 + node_modules/base32.js/test/base32_test.js | 87 + node_modules/base32.js/test/fixtures.js | 294 + node_modules/base32.js/webpack.config.js | 17 + node_modules/base64-js/LICENSE | 21 + node_modules/base64-js/README.md | 34 + node_modules/base64-js/base64js.min.js | 1 + node_modules/base64-js/index.d.ts | 3 + node_modules/base64-js/index.js | 150 + node_modules/base64-js/package.json | 47 + node_modules/bignumber.js/CHANGELOG.md | 381 + node_modules/bignumber.js/LICENCE.md | 26 + node_modules/bignumber.js/README.md | 289 + node_modules/bignumber.js/bignumber.d.mts | 6 + node_modules/bignumber.js/bignumber.d.ts | 5 + node_modules/bignumber.js/bignumber.js | 2922 + node_modules/bignumber.js/bignumber.mjs | 2907 + node_modules/bignumber.js/doc/API.html | 2249 + node_modules/bignumber.js/package.json | 60 + node_modules/bignumber.js/types.d.ts | 1821 + node_modules/buffer/AUTHORS.md | 73 + node_modules/buffer/LICENSE | 21 + node_modules/buffer/README.md | 410 + node_modules/buffer/index.d.ts | 194 + node_modules/buffer/index.js | 2106 + node_modules/buffer/package.json | 93 + node_modules/call-bind/.eslintignore | 1 + node_modules/call-bind/.eslintrc | 16 + node_modules/call-bind/.github/FUNDING.yml | 12 + node_modules/call-bind/.nycrc | 9 + node_modules/call-bind/CHANGELOG.md | 106 + node_modules/call-bind/LICENSE | 21 + node_modules/call-bind/README.md | 64 + node_modules/call-bind/callBound.js | 15 + node_modules/call-bind/index.js | 24 + node_modules/call-bind/package.json | 93 + node_modules/call-bind/test/callBound.js | 54 + node_modules/call-bind/test/index.js | 74 + node_modules/combined-stream/License | 19 + node_modules/combined-stream/Readme.md | 138 + .../combined-stream/lib/combined_stream.js | 208 + node_modules/combined-stream/package.json | 25 + node_modules/combined-stream/yarn.lock | 17 + node_modules/define-data-property/.eslintrc | 24 + .../define-data-property/.github/FUNDING.yml | 12 + node_modules/define-data-property/.nycrc | 13 + .../define-data-property/CHANGELOG.md | 70 + node_modules/define-data-property/LICENSE | 21 + node_modules/define-data-property/README.md | 67 + node_modules/define-data-property/index.d.ts | 12 + node_modules/define-data-property/index.js | 56 + .../define-data-property/package.json | 106 + .../define-data-property/test/index.js | 392 + .../define-data-property/tsconfig.json | 59 + node_modules/delayed-stream/.npmignore | 1 + node_modules/delayed-stream/License | 19 + node_modules/delayed-stream/Makefile | 7 + node_modules/delayed-stream/Readme.md | 141 + .../delayed-stream/lib/delayed_stream.js | 107 + node_modules/delayed-stream/package.json | 27 + node_modules/es-set-tostringtag/.eslintrc | 13 + node_modules/es-set-tostringtag/.nycrc | 9 + node_modules/es-set-tostringtag/CHANGELOG.md | 67 + node_modules/es-set-tostringtag/LICENSE | 21 + node_modules/es-set-tostringtag/README.md | 53 + node_modules/es-set-tostringtag/index.d.ts | 10 + node_modules/es-set-tostringtag/index.js | 35 + node_modules/es-set-tostringtag/package.json | 78 + node_modules/es-set-tostringtag/test/index.js | 85 + node_modules/es-set-tostringtag/tsconfig.json | 9 + node_modules/eventsource/.editorconfig | 27 + node_modules/eventsource/CONTRIBUTING.md | 13 + node_modules/eventsource/HISTORY.md | 161 + node_modules/eventsource/LICENSE | 22 + node_modules/eventsource/README.md | 91 + .../example/eventsource-polyfill.js | 9736 +++ node_modules/eventsource/example/index.html | 40 + .../eventsource/example/sse-client.js | 5 + .../eventsource/example/sse-server.js | 29 + .../eventsource/lib/eventsource-polyfill.js | 9 + node_modules/eventsource/lib/eventsource.js | 495 + node_modules/eventsource/package.json | 60 + node_modules/feaxios/LICENSE | 35 + node_modules/feaxios/README.md | 131 + .../feaxios/dist/client-DGpL0cYy.d.mts | 162 + .../feaxios/dist/client-DGpL0cYy.d.ts | 162 + node_modules/feaxios/dist/index.d.mts | 6 + node_modules/feaxios/dist/index.d.ts | 6 + node_modules/feaxios/dist/index.js | 321 + node_modules/feaxios/dist/index.mjs | 314 + node_modules/feaxios/dist/retry.d.mts | 1 + node_modules/feaxios/dist/retry.d.ts | 1 + node_modules/feaxios/dist/retry.js | 137 + node_modules/feaxios/dist/retry.mjs | 122 + node_modules/feaxios/package.json | 71 + node_modules/follow-redirects/LICENSE | 18 + node_modules/follow-redirects/README.md | 155 + node_modules/follow-redirects/debug.js | 15 + node_modules/follow-redirects/http.js | 1 + node_modules/follow-redirects/https.js | 1 + node_modules/follow-redirects/index.js | 686 + node_modules/follow-redirects/package.json | 58 + node_modules/for-each/.editorconfig | 20 + node_modules/for-each/.eslintrc | 30 + node_modules/for-each/.github/FUNDING.yml | 12 + node_modules/for-each/.github/SECURITY.md | 3 + node_modules/for-each/.nycrc | 8 + node_modules/for-each/CHANGELOG.md | 107 + node_modules/for-each/LICENSE | 22 + node_modules/for-each/README.md | 39 + node_modules/for-each/index.d.ts | 35 + node_modules/for-each/index.js | 69 + node_modules/for-each/package.json | 76 + node_modules/for-each/test/test.js | 224 + node_modules/for-each/tsconfig.json | 8 + node_modules/form-data/CHANGELOG.md | 659 + node_modules/form-data/License | 19 + node_modules/form-data/README.md | 355 + node_modules/form-data/index.d.ts | 62 + node_modules/form-data/lib/browser.js | 4 + node_modules/form-data/lib/form_data.js | 494 + node_modules/form-data/lib/populate.js | 10 + .../form-data/node_modules/mime-db/HISTORY.md | 507 + .../form-data/node_modules/mime-db/LICENSE | 23 + .../form-data/node_modules/mime-db/README.md | 100 + .../form-data/node_modules/mime-db/db.json | 8519 +++ .../form-data/node_modules/mime-db/index.js | 12 + .../node_modules/mime-db/package.json | 60 + .../node_modules/mime-types/HISTORY.md | 397 + .../form-data/node_modules/mime-types/LICENSE | 23 + .../node_modules/mime-types/README.md | 113 + .../node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 44 + node_modules/form-data/package.json | 82 + .../has-property-descriptors/.eslintrc | 13 + .../.github/FUNDING.yml | 12 + node_modules/has-property-descriptors/.nycrc | 9 + .../has-property-descriptors/CHANGELOG.md | 35 + node_modules/has-property-descriptors/LICENSE | 21 + .../has-property-descriptors/README.md | 43 + .../has-property-descriptors/index.js | 22 + .../has-property-descriptors/package.json | 77 + .../has-property-descriptors/test/index.js | 57 + node_modules/has-tostringtag/.eslintrc | 5 + .../has-tostringtag/.github/FUNDING.yml | 12 + node_modules/has-tostringtag/.nycrc | 13 + node_modules/has-tostringtag/CHANGELOG.md | 42 + node_modules/has-tostringtag/LICENSE | 21 + node_modules/has-tostringtag/README.md | 46 + node_modules/has-tostringtag/index.d.ts | 3 + node_modules/has-tostringtag/index.js | 8 + node_modules/has-tostringtag/package.json | 108 + node_modules/has-tostringtag/shams.d.ts | 3 + node_modules/has-tostringtag/shams.js | 8 + node_modules/has-tostringtag/test/index.js | 21 + .../has-tostringtag/test/shams/core-js.js | 31 + .../test/shams/get-own-property-symbols.js | 30 + node_modules/has-tostringtag/test/tests.js | 15 + node_modules/has-tostringtag/tsconfig.json | 49 + node_modules/ieee754/LICENSE | 11 + node_modules/ieee754/README.md | 51 + node_modules/ieee754/index.d.ts | 10 + node_modules/ieee754/index.js | 85 + node_modules/ieee754/package.json | 52 + node_modules/is-callable/.editorconfig | 31 + node_modules/is-callable/.eslintrc | 10 + node_modules/is-callable/.github/FUNDING.yml | 12 + node_modules/is-callable/.nycrc | 9 + node_modules/is-callable/CHANGELOG.md | 158 + node_modules/is-callable/LICENSE | 22 + node_modules/is-callable/README.md | 83 + node_modules/is-callable/index.js | 101 + node_modules/is-callable/package.json | 106 + node_modules/is-callable/test/index.js | 244 + node_modules/is-retry-allowed/index.d.ts | 20 + node_modules/is-retry-allowed/index.js | 39 + node_modules/is-retry-allowed/license | 10 + node_modules/is-retry-allowed/package.json | 40 + node_modules/is-retry-allowed/readme.md | 46 + node_modules/is-typed-array/.editorconfig | 20 + node_modules/is-typed-array/.eslintrc | 13 + .../is-typed-array/.github/FUNDING.yml | 12 + node_modules/is-typed-array/.nycrc | 9 + node_modules/is-typed-array/CHANGELOG.md | 166 + node_modules/is-typed-array/LICENSE | 22 + node_modules/is-typed-array/README.md | 70 + node_modules/is-typed-array/index.d.ts | 9 + node_modules/is-typed-array/index.js | 8 + node_modules/is-typed-array/package.json | 129 + node_modules/is-typed-array/test/index.js | 111 + node_modules/is-typed-array/tsconfig.json | 6 + node_modules/isarray/LICENSE | 21 + node_modules/isarray/README.md | 38 + node_modules/isarray/index.js | 5 + node_modules/isarray/package.json | 48 + node_modules/pg-cloudflare/LICENSE | 21 + node_modules/pg-cloudflare/README.md | 112 + node_modules/pg-cloudflare/dist/empty.d.ts | 2 + node_modules/pg-cloudflare/dist/empty.js | 6 + node_modules/pg-cloudflare/dist/empty.js.map | 1 + node_modules/pg-cloudflare/dist/index.d.ts | 31 + node_modules/pg-cloudflare/dist/index.js | 152 + node_modules/pg-cloudflare/dist/index.js.map | 1 + node_modules/pg-cloudflare/esm/index.mjs | 3 + node_modules/pg-cloudflare/package.json | 39 + node_modules/pg-cloudflare/src/empty.ts | 3 + node_modules/pg-cloudflare/src/index.ts | 166 + node_modules/pg-cloudflare/src/types.d.ts | 25 + node_modules/pg-connection-string/LICENSE | 21 + node_modules/pg-connection-string/README.md | 105 + .../pg-connection-string/esm/index.mjs | 8 + node_modules/pg-connection-string/index.d.ts | 36 + node_modules/pg-connection-string/index.js | 231 + .../pg-connection-string/package.json | 52 + node_modules/pg-int8/LICENSE | 13 + node_modules/pg-int8/README.md | 16 + node_modules/pg-int8/index.js | 100 + node_modules/pg-int8/package.json | 24 + node_modules/pg-pool/LICENSE | 21 + node_modules/pg-pool/README.md | 358 + node_modules/pg-pool/esm/index.mjs | 5 + node_modules/pg-pool/index.js | 481 + node_modules/pg-pool/package.json | 51 + node_modules/pg-protocol/LICENSE | 21 + node_modules/pg-protocol/README.md | 3 + node_modules/pg-protocol/dist/b.d.ts | 1 + node_modules/pg-protocol/dist/b.js | 23 + node_modules/pg-protocol/dist/b.js.map | 1 + .../pg-protocol/dist/buffer-reader.d.ts | 15 + .../pg-protocol/dist/buffer-reader.js | 56 + .../pg-protocol/dist/buffer-reader.js.map | 1 + .../pg-protocol/dist/buffer-writer.d.ts | 16 + .../pg-protocol/dist/buffer-writer.js | 81 + .../pg-protocol/dist/buffer-writer.js.map | 1 + .../pg-protocol/dist/inbound-parser.test.d.ts | 1 + .../pg-protocol/dist/inbound-parser.test.js | 530 + .../dist/inbound-parser.test.js.map | 1 + node_modules/pg-protocol/dist/index.d.ts | 6 + node_modules/pg-protocol/dist/index.js | 15 + node_modules/pg-protocol/dist/index.js.map | 1 + node_modules/pg-protocol/dist/messages.d.ts | 162 + node_modules/pg-protocol/dist/messages.js | 160 + node_modules/pg-protocol/dist/messages.js.map | 1 + .../dist/outbound-serializer.test.d.ts | 1 + .../dist/outbound-serializer.test.js | 252 + .../dist/outbound-serializer.test.js.map | 1 + node_modules/pg-protocol/dist/parser.d.ts | 24 + node_modules/pg-protocol/dist/parser.js | 324 + node_modules/pg-protocol/dist/parser.js.map | 1 + node_modules/pg-protocol/dist/serializer.d.ts | 42 + node_modules/pg-protocol/dist/serializer.js | 189 + .../pg-protocol/dist/serializer.js.map | 1 + node_modules/pg-protocol/esm/index.js | 11 + node_modules/pg-protocol/package.json | 45 + node_modules/pg-protocol/src/b.ts | 25 + node_modules/pg-protocol/src/buffer-reader.ts | 60 + node_modules/pg-protocol/src/buffer-writer.ts | 85 + .../pg-protocol/src/inbound-parser.test.ts | 575 + node_modules/pg-protocol/src/index.ts | 11 + node_modules/pg-protocol/src/messages.ts | 262 + .../src/outbound-serializer.test.ts | 276 + node_modules/pg-protocol/src/parser.ts | 413 + node_modules/pg-protocol/src/serializer.ts | 274 + .../pg-protocol/src/testing/buffer-list.ts | 67 + .../pg-protocol/src/testing/test-buffers.ts | 166 + .../pg-protocol/src/types/chunky.d.ts | 1 + node_modules/pg-types/.travis.yml | 7 + node_modules/pg-types/Makefile | 14 + node_modules/pg-types/README.md | 75 + node_modules/pg-types/index.d.ts | 137 + node_modules/pg-types/index.js | 47 + node_modules/pg-types/index.test-d.ts | 21 + node_modules/pg-types/lib/arrayParser.js | 11 + node_modules/pg-types/lib/binaryParsers.js | 257 + node_modules/pg-types/lib/builtins.js | 73 + node_modules/pg-types/lib/textParsers.js | 215 + node_modules/pg-types/package.json | 42 + node_modules/pg-types/test/index.js | 24 + node_modules/pg-types/test/types.js | 597 + node_modules/pg/LICENSE | 21 + node_modules/pg/README.md | 95 + node_modules/pg/esm/index.mjs | 20 + node_modules/pg/lib/client.js | 733 + node_modules/pg/lib/connection-parameters.js | 171 + node_modules/pg/lib/connection.js | 221 + node_modules/pg/lib/crypto/cert-signatures.js | 122 + node_modules/pg/lib/crypto/sasl.js | 212 + node_modules/pg/lib/crypto/utils-legacy.js | 43 + node_modules/pg/lib/crypto/utils-webcrypto.js | 89 + node_modules/pg/lib/crypto/utils.js | 9 + node_modules/pg/lib/defaults.js | 91 + node_modules/pg/lib/index.js | 73 + node_modules/pg/lib/native/client.js | 308 + node_modules/pg/lib/native/index.js | 2 + node_modules/pg/lib/native/query.js | 165 + node_modules/pg/lib/query.js | 252 + node_modules/pg/lib/result.js | 109 + node_modules/pg/lib/stream.js | 83 + node_modules/pg/lib/type-overrides.js | 35 + node_modules/pg/lib/utils.js | 217 + node_modules/pg/package.json | 76 + node_modules/pgpass/README.md | 74 + node_modules/pgpass/lib/helper.js | 233 + node_modules/pgpass/lib/index.js | 23 + node_modules/pgpass/package.json | 41 + .../possible-typed-array-names/.eslintrc | 5 + .../.github/FUNDING.yml | 12 + .../possible-typed-array-names/CHANGELOG.md | 29 + .../possible-typed-array-names/LICENSE | 21 + .../possible-typed-array-names/README.md | 50 + .../possible-typed-array-names/index.d.ts | 16 + .../possible-typed-array-names/index.js | 17 + .../possible-typed-array-names/package.json | 84 + .../possible-typed-array-names/test/index.js | 19 + .../possible-typed-array-names/tsconfig.json | 9 + node_modules/postgres-array/index.d.ts | 4 + node_modules/postgres-array/index.js | 97 + node_modules/postgres-array/license | 21 + node_modules/postgres-array/package.json | 35 + node_modules/postgres-array/readme.md | 43 + node_modules/postgres-bytea/index.js | 33 + node_modules/postgres-bytea/license | 21 + node_modules/postgres-bytea/package.json | 34 + node_modules/postgres-bytea/readme.md | 34 + node_modules/postgres-date/index.js | 116 + node_modules/postgres-date/license | 21 + node_modules/postgres-date/package.json | 33 + node_modules/postgres-date/readme.md | 49 + node_modules/postgres-interval/index.d.ts | 20 + node_modules/postgres-interval/index.js | 125 + node_modules/postgres-interval/license | 21 + node_modules/postgres-interval/package.json | 36 + node_modules/postgres-interval/readme.md | 48 + node_modules/proxy-from-env/.eslintrc | 29 + node_modules/proxy-from-env/.travis.yml | 10 + node_modules/proxy-from-env/LICENSE | 20 + node_modules/proxy-from-env/README.md | 131 + node_modules/proxy-from-env/index.js | 108 + node_modules/proxy-from-env/package.json | 34 + node_modules/proxy-from-env/test.js | 483 + node_modules/randombytes/.travis.yml | 15 + node_modules/randombytes/.zuul.yml | 1 + node_modules/randombytes/LICENSE | 21 + node_modules/randombytes/README.md | 14 + node_modules/randombytes/browser.js | 50 + node_modules/randombytes/index.js | 1 + node_modules/randombytes/package.json | 36 + node_modules/randombytes/test.js | 81 + node_modules/require-addon/LICENSE | 201 + node_modules/require-addon/README.md | 19 + node_modules/require-addon/lib/bare.js | 1 + node_modules/require-addon/lib/default.js | 7 + node_modules/require-addon/lib/node.js | 71 + node_modules/require-addon/package.json | 63 + node_modules/safe-buffer/LICENSE | 21 + node_modules/safe-buffer/README.md | 584 + node_modules/safe-buffer/index.d.ts | 187 + node_modules/safe-buffer/index.js | 65 + node_modules/safe-buffer/package.json | 51 + node_modules/set-function-length/.eslintrc | 27 + .../set-function-length/.github/FUNDING.yml | 12 + node_modules/set-function-length/.nycrc | 13 + node_modules/set-function-length/CHANGELOG.md | 70 + node_modules/set-function-length/LICENSE | 21 + node_modules/set-function-length/README.md | 56 + node_modules/set-function-length/env.d.ts | 9 + node_modules/set-function-length/env.js | 25 + node_modules/set-function-length/index.d.ts | 7 + node_modules/set-function-length/index.js | 42 + node_modules/set-function-length/package.json | 102 + .../set-function-length/tsconfig.json | 9 + node_modules/sha.js/.eslintrc | 76 + node_modules/sha.js/CHANGELOG.md | 423 + node_modules/sha.js/LICENSE | 49 + node_modules/sha.js/README.md | 44 + node_modules/sha.js/bin.js | 44 + node_modules/sha.js/hash.js | 84 + node_modules/sha.js/index.js | 19 + node_modules/sha.js/package.json | 58 + node_modules/sha.js/sha.js | 104 + node_modules/sha.js/sha1.js | 109 + node_modules/sha.js/sha224.js | 55 + node_modules/sha.js/sha256.js | 189 + node_modules/sha.js/sha384.js | 59 + node_modules/sha.js/sha512.js | 382 + node_modules/sha.js/test/hash.js | 80 + node_modules/sha.js/test/test.js | 138 + node_modules/sha.js/test/vectors.js | 72 + node_modules/sodium-native/CMakeLists.txt | 249 + node_modules/sodium-native/LICENSE | 21 + node_modules/sodium-native/README.md | 51 + node_modules/sodium-native/binding.c | 3470 + .../sodium-native/extensions/pbkdf2/pbkdf2.c | 90 + .../sodium-native/extensions/pbkdf2/pbkdf2.h | 54 + .../sodium-native/extensions/tweak/tweak.c | 206 + .../sodium-native/extensions/tweak/tweak.h | 54 + node_modules/sodium-native/index.js | 3 + node_modules/sodium-native/macros.h | 319 + node_modules/sodium-native/package.json | 47 + .../prebuilds/android-arm/sodium-native.bare | Bin 0 -> 508800 bytes .../prebuilds/android-arm/sodium-native.node | Bin 0 -> 467856 bytes .../android-arm64/sodium-native.bare | Bin 0 -> 530928 bytes .../android-arm64/sodium-native.node | Bin 0 -> 470352 bytes .../prebuilds/android-ia32/sodium-native.bare | Bin 0 -> 729712 bytes .../prebuilds/android-ia32/sodium-native.node | Bin 0 -> 666708 bytes .../prebuilds/android-x64/sodium-native.bare | Bin 0 -> 624392 bytes .../prebuilds/android-x64/sodium-native.node | Bin 0 -> 580488 bytes .../prebuilds/darwin-arm64/sodium-native.bare | Bin 0 -> 572680 bytes .../prebuilds/darwin-arm64/sodium-native.node | Bin 0 -> 505728 bytes .../prebuilds/darwin-x64/sodium-native.bare | Bin 0 -> 679192 bytes .../prebuilds/darwin-x64/sodium-native.node | Bin 0 -> 625032 bytes .../ios-arm64-simulator/sodium-native.bare | Bin 0 -> 572600 bytes .../prebuilds/ios-arm64/sodium-native.bare | Bin 0 -> 584464 bytes .../ios-x64-simulator/sodium-native.bare | Bin 0 -> 679008 bytes .../prebuilds/linux-arm64/sodium-native.bare | Bin 0 -> 604912 bytes .../prebuilds/linux-arm64/sodium-native.node | Bin 0 -> 534120 bytes .../prebuilds/linux-x64/sodium-native.bare | Bin 0 -> 1162784 bytes .../prebuilds/linux-x64/sodium-native.node | Bin 0 -> 1050120 bytes .../prebuilds/win32-arm64/sodium-native.bare | Bin 0 -> 539648 bytes .../prebuilds/win32-arm64/sodium-native.node | Bin 0 -> 480256 bytes .../prebuilds/win32-x64/sodium-native.bare | Bin 0 -> 663552 bytes .../prebuilds/win32-x64/sodium-native.node | Bin 0 -> 619008 bytes node_modules/split2/LICENSE | 13 + node_modules/split2/README.md | 85 + node_modules/split2/bench.js | 27 + node_modules/split2/index.js | 141 + node_modules/split2/package.json | 39 + node_modules/split2/test.js | 409 + node_modules/stellar-sdk/CHANGELOG.md | 1758 + node_modules/stellar-sdk/LICENSE | 228 + node_modules/stellar-sdk/README.md | 317 + .../stellar-sdk/dist/stellar-sdk-minimal.js | 46748 ++++++++++++ .../dist/stellar-sdk-minimal.min.js | 2 + .../stellar-sdk-minimal.min.js.LICENSE.txt | 69 + .../stellar-sdk/dist/stellar-sdk-no-axios.js | 58091 +++++++++++++++ .../dist/stellar-sdk-no-axios.min.js | 2 + .../stellar-sdk-no-axios.min.js.LICENSE.txt | 71 + .../dist/stellar-sdk-no-eventsource.js | 50201 +++++++++++++ .../dist/stellar-sdk-no-eventsource.min.js | 2 + ...llar-sdk-no-eventsource.min.js.LICENSE.txt | 69 + node_modules/stellar-sdk/dist/stellar-sdk.js | 61544 ++++++++++++++++ .../stellar-sdk/dist/stellar-sdk.min.js | 2 + .../dist/stellar-sdk.min.js.LICENSE.txt | 71 + node_modules/stellar-sdk/lib/browser.d.ts | 6 + node_modules/stellar-sdk/lib/browser.js | 35 + node_modules/stellar-sdk/lib/config.d.ts | 64 + node_modules/stellar-sdk/lib/config.js | 51 + .../lib/contract/assembled_transaction.d.ts | 627 + .../lib/contract/assembled_transaction.js | 839 + .../lib/contract/basic_node_signer.d.ts | 18 + .../lib/contract/basic_node_signer.js | 60 + .../stellar-sdk/lib/contract/client.d.ts | 66 + .../stellar-sdk/lib/contract/client.js | 352 + .../stellar-sdk/lib/contract/index.d.ts | 7 + .../stellar-sdk/lib/contract/index.js | 82 + .../stellar-sdk/lib/contract/rust_result.d.ts | 81 + .../stellar-sdk/lib/contract/rust_result.js | 66 + .../lib/contract/sent_transaction.d.ts | 86 + .../lib/contract/sent_transaction.js | 151 + .../stellar-sdk/lib/contract/spec.d.ts | 152 + node_modules/stellar-sdk/lib/contract/spec.js | 1017 + .../stellar-sdk/lib/contract/types.d.ts | 244 + .../stellar-sdk/lib/contract/types.js | 9 + .../stellar-sdk/lib/contract/utils.d.ts | 46 + .../stellar-sdk/lib/contract/utils.js | 123 + .../lib/errors/account_requires_memo.d.ts | 24 + .../lib/errors/account_requires_memo.js | 38 + .../stellar-sdk/lib/errors/bad_request.d.ts | 14 + .../stellar-sdk/lib/errors/bad_request.js | 34 + .../stellar-sdk/lib/errors/bad_response.d.ts | 17 + .../stellar-sdk/lib/errors/bad_response.js | 34 + .../stellar-sdk/lib/errors/index.d.ts | 5 + node_modules/stellar-sdk/lib/errors/index.js | 60 + .../stellar-sdk/lib/errors/network.d.ts | 33 + .../stellar-sdk/lib/errors/network.js | 41 + .../stellar-sdk/lib/errors/not_found.d.ts | 14 + .../stellar-sdk/lib/errors/not_found.js | 34 + .../stellar-sdk/lib/federation/api.d.ts | 32 + .../stellar-sdk/lib/federation/api.js | 7 + .../stellar-sdk/lib/federation/index.d.ts | 2 + .../stellar-sdk/lib/federation/index.js | 34 + .../stellar-sdk/lib/federation/server.d.ts | 116 + .../stellar-sdk/lib/federation/server.js | 252 + .../stellar-sdk/lib/friendbot/index.d.ts | 6 + .../stellar-sdk/lib/friendbot/index.js | 7 + .../lib/horizon/account_call_builder.d.ts | 56 + .../lib/horizon/account_call_builder.js | 62 + .../lib/horizon/account_response.d.ts | 61 + .../lib/horizon/account_response.js | 49 + .../lib/horizon/assets_call_builder.d.ts | 27 + .../lib/horizon/assets_call_builder.js | 43 + .../stellar-sdk/lib/horizon/call_builder.d.ts | 128 + .../stellar-sdk/lib/horizon/call_builder.js | 362 + .../claimable_balances_call_builder.d.ts | 50 + .../claimable_balances_call_builder.js | 56 + .../lib/horizon/effect_call_builder.d.ts | 53 + .../lib/horizon/effect_call_builder.js | 56 + .../lib/horizon/friendbot_builder.d.ts | 4 + .../lib/horizon/friendbot_builder.js | 32 + .../stellar-sdk/lib/horizon/horizon_api.d.ts | 542 + .../stellar-sdk/lib/horizon/horizon_api.js | 96 + .../lib/horizon/horizon_axios_client.d.ts | 37 + .../lib/horizon/horizon_axios_client.js | 60 + .../stellar-sdk/lib/horizon/index.d.ts | 8 + node_modules/stellar-sdk/lib/horizon/index.js | 78 + .../lib/horizon/ledger_call_builder.d.ts | 23 + .../lib/horizon/ledger_call_builder.js | 37 + .../horizon/liquidity_pool_call_builder.d.ts | 37 + .../horizon/liquidity_pool_call_builder.js | 59 + .../lib/horizon/offer_call_builder.d.ts | 65 + .../lib/horizon/offer_call_builder.js | 79 + .../lib/horizon/operation_call_builder.d.ts | 69 + .../lib/horizon/operation_call_builder.js | 69 + .../lib/horizon/orderbook_call_builder.d.ts | 20 + .../lib/horizon/orderbook_call_builder.js | 45 + .../lib/horizon/path_call_builder.d.ts | 35 + .../lib/horizon/path_call_builder.js | 41 + .../lib/horizon/payment_call_builder.d.ts | 47 + .../lib/horizon/payment_call_builder.js | 52 + .../stellar-sdk/lib/horizon/server.d.ts | 394 + .../stellar-sdk/lib/horizon/server.js | 571 + .../stellar-sdk/lib/horizon/server_api.d.ts | 264 + .../stellar-sdk/lib/horizon/server_api.js | 24 + .../strict_receive_path_call_builder.d.ts | 38 + .../strict_receive_path_call_builder.js | 50 + .../strict_send_path_call_builder.d.ts | 38 + .../horizon/strict_send_path_call_builder.js | 50 + .../trade_aggregation_call_builder.d.ts | 49 + .../horizon/trade_aggregation_call_builder.js | 76 + .../lib/horizon/trades_call_builder.d.ts | 52 + .../lib/horizon/trades_call_builder.js | 72 + .../lib/horizon/transaction_call_builder.d.ts | 60 + .../lib/horizon/transaction_call_builder.js | 64 + .../lib/horizon/types/account.d.ts | 5 + .../stellar-sdk/lib/horizon/types/account.js | 5 + .../stellar-sdk/lib/horizon/types/assets.d.ts | 17 + .../stellar-sdk/lib/horizon/types/assets.js | 5 + .../lib/horizon/types/effects.d.ts | 285 + .../stellar-sdk/lib/horizon/types/effects.js | 62 + .../stellar-sdk/lib/horizon/types/offer.d.ts | 20 + .../stellar-sdk/lib/horizon/types/offer.js | 5 + .../stellar-sdk/lib/horizon/types/trade.d.ts | 14 + .../stellar-sdk/lib/horizon/types/trade.js | 5 + .../lib/http-client/axios-client.d.ts | 2 + .../lib/http-client/axios-client.js | 10 + .../lib/http-client/fetch-client.d.ts | 11 + .../lib/http-client/fetch-client.js | 229 + .../stellar-sdk/lib/http-client/index.d.ts | 5 + .../stellar-sdk/lib/http-client/index.js | 33 + .../stellar-sdk/lib/http-client/types.d.ts | 70 + .../stellar-sdk/lib/http-client/types.js | 34 + node_modules/stellar-sdk/lib/index.d.ts | 32 + node_modules/stellar-sdk/lib/index.js | 80 + .../stellar-sdk/lib/minimal/browser.d.ts | 6 + .../stellar-sdk/lib/minimal/browser.js | 35 + .../stellar-sdk/lib/minimal/config.d.ts | 64 + .../stellar-sdk/lib/minimal/config.js | 51 + .../contract/assembled_transaction.d.ts | 627 + .../minimal/contract/assembled_transaction.js | 839 + .../minimal/contract/basic_node_signer.d.ts | 18 + .../lib/minimal/contract/basic_node_signer.js | 60 + .../lib/minimal/contract/client.d.ts | 66 + .../lib/minimal/contract/client.js | 352 + .../lib/minimal/contract/index.d.ts | 7 + .../stellar-sdk/lib/minimal/contract/index.js | 82 + .../lib/minimal/contract/rust_result.d.ts | 81 + .../lib/minimal/contract/rust_result.js | 66 + .../minimal/contract/sent_transaction.d.ts | 86 + .../lib/minimal/contract/sent_transaction.js | 151 + .../lib/minimal/contract/spec.d.ts | 152 + .../stellar-sdk/lib/minimal/contract/spec.js | 1017 + .../lib/minimal/contract/types.d.ts | 244 + .../stellar-sdk/lib/minimal/contract/types.js | 9 + .../lib/minimal/contract/utils.d.ts | 46 + .../stellar-sdk/lib/minimal/contract/utils.js | 123 + .../minimal/errors/account_requires_memo.d.ts | 24 + .../minimal/errors/account_requires_memo.js | 38 + .../lib/minimal/errors/bad_request.d.ts | 14 + .../lib/minimal/errors/bad_request.js | 34 + .../lib/minimal/errors/bad_response.d.ts | 17 + .../lib/minimal/errors/bad_response.js | 34 + .../stellar-sdk/lib/minimal/errors/index.d.ts | 5 + .../stellar-sdk/lib/minimal/errors/index.js | 60 + .../lib/minimal/errors/network.d.ts | 33 + .../stellar-sdk/lib/minimal/errors/network.js | 41 + .../lib/minimal/errors/not_found.d.ts | 14 + .../lib/minimal/errors/not_found.js | 34 + .../lib/minimal/federation/api.d.ts | 32 + .../stellar-sdk/lib/minimal/federation/api.js | 7 + .../lib/minimal/federation/index.d.ts | 2 + .../lib/minimal/federation/index.js | 34 + .../lib/minimal/federation/server.d.ts | 116 + .../lib/minimal/federation/server.js | 252 + .../lib/minimal/friendbot/index.d.ts | 6 + .../lib/minimal/friendbot/index.js | 7 + .../minimal/horizon/account_call_builder.d.ts | 56 + .../minimal/horizon/account_call_builder.js | 62 + .../lib/minimal/horizon/account_response.d.ts | 61 + .../lib/minimal/horizon/account_response.js | 49 + .../minimal/horizon/assets_call_builder.d.ts | 27 + .../minimal/horizon/assets_call_builder.js | 43 + .../lib/minimal/horizon/call_builder.d.ts | 128 + .../lib/minimal/horizon/call_builder.js | 362 + .../claimable_balances_call_builder.d.ts | 50 + .../claimable_balances_call_builder.js | 56 + .../minimal/horizon/effect_call_builder.d.ts | 53 + .../minimal/horizon/effect_call_builder.js | 56 + .../minimal/horizon/friendbot_builder.d.ts | 4 + .../lib/minimal/horizon/friendbot_builder.js | 32 + .../lib/minimal/horizon/horizon_api.d.ts | 542 + .../lib/minimal/horizon/horizon_api.js | 96 + .../minimal/horizon/horizon_axios_client.d.ts | 37 + .../minimal/horizon/horizon_axios_client.js | 60 + .../lib/minimal/horizon/index.d.ts | 8 + .../stellar-sdk/lib/minimal/horizon/index.js | 78 + .../minimal/horizon/ledger_call_builder.d.ts | 23 + .../minimal/horizon/ledger_call_builder.js | 37 + .../horizon/liquidity_pool_call_builder.d.ts | 37 + .../horizon/liquidity_pool_call_builder.js | 59 + .../minimal/horizon/offer_call_builder.d.ts | 65 + .../lib/minimal/horizon/offer_call_builder.js | 79 + .../horizon/operation_call_builder.d.ts | 69 + .../minimal/horizon/operation_call_builder.js | 69 + .../horizon/orderbook_call_builder.d.ts | 20 + .../minimal/horizon/orderbook_call_builder.js | 45 + .../minimal/horizon/path_call_builder.d.ts | 35 + .../lib/minimal/horizon/path_call_builder.js | 41 + .../minimal/horizon/payment_call_builder.d.ts | 47 + .../minimal/horizon/payment_call_builder.js | 52 + .../lib/minimal/horizon/server.d.ts | 394 + .../stellar-sdk/lib/minimal/horizon/server.js | 571 + .../lib/minimal/horizon/server_api.d.ts | 264 + .../lib/minimal/horizon/server_api.js | 24 + .../strict_receive_path_call_builder.d.ts | 38 + .../strict_receive_path_call_builder.js | 50 + .../strict_send_path_call_builder.d.ts | 38 + .../horizon/strict_send_path_call_builder.js | 50 + .../trade_aggregation_call_builder.d.ts | 49 + .../horizon/trade_aggregation_call_builder.js | 76 + .../minimal/horizon/trades_call_builder.d.ts | 52 + .../minimal/horizon/trades_call_builder.js | 72 + .../horizon/transaction_call_builder.d.ts | 60 + .../horizon/transaction_call_builder.js | 64 + .../lib/minimal/horizon/types/account.d.ts | 5 + .../lib/minimal/horizon/types/account.js | 5 + .../lib/minimal/horizon/types/assets.d.ts | 17 + .../lib/minimal/horizon/types/assets.js | 5 + .../lib/minimal/horizon/types/effects.d.ts | 285 + .../lib/minimal/horizon/types/effects.js | 62 + .../lib/minimal/horizon/types/offer.d.ts | 20 + .../lib/minimal/horizon/types/offer.js | 5 + .../lib/minimal/horizon/types/trade.d.ts | 14 + .../lib/minimal/horizon/types/trade.js | 5 + .../lib/minimal/http-client/axios-client.d.ts | 2 + .../lib/minimal/http-client/axios-client.js | 10 + .../lib/minimal/http-client/fetch-client.d.ts | 11 + .../lib/minimal/http-client/fetch-client.js | 229 + .../lib/minimal/http-client/index.d.ts | 5 + .../lib/minimal/http-client/index.js | 33 + .../lib/minimal/http-client/types.d.ts | 70 + .../lib/minimal/http-client/types.js | 34 + .../stellar-sdk/lib/minimal/index.d.ts | 32 + node_modules/stellar-sdk/lib/minimal/index.js | 80 + .../stellar-sdk/lib/minimal/rpc/api.d.ts | 363 + .../stellar-sdk/lib/minimal/rpc/api.js | 32 + .../stellar-sdk/lib/minimal/rpc/axios.d.ts | 4 + .../stellar-sdk/lib/minimal/rpc/axios.js | 15 + .../stellar-sdk/lib/minimal/rpc/browser.d.ts | 4 + .../stellar-sdk/lib/minimal/rpc/browser.js | 27 + .../stellar-sdk/lib/minimal/rpc/index.d.ts | 8 + .../stellar-sdk/lib/minimal/rpc/index.js | 86 + .../stellar-sdk/lib/minimal/rpc/jsonrpc.d.ts | 35 + .../stellar-sdk/lib/minimal/rpc/jsonrpc.js | 52 + .../stellar-sdk/lib/minimal/rpc/parsers.d.ts | 39 + .../stellar-sdk/lib/minimal/rpc/parsers.js | 156 + .../stellar-sdk/lib/minimal/rpc/server.d.ts | 622 + .../stellar-sdk/lib/minimal/rpc/server.js | 896 + .../lib/minimal/rpc/transaction.d.ts | 21 + .../lib/minimal/rpc/transaction.js | 53 + .../stellar-sdk/lib/minimal/rpc/utils.d.ts | 1 + .../stellar-sdk/lib/minimal/rpc/utils.js | 9 + .../lib/minimal/stellartoml/index.d.ts | 132 + .../lib/minimal/stellartoml/index.js | 79 + .../stellar-sdk/lib/minimal/utils.d.ts | 20 + node_modules/stellar-sdk/lib/minimal/utils.js | 38 + .../lib/minimal/webauth/errors.d.ts | 13 + .../stellar-sdk/lib/minimal/webauth/errors.js | 36 + .../lib/minimal/webauth/index.d.ts | 2 + .../stellar-sdk/lib/minimal/webauth/index.js | 27 + .../lib/minimal/webauth/utils.d.ts | 307 + .../stellar-sdk/lib/minimal/webauth/utils.js | 332 + .../stellar-sdk/lib/no-axios/browser.d.ts | 6 + .../stellar-sdk/lib/no-axios/browser.js | 35 + .../stellar-sdk/lib/no-axios/config.d.ts | 64 + .../stellar-sdk/lib/no-axios/config.js | 51 + .../contract/assembled_transaction.d.ts | 627 + .../contract/assembled_transaction.js | 839 + .../no-axios/contract/basic_node_signer.d.ts | 18 + .../no-axios/contract/basic_node_signer.js | 60 + .../lib/no-axios/contract/client.d.ts | 66 + .../lib/no-axios/contract/client.js | 352 + .../lib/no-axios/contract/index.d.ts | 7 + .../lib/no-axios/contract/index.js | 82 + .../lib/no-axios/contract/rust_result.d.ts | 81 + .../lib/no-axios/contract/rust_result.js | 66 + .../no-axios/contract/sent_transaction.d.ts | 86 + .../lib/no-axios/contract/sent_transaction.js | 151 + .../lib/no-axios/contract/spec.d.ts | 152 + .../stellar-sdk/lib/no-axios/contract/spec.js | 1017 + .../lib/no-axios/contract/types.d.ts | 244 + .../lib/no-axios/contract/types.js | 9 + .../lib/no-axios/contract/utils.d.ts | 46 + .../lib/no-axios/contract/utils.js | 123 + .../errors/account_requires_memo.d.ts | 24 + .../no-axios/errors/account_requires_memo.js | 38 + .../lib/no-axios/errors/bad_request.d.ts | 14 + .../lib/no-axios/errors/bad_request.js | 34 + .../lib/no-axios/errors/bad_response.d.ts | 17 + .../lib/no-axios/errors/bad_response.js | 34 + .../lib/no-axios/errors/index.d.ts | 5 + .../stellar-sdk/lib/no-axios/errors/index.js | 60 + .../lib/no-axios/errors/network.d.ts | 33 + .../lib/no-axios/errors/network.js | 41 + .../lib/no-axios/errors/not_found.d.ts | 14 + .../lib/no-axios/errors/not_found.js | 34 + .../lib/no-axios/federation/api.d.ts | 32 + .../lib/no-axios/federation/api.js | 7 + .../lib/no-axios/federation/index.d.ts | 2 + .../lib/no-axios/federation/index.js | 34 + .../lib/no-axios/federation/server.d.ts | 116 + .../lib/no-axios/federation/server.js | 252 + .../lib/no-axios/friendbot/index.d.ts | 6 + .../lib/no-axios/friendbot/index.js | 7 + .../horizon/account_call_builder.d.ts | 56 + .../no-axios/horizon/account_call_builder.js | 62 + .../no-axios/horizon/account_response.d.ts | 61 + .../lib/no-axios/horizon/account_response.js | 49 + .../no-axios/horizon/assets_call_builder.d.ts | 27 + .../no-axios/horizon/assets_call_builder.js | 43 + .../lib/no-axios/horizon/call_builder.d.ts | 128 + .../lib/no-axios/horizon/call_builder.js | 362 + .../claimable_balances_call_builder.d.ts | 50 + .../claimable_balances_call_builder.js | 56 + .../no-axios/horizon/effect_call_builder.d.ts | 53 + .../no-axios/horizon/effect_call_builder.js | 56 + .../no-axios/horizon/friendbot_builder.d.ts | 4 + .../lib/no-axios/horizon/friendbot_builder.js | 32 + .../lib/no-axios/horizon/horizon_api.d.ts | 542 + .../lib/no-axios/horizon/horizon_api.js | 96 + .../horizon/horizon_axios_client.d.ts | 37 + .../no-axios/horizon/horizon_axios_client.js | 60 + .../lib/no-axios/horizon/index.d.ts | 8 + .../stellar-sdk/lib/no-axios/horizon/index.js | 78 + .../no-axios/horizon/ledger_call_builder.d.ts | 23 + .../no-axios/horizon/ledger_call_builder.js | 37 + .../horizon/liquidity_pool_call_builder.d.ts | 37 + .../horizon/liquidity_pool_call_builder.js | 59 + .../no-axios/horizon/offer_call_builder.d.ts | 65 + .../no-axios/horizon/offer_call_builder.js | 79 + .../horizon/operation_call_builder.d.ts | 69 + .../horizon/operation_call_builder.js | 69 + .../horizon/orderbook_call_builder.d.ts | 20 + .../horizon/orderbook_call_builder.js | 45 + .../no-axios/horizon/path_call_builder.d.ts | 35 + .../lib/no-axios/horizon/path_call_builder.js | 41 + .../horizon/payment_call_builder.d.ts | 47 + .../no-axios/horizon/payment_call_builder.js | 52 + .../lib/no-axios/horizon/server.d.ts | 394 + .../lib/no-axios/horizon/server.js | 571 + .../lib/no-axios/horizon/server_api.d.ts | 264 + .../lib/no-axios/horizon/server_api.js | 24 + .../strict_receive_path_call_builder.d.ts | 38 + .../strict_receive_path_call_builder.js | 50 + .../strict_send_path_call_builder.d.ts | 38 + .../horizon/strict_send_path_call_builder.js | 50 + .../trade_aggregation_call_builder.d.ts | 49 + .../horizon/trade_aggregation_call_builder.js | 76 + .../no-axios/horizon/trades_call_builder.d.ts | 52 + .../no-axios/horizon/trades_call_builder.js | 72 + .../horizon/transaction_call_builder.d.ts | 60 + .../horizon/transaction_call_builder.js | 64 + .../lib/no-axios/horizon/types/account.d.ts | 5 + .../lib/no-axios/horizon/types/account.js | 5 + .../lib/no-axios/horizon/types/assets.d.ts | 17 + .../lib/no-axios/horizon/types/assets.js | 5 + .../lib/no-axios/horizon/types/effects.d.ts | 285 + .../lib/no-axios/horizon/types/effects.js | 62 + .../lib/no-axios/horizon/types/offer.d.ts | 20 + .../lib/no-axios/horizon/types/offer.js | 5 + .../lib/no-axios/horizon/types/trade.d.ts | 14 + .../lib/no-axios/horizon/types/trade.js | 5 + .../no-axios/http-client/axios-client.d.ts | 2 + .../lib/no-axios/http-client/axios-client.js | 10 + .../no-axios/http-client/fetch-client.d.ts | 11 + .../lib/no-axios/http-client/fetch-client.js | 229 + .../lib/no-axios/http-client/index.d.ts | 5 + .../lib/no-axios/http-client/index.js | 33 + .../lib/no-axios/http-client/types.d.ts | 70 + .../lib/no-axios/http-client/types.js | 34 + .../stellar-sdk/lib/no-axios/index.d.ts | 32 + .../stellar-sdk/lib/no-axios/index.js | 80 + .../stellar-sdk/lib/no-axios/rpc/api.d.ts | 363 + .../stellar-sdk/lib/no-axios/rpc/api.js | 32 + .../stellar-sdk/lib/no-axios/rpc/axios.d.ts | 4 + .../stellar-sdk/lib/no-axios/rpc/axios.js | 15 + .../stellar-sdk/lib/no-axios/rpc/browser.d.ts | 4 + .../stellar-sdk/lib/no-axios/rpc/browser.js | 27 + .../stellar-sdk/lib/no-axios/rpc/index.d.ts | 8 + .../stellar-sdk/lib/no-axios/rpc/index.js | 86 + .../stellar-sdk/lib/no-axios/rpc/jsonrpc.d.ts | 35 + .../stellar-sdk/lib/no-axios/rpc/jsonrpc.js | 52 + .../stellar-sdk/lib/no-axios/rpc/parsers.d.ts | 39 + .../stellar-sdk/lib/no-axios/rpc/parsers.js | 156 + .../stellar-sdk/lib/no-axios/rpc/server.d.ts | 622 + .../stellar-sdk/lib/no-axios/rpc/server.js | 896 + .../lib/no-axios/rpc/transaction.d.ts | 21 + .../lib/no-axios/rpc/transaction.js | 53 + .../stellar-sdk/lib/no-axios/rpc/utils.d.ts | 1 + .../stellar-sdk/lib/no-axios/rpc/utils.js | 9 + .../lib/no-axios/stellartoml/index.d.ts | 132 + .../lib/no-axios/stellartoml/index.js | 79 + .../stellar-sdk/lib/no-axios/utils.d.ts | 20 + .../stellar-sdk/lib/no-axios/utils.js | 38 + .../lib/no-axios/webauth/errors.d.ts | 13 + .../lib/no-axios/webauth/errors.js | 36 + .../lib/no-axios/webauth/index.d.ts | 2 + .../stellar-sdk/lib/no-axios/webauth/index.js | 27 + .../lib/no-axios/webauth/utils.d.ts | 307 + .../stellar-sdk/lib/no-axios/webauth/utils.js | 332 + .../lib/no-eventsource/browser.d.ts | 6 + .../stellar-sdk/lib/no-eventsource/browser.js | 35 + .../lib/no-eventsource/config.d.ts | 64 + .../stellar-sdk/lib/no-eventsource/config.js | 51 + .../contract/assembled_transaction.d.ts | 627 + .../contract/assembled_transaction.js | 839 + .../contract/basic_node_signer.d.ts | 18 + .../contract/basic_node_signer.js | 60 + .../lib/no-eventsource/contract/client.d.ts | 66 + .../lib/no-eventsource/contract/client.js | 352 + .../lib/no-eventsource/contract/index.d.ts | 7 + .../lib/no-eventsource/contract/index.js | 82 + .../no-eventsource/contract/rust_result.d.ts | 81 + .../no-eventsource/contract/rust_result.js | 66 + .../contract/sent_transaction.d.ts | 86 + .../contract/sent_transaction.js | 151 + .../lib/no-eventsource/contract/spec.d.ts | 152 + .../lib/no-eventsource/contract/spec.js | 1017 + .../lib/no-eventsource/contract/types.d.ts | 244 + .../lib/no-eventsource/contract/types.js | 9 + .../lib/no-eventsource/contract/utils.d.ts | 46 + .../lib/no-eventsource/contract/utils.js | 123 + .../errors/account_requires_memo.d.ts | 24 + .../errors/account_requires_memo.js | 38 + .../no-eventsource/errors/bad_request.d.ts | 14 + .../lib/no-eventsource/errors/bad_request.js | 34 + .../no-eventsource/errors/bad_response.d.ts | 17 + .../lib/no-eventsource/errors/bad_response.js | 34 + .../lib/no-eventsource/errors/index.d.ts | 5 + .../lib/no-eventsource/errors/index.js | 60 + .../lib/no-eventsource/errors/network.d.ts | 33 + .../lib/no-eventsource/errors/network.js | 41 + .../lib/no-eventsource/errors/not_found.d.ts | 14 + .../lib/no-eventsource/errors/not_found.js | 34 + .../lib/no-eventsource/federation/api.d.ts | 32 + .../lib/no-eventsource/federation/api.js | 7 + .../lib/no-eventsource/federation/index.d.ts | 2 + .../lib/no-eventsource/federation/index.js | 34 + .../lib/no-eventsource/federation/server.d.ts | 116 + .../lib/no-eventsource/federation/server.js | 252 + .../lib/no-eventsource/friendbot/index.d.ts | 6 + .../lib/no-eventsource/friendbot/index.js | 7 + .../horizon/account_call_builder.d.ts | 56 + .../horizon/account_call_builder.js | 62 + .../horizon/account_response.d.ts | 61 + .../horizon/account_response.js | 49 + .../horizon/assets_call_builder.d.ts | 27 + .../horizon/assets_call_builder.js | 43 + .../no-eventsource/horizon/call_builder.d.ts | 128 + .../no-eventsource/horizon/call_builder.js | 362 + .../claimable_balances_call_builder.d.ts | 50 + .../claimable_balances_call_builder.js | 56 + .../horizon/effect_call_builder.d.ts | 53 + .../horizon/effect_call_builder.js | 56 + .../horizon/friendbot_builder.d.ts | 4 + .../horizon/friendbot_builder.js | 32 + .../no-eventsource/horizon/horizon_api.d.ts | 542 + .../lib/no-eventsource/horizon/horizon_api.js | 96 + .../horizon/horizon_axios_client.d.ts | 37 + .../horizon/horizon_axios_client.js | 60 + .../lib/no-eventsource/horizon/index.d.ts | 8 + .../lib/no-eventsource/horizon/index.js | 78 + .../horizon/ledger_call_builder.d.ts | 23 + .../horizon/ledger_call_builder.js | 37 + .../horizon/liquidity_pool_call_builder.d.ts | 37 + .../horizon/liquidity_pool_call_builder.js | 59 + .../horizon/offer_call_builder.d.ts | 65 + .../horizon/offer_call_builder.js | 79 + .../horizon/operation_call_builder.d.ts | 69 + .../horizon/operation_call_builder.js | 69 + .../horizon/orderbook_call_builder.d.ts | 20 + .../horizon/orderbook_call_builder.js | 45 + .../horizon/path_call_builder.d.ts | 35 + .../horizon/path_call_builder.js | 41 + .../horizon/payment_call_builder.d.ts | 47 + .../horizon/payment_call_builder.js | 52 + .../lib/no-eventsource/horizon/server.d.ts | 394 + .../lib/no-eventsource/horizon/server.js | 571 + .../no-eventsource/horizon/server_api.d.ts | 264 + .../lib/no-eventsource/horizon/server_api.js | 24 + .../strict_receive_path_call_builder.d.ts | 38 + .../strict_receive_path_call_builder.js | 50 + .../strict_send_path_call_builder.d.ts | 38 + .../horizon/strict_send_path_call_builder.js | 50 + .../trade_aggregation_call_builder.d.ts | 49 + .../horizon/trade_aggregation_call_builder.js | 76 + .../horizon/trades_call_builder.d.ts | 52 + .../horizon/trades_call_builder.js | 72 + .../horizon/transaction_call_builder.d.ts | 60 + .../horizon/transaction_call_builder.js | 64 + .../no-eventsource/horizon/types/account.d.ts | 5 + .../no-eventsource/horizon/types/account.js | 5 + .../no-eventsource/horizon/types/assets.d.ts | 17 + .../no-eventsource/horizon/types/assets.js | 5 + .../no-eventsource/horizon/types/effects.d.ts | 285 + .../no-eventsource/horizon/types/effects.js | 62 + .../no-eventsource/horizon/types/offer.d.ts | 20 + .../lib/no-eventsource/horizon/types/offer.js | 5 + .../no-eventsource/horizon/types/trade.d.ts | 14 + .../lib/no-eventsource/horizon/types/trade.js | 5 + .../http-client/axios-client.d.ts | 2 + .../http-client/axios-client.js | 10 + .../http-client/fetch-client.d.ts | 11 + .../http-client/fetch-client.js | 229 + .../lib/no-eventsource/http-client/index.d.ts | 5 + .../lib/no-eventsource/http-client/index.js | 33 + .../lib/no-eventsource/http-client/types.d.ts | 70 + .../lib/no-eventsource/http-client/types.js | 34 + .../stellar-sdk/lib/no-eventsource/index.d.ts | 32 + .../stellar-sdk/lib/no-eventsource/index.js | 80 + .../lib/no-eventsource/rpc/api.d.ts | 363 + .../stellar-sdk/lib/no-eventsource/rpc/api.js | 32 + .../lib/no-eventsource/rpc/axios.d.ts | 4 + .../lib/no-eventsource/rpc/axios.js | 15 + .../lib/no-eventsource/rpc/browser.d.ts | 4 + .../lib/no-eventsource/rpc/browser.js | 27 + .../lib/no-eventsource/rpc/index.d.ts | 8 + .../lib/no-eventsource/rpc/index.js | 86 + .../lib/no-eventsource/rpc/jsonrpc.d.ts | 35 + .../lib/no-eventsource/rpc/jsonrpc.js | 52 + .../lib/no-eventsource/rpc/parsers.d.ts | 39 + .../lib/no-eventsource/rpc/parsers.js | 156 + .../lib/no-eventsource/rpc/server.d.ts | 622 + .../lib/no-eventsource/rpc/server.js | 896 + .../lib/no-eventsource/rpc/transaction.d.ts | 21 + .../lib/no-eventsource/rpc/transaction.js | 53 + .../lib/no-eventsource/rpc/utils.d.ts | 1 + .../lib/no-eventsource/rpc/utils.js | 9 + .../lib/no-eventsource/stellartoml/index.d.ts | 132 + .../lib/no-eventsource/stellartoml/index.js | 79 + .../stellar-sdk/lib/no-eventsource/utils.d.ts | 20 + .../stellar-sdk/lib/no-eventsource/utils.js | 38 + .../lib/no-eventsource/webauth/errors.d.ts | 13 + .../lib/no-eventsource/webauth/errors.js | 36 + .../lib/no-eventsource/webauth/index.d.ts | 2 + .../lib/no-eventsource/webauth/index.js | 27 + .../lib/no-eventsource/webauth/utils.d.ts | 307 + .../lib/no-eventsource/webauth/utils.js | 332 + node_modules/stellar-sdk/lib/rpc/api.d.ts | 363 + node_modules/stellar-sdk/lib/rpc/api.js | 32 + node_modules/stellar-sdk/lib/rpc/axios.d.ts | 4 + node_modules/stellar-sdk/lib/rpc/axios.js | 15 + node_modules/stellar-sdk/lib/rpc/browser.d.ts | 4 + node_modules/stellar-sdk/lib/rpc/browser.js | 27 + node_modules/stellar-sdk/lib/rpc/index.d.ts | 8 + node_modules/stellar-sdk/lib/rpc/index.js | 86 + node_modules/stellar-sdk/lib/rpc/jsonrpc.d.ts | 35 + node_modules/stellar-sdk/lib/rpc/jsonrpc.js | 52 + node_modules/stellar-sdk/lib/rpc/parsers.d.ts | 39 + node_modules/stellar-sdk/lib/rpc/parsers.js | 156 + node_modules/stellar-sdk/lib/rpc/server.d.ts | 622 + node_modules/stellar-sdk/lib/rpc/server.js | 896 + .../stellar-sdk/lib/rpc/transaction.d.ts | 21 + .../stellar-sdk/lib/rpc/transaction.js | 53 + node_modules/stellar-sdk/lib/rpc/utils.d.ts | 1 + node_modules/stellar-sdk/lib/rpc/utils.js | 9 + .../stellar-sdk/lib/stellartoml/index.d.ts | 132 + .../stellar-sdk/lib/stellartoml/index.js | 79 + node_modules/stellar-sdk/lib/utils.d.ts | 20 + node_modules/stellar-sdk/lib/utils.js | 38 + .../stellar-sdk/lib/webauth/errors.d.ts | 13 + .../stellar-sdk/lib/webauth/errors.js | 36 + .../stellar-sdk/lib/webauth/index.d.ts | 2 + node_modules/stellar-sdk/lib/webauth/index.js | 27 + .../stellar-sdk/lib/webauth/utils.d.ts | 307 + node_modules/stellar-sdk/lib/webauth/utils.js | 332 + node_modules/stellar-sdk/package.json | 229 + .../stellar-sdk/types/dom-monkeypatch.d.ts | 126 + node_modules/to-buffer/.github/FUNDING.yml | 12 + node_modules/to-buffer/CHANGELOG.md | 81 + node_modules/to-buffer/LICENSE | 21 + node_modules/to-buffer/README.md | 44 + node_modules/to-buffer/index.js | 109 + node_modules/to-buffer/package.json | 62 + node_modules/toml/.jshintrc | 18 + node_modules/toml/.travis.yml | 7 + node_modules/toml/CHANGELOG.md | 116 + node_modules/toml/LICENSE | 22 + node_modules/toml/README.md | 93 + node_modules/toml/benchmark.js | 12 + node_modules/toml/index.d.ts | 3 + node_modules/toml/index.js | 9 + node_modules/toml/lib/compiler.js | 195 + node_modules/toml/lib/parser.js | 3841 + node_modules/toml/package.json | 24 + node_modules/toml/src/toml.pegjs | 231 + node_modules/toml/test/bad.toml | 5 + node_modules/toml/test/example.toml | 32 + node_modules/toml/test/hard_example.toml | 33 + node_modules/toml/test/inline_tables.toml | 10 + node_modules/toml/test/literal_strings.toml | 5 + .../toml/test/multiline_eat_whitespace.toml | 15 + .../toml/test/multiline_literal_strings.toml | 7 + node_modules/toml/test/multiline_strings.toml | 6 + node_modules/toml/test/smoke.js | 22 + node_modules/toml/test/table_arrays_easy.toml | 10 + node_modules/toml/test/table_arrays_hard.toml | 31 + node_modules/toml/test/test_toml.js | 596 + node_modules/tweetnacl/AUTHORS.md | 27 + node_modules/tweetnacl/CHANGELOG.md | 283 + node_modules/tweetnacl/LICENSE | 24 + .../tweetnacl/PULL_REQUEST_TEMPLATE.md | 20 + node_modules/tweetnacl/README.md | 494 + node_modules/tweetnacl/nacl-fast.js | 2391 + node_modules/tweetnacl/nacl-fast.min.js | 1 + node_modules/tweetnacl/nacl.d.ts | 98 + node_modules/tweetnacl/nacl.js | 1178 + node_modules/tweetnacl/nacl.min.js | 1 + node_modules/tweetnacl/package.json | 56 + node_modules/typed-array-buffer/.eslintrc | 13 + .../typed-array-buffer/.github/FUNDING.yml | 12 + node_modules/typed-array-buffer/.nycrc | 13 + node_modules/typed-array-buffer/CHANGELOG.md | 50 + node_modules/typed-array-buffer/LICENSE | 21 + node_modules/typed-array-buffer/README.md | 42 + node_modules/typed-array-buffer/index.d.ts | 9 + node_modules/typed-array-buffer/index.js | 19 + node_modules/typed-array-buffer/package.json | 82 + node_modules/typed-array-buffer/test/index.js | 23 + node_modules/typed-array-buffer/tsconfig.json | 9 + node_modules/urijs/LICENSE.txt | 21 + node_modules/urijs/README.md | 249 + node_modules/urijs/package.json | 73 + node_modules/urijs/src/IPv6.js | 185 + node_modules/urijs/src/SecondLevelDomains.js | 245 + node_modules/urijs/src/URI.fragmentQuery.js | 121 + node_modules/urijs/src/URI.fragmentURI.js | 97 + node_modules/urijs/src/URI.js | 2364 + node_modules/urijs/src/URI.min.js | 94 + node_modules/urijs/src/URITemplate.js | 516 + node_modules/urijs/src/jquery.URI.js | 234 + node_modules/urijs/src/jquery.URI.min.js | 7 + node_modules/urijs/src/punycode.js | 533 + node_modules/which-typed-array/.editorconfig | 20 + node_modules/which-typed-array/.eslintrc | 10 + .../which-typed-array/.github/FUNDING.yml | 12 + node_modules/which-typed-array/.nycrc | 13 + node_modules/which-typed-array/CHANGELOG.md | 269 + node_modules/which-typed-array/LICENSE | 22 + node_modules/which-typed-array/README.md | 70 + node_modules/which-typed-array/index.d.ts | 66 + node_modules/which-typed-array/index.js | 122 + node_modules/which-typed-array/package.json | 130 + node_modules/which-typed-array/test/index.js | 105 + node_modules/which-typed-array/tsconfig.json | 9 + node_modules/xtend/.jshintrc | 30 + node_modules/xtend/LICENSE | 20 + node_modules/xtend/README.md | 32 + node_modules/xtend/immutable.js | 19 + node_modules/xtend/mutable.js | 17 + node_modules/xtend/package.json | 55 + node_modules/xtend/test.js | 103 + package-lock.json | 759 +- package.json | 4 +- 1411 files changed, 496955 insertions(+), 4 deletions(-) create mode 100644 .env.example create mode 100644 node_modules/.bin/sha.js create mode 100644 node_modules/.bin/sha.js.cmd create mode 100644 node_modules/.bin/sha.js.ps1 create mode 100644 node_modules/@stellar/js-xdr/.eslintrc.js create mode 100644 node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 node_modules/@stellar/js-xdr/.github/workflows/codeql.yml create mode 100644 node_modules/@stellar/js-xdr/.github/workflows/npm-publish.yml create mode 100644 node_modules/@stellar/js-xdr/.github/workflows/tests.yml create mode 100644 node_modules/@stellar/js-xdr/.prettierignore create mode 100644 node_modules/@stellar/js-xdr/.travis.yml create mode 100644 node_modules/@stellar/js-xdr/CHANGELOG.md create mode 100644 node_modules/@stellar/js-xdr/CONTRIBUTING.md create mode 100644 node_modules/@stellar/js-xdr/Gemfile create mode 100644 node_modules/@stellar/js-xdr/Gemfile.lock create mode 100644 node_modules/@stellar/js-xdr/LICENSE.md create mode 100644 node_modules/@stellar/js-xdr/README.md create mode 100644 node_modules/@stellar/js-xdr/babel.config.json create mode 100644 node_modules/@stellar/js-xdr/bower.json create mode 100644 node_modules/@stellar/js-xdr/buffer.js create mode 100644 node_modules/@stellar/js-xdr/dist/xdr.js create mode 100644 node_modules/@stellar/js-xdr/dist/xdr.js.LICENSE.txt create mode 100644 node_modules/@stellar/js-xdr/dist/xdr.js.map create mode 100644 node_modules/@stellar/js-xdr/examples/enum.js create mode 100644 node_modules/@stellar/js-xdr/examples/linked_list.js create mode 100644 node_modules/@stellar/js-xdr/examples/struct.js create mode 100644 node_modules/@stellar/js-xdr/examples/test.x create mode 100644 node_modules/@stellar/js-xdr/examples/typedef.js create mode 100644 node_modules/@stellar/js-xdr/examples/union.js create mode 100644 node_modules/@stellar/js-xdr/karma.conf.js create mode 100644 node_modules/@stellar/js-xdr/lib/xdr.js create mode 100644 node_modules/@stellar/js-xdr/lib/xdr.js.map create mode 100644 node_modules/@stellar/js-xdr/package.json create mode 100644 node_modules/@stellar/js-xdr/prettier.config.js create mode 100644 node_modules/@stellar/js-xdr/src/.eslintrc.js create mode 100644 node_modules/@stellar/js-xdr/src/array.js create mode 100644 node_modules/@stellar/js-xdr/src/bigint-encoder.js create mode 100644 node_modules/@stellar/js-xdr/src/bool.js create mode 100644 node_modules/@stellar/js-xdr/src/browser.js create mode 100644 node_modules/@stellar/js-xdr/src/config.js create mode 100644 node_modules/@stellar/js-xdr/src/double.js create mode 100644 node_modules/@stellar/js-xdr/src/enum.js create mode 100644 node_modules/@stellar/js-xdr/src/errors.js create mode 100644 node_modules/@stellar/js-xdr/src/float.js create mode 100644 node_modules/@stellar/js-xdr/src/hyper.js create mode 100644 node_modules/@stellar/js-xdr/src/index.js create mode 100644 node_modules/@stellar/js-xdr/src/int.js create mode 100644 node_modules/@stellar/js-xdr/src/large-int.js create mode 100644 node_modules/@stellar/js-xdr/src/opaque.js create mode 100644 node_modules/@stellar/js-xdr/src/option.js create mode 100644 node_modules/@stellar/js-xdr/src/quadruple.js create mode 100644 node_modules/@stellar/js-xdr/src/reference.js create mode 100644 node_modules/@stellar/js-xdr/src/serialization/xdr-reader.js create mode 100644 node_modules/@stellar/js-xdr/src/serialization/xdr-writer.js create mode 100644 node_modules/@stellar/js-xdr/src/string.js create mode 100644 node_modules/@stellar/js-xdr/src/struct.js create mode 100644 node_modules/@stellar/js-xdr/src/types.js create mode 100644 node_modules/@stellar/js-xdr/src/union.js create mode 100644 node_modules/@stellar/js-xdr/src/unsigned-hyper.js create mode 100644 node_modules/@stellar/js-xdr/src/unsigned-int.js create mode 100644 node_modules/@stellar/js-xdr/src/var-array.js create mode 100644 node_modules/@stellar/js-xdr/src/var-opaque.js create mode 100644 node_modules/@stellar/js-xdr/src/void.js create mode 100644 node_modules/@stellar/js-xdr/src/xdr-type.js create mode 100644 node_modules/@stellar/js-xdr/test/.eslintrc.js create mode 100644 node_modules/@stellar/js-xdr/test/setup.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/array_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/bigint-encoder_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/bool_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/define_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/double_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/dynamic-buffer-resize_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/enum_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/float_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/hyper_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/int_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/opaque_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/option_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/quadruple_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/string_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/struct_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/struct_union_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/union_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/unsigned-hyper_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/unsigned-int_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/var-array_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/var-opaque_test.js create mode 100644 node_modules/@stellar/js-xdr/test/unit/void_test.js create mode 100644 node_modules/@stellar/js-xdr/webpack.config.js create mode 100644 node_modules/@stellar/stellar-base/CHANGELOG.md create mode 100644 node_modules/@stellar/stellar-base/LICENSE create mode 100644 node_modules/@stellar/stellar-base/README.md create mode 100644 node_modules/@stellar/stellar-base/dist/stellar-base.js create mode 100644 node_modules/@stellar/stellar-base/dist/stellar-base.min.js create mode 100644 node_modules/@stellar/stellar-base/lib/account.js create mode 100644 node_modules/@stellar/stellar-base/lib/address.js create mode 100644 node_modules/@stellar/stellar-base/lib/asset.js create mode 100644 node_modules/@stellar/stellar-base/lib/auth.js create mode 100644 node_modules/@stellar/stellar-base/lib/claimant.js create mode 100644 node_modules/@stellar/stellar-base/lib/contract.js create mode 100644 node_modules/@stellar/stellar-base/lib/events.js create mode 100644 node_modules/@stellar/stellar-base/lib/fee_bump_transaction.js create mode 100644 node_modules/@stellar/stellar-base/lib/generated/curr_generated.js create mode 100644 node_modules/@stellar/stellar-base/lib/generated/next_generated.js create mode 100644 node_modules/@stellar/stellar-base/lib/get_liquidity_pool_id.js create mode 100644 node_modules/@stellar/stellar-base/lib/hashing.js create mode 100644 node_modules/@stellar/stellar-base/lib/index.js create mode 100644 node_modules/@stellar/stellar-base/lib/invocation.js create mode 100644 node_modules/@stellar/stellar-base/lib/jsxdr.js create mode 100644 node_modules/@stellar/stellar-base/lib/keypair.js create mode 100644 node_modules/@stellar/stellar-base/lib/liquidity_pool_asset.js create mode 100644 node_modules/@stellar/stellar-base/lib/liquidity_pool_id.js create mode 100644 node_modules/@stellar/stellar-base/lib/memo.js create mode 100644 node_modules/@stellar/stellar-base/lib/muxed_account.js create mode 100644 node_modules/@stellar/stellar-base/lib/network.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/index.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/int128.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/int256.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/sc_int.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/uint128.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/uint256.js create mode 100644 node_modules/@stellar/stellar-base/lib/numbers/xdr_large_int.js create mode 100644 node_modules/@stellar/stellar-base/lib/operation.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/account_merge.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/allow_trust.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/begin_sponsoring_future_reserves.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/bump_sequence.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/change_trust.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/claim_claimable_balance.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/clawback.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/clawback_claimable_balance.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/create_account.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/create_claimable_balance.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/create_passive_sell_offer.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/end_sponsoring_future_reserves.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/extend_footprint_ttl.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/index.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/inflation.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/invoke_host_function.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_deposit.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_withdraw.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/manage_buy_offer.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/manage_data.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/manage_sell_offer.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_receive.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_send.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/payment.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/restore_footprint.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/revoke_sponsorship.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/set_options.js create mode 100644 node_modules/@stellar/stellar-base/lib/operations/set_trustline_flags.js create mode 100644 node_modules/@stellar/stellar-base/lib/scval.js create mode 100644 node_modules/@stellar/stellar-base/lib/signerkey.js create mode 100644 node_modules/@stellar/stellar-base/lib/signing.js create mode 100644 node_modules/@stellar/stellar-base/lib/soroban.js create mode 100644 node_modules/@stellar/stellar-base/lib/sorobandata_builder.js create mode 100644 node_modules/@stellar/stellar-base/lib/strkey.js create mode 100644 node_modules/@stellar/stellar-base/lib/transaction.js create mode 100644 node_modules/@stellar/stellar-base/lib/transaction_base.js create mode 100644 node_modules/@stellar/stellar-base/lib/transaction_builder.js create mode 100644 node_modules/@stellar/stellar-base/lib/util/bignumber.js create mode 100644 node_modules/@stellar/stellar-base/lib/util/checksum.js create mode 100644 node_modules/@stellar/stellar-base/lib/util/continued_fraction.js create mode 100644 node_modules/@stellar/stellar-base/lib/util/decode_encode_muxed_account.js create mode 100644 node_modules/@stellar/stellar-base/lib/util/util.js create mode 100644 node_modules/@stellar/stellar-base/lib/xdr.js create mode 100644 node_modules/@stellar/stellar-base/package.json create mode 100644 node_modules/@stellar/stellar-base/types/curr.d.ts create mode 100644 node_modules/@stellar/stellar-base/types/index.d.ts create mode 100644 node_modules/@stellar/stellar-base/types/next.d.ts create mode 100644 node_modules/@stellar/stellar-base/types/xdr.d.ts create mode 100644 node_modules/asynckit/LICENSE create mode 100644 node_modules/asynckit/README.md create mode 100644 node_modules/asynckit/bench.js create mode 100644 node_modules/asynckit/index.js create mode 100644 node_modules/asynckit/lib/abort.js create mode 100644 node_modules/asynckit/lib/async.js create mode 100644 node_modules/asynckit/lib/defer.js create mode 100644 node_modules/asynckit/lib/iterate.js create mode 100644 node_modules/asynckit/lib/readable_asynckit.js create mode 100644 node_modules/asynckit/lib/readable_parallel.js create mode 100644 node_modules/asynckit/lib/readable_serial.js create mode 100644 node_modules/asynckit/lib/readable_serial_ordered.js create mode 100644 node_modules/asynckit/lib/state.js create mode 100644 node_modules/asynckit/lib/streamify.js create mode 100644 node_modules/asynckit/lib/terminator.js create mode 100644 node_modules/asynckit/package.json create mode 100644 node_modules/asynckit/parallel.js create mode 100644 node_modules/asynckit/serial.js create mode 100644 node_modules/asynckit/serialOrdered.js create mode 100644 node_modules/asynckit/stream.js create mode 100644 node_modules/available-typed-arrays/.eslintrc create mode 100644 node_modules/available-typed-arrays/.github/FUNDING.yml create mode 100644 node_modules/available-typed-arrays/.nycrc create mode 100644 node_modules/available-typed-arrays/CHANGELOG.md create mode 100644 node_modules/available-typed-arrays/LICENSE create mode 100644 node_modules/available-typed-arrays/README.md create mode 100644 node_modules/available-typed-arrays/index.d.ts create mode 100644 node_modules/available-typed-arrays/index.js create mode 100644 node_modules/available-typed-arrays/package.json create mode 100644 node_modules/available-typed-arrays/test/index.js create mode 100644 node_modules/available-typed-arrays/tsconfig.json create mode 100644 node_modules/axios/CHANGELOG.md create mode 100644 node_modules/axios/LICENSE create mode 100644 node_modules/axios/MIGRATION_GUIDE.md create mode 100644 node_modules/axios/README.md create mode 100644 node_modules/axios/dist/axios.js create mode 100644 node_modules/axios/dist/axios.js.map create mode 100644 node_modules/axios/dist/axios.min.js create mode 100644 node_modules/axios/dist/axios.min.js.map create mode 100644 node_modules/axios/dist/browser/axios.cjs create mode 100644 node_modules/axios/dist/browser/axios.cjs.map create mode 100644 node_modules/axios/dist/esm/axios.js create mode 100644 node_modules/axios/dist/esm/axios.js.map create mode 100644 node_modules/axios/dist/esm/axios.min.js create mode 100644 node_modules/axios/dist/esm/axios.min.js.map create mode 100644 node_modules/axios/dist/node/axios.cjs create mode 100644 node_modules/axios/dist/node/axios.cjs.map create mode 100644 node_modules/axios/index.d.cts create mode 100644 node_modules/axios/index.d.ts create mode 100644 node_modules/axios/index.js create mode 100644 node_modules/axios/lib/adapters/README.md create mode 100644 node_modules/axios/lib/adapters/adapters.js create mode 100644 node_modules/axios/lib/adapters/fetch.js create mode 100644 node_modules/axios/lib/adapters/http.js create mode 100644 node_modules/axios/lib/adapters/xhr.js create mode 100644 node_modules/axios/lib/axios.js create mode 100644 node_modules/axios/lib/cancel/CancelToken.js create mode 100644 node_modules/axios/lib/cancel/CanceledError.js create mode 100644 node_modules/axios/lib/cancel/isCancel.js create mode 100644 node_modules/axios/lib/core/Axios.js create mode 100644 node_modules/axios/lib/core/AxiosError.js create mode 100644 node_modules/axios/lib/core/AxiosHeaders.js create mode 100644 node_modules/axios/lib/core/InterceptorManager.js create mode 100644 node_modules/axios/lib/core/README.md create mode 100644 node_modules/axios/lib/core/buildFullPath.js create mode 100644 node_modules/axios/lib/core/dispatchRequest.js create mode 100644 node_modules/axios/lib/core/mergeConfig.js create mode 100644 node_modules/axios/lib/core/settle.js create mode 100644 node_modules/axios/lib/core/transformData.js create mode 100644 node_modules/axios/lib/defaults/index.js create mode 100644 node_modules/axios/lib/defaults/transitional.js create mode 100644 node_modules/axios/lib/env/README.md create mode 100644 node_modules/axios/lib/env/classes/FormData.js create mode 100644 node_modules/axios/lib/env/data.js create mode 100644 node_modules/axios/lib/helpers/AxiosTransformStream.js create mode 100644 node_modules/axios/lib/helpers/AxiosURLSearchParams.js create mode 100644 node_modules/axios/lib/helpers/HttpStatusCode.js create mode 100644 node_modules/axios/lib/helpers/README.md create mode 100644 node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js create mode 100644 node_modules/axios/lib/helpers/bind.js create mode 100644 node_modules/axios/lib/helpers/buildURL.js create mode 100644 node_modules/axios/lib/helpers/callbackify.js create mode 100644 node_modules/axios/lib/helpers/combineURLs.js create mode 100644 node_modules/axios/lib/helpers/composeSignals.js create mode 100644 node_modules/axios/lib/helpers/cookies.js create mode 100644 node_modules/axios/lib/helpers/deprecatedMethod.js create mode 100644 node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js create mode 100644 node_modules/axios/lib/helpers/formDataToJSON.js create mode 100644 node_modules/axios/lib/helpers/formDataToStream.js create mode 100644 node_modules/axios/lib/helpers/fromDataURI.js create mode 100644 node_modules/axios/lib/helpers/isAbsoluteURL.js create mode 100644 node_modules/axios/lib/helpers/isAxiosError.js create mode 100644 node_modules/axios/lib/helpers/isURLSameOrigin.js create mode 100644 node_modules/axios/lib/helpers/null.js create mode 100644 node_modules/axios/lib/helpers/parseHeaders.js create mode 100644 node_modules/axios/lib/helpers/parseProtocol.js create mode 100644 node_modules/axios/lib/helpers/progressEventReducer.js create mode 100644 node_modules/axios/lib/helpers/readBlob.js create mode 100644 node_modules/axios/lib/helpers/resolveConfig.js create mode 100644 node_modules/axios/lib/helpers/speedometer.js create mode 100644 node_modules/axios/lib/helpers/spread.js create mode 100644 node_modules/axios/lib/helpers/throttle.js create mode 100644 node_modules/axios/lib/helpers/toFormData.js create mode 100644 node_modules/axios/lib/helpers/toURLEncodedForm.js create mode 100644 node_modules/axios/lib/helpers/trackStream.js create mode 100644 node_modules/axios/lib/helpers/validator.js create mode 100644 node_modules/axios/lib/platform/browser/classes/Blob.js create mode 100644 node_modules/axios/lib/platform/browser/classes/FormData.js create mode 100644 node_modules/axios/lib/platform/browser/classes/URLSearchParams.js create mode 100644 node_modules/axios/lib/platform/browser/index.js create mode 100644 node_modules/axios/lib/platform/common/utils.js create mode 100644 node_modules/axios/lib/platform/index.js create mode 100644 node_modules/axios/lib/platform/node/classes/FormData.js create mode 100644 node_modules/axios/lib/platform/node/classes/URLSearchParams.js create mode 100644 node_modules/axios/lib/platform/node/index.js create mode 100644 node_modules/axios/lib/utils.js create mode 100644 node_modules/axios/package.json create mode 100644 node_modules/bare-addon-resolve/LICENSE create mode 100644 node_modules/bare-addon-resolve/README.md create mode 100644 node_modules/bare-addon-resolve/index.d.ts create mode 100644 node_modules/bare-addon-resolve/index.js create mode 100644 node_modules/bare-addon-resolve/lib/errors.d.ts create mode 100644 node_modules/bare-addon-resolve/lib/errors.js create mode 100644 node_modules/bare-addon-resolve/package.json create mode 100644 node_modules/bare-module-resolve/LICENSE create mode 100644 node_modules/bare-module-resolve/README.md create mode 100644 node_modules/bare-module-resolve/index.d.ts create mode 100644 node_modules/bare-module-resolve/index.js create mode 100644 node_modules/bare-module-resolve/lib/errors.d.ts create mode 100644 node_modules/bare-module-resolve/lib/errors.js create mode 100644 node_modules/bare-module-resolve/package.json create mode 100644 node_modules/bare-semver/LICENSE create mode 100644 node_modules/bare-semver/README.md create mode 100644 node_modules/bare-semver/index.d.ts create mode 100644 node_modules/bare-semver/index.js create mode 100644 node_modules/bare-semver/lib/comparator.js create mode 100644 node_modules/bare-semver/lib/constants.js create mode 100644 node_modules/bare-semver/lib/errors.js create mode 100644 node_modules/bare-semver/lib/range.js create mode 100644 node_modules/bare-semver/lib/version.js create mode 100644 node_modules/bare-semver/package.json create mode 100644 node_modules/base32.js/.npmignore create mode 100644 node_modules/base32.js/.travis.yml create mode 100644 node_modules/base32.js/HISTORY.md create mode 100644 node_modules/base32.js/README.md create mode 100644 node_modules/base32.js/base32.js create mode 100644 node_modules/base32.js/dist/.gitkeep create mode 100644 node_modules/base32.js/dist/base32.js create mode 100644 node_modules/base32.js/dist/base32.js.map create mode 100644 node_modules/base32.js/dist/base32.min.js create mode 100644 node_modules/base32.js/dist/base32.min.js.map create mode 100644 node_modules/base32.js/index.js create mode 100644 node_modules/base32.js/jsdoc.json create mode 100644 node_modules/base32.js/karma.conf.js create mode 100644 node_modules/base32.js/package.json create mode 100644 node_modules/base32.js/test/base32_test.js create mode 100644 node_modules/base32.js/test/fixtures.js create mode 100644 node_modules/base32.js/webpack.config.js create mode 100644 node_modules/base64-js/LICENSE create mode 100644 node_modules/base64-js/README.md create mode 100644 node_modules/base64-js/base64js.min.js create mode 100644 node_modules/base64-js/index.d.ts create mode 100644 node_modules/base64-js/index.js create mode 100644 node_modules/base64-js/package.json create mode 100644 node_modules/bignumber.js/CHANGELOG.md create mode 100644 node_modules/bignumber.js/LICENCE.md create mode 100644 node_modules/bignumber.js/README.md create mode 100644 node_modules/bignumber.js/bignumber.d.mts create mode 100644 node_modules/bignumber.js/bignumber.d.ts create mode 100644 node_modules/bignumber.js/bignumber.js create mode 100644 node_modules/bignumber.js/bignumber.mjs create mode 100644 node_modules/bignumber.js/doc/API.html create mode 100644 node_modules/bignumber.js/package.json create mode 100644 node_modules/bignumber.js/types.d.ts create mode 100644 node_modules/buffer/AUTHORS.md create mode 100644 node_modules/buffer/LICENSE create mode 100644 node_modules/buffer/README.md create mode 100644 node_modules/buffer/index.d.ts create mode 100644 node_modules/buffer/index.js create mode 100644 node_modules/buffer/package.json create mode 100644 node_modules/call-bind/.eslintignore create mode 100644 node_modules/call-bind/.eslintrc create mode 100644 node_modules/call-bind/.github/FUNDING.yml create mode 100644 node_modules/call-bind/.nycrc create mode 100644 node_modules/call-bind/CHANGELOG.md create mode 100644 node_modules/call-bind/LICENSE create mode 100644 node_modules/call-bind/README.md create mode 100644 node_modules/call-bind/callBound.js create mode 100644 node_modules/call-bind/index.js create mode 100644 node_modules/call-bind/package.json create mode 100644 node_modules/call-bind/test/callBound.js create mode 100644 node_modules/call-bind/test/index.js create mode 100644 node_modules/combined-stream/License create mode 100644 node_modules/combined-stream/Readme.md create mode 100644 node_modules/combined-stream/lib/combined_stream.js create mode 100644 node_modules/combined-stream/package.json create mode 100644 node_modules/combined-stream/yarn.lock create mode 100644 node_modules/define-data-property/.eslintrc create mode 100644 node_modules/define-data-property/.github/FUNDING.yml create mode 100644 node_modules/define-data-property/.nycrc create mode 100644 node_modules/define-data-property/CHANGELOG.md create mode 100644 node_modules/define-data-property/LICENSE create mode 100644 node_modules/define-data-property/README.md create mode 100644 node_modules/define-data-property/index.d.ts create mode 100644 node_modules/define-data-property/index.js create mode 100644 node_modules/define-data-property/package.json create mode 100644 node_modules/define-data-property/test/index.js create mode 100644 node_modules/define-data-property/tsconfig.json create mode 100644 node_modules/delayed-stream/.npmignore create mode 100644 node_modules/delayed-stream/License create mode 100644 node_modules/delayed-stream/Makefile create mode 100644 node_modules/delayed-stream/Readme.md create mode 100644 node_modules/delayed-stream/lib/delayed_stream.js create mode 100644 node_modules/delayed-stream/package.json create mode 100644 node_modules/es-set-tostringtag/.eslintrc create mode 100644 node_modules/es-set-tostringtag/.nycrc create mode 100644 node_modules/es-set-tostringtag/CHANGELOG.md create mode 100644 node_modules/es-set-tostringtag/LICENSE create mode 100644 node_modules/es-set-tostringtag/README.md create mode 100644 node_modules/es-set-tostringtag/index.d.ts create mode 100644 node_modules/es-set-tostringtag/index.js create mode 100644 node_modules/es-set-tostringtag/package.json create mode 100644 node_modules/es-set-tostringtag/test/index.js create mode 100644 node_modules/es-set-tostringtag/tsconfig.json create mode 100644 node_modules/eventsource/.editorconfig create mode 100644 node_modules/eventsource/CONTRIBUTING.md create mode 100644 node_modules/eventsource/HISTORY.md create mode 100644 node_modules/eventsource/LICENSE create mode 100644 node_modules/eventsource/README.md create mode 100644 node_modules/eventsource/example/eventsource-polyfill.js create mode 100644 node_modules/eventsource/example/index.html create mode 100644 node_modules/eventsource/example/sse-client.js create mode 100644 node_modules/eventsource/example/sse-server.js create mode 100644 node_modules/eventsource/lib/eventsource-polyfill.js create mode 100644 node_modules/eventsource/lib/eventsource.js create mode 100644 node_modules/eventsource/package.json create mode 100644 node_modules/feaxios/LICENSE create mode 100644 node_modules/feaxios/README.md create mode 100644 node_modules/feaxios/dist/client-DGpL0cYy.d.mts create mode 100644 node_modules/feaxios/dist/client-DGpL0cYy.d.ts create mode 100644 node_modules/feaxios/dist/index.d.mts create mode 100644 node_modules/feaxios/dist/index.d.ts create mode 100644 node_modules/feaxios/dist/index.js create mode 100644 node_modules/feaxios/dist/index.mjs create mode 100644 node_modules/feaxios/dist/retry.d.mts create mode 100644 node_modules/feaxios/dist/retry.d.ts create mode 100644 node_modules/feaxios/dist/retry.js create mode 100644 node_modules/feaxios/dist/retry.mjs create mode 100644 node_modules/feaxios/package.json create mode 100644 node_modules/follow-redirects/LICENSE create mode 100644 node_modules/follow-redirects/README.md create mode 100644 node_modules/follow-redirects/debug.js create mode 100644 node_modules/follow-redirects/http.js create mode 100644 node_modules/follow-redirects/https.js create mode 100644 node_modules/follow-redirects/index.js create mode 100644 node_modules/follow-redirects/package.json create mode 100644 node_modules/for-each/.editorconfig create mode 100644 node_modules/for-each/.eslintrc create mode 100644 node_modules/for-each/.github/FUNDING.yml create mode 100644 node_modules/for-each/.github/SECURITY.md create mode 100644 node_modules/for-each/.nycrc create mode 100644 node_modules/for-each/CHANGELOG.md create mode 100644 node_modules/for-each/LICENSE create mode 100644 node_modules/for-each/README.md create mode 100644 node_modules/for-each/index.d.ts create mode 100644 node_modules/for-each/index.js create mode 100644 node_modules/for-each/package.json create mode 100644 node_modules/for-each/test/test.js create mode 100644 node_modules/for-each/tsconfig.json create mode 100644 node_modules/form-data/CHANGELOG.md create mode 100644 node_modules/form-data/License create mode 100644 node_modules/form-data/README.md create mode 100644 node_modules/form-data/index.d.ts create mode 100644 node_modules/form-data/lib/browser.js create mode 100644 node_modules/form-data/lib/form_data.js create mode 100644 node_modules/form-data/lib/populate.js create mode 100644 node_modules/form-data/node_modules/mime-db/HISTORY.md create mode 100644 node_modules/form-data/node_modules/mime-db/LICENSE create mode 100644 node_modules/form-data/node_modules/mime-db/README.md create mode 100644 node_modules/form-data/node_modules/mime-db/db.json create mode 100644 node_modules/form-data/node_modules/mime-db/index.js create mode 100644 node_modules/form-data/node_modules/mime-db/package.json create mode 100644 node_modules/form-data/node_modules/mime-types/HISTORY.md create mode 100644 node_modules/form-data/node_modules/mime-types/LICENSE create mode 100644 node_modules/form-data/node_modules/mime-types/README.md create mode 100644 node_modules/form-data/node_modules/mime-types/index.js create mode 100644 node_modules/form-data/node_modules/mime-types/package.json create mode 100644 node_modules/form-data/package.json create mode 100644 node_modules/has-property-descriptors/.eslintrc create mode 100644 node_modules/has-property-descriptors/.github/FUNDING.yml create mode 100644 node_modules/has-property-descriptors/.nycrc create mode 100644 node_modules/has-property-descriptors/CHANGELOG.md create mode 100644 node_modules/has-property-descriptors/LICENSE create mode 100644 node_modules/has-property-descriptors/README.md create mode 100644 node_modules/has-property-descriptors/index.js create mode 100644 node_modules/has-property-descriptors/package.json create mode 100644 node_modules/has-property-descriptors/test/index.js create mode 100644 node_modules/has-tostringtag/.eslintrc create mode 100644 node_modules/has-tostringtag/.github/FUNDING.yml create mode 100644 node_modules/has-tostringtag/.nycrc create mode 100644 node_modules/has-tostringtag/CHANGELOG.md create mode 100644 node_modules/has-tostringtag/LICENSE create mode 100644 node_modules/has-tostringtag/README.md create mode 100644 node_modules/has-tostringtag/index.d.ts create mode 100644 node_modules/has-tostringtag/index.js create mode 100644 node_modules/has-tostringtag/package.json create mode 100644 node_modules/has-tostringtag/shams.d.ts create mode 100644 node_modules/has-tostringtag/shams.js create mode 100644 node_modules/has-tostringtag/test/index.js create mode 100644 node_modules/has-tostringtag/test/shams/core-js.js create mode 100644 node_modules/has-tostringtag/test/shams/get-own-property-symbols.js create mode 100644 node_modules/has-tostringtag/test/tests.js create mode 100644 node_modules/has-tostringtag/tsconfig.json create mode 100644 node_modules/ieee754/LICENSE create mode 100644 node_modules/ieee754/README.md create mode 100644 node_modules/ieee754/index.d.ts create mode 100644 node_modules/ieee754/index.js create mode 100644 node_modules/ieee754/package.json create mode 100644 node_modules/is-callable/.editorconfig create mode 100644 node_modules/is-callable/.eslintrc create mode 100644 node_modules/is-callable/.github/FUNDING.yml create mode 100644 node_modules/is-callable/.nycrc create mode 100644 node_modules/is-callable/CHANGELOG.md create mode 100644 node_modules/is-callable/LICENSE create mode 100644 node_modules/is-callable/README.md create mode 100644 node_modules/is-callable/index.js create mode 100644 node_modules/is-callable/package.json create mode 100644 node_modules/is-callable/test/index.js create mode 100644 node_modules/is-retry-allowed/index.d.ts create mode 100644 node_modules/is-retry-allowed/index.js create mode 100644 node_modules/is-retry-allowed/license create mode 100644 node_modules/is-retry-allowed/package.json create mode 100644 node_modules/is-retry-allowed/readme.md create mode 100644 node_modules/is-typed-array/.editorconfig create mode 100644 node_modules/is-typed-array/.eslintrc create mode 100644 node_modules/is-typed-array/.github/FUNDING.yml create mode 100644 node_modules/is-typed-array/.nycrc create mode 100644 node_modules/is-typed-array/CHANGELOG.md create mode 100644 node_modules/is-typed-array/LICENSE create mode 100644 node_modules/is-typed-array/README.md create mode 100644 node_modules/is-typed-array/index.d.ts create mode 100644 node_modules/is-typed-array/index.js create mode 100644 node_modules/is-typed-array/package.json create mode 100644 node_modules/is-typed-array/test/index.js create mode 100644 node_modules/is-typed-array/tsconfig.json create mode 100644 node_modules/isarray/LICENSE create mode 100644 node_modules/isarray/README.md create mode 100644 node_modules/isarray/index.js create mode 100644 node_modules/isarray/package.json create mode 100644 node_modules/pg-cloudflare/LICENSE create mode 100644 node_modules/pg-cloudflare/README.md create mode 100644 node_modules/pg-cloudflare/dist/empty.d.ts create mode 100644 node_modules/pg-cloudflare/dist/empty.js create mode 100644 node_modules/pg-cloudflare/dist/empty.js.map create mode 100644 node_modules/pg-cloudflare/dist/index.d.ts create mode 100644 node_modules/pg-cloudflare/dist/index.js create mode 100644 node_modules/pg-cloudflare/dist/index.js.map create mode 100644 node_modules/pg-cloudflare/esm/index.mjs create mode 100644 node_modules/pg-cloudflare/package.json create mode 100644 node_modules/pg-cloudflare/src/empty.ts create mode 100644 node_modules/pg-cloudflare/src/index.ts create mode 100644 node_modules/pg-cloudflare/src/types.d.ts create mode 100644 node_modules/pg-connection-string/LICENSE create mode 100644 node_modules/pg-connection-string/README.md create mode 100644 node_modules/pg-connection-string/esm/index.mjs create mode 100644 node_modules/pg-connection-string/index.d.ts create mode 100644 node_modules/pg-connection-string/index.js create mode 100644 node_modules/pg-connection-string/package.json create mode 100644 node_modules/pg-int8/LICENSE create mode 100644 node_modules/pg-int8/README.md create mode 100644 node_modules/pg-int8/index.js create mode 100644 node_modules/pg-int8/package.json create mode 100644 node_modules/pg-pool/LICENSE create mode 100644 node_modules/pg-pool/README.md create mode 100644 node_modules/pg-pool/esm/index.mjs create mode 100644 node_modules/pg-pool/index.js create mode 100644 node_modules/pg-pool/package.json create mode 100644 node_modules/pg-protocol/LICENSE create mode 100644 node_modules/pg-protocol/README.md create mode 100644 node_modules/pg-protocol/dist/b.d.ts create mode 100644 node_modules/pg-protocol/dist/b.js create mode 100644 node_modules/pg-protocol/dist/b.js.map create mode 100644 node_modules/pg-protocol/dist/buffer-reader.d.ts create mode 100644 node_modules/pg-protocol/dist/buffer-reader.js create mode 100644 node_modules/pg-protocol/dist/buffer-reader.js.map create mode 100644 node_modules/pg-protocol/dist/buffer-writer.d.ts create mode 100644 node_modules/pg-protocol/dist/buffer-writer.js create mode 100644 node_modules/pg-protocol/dist/buffer-writer.js.map create mode 100644 node_modules/pg-protocol/dist/inbound-parser.test.d.ts create mode 100644 node_modules/pg-protocol/dist/inbound-parser.test.js create mode 100644 node_modules/pg-protocol/dist/inbound-parser.test.js.map create mode 100644 node_modules/pg-protocol/dist/index.d.ts create mode 100644 node_modules/pg-protocol/dist/index.js create mode 100644 node_modules/pg-protocol/dist/index.js.map create mode 100644 node_modules/pg-protocol/dist/messages.d.ts create mode 100644 node_modules/pg-protocol/dist/messages.js create mode 100644 node_modules/pg-protocol/dist/messages.js.map create mode 100644 node_modules/pg-protocol/dist/outbound-serializer.test.d.ts create mode 100644 node_modules/pg-protocol/dist/outbound-serializer.test.js create mode 100644 node_modules/pg-protocol/dist/outbound-serializer.test.js.map create mode 100644 node_modules/pg-protocol/dist/parser.d.ts create mode 100644 node_modules/pg-protocol/dist/parser.js create mode 100644 node_modules/pg-protocol/dist/parser.js.map create mode 100644 node_modules/pg-protocol/dist/serializer.d.ts create mode 100644 node_modules/pg-protocol/dist/serializer.js create mode 100644 node_modules/pg-protocol/dist/serializer.js.map create mode 100644 node_modules/pg-protocol/esm/index.js create mode 100644 node_modules/pg-protocol/package.json create mode 100644 node_modules/pg-protocol/src/b.ts create mode 100644 node_modules/pg-protocol/src/buffer-reader.ts create mode 100644 node_modules/pg-protocol/src/buffer-writer.ts create mode 100644 node_modules/pg-protocol/src/inbound-parser.test.ts create mode 100644 node_modules/pg-protocol/src/index.ts create mode 100644 node_modules/pg-protocol/src/messages.ts create mode 100644 node_modules/pg-protocol/src/outbound-serializer.test.ts create mode 100644 node_modules/pg-protocol/src/parser.ts create mode 100644 node_modules/pg-protocol/src/serializer.ts create mode 100644 node_modules/pg-protocol/src/testing/buffer-list.ts create mode 100644 node_modules/pg-protocol/src/testing/test-buffers.ts create mode 100644 node_modules/pg-protocol/src/types/chunky.d.ts create mode 100644 node_modules/pg-types/.travis.yml create mode 100644 node_modules/pg-types/Makefile create mode 100644 node_modules/pg-types/README.md create mode 100644 node_modules/pg-types/index.d.ts create mode 100644 node_modules/pg-types/index.js create mode 100644 node_modules/pg-types/index.test-d.ts create mode 100644 node_modules/pg-types/lib/arrayParser.js create mode 100644 node_modules/pg-types/lib/binaryParsers.js create mode 100644 node_modules/pg-types/lib/builtins.js create mode 100644 node_modules/pg-types/lib/textParsers.js create mode 100644 node_modules/pg-types/package.json create mode 100644 node_modules/pg-types/test/index.js create mode 100644 node_modules/pg-types/test/types.js create mode 100644 node_modules/pg/LICENSE create mode 100644 node_modules/pg/README.md create mode 100644 node_modules/pg/esm/index.mjs create mode 100644 node_modules/pg/lib/client.js create mode 100644 node_modules/pg/lib/connection-parameters.js create mode 100644 node_modules/pg/lib/connection.js create mode 100644 node_modules/pg/lib/crypto/cert-signatures.js create mode 100644 node_modules/pg/lib/crypto/sasl.js create mode 100644 node_modules/pg/lib/crypto/utils-legacy.js create mode 100644 node_modules/pg/lib/crypto/utils-webcrypto.js create mode 100644 node_modules/pg/lib/crypto/utils.js create mode 100644 node_modules/pg/lib/defaults.js create mode 100644 node_modules/pg/lib/index.js create mode 100644 node_modules/pg/lib/native/client.js create mode 100644 node_modules/pg/lib/native/index.js create mode 100644 node_modules/pg/lib/native/query.js create mode 100644 node_modules/pg/lib/query.js create mode 100644 node_modules/pg/lib/result.js create mode 100644 node_modules/pg/lib/stream.js create mode 100644 node_modules/pg/lib/type-overrides.js create mode 100644 node_modules/pg/lib/utils.js create mode 100644 node_modules/pg/package.json create mode 100644 node_modules/pgpass/README.md create mode 100644 node_modules/pgpass/lib/helper.js create mode 100644 node_modules/pgpass/lib/index.js create mode 100644 node_modules/pgpass/package.json create mode 100644 node_modules/possible-typed-array-names/.eslintrc create mode 100644 node_modules/possible-typed-array-names/.github/FUNDING.yml create mode 100644 node_modules/possible-typed-array-names/CHANGELOG.md create mode 100644 node_modules/possible-typed-array-names/LICENSE create mode 100644 node_modules/possible-typed-array-names/README.md create mode 100644 node_modules/possible-typed-array-names/index.d.ts create mode 100644 node_modules/possible-typed-array-names/index.js create mode 100644 node_modules/possible-typed-array-names/package.json create mode 100644 node_modules/possible-typed-array-names/test/index.js create mode 100644 node_modules/possible-typed-array-names/tsconfig.json create mode 100644 node_modules/postgres-array/index.d.ts create mode 100644 node_modules/postgres-array/index.js create mode 100644 node_modules/postgres-array/license create mode 100644 node_modules/postgres-array/package.json create mode 100644 node_modules/postgres-array/readme.md create mode 100644 node_modules/postgres-bytea/index.js create mode 100644 node_modules/postgres-bytea/license create mode 100644 node_modules/postgres-bytea/package.json create mode 100644 node_modules/postgres-bytea/readme.md create mode 100644 node_modules/postgres-date/index.js create mode 100644 node_modules/postgres-date/license create mode 100644 node_modules/postgres-date/package.json create mode 100644 node_modules/postgres-date/readme.md create mode 100644 node_modules/postgres-interval/index.d.ts create mode 100644 node_modules/postgres-interval/index.js create mode 100644 node_modules/postgres-interval/license create mode 100644 node_modules/postgres-interval/package.json create mode 100644 node_modules/postgres-interval/readme.md create mode 100644 node_modules/proxy-from-env/.eslintrc create mode 100644 node_modules/proxy-from-env/.travis.yml create mode 100644 node_modules/proxy-from-env/LICENSE create mode 100644 node_modules/proxy-from-env/README.md create mode 100644 node_modules/proxy-from-env/index.js create mode 100644 node_modules/proxy-from-env/package.json create mode 100644 node_modules/proxy-from-env/test.js create mode 100644 node_modules/randombytes/.travis.yml create mode 100644 node_modules/randombytes/.zuul.yml create mode 100644 node_modules/randombytes/LICENSE create mode 100644 node_modules/randombytes/README.md create mode 100644 node_modules/randombytes/browser.js create mode 100644 node_modules/randombytes/index.js create mode 100644 node_modules/randombytes/package.json create mode 100644 node_modules/randombytes/test.js create mode 100644 node_modules/require-addon/LICENSE create mode 100644 node_modules/require-addon/README.md create mode 100644 node_modules/require-addon/lib/bare.js create mode 100644 node_modules/require-addon/lib/default.js create mode 100644 node_modules/require-addon/lib/node.js create mode 100644 node_modules/require-addon/package.json create mode 100644 node_modules/safe-buffer/LICENSE create mode 100644 node_modules/safe-buffer/README.md create mode 100644 node_modules/safe-buffer/index.d.ts create mode 100644 node_modules/safe-buffer/index.js create mode 100644 node_modules/safe-buffer/package.json create mode 100644 node_modules/set-function-length/.eslintrc create mode 100644 node_modules/set-function-length/.github/FUNDING.yml create mode 100644 node_modules/set-function-length/.nycrc create mode 100644 node_modules/set-function-length/CHANGELOG.md create mode 100644 node_modules/set-function-length/LICENSE create mode 100644 node_modules/set-function-length/README.md create mode 100644 node_modules/set-function-length/env.d.ts create mode 100644 node_modules/set-function-length/env.js create mode 100644 node_modules/set-function-length/index.d.ts create mode 100644 node_modules/set-function-length/index.js create mode 100644 node_modules/set-function-length/package.json create mode 100644 node_modules/set-function-length/tsconfig.json create mode 100644 node_modules/sha.js/.eslintrc create mode 100644 node_modules/sha.js/CHANGELOG.md create mode 100644 node_modules/sha.js/LICENSE create mode 100644 node_modules/sha.js/README.md create mode 100644 node_modules/sha.js/bin.js create mode 100644 node_modules/sha.js/hash.js create mode 100644 node_modules/sha.js/index.js create mode 100644 node_modules/sha.js/package.json create mode 100644 node_modules/sha.js/sha.js create mode 100644 node_modules/sha.js/sha1.js create mode 100644 node_modules/sha.js/sha224.js create mode 100644 node_modules/sha.js/sha256.js create mode 100644 node_modules/sha.js/sha384.js create mode 100644 node_modules/sha.js/sha512.js create mode 100644 node_modules/sha.js/test/hash.js create mode 100644 node_modules/sha.js/test/test.js create mode 100644 node_modules/sha.js/test/vectors.js create mode 100644 node_modules/sodium-native/CMakeLists.txt create mode 100644 node_modules/sodium-native/LICENSE create mode 100644 node_modules/sodium-native/README.md create mode 100644 node_modules/sodium-native/binding.c create mode 100644 node_modules/sodium-native/extensions/pbkdf2/pbkdf2.c create mode 100644 node_modules/sodium-native/extensions/pbkdf2/pbkdf2.h create mode 100644 node_modules/sodium-native/extensions/tweak/tweak.c create mode 100644 node_modules/sodium-native/extensions/tweak/tweak.h create mode 100644 node_modules/sodium-native/index.js create mode 100644 node_modules/sodium-native/macros.h create mode 100644 node_modules/sodium-native/package.json create mode 100644 node_modules/sodium-native/prebuilds/android-arm/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/android-arm/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/android-arm64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/android-arm64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/android-ia32/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/android-ia32/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/android-x64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/android-x64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/darwin-arm64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/darwin-arm64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/darwin-x64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/darwin-x64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/ios-arm64-simulator/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/ios-arm64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/ios-x64-simulator/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/linux-arm64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/linux-arm64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/linux-x64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/linux-x64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/win32-arm64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/win32-arm64/sodium-native.node create mode 100644 node_modules/sodium-native/prebuilds/win32-x64/sodium-native.bare create mode 100644 node_modules/sodium-native/prebuilds/win32-x64/sodium-native.node create mode 100644 node_modules/split2/LICENSE create mode 100644 node_modules/split2/README.md create mode 100644 node_modules/split2/bench.js create mode 100644 node_modules/split2/index.js create mode 100644 node_modules/split2/package.json create mode 100644 node_modules/split2/test.js create mode 100644 node_modules/stellar-sdk/CHANGELOG.md create mode 100644 node_modules/stellar-sdk/LICENSE create mode 100644 node_modules/stellar-sdk/README.md create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-minimal.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-minimal.min.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-minimal.min.js.LICENSE.txt create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-no-axios.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-no-axios.min.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-no-axios.min.js.LICENSE.txt create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-no-eventsource.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-no-eventsource.min.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk-no-eventsource.min.js.LICENSE.txt create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk.min.js create mode 100644 node_modules/stellar-sdk/dist/stellar-sdk.min.js.LICENSE.txt create mode 100644 node_modules/stellar-sdk/lib/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/browser.js create mode 100644 node_modules/stellar-sdk/lib/config.d.ts create mode 100644 node_modules/stellar-sdk/lib/config.js create mode 100644 node_modules/stellar-sdk/lib/contract/assembled_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/assembled_transaction.js create mode 100644 node_modules/stellar-sdk/lib/contract/basic_node_signer.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/basic_node_signer.js create mode 100644 node_modules/stellar-sdk/lib/contract/client.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/client.js create mode 100644 node_modules/stellar-sdk/lib/contract/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/index.js create mode 100644 node_modules/stellar-sdk/lib/contract/rust_result.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/rust_result.js create mode 100644 node_modules/stellar-sdk/lib/contract/sent_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/sent_transaction.js create mode 100644 node_modules/stellar-sdk/lib/contract/spec.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/spec.js create mode 100644 node_modules/stellar-sdk/lib/contract/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/types.js create mode 100644 node_modules/stellar-sdk/lib/contract/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/contract/utils.js create mode 100644 node_modules/stellar-sdk/lib/errors/account_requires_memo.d.ts create mode 100644 node_modules/stellar-sdk/lib/errors/account_requires_memo.js create mode 100644 node_modules/stellar-sdk/lib/errors/bad_request.d.ts create mode 100644 node_modules/stellar-sdk/lib/errors/bad_request.js create mode 100644 node_modules/stellar-sdk/lib/errors/bad_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/errors/bad_response.js create mode 100644 node_modules/stellar-sdk/lib/errors/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/errors/index.js create mode 100644 node_modules/stellar-sdk/lib/errors/network.d.ts create mode 100644 node_modules/stellar-sdk/lib/errors/network.js create mode 100644 node_modules/stellar-sdk/lib/errors/not_found.d.ts create mode 100644 node_modules/stellar-sdk/lib/errors/not_found.js create mode 100644 node_modules/stellar-sdk/lib/federation/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/federation/api.js create mode 100644 node_modules/stellar-sdk/lib/federation/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/federation/index.js create mode 100644 node_modules/stellar-sdk/lib/federation/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/federation/server.js create mode 100644 node_modules/stellar-sdk/lib/friendbot/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/friendbot/index.js create mode 100644 node_modules/stellar-sdk/lib/horizon/account_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/account_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/account_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/account_response.js create mode 100644 node_modules/stellar-sdk/lib/horizon/assets_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/assets_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/claimable_balances_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/claimable_balances_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/effect_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/effect_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/friendbot_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/friendbot_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/horizon_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/horizon_api.js create mode 100644 node_modules/stellar-sdk/lib/horizon/horizon_axios_client.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/horizon_axios_client.js create mode 100644 node_modules/stellar-sdk/lib/horizon/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/index.js create mode 100644 node_modules/stellar-sdk/lib/horizon/ledger_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/ledger_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/liquidity_pool_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/liquidity_pool_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/offer_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/offer_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/operation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/operation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/orderbook_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/orderbook_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/payment_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/payment_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/server.js create mode 100644 node_modules/stellar-sdk/lib/horizon/server_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/server_api.js create mode 100644 node_modules/stellar-sdk/lib/horizon/strict_receive_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/strict_receive_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/strict_send_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/strict_send_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/trade_aggregation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/trade_aggregation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/trades_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/trades_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/transaction_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/transaction_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/horizon/types/account.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/types/account.js create mode 100644 node_modules/stellar-sdk/lib/horizon/types/assets.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/types/assets.js create mode 100644 node_modules/stellar-sdk/lib/horizon/types/effects.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/types/effects.js create mode 100644 node_modules/stellar-sdk/lib/horizon/types/offer.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/types/offer.js create mode 100644 node_modules/stellar-sdk/lib/horizon/types/trade.d.ts create mode 100644 node_modules/stellar-sdk/lib/horizon/types/trade.js create mode 100644 node_modules/stellar-sdk/lib/http-client/axios-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/http-client/axios-client.js create mode 100644 node_modules/stellar-sdk/lib/http-client/fetch-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/http-client/fetch-client.js create mode 100644 node_modules/stellar-sdk/lib/http-client/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/http-client/index.js create mode 100644 node_modules/stellar-sdk/lib/http-client/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/http-client/types.js create mode 100644 node_modules/stellar-sdk/lib/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/browser.js create mode 100644 node_modules/stellar-sdk/lib/minimal/config.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/config.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/assembled_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/assembled_transaction.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/basic_node_signer.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/basic_node_signer.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/client.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/client.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/rust_result.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/rust_result.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/sent_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/sent_transaction.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/spec.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/spec.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/types.js create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/contract/utils.js create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/account_requires_memo.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/account_requires_memo.js create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/bad_request.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/bad_request.js create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/bad_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/bad_response.js create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/network.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/network.js create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/not_found.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/errors/not_found.js create mode 100644 node_modules/stellar-sdk/lib/minimal/federation/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/federation/api.js create mode 100644 node_modules/stellar-sdk/lib/minimal/federation/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/federation/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/federation/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/federation/server.js create mode 100644 node_modules/stellar-sdk/lib/minimal/friendbot/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/friendbot/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/account_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/account_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/account_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/account_response.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/assets_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/assets_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/claimable_balances_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/claimable_balances_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/effect_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/effect_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/friendbot_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/friendbot_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/horizon_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/horizon_api.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/horizon_axios_client.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/horizon_axios_client.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/ledger_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/ledger_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/liquidity_pool_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/liquidity_pool_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/offer_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/offer_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/operation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/operation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/orderbook_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/orderbook_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/payment_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/payment_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/server.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/server_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/server_api.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/strict_receive_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/strict_receive_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/strict_send_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/strict_send_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/trade_aggregation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/trade_aggregation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/trades_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/trades_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/transaction_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/transaction_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/account.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/account.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/assets.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/assets.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/effects.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/effects.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/offer.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/offer.js create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/trade.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/horizon/types/trade.js create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/axios-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/axios-client.js create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/fetch-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/fetch-client.js create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/http-client/types.js create mode 100644 node_modules/stellar-sdk/lib/minimal/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/api.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/axios.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/axios.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/browser.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/jsonrpc.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/jsonrpc.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/parsers.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/parsers.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/server.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/transaction.js create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/rpc/utils.js create mode 100644 node_modules/stellar-sdk/lib/minimal/stellartoml/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/stellartoml/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/utils.js create mode 100644 node_modules/stellar-sdk/lib/minimal/webauth/errors.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/webauth/errors.js create mode 100644 node_modules/stellar-sdk/lib/minimal/webauth/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/webauth/index.js create mode 100644 node_modules/stellar-sdk/lib/minimal/webauth/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/minimal/webauth/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/browser.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/config.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/config.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/assembled_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/assembled_transaction.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/basic_node_signer.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/basic_node_signer.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/client.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/rust_result.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/rust_result.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/sent_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/sent_transaction.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/spec.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/spec.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/types.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/contract/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/account_requires_memo.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/account_requires_memo.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/bad_request.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/bad_request.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/bad_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/bad_response.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/network.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/network.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/not_found.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/errors/not_found.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/federation/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/federation/api.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/federation/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/federation/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/federation/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/federation/server.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/friendbot/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/friendbot/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/account_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/account_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/account_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/account_response.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/assets_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/assets_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/claimable_balances_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/claimable_balances_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/effect_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/effect_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/friendbot_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/friendbot_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/horizon_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/horizon_api.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/horizon_axios_client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/horizon_axios_client.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/ledger_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/ledger_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/liquidity_pool_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/liquidity_pool_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/offer_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/offer_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/operation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/operation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/orderbook_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/orderbook_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/payment_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/payment_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/server.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/server_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/server_api.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/strict_receive_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/strict_receive_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/strict_send_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/strict_send_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/trade_aggregation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/trade_aggregation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/trades_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/trades_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/transaction_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/transaction_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/account.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/account.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/assets.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/assets.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/effects.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/effects.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/offer.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/offer.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/trade.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/horizon/types/trade.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/axios-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/axios-client.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/fetch-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/fetch-client.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/http-client/types.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/api.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/axios.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/axios.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/browser.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/jsonrpc.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/jsonrpc.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/parsers.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/parsers.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/server.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/transaction.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/rpc/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/stellartoml/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/stellartoml/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/webauth/errors.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/webauth/errors.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/webauth/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/webauth/index.js create mode 100644 node_modules/stellar-sdk/lib/no-axios/webauth/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-axios/webauth/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/browser.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/config.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/config.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/assembled_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/assembled_transaction.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/basic_node_signer.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/basic_node_signer.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/client.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/rust_result.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/rust_result.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/sent_transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/sent_transaction.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/spec.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/spec.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/types.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/contract/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/account_requires_memo.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/account_requires_memo.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/bad_request.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/bad_request.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/bad_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/bad_response.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/network.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/network.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/not_found.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/errors/not_found.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/federation/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/federation/api.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/federation/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/federation/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/federation/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/federation/server.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/friendbot/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/friendbot/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/account_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/account_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/account_response.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/account_response.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/assets_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/assets_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/claimable_balances_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/claimable_balances_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/effect_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/effect_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/friendbot_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/friendbot_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/horizon_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/horizon_api.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/horizon_axios_client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/horizon_axios_client.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/ledger_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/ledger_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/liquidity_pool_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/liquidity_pool_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/offer_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/offer_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/operation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/operation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/orderbook_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/orderbook_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/payment_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/payment_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/server.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/server_api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/server_api.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/strict_receive_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/strict_receive_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/strict_send_path_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/strict_send_path_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/trade_aggregation_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/trade_aggregation_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/trades_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/trades_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/transaction_call_builder.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/transaction_call_builder.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/account.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/account.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/assets.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/assets.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/effects.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/effects.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/offer.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/offer.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/trade.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/horizon/types/trade.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/axios-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/axios-client.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/fetch-client.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/fetch-client.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/types.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/http-client/types.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/api.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/axios.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/axios.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/browser.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/jsonrpc.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/jsonrpc.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/parsers.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/parsers.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/server.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/transaction.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/rpc/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/stellartoml/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/stellartoml/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/utils.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/webauth/errors.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/webauth/errors.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/webauth/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/webauth/index.js create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/webauth/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/no-eventsource/webauth/utils.js create mode 100644 node_modules/stellar-sdk/lib/rpc/api.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/api.js create mode 100644 node_modules/stellar-sdk/lib/rpc/axios.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/axios.js create mode 100644 node_modules/stellar-sdk/lib/rpc/browser.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/browser.js create mode 100644 node_modules/stellar-sdk/lib/rpc/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/index.js create mode 100644 node_modules/stellar-sdk/lib/rpc/jsonrpc.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/jsonrpc.js create mode 100644 node_modules/stellar-sdk/lib/rpc/parsers.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/parsers.js create mode 100644 node_modules/stellar-sdk/lib/rpc/server.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/server.js create mode 100644 node_modules/stellar-sdk/lib/rpc/transaction.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/transaction.js create mode 100644 node_modules/stellar-sdk/lib/rpc/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/rpc/utils.js create mode 100644 node_modules/stellar-sdk/lib/stellartoml/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/stellartoml/index.js create mode 100644 node_modules/stellar-sdk/lib/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/utils.js create mode 100644 node_modules/stellar-sdk/lib/webauth/errors.d.ts create mode 100644 node_modules/stellar-sdk/lib/webauth/errors.js create mode 100644 node_modules/stellar-sdk/lib/webauth/index.d.ts create mode 100644 node_modules/stellar-sdk/lib/webauth/index.js create mode 100644 node_modules/stellar-sdk/lib/webauth/utils.d.ts create mode 100644 node_modules/stellar-sdk/lib/webauth/utils.js create mode 100644 node_modules/stellar-sdk/package.json create mode 100644 node_modules/stellar-sdk/types/dom-monkeypatch.d.ts create mode 100644 node_modules/to-buffer/.github/FUNDING.yml create mode 100644 node_modules/to-buffer/CHANGELOG.md create mode 100644 node_modules/to-buffer/LICENSE create mode 100644 node_modules/to-buffer/README.md create mode 100644 node_modules/to-buffer/index.js create mode 100644 node_modules/to-buffer/package.json create mode 100644 node_modules/toml/.jshintrc create mode 100644 node_modules/toml/.travis.yml create mode 100644 node_modules/toml/CHANGELOG.md create mode 100644 node_modules/toml/LICENSE create mode 100644 node_modules/toml/README.md create mode 100644 node_modules/toml/benchmark.js create mode 100644 node_modules/toml/index.d.ts create mode 100644 node_modules/toml/index.js create mode 100644 node_modules/toml/lib/compiler.js create mode 100644 node_modules/toml/lib/parser.js create mode 100644 node_modules/toml/package.json create mode 100644 node_modules/toml/src/toml.pegjs create mode 100644 node_modules/toml/test/bad.toml create mode 100644 node_modules/toml/test/example.toml create mode 100644 node_modules/toml/test/hard_example.toml create mode 100644 node_modules/toml/test/inline_tables.toml create mode 100644 node_modules/toml/test/literal_strings.toml create mode 100644 node_modules/toml/test/multiline_eat_whitespace.toml create mode 100644 node_modules/toml/test/multiline_literal_strings.toml create mode 100644 node_modules/toml/test/multiline_strings.toml create mode 100644 node_modules/toml/test/smoke.js create mode 100644 node_modules/toml/test/table_arrays_easy.toml create mode 100644 node_modules/toml/test/table_arrays_hard.toml create mode 100644 node_modules/toml/test/test_toml.js create mode 100644 node_modules/tweetnacl/AUTHORS.md create mode 100644 node_modules/tweetnacl/CHANGELOG.md create mode 100644 node_modules/tweetnacl/LICENSE create mode 100644 node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md create mode 100644 node_modules/tweetnacl/README.md create mode 100644 node_modules/tweetnacl/nacl-fast.js create mode 100644 node_modules/tweetnacl/nacl-fast.min.js create mode 100644 node_modules/tweetnacl/nacl.d.ts create mode 100644 node_modules/tweetnacl/nacl.js create mode 100644 node_modules/tweetnacl/nacl.min.js create mode 100644 node_modules/tweetnacl/package.json create mode 100644 node_modules/typed-array-buffer/.eslintrc create mode 100644 node_modules/typed-array-buffer/.github/FUNDING.yml create mode 100644 node_modules/typed-array-buffer/.nycrc create mode 100644 node_modules/typed-array-buffer/CHANGELOG.md create mode 100644 node_modules/typed-array-buffer/LICENSE create mode 100644 node_modules/typed-array-buffer/README.md create mode 100644 node_modules/typed-array-buffer/index.d.ts create mode 100644 node_modules/typed-array-buffer/index.js create mode 100644 node_modules/typed-array-buffer/package.json create mode 100644 node_modules/typed-array-buffer/test/index.js create mode 100644 node_modules/typed-array-buffer/tsconfig.json create mode 100644 node_modules/urijs/LICENSE.txt create mode 100644 node_modules/urijs/README.md create mode 100644 node_modules/urijs/package.json create mode 100644 node_modules/urijs/src/IPv6.js create mode 100644 node_modules/urijs/src/SecondLevelDomains.js create mode 100644 node_modules/urijs/src/URI.fragmentQuery.js create mode 100644 node_modules/urijs/src/URI.fragmentURI.js create mode 100644 node_modules/urijs/src/URI.js create mode 100644 node_modules/urijs/src/URI.min.js create mode 100644 node_modules/urijs/src/URITemplate.js create mode 100644 node_modules/urijs/src/jquery.URI.js create mode 100644 node_modules/urijs/src/jquery.URI.min.js create mode 100644 node_modules/urijs/src/punycode.js create mode 100644 node_modules/which-typed-array/.editorconfig create mode 100644 node_modules/which-typed-array/.eslintrc create mode 100644 node_modules/which-typed-array/.github/FUNDING.yml create mode 100644 node_modules/which-typed-array/.nycrc create mode 100644 node_modules/which-typed-array/CHANGELOG.md create mode 100644 node_modules/which-typed-array/LICENSE create mode 100644 node_modules/which-typed-array/README.md create mode 100644 node_modules/which-typed-array/index.d.ts create mode 100644 node_modules/which-typed-array/index.js create mode 100644 node_modules/which-typed-array/package.json create mode 100644 node_modules/which-typed-array/test/index.js create mode 100644 node_modules/which-typed-array/tsconfig.json create mode 100644 node_modules/xtend/.jshintrc create mode 100644 node_modules/xtend/LICENSE create mode 100644 node_modules/xtend/README.md create mode 100644 node_modules/xtend/immutable.js create mode 100644 node_modules/xtend/mutable.js create mode 100644 node_modules/xtend/package.json create mode 100644 node_modules/xtend/test.js diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..938c0172 --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +# Database Configuration +DATABASE_URL=postgresql://username:password@localhost:5432/vesting_vault +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=vesting_vault +DB_USER=username +DB_PASSWORD=password + +# Stellar Configuration +STELLAR_RPC_URL=https://horizon-testnet.stellar.org +STELLAR_NETWORK=testnet + +# Server Configuration +PORT=3000 diff --git a/index.js b/index.js index 308428a4..920f9974 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,67 @@ const express = require('express'); +const cors = require('cors'); +require('dotenv').config(); +const { Client } = require('pg'); +const { Server } = require('stellar-sdk'); + const app = express(); -const port = 3000; +const port = process.env.PORT || 3000; + +app.use(cors()); + +// Health check endpoint +app.get('/health', async (req, res) => { + const health = { + status: 'ok', + timestamp: new Date().toISOString(), + services: { + database: 'unknown', + stellar: 'unknown' + } + }; + + let allHealthy = true; + + // Check database connection + try { + const client = new Client({ + connectionString: process.env.DATABASE_URL || { + host: process.env.DB_HOST, + port: process.env.DB_PORT, + database: process.env.DB_NAME, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD + } + }); + + await client.connect(); + await client.query('SELECT 1'); + await client.end(); + health.services.database = 'healthy'; + } catch (error) { + health.services.database = 'unhealthy'; + health.database_error = error.message; + allHealthy = false; + } + + // Check Stellar RPC connection + try { + const stellarServer = new Server(process.env.STELLAR_RPC_URL || 'https://horizon-testnet.stellar.org'); + await stellarServer.root(); + health.services.stellar = 'healthy'; + } catch (error) { + health.services.stellar = 'unhealthy'; + health.stellar_error = error.message; + allHealthy = false; + } + + if (allHealthy) { + res.status(200).json(health); + } else { + health.status = 'degraded'; + res.status(503).json(health); + } +}); app.get('/', (req, res) => { res.json({ @@ -10,4 +71,4 @@ app.get('/', (req, res) => { }); }); -app.listen(port, () => console.log('Vesting API running')); +app.listen(port, () => console.log(`Vesting API running on port ${port}`)); diff --git a/node_modules/.bin/sha.js b/node_modules/.bin/sha.js new file mode 100644 index 00000000..9215bc22 --- /dev/null +++ b/node_modules/.bin/sha.js @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../sha.js/bin.js" "$@" +else + exec node "$basedir/../sha.js/bin.js" "$@" +fi diff --git a/node_modules/.bin/sha.js.cmd b/node_modules/.bin/sha.js.cmd new file mode 100644 index 00000000..ce87b004 --- /dev/null +++ b/node_modules/.bin/sha.js.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sha.js\bin.js" %* diff --git a/node_modules/.bin/sha.js.ps1 b/node_modules/.bin/sha.js.ps1 new file mode 100644 index 00000000..fceb31aa --- /dev/null +++ b/node_modules/.bin/sha.js.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../sha.js/bin.js" $args + } else { + & "$basedir/node$exe" "$basedir/../sha.js/bin.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../sha.js/bin.js" $args + } else { + & "node$exe" "$basedir/../sha.js/bin.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 82b60cea..7ef0f35f 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -4,6 +4,32 @@ "lockfileVersion": 3, "requires": true, "packages": { + "node_modules/@stellar/js-xdr": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.2.tgz", + "integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==", + "license": "Apache-2.0" + }, + "node_modules/@stellar/stellar-base": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-13.1.0.tgz", + "integrity": "sha512-90EArG+eCCEzDGj3OJNoCtwpWDwxjv+rs/RNPhvg4bulpjN/CSRj+Ys/SalRcfM4/WRC5/qAfjzmJBAuquWhkA==", + "license": "Apache-2.0", + "dependencies": { + "@stellar/js-xdr": "^3.1.2", + "base32.js": "^0.1.0", + "bignumber.js": "^9.1.2", + "buffer": "^6.0.3", + "sha.js": "^2.3.6", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "sodium-native": "^4.3.3" + } + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -17,6 +43,120 @@ "node": ">= 0.6" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/bare-addon-resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/bare-addon-resolve/-/bare-addon-resolve-1.10.0.tgz", + "integrity": "sha512-sSd0jieRJlDaODOzj0oe0RjFVC1QI0ZIjGIdPkbrTXsdVVtENg14c+lHHAhHwmWCZ2nQlMhy8jA3Y5LYPc/isA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-module-resolve": "^1.10.0", + "bare-semver": "^1.0.0" + }, + "peerDependencies": { + "bare-url": "*" + }, + "peerDependenciesMeta": { + "bare-url": { + "optional": true + } + } + }, + "node_modules/bare-module-resolve": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/bare-module-resolve/-/bare-module-resolve-1.12.1.tgz", + "integrity": "sha512-hbmAPyFpEq8FoZMd5sFO3u6MC5feluWoGE8YKlA8fCrl6mNtx68Wjg4DTiDJcqRJaovTvOYKfYngoBUnbaT7eg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-semver": "^1.0.0" + }, + "peerDependencies": { + "bare-url": "*" + }, + "peerDependenciesMeta": { + "bare-url": { + "optional": true + } + } + }, + "node_modules/bare-semver": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bare-semver/-/bare-semver-1.0.2.tgz", + "integrity": "sha512-ESVaN2nzWhcI5tf3Zzcq9aqCZ676VWzqw07eEZ0qxAcEOAFYBa0pWq8sK34OQeHLY3JsfKXZS9mDyzyxGjeLzA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/base32.js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", + "integrity": "sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", @@ -41,6 +181,30 @@ "url": "https://opencollective.com/express" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -50,6 +214,24 @@ "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -79,6 +261,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/content-disposition": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", @@ -153,6 +347,32 @@ } } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -233,6 +453,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -248,6 +483,15 @@ "node": ">= 0.6" } }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/express": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", @@ -291,6 +535,15 @@ "url": "https://opencollective.com/express" } }, + "node_modules/feaxios": { + "version": "0.0.23", + "resolved": "https://registry.npmjs.org/feaxios/-/feaxios-0.0.23.tgz", + "integrity": "sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g==", + "license": "MIT", + "dependencies": { + "is-retry-allowed": "^3.0.0" + } + }, "node_modules/finalhandler": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", @@ -312,6 +565,78 @@ "url": "https://opencollective.com/express" } }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -388,6 +713,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -400,6 +737,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -448,6 +800,26 @@ "url": "https://opencollective.com/express" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -463,12 +835,57 @@ "node": ">= 0.10" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/is-retry-allowed": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-3.0.0.tgz", + "integrity": "sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -600,6 +1017,144 @@ "url": "https://opencollective.com/express" } }, + "node_modules/pg": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.18.0.tgz", + "integrity": "sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "pg-connection-string": "^2.11.0", + "pg-pool": "^3.11.0", + "pg-protocol": "^1.11.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.3.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", + "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz", + "integrity": "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.11.0.tgz", + "integrity": "sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", + "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -613,6 +1168,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/qs": { "version": "6.14.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", @@ -628,6 +1189,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -652,6 +1222,19 @@ "node": ">= 0.10" } }, + "node_modules/require-addon": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/require-addon/-/require-addon-1.2.0.tgz", + "integrity": "sha512-VNPDZlYgIYQwWp9jMTzljx+k0ZtatKlcvOhktZ/anNPI3dQ9NXk7cq2U4iJ1wd9IrytRnYhyEocFWbkdPb+MYA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-addon-resolve": "^1.3.0" + }, + "engines": { + "bare": ">=1.10.0" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -668,6 +1251,26 @@ "node": ">= 18" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -719,12 +1322,49 @@ "url": "https://opencollective.com/express" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -797,6 +1437,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sodium-native": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.3.3.tgz", + "integrity": "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw==", + "license": "MIT", + "optional": true, + "dependencies": { + "require-addon": "^1.1.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -806,6 +1465,40 @@ "node": ">= 0.8" } }, + "node_modules/stellar-sdk": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/stellar-sdk/-/stellar-sdk-13.3.0.tgz", + "integrity": "sha512-jAA3+U7oAUueldoS4kuEhcym+DigElWq9isPxt7tjMrE7kTJ2vvY29waavUb2FSfQIWwGbuwAJTYddy2BeyJsw==", + "deprecated": "⚠️ This package has moved to @stellar/stellar-sdk! 🚚", + "license": "Apache-2.0", + "dependencies": { + "@stellar/stellar-base": "^13.1.0", + "axios": "^1.8.4", + "bignumber.js": "^9.3.0", + "eventsource": "^2.0.2", + "feaxios": "^0.0.23", + "randombytes": "^2.1.0", + "toml": "^3.0.0", + "urijs": "^1.19.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -815,6 +1508,18 @@ "node": ">=0.6" } }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, "node_modules/type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -829,6 +1534,20 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -838,6 +1557,12 @@ "node": ">= 0.8" } }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", + "license": "MIT" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -847,11 +1572,41 @@ "node": ">= 0.8" } }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } } } } diff --git a/node_modules/@stellar/js-xdr/.eslintrc.js b/node_modules/@stellar/js-xdr/.eslintrc.js new file mode 100644 index 00000000..b36e0aec --- /dev/null +++ b/node_modules/@stellar/js-xdr/.eslintrc.js @@ -0,0 +1,10 @@ +module.exports = { + env: { + node: true + }, + extends: ['eslint:recommended', 'plugin:node/recommended'], + rules: { + 'node/no-unpublished-require': 0, + indent: ['warn', 2] + } +}; diff --git a/node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/bug_report.md b/node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..2990733d --- /dev/null +++ b/node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,27 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**What version are you on?** +Check `yarn.lock` or `package-lock.json` to find out precisely what version of 'js-xdr' you're running. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Additional context** +Add any other context about the problem here. diff --git a/node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/feature_request.md b/node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/node_modules/@stellar/js-xdr/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/node_modules/@stellar/js-xdr/.github/workflows/codeql.yml b/node_modules/@stellar/js-xdr/.github/workflows/codeql.yml new file mode 100644 index 00000000..11d7865b --- /dev/null +++ b/node_modules/@stellar/js-xdr/.github/workflows/codeql.yml @@ -0,0 +1,43 @@ +name: "CodeQL" + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + schedule: + - cron: '35 22 * * 5' + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + runs-on: ubuntu-latest + timeout-minutes: 360 + permissions: + # required for all workflows + security-events: write + + strategy: + fail-fast: false + matrix: + include: + - language: javascript-typescript + build-mode: none + - language: ruby + build-mode: none + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/node_modules/@stellar/js-xdr/.github/workflows/npm-publish.yml b/node_modules/@stellar/js-xdr/.github/workflows/npm-publish.yml new file mode 100644 index 00000000..9a6c9e49 --- /dev/null +++ b/node_modules/@stellar/js-xdr/.github/workflows/npm-publish.yml @@ -0,0 +1,40 @@ +name: npm publish +on: + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + always-auth: true + + - name: Install Dependencies + run: yarn + + - name: Build & Test + run: yarn build && yarn test + + - name: Publish npm packages + run: | + yarn publish --access public + sed -i -e 's#"@stellar/js-xdr"#"js-xdr"#' package.json + yarn publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish npm package under old scope + run: | + V=$(cat package.json | jq '.version' | sed -e 's/\"//g') + echo "Deprecating js-xdr@$V" + npm deprecate js-xdr@"<= $V" "⚠️ This package has moved to @stellar/js-xdr! 🚚" + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/node_modules/@stellar/js-xdr/.github/workflows/tests.yml b/node_modules/@stellar/js-xdr/.github/workflows/tests.yml new file mode 100644 index 00000000..b6b1cde4 --- /dev/null +++ b/node_modules/@stellar/js-xdr/.github/workflows/tests.yml @@ -0,0 +1,30 @@ +name: Tests + +on: + push: + branches: [ master ] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Use Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Install Dependencies + run: yarn + + - name: Build All + run: yarn build + + - name: Run Tests + run: yarn test + + - name: Check Code Formatting + run: yarn fmt && (git diff-index --quiet HEAD; git diff) diff --git a/node_modules/@stellar/js-xdr/.prettierignore b/node_modules/@stellar/js-xdr/.prettierignore new file mode 100644 index 00000000..d5c6b638 --- /dev/null +++ b/node_modules/@stellar/js-xdr/.prettierignore @@ -0,0 +1,4 @@ +/package.json +/node_modules +/lib +/dist diff --git a/node_modules/@stellar/js-xdr/.travis.yml b/node_modules/@stellar/js-xdr/.travis.yml new file mode 100644 index 00000000..980df79e --- /dev/null +++ b/node_modules/@stellar/js-xdr/.travis.yml @@ -0,0 +1,25 @@ +language: node_js +node_js: + - 10 + - 11 + - 12 +cache: + directories: + - node_modules +services: + - xvfb +script: yarn test +notifications: + slack: + secure: Bu3OZ0Cdy8eq0IMoLJmadDba8Yyb9ajobKocfp8V7/vfOjpIVXdFrGMqfckkZ22uiWxHCsYEX1ahQ77zTjbO3tNq1CTmSgEAWaqqMVz1iIVNhSoeHRfYDa9r1sKFpJv1KEz+j/8i2phcR5MDE6cGK+byJmjfjcnkP1XoNiupuck= +before_deploy: + - yarn build +deploy: + provider: npm + email: npm@stellar.org + api_key: $NPM_TOKEN + skip_cleanup: true + on: + tags: true + repo: stellar/js-xdr + branch: master diff --git a/node_modules/@stellar/js-xdr/CHANGELOG.md b/node_modules/@stellar/js-xdr/CHANGELOG.md new file mode 100644 index 00000000..9f8f79c1 --- /dev/null +++ b/node_modules/@stellar/js-xdr/CHANGELOG.md @@ -0,0 +1,130 @@ +# Changelog + +All notable changes to this project will be documented in this file. This +project adheres to [Semantic Versioning](http://semver.org/). + +## Unreleased + + +## [v3.1.2](https://github.com/stellar/js-xdr/compare/v3.1.1...v3.1.2) + +### Fixed +* Increase robustness of compatibility across multiple `js-xdr` instances in an environment ([#122](https://github.com/stellar/js-xdr/pull/122)). + + +## [v3.1.1](https://github.com/stellar/js-xdr/compare/v3.1.0...v3.1.1) + +### Fixed +* Add compatibility with pre-ES2016 environments (like some React Native JS compilers) by adding a custom `Buffer.subarray` polyfill ([#118](https://github.com/stellar/js-xdr/pull/118)). + + +## [v3.1.0](https://github.com/stellar/js-xdr/compare/v3.0.1...v3.1.0) + +### Added +* The raw, underlying `XdrReader` and `XdrWriter` types are now exposed by the library for reading without consuming the entire stream ([#116](https://github.com/stellar/js-xdr/pull/116)). + +### Fixed +* Added additional type checks for passing a bytearray-like object to `XdrReader`s and improves the error with details ([#116](https://github.com/stellar/js-xdr/pull/116)). + + +## [v3.0.1](https://github.com/stellar/js-xdr/compare/v3.0.0...v3.0.1) + +### Fixes +- This package is now being published to `@stellar/js-xdr` on NPM. +- The versions at `js-xdr` are now considered **deprecated** ([#111](https://github.com/stellar/js-xdr/pull/111)). +- Misc. dependencies have been upgraded ([#104](https://github.com/stellar/js-xdr/pull/104), [#106](https://github.com/stellar/js-xdr/pull/106), [#107](https://github.com/stellar/js-xdr/pull/107), [#108](https://github.com/stellar/js-xdr/pull/108), [#105](https://github.com/stellar/js-xdr/pull/105)). + + +## [v3.0.0](https://github.com/stellar/js-xdr/compare/v2.0.0...v3.0.0) + +### Breaking Change +- Add support for easily encoding integers larger than 32 bits ([#100](https://github.com/stellar/js-xdr/pull/100)). This (partially) breaks the API for creating `Hyper` and `UnsignedHyper` instances. Previously, you would pass `low` and `high` parts to represent the lower and upper 32 bits. Now, you can pass the entire 64-bit value directly as a `bigint` or `string` instance, or as a list of "chunks" like before, e.g.: + +```diff +-new Hyper({ low: 1, high: 1 }); // representing (1 << 32) + 1 = 4294967297n ++new Hyper(4294967297n); ++new Hyper("4294967297"); ++new Hyper(1, 1); +``` + + +## [v2.0.0](https://github.com/stellar/js-xdr/compare/v1.3.0...v2.0.0) + +- Refactor XDR serialization/deserialization logic ([#91](https://github.com/stellar/js-xdr/pull/91)). +- Replace `long` dependency with native `BigInt` arithmetics. +- Replace `lodash` dependency with built-in Array and Object methods, iterators. +- Add `buffer` dependency for WebPack browser polyfill. +- Update devDependencies to more recent versions, modernize bundler pipeline. +- Automatically grow underlying buffer on writes (#84 fixed). +- Always check that the entire read buffer is consumed (#32 fixed). +- Check actual byte size of the string on write (#33 fixed). +- Fix babel-polyfill build warnings (#34 fixed). +- Upgrade dependencies to their latest versions ([#92](https://github.com/stellar/js-xdr/pull/92)). + +## [v1.3.0](https://github.com/stellar/js-xdr/compare/v1.2.0...v1.3.0) + +- Inline and modernize the `cursor` dependency ([#](https://github.com/stellar/js-xdr/pull/63)). + +## [v1.2.0](https://github.com/stellar/js-xdr/compare/v1.1.4...v1.2.0) + +- Add method `validateXDR(input, format = 'raw')` which validates if a given XDR is valid or not. ([#56](https://github.com/stellar/js-xdr/pull/56)). + +## [v1.1.4](https://github.com/stellar/js-xdr/compare/v1.1.3...v1.1.4) + +- Remove `core-js` dependency ([#45](https://github.com/stellar/js-xdr/pull/45)). + +## [v1.1.3](https://github.com/stellar/js-xdr/compare/v1.1.2...v1.1.3) + +- Split out reference class to it's own file to avoid circular import ([#39](https://github.com/stellar/js-xdr/pull/39)). + +## [v1.1.2](https://github.com/stellar/js-xdr/compare/v1.1.1...v1.1.2) + +- Travis: Deploy to NPM with an env variable instead of an encrypted key +- Instruct Travis to cache node_modules + +## [v1.1.1](https://github.com/stellar/js-xdr/compare/v1.1.0...v1.1.1) + +- Updated some out-of-date dependencies + +## [v1.1.0](https://github.com/stellar/js-xdr/compare/v1.0.3...v1.1.0) + +### Changed + +- Added ESLint and Prettier to enforce code style +- Upgraded dependencies, including Babel to 6 +- Bump local node version to 6.14.0 + +## [v1.0.3](https://github.com/stellar/js-xdr/compare/v1.0.2...v1.0.3) + +### Changed + +- Updated dependencies +- Improved lodash imports (the browser build should be smaller) + +## [v1.0.2](https://github.com/stellar/js-xdr/compare/v1.0.1...v1.0.2) + +### Changed + +- bugfix: removed `runtime` flag from babel to make this package working in + React/Webpack environments + +## [v1.0.1](https://github.com/stellar/js-xdr/compare/v1.0.0...v1.0.1) + +### Changed + +- bugfix: padding bytes are now ensured to be zero when reading + +## [v1.0.0](https://github.com/stellar/js-xdr/compare/v0.0.12...v1.0.0) + +### Changed + +- Strings are now encoded/decoded as utf-8 + +## [v0.0.12](https://github.com/stellar/js-xdr/compare/v0.0.11...v0.0.12) + +### Changed + +- bugfix: Hyper.fromString() no longer silently accepts strings with decimal + points +- bugfix: UnsignedHyper.fromString() no longer silently accepts strings with + decimal points diff --git a/node_modules/@stellar/js-xdr/CONTRIBUTING.md b/node_modules/@stellar/js-xdr/CONTRIBUTING.md new file mode 100644 index 00000000..26ba4d1a --- /dev/null +++ b/node_modules/@stellar/js-xdr/CONTRIBUTING.md @@ -0,0 +1,6 @@ +# How to contribute + +Please read the [Contribution Guide](https://github.com/stellar/docs/blob/master/CONTRIBUTING.md). + +Then please [sign the Contributor License Agreement](https://docs.google.com/forms/d/1g7EF6PERciwn7zfmfke5Sir2n10yddGGSXyZsq98tVY/viewform?usp=send_form). + diff --git a/node_modules/@stellar/js-xdr/Gemfile b/node_modules/@stellar/js-xdr/Gemfile new file mode 100644 index 00000000..59037c7e --- /dev/null +++ b/node_modules/@stellar/js-xdr/Gemfile @@ -0,0 +1,8 @@ +source 'https://rubygems.org' + +group :development do + gem "xdrgen", git: "git@github.com:stellar/xdrgen.git" + # gem "xdrgen", path: "../xdrgen" + gem "pry" +end + diff --git a/node_modules/@stellar/js-xdr/Gemfile.lock b/node_modules/@stellar/js-xdr/Gemfile.lock new file mode 100644 index 00000000..17f2848f --- /dev/null +++ b/node_modules/@stellar/js-xdr/Gemfile.lock @@ -0,0 +1,46 @@ +GIT + remote: git@github.com:stellar/xdrgen.git + revision: 80e38ef2a96489f6b501d4db3a350406e5aa3bab + specs: + xdrgen (0.1.1) + activesupport (~> 6) + memoist (~> 0.11.0) + slop (~> 3.4) + treetop (~> 1.5.3) + +GEM + remote: https://rubygems.org/ + specs: + activesupport (6.1.7.6) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + coderay (1.1.3) + concurrent-ruby (1.2.2) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + memoist (0.11.0) + method_source (1.0.0) + minitest (5.19.0) + polyglot (0.3.5) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + slop (3.6.0) + treetop (1.5.3) + polyglot (~> 0.3) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + zeitwerk (2.6.11) + +PLATFORMS + ruby + +DEPENDENCIES + pry + xdrgen! + +BUNDLED WITH + 2.4.6 diff --git a/node_modules/@stellar/js-xdr/LICENSE.md b/node_modules/@stellar/js-xdr/LICENSE.md new file mode 100644 index 00000000..e936ce3e --- /dev/null +++ b/node_modules/@stellar/js-xdr/LICENSE.md @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 Stellar Development Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/README.md b/node_modules/@stellar/js-xdr/README.md new file mode 100644 index 00000000..97413323 --- /dev/null +++ b/node_modules/@stellar/js-xdr/README.md @@ -0,0 +1,140 @@ +# XDR, for Javascript + +Read/write XDR encoded data structures (RFC 4506) + +[![Build Status](https://travis-ci.com/stellar/js-xdr.svg?branch=master)](https://travis-ci.com/stellar/js-xdr) +[![Code Climate](https://codeclimate.com/github/stellar/js-xdr/badges/gpa.svg)](https://codeclimate.com/github/stellar/js-xdr) +[![Dependency Status](https://david-dm.org/stellar/js-xdr.svg)](https://david-dm.org/stellar/js-xdr) +[![devDependency Status](https://david-dm.org/stellar/js-xdr/dev-status.svg)](https://david-dm.org/stellar/js-xdr#info=devDependencies) + +XDR is an open data format, specified in +[RFC 4506](http://tools.ietf.org/html/rfc4506.html). This library provides a way +to read and write XDR data from javascript. It can read/write all of the +primitive XDR types and also provides facilities to define readers for the +compound XDR types (enums, structs and unions) + +## Installation + +via npm: + +```shell +npm install --save @stellar/js-xdr +``` + +## Usage + +You can find some [examples here](examples/). + +First, let's import the library: + +```javascript +var xdr = require('@stellar/js-xdr'); +// or +import xdr from '@stellar/js-xdr'; +``` + +Now, let's look at how to decode some primitive types: + +```javascript +// booleans +xdr.Bool.fromXDR([0, 0, 0, 0]); // returns false +xdr.Bool.fromXDR([0, 0, 0, 1]); // returns true + +// the inverse of `fromXDR` is `toXDR`, which returns a Buffer +xdr.Bool.toXDR(true); // returns Buffer.from([0,0,0,1]) + +// XDR ints and unsigned ints can be safely represented as +// a javascript number + +xdr.Int.fromXDR([0xff, 0xff, 0xff, 0xff]); // returns -1 +xdr.UnsignedInt.fromXDR([0xff, 0xff, 0xff, 0xff]); // returns 4294967295 + +// XDR Hypers, however, cannot be safely represented in the 53-bits +// of precision we get with a JavaScript `Number`, so we allow creation from big-endian arrays of numbers, strings, or bigints. +var result = xdr.Hyper.fromXDR([0, 0, 0, 0, 0, 0, 0, 0]); // returns an instance of xdr.Hyper +result = new xdr.Hyper(0); // equivalent + +// convert the hyper to a string +result.toString(); // return '0' + +// math! +var ten = result.toBigInt() + 10; +var minusone = result.toBigInt() - 1; + +// construct a number from a string +var big = xdr.Hyper.fromString('1099511627776'); + +// encode the hyper back into xdr +big.toXDR(); // +``` + +## Caveats + +There are a couple of caveats to be aware of with this library: + +1. We do not support quadruple precision floating point values. Attempting to + read or write these values will throw errors. +2. NaN is not handled perfectly for floats and doubles. There are several forms + of NaN as defined by IEEE754 and the browser polyfill for node's Buffer + class seems to handle them poorly. + +## Code generation + +`js-xdr` by itself does not have any ability to parse XDR IDL files and produce +a parser for your custom data types. Instead, that is the responsibility of +[`xdrgen`](http://github.com/stellar/xdrgen). xdrgen will take your .x files +and produce a javascript file that target this library to allow for your own +custom types. + +See [`stellar-base`](http://github.com/stellar/js-stellar-base) for an example +(check out the src/generated directory) + +## Contributing + +Please [see CONTRIBUTING.md for details](CONTRIBUTING.md). + +### To develop and test js-xdr itself + +1. Clone the repo + +```shell +git clone https://github.com/stellar/js-xdr.git +``` + +2. Install dependencies inside js-xdr folder + +```shell +cd js-xdr +npm i +``` + +3. Install Node 14 + +Because we support the oldest maintenance version of Node, please install and +develop on Node 14 so you don't get surprised when your code works locally but +breaks in CI. + +Here's out to install `nvm` if you haven't: https://github.com/creationix/nvm + +```shell +nvm install + +# if you've never installed 14.x before you'll want to re-install yarn +npm install -g yarn +``` + +If you work on several projects that use different Node versions, you might it +helpful to install this automatic version manager: +https://github.com/wbyoung/avn + +4. Observe the project's code style + +While you're making changes, make sure to run the linter periodically to catch any linting errors (in addition to making sure your text editor supports ESLint) + +```shell +yarn fmt +```` + +If you're working on a file not in `src`, limit your code to Node 14! See what's +supported here: https://node.green/ (The reason is that our npm library must +support earlier versions of Node, so the tests need to run on those versions.) diff --git a/node_modules/@stellar/js-xdr/babel.config.json b/node_modules/@stellar/js-xdr/babel.config.json new file mode 100644 index 00000000..e2b47eca --- /dev/null +++ b/node_modules/@stellar/js-xdr/babel.config.json @@ -0,0 +1,16 @@ +{ + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "browsers": [ + "> 2%", + "not ie 11", + "not op_mini all" + ] + } + } + ] + ] +} \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/bower.json b/node_modules/@stellar/js-xdr/bower.json new file mode 100644 index 00000000..774c4129 --- /dev/null +++ b/node_modules/@stellar/js-xdr/bower.json @@ -0,0 +1,9 @@ +{ + "name": "js-xdr", + "version": "0.0.1", + "private": false, + "main": "dist/xdr.js", + "dependencies": {}, + "devDependencies": {}, + "ignore": [] +} \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/buffer.js b/node_modules/@stellar/js-xdr/buffer.js new file mode 100644 index 00000000..86790bc7 --- /dev/null +++ b/node_modules/@stellar/js-xdr/buffer.js @@ -0,0 +1,12 @@ +// See https://github.com/stellar/js-xdr/issues/117 +import { Buffer } from 'buffer'; + +if (!(Buffer.alloc(1).subarray(0, 1) instanceof Buffer)) { + Buffer.prototype.subarray = function subarray(start, end) { + const result = Uint8Array.prototype.subarray.call(this, start, end); + Object.setPrototypeOf(result, Buffer.prototype); + return result; + }; +} + +export default Buffer; diff --git a/node_modules/@stellar/js-xdr/dist/xdr.js b/node_modules/@stellar/js-xdr/dist/xdr.js new file mode 100644 index 00000000..ee13e784 --- /dev/null +++ b/node_modules/@stellar/js-xdr/dist/xdr.js @@ -0,0 +1,3 @@ +/*! For license information please see xdr.js.LICENSE.txt */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.XDR=e():t.XDR=e()}(this,(()=>(()=>{var t={616:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(287);n.hp.alloc(1).subarray(0,1)instanceof n.hp||(n.hp.prototype.subarray=function(t,e){const r=Uint8Array.prototype.subarray.call(this,t,e);return Object.setPrototypeOf(r,n.hp.prototype),r});const i=n.hp},281:(t,e,r)=>{const n=r(164);t.exports=n},164:(t,e,r)=>{"use strict";r.r(e),r.d(e,{Array:()=>F,Bool:()=>S,Double:()=>L,Enum:()=>q,Float:()=>O,Hyper:()=>U,Int:()=>v,LargeInt:()=>x,Opaque:()=>D,Option:()=>X,Quadruple:()=>N,Reference:()=>G,String:()=>M,Struct:()=>Y,Union:()=>W,UnsignedHyper:()=>T,UnsignedInt:()=>R,VarArray:()=>P,VarOpaque:()=>z,Void:()=>k,XdrReader:()=>f,XdrWriter:()=>c,config:()=>it});class n extends TypeError{constructor(t){super(`XDR Write Error: ${t}`)}}class i extends TypeError{constructor(t){super(`XDR Read Error: ${t}`)}}class o extends TypeError{constructor(t){super(`XDR Type Definition Error: ${t}`)}}class s extends o{constructor(){super("method not implemented, it should be overloaded in the descendant class.")}}var u=r(616).A;class f{constructor(t){if(!u.isBuffer(t)){if(!(t instanceof Array||Array.isArray(t)||ArrayBuffer.isView(t)))throw new i(`source invalid: ${t}`);t=u.from(t)}this._buffer=t,this._length=t.length,this._index=0}_buffer;_length;_index;get eof(){return this._index===this._length}advance(t){const e=this._index;if(this._index+=t,this._length0){for(let t=0;t0){const t=this.alloc(r);this._buffer.fill(0,t,this._index)}}writeInt32BE(t){const e=this.alloc(4);this._buffer.writeInt32BE(t,e)}writeUInt32BE(t){const e=this.alloc(4);this._buffer.writeUInt32BE(t,e)}writeBigInt64BE(t){const e=this.alloc(8);this._buffer.writeBigInt64BE(t,e)}writeBigUInt64BE(t){const e=this.alloc(8);this._buffer.writeBigUInt64BE(t,e)}writeFloatBE(t){const e=this.alloc(4);this._buffer.writeFloatBE(t,e)}writeDoubleBE(t){const e=this.alloc(8);this._buffer.writeDoubleBE(t,e)}static bufferChunkSize=h}var l=r(616).A;class p{toXDR(t="raw"){if(!this.write)return this.constructor.toXDR(this,t);const e=new c;return this.write(this,e),w(e.finalize(),t)}fromXDR(t,e="raw"){if(!this.read)return this.constructor.fromXDR(t,e);const r=new f(m(t,e)),n=this.read(r);return r.ensureInputConsumed(),n}validateXDR(t,e="raw"){try{return this.fromXDR(t,e),!0}catch(t){return!1}}static toXDR(t,e="raw"){const r=new c;return this.write(t,r),w(r.finalize(),e)}static fromXDR(t,e="raw"){const r=new f(m(t,e)),n=this.read(r);return r.ensureInputConsumed(),n}static validateXDR(t,e="raw"){try{return this.fromXDR(t,e),!0}catch(t){return!1}}}class d extends p{static read(t){throw new s}static write(t,e){throw new s}static isValid(t){return!1}}class g extends p{isValid(t){return!1}}class y extends TypeError{constructor(t){super(`Invalid format ${t}, must be one of "raw", "hex", "base64"`)}}function w(t,e){switch(e){case"raw":return t;case"hex":return t.toString("hex");case"base64":return t.toString("base64");default:throw new y(e)}}function m(t,e){switch(e){case"raw":return t;case"hex":return l.from(t,"hex");case"base64":return l.from(t,"base64");default:throw new y(e)}}function b(t,e){return null!=t&&(t instanceof e||_(t,e)&&"function"==typeof t.constructor.read&&"function"==typeof t.constructor.write&&_(t,"XdrType"))}function _(t,e){do{if(t.constructor.name===e)return!0}while(t=Object.getPrototypeOf(t));return!1}const B=2147483647,E=-2147483648;class v extends d{static read(t){return t.readInt32BE()}static write(t,e){if("number"!=typeof t)throw new n("not a number");if((0|t)!==t)throw new n("invalid i32 value");e.writeInt32BE(t)}static isValid(t){return"number"==typeof t&&(0|t)===t&&(t>=E&&t<=B)}}function A(t,e,r){if("bigint"!=typeof t)throw new TypeError("Expected bigint 'value', got "+typeof t);const n=e/r;if(1===n)return[t];if(r<32||r>128||2!==n&&4!==n&&8!==n)throw new TypeError(`invalid bigint (${t}) and slice size (${e} -> ${r}) combination`);const i=BigInt(r),o=new Array(n);for(let e=0;e>=i;return o}function I(t,e){if(e)return[0n,(1n<=o&&i<=s)return i;throw new TypeError(`bigint values [${t}] for ${function(t,e){return`${e?"u":"i"}${t}`}(e,r)} out of range [${o}, ${s}]: ${i}`)}(t,this.size,this.unsigned)}get unsigned(){throw new s}get size(){throw new s}slice(t){return A(this._value,this.size,t)}toString(){return this._value.toString()}toJSON(){return{_value:this._value.toString()}}toBigInt(){return BigInt(this._value)}static read(t){const{size:e}=this.prototype;return 64===e?new this(t.readBigUInt64BE()):new this(...Array.from({length:e/64},(()=>t.readBigUInt64BE())).reverse())}static write(t,e){if(t instanceof this)t=t._value;else if("bigint"!=typeof t||t>this.MAX_VALUE||t>32n)|0}get size(){return 64}get unsigned(){return!1}static fromBits(t,e){return new this(t,e)}}U.defineIntBoundaries();const $=4294967295;class R extends d{static read(t){return t.readUInt32BE()}static write(t,e){if("number"!=typeof t||!(t>=0&&t<=$)||t%1!=0)throw new n("invalid u32 value");e.writeUInt32BE(t)}static isValid(t){return"number"==typeof t&&t%1==0&&(t>=0&&t<=$)}}R.MAX_VALUE=$,R.MIN_VALUE=0;class T extends x{constructor(...t){super(t)}get low(){return Number(0xffffffffn&this._value)|0}get high(){return Number(this._value>>32n)|0}get size(){return 64}get unsigned(){return!0}static fromBits(t,e){return new this(t,e)}}T.defineIntBoundaries();class O extends d{static read(t){return t.readFloatBE()}static write(t,e){if("number"!=typeof t)throw new n("not a number");e.writeFloatBE(t)}static isValid(t){return"number"==typeof t}}class L extends d{static read(t){return t.readDoubleBE()}static write(t,e){if("number"!=typeof t)throw new n("not a number");e.writeDoubleBE(t)}static isValid(t){return"number"==typeof t}}class N extends d{static read(){throw new o("quadruple not supported")}static write(){throw new o("quadruple not supported")}static isValid(){return!1}}class S extends d{static read(t){const e=v.read(t);switch(e){case 0:return!1;case 1:return!0;default:throw new i(`got ${e} when trying to read a bool`)}}static write(t,e){const r=t?1:0;v.write(r,e)}static isValid(t){return"boolean"==typeof t}}var V=r(616).A;class M extends g{constructor(t=R.MAX_VALUE){super(),this._maxLength=t}read(t){const e=R.read(t);if(e>this._maxLength)throw new i(`saw ${e} length String, max allowed is ${this._maxLength}`);return t.read(e)}readString(t){return this.read(t).toString("utf8")}write(t,e){const r="string"==typeof t?V.byteLength(t,"utf8"):t.length;if(r>this._maxLength)throw new n(`got ${t.length} bytes, max allowed is ${this._maxLength}`);R.write(r,e),e.write(t,r)}isValid(t){return"string"==typeof t?V.byteLength(t,"utf8")<=this._maxLength:!!(t instanceof Array||V.isBuffer(t))&&t.length<=this._maxLength}}var C=r(616).A;class D extends g{constructor(t){super(),this._length=t}read(t){return t.read(this._length)}write(t,e){const{length:r}=t;if(r!==this._length)throw new n(`got ${t.length} bytes, expected ${this._length}`);e.write(t,r)}isValid(t){return C.isBuffer(t)&&t.length===this._length}}var j=r(616).A;class z extends g{constructor(t=R.MAX_VALUE){super(),this._maxLength=t}read(t){const e=R.read(t);if(e>this._maxLength)throw new i(`saw ${e} length VarOpaque, max allowed is ${this._maxLength}`);return t.read(e)}write(t,e){const{length:r}=t;if(t.length>this._maxLength)throw new n(`got ${t.length} bytes, max allowed is ${this._maxLength}`);R.write(r,e),e.write(t,r)}isValid(t){return j.isBuffer(t)&&t.length<=this._maxLength}}class F extends g{constructor(t,e){super(),this._childType=t,this._length=e}read(t){const e=new r.g.Array(this._length);for(let r=0;rthis._maxLength)throw new i(`saw ${e} length VarArray, max allowed is ${this._maxLength}`);const r=new Array(e);for(let n=0;nthis._maxLength)throw new n(`got array of size ${t.length}, max allowed is ${this._maxLength}`);R.write(t.length,e);for(const r of t)this._childType.write(r,e)}isValid(t){if(!(t instanceof Array)||t.length>this._maxLength)return!1;for(const e of t)if(!this._childType.isValid(e))return!1;return!0}}class X extends d{constructor(t){super(),this._childType=t}read(t){if(S.read(t))return this._childType.read(t)}write(t,e){const r=null!=t;S.write(r,e),r&&this._childType.write(t,e)}isValid(t){return null==t||this._childType.isValid(t)}}class k extends d{static read(){}static write(t){if(void 0!==t)throw new n("trying to write value to a void slot")}static isValid(t){return void 0===t}}class q extends d{constructor(t,e){super(),this.name=t,this.value=e}static read(t){const e=v.read(t),r=this._byValue[e];if(void 0===r)throw new i(`unknown ${this.enumName} member for value ${e}`);return r}static write(t,e){if(!this.isValid(t))throw new n(`${t} has enum name ${t?.enumName}, not ${this.enumName}: ${JSON.stringify(t)}`);v.write(t.value,e)}static isValid(t){return t?.constructor?.enumName===this.enumName||b(t,this)}static members(){return this._members}static values(){return Object.values(this._members)}static fromName(t){const e=this._members[t];if(!e)throw new TypeError(`${t} is not a member of ${this.enumName}`);return e}static fromValue(t){const e=this._byValue[t];if(void 0===e)throw new TypeError(`${t} is not a value of any member of ${this.enumName}`);return e}static create(t,e,r){const n=class extends q{};n.enumName=e,t.results[e]=n,n._members={},n._byValue={};for(const[t,e]of Object.entries(r)){const r=new n(t,e);n._members[t]=r,n._byValue[e]=r,n[t]=()=>r}return n}}class G extends d{resolve(){throw new o('"resolve" method should be implemented in the descendant class')}}class Y extends g{constructor(t){super(),this._attributes=t||{}}static read(t){const e={};for(const[r,n]of this._fields)e[r]=n.read(t);return new this(e)}static write(t,e){if(!this.isValid(t))throw new n(`${t} has struct name ${t?.constructor?.structName}, not ${this.structName}: ${JSON.stringify(t)}`);for(const[r,n]of this._fields){const i=t._attributes[r];n.write(i,e)}}static isValid(t){return t?.constructor?.structName===this.structName||b(t,this)}static create(t,e,r){const n=class extends Y{};n.structName=e,t.results[e]=n;const i=new Array(r.length);for(let e=0;e{"use strict";e.byteLength=function(t){var e=u(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=u(t),s=o[0],f=o[1],a=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,f)),h=0,c=f>0?s-4:s;for(r=0;r>16&255,a[h++]=e>>8&255,a[h++]=255&e;2===f&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,a[h++]=255&e);1===f&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,a[h++]=e>>8&255,a[h++]=255&e);return a},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,u=0,a=n-i;ua?a:u+s));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function u(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var i,o,s=[],u=e;u>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},287:(t,e,r)=>{"use strict";const n=r(526),i=r(251),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.hp=f,e.IS=50;const s=2147483647;function u(t){if(t>s)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,f.prototype),e}function f(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return a(t,e,r)}function a(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!f.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=u(r);const i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(W(t,Uint8Array)){const e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return l(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(W(t,ArrayBuffer)||t&&W(t.buffer,ArrayBuffer))return p(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(W(t,SharedArrayBuffer)||t&&W(t.buffer,SharedArrayBuffer)))return p(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return f.from(n,e,r);const i=function(t){if(f.isBuffer(t)){const e=0|d(t.length),r=u(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return"number"!=typeof t.length||H(t.length)?u(0):l(t);if("Buffer"===t.type&&Array.isArray(t.data))return l(t.data)}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return f.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function h(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function c(t){return h(t),u(t<0?0:0|d(t))}function l(t){const e=t.length<0?0:0|d(t.length),r=u(e);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|t}function g(t,e){if(f.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||W(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return G(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Y(t).length;default:if(i)return n?-1:G(t).length;e=(""+e).toLowerCase(),i=!0}}function y(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return x(this,e,r);case"ascii":return $(this,e,r);case"latin1":case"binary":return R(this,e,r);case"base64":return I(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function w(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function m(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),H(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=f.from(e,n)),f.isBuffer(e))return 0===e.length?-1:b(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,r,n,i){let o,s=1,u=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,u/=2,f/=2,r/=2}function a(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){let n=-1;for(o=r;ou&&(r=u-f),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=e.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function I(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function x(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+s<=r){let r,n,u,f;switch(s){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(f=(31&e)<<6|63&r,f>127&&(o=f));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(f=(15&e)<<12|(63&r)<<6|63&n,f>2047&&(f<55296||f>57343)&&(o=f));break;case 4:r=t[i+1],n=t[i+2],u=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&u)&&(f=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&u,f>65535&&f<1114112&&(o=f))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){const e=t.length;if(e<=U)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(f.isBuffer(e)||(e=f.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!f.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},f.byteLength=g,f.prototype._isBuffer=!0,f.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},o&&(f.prototype[o]=f.prototype.inspect),f.prototype.compare=function(t,e,r,n,i){if(W(t,Uint8Array)&&(t=f.from(t,t.offset,t.byteLength)),!f.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0);const u=Math.min(o,s),a=this.slice(n,i),h=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return _(this,t,e,r);case"utf8":case"utf-8":return B(this,t,e,r);case"ascii":case"latin1":case"binary":return E(this,t,e,r);case"base64":return v(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const U=4096;function $(t,e,r){let n="";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function N(t,e,r,n,i,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function S(t,e,r,n,i){P(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,r}function V(t,e,r,n,i){P(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=s,s>>=8,t[r+2]=s,s>>=8,t[r+1]=s,s>>=8,t[r]=s,r+8}function M(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function C(t,e,r,n,o){return e=+e,r>>>=0,o||M(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function D(t,e,r,n,o){return e=+e,r>>>=0,o||M(t,0,r,8),i.write(t,e,r,n,52,8),r+8}f.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],i=1,o=0;for(;++o>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},f.prototype.readUint8=f.prototype.readUInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),this[t]},f.prototype.readUint16LE=f.prototype.readUInt16LE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUint16BE=f.prototype.readUInt16BE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUint32LE=f.prototype.readUInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUint32BE=f.prototype.readUInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readBigUInt64LE=Z((function(t){X(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*e)),n},f.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},f.prototype.readInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readBigInt64LE=Z((function(t){X(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||L(t,4,this.length),i.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,e){return t>>>=0,e||L(t,4,this.length),i.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,e){return t>>>=0,e||L(t,8,this.length),i.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,e){return t>>>=0,e||L(t,8,this.length),i.read(this,t,!1,52,8)},f.prototype.writeUintLE=f.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){N(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!n){N(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},f.prototype.writeUint8=f.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,255,0),this[e]=255&t,e+1},f.prototype.writeUint16LE=f.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},f.prototype.writeUint16BE=f.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},f.prototype.writeUint32LE=f.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},f.prototype.writeUint32BE=f.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},f.prototype.writeBigUInt64LE=Z((function(t,e=0){return S(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),f.prototype.writeBigUInt64BE=Z((function(t,e=0){return V(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),f.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=0,o=1,s=0;for(this[e]=255&t;++i>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o|0)-s&255;return e+r},f.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},f.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},f.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},f.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},f.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},f.prototype.writeBigInt64LE=Z((function(t,e=0){return S(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),f.prototype.writeBigInt64BE=Z((function(t,e=0){return V(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),f.prototype.writeFloatLE=function(t,e,r){return C(this,t,e,!0,r)},f.prototype.writeFloatBE=function(t,e,r){return C(this,t,e,!1,r)},f.prototype.writeDoubleLE=function(t,e,r){return D(this,t,e,!0,r)},f.prototype.writeDoubleBE=function(t,e,r){return D(this,t,e,!1,r)},f.prototype.copy=function(t,e,r,n){if(!f.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function P(t,e,r,n,i,o){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new j.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,r){X(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||k(e,t.length-(r+1))}(n,i,o)}function X(t,e){if("number"!=typeof t)throw new j.ERR_INVALID_ARG_TYPE(e,"number",t)}function k(t,e,r){if(Math.floor(t)!==t)throw X(t,r),new j.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new j.ERR_BUFFER_OUT_OF_BOUNDS;throw new j.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=F(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=F(i)),i+="n"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const q=/[^+/0-9A-Za-z-_]/g;function G(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Y(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function J(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function W(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function H(t){return t!=t}const Q=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function Z(t){return"undefined"==typeof BigInt?K:t}function K(){throw new Error("BigInt not supported")}},251:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,u=8*i-n-1,f=(1<>1,h=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,o=p&(1<<-h)-1,p>>=-h,h+=u;h>0;o=256*o+t[e+c],c+=l,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+c],c+=l,h-=8);if(0===o)o=1-a;else{if(o===f)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=a}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,u,f,a=8*o-i-1,h=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-s))<1&&(s--,f*=2),(e+=s+c>=1?l/f:l*Math.pow(2,1-c))*f>=2&&(s++,f/=2),s+c>=h?(u=0,s=h):s+c>=1?(u=(e*f-1)*Math.pow(2,i),s+=c):(u=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&u,p+=d,u/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=d,s/=256,a-=8);t[r+p-d]|=128*g}}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r(281)})())); +//# sourceMappingURL=xdr.js.map \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/dist/xdr.js.LICENSE.txt b/node_modules/@stellar/js-xdr/dist/xdr.js.LICENSE.txt new file mode 100644 index 00000000..df537c53 --- /dev/null +++ b/node_modules/@stellar/js-xdr/dist/xdr.js.LICENSE.txt @@ -0,0 +1,8 @@ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ diff --git a/node_modules/@stellar/js-xdr/dist/xdr.js.map b/node_modules/@stellar/js-xdr/dist/xdr.js.map new file mode 100644 index 00000000..1f167f47 --- /dev/null +++ b/node_modules/@stellar/js-xdr/dist/xdr.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xdr.js","mappings":"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","sources":["webpack://XDR/webpack/universalModuleDefinition","webpack://XDR/./buffer.js","webpack://XDR/./src/browser.js","webpack://XDR/./src/errors.js","webpack://XDR/./src/serialization/xdr-reader.js","webpack://XDR/./src/serialization/xdr-writer.js","webpack://XDR/./src/xdr-type.js","webpack://XDR/./src/int.js","webpack://XDR/./src/bigint-encoder.js","webpack://XDR/./src/large-int.js","webpack://XDR/./src/hyper.js","webpack://XDR/./src/unsigned-int.js","webpack://XDR/./src/unsigned-hyper.js","webpack://XDR/./src/float.js","webpack://XDR/./src/double.js","webpack://XDR/./src/quadruple.js","webpack://XDR/./src/bool.js","webpack://XDR/./src/string.js","webpack://XDR/./src/opaque.js","webpack://XDR/./src/var-opaque.js","webpack://XDR/./src/array.js","webpack://XDR/./src/var-array.js","webpack://XDR/./src/option.js","webpack://XDR/./src/void.js","webpack://XDR/./src/enum.js","webpack://XDR/./src/reference.js","webpack://XDR/./src/struct.js","webpack://XDR/./src/union.js","webpack://XDR/./src/config.js","webpack://XDR/./node_modules/base64-js/index.js","webpack://XDR/./node_modules/buffer/index.js","webpack://XDR/./node_modules/ieee754/index.js","webpack://XDR/webpack/bootstrap","webpack://XDR/webpack/runtime/define property getters","webpack://XDR/webpack/runtime/global","webpack://XDR/webpack/runtime/hasOwnProperty shorthand","webpack://XDR/webpack/runtime/make namespace object","webpack://XDR/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"XDR\"] = factory();\n\telse\n\t\troot[\"XDR\"] = factory();\n})(this, () => {\nreturn ","// See https://github.com/stellar/js-xdr/issues/117\nimport { Buffer } from 'buffer';\n\nif (!(Buffer.alloc(1).subarray(0, 1) instanceof Buffer)) {\n Buffer.prototype.subarray = function subarray(start, end) {\n const result = Uint8Array.prototype.subarray.call(this, start, end);\n Object.setPrototypeOf(result, Buffer.prototype);\n return result;\n };\n}\n\nexport default Buffer;\n","// eslint-disable-next-line prefer-import/prefer-import-over-require\nconst exports = require('./index');\nmodule.exports = exports;\n","export class XdrWriterError extends TypeError {\n constructor(message) {\n super(`XDR Write Error: ${message}`);\n }\n}\n\nexport class XdrReaderError extends TypeError {\n constructor(message) {\n super(`XDR Read Error: ${message}`);\n }\n}\n\nexport class XdrDefinitionError extends TypeError {\n constructor(message) {\n super(`XDR Type Definition Error: ${message}`);\n }\n}\n\nexport class XdrNotImplementedDefinitionError extends XdrDefinitionError {\n constructor() {\n super(\n `method not implemented, it should be overloaded in the descendant class.`\n );\n }\n}\n","/**\n * @internal\n */\nimport { XdrReaderError } from '../errors';\n\nexport class XdrReader {\n /**\n * @constructor\n * @param {Buffer} source - Buffer containing serialized data\n */\n constructor(source) {\n if (!Buffer.isBuffer(source)) {\n if (\n source instanceof Array ||\n Array.isArray(source) ||\n ArrayBuffer.isView(source)\n ) {\n source = Buffer.from(source);\n } else {\n throw new XdrReaderError(`source invalid: ${source}`);\n }\n }\n\n this._buffer = source;\n this._length = source.length;\n this._index = 0;\n }\n\n /**\n * @type {Buffer}\n * @private\n * @readonly\n */\n _buffer;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _length;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _index;\n\n /**\n * Check if the reader reached the end of the input buffer\n * @return {Boolean}\n */\n get eof() {\n return this._index === this._length;\n }\n\n /**\n * Advance reader position, check padding and overflow\n * @param {Number} size - Bytes to read\n * @return {Number} Position to read from\n * @private\n */\n advance(size) {\n const from = this._index;\n // advance cursor position\n this._index += size;\n // check buffer boundaries\n if (this._length < this._index)\n throw new XdrReaderError(\n 'attempt to read outside the boundary of the buffer'\n );\n // check that padding is correct for Opaque and String\n const padding = 4 - (size % 4 || 4);\n if (padding > 0) {\n for (let i = 0; i < padding; i++)\n if (this._buffer[this._index + i] !== 0)\n // all bytes in the padding should be zeros\n throw new XdrReaderError('invalid padding');\n this._index += padding;\n }\n return from;\n }\n\n /**\n * Reset reader position\n * @return {void}\n */\n rewind() {\n this._index = 0;\n }\n\n /**\n * Read byte array from the buffer\n * @param {Number} size - Bytes to read\n * @return {Buffer} - Sliced portion of the underlying buffer\n */\n read(size) {\n const from = this.advance(size);\n return this._buffer.subarray(from, from + size);\n }\n\n /**\n * Read i32 from buffer\n * @return {Number}\n */\n readInt32BE() {\n return this._buffer.readInt32BE(this.advance(4));\n }\n\n /**\n * Read u32 from buffer\n * @return {Number}\n */\n readUInt32BE() {\n return this._buffer.readUInt32BE(this.advance(4));\n }\n\n /**\n * Read i64 from buffer\n * @return {BigInt}\n */\n readBigInt64BE() {\n return this._buffer.readBigInt64BE(this.advance(8));\n }\n\n /**\n * Read u64 from buffer\n * @return {BigInt}\n */\n readBigUInt64BE() {\n return this._buffer.readBigUInt64BE(this.advance(8));\n }\n\n /**\n * Read float from buffer\n * @return {Number}\n */\n readFloatBE() {\n return this._buffer.readFloatBE(this.advance(4));\n }\n\n /**\n * Read double from buffer\n * @return {Number}\n */\n readDoubleBE() {\n return this._buffer.readDoubleBE(this.advance(8));\n }\n\n /**\n * Ensure that input buffer has been consumed in full, otherwise it's a type mismatch\n * @return {void}\n * @throws {XdrReaderError}\n */\n ensureInputConsumed() {\n if (this._index !== this._length)\n throw new XdrReaderError(\n `invalid XDR contract typecast - source buffer not entirely consumed`\n );\n }\n}\n","const BUFFER_CHUNK = 8192; // 8 KB chunk size increment\n\n/**\n * @internal\n */\nexport class XdrWriter {\n /**\n * @param {Buffer|Number} [buffer] - Optional destination buffer\n */\n constructor(buffer) {\n if (typeof buffer === 'number') {\n buffer = Buffer.allocUnsafe(buffer);\n } else if (!(buffer instanceof Buffer)) {\n buffer = Buffer.allocUnsafe(BUFFER_CHUNK);\n }\n this._buffer = buffer;\n this._length = buffer.length;\n }\n\n /**\n * @type {Buffer}\n * @private\n * @readonly\n */\n _buffer;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _length;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _index = 0;\n\n /**\n * Advance writer position, write padding if needed, auto-resize the buffer\n * @param {Number} size - Bytes to write\n * @return {Number} Position to read from\n * @private\n */\n alloc(size) {\n const from = this._index;\n // advance cursor position\n this._index += size;\n // ensure sufficient buffer size\n if (this._length < this._index) {\n this.resize(this._index);\n }\n return from;\n }\n\n /**\n * Increase size of the underlying buffer\n * @param {Number} minRequiredSize - Minimum required buffer size\n * @return {void}\n * @private\n */\n resize(minRequiredSize) {\n // calculate new length, align new buffer length by chunk size\n const newLength = Math.ceil(minRequiredSize / BUFFER_CHUNK) * BUFFER_CHUNK;\n // create new buffer and copy previous data\n const newBuffer = Buffer.allocUnsafe(newLength);\n this._buffer.copy(newBuffer, 0, 0, this._length);\n // update references\n this._buffer = newBuffer;\n this._length = newLength;\n }\n\n /**\n * Return XDR-serialized value\n * @return {Buffer}\n */\n finalize() {\n // clip underlying buffer to the actually written value\n return this._buffer.subarray(0, this._index);\n }\n\n /**\n * Return XDR-serialized value as byte array\n * @return {Number[]}\n */\n toArray() {\n return [...this.finalize()];\n }\n\n /**\n * Write byte array from the buffer\n * @param {Buffer|String} value - Bytes/string to write\n * @param {Number} size - Size in bytes\n * @return {XdrReader} - XdrReader wrapper on top of a subarray\n */\n write(value, size) {\n if (typeof value === 'string') {\n // serialize string directly to the output buffer\n const offset = this.alloc(size);\n this._buffer.write(value, offset, 'utf8');\n } else {\n // copy data to the output buffer\n if (!(value instanceof Buffer)) {\n value = Buffer.from(value);\n }\n const offset = this.alloc(size);\n value.copy(this._buffer, offset, 0, size);\n }\n\n // add padding for 4-byte XDR alignment\n const padding = 4 - (size % 4 || 4);\n if (padding > 0) {\n const offset = this.alloc(padding);\n this._buffer.fill(0, offset, this._index);\n }\n }\n\n /**\n * Write i32 from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeInt32BE(value) {\n const offset = this.alloc(4);\n this._buffer.writeInt32BE(value, offset);\n }\n\n /**\n * Write u32 from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeUInt32BE(value) {\n const offset = this.alloc(4);\n this._buffer.writeUInt32BE(value, offset);\n }\n\n /**\n * Write i64 from buffer\n * @param {BigInt} value - Value to serialize\n * @return {void}\n */\n writeBigInt64BE(value) {\n const offset = this.alloc(8);\n this._buffer.writeBigInt64BE(value, offset);\n }\n\n /**\n * Write u64 from buffer\n * @param {BigInt} value - Value to serialize\n * @return {void}\n */\n writeBigUInt64BE(value) {\n const offset = this.alloc(8);\n this._buffer.writeBigUInt64BE(value, offset);\n }\n\n /**\n * Write float from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeFloatBE(value) {\n const offset = this.alloc(4);\n this._buffer.writeFloatBE(value, offset);\n }\n\n /**\n * Write double from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeDoubleBE(value) {\n const offset = this.alloc(8);\n this._buffer.writeDoubleBE(value, offset);\n }\n\n static bufferChunkSize = BUFFER_CHUNK;\n}\n","import { XdrReader } from './serialization/xdr-reader';\nimport { XdrWriter } from './serialization/xdr-writer';\nimport { XdrNotImplementedDefinitionError } from './errors';\n\nclass XdrType {\n /**\n * Encode value to XDR format\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {String|Buffer}\n */\n toXDR(format = 'raw') {\n if (!this.write) return this.constructor.toXDR(this, format);\n\n const writer = new XdrWriter();\n this.write(this, writer);\n return encodeResult(writer.finalize(), format);\n }\n\n /**\n * Decode XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {this}\n */\n fromXDR(input, format = 'raw') {\n if (!this.read) return this.constructor.fromXDR(input, format);\n\n const reader = new XdrReader(decodeInput(input, format));\n const result = this.read(reader);\n reader.ensureInputConsumed();\n return result;\n }\n\n /**\n * Check whether input contains a valid XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {Boolean}\n */\n validateXDR(input, format = 'raw') {\n try {\n this.fromXDR(input, format);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Encode value to XDR format\n * @param {this} value - Value to serialize\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {Buffer}\n */\n static toXDR(value, format = 'raw') {\n const writer = new XdrWriter();\n this.write(value, writer);\n return encodeResult(writer.finalize(), format);\n }\n\n /**\n * Decode XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {this}\n */\n static fromXDR(input, format = 'raw') {\n const reader = new XdrReader(decodeInput(input, format));\n const result = this.read(reader);\n reader.ensureInputConsumed();\n return result;\n }\n\n /**\n * Check whether input contains a valid XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {Boolean}\n */\n static validateXDR(input, format = 'raw') {\n try {\n this.fromXDR(input, format);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport class XdrPrimitiveType extends XdrType {\n /**\n * Read value from the XDR-serialized input\n * @param {XdrReader} reader - XdrReader instance\n * @return {this}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n static read(reader) {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Write XDR value to the buffer\n * @param {this} value - Value to write\n * @param {XdrWriter} writer - XdrWriter instance\n * @return {void}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n static write(value, writer) {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Check whether XDR primitive value is valid\n * @param {this} value - Value to check\n * @return {Boolean}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n static isValid(value) {\n return false;\n }\n}\n\nexport class XdrCompositeType extends XdrType {\n // Every descendant should implement two methods: read(reader) and write(value, writer)\n\n /**\n * Check whether XDR primitive value is valid\n * @param {this} value - Value to check\n * @return {Boolean}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n isValid(value) {\n return false;\n }\n}\n\nclass InvalidXdrEncodingFormatError extends TypeError {\n constructor(format) {\n super(`Invalid format ${format}, must be one of \"raw\", \"hex\", \"base64\"`);\n }\n}\n\nfunction encodeResult(buffer, format) {\n switch (format) {\n case 'raw':\n return buffer;\n case 'hex':\n return buffer.toString('hex');\n case 'base64':\n return buffer.toString('base64');\n default:\n throw new InvalidXdrEncodingFormatError(format);\n }\n}\n\nfunction decodeInput(input, format) {\n switch (format) {\n case 'raw':\n return input;\n case 'hex':\n return Buffer.from(input, 'hex');\n case 'base64':\n return Buffer.from(input, 'base64');\n default:\n throw new InvalidXdrEncodingFormatError(format);\n }\n}\n\n/**\n * Provides a \"duck typed\" version of the native `instanceof` for read/write.\n *\n * \"Duck typing\" means if the parameter _looks like_ and _acts like_ a duck\n * (i.e. the type we're checking), it will be treated as that type.\n *\n * In this case, the \"type\" we're looking for is \"like XdrType\" but also \"like\n * XdrCompositeType|XdrPrimitiveType\" (i.e. serializable), but also conditioned\n * on a particular subclass of \"XdrType\" (e.g. {@link Union} which extends\n * XdrType).\n *\n * This makes the package resilient to downstream systems that may be combining\n * many versions of a package across its stack that are technically compatible\n * but fail `instanceof` checks due to cross-pollination.\n */\nexport function isSerializableIsh(value, subtype) {\n return (\n value !== undefined &&\n value !== null && // prereqs, otherwise `getPrototypeOf` pops\n (value instanceof subtype || // quickest check\n // Do an initial constructor check (anywhere is fine so that children of\n // `subtype` still work), then\n (hasConstructor(value, subtype) &&\n // ensure it has read/write methods, then\n typeof value.constructor.read === 'function' &&\n typeof value.constructor.write === 'function' &&\n // ensure XdrType is in the prototype chain\n hasConstructor(value, 'XdrType')))\n );\n}\n\n/** Tries to find `subtype` in any of the constructors or meta of `instance`. */\nexport function hasConstructor(instance, subtype) {\n do {\n const ctor = instance.constructor;\n if (ctor.name === subtype) {\n return true;\n }\n } while ((instance = Object.getPrototypeOf(instance)));\n return false;\n}\n\n/**\n * @typedef {'raw'|'hex'|'base64'} XdrEncodingFormat\n */\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nconst MAX_VALUE = 2147483647;\nconst MIN_VALUE = -2147483648;\n\nexport class Int extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readInt32BE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (typeof value !== 'number') throw new XdrWriterError('not a number');\n\n if ((value | 0) !== value) throw new XdrWriterError('invalid i32 value');\n\n writer.writeInt32BE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n if (typeof value !== 'number' || (value | 0) !== value) {\n return false;\n }\n\n return value >= MIN_VALUE && value <= MAX_VALUE;\n }\n}\n\nInt.MAX_VALUE = MAX_VALUE;\nInt.MIN_VALUE = -MIN_VALUE;\n","/**\n * Encode a native `bigint` value from a list of arbitrary integer-like values.\n *\n * @param {Array} parts - Slices to encode in big-endian\n * format (i.e. earlier elements are higher bits)\n * @param {64|128|256} size - Number of bits in the target integer type\n * @param {boolean} unsigned - Whether it's an unsigned integer\n *\n * @returns {bigint}\n */\nexport function encodeBigIntFromBits(parts, size, unsigned) {\n if (!(parts instanceof Array)) {\n // allow a single parameter instead of an array\n parts = [parts];\n } else if (parts.length && parts[0] instanceof Array) {\n // unpack nested array param\n parts = parts[0];\n }\n\n const total = parts.length;\n const sliceSize = size / total;\n switch (sliceSize) {\n case 32:\n case 64:\n case 128:\n case 256:\n break;\n\n default:\n throw new RangeError(\n `expected slices to fit in 32/64/128/256 bits, got ${parts}`\n );\n }\n\n // normalize all inputs to bigint\n try {\n for (let i = 0; i < parts.length; i++) {\n if (typeof parts[i] !== 'bigint') {\n parts[i] = BigInt(parts[i].valueOf());\n }\n }\n } catch (e) {\n throw new TypeError(`expected bigint-like values, got: ${parts} (${e})`);\n }\n\n // check for sign mismatches for single inputs (this is a special case to\n // handle one parameter passed to e.g. UnsignedHyper et al.)\n // see https://github.com/stellar/js-xdr/pull/100#discussion_r1228770845\n if (unsigned && parts.length === 1 && parts[0] < 0n) {\n throw new RangeError(`expected a positive value, got: ${parts}`);\n }\n\n // encode in big-endian fashion, shifting each slice by the slice size\n let result = BigInt.asUintN(sliceSize, parts[0]); // safe: len >= 1\n for (let i = 1; i < parts.length; i++) {\n result |= BigInt.asUintN(sliceSize, parts[i]) << BigInt(i * sliceSize);\n }\n\n // interpret value as signed if necessary and clamp it\n if (!unsigned) {\n result = BigInt.asIntN(size, result);\n }\n\n // check boundaries\n const [min, max] = calculateBigIntBoundaries(size, unsigned);\n if (result >= min && result <= max) {\n return result;\n }\n\n // failed to encode\n throw new TypeError(\n `bigint values [${parts}] for ${formatIntName(\n size,\n unsigned\n )} out of range [${min}, ${max}]: ${result}`\n );\n}\n\n/**\n * Transforms a single bigint value that's supposed to represent a `size`-bit\n * integer into a list of `sliceSize`d chunks.\n *\n * @param {bigint} value - Single bigint value to decompose\n * @param {64|128|256} iSize - Number of bits represented by `value`\n * @param {32|64|128} sliceSize - Number of chunks to decompose into\n * @return {bigint[]}\n */\nexport function sliceBigInt(value, iSize, sliceSize) {\n if (typeof value !== 'bigint') {\n throw new TypeError(`Expected bigint 'value', got ${typeof value}`);\n }\n\n const total = iSize / sliceSize;\n if (total === 1) {\n return [value];\n }\n\n if (\n sliceSize < 32 ||\n sliceSize > 128 ||\n (total !== 2 && total !== 4 && total !== 8)\n ) {\n throw new TypeError(\n `invalid bigint (${value}) and slice size (${iSize} -> ${sliceSize}) combination`\n );\n }\n\n const shift = BigInt(sliceSize);\n\n // iterate shift and mask application\n const result = new Array(total);\n for (let i = 0; i < total; i++) {\n // we force a signed interpretation to preserve sign in each slice value,\n // but downstream can convert to unsigned if it's appropriate\n result[i] = BigInt.asIntN(sliceSize, value); // clamps to size\n\n // move on to the next chunk\n value >>= shift;\n }\n\n return result;\n}\n\nexport function formatIntName(precision, unsigned) {\n return `${unsigned ? 'u' : 'i'}${precision}`;\n}\n\n/**\n * Get min|max boundaries for an integer with a specified bits size\n * @param {64|128|256} size - Number of bits in the source integer type\n * @param {Boolean} unsigned - Whether it's an unsigned integer\n * @return {BigInt[]}\n */\nexport function calculateBigIntBoundaries(size, unsigned) {\n if (unsigned) {\n return [0n, (1n << BigInt(size)) - 1n];\n }\n\n const boundary = 1n << BigInt(size - 1);\n return [0n - boundary, boundary - 1n];\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport {\n calculateBigIntBoundaries,\n encodeBigIntFromBits,\n sliceBigInt\n} from './bigint-encoder';\nimport { XdrNotImplementedDefinitionError, XdrWriterError } from './errors';\n\nexport class LargeInt extends XdrPrimitiveType {\n /**\n * @param {Array} parts - Slices to encode\n */\n constructor(args) {\n super();\n this._value = encodeBigIntFromBits(args, this.size, this.unsigned);\n }\n\n /**\n * Signed/unsigned representation\n * @type {Boolean}\n * @abstract\n */\n get unsigned() {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Size of the integer in bits\n * @type {Number}\n * @abstract\n */\n get size() {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Slice integer to parts with smaller bit size\n * @param {32|64|128} sliceSize - Size of each part in bits\n * @return {BigInt[]}\n */\n slice(sliceSize) {\n return sliceBigInt(this._value, this.size, sliceSize);\n }\n\n toString() {\n return this._value.toString();\n }\n\n toJSON() {\n return { _value: this._value.toString() };\n }\n\n toBigInt() {\n return BigInt(this._value);\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const { size } = this.prototype;\n if (size === 64) return new this(reader.readBigUInt64BE());\n return new this(\n ...Array.from({ length: size / 64 }, () =>\n reader.readBigUInt64BE()\n ).reverse()\n );\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (value instanceof this) {\n value = value._value;\n } else if (\n typeof value !== 'bigint' ||\n value > this.MAX_VALUE ||\n value < this.MIN_VALUE\n )\n throw new XdrWriterError(`${value} is not a ${this.name}`);\n\n const { unsigned, size } = this.prototype;\n if (size === 64) {\n if (unsigned) {\n writer.writeBigUInt64BE(value);\n } else {\n writer.writeBigInt64BE(value);\n }\n } else {\n for (const part of sliceBigInt(value, size, 64).reverse()) {\n if (unsigned) {\n writer.writeBigUInt64BE(part);\n } else {\n writer.writeBigInt64BE(part);\n }\n }\n }\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'bigint' || value instanceof this;\n }\n\n /**\n * Create instance from string\n * @param {String} string - Numeric representation\n * @return {LargeInt}\n */\n static fromString(string) {\n return new this(string);\n }\n\n static MAX_VALUE = 0n;\n\n static MIN_VALUE = 0n;\n\n /**\n * @internal\n * @return {void}\n */\n static defineIntBoundaries() {\n const [min, max] = calculateBigIntBoundaries(\n this.prototype.size,\n this.prototype.unsigned\n );\n this.MIN_VALUE = min;\n this.MAX_VALUE = max;\n }\n}\n","import { LargeInt } from './large-int';\n\nexport class Hyper extends LargeInt {\n /**\n * @param {Array} parts - Slices to encode\n */\n constructor(...args) {\n super(args);\n }\n\n get low() {\n return Number(this._value & 0xffffffffn) << 0;\n }\n\n get high() {\n return Number(this._value >> 32n) >> 0;\n }\n\n get size() {\n return 64;\n }\n\n get unsigned() {\n return false;\n }\n\n /**\n * Create Hyper instance from two [high][low] i32 values\n * @param {Number} low - Low part of i64 number\n * @param {Number} high - High part of i64 number\n * @return {LargeInt}\n */\n static fromBits(low, high) {\n return new this(low, high);\n }\n}\n\nHyper.defineIntBoundaries();\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nconst MAX_VALUE = 4294967295;\nconst MIN_VALUE = 0;\n\nexport class UnsignedInt extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readUInt32BE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (\n typeof value !== 'number' ||\n !(value >= MIN_VALUE && value <= MAX_VALUE) ||\n value % 1 !== 0\n )\n throw new XdrWriterError('invalid u32 value');\n\n writer.writeUInt32BE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n if (typeof value !== 'number' || value % 1 !== 0) {\n return false;\n }\n\n return value >= MIN_VALUE && value <= MAX_VALUE;\n }\n}\n\nUnsignedInt.MAX_VALUE = MAX_VALUE;\nUnsignedInt.MIN_VALUE = MIN_VALUE;\n","import { LargeInt } from './large-int';\n\nexport class UnsignedHyper extends LargeInt {\n /**\n * @param {Array} parts - Slices to encode\n */\n constructor(...args) {\n super(args);\n }\n\n get low() {\n return Number(this._value & 0xffffffffn) << 0;\n }\n\n get high() {\n return Number(this._value >> 32n) >> 0;\n }\n\n get size() {\n return 64;\n }\n\n get unsigned() {\n return true;\n }\n\n /**\n * Create UnsignedHyper instance from two [high][low] i32 values\n * @param {Number} low - Low part of u64 number\n * @param {Number} high - High part of u64 number\n * @return {UnsignedHyper}\n */\n static fromBits(low, high) {\n return new this(low, high);\n }\n}\n\nUnsignedHyper.defineIntBoundaries();\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Float extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readFloatBE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (typeof value !== 'number') throw new XdrWriterError('not a number');\n\n writer.writeFloatBE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'number';\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Double extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readDoubleBE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (typeof value !== 'number') throw new XdrWriterError('not a number');\n\n writer.writeDoubleBE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'number';\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrDefinitionError } from './errors';\n\nexport class Quadruple extends XdrPrimitiveType {\n static read() {\n throw new XdrDefinitionError('quadruple not supported');\n }\n\n static write() {\n throw new XdrDefinitionError('quadruple not supported');\n }\n\n static isValid() {\n return false;\n }\n}\n","import { Int } from './int';\nimport { XdrPrimitiveType } from './xdr-type';\nimport { XdrReaderError } from './errors';\n\nexport class Bool extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n const value = Int.read(reader);\n\n switch (value) {\n case 0:\n return false;\n case 1:\n return true;\n default:\n throw new XdrReaderError(`got ${value} when trying to read a bool`);\n }\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n const intVal = value ? 1 : 0;\n Int.write(intVal, writer);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'boolean';\n }\n}\n","import { UnsignedInt } from './unsigned-int';\nimport { XdrCompositeType } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class String extends XdrCompositeType {\n constructor(maxLength = UnsignedInt.MAX_VALUE) {\n super();\n this._maxLength = maxLength;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n const size = UnsignedInt.read(reader);\n if (size > this._maxLength)\n throw new XdrReaderError(\n `saw ${size} length String, max allowed is ${this._maxLength}`\n );\n\n return reader.read(size);\n }\n\n readString(reader) {\n return this.read(reader).toString('utf8');\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n // calculate string byte size before writing\n const size =\n typeof value === 'string'\n ? Buffer.byteLength(value, 'utf8')\n : value.length;\n if (size > this._maxLength)\n throw new XdrWriterError(\n `got ${value.length} bytes, max allowed is ${this._maxLength}`\n );\n // write size info\n UnsignedInt.write(size, writer);\n writer.write(value, size);\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (typeof value === 'string') {\n return Buffer.byteLength(value, 'utf8') <= this._maxLength;\n }\n if (value instanceof Array || Buffer.isBuffer(value)) {\n return value.length <= this._maxLength;\n }\n return false;\n }\n}\n","import { XdrCompositeType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Opaque extends XdrCompositeType {\n constructor(length) {\n super();\n this._length = length;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n return reader.read(this._length);\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n const { length } = value;\n if (length !== this._length)\n throw new XdrWriterError(\n `got ${value.length} bytes, expected ${this._length}`\n );\n writer.write(value, length);\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n return Buffer.isBuffer(value) && value.length === this._length;\n }\n}\n","import { UnsignedInt } from './unsigned-int';\nimport { XdrCompositeType } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class VarOpaque extends XdrCompositeType {\n constructor(maxLength = UnsignedInt.MAX_VALUE) {\n super();\n this._maxLength = maxLength;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n const size = UnsignedInt.read(reader);\n if (size > this._maxLength)\n throw new XdrReaderError(\n `saw ${size} length VarOpaque, max allowed is ${this._maxLength}`\n );\n return reader.read(size);\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n const { length } = value;\n if (value.length > this._maxLength)\n throw new XdrWriterError(\n `got ${value.length} bytes, max allowed is ${this._maxLength}`\n );\n // write size info\n UnsignedInt.write(length, writer);\n writer.write(value, length);\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n return Buffer.isBuffer(value) && value.length <= this._maxLength;\n }\n}\n","import { XdrCompositeType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Array extends XdrCompositeType {\n constructor(childType, length) {\n super();\n this._childType = childType;\n this._length = length;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n // allocate array of specified length\n const result = new global.Array(this._length);\n // read values\n for (let i = 0; i < this._length; i++) {\n result[i] = this._childType.read(reader);\n }\n return result;\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n if (!global.Array.isArray(value))\n throw new XdrWriterError(`value is not array`);\n\n if (value.length !== this._length)\n throw new XdrWriterError(\n `got array of size ${value.length}, expected ${this._length}`\n );\n\n for (const child of value) {\n this._childType.write(child, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (!(value instanceof global.Array) || value.length !== this._length) {\n return false;\n }\n\n for (const child of value) {\n if (!this._childType.isValid(child)) return false;\n }\n return true;\n }\n}\n","import { UnsignedInt } from './unsigned-int';\nimport { XdrCompositeType } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class VarArray extends XdrCompositeType {\n constructor(childType, maxLength = UnsignedInt.MAX_VALUE) {\n super();\n this._childType = childType;\n this._maxLength = maxLength;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n const length = UnsignedInt.read(reader);\n if (length > this._maxLength)\n throw new XdrReaderError(\n `saw ${length} length VarArray, max allowed is ${this._maxLength}`\n );\n\n const result = new Array(length);\n for (let i = 0; i < length; i++) {\n result[i] = this._childType.read(reader);\n }\n return result;\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n if (!(value instanceof Array))\n throw new XdrWriterError(`value is not array`);\n\n if (value.length > this._maxLength)\n throw new XdrWriterError(\n `got array of size ${value.length}, max allowed is ${this._maxLength}`\n );\n\n UnsignedInt.write(value.length, writer);\n for (const child of value) {\n this._childType.write(child, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (!(value instanceof Array) || value.length > this._maxLength) {\n return false;\n }\n for (const child of value) {\n if (!this._childType.isValid(child)) return false;\n }\n return true;\n }\n}\n","import { Bool } from './bool';\nimport { XdrPrimitiveType } from './xdr-type';\n\nexport class Option extends XdrPrimitiveType {\n constructor(childType) {\n super();\n this._childType = childType;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n if (Bool.read(reader)) {\n return this._childType.read(reader);\n }\n\n return undefined;\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n const isPresent = value !== null && value !== undefined;\n\n Bool.write(isPresent, writer);\n\n if (isPresent) {\n this._childType.write(value, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (value === null || value === undefined) {\n return true;\n }\n return this._childType.isValid(value);\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Void extends XdrPrimitiveType {\n /* jshint unused: false */\n\n static read() {\n return undefined;\n }\n\n static write(value) {\n if (value !== undefined)\n throw new XdrWriterError('trying to write value to a void slot');\n }\n\n static isValid(value) {\n return value === undefined;\n }\n}\n","import { Int } from './int';\nimport { XdrPrimitiveType, isSerializableIsh } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class Enum extends XdrPrimitiveType {\n constructor(name, value) {\n super();\n this.name = name;\n this.value = value;\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const intVal = Int.read(reader);\n const res = this._byValue[intVal];\n if (res === undefined)\n throw new XdrReaderError(\n `unknown ${this.enumName} member for value ${intVal}`\n );\n return res;\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (!this.isValid(value)) {\n throw new XdrWriterError(\n `${value} has enum name ${value?.enumName}, not ${\n this.enumName\n }: ${JSON.stringify(value)}`\n );\n }\n\n Int.write(value.value, writer);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return (\n value?.constructor?.enumName === this.enumName ||\n isSerializableIsh(value, this)\n );\n }\n\n static members() {\n return this._members;\n }\n\n static values() {\n return Object.values(this._members);\n }\n\n static fromName(name) {\n const result = this._members[name];\n\n if (!result)\n throw new TypeError(`${name} is not a member of ${this.enumName}`);\n\n return result;\n }\n\n static fromValue(value) {\n const result = this._byValue[value];\n if (result === undefined)\n throw new TypeError(\n `${value} is not a value of any member of ${this.enumName}`\n );\n return result;\n }\n\n static create(context, name, members) {\n const ChildEnum = class extends Enum {};\n\n ChildEnum.enumName = name;\n context.results[name] = ChildEnum;\n\n ChildEnum._members = {};\n ChildEnum._byValue = {};\n\n for (const [key, value] of Object.entries(members)) {\n const inst = new ChildEnum(key, value);\n ChildEnum._members[key] = inst;\n ChildEnum._byValue[value] = inst;\n ChildEnum[key] = () => inst;\n }\n\n return ChildEnum;\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrDefinitionError } from './errors';\n\nexport class Reference extends XdrPrimitiveType {\n /* jshint unused: false */\n resolve() {\n throw new XdrDefinitionError(\n '\"resolve\" method should be implemented in the descendant class'\n );\n }\n}\n","import { Reference } from './reference';\nimport { XdrCompositeType, isSerializableIsh } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Struct extends XdrCompositeType {\n constructor(attributes) {\n super();\n this._attributes = attributes || {};\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const attributes = {};\n for (const [fieldName, type] of this._fields) {\n attributes[fieldName] = type.read(reader);\n }\n return new this(attributes);\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (!this.isValid(value)) {\n throw new XdrWriterError(\n `${value} has struct name ${value?.constructor?.structName}, not ${\n this.structName\n }: ${JSON.stringify(value)}`\n );\n }\n\n for (const [fieldName, type] of this._fields) {\n const attribute = value._attributes[fieldName];\n type.write(attribute, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return (\n value?.constructor?.structName === this.structName ||\n isSerializableIsh(value, this)\n );\n }\n\n static create(context, name, fields) {\n const ChildStruct = class extends Struct {};\n\n ChildStruct.structName = name;\n\n context.results[name] = ChildStruct;\n\n const mappedFields = new Array(fields.length);\n for (let i = 0; i < fields.length; i++) {\n const fieldDescriptor = fields[i];\n const fieldName = fieldDescriptor[0];\n let field = fieldDescriptor[1];\n if (field instanceof Reference) {\n field = field.resolve(context);\n }\n mappedFields[i] = [fieldName, field];\n // create accessors\n ChildStruct.prototype[fieldName] = createAccessorMethod(fieldName);\n }\n\n ChildStruct._fields = mappedFields;\n\n return ChildStruct;\n }\n}\n\nfunction createAccessorMethod(name) {\n return function readOrWriteAttribute(value) {\n if (value !== undefined) {\n this._attributes[name] = value;\n }\n return this._attributes[name];\n };\n}\n","import { Void } from './void';\nimport { Reference } from './reference';\nimport { XdrCompositeType, isSerializableIsh } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Union extends XdrCompositeType {\n constructor(aSwitch, value) {\n super();\n this.set(aSwitch, value);\n }\n\n set(aSwitch, value) {\n if (typeof aSwitch === 'string') {\n aSwitch = this.constructor._switchOn.fromName(aSwitch);\n }\n\n this._switch = aSwitch;\n const arm = this.constructor.armForSwitch(this._switch);\n this._arm = arm;\n this._armType = arm === Void ? Void : this.constructor._arms[arm];\n this._value = value;\n }\n\n get(armName = this._arm) {\n if (this._arm !== Void && this._arm !== armName)\n throw new TypeError(`${armName} not set`);\n return this._value;\n }\n\n switch() {\n return this._switch;\n }\n\n arm() {\n return this._arm;\n }\n\n armType() {\n return this._armType;\n }\n\n value() {\n return this._value;\n }\n\n static armForSwitch(aSwitch) {\n const member = this._switches.get(aSwitch);\n if (member !== undefined) {\n return member;\n }\n if (this._defaultArm) {\n return this._defaultArm;\n }\n throw new TypeError(`Bad union switch: ${aSwitch}`);\n }\n\n static armTypeForArm(arm) {\n if (arm === Void) {\n return Void;\n }\n return this._arms[arm];\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const aSwitch = this._switchOn.read(reader);\n const arm = this.armForSwitch(aSwitch);\n const armType = arm === Void ? Void : this._arms[arm];\n let value;\n if (armType !== undefined) {\n value = armType.read(reader);\n } else {\n value = arm.read(reader);\n }\n return new this(aSwitch, value);\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (!this.isValid(value)) {\n throw new XdrWriterError(\n `${value} has union name ${value?.unionName}, not ${\n this.unionName\n }: ${JSON.stringify(value)}`\n );\n }\n\n this._switchOn.write(value.switch(), writer);\n value.armType().write(value.value(), writer);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return (\n value?.constructor?.unionName === this.unionName ||\n isSerializableIsh(value, this)\n );\n }\n\n static create(context, name, config) {\n const ChildUnion = class extends Union {};\n\n ChildUnion.unionName = name;\n context.results[name] = ChildUnion;\n\n if (config.switchOn instanceof Reference) {\n ChildUnion._switchOn = config.switchOn.resolve(context);\n } else {\n ChildUnion._switchOn = config.switchOn;\n }\n\n ChildUnion._switches = new Map();\n ChildUnion._arms = {};\n\n // resolve default arm\n let defaultArm = config.defaultArm;\n if (defaultArm instanceof Reference) {\n defaultArm = defaultArm.resolve(context);\n }\n\n ChildUnion._defaultArm = defaultArm;\n\n for (const [aSwitch, armName] of config.switches) {\n const key =\n typeof aSwitch === 'string'\n ? ChildUnion._switchOn.fromName(aSwitch)\n : aSwitch;\n\n ChildUnion._switches.set(key, armName);\n }\n\n // add enum-based helpers\n // NOTE: we don't have good notation for \"is a subclass of XDR.Enum\",\n // and so we use the following check (does _switchOn have a `values`\n // attribute) to approximate the intent.\n if (ChildUnion._switchOn.values !== undefined) {\n for (const aSwitch of ChildUnion._switchOn.values()) {\n // Add enum-based constructors\n ChildUnion[aSwitch.name] = function ctr(value) {\n return new ChildUnion(aSwitch, value);\n };\n\n // Add enum-based \"set\" helpers\n ChildUnion.prototype[aSwitch.name] = function set(value) {\n return this.set(aSwitch, value);\n };\n }\n }\n\n if (config.arms) {\n for (const [armsName, value] of Object.entries(config.arms)) {\n ChildUnion._arms[armsName] =\n value instanceof Reference ? value.resolve(context) : value;\n // Add arm accessor helpers\n if (value !== Void) {\n ChildUnion.prototype[armsName] = function get() {\n return this.get(armsName);\n };\n }\n }\n }\n\n return ChildUnion;\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport * as XDRTypes from './types';\nimport { Reference } from './reference';\nimport { XdrDefinitionError } from './errors';\n\nexport * from './reference';\n\nclass SimpleReference extends Reference {\n constructor(name) {\n super();\n this.name = name;\n }\n\n resolve(context) {\n const defn = context.definitions[this.name];\n return defn.resolve(context);\n }\n}\n\nclass ArrayReference extends Reference {\n constructor(childReference, length, variable = false) {\n super();\n this.childReference = childReference;\n this.length = length;\n this.variable = variable;\n }\n\n resolve(context) {\n let resolvedChild = this.childReference;\n let length = this.length;\n\n if (resolvedChild instanceof Reference) {\n resolvedChild = resolvedChild.resolve(context);\n }\n\n if (length instanceof Reference) {\n length = length.resolve(context);\n }\n\n if (this.variable) {\n return new XDRTypes.VarArray(resolvedChild, length);\n }\n return new XDRTypes.Array(resolvedChild, length);\n }\n}\n\nclass OptionReference extends Reference {\n constructor(childReference) {\n super();\n this.childReference = childReference;\n this.name = childReference.name;\n }\n\n resolve(context) {\n let resolvedChild = this.childReference;\n\n if (resolvedChild instanceof Reference) {\n resolvedChild = resolvedChild.resolve(context);\n }\n\n return new XDRTypes.Option(resolvedChild);\n }\n}\n\nclass SizedReference extends Reference {\n constructor(sizedType, length) {\n super();\n this.sizedType = sizedType;\n this.length = length;\n }\n\n resolve(context) {\n let length = this.length;\n\n if (length instanceof Reference) {\n length = length.resolve(context);\n }\n\n return new this.sizedType(length);\n }\n}\n\nclass Definition {\n constructor(constructor, name, cfg) {\n this.constructor = constructor;\n this.name = name;\n this.config = cfg;\n }\n\n // resolve calls the constructor of this definition with the provided context\n // and this definitions config values. The definitions constructor should\n // populate the final type on `context.results`, and may refer to other\n // definitions through `context.definitions`\n resolve(context) {\n if (this.name in context.results) {\n return context.results[this.name];\n }\n\n return this.constructor(context, this.name, this.config);\n }\n}\n\n// let the reference resolution system do its thing\n// the \"constructor\" for a typedef just returns the resolved value\nfunction createTypedef(context, typeName, value) {\n if (value instanceof Reference) {\n value = value.resolve(context);\n }\n context.results[typeName] = value;\n return value;\n}\n\nfunction createConst(context, name, value) {\n context.results[name] = value;\n return value;\n}\n\nclass TypeBuilder {\n constructor(destination) {\n this._destination = destination;\n this._definitions = {};\n }\n\n enum(name, members) {\n const result = new Definition(XDRTypes.Enum.create, name, members);\n this.define(name, result);\n }\n\n struct(name, members) {\n const result = new Definition(XDRTypes.Struct.create, name, members);\n this.define(name, result);\n }\n\n union(name, cfg) {\n const result = new Definition(XDRTypes.Union.create, name, cfg);\n this.define(name, result);\n }\n\n typedef(name, cfg) {\n const result = new Definition(createTypedef, name, cfg);\n this.define(name, result);\n }\n\n const(name, cfg) {\n const result = new Definition(createConst, name, cfg);\n this.define(name, result);\n }\n\n void() {\n return XDRTypes.Void;\n }\n\n bool() {\n return XDRTypes.Bool;\n }\n\n int() {\n return XDRTypes.Int;\n }\n\n hyper() {\n return XDRTypes.Hyper;\n }\n\n uint() {\n return XDRTypes.UnsignedInt;\n }\n\n uhyper() {\n return XDRTypes.UnsignedHyper;\n }\n\n float() {\n return XDRTypes.Float;\n }\n\n double() {\n return XDRTypes.Double;\n }\n\n quadruple() {\n return XDRTypes.Quadruple;\n }\n\n string(length) {\n return new SizedReference(XDRTypes.String, length);\n }\n\n opaque(length) {\n return new SizedReference(XDRTypes.Opaque, length);\n }\n\n varOpaque(length) {\n return new SizedReference(XDRTypes.VarOpaque, length);\n }\n\n array(childType, length) {\n return new ArrayReference(childType, length);\n }\n\n varArray(childType, maxLength) {\n return new ArrayReference(childType, maxLength, true);\n }\n\n option(childType) {\n return new OptionReference(childType);\n }\n\n define(name, definition) {\n if (this._destination[name] === undefined) {\n this._definitions[name] = definition;\n } else {\n throw new XdrDefinitionError(`${name} is already defined`);\n }\n }\n\n lookup(name) {\n return new SimpleReference(name);\n }\n\n resolve() {\n for (const defn of Object.values(this._definitions)) {\n defn.resolve({\n definitions: this._definitions,\n results: this._destination\n });\n }\n }\n}\n\nexport function config(fn, types = {}) {\n if (fn) {\n const builder = new TypeBuilder(types);\n fn(builder);\n builder.resolve();\n }\n\n return types;\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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \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 ''\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","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(281);\n"],"names":["root","factory","exports","module","define","amd","this","Buffer","alloc","subarray","prototype","start","end","result","Uint8Array","call","Object","setPrototypeOf","require","XdrWriterError","TypeError","constructor","message","super","XdrReaderError","XdrDefinitionError","XdrNotImplementedDefinitionError","XdrReader","source","isBuffer","Array","isArray","ArrayBuffer","isView","from","_buffer","_length","length","_index","eof","advance","size","padding","i","rewind","read","readInt32BE","readUInt32BE","readBigInt64BE","readBigUInt64BE","readFloatBE","readDoubleBE","ensureInputConsumed","BUFFER_CHUNK","XdrWriter","buffer","allocUnsafe","resize","minRequiredSize","newLength","Math","ceil","newBuffer","copy","finalize","toArray","write","value","offset","fill","writeInt32BE","writeUInt32BE","writeBigInt64BE","writeBigUInt64BE","writeFloatBE","writeDoubleBE","static","XdrType","toXDR","format","writer","encodeResult","fromXDR","input","reader","decodeInput","validateXDR","e","XdrPrimitiveType","isValid","XdrCompositeType","InvalidXdrEncodingFormatError","toString","isSerializableIsh","subtype","hasConstructor","instance","name","getPrototypeOf","MAX_VALUE","MIN_VALUE","Int","sliceBigInt","iSize","sliceSize","total","shift","BigInt","asIntN","calculateBigIntBoundaries","unsigned","boundary","LargeInt","args","_value","parts","RangeError","valueOf","asUintN","min","max","precision","formatIntName","encodeBigIntFromBits","slice","toJSON","toBigInt","reverse","part","fromString","string","defineIntBoundaries","Hyper","low","Number","high","fromBits","UnsignedInt","UnsignedHyper","Float","Double","Quadruple","Bool","intVal","String","maxLength","_maxLength","readString","byteLength","Opaque","VarOpaque","childType","_childType","global","child","VarArray","Option","isPresent","Void","undefined","Enum","res","_byValue","enumName","JSON","stringify","members","_members","values","fromName","fromValue","create","context","ChildEnum","results","key","entries","inst","Reference","resolve","Struct","attributes","_attributes","fieldName","type","_fields","structName","attribute","fields","ChildStruct","mappedFields","fieldDescriptor","field","createAccessorMethod","Union","aSwitch","set","_switchOn","_switch","arm","armForSwitch","_arm","_armType","_arms","get","armName","switch","armType","member","_switches","_defaultArm","armTypeForArm","unionName","config","ChildUnion","switchOn","Map","defaultArm","switches","arms","armsName","SimpleReference","definitions","ArrayReference","childReference","variable","resolvedChild","XDRTypes","OptionReference","SizedReference","sizedType","Definition","cfg","createTypedef","typeName","createConst","TypeBuilder","destination","_destination","_definitions","enum","struct","union","typedef","const","void","bool","int","hyper","uint","uhyper","float","double","quadruple","opaque","varOpaque","array","varArray","option","definition","lookup","defn","fn","types","builder","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","maxChunkLength","len2","push","encodeChunk","join","code","Error","indexOf","num","output","base64","ieee754","customInspectSymbol","Symbol","K_MAX_LENGTH","createBuffer","buf","arg","encodingOrOffset","encoding","isEncoding","actual","arrayView","isInstance","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","b","obj","checked","numberIsNaN","data","fromObject","toPrimitive","assertSize","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","j","hexWrite","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","poolSize","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","toLocaleString","equals","inspect","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readBigInt64LE","readFloatLE","readDoubleLE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeBigUInt64LE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeBigInt64LE","writeFloatLE","writeDoubleLE","targetStart","copyWithin","errors","E","sym","getMessage","Base","writable","configurable","stack","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","BufferBigIntNotDefined","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","isNaN","log","LN2","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","o","g","globalThis","Function","window","prop","hasOwnProperty","r","toStringTag"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/examples/enum.js b/node_modules/@stellar/js-xdr/examples/enum.js new file mode 100644 index 00000000..97297652 --- /dev/null +++ b/node_modules/@stellar/js-xdr/examples/enum.js @@ -0,0 +1,27 @@ +import * as XDR from '../src'; + +let xdr = XDR.config((xdr) => { + xdr.enum('Color', { + red: 0, + green: 1, + blue: 2 + }); + + xdr.enum('ResultType', { + ok: 0, + error: 1 + }); +}); + +console.log(xdr); + +// +console.log(xdr.Color.members()); // { red: 0, green: 1, blue: 2, } + +console.log(xdr.Color.fromName('red')); + +console.log(xdr.Color.fromXDR(Buffer.from([0, 0, 0, 0]))); // Color.red +console.log(xdr.Color.red().toXDR()); // Buffer +console.log(xdr.Color.red().toXDR('hex')); // + +console.log(xdr.Color.red() !== xdr.ResultType.ok()); diff --git a/node_modules/@stellar/js-xdr/examples/linked_list.js b/node_modules/@stellar/js-xdr/examples/linked_list.js new file mode 100644 index 00000000..512a2245 --- /dev/null +++ b/node_modules/@stellar/js-xdr/examples/linked_list.js @@ -0,0 +1,13 @@ +import * as XDR from '../src'; + +let xdr = XDR.config((xdr) => { + xdr.struct('IntList', [ + ['value', xdr.int()], + ['rest', xdr.option(xdr.lookup('IntList'))] + ]); +}); + +let n1 = new xdr.IntList({ value: 1 }); +let n2 = new xdr.IntList({ value: 3, rest: n1 }); + +console.log(n2.toXDR()); diff --git a/node_modules/@stellar/js-xdr/examples/struct.js b/node_modules/@stellar/js-xdr/examples/struct.js new file mode 100644 index 00000000..9349e2a2 --- /dev/null +++ b/node_modules/@stellar/js-xdr/examples/struct.js @@ -0,0 +1,30 @@ +import * as XDR from '../src'; + +let xdr = XDR.config((xdr) => { + xdr.struct('Signature', [ + ['publicKey', xdr.opaque(32)], + ['data', xdr.opaque(32)] + ]); + + xdr.struct('Envelope', [ + ['body', xdr.varOpaque(1000)], + ['timestamp', xdr.uint()], + ['signature', xdr.lookup('Signature')] + ]); +}); + +let sig = new xdr.Signature(); +sig.publicKey(Buffer.alloc(32)); +sig.data(Buffer.from('00000000000000000000000000000000')); + +let env = new xdr.Envelope({ + signature: sig, + body: Buffer.from('hello'), + timestamp: Math.floor(new Date() / 1000) +}); + +let output = env.toXDR(); +let parsed = xdr.Envelope.fromXDR(output); + +console.log(env); +console.log(parsed); diff --git a/node_modules/@stellar/js-xdr/examples/test.x b/node_modules/@stellar/js-xdr/examples/test.x new file mode 100644 index 00000000..b54ed8b8 --- /dev/null +++ b/node_modules/@stellar/js-xdr/examples/test.x @@ -0,0 +1,164 @@ +const HASH_SIZE = 32; + +typedef opaque Signature[32]; + +enum ResultType +{ + OK = 0, + ERROR = 1 +}; + +union Result switch(ResultType type) +{ + case OK: + void; + case ERROR: + int code; +}; + +typedef unsigned int ColorCode; + +struct Color +{ + ColorCode red; + ColorCode green; + ColorCode blue; +}; + + +struct Exhaustive +{ + + // Bools + bool aBool; + bool* anOptionalBool; + bool aBoolArray[5]; + bool aBoolVarArray<5>; + bool anUnboundedBoolVarArray<>; + + // Ints + int anInt; + int* anOptionalInt; + int anIntArray[5]; + int anIntVarArray<5>; + int anUnboundedIntVarArray<>; + + // Uints + unsigned int anUnsignedInt; + unsigned int* anOptionalUnsignedInt; + unsigned int anUnsignedIntArray[5]; + unsigned int anUnsignedIntVarArray<5>; + unsigned int anUnboundedUnsignedIntVarArray<>; + + // Hypers + hyper aHyper; + hyper* anOptionalHyper; + hyper aHyperArray[5]; + hyper aHyperVarArray<5>; + hyper anUnboundedHyperVarArray<>; + + // Uhypers + unsigned hyper anUnsignedHyper; + unsigned hyper* anOptionalUnsignedHyper; + unsigned hyper anUnsignedHyperArray[5]; + unsigned hyper anUnsignedHyperVarArray<5>; + unsigned hyper anUnboundedUnsignedHyperVarArray<>; + + // Floats + float aFloat; + float* anOptionalFloat; + float aFloatArray[5]; + float aFloatVarArray<5>; + float anUnboundedFloatVarArray<>; + + + // Doubles + double aDouble; + double* anOptionalDouble; + double aDoubleArray[5]; + double aDoubleVarArray<5>; + double anUnboundedDoubleVarArray<>; + + + // Opaque + opaque anOpaque[10]; + + // VarOpaque + opaque aVarOpaque<10>; + opaque anUnboundedVarOpaque<>; + + // String + string aString<19>; + string anUnboundedString<>; + + + // Typedef + Signature aSignature; + Signature* anOptionalSignature; + Signature aSignatureArray[5]; + Signature aSignatureVarArray<5>; + Signature anUnboundedSignatureVarArray<>; + + // Enum + ResultType aResultType; + ResultType* anOptionalResultType; + ResultType aResultTypeArray[5]; + ResultType aResultTypeVarArray<5>; + ResultType anUnboundedResultTypeVarArray<>; + + + // Struct + Color aColor; + Color* anOptionalColor; + Color aColorArray[5]; + Color aColorVarArray<5>; + Color anUnboundedColorVarArray<>; + + // Union + Result aResult; + Result* anOptionalResult; + Result aResultArray[5]; + Result aResultVarArray<5>; + Result anUnboundedResultVarArray<>; + + //Nested enum + enum { OK = 0 } aNestedEnum; + enum { OK = 0 } *anOptionalNestedEnum; + enum { OK = 0 } aNestedEnumArray[3]; + enum { OK = 0 } aNestedEnumVarArray<3>; + enum { OK = 0 } anUnboundedNestedEnumVarArray<>; + + //Nested Struct + struct { int value; } aNestedStruct; + struct { int value; } *anOptionalNestedStruct; + struct { int value; } aNestedStructArray[3]; + struct { int value; } aNestedStructVarArray<3>; + struct { int value; } anUnboundedNestedStructVarArray<>; + +}; + +enum ExhaustiveUnionType { + VOID_ARM = 0, + + PRIMITIVE_SIMPLE_ARM = 1, + PRIMITIVE_OPTIONAL_ARM = 2, + PRIMITIVE_ARRAY_ARM = 2, + PRIMITIVE_VARARRAY_ARM = 3, + + CUSTOM_SIMPLE_ARM = 4, + CUSTOM_OPTIONAL_ARM = 5, + CUSTOM_ARRAY_ARM = 6, + CUSTOM_VARARRAY_ARM = 7, + + FOR_DEFAULT = -1 +}; + + +union ExhaustiveUnion switch(ExhaustiveUnionType type) +{ + case VOID_ARM: void; + case PRIMITIVE_SIMPLE_ARM: int aPrimitiveSimpleArm; + case PRIMITIVE_OPTIONAL_ARM: int* aPrimitiveOptionalArm; + + default: int aPrimitiveDefault; +}; \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/examples/typedef.js b/node_modules/@stellar/js-xdr/examples/typedef.js new file mode 100644 index 00000000..5c05f736 --- /dev/null +++ b/node_modules/@stellar/js-xdr/examples/typedef.js @@ -0,0 +1,14 @@ +import * as XDR from '../src'; + +let xdr = XDR.config((xdr) => { + xdr.struct('Signature', [ + ['publicKey', xdr.opaque(32)], + ['data', xdr.opaque(32)] + ]); + + xdr.typedef('SignatureTypedef', xdr.lookup('Signature')); + xdr.typedef('IntTypedef', xdr.int()); +}); + +console.log(xdr.SignatureTypedef === xdr.Signature); +console.log(xdr.IntTypedef === XDR.Int); diff --git a/node_modules/@stellar/js-xdr/examples/union.js b/node_modules/@stellar/js-xdr/examples/union.js new file mode 100644 index 00000000..8beb6a81 --- /dev/null +++ b/node_modules/@stellar/js-xdr/examples/union.js @@ -0,0 +1,39 @@ +import * as XDR from '../src'; + +let xdr = XDR.config((xdr) => { + xdr.union('Result', { + switchOn: xdr.lookup('ResultType'), + switches: [ + ['ok', xdr.void()], + ['error', 'message'] + ], + // defaultArm: xdr.void(), + arms: { + message: xdr.string(100) + } + }); + + xdr.enum('ResultType', { + ok: 0, + error: 1, + nonsense: 2 + }); +}); + +let r = xdr.Result.ok(); +r.set('error', 'this is an error'); +r.message(); // => "this is an error" +r.get('message'); // => "this is an error" + +r.set(xdr.ResultType.ok()); +r.get(); // => undefined + +// r.set("nonsense"); +r.get(); // => undefined + +let output = r.toXDR(); +let parsed = xdr.Result.fromXDR(output); + +console.log(r); +console.log(r.arm()); +console.log(parsed); diff --git a/node_modules/@stellar/js-xdr/karma.conf.js b/node_modules/@stellar/js-xdr/karma.conf.js new file mode 100644 index 00000000..b5f2a29b --- /dev/null +++ b/node_modules/@stellar/js-xdr/karma.conf.js @@ -0,0 +1,37 @@ +const webpack = require('webpack'); + +module.exports = function (config) { + config.set({ + frameworks: ['mocha', 'webpack', 'sinon-chai'], + browsers: ['FirefoxHeadless', 'ChromeHeadless'], + browserNoActivityTimeout: 20000, + + files: ['dist/xdr.js', 'test/unit/**/*.js'], + + preprocessors: { + 'test/unit/**/*.js': ['webpack'] + }, + + webpack: { + mode: 'development', + module: { + rules: [ + { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' } + ] + }, + plugins: [ + new webpack.ProvidePlugin({ + Buffer: ['buffer', 'Buffer'] + }) + ] + }, + + webpackMiddleware: { + noInfo: true + }, + + singleRun: true, + + reporters: ['dots'] + }); +}; diff --git a/node_modules/@stellar/js-xdr/lib/xdr.js b/node_modules/@stellar/js-xdr/lib/xdr.js new file mode 100644 index 00000000..90798065 --- /dev/null +++ b/node_modules/@stellar/js-xdr/lib/xdr.js @@ -0,0 +1,2391 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["XDR"] = factory(); + else + root["XDR"] = factory(); +})(this, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./src/array.js": +/*!**********************!*\ + !*** ./src/array.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Array: () => (/* binding */ Array) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Array extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrCompositeType { + constructor(childType, length) { + super(); + this._childType = childType; + this._length = length; + } + + /** + * @inheritDoc + */ + read(reader) { + // allocate array of specified length + const result = new global.Array(this._length); + // read values + for (let i = 0; i < this._length; i++) { + result[i] = this._childType.read(reader); + } + return result; + } + + /** + * @inheritDoc + */ + write(value, writer) { + if (!global.Array.isArray(value)) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError(`value is not array`); + if (value.length !== this._length) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError(`got array of size ${value.length}, expected ${this._length}`); + for (const child of value) { + this._childType.write(child, writer); + } + } + + /** + * @inheritDoc + */ + isValid(value) { + if (!(value instanceof global.Array) || value.length !== this._length) { + return false; + } + for (const child of value) { + if (!this._childType.isValid(child)) return false; + } + return true; + } +} + +/***/ }), + +/***/ "./src/bigint-encoder.js": +/*!*******************************!*\ + !*** ./src/bigint-encoder.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ calculateBigIntBoundaries: () => (/* binding */ calculateBigIntBoundaries), +/* harmony export */ encodeBigIntFromBits: () => (/* binding */ encodeBigIntFromBits), +/* harmony export */ formatIntName: () => (/* binding */ formatIntName), +/* harmony export */ sliceBigInt: () => (/* binding */ sliceBigInt) +/* harmony export */ }); +/** + * Encode a native `bigint` value from a list of arbitrary integer-like values. + * + * @param {Array} parts - Slices to encode in big-endian + * format (i.e. earlier elements are higher bits) + * @param {64|128|256} size - Number of bits in the target integer type + * @param {boolean} unsigned - Whether it's an unsigned integer + * + * @returns {bigint} + */ +function encodeBigIntFromBits(parts, size, unsigned) { + if (!(parts instanceof Array)) { + // allow a single parameter instead of an array + parts = [parts]; + } else if (parts.length && parts[0] instanceof Array) { + // unpack nested array param + parts = parts[0]; + } + const total = parts.length; + const sliceSize = size / total; + switch (sliceSize) { + case 32: + case 64: + case 128: + case 256: + break; + default: + throw new RangeError(`expected slices to fit in 32/64/128/256 bits, got ${parts}`); + } + + // normalize all inputs to bigint + try { + for (let i = 0; i < parts.length; i++) { + if (typeof parts[i] !== 'bigint') { + parts[i] = BigInt(parts[i].valueOf()); + } + } + } catch (e) { + throw new TypeError(`expected bigint-like values, got: ${parts} (${e})`); + } + + // check for sign mismatches for single inputs (this is a special case to + // handle one parameter passed to e.g. UnsignedHyper et al.) + // see https://github.com/stellar/js-xdr/pull/100#discussion_r1228770845 + if (unsigned && parts.length === 1 && parts[0] < 0n) { + throw new RangeError(`expected a positive value, got: ${parts}`); + } + + // encode in big-endian fashion, shifting each slice by the slice size + let result = BigInt.asUintN(sliceSize, parts[0]); // safe: len >= 1 + for (let i = 1; i < parts.length; i++) { + result |= BigInt.asUintN(sliceSize, parts[i]) << BigInt(i * sliceSize); + } + + // interpret value as signed if necessary and clamp it + if (!unsigned) { + result = BigInt.asIntN(size, result); + } + + // check boundaries + const [min, max] = calculateBigIntBoundaries(size, unsigned); + if (result >= min && result <= max) { + return result; + } + + // failed to encode + throw new TypeError(`bigint values [${parts}] for ${formatIntName(size, unsigned)} out of range [${min}, ${max}]: ${result}`); +} + +/** + * Transforms a single bigint value that's supposed to represent a `size`-bit + * integer into a list of `sliceSize`d chunks. + * + * @param {bigint} value - Single bigint value to decompose + * @param {64|128|256} iSize - Number of bits represented by `value` + * @param {32|64|128} sliceSize - Number of chunks to decompose into + * @return {bigint[]} + */ +function sliceBigInt(value, iSize, sliceSize) { + if (typeof value !== 'bigint') { + throw new TypeError(`Expected bigint 'value', got ${typeof value}`); + } + const total = iSize / sliceSize; + if (total === 1) { + return [value]; + } + if (sliceSize < 32 || sliceSize > 128 || total !== 2 && total !== 4 && total !== 8) { + throw new TypeError(`invalid bigint (${value}) and slice size (${iSize} -> ${sliceSize}) combination`); + } + const shift = BigInt(sliceSize); + + // iterate shift and mask application + const result = new Array(total); + for (let i = 0; i < total; i++) { + // we force a signed interpretation to preserve sign in each slice value, + // but downstream can convert to unsigned if it's appropriate + result[i] = BigInt.asIntN(sliceSize, value); // clamps to size + + // move on to the next chunk + value >>= shift; + } + return result; +} +function formatIntName(precision, unsigned) { + return `${unsigned ? 'u' : 'i'}${precision}`; +} + +/** + * Get min|max boundaries for an integer with a specified bits size + * @param {64|128|256} size - Number of bits in the source integer type + * @param {Boolean} unsigned - Whether it's an unsigned integer + * @return {BigInt[]} + */ +function calculateBigIntBoundaries(size, unsigned) { + if (unsigned) { + return [0n, (1n << BigInt(size)) - 1n]; + } + const boundary = 1n << BigInt(size - 1); + return [0n - boundary, boundary - 1n]; +} + +/***/ }), + +/***/ "./src/bool.js": +/*!*********************!*\ + !*** ./src/bool.js ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Bool: () => (/* binding */ Bool) +/* harmony export */ }); +/* harmony import */ var _int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int */ "./src/int.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class Bool extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + const value = _int__WEBPACK_IMPORTED_MODULE_0__.Int.read(reader); + switch (value) { + case 0: + return false; + case 1: + return true; + default: + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrReaderError(`got ${value} when trying to read a bool`); + } + } + + /** + * @inheritDoc + */ + static write(value, writer) { + const intVal = value ? 1 : 0; + _int__WEBPACK_IMPORTED_MODULE_0__.Int.write(intVal, writer); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'boolean'; + } +} + +/***/ }), + +/***/ "./src/browser.js": +/*!************************!*\ + !*** ./src/browser.js ***! + \************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// eslint-disable-next-line prefer-import/prefer-import-over-require +const exports = __webpack_require__(/*! ./index */ "./src/index.js"); +module.exports = exports; + +/***/ }), + +/***/ "./src/config.js": +/*!***********************!*\ + !*** ./src/config.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Reference: () => (/* reexport safe */ _reference__WEBPACK_IMPORTED_MODULE_1__.Reference), +/* harmony export */ config: () => (/* binding */ config) +/* harmony export */ }); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.js"); +/* harmony import */ var _reference__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reference */ "./src/reference.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); +// eslint-disable-next-line max-classes-per-file + + + + +class SimpleReference extends _reference__WEBPACK_IMPORTED_MODULE_1__.Reference { + constructor(name) { + super(); + this.name = name; + } + resolve(context) { + const defn = context.definitions[this.name]; + return defn.resolve(context); + } +} +class ArrayReference extends _reference__WEBPACK_IMPORTED_MODULE_1__.Reference { + constructor(childReference, length, variable = false) { + super(); + this.childReference = childReference; + this.length = length; + this.variable = variable; + } + resolve(context) { + let resolvedChild = this.childReference; + let length = this.length; + if (resolvedChild instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + resolvedChild = resolvedChild.resolve(context); + } + if (length instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + length = length.resolve(context); + } + if (this.variable) { + return new _types__WEBPACK_IMPORTED_MODULE_0__.VarArray(resolvedChild, length); + } + return new _types__WEBPACK_IMPORTED_MODULE_0__.Array(resolvedChild, length); + } +} +class OptionReference extends _reference__WEBPACK_IMPORTED_MODULE_1__.Reference { + constructor(childReference) { + super(); + this.childReference = childReference; + this.name = childReference.name; + } + resolve(context) { + let resolvedChild = this.childReference; + if (resolvedChild instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + resolvedChild = resolvedChild.resolve(context); + } + return new _types__WEBPACK_IMPORTED_MODULE_0__.Option(resolvedChild); + } +} +class SizedReference extends _reference__WEBPACK_IMPORTED_MODULE_1__.Reference { + constructor(sizedType, length) { + super(); + this.sizedType = sizedType; + this.length = length; + } + resolve(context) { + let length = this.length; + if (length instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + length = length.resolve(context); + } + return new this.sizedType(length); + } +} +class Definition { + constructor(constructor, name, cfg) { + this.constructor = constructor; + this.name = name; + this.config = cfg; + } + + // resolve calls the constructor of this definition with the provided context + // and this definitions config values. The definitions constructor should + // populate the final type on `context.results`, and may refer to other + // definitions through `context.definitions` + resolve(context) { + if (this.name in context.results) { + return context.results[this.name]; + } + return this.constructor(context, this.name, this.config); + } +} + +// let the reference resolution system do its thing +// the "constructor" for a typedef just returns the resolved value +function createTypedef(context, typeName, value) { + if (value instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + value = value.resolve(context); + } + context.results[typeName] = value; + return value; +} +function createConst(context, name, value) { + context.results[name] = value; + return value; +} +class TypeBuilder { + constructor(destination) { + this._destination = destination; + this._definitions = {}; + } + enum(name, members) { + const result = new Definition(_types__WEBPACK_IMPORTED_MODULE_0__.Enum.create, name, members); + this.define(name, result); + } + struct(name, members) { + const result = new Definition(_types__WEBPACK_IMPORTED_MODULE_0__.Struct.create, name, members); + this.define(name, result); + } + union(name, cfg) { + const result = new Definition(_types__WEBPACK_IMPORTED_MODULE_0__.Union.create, name, cfg); + this.define(name, result); + } + typedef(name, cfg) { + const result = new Definition(createTypedef, name, cfg); + this.define(name, result); + } + const(name, cfg) { + const result = new Definition(createConst, name, cfg); + this.define(name, result); + } + void() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Void; + } + bool() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Bool; + } + int() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Int; + } + hyper() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Hyper; + } + uint() { + return _types__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt; + } + uhyper() { + return _types__WEBPACK_IMPORTED_MODULE_0__.UnsignedHyper; + } + float() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Float; + } + double() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Double; + } + quadruple() { + return _types__WEBPACK_IMPORTED_MODULE_0__.Quadruple; + } + string(length) { + return new SizedReference(_types__WEBPACK_IMPORTED_MODULE_0__.String, length); + } + opaque(length) { + return new SizedReference(_types__WEBPACK_IMPORTED_MODULE_0__.Opaque, length); + } + varOpaque(length) { + return new SizedReference(_types__WEBPACK_IMPORTED_MODULE_0__.VarOpaque, length); + } + array(childType, length) { + return new ArrayReference(childType, length); + } + varArray(childType, maxLength) { + return new ArrayReference(childType, maxLength, true); + } + option(childType) { + return new OptionReference(childType); + } + define(name, definition) { + if (this._destination[name] === undefined) { + this._definitions[name] = definition; + } else { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrDefinitionError(`${name} is already defined`); + } + } + lookup(name) { + return new SimpleReference(name); + } + resolve() { + for (const defn of Object.values(this._definitions)) { + defn.resolve({ + definitions: this._definitions, + results: this._destination + }); + } + } +} +function config(fn, types = {}) { + if (fn) { + const builder = new TypeBuilder(types); + fn(builder); + builder.resolve(); + } + return types; +} + +/***/ }), + +/***/ "./src/double.js": +/*!***********************!*\ + !*** ./src/double.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Double: () => (/* binding */ Double) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Double extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readDoubleBE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number') throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError('not a number'); + writer.writeDoubleBE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'number'; + } +} + +/***/ }), + +/***/ "./src/enum.js": +/*!*********************!*\ + !*** ./src/enum.js ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Enum: () => (/* binding */ Enum) +/* harmony export */ }); +/* harmony import */ var _int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int */ "./src/int.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class Enum extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrPrimitiveType { + constructor(name, value) { + super(); + this.name = name; + this.value = value; + } + + /** + * @inheritDoc + */ + static read(reader) { + const intVal = _int__WEBPACK_IMPORTED_MODULE_0__.Int.read(reader); + const res = this._byValue[intVal]; + if (res === undefined) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrReaderError(`unknown ${this.enumName} member for value ${intVal}`); + return res; + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (!this.isValid(value)) { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`${value} has enum name ${value?.enumName}, not ${this.enumName}: ${JSON.stringify(value)}`); + } + _int__WEBPACK_IMPORTED_MODULE_0__.Int.write(value.value, writer); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return value?.constructor?.enumName === this.enumName || (0,_xdr_type__WEBPACK_IMPORTED_MODULE_1__.isSerializableIsh)(value, this); + } + static members() { + return this._members; + } + static values() { + return Object.values(this._members); + } + static fromName(name) { + const result = this._members[name]; + if (!result) throw new TypeError(`${name} is not a member of ${this.enumName}`); + return result; + } + static fromValue(value) { + const result = this._byValue[value]; + if (result === undefined) throw new TypeError(`${value} is not a value of any member of ${this.enumName}`); + return result; + } + static create(context, name, members) { + const ChildEnum = class extends Enum {}; + ChildEnum.enumName = name; + context.results[name] = ChildEnum; + ChildEnum._members = {}; + ChildEnum._byValue = {}; + for (const [key, value] of Object.entries(members)) { + const inst = new ChildEnum(key, value); + ChildEnum._members[key] = inst; + ChildEnum._byValue[value] = inst; + ChildEnum[key] = () => inst; + } + return ChildEnum; + } +} + +/***/ }), + +/***/ "./src/errors.js": +/*!***********************!*\ + !*** ./src/errors.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XdrDefinitionError: () => (/* binding */ XdrDefinitionError), +/* harmony export */ XdrNotImplementedDefinitionError: () => (/* binding */ XdrNotImplementedDefinitionError), +/* harmony export */ XdrReaderError: () => (/* binding */ XdrReaderError), +/* harmony export */ XdrWriterError: () => (/* binding */ XdrWriterError) +/* harmony export */ }); +class XdrWriterError extends TypeError { + constructor(message) { + super(`XDR Write Error: ${message}`); + } +} +class XdrReaderError extends TypeError { + constructor(message) { + super(`XDR Read Error: ${message}`); + } +} +class XdrDefinitionError extends TypeError { + constructor(message) { + super(`XDR Type Definition Error: ${message}`); + } +} +class XdrNotImplementedDefinitionError extends XdrDefinitionError { + constructor() { + super(`method not implemented, it should be overloaded in the descendant class.`); + } +} + +/***/ }), + +/***/ "./src/float.js": +/*!**********************!*\ + !*** ./src/float.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Float: () => (/* binding */ Float) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Float extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readFloatBE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number') throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError('not a number'); + writer.writeFloatBE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'number'; + } +} + +/***/ }), + +/***/ "./src/hyper.js": +/*!**********************!*\ + !*** ./src/hyper.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Hyper: () => (/* binding */ Hyper) +/* harmony export */ }); +/* harmony import */ var _large_int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./large-int */ "./src/large-int.js"); + +class Hyper extends _large_int__WEBPACK_IMPORTED_MODULE_0__.LargeInt { + /** + * @param {Array} parts - Slices to encode + */ + constructor(...args) { + super(args); + } + get low() { + return Number(this._value & 0xffffffffn) << 0; + } + get high() { + return Number(this._value >> 32n) >> 0; + } + get size() { + return 64; + } + get unsigned() { + return false; + } + + /** + * Create Hyper instance from two [high][low] i32 values + * @param {Number} low - Low part of i64 number + * @param {Number} high - High part of i64 number + * @return {LargeInt} + */ + static fromBits(low, high) { + return new this(low, high); + } +} +Hyper.defineIntBoundaries(); + +/***/ }), + +/***/ "./src/index.js": +/*!**********************!*\ + !*** ./src/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Array: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Array), +/* harmony export */ Bool: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Bool), +/* harmony export */ Double: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Double), +/* harmony export */ Enum: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Enum), +/* harmony export */ Float: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Float), +/* harmony export */ Hyper: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Hyper), +/* harmony export */ Int: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Int), +/* harmony export */ LargeInt: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.LargeInt), +/* harmony export */ Opaque: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Opaque), +/* harmony export */ Option: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Option), +/* harmony export */ Quadruple: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Quadruple), +/* harmony export */ Reference: () => (/* reexport safe */ _config__WEBPACK_IMPORTED_MODULE_1__.Reference), +/* harmony export */ String: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.String), +/* harmony export */ Struct: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Struct), +/* harmony export */ Union: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Union), +/* harmony export */ UnsignedHyper: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.UnsignedHyper), +/* harmony export */ UnsignedInt: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt), +/* harmony export */ VarArray: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.VarArray), +/* harmony export */ VarOpaque: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.VarOpaque), +/* harmony export */ Void: () => (/* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_0__.Void), +/* harmony export */ XdrReader: () => (/* reexport safe */ _serialization_xdr_reader__WEBPACK_IMPORTED_MODULE_2__.XdrReader), +/* harmony export */ XdrWriter: () => (/* reexport safe */ _serialization_xdr_writer__WEBPACK_IMPORTED_MODULE_3__.XdrWriter), +/* harmony export */ config: () => (/* reexport safe */ _config__WEBPACK_IMPORTED_MODULE_1__.config) +/* harmony export */ }); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.js"); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config */ "./src/config.js"); +/* harmony import */ var _serialization_xdr_reader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./serialization/xdr-reader */ "./src/serialization/xdr-reader.js"); +/* harmony import */ var _serialization_xdr_writer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./serialization/xdr-writer */ "./src/serialization/xdr-writer.js"); + + + + + +/***/ }), + +/***/ "./src/int.js": +/*!********************!*\ + !*** ./src/int.js ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Int: () => (/* binding */ Int) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +const MAX_VALUE = 2147483647; +const MIN_VALUE = -2147483648; +class Int extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readInt32BE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number') throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError('not a number'); + if ((value | 0) !== value) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError('invalid i32 value'); + writer.writeInt32BE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + if (typeof value !== 'number' || (value | 0) !== value) { + return false; + } + return value >= MIN_VALUE && value <= MAX_VALUE; + } +} +Int.MAX_VALUE = MAX_VALUE; +Int.MIN_VALUE = -MIN_VALUE; + +/***/ }), + +/***/ "./src/large-int.js": +/*!**************************!*\ + !*** ./src/large-int.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LargeInt: () => (/* binding */ LargeInt) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _bigint_encoder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bigint-encoder */ "./src/bigint-encoder.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class LargeInt extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /** + * @param {Array} parts - Slices to encode + */ + constructor(args) { + super(); + this._value = (0,_bigint_encoder__WEBPACK_IMPORTED_MODULE_1__.encodeBigIntFromBits)(args, this.size, this.unsigned); + } + + /** + * Signed/unsigned representation + * @type {Boolean} + * @abstract + */ + get unsigned() { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrNotImplementedDefinitionError(); + } + + /** + * Size of the integer in bits + * @type {Number} + * @abstract + */ + get size() { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrNotImplementedDefinitionError(); + } + + /** + * Slice integer to parts with smaller bit size + * @param {32|64|128} sliceSize - Size of each part in bits + * @return {BigInt[]} + */ + slice(sliceSize) { + return (0,_bigint_encoder__WEBPACK_IMPORTED_MODULE_1__.sliceBigInt)(this._value, this.size, sliceSize); + } + toString() { + return this._value.toString(); + } + toJSON() { + return { + _value: this._value.toString() + }; + } + toBigInt() { + return BigInt(this._value); + } + + /** + * @inheritDoc + */ + static read(reader) { + const { + size + } = this.prototype; + if (size === 64) return new this(reader.readBigUInt64BE()); + return new this(...Array.from({ + length: size / 64 + }, () => reader.readBigUInt64BE()).reverse()); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (value instanceof this) { + value = value._value; + } else if (typeof value !== 'bigint' || value > this.MAX_VALUE || value < this.MIN_VALUE) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`${value} is not a ${this.name}`); + const { + unsigned, + size + } = this.prototype; + if (size === 64) { + if (unsigned) { + writer.writeBigUInt64BE(value); + } else { + writer.writeBigInt64BE(value); + } + } else { + for (const part of (0,_bigint_encoder__WEBPACK_IMPORTED_MODULE_1__.sliceBigInt)(value, size, 64).reverse()) { + if (unsigned) { + writer.writeBigUInt64BE(part); + } else { + writer.writeBigInt64BE(part); + } + } + } + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'bigint' || value instanceof this; + } + + /** + * Create instance from string + * @param {String} string - Numeric representation + * @return {LargeInt} + */ + static fromString(string) { + return new this(string); + } + static MAX_VALUE = 0n; + static MIN_VALUE = 0n; + + /** + * @internal + * @return {void} + */ + static defineIntBoundaries() { + const [min, max] = (0,_bigint_encoder__WEBPACK_IMPORTED_MODULE_1__.calculateBigIntBoundaries)(this.prototype.size, this.prototype.unsigned); + this.MIN_VALUE = min; + this.MAX_VALUE = max; + } +} + +/***/ }), + +/***/ "./src/opaque.js": +/*!***********************!*\ + !*** ./src/opaque.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Opaque: () => (/* binding */ Opaque) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Opaque extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrCompositeType { + constructor(length) { + super(); + this._length = length; + } + + /** + * @inheritDoc + */ + read(reader) { + return reader.read(this._length); + } + + /** + * @inheritDoc + */ + write(value, writer) { + const { + length + } = value; + if (length !== this._length) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError(`got ${value.length} bytes, expected ${this._length}`); + writer.write(value, length); + } + + /** + * @inheritDoc + */ + isValid(value) { + return Buffer.isBuffer(value) && value.length === this._length; + } +} + +/***/ }), + +/***/ "./src/option.js": +/*!***********************!*\ + !*** ./src/option.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Option: () => (/* binding */ Option) +/* harmony export */ }); +/* harmony import */ var _bool__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bool */ "./src/bool.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); + + +class Option extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrPrimitiveType { + constructor(childType) { + super(); + this._childType = childType; + } + + /** + * @inheritDoc + */ + read(reader) { + if (_bool__WEBPACK_IMPORTED_MODULE_0__.Bool.read(reader)) { + return this._childType.read(reader); + } + return undefined; + } + + /** + * @inheritDoc + */ + write(value, writer) { + const isPresent = value !== null && value !== undefined; + _bool__WEBPACK_IMPORTED_MODULE_0__.Bool.write(isPresent, writer); + if (isPresent) { + this._childType.write(value, writer); + } + } + + /** + * @inheritDoc + */ + isValid(value) { + if (value === null || value === undefined) { + return true; + } + return this._childType.isValid(value); + } +} + +/***/ }), + +/***/ "./src/quadruple.js": +/*!**************************!*\ + !*** ./src/quadruple.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Quadruple: () => (/* binding */ Quadruple) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Quadruple extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + static read() { + throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrDefinitionError('quadruple not supported'); + } + static write() { + throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrDefinitionError('quadruple not supported'); + } + static isValid() { + return false; + } +} + +/***/ }), + +/***/ "./src/reference.js": +/*!**************************!*\ + !*** ./src/reference.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Reference: () => (/* binding */ Reference) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Reference extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /* jshint unused: false */ + resolve() { + throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrDefinitionError('"resolve" method should be implemented in the descendant class'); + } +} + +/***/ }), + +/***/ "./src/serialization/xdr-reader.js": +/*!*****************************************!*\ + !*** ./src/serialization/xdr-reader.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XdrReader: () => (/* binding */ XdrReader) +/* harmony export */ }); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors */ "./src/errors.js"); +/** + * @internal + */ + +class XdrReader { + /** + * @constructor + * @param {Buffer} source - Buffer containing serialized data + */ + constructor(source) { + if (!Buffer.isBuffer(source)) { + if (source instanceof Array || Array.isArray(source) || ArrayBuffer.isView(source)) { + source = Buffer.from(source); + } else { + throw new _errors__WEBPACK_IMPORTED_MODULE_0__.XdrReaderError(`source invalid: ${source}`); + } + } + this._buffer = source; + this._length = source.length; + this._index = 0; + } + + /** + * @type {Buffer} + * @private + * @readonly + */ + _buffer; + /** + * @type {Number} + * @private + * @readonly + */ + _length; + /** + * @type {Number} + * @private + * @readonly + */ + _index; + + /** + * Check if the reader reached the end of the input buffer + * @return {Boolean} + */ + get eof() { + return this._index === this._length; + } + + /** + * Advance reader position, check padding and overflow + * @param {Number} size - Bytes to read + * @return {Number} Position to read from + * @private + */ + advance(size) { + const from = this._index; + // advance cursor position + this._index += size; + // check buffer boundaries + if (this._length < this._index) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.XdrReaderError('attempt to read outside the boundary of the buffer'); + // check that padding is correct for Opaque and String + const padding = 4 - (size % 4 || 4); + if (padding > 0) { + for (let i = 0; i < padding; i++) if (this._buffer[this._index + i] !== 0) + // all bytes in the padding should be zeros + throw new _errors__WEBPACK_IMPORTED_MODULE_0__.XdrReaderError('invalid padding'); + this._index += padding; + } + return from; + } + + /** + * Reset reader position + * @return {void} + */ + rewind() { + this._index = 0; + } + + /** + * Read byte array from the buffer + * @param {Number} size - Bytes to read + * @return {Buffer} - Sliced portion of the underlying buffer + */ + read(size) { + const from = this.advance(size); + return this._buffer.subarray(from, from + size); + } + + /** + * Read i32 from buffer + * @return {Number} + */ + readInt32BE() { + return this._buffer.readInt32BE(this.advance(4)); + } + + /** + * Read u32 from buffer + * @return {Number} + */ + readUInt32BE() { + return this._buffer.readUInt32BE(this.advance(4)); + } + + /** + * Read i64 from buffer + * @return {BigInt} + */ + readBigInt64BE() { + return this._buffer.readBigInt64BE(this.advance(8)); + } + + /** + * Read u64 from buffer + * @return {BigInt} + */ + readBigUInt64BE() { + return this._buffer.readBigUInt64BE(this.advance(8)); + } + + /** + * Read float from buffer + * @return {Number} + */ + readFloatBE() { + return this._buffer.readFloatBE(this.advance(4)); + } + + /** + * Read double from buffer + * @return {Number} + */ + readDoubleBE() { + return this._buffer.readDoubleBE(this.advance(8)); + } + + /** + * Ensure that input buffer has been consumed in full, otherwise it's a type mismatch + * @return {void} + * @throws {XdrReaderError} + */ + ensureInputConsumed() { + if (this._index !== this._length) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.XdrReaderError(`invalid XDR contract typecast - source buffer not entirely consumed`); + } +} + +/***/ }), + +/***/ "./src/serialization/xdr-writer.js": +/*!*****************************************!*\ + !*** ./src/serialization/xdr-writer.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XdrWriter: () => (/* binding */ XdrWriter) +/* harmony export */ }); +const BUFFER_CHUNK = 8192; // 8 KB chunk size increment + +/** + * @internal + */ +class XdrWriter { + /** + * @param {Buffer|Number} [buffer] - Optional destination buffer + */ + constructor(buffer) { + if (typeof buffer === 'number') { + buffer = Buffer.allocUnsafe(buffer); + } else if (!(buffer instanceof Buffer)) { + buffer = Buffer.allocUnsafe(BUFFER_CHUNK); + } + this._buffer = buffer; + this._length = buffer.length; + } + + /** + * @type {Buffer} + * @private + * @readonly + */ + _buffer; + /** + * @type {Number} + * @private + * @readonly + */ + _length; + /** + * @type {Number} + * @private + * @readonly + */ + _index = 0; + + /** + * Advance writer position, write padding if needed, auto-resize the buffer + * @param {Number} size - Bytes to write + * @return {Number} Position to read from + * @private + */ + alloc(size) { + const from = this._index; + // advance cursor position + this._index += size; + // ensure sufficient buffer size + if (this._length < this._index) { + this.resize(this._index); + } + return from; + } + + /** + * Increase size of the underlying buffer + * @param {Number} minRequiredSize - Minimum required buffer size + * @return {void} + * @private + */ + resize(minRequiredSize) { + // calculate new length, align new buffer length by chunk size + const newLength = Math.ceil(minRequiredSize / BUFFER_CHUNK) * BUFFER_CHUNK; + // create new buffer and copy previous data + const newBuffer = Buffer.allocUnsafe(newLength); + this._buffer.copy(newBuffer, 0, 0, this._length); + // update references + this._buffer = newBuffer; + this._length = newLength; + } + + /** + * Return XDR-serialized value + * @return {Buffer} + */ + finalize() { + // clip underlying buffer to the actually written value + return this._buffer.subarray(0, this._index); + } + + /** + * Return XDR-serialized value as byte array + * @return {Number[]} + */ + toArray() { + return [...this.finalize()]; + } + + /** + * Write byte array from the buffer + * @param {Buffer|String} value - Bytes/string to write + * @param {Number} size - Size in bytes + * @return {XdrReader} - XdrReader wrapper on top of a subarray + */ + write(value, size) { + if (typeof value === 'string') { + // serialize string directly to the output buffer + const offset = this.alloc(size); + this._buffer.write(value, offset, 'utf8'); + } else { + // copy data to the output buffer + if (!(value instanceof Buffer)) { + value = Buffer.from(value); + } + const offset = this.alloc(size); + value.copy(this._buffer, offset, 0, size); + } + + // add padding for 4-byte XDR alignment + const padding = 4 - (size % 4 || 4); + if (padding > 0) { + const offset = this.alloc(padding); + this._buffer.fill(0, offset, this._index); + } + } + + /** + * Write i32 from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeInt32BE(value) { + const offset = this.alloc(4); + this._buffer.writeInt32BE(value, offset); + } + + /** + * Write u32 from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeUInt32BE(value) { + const offset = this.alloc(4); + this._buffer.writeUInt32BE(value, offset); + } + + /** + * Write i64 from buffer + * @param {BigInt} value - Value to serialize + * @return {void} + */ + writeBigInt64BE(value) { + const offset = this.alloc(8); + this._buffer.writeBigInt64BE(value, offset); + } + + /** + * Write u64 from buffer + * @param {BigInt} value - Value to serialize + * @return {void} + */ + writeBigUInt64BE(value) { + const offset = this.alloc(8); + this._buffer.writeBigUInt64BE(value, offset); + } + + /** + * Write float from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeFloatBE(value) { + const offset = this.alloc(4); + this._buffer.writeFloatBE(value, offset); + } + + /** + * Write double from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeDoubleBE(value) { + const offset = this.alloc(8); + this._buffer.writeDoubleBE(value, offset); + } + static bufferChunkSize = BUFFER_CHUNK; +} + +/***/ }), + +/***/ "./src/string.js": +/*!***********************!*\ + !*** ./src/string.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ String: () => (/* binding */ String) +/* harmony export */ }); +/* harmony import */ var _unsigned_int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unsigned-int */ "./src/unsigned-int.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class String extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrCompositeType { + constructor(maxLength = _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.MAX_VALUE) { + super(); + this._maxLength = maxLength; + } + + /** + * @inheritDoc + */ + read(reader) { + const size = _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.read(reader); + if (size > this._maxLength) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrReaderError(`saw ${size} length String, max allowed is ${this._maxLength}`); + return reader.read(size); + } + readString(reader) { + return this.read(reader).toString('utf8'); + } + + /** + * @inheritDoc + */ + write(value, writer) { + // calculate string byte size before writing + const size = typeof value === 'string' ? Buffer.byteLength(value, 'utf8') : value.length; + if (size > this._maxLength) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`got ${value.length} bytes, max allowed is ${this._maxLength}`); + // write size info + _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.write(size, writer); + writer.write(value, size); + } + + /** + * @inheritDoc + */ + isValid(value) { + if (typeof value === 'string') { + return Buffer.byteLength(value, 'utf8') <= this._maxLength; + } + if (value instanceof Array || Buffer.isBuffer(value)) { + return value.length <= this._maxLength; + } + return false; + } +} + +/***/ }), + +/***/ "./src/struct.js": +/*!***********************!*\ + !*** ./src/struct.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Struct: () => (/* binding */ Struct) +/* harmony export */ }); +/* harmony import */ var _reference__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reference */ "./src/reference.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class Struct extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrCompositeType { + constructor(attributes) { + super(); + this._attributes = attributes || {}; + } + + /** + * @inheritDoc + */ + static read(reader) { + const attributes = {}; + for (const [fieldName, type] of this._fields) { + attributes[fieldName] = type.read(reader); + } + return new this(attributes); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (!this.isValid(value)) { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`${value} has struct name ${value?.constructor?.structName}, not ${this.structName}: ${JSON.stringify(value)}`); + } + for (const [fieldName, type] of this._fields) { + const attribute = value._attributes[fieldName]; + type.write(attribute, writer); + } + } + + /** + * @inheritDoc + */ + static isValid(value) { + return value?.constructor?.structName === this.structName || (0,_xdr_type__WEBPACK_IMPORTED_MODULE_1__.isSerializableIsh)(value, this); + } + static create(context, name, fields) { + const ChildStruct = class extends Struct {}; + ChildStruct.structName = name; + context.results[name] = ChildStruct; + const mappedFields = new Array(fields.length); + for (let i = 0; i < fields.length; i++) { + const fieldDescriptor = fields[i]; + const fieldName = fieldDescriptor[0]; + let field = fieldDescriptor[1]; + if (field instanceof _reference__WEBPACK_IMPORTED_MODULE_0__.Reference) { + field = field.resolve(context); + } + mappedFields[i] = [fieldName, field]; + // create accessors + ChildStruct.prototype[fieldName] = createAccessorMethod(fieldName); + } + ChildStruct._fields = mappedFields; + return ChildStruct; + } +} +function createAccessorMethod(name) { + return function readOrWriteAttribute(value) { + if (value !== undefined) { + this._attributes[name] = value; + } + return this._attributes[name]; + }; +} + +/***/ }), + +/***/ "./src/types.js": +/*!**********************!*\ + !*** ./src/types.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Array: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_12__.Array), +/* harmony export */ Bool: () => (/* reexport safe */ _bool__WEBPACK_IMPORTED_MODULE_8__.Bool), +/* harmony export */ Double: () => (/* reexport safe */ _double__WEBPACK_IMPORTED_MODULE_6__.Double), +/* harmony export */ Enum: () => (/* reexport safe */ _enum__WEBPACK_IMPORTED_MODULE_16__.Enum), +/* harmony export */ Float: () => (/* reexport safe */ _float__WEBPACK_IMPORTED_MODULE_5__.Float), +/* harmony export */ Hyper: () => (/* reexport safe */ _hyper__WEBPACK_IMPORTED_MODULE_1__.Hyper), +/* harmony export */ Int: () => (/* reexport safe */ _int__WEBPACK_IMPORTED_MODULE_0__.Int), +/* harmony export */ LargeInt: () => (/* reexport safe */ _large_int__WEBPACK_IMPORTED_MODULE_4__.LargeInt), +/* harmony export */ Opaque: () => (/* reexport safe */ _opaque__WEBPACK_IMPORTED_MODULE_10__.Opaque), +/* harmony export */ Option: () => (/* reexport safe */ _option__WEBPACK_IMPORTED_MODULE_14__.Option), +/* harmony export */ Quadruple: () => (/* reexport safe */ _quadruple__WEBPACK_IMPORTED_MODULE_7__.Quadruple), +/* harmony export */ String: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_9__.String), +/* harmony export */ Struct: () => (/* reexport safe */ _struct__WEBPACK_IMPORTED_MODULE_17__.Struct), +/* harmony export */ Union: () => (/* reexport safe */ _union__WEBPACK_IMPORTED_MODULE_18__.Union), +/* harmony export */ UnsignedHyper: () => (/* reexport safe */ _unsigned_hyper__WEBPACK_IMPORTED_MODULE_3__.UnsignedHyper), +/* harmony export */ UnsignedInt: () => (/* reexport safe */ _unsigned_int__WEBPACK_IMPORTED_MODULE_2__.UnsignedInt), +/* harmony export */ VarArray: () => (/* reexport safe */ _var_array__WEBPACK_IMPORTED_MODULE_13__.VarArray), +/* harmony export */ VarOpaque: () => (/* reexport safe */ _var_opaque__WEBPACK_IMPORTED_MODULE_11__.VarOpaque), +/* harmony export */ Void: () => (/* reexport safe */ _void__WEBPACK_IMPORTED_MODULE_15__.Void) +/* harmony export */ }); +/* harmony import */ var _int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int */ "./src/int.js"); +/* harmony import */ var _hyper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hyper */ "./src/hyper.js"); +/* harmony import */ var _unsigned_int__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsigned-int */ "./src/unsigned-int.js"); +/* harmony import */ var _unsigned_hyper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./unsigned-hyper */ "./src/unsigned-hyper.js"); +/* harmony import */ var _large_int__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./large-int */ "./src/large-int.js"); +/* harmony import */ var _float__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./float */ "./src/float.js"); +/* harmony import */ var _double__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./double */ "./src/double.js"); +/* harmony import */ var _quadruple__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./quadruple */ "./src/quadruple.js"); +/* harmony import */ var _bool__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./bool */ "./src/bool.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./string */ "./src/string.js"); +/* harmony import */ var _opaque__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./opaque */ "./src/opaque.js"); +/* harmony import */ var _var_opaque__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./var-opaque */ "./src/var-opaque.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./array */ "./src/array.js"); +/* harmony import */ var _var_array__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./var-array */ "./src/var-array.js"); +/* harmony import */ var _option__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./option */ "./src/option.js"); +/* harmony import */ var _void__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./void */ "./src/void.js"); +/* harmony import */ var _enum__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./enum */ "./src/enum.js"); +/* harmony import */ var _struct__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./struct */ "./src/struct.js"); +/* harmony import */ var _union__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./union */ "./src/union.js"); + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./src/union.js": +/*!**********************!*\ + !*** ./src/union.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Union: () => (/* binding */ Union) +/* harmony export */ }); +/* harmony import */ var _void__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./void */ "./src/void.js"); +/* harmony import */ var _reference__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reference */ "./src/reference.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + + +class Union extends _xdr_type__WEBPACK_IMPORTED_MODULE_2__.XdrCompositeType { + constructor(aSwitch, value) { + super(); + this.set(aSwitch, value); + } + set(aSwitch, value) { + if (typeof aSwitch === 'string') { + aSwitch = this.constructor._switchOn.fromName(aSwitch); + } + this._switch = aSwitch; + const arm = this.constructor.armForSwitch(this._switch); + this._arm = arm; + this._armType = arm === _void__WEBPACK_IMPORTED_MODULE_0__.Void ? _void__WEBPACK_IMPORTED_MODULE_0__.Void : this.constructor._arms[arm]; + this._value = value; + } + get(armName = this._arm) { + if (this._arm !== _void__WEBPACK_IMPORTED_MODULE_0__.Void && this._arm !== armName) throw new TypeError(`${armName} not set`); + return this._value; + } + switch() { + return this._switch; + } + arm() { + return this._arm; + } + armType() { + return this._armType; + } + value() { + return this._value; + } + static armForSwitch(aSwitch) { + const member = this._switches.get(aSwitch); + if (member !== undefined) { + return member; + } + if (this._defaultArm) { + return this._defaultArm; + } + throw new TypeError(`Bad union switch: ${aSwitch}`); + } + static armTypeForArm(arm) { + if (arm === _void__WEBPACK_IMPORTED_MODULE_0__.Void) { + return _void__WEBPACK_IMPORTED_MODULE_0__.Void; + } + return this._arms[arm]; + } + + /** + * @inheritDoc + */ + static read(reader) { + const aSwitch = this._switchOn.read(reader); + const arm = this.armForSwitch(aSwitch); + const armType = arm === _void__WEBPACK_IMPORTED_MODULE_0__.Void ? _void__WEBPACK_IMPORTED_MODULE_0__.Void : this._arms[arm]; + let value; + if (armType !== undefined) { + value = armType.read(reader); + } else { + value = arm.read(reader); + } + return new this(aSwitch, value); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (!this.isValid(value)) { + throw new _errors__WEBPACK_IMPORTED_MODULE_3__.XdrWriterError(`${value} has union name ${value?.unionName}, not ${this.unionName}: ${JSON.stringify(value)}`); + } + this._switchOn.write(value.switch(), writer); + value.armType().write(value.value(), writer); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return value?.constructor?.unionName === this.unionName || (0,_xdr_type__WEBPACK_IMPORTED_MODULE_2__.isSerializableIsh)(value, this); + } + static create(context, name, config) { + const ChildUnion = class extends Union {}; + ChildUnion.unionName = name; + context.results[name] = ChildUnion; + if (config.switchOn instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + ChildUnion._switchOn = config.switchOn.resolve(context); + } else { + ChildUnion._switchOn = config.switchOn; + } + ChildUnion._switches = new Map(); + ChildUnion._arms = {}; + + // resolve default arm + let defaultArm = config.defaultArm; + if (defaultArm instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference) { + defaultArm = defaultArm.resolve(context); + } + ChildUnion._defaultArm = defaultArm; + for (const [aSwitch, armName] of config.switches) { + const key = typeof aSwitch === 'string' ? ChildUnion._switchOn.fromName(aSwitch) : aSwitch; + ChildUnion._switches.set(key, armName); + } + + // add enum-based helpers + // NOTE: we don't have good notation for "is a subclass of XDR.Enum", + // and so we use the following check (does _switchOn have a `values` + // attribute) to approximate the intent. + if (ChildUnion._switchOn.values !== undefined) { + for (const aSwitch of ChildUnion._switchOn.values()) { + // Add enum-based constructors + ChildUnion[aSwitch.name] = function ctr(value) { + return new ChildUnion(aSwitch, value); + }; + + // Add enum-based "set" helpers + ChildUnion.prototype[aSwitch.name] = function set(value) { + return this.set(aSwitch, value); + }; + } + } + if (config.arms) { + for (const [armsName, value] of Object.entries(config.arms)) { + ChildUnion._arms[armsName] = value instanceof _reference__WEBPACK_IMPORTED_MODULE_1__.Reference ? value.resolve(context) : value; + // Add arm accessor helpers + if (value !== _void__WEBPACK_IMPORTED_MODULE_0__.Void) { + ChildUnion.prototype[armsName] = function get() { + return this.get(armsName); + }; + } + } + } + return ChildUnion; + } +} + +/***/ }), + +/***/ "./src/unsigned-hyper.js": +/*!*******************************!*\ + !*** ./src/unsigned-hyper.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UnsignedHyper: () => (/* binding */ UnsignedHyper) +/* harmony export */ }); +/* harmony import */ var _large_int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./large-int */ "./src/large-int.js"); + +class UnsignedHyper extends _large_int__WEBPACK_IMPORTED_MODULE_0__.LargeInt { + /** + * @param {Array} parts - Slices to encode + */ + constructor(...args) { + super(args); + } + get low() { + return Number(this._value & 0xffffffffn) << 0; + } + get high() { + return Number(this._value >> 32n) >> 0; + } + get size() { + return 64; + } + get unsigned() { + return true; + } + + /** + * Create UnsignedHyper instance from two [high][low] i32 values + * @param {Number} low - Low part of u64 number + * @param {Number} high - High part of u64 number + * @return {UnsignedHyper} + */ + static fromBits(low, high) { + return new this(low, high); + } +} +UnsignedHyper.defineIntBoundaries(); + +/***/ }), + +/***/ "./src/unsigned-int.js": +/*!*****************************!*\ + !*** ./src/unsigned-int.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UnsignedInt: () => (/* binding */ UnsignedInt) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +const MAX_VALUE = 4294967295; +const MIN_VALUE = 0; +class UnsignedInt extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readUInt32BE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number' || !(value >= MIN_VALUE && value <= MAX_VALUE) || value % 1 !== 0) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError('invalid u32 value'); + writer.writeUInt32BE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + if (typeof value !== 'number' || value % 1 !== 0) { + return false; + } + return value >= MIN_VALUE && value <= MAX_VALUE; + } +} +UnsignedInt.MAX_VALUE = MAX_VALUE; +UnsignedInt.MIN_VALUE = MIN_VALUE; + +/***/ }), + +/***/ "./src/var-array.js": +/*!**************************!*\ + !*** ./src/var-array.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ VarArray: () => (/* binding */ VarArray) +/* harmony export */ }); +/* harmony import */ var _unsigned_int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unsigned-int */ "./src/unsigned-int.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class VarArray extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrCompositeType { + constructor(childType, maxLength = _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.MAX_VALUE) { + super(); + this._childType = childType; + this._maxLength = maxLength; + } + + /** + * @inheritDoc + */ + read(reader) { + const length = _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.read(reader); + if (length > this._maxLength) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrReaderError(`saw ${length} length VarArray, max allowed is ${this._maxLength}`); + const result = new Array(length); + for (let i = 0; i < length; i++) { + result[i] = this._childType.read(reader); + } + return result; + } + + /** + * @inheritDoc + */ + write(value, writer) { + if (!(value instanceof Array)) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`value is not array`); + if (value.length > this._maxLength) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`got array of size ${value.length}, max allowed is ${this._maxLength}`); + _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.write(value.length, writer); + for (const child of value) { + this._childType.write(child, writer); + } + } + + /** + * @inheritDoc + */ + isValid(value) { + if (!(value instanceof Array) || value.length > this._maxLength) { + return false; + } + for (const child of value) { + if (!this._childType.isValid(child)) return false; + } + return true; + } +} + +/***/ }), + +/***/ "./src/var-opaque.js": +/*!***************************!*\ + !*** ./src/var-opaque.js ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ VarOpaque: () => (/* binding */ VarOpaque) +/* harmony export */ }); +/* harmony import */ var _unsigned_int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unsigned-int */ "./src/unsigned-int.js"); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class VarOpaque extends _xdr_type__WEBPACK_IMPORTED_MODULE_1__.XdrCompositeType { + constructor(maxLength = _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.MAX_VALUE) { + super(); + this._maxLength = maxLength; + } + + /** + * @inheritDoc + */ + read(reader) { + const size = _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.read(reader); + if (size > this._maxLength) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrReaderError(`saw ${size} length VarOpaque, max allowed is ${this._maxLength}`); + return reader.read(size); + } + + /** + * @inheritDoc + */ + write(value, writer) { + const { + length + } = value; + if (value.length > this._maxLength) throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrWriterError(`got ${value.length} bytes, max allowed is ${this._maxLength}`); + // write size info + _unsigned_int__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt.write(length, writer); + writer.write(value, length); + } + + /** + * @inheritDoc + */ + isValid(value) { + return Buffer.isBuffer(value) && value.length <= this._maxLength; + } +} + +/***/ }), + +/***/ "./src/void.js": +/*!*********************!*\ + !*** ./src/void.js ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Void: () => (/* binding */ Void) +/* harmony export */ }); +/* harmony import */ var _xdr_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xdr-type */ "./src/xdr-type.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + +class Void extends _xdr_type__WEBPACK_IMPORTED_MODULE_0__.XdrPrimitiveType { + /* jshint unused: false */ + + static read() { + return undefined; + } + static write(value) { + if (value !== undefined) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.XdrWriterError('trying to write value to a void slot'); + } + static isValid(value) { + return value === undefined; + } +} + +/***/ }), + +/***/ "./src/xdr-type.js": +/*!*************************!*\ + !*** ./src/xdr-type.js ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XdrCompositeType: () => (/* binding */ XdrCompositeType), +/* harmony export */ XdrPrimitiveType: () => (/* binding */ XdrPrimitiveType), +/* harmony export */ hasConstructor: () => (/* binding */ hasConstructor), +/* harmony export */ isSerializableIsh: () => (/* binding */ isSerializableIsh) +/* harmony export */ }); +/* harmony import */ var _serialization_xdr_reader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./serialization/xdr-reader */ "./src/serialization/xdr-reader.js"); +/* harmony import */ var _serialization_xdr_writer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./serialization/xdr-writer */ "./src/serialization/xdr-writer.js"); +/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./src/errors.js"); + + + +class XdrType { + /** + * Encode value to XDR format + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {String|Buffer} + */ + toXDR(format = 'raw') { + if (!this.write) return this.constructor.toXDR(this, format); + const writer = new _serialization_xdr_writer__WEBPACK_IMPORTED_MODULE_1__.XdrWriter(); + this.write(this, writer); + return encodeResult(writer.finalize(), format); + } + + /** + * Decode XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {this} + */ + fromXDR(input, format = 'raw') { + if (!this.read) return this.constructor.fromXDR(input, format); + const reader = new _serialization_xdr_reader__WEBPACK_IMPORTED_MODULE_0__.XdrReader(decodeInput(input, format)); + const result = this.read(reader); + reader.ensureInputConsumed(); + return result; + } + + /** + * Check whether input contains a valid XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {Boolean} + */ + validateXDR(input, format = 'raw') { + try { + this.fromXDR(input, format); + return true; + } catch (e) { + return false; + } + } + + /** + * Encode value to XDR format + * @param {this} value - Value to serialize + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {Buffer} + */ + static toXDR(value, format = 'raw') { + const writer = new _serialization_xdr_writer__WEBPACK_IMPORTED_MODULE_1__.XdrWriter(); + this.write(value, writer); + return encodeResult(writer.finalize(), format); + } + + /** + * Decode XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {this} + */ + static fromXDR(input, format = 'raw') { + const reader = new _serialization_xdr_reader__WEBPACK_IMPORTED_MODULE_0__.XdrReader(decodeInput(input, format)); + const result = this.read(reader); + reader.ensureInputConsumed(); + return result; + } + + /** + * Check whether input contains a valid XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {Boolean} + */ + static validateXDR(input, format = 'raw') { + try { + this.fromXDR(input, format); + return true; + } catch (e) { + return false; + } + } +} +class XdrPrimitiveType extends XdrType { + /** + * Read value from the XDR-serialized input + * @param {XdrReader} reader - XdrReader instance + * @return {this} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + static read(reader) { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrNotImplementedDefinitionError(); + } + + /** + * Write XDR value to the buffer + * @param {this} value - Value to write + * @param {XdrWriter} writer - XdrWriter instance + * @return {void} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + static write(value, writer) { + throw new _errors__WEBPACK_IMPORTED_MODULE_2__.XdrNotImplementedDefinitionError(); + } + + /** + * Check whether XDR primitive value is valid + * @param {this} value - Value to check + * @return {Boolean} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + static isValid(value) { + return false; + } +} +class XdrCompositeType extends XdrType { + // Every descendant should implement two methods: read(reader) and write(value, writer) + + /** + * Check whether XDR primitive value is valid + * @param {this} value - Value to check + * @return {Boolean} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + isValid(value) { + return false; + } +} +class InvalidXdrEncodingFormatError extends TypeError { + constructor(format) { + super(`Invalid format ${format}, must be one of "raw", "hex", "base64"`); + } +} +function encodeResult(buffer, format) { + switch (format) { + case 'raw': + return buffer; + case 'hex': + return buffer.toString('hex'); + case 'base64': + return buffer.toString('base64'); + default: + throw new InvalidXdrEncodingFormatError(format); + } +} +function decodeInput(input, format) { + switch (format) { + case 'raw': + return input; + case 'hex': + return Buffer.from(input, 'hex'); + case 'base64': + return Buffer.from(input, 'base64'); + default: + throw new InvalidXdrEncodingFormatError(format); + } +} + +/** + * Provides a "duck typed" version of the native `instanceof` for read/write. + * + * "Duck typing" means if the parameter _looks like_ and _acts like_ a duck + * (i.e. the type we're checking), it will be treated as that type. + * + * In this case, the "type" we're looking for is "like XdrType" but also "like + * XdrCompositeType|XdrPrimitiveType" (i.e. serializable), but also conditioned + * on a particular subclass of "XdrType" (e.g. {@link Union} which extends + * XdrType). + * + * This makes the package resilient to downstream systems that may be combining + * many versions of a package across its stack that are technically compatible + * but fail `instanceof` checks due to cross-pollination. + */ +function isSerializableIsh(value, subtype) { + return value !== undefined && value !== null && ( + // prereqs, otherwise `getPrototypeOf` pops + value instanceof subtype || + // quickest check + // Do an initial constructor check (anywhere is fine so that children of + // `subtype` still work), then + hasConstructor(value, subtype) && + // ensure it has read/write methods, then + typeof value.constructor.read === 'function' && typeof value.constructor.write === 'function' && + // ensure XdrType is in the prototype chain + hasConstructor(value, 'XdrType')); +} + +/** Tries to find `subtype` in any of the constructors or meta of `instance`. */ +function hasConstructor(instance, subtype) { + do { + const ctor = instance.constructor; + if (ctor.name === subtype) { + return true; + } + } while (instance = Object.getPrototypeOf(instance)); + return false; +} + +/** + * @typedef {'raw'|'hex'|'base64'} XdrEncodingFormat + */ + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__("./src/browser.js"); +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=xdr.js.map \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/lib/xdr.js.map b/node_modules/@stellar/js-xdr/lib/xdr.js.map new file mode 100644 index 00000000..3626e573 --- /dev/null +++ b/node_modules/@stellar/js-xdr/lib/xdr.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xdr.js","mappings":"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","sources":["webpack://XDR/webpack/universalModuleDefinition","webpack://XDR/./src/array.js","webpack://XDR/./src/bigint-encoder.js","webpack://XDR/./src/bool.js","webpack://XDR/./src/browser.js","webpack://XDR/./src/config.js","webpack://XDR/./src/double.js","webpack://XDR/./src/enum.js","webpack://XDR/./src/errors.js","webpack://XDR/./src/float.js","webpack://XDR/./src/hyper.js","webpack://XDR/./src/index.js","webpack://XDR/./src/int.js","webpack://XDR/./src/large-int.js","webpack://XDR/./src/opaque.js","webpack://XDR/./src/option.js","webpack://XDR/./src/quadruple.js","webpack://XDR/./src/reference.js","webpack://XDR/./src/serialization/xdr-reader.js","webpack://XDR/./src/serialization/xdr-writer.js","webpack://XDR/./src/string.js","webpack://XDR/./src/struct.js","webpack://XDR/./src/types.js","webpack://XDR/./src/union.js","webpack://XDR/./src/unsigned-hyper.js","webpack://XDR/./src/unsigned-int.js","webpack://XDR/./src/var-array.js","webpack://XDR/./src/var-opaque.js","webpack://XDR/./src/void.js","webpack://XDR/./src/xdr-type.js","webpack://XDR/webpack/bootstrap","webpack://XDR/webpack/runtime/define property getters","webpack://XDR/webpack/runtime/hasOwnProperty shorthand","webpack://XDR/webpack/runtime/make namespace object","webpack://XDR/webpack/before-startup","webpack://XDR/webpack/startup","webpack://XDR/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"XDR\"] = factory();\n\telse\n\t\troot[\"XDR\"] = factory();\n})(this, () => {\nreturn ","import { XdrCompositeType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Array extends XdrCompositeType {\n constructor(childType, length) {\n super();\n this._childType = childType;\n this._length = length;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n // allocate array of specified length\n const result = new global.Array(this._length);\n // read values\n for (let i = 0; i < this._length; i++) {\n result[i] = this._childType.read(reader);\n }\n return result;\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n if (!global.Array.isArray(value))\n throw new XdrWriterError(`value is not array`);\n\n if (value.length !== this._length)\n throw new XdrWriterError(\n `got array of size ${value.length}, expected ${this._length}`\n );\n\n for (const child of value) {\n this._childType.write(child, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (!(value instanceof global.Array) || value.length !== this._length) {\n return false;\n }\n\n for (const child of value) {\n if (!this._childType.isValid(child)) return false;\n }\n return true;\n }\n}\n","/**\n * Encode a native `bigint` value from a list of arbitrary integer-like values.\n *\n * @param {Array} parts - Slices to encode in big-endian\n * format (i.e. earlier elements are higher bits)\n * @param {64|128|256} size - Number of bits in the target integer type\n * @param {boolean} unsigned - Whether it's an unsigned integer\n *\n * @returns {bigint}\n */\nexport function encodeBigIntFromBits(parts, size, unsigned) {\n if (!(parts instanceof Array)) {\n // allow a single parameter instead of an array\n parts = [parts];\n } else if (parts.length && parts[0] instanceof Array) {\n // unpack nested array param\n parts = parts[0];\n }\n\n const total = parts.length;\n const sliceSize = size / total;\n switch (sliceSize) {\n case 32:\n case 64:\n case 128:\n case 256:\n break;\n\n default:\n throw new RangeError(\n `expected slices to fit in 32/64/128/256 bits, got ${parts}`\n );\n }\n\n // normalize all inputs to bigint\n try {\n for (let i = 0; i < parts.length; i++) {\n if (typeof parts[i] !== 'bigint') {\n parts[i] = BigInt(parts[i].valueOf());\n }\n }\n } catch (e) {\n throw new TypeError(`expected bigint-like values, got: ${parts} (${e})`);\n }\n\n // check for sign mismatches for single inputs (this is a special case to\n // handle one parameter passed to e.g. UnsignedHyper et al.)\n // see https://github.com/stellar/js-xdr/pull/100#discussion_r1228770845\n if (unsigned && parts.length === 1 && parts[0] < 0n) {\n throw new RangeError(`expected a positive value, got: ${parts}`);\n }\n\n // encode in big-endian fashion, shifting each slice by the slice size\n let result = BigInt.asUintN(sliceSize, parts[0]); // safe: len >= 1\n for (let i = 1; i < parts.length; i++) {\n result |= BigInt.asUintN(sliceSize, parts[i]) << BigInt(i * sliceSize);\n }\n\n // interpret value as signed if necessary and clamp it\n if (!unsigned) {\n result = BigInt.asIntN(size, result);\n }\n\n // check boundaries\n const [min, max] = calculateBigIntBoundaries(size, unsigned);\n if (result >= min && result <= max) {\n return result;\n }\n\n // failed to encode\n throw new TypeError(\n `bigint values [${parts}] for ${formatIntName(\n size,\n unsigned\n )} out of range [${min}, ${max}]: ${result}`\n );\n}\n\n/**\n * Transforms a single bigint value that's supposed to represent a `size`-bit\n * integer into a list of `sliceSize`d chunks.\n *\n * @param {bigint} value - Single bigint value to decompose\n * @param {64|128|256} iSize - Number of bits represented by `value`\n * @param {32|64|128} sliceSize - Number of chunks to decompose into\n * @return {bigint[]}\n */\nexport function sliceBigInt(value, iSize, sliceSize) {\n if (typeof value !== 'bigint') {\n throw new TypeError(`Expected bigint 'value', got ${typeof value}`);\n }\n\n const total = iSize / sliceSize;\n if (total === 1) {\n return [value];\n }\n\n if (\n sliceSize < 32 ||\n sliceSize > 128 ||\n (total !== 2 && total !== 4 && total !== 8)\n ) {\n throw new TypeError(\n `invalid bigint (${value}) and slice size (${iSize} -> ${sliceSize}) combination`\n );\n }\n\n const shift = BigInt(sliceSize);\n\n // iterate shift and mask application\n const result = new Array(total);\n for (let i = 0; i < total; i++) {\n // we force a signed interpretation to preserve sign in each slice value,\n // but downstream can convert to unsigned if it's appropriate\n result[i] = BigInt.asIntN(sliceSize, value); // clamps to size\n\n // move on to the next chunk\n value >>= shift;\n }\n\n return result;\n}\n\nexport function formatIntName(precision, unsigned) {\n return `${unsigned ? 'u' : 'i'}${precision}`;\n}\n\n/**\n * Get min|max boundaries for an integer with a specified bits size\n * @param {64|128|256} size - Number of bits in the source integer type\n * @param {Boolean} unsigned - Whether it's an unsigned integer\n * @return {BigInt[]}\n */\nexport function calculateBigIntBoundaries(size, unsigned) {\n if (unsigned) {\n return [0n, (1n << BigInt(size)) - 1n];\n }\n\n const boundary = 1n << BigInt(size - 1);\n return [0n - boundary, boundary - 1n];\n}\n","import { Int } from './int';\nimport { XdrPrimitiveType } from './xdr-type';\nimport { XdrReaderError } from './errors';\n\nexport class Bool extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n const value = Int.read(reader);\n\n switch (value) {\n case 0:\n return false;\n case 1:\n return true;\n default:\n throw new XdrReaderError(`got ${value} when trying to read a bool`);\n }\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n const intVal = value ? 1 : 0;\n Int.write(intVal, writer);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'boolean';\n }\n}\n","// eslint-disable-next-line prefer-import/prefer-import-over-require\nconst exports = require('./index');\nmodule.exports = exports;\n","// eslint-disable-next-line max-classes-per-file\nimport * as XDRTypes from './types';\nimport { Reference } from './reference';\nimport { XdrDefinitionError } from './errors';\n\nexport * from './reference';\n\nclass SimpleReference extends Reference {\n constructor(name) {\n super();\n this.name = name;\n }\n\n resolve(context) {\n const defn = context.definitions[this.name];\n return defn.resolve(context);\n }\n}\n\nclass ArrayReference extends Reference {\n constructor(childReference, length, variable = false) {\n super();\n this.childReference = childReference;\n this.length = length;\n this.variable = variable;\n }\n\n resolve(context) {\n let resolvedChild = this.childReference;\n let length = this.length;\n\n if (resolvedChild instanceof Reference) {\n resolvedChild = resolvedChild.resolve(context);\n }\n\n if (length instanceof Reference) {\n length = length.resolve(context);\n }\n\n if (this.variable) {\n return new XDRTypes.VarArray(resolvedChild, length);\n }\n return new XDRTypes.Array(resolvedChild, length);\n }\n}\n\nclass OptionReference extends Reference {\n constructor(childReference) {\n super();\n this.childReference = childReference;\n this.name = childReference.name;\n }\n\n resolve(context) {\n let resolvedChild = this.childReference;\n\n if (resolvedChild instanceof Reference) {\n resolvedChild = resolvedChild.resolve(context);\n }\n\n return new XDRTypes.Option(resolvedChild);\n }\n}\n\nclass SizedReference extends Reference {\n constructor(sizedType, length) {\n super();\n this.sizedType = sizedType;\n this.length = length;\n }\n\n resolve(context) {\n let length = this.length;\n\n if (length instanceof Reference) {\n length = length.resolve(context);\n }\n\n return new this.sizedType(length);\n }\n}\n\nclass Definition {\n constructor(constructor, name, cfg) {\n this.constructor = constructor;\n this.name = name;\n this.config = cfg;\n }\n\n // resolve calls the constructor of this definition with the provided context\n // and this definitions config values. The definitions constructor should\n // populate the final type on `context.results`, and may refer to other\n // definitions through `context.definitions`\n resolve(context) {\n if (this.name in context.results) {\n return context.results[this.name];\n }\n\n return this.constructor(context, this.name, this.config);\n }\n}\n\n// let the reference resolution system do its thing\n// the \"constructor\" for a typedef just returns the resolved value\nfunction createTypedef(context, typeName, value) {\n if (value instanceof Reference) {\n value = value.resolve(context);\n }\n context.results[typeName] = value;\n return value;\n}\n\nfunction createConst(context, name, value) {\n context.results[name] = value;\n return value;\n}\n\nclass TypeBuilder {\n constructor(destination) {\n this._destination = destination;\n this._definitions = {};\n }\n\n enum(name, members) {\n const result = new Definition(XDRTypes.Enum.create, name, members);\n this.define(name, result);\n }\n\n struct(name, members) {\n const result = new Definition(XDRTypes.Struct.create, name, members);\n this.define(name, result);\n }\n\n union(name, cfg) {\n const result = new Definition(XDRTypes.Union.create, name, cfg);\n this.define(name, result);\n }\n\n typedef(name, cfg) {\n const result = new Definition(createTypedef, name, cfg);\n this.define(name, result);\n }\n\n const(name, cfg) {\n const result = new Definition(createConst, name, cfg);\n this.define(name, result);\n }\n\n void() {\n return XDRTypes.Void;\n }\n\n bool() {\n return XDRTypes.Bool;\n }\n\n int() {\n return XDRTypes.Int;\n }\n\n hyper() {\n return XDRTypes.Hyper;\n }\n\n uint() {\n return XDRTypes.UnsignedInt;\n }\n\n uhyper() {\n return XDRTypes.UnsignedHyper;\n }\n\n float() {\n return XDRTypes.Float;\n }\n\n double() {\n return XDRTypes.Double;\n }\n\n quadruple() {\n return XDRTypes.Quadruple;\n }\n\n string(length) {\n return new SizedReference(XDRTypes.String, length);\n }\n\n opaque(length) {\n return new SizedReference(XDRTypes.Opaque, length);\n }\n\n varOpaque(length) {\n return new SizedReference(XDRTypes.VarOpaque, length);\n }\n\n array(childType, length) {\n return new ArrayReference(childType, length);\n }\n\n varArray(childType, maxLength) {\n return new ArrayReference(childType, maxLength, true);\n }\n\n option(childType) {\n return new OptionReference(childType);\n }\n\n define(name, definition) {\n if (this._destination[name] === undefined) {\n this._definitions[name] = definition;\n } else {\n throw new XdrDefinitionError(`${name} is already defined`);\n }\n }\n\n lookup(name) {\n return new SimpleReference(name);\n }\n\n resolve() {\n for (const defn of Object.values(this._definitions)) {\n defn.resolve({\n definitions: this._definitions,\n results: this._destination\n });\n }\n }\n}\n\nexport function config(fn, types = {}) {\n if (fn) {\n const builder = new TypeBuilder(types);\n fn(builder);\n builder.resolve();\n }\n\n return types;\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Double extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readDoubleBE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (typeof value !== 'number') throw new XdrWriterError('not a number');\n\n writer.writeDoubleBE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'number';\n }\n}\n","import { Int } from './int';\nimport { XdrPrimitiveType, isSerializableIsh } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class Enum extends XdrPrimitiveType {\n constructor(name, value) {\n super();\n this.name = name;\n this.value = value;\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const intVal = Int.read(reader);\n const res = this._byValue[intVal];\n if (res === undefined)\n throw new XdrReaderError(\n `unknown ${this.enumName} member for value ${intVal}`\n );\n return res;\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (!this.isValid(value)) {\n throw new XdrWriterError(\n `${value} has enum name ${value?.enumName}, not ${\n this.enumName\n }: ${JSON.stringify(value)}`\n );\n }\n\n Int.write(value.value, writer);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return (\n value?.constructor?.enumName === this.enumName ||\n isSerializableIsh(value, this)\n );\n }\n\n static members() {\n return this._members;\n }\n\n static values() {\n return Object.values(this._members);\n }\n\n static fromName(name) {\n const result = this._members[name];\n\n if (!result)\n throw new TypeError(`${name} is not a member of ${this.enumName}`);\n\n return result;\n }\n\n static fromValue(value) {\n const result = this._byValue[value];\n if (result === undefined)\n throw new TypeError(\n `${value} is not a value of any member of ${this.enumName}`\n );\n return result;\n }\n\n static create(context, name, members) {\n const ChildEnum = class extends Enum {};\n\n ChildEnum.enumName = name;\n context.results[name] = ChildEnum;\n\n ChildEnum._members = {};\n ChildEnum._byValue = {};\n\n for (const [key, value] of Object.entries(members)) {\n const inst = new ChildEnum(key, value);\n ChildEnum._members[key] = inst;\n ChildEnum._byValue[value] = inst;\n ChildEnum[key] = () => inst;\n }\n\n return ChildEnum;\n }\n}\n","export class XdrWriterError extends TypeError {\n constructor(message) {\n super(`XDR Write Error: ${message}`);\n }\n}\n\nexport class XdrReaderError extends TypeError {\n constructor(message) {\n super(`XDR Read Error: ${message}`);\n }\n}\n\nexport class XdrDefinitionError extends TypeError {\n constructor(message) {\n super(`XDR Type Definition Error: ${message}`);\n }\n}\n\nexport class XdrNotImplementedDefinitionError extends XdrDefinitionError {\n constructor() {\n super(\n `method not implemented, it should be overloaded in the descendant class.`\n );\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Float extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readFloatBE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (typeof value !== 'number') throw new XdrWriterError('not a number');\n\n writer.writeFloatBE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'number';\n }\n}\n","import { LargeInt } from './large-int';\n\nexport class Hyper extends LargeInt {\n /**\n * @param {Array} parts - Slices to encode\n */\n constructor(...args) {\n super(args);\n }\n\n get low() {\n return Number(this._value & 0xffffffffn) << 0;\n }\n\n get high() {\n return Number(this._value >> 32n) >> 0;\n }\n\n get size() {\n return 64;\n }\n\n get unsigned() {\n return false;\n }\n\n /**\n * Create Hyper instance from two [high][low] i32 values\n * @param {Number} low - Low part of i64 number\n * @param {Number} high - High part of i64 number\n * @return {LargeInt}\n */\n static fromBits(low, high) {\n return new this(low, high);\n }\n}\n\nHyper.defineIntBoundaries();\n","export * from './types';\nexport * from './config';\n\nexport { XdrReader } from './serialization/xdr-reader';\nexport { XdrWriter } from './serialization/xdr-writer';\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nconst MAX_VALUE = 2147483647;\nconst MIN_VALUE = -2147483648;\n\nexport class Int extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readInt32BE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (typeof value !== 'number') throw new XdrWriterError('not a number');\n\n if ((value | 0) !== value) throw new XdrWriterError('invalid i32 value');\n\n writer.writeInt32BE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n if (typeof value !== 'number' || (value | 0) !== value) {\n return false;\n }\n\n return value >= MIN_VALUE && value <= MAX_VALUE;\n }\n}\n\nInt.MAX_VALUE = MAX_VALUE;\nInt.MIN_VALUE = -MIN_VALUE;\n","import { XdrPrimitiveType } from './xdr-type';\nimport {\n calculateBigIntBoundaries,\n encodeBigIntFromBits,\n sliceBigInt\n} from './bigint-encoder';\nimport { XdrNotImplementedDefinitionError, XdrWriterError } from './errors';\n\nexport class LargeInt extends XdrPrimitiveType {\n /**\n * @param {Array} parts - Slices to encode\n */\n constructor(args) {\n super();\n this._value = encodeBigIntFromBits(args, this.size, this.unsigned);\n }\n\n /**\n * Signed/unsigned representation\n * @type {Boolean}\n * @abstract\n */\n get unsigned() {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Size of the integer in bits\n * @type {Number}\n * @abstract\n */\n get size() {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Slice integer to parts with smaller bit size\n * @param {32|64|128} sliceSize - Size of each part in bits\n * @return {BigInt[]}\n */\n slice(sliceSize) {\n return sliceBigInt(this._value, this.size, sliceSize);\n }\n\n toString() {\n return this._value.toString();\n }\n\n toJSON() {\n return { _value: this._value.toString() };\n }\n\n toBigInt() {\n return BigInt(this._value);\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const { size } = this.prototype;\n if (size === 64) return new this(reader.readBigUInt64BE());\n return new this(\n ...Array.from({ length: size / 64 }, () =>\n reader.readBigUInt64BE()\n ).reverse()\n );\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (value instanceof this) {\n value = value._value;\n } else if (\n typeof value !== 'bigint' ||\n value > this.MAX_VALUE ||\n value < this.MIN_VALUE\n )\n throw new XdrWriterError(`${value} is not a ${this.name}`);\n\n const { unsigned, size } = this.prototype;\n if (size === 64) {\n if (unsigned) {\n writer.writeBigUInt64BE(value);\n } else {\n writer.writeBigInt64BE(value);\n }\n } else {\n for (const part of sliceBigInt(value, size, 64).reverse()) {\n if (unsigned) {\n writer.writeBigUInt64BE(part);\n } else {\n writer.writeBigInt64BE(part);\n }\n }\n }\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return typeof value === 'bigint' || value instanceof this;\n }\n\n /**\n * Create instance from string\n * @param {String} string - Numeric representation\n * @return {LargeInt}\n */\n static fromString(string) {\n return new this(string);\n }\n\n static MAX_VALUE = 0n;\n\n static MIN_VALUE = 0n;\n\n /**\n * @internal\n * @return {void}\n */\n static defineIntBoundaries() {\n const [min, max] = calculateBigIntBoundaries(\n this.prototype.size,\n this.prototype.unsigned\n );\n this.MIN_VALUE = min;\n this.MAX_VALUE = max;\n }\n}\n","import { XdrCompositeType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Opaque extends XdrCompositeType {\n constructor(length) {\n super();\n this._length = length;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n return reader.read(this._length);\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n const { length } = value;\n if (length !== this._length)\n throw new XdrWriterError(\n `got ${value.length} bytes, expected ${this._length}`\n );\n writer.write(value, length);\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n return Buffer.isBuffer(value) && value.length === this._length;\n }\n}\n","import { Bool } from './bool';\nimport { XdrPrimitiveType } from './xdr-type';\n\nexport class Option extends XdrPrimitiveType {\n constructor(childType) {\n super();\n this._childType = childType;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n if (Bool.read(reader)) {\n return this._childType.read(reader);\n }\n\n return undefined;\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n const isPresent = value !== null && value !== undefined;\n\n Bool.write(isPresent, writer);\n\n if (isPresent) {\n this._childType.write(value, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (value === null || value === undefined) {\n return true;\n }\n return this._childType.isValid(value);\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrDefinitionError } from './errors';\n\nexport class Quadruple extends XdrPrimitiveType {\n static read() {\n throw new XdrDefinitionError('quadruple not supported');\n }\n\n static write() {\n throw new XdrDefinitionError('quadruple not supported');\n }\n\n static isValid() {\n return false;\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrDefinitionError } from './errors';\n\nexport class Reference extends XdrPrimitiveType {\n /* jshint unused: false */\n resolve() {\n throw new XdrDefinitionError(\n '\"resolve\" method should be implemented in the descendant class'\n );\n }\n}\n","/**\n * @internal\n */\nimport { XdrReaderError } from '../errors';\n\nexport class XdrReader {\n /**\n * @constructor\n * @param {Buffer} source - Buffer containing serialized data\n */\n constructor(source) {\n if (!Buffer.isBuffer(source)) {\n if (\n source instanceof Array ||\n Array.isArray(source) ||\n ArrayBuffer.isView(source)\n ) {\n source = Buffer.from(source);\n } else {\n throw new XdrReaderError(`source invalid: ${source}`);\n }\n }\n\n this._buffer = source;\n this._length = source.length;\n this._index = 0;\n }\n\n /**\n * @type {Buffer}\n * @private\n * @readonly\n */\n _buffer;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _length;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _index;\n\n /**\n * Check if the reader reached the end of the input buffer\n * @return {Boolean}\n */\n get eof() {\n return this._index === this._length;\n }\n\n /**\n * Advance reader position, check padding and overflow\n * @param {Number} size - Bytes to read\n * @return {Number} Position to read from\n * @private\n */\n advance(size) {\n const from = this._index;\n // advance cursor position\n this._index += size;\n // check buffer boundaries\n if (this._length < this._index)\n throw new XdrReaderError(\n 'attempt to read outside the boundary of the buffer'\n );\n // check that padding is correct for Opaque and String\n const padding = 4 - (size % 4 || 4);\n if (padding > 0) {\n for (let i = 0; i < padding; i++)\n if (this._buffer[this._index + i] !== 0)\n // all bytes in the padding should be zeros\n throw new XdrReaderError('invalid padding');\n this._index += padding;\n }\n return from;\n }\n\n /**\n * Reset reader position\n * @return {void}\n */\n rewind() {\n this._index = 0;\n }\n\n /**\n * Read byte array from the buffer\n * @param {Number} size - Bytes to read\n * @return {Buffer} - Sliced portion of the underlying buffer\n */\n read(size) {\n const from = this.advance(size);\n return this._buffer.subarray(from, from + size);\n }\n\n /**\n * Read i32 from buffer\n * @return {Number}\n */\n readInt32BE() {\n return this._buffer.readInt32BE(this.advance(4));\n }\n\n /**\n * Read u32 from buffer\n * @return {Number}\n */\n readUInt32BE() {\n return this._buffer.readUInt32BE(this.advance(4));\n }\n\n /**\n * Read i64 from buffer\n * @return {BigInt}\n */\n readBigInt64BE() {\n return this._buffer.readBigInt64BE(this.advance(8));\n }\n\n /**\n * Read u64 from buffer\n * @return {BigInt}\n */\n readBigUInt64BE() {\n return this._buffer.readBigUInt64BE(this.advance(8));\n }\n\n /**\n * Read float from buffer\n * @return {Number}\n */\n readFloatBE() {\n return this._buffer.readFloatBE(this.advance(4));\n }\n\n /**\n * Read double from buffer\n * @return {Number}\n */\n readDoubleBE() {\n return this._buffer.readDoubleBE(this.advance(8));\n }\n\n /**\n * Ensure that input buffer has been consumed in full, otherwise it's a type mismatch\n * @return {void}\n * @throws {XdrReaderError}\n */\n ensureInputConsumed() {\n if (this._index !== this._length)\n throw new XdrReaderError(\n `invalid XDR contract typecast - source buffer not entirely consumed`\n );\n }\n}\n","const BUFFER_CHUNK = 8192; // 8 KB chunk size increment\n\n/**\n * @internal\n */\nexport class XdrWriter {\n /**\n * @param {Buffer|Number} [buffer] - Optional destination buffer\n */\n constructor(buffer) {\n if (typeof buffer === 'number') {\n buffer = Buffer.allocUnsafe(buffer);\n } else if (!(buffer instanceof Buffer)) {\n buffer = Buffer.allocUnsafe(BUFFER_CHUNK);\n }\n this._buffer = buffer;\n this._length = buffer.length;\n }\n\n /**\n * @type {Buffer}\n * @private\n * @readonly\n */\n _buffer;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _length;\n /**\n * @type {Number}\n * @private\n * @readonly\n */\n _index = 0;\n\n /**\n * Advance writer position, write padding if needed, auto-resize the buffer\n * @param {Number} size - Bytes to write\n * @return {Number} Position to read from\n * @private\n */\n alloc(size) {\n const from = this._index;\n // advance cursor position\n this._index += size;\n // ensure sufficient buffer size\n if (this._length < this._index) {\n this.resize(this._index);\n }\n return from;\n }\n\n /**\n * Increase size of the underlying buffer\n * @param {Number} minRequiredSize - Minimum required buffer size\n * @return {void}\n * @private\n */\n resize(minRequiredSize) {\n // calculate new length, align new buffer length by chunk size\n const newLength = Math.ceil(minRequiredSize / BUFFER_CHUNK) * BUFFER_CHUNK;\n // create new buffer and copy previous data\n const newBuffer = Buffer.allocUnsafe(newLength);\n this._buffer.copy(newBuffer, 0, 0, this._length);\n // update references\n this._buffer = newBuffer;\n this._length = newLength;\n }\n\n /**\n * Return XDR-serialized value\n * @return {Buffer}\n */\n finalize() {\n // clip underlying buffer to the actually written value\n return this._buffer.subarray(0, this._index);\n }\n\n /**\n * Return XDR-serialized value as byte array\n * @return {Number[]}\n */\n toArray() {\n return [...this.finalize()];\n }\n\n /**\n * Write byte array from the buffer\n * @param {Buffer|String} value - Bytes/string to write\n * @param {Number} size - Size in bytes\n * @return {XdrReader} - XdrReader wrapper on top of a subarray\n */\n write(value, size) {\n if (typeof value === 'string') {\n // serialize string directly to the output buffer\n const offset = this.alloc(size);\n this._buffer.write(value, offset, 'utf8');\n } else {\n // copy data to the output buffer\n if (!(value instanceof Buffer)) {\n value = Buffer.from(value);\n }\n const offset = this.alloc(size);\n value.copy(this._buffer, offset, 0, size);\n }\n\n // add padding for 4-byte XDR alignment\n const padding = 4 - (size % 4 || 4);\n if (padding > 0) {\n const offset = this.alloc(padding);\n this._buffer.fill(0, offset, this._index);\n }\n }\n\n /**\n * Write i32 from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeInt32BE(value) {\n const offset = this.alloc(4);\n this._buffer.writeInt32BE(value, offset);\n }\n\n /**\n * Write u32 from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeUInt32BE(value) {\n const offset = this.alloc(4);\n this._buffer.writeUInt32BE(value, offset);\n }\n\n /**\n * Write i64 from buffer\n * @param {BigInt} value - Value to serialize\n * @return {void}\n */\n writeBigInt64BE(value) {\n const offset = this.alloc(8);\n this._buffer.writeBigInt64BE(value, offset);\n }\n\n /**\n * Write u64 from buffer\n * @param {BigInt} value - Value to serialize\n * @return {void}\n */\n writeBigUInt64BE(value) {\n const offset = this.alloc(8);\n this._buffer.writeBigUInt64BE(value, offset);\n }\n\n /**\n * Write float from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeFloatBE(value) {\n const offset = this.alloc(4);\n this._buffer.writeFloatBE(value, offset);\n }\n\n /**\n * Write double from buffer\n * @param {Number} value - Value to serialize\n * @return {void}\n */\n writeDoubleBE(value) {\n const offset = this.alloc(8);\n this._buffer.writeDoubleBE(value, offset);\n }\n\n static bufferChunkSize = BUFFER_CHUNK;\n}\n","import { UnsignedInt } from './unsigned-int';\nimport { XdrCompositeType } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class String extends XdrCompositeType {\n constructor(maxLength = UnsignedInt.MAX_VALUE) {\n super();\n this._maxLength = maxLength;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n const size = UnsignedInt.read(reader);\n if (size > this._maxLength)\n throw new XdrReaderError(\n `saw ${size} length String, max allowed is ${this._maxLength}`\n );\n\n return reader.read(size);\n }\n\n readString(reader) {\n return this.read(reader).toString('utf8');\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n // calculate string byte size before writing\n const size =\n typeof value === 'string'\n ? Buffer.byteLength(value, 'utf8')\n : value.length;\n if (size > this._maxLength)\n throw new XdrWriterError(\n `got ${value.length} bytes, max allowed is ${this._maxLength}`\n );\n // write size info\n UnsignedInt.write(size, writer);\n writer.write(value, size);\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (typeof value === 'string') {\n return Buffer.byteLength(value, 'utf8') <= this._maxLength;\n }\n if (value instanceof Array || Buffer.isBuffer(value)) {\n return value.length <= this._maxLength;\n }\n return false;\n }\n}\n","import { Reference } from './reference';\nimport { XdrCompositeType, isSerializableIsh } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Struct extends XdrCompositeType {\n constructor(attributes) {\n super();\n this._attributes = attributes || {};\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const attributes = {};\n for (const [fieldName, type] of this._fields) {\n attributes[fieldName] = type.read(reader);\n }\n return new this(attributes);\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (!this.isValid(value)) {\n throw new XdrWriterError(\n `${value} has struct name ${value?.constructor?.structName}, not ${\n this.structName\n }: ${JSON.stringify(value)}`\n );\n }\n\n for (const [fieldName, type] of this._fields) {\n const attribute = value._attributes[fieldName];\n type.write(attribute, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return (\n value?.constructor?.structName === this.structName ||\n isSerializableIsh(value, this)\n );\n }\n\n static create(context, name, fields) {\n const ChildStruct = class extends Struct {};\n\n ChildStruct.structName = name;\n\n context.results[name] = ChildStruct;\n\n const mappedFields = new Array(fields.length);\n for (let i = 0; i < fields.length; i++) {\n const fieldDescriptor = fields[i];\n const fieldName = fieldDescriptor[0];\n let field = fieldDescriptor[1];\n if (field instanceof Reference) {\n field = field.resolve(context);\n }\n mappedFields[i] = [fieldName, field];\n // create accessors\n ChildStruct.prototype[fieldName] = createAccessorMethod(fieldName);\n }\n\n ChildStruct._fields = mappedFields;\n\n return ChildStruct;\n }\n}\n\nfunction createAccessorMethod(name) {\n return function readOrWriteAttribute(value) {\n if (value !== undefined) {\n this._attributes[name] = value;\n }\n return this._attributes[name];\n };\n}\n","export * from './int';\nexport * from './hyper';\nexport * from './unsigned-int';\nexport * from './unsigned-hyper';\nexport * from './large-int';\n\nexport * from './float';\nexport * from './double';\nexport * from './quadruple';\n\nexport * from './bool';\n\nexport * from './string';\n\nexport * from './opaque';\nexport * from './var-opaque';\n\nexport * from './array';\nexport * from './var-array';\n\nexport * from './option';\nexport * from './void';\n\nexport * from './enum';\nexport * from './struct';\nexport * from './union';\n","import { Void } from './void';\nimport { Reference } from './reference';\nimport { XdrCompositeType, isSerializableIsh } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Union extends XdrCompositeType {\n constructor(aSwitch, value) {\n super();\n this.set(aSwitch, value);\n }\n\n set(aSwitch, value) {\n if (typeof aSwitch === 'string') {\n aSwitch = this.constructor._switchOn.fromName(aSwitch);\n }\n\n this._switch = aSwitch;\n const arm = this.constructor.armForSwitch(this._switch);\n this._arm = arm;\n this._armType = arm === Void ? Void : this.constructor._arms[arm];\n this._value = value;\n }\n\n get(armName = this._arm) {\n if (this._arm !== Void && this._arm !== armName)\n throw new TypeError(`${armName} not set`);\n return this._value;\n }\n\n switch() {\n return this._switch;\n }\n\n arm() {\n return this._arm;\n }\n\n armType() {\n return this._armType;\n }\n\n value() {\n return this._value;\n }\n\n static armForSwitch(aSwitch) {\n const member = this._switches.get(aSwitch);\n if (member !== undefined) {\n return member;\n }\n if (this._defaultArm) {\n return this._defaultArm;\n }\n throw new TypeError(`Bad union switch: ${aSwitch}`);\n }\n\n static armTypeForArm(arm) {\n if (arm === Void) {\n return Void;\n }\n return this._arms[arm];\n }\n\n /**\n * @inheritDoc\n */\n static read(reader) {\n const aSwitch = this._switchOn.read(reader);\n const arm = this.armForSwitch(aSwitch);\n const armType = arm === Void ? Void : this._arms[arm];\n let value;\n if (armType !== undefined) {\n value = armType.read(reader);\n } else {\n value = arm.read(reader);\n }\n return new this(aSwitch, value);\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (!this.isValid(value)) {\n throw new XdrWriterError(\n `${value} has union name ${value?.unionName}, not ${\n this.unionName\n }: ${JSON.stringify(value)}`\n );\n }\n\n this._switchOn.write(value.switch(), writer);\n value.armType().write(value.value(), writer);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n return (\n value?.constructor?.unionName === this.unionName ||\n isSerializableIsh(value, this)\n );\n }\n\n static create(context, name, config) {\n const ChildUnion = class extends Union {};\n\n ChildUnion.unionName = name;\n context.results[name] = ChildUnion;\n\n if (config.switchOn instanceof Reference) {\n ChildUnion._switchOn = config.switchOn.resolve(context);\n } else {\n ChildUnion._switchOn = config.switchOn;\n }\n\n ChildUnion._switches = new Map();\n ChildUnion._arms = {};\n\n // resolve default arm\n let defaultArm = config.defaultArm;\n if (defaultArm instanceof Reference) {\n defaultArm = defaultArm.resolve(context);\n }\n\n ChildUnion._defaultArm = defaultArm;\n\n for (const [aSwitch, armName] of config.switches) {\n const key =\n typeof aSwitch === 'string'\n ? ChildUnion._switchOn.fromName(aSwitch)\n : aSwitch;\n\n ChildUnion._switches.set(key, armName);\n }\n\n // add enum-based helpers\n // NOTE: we don't have good notation for \"is a subclass of XDR.Enum\",\n // and so we use the following check (does _switchOn have a `values`\n // attribute) to approximate the intent.\n if (ChildUnion._switchOn.values !== undefined) {\n for (const aSwitch of ChildUnion._switchOn.values()) {\n // Add enum-based constructors\n ChildUnion[aSwitch.name] = function ctr(value) {\n return new ChildUnion(aSwitch, value);\n };\n\n // Add enum-based \"set\" helpers\n ChildUnion.prototype[aSwitch.name] = function set(value) {\n return this.set(aSwitch, value);\n };\n }\n }\n\n if (config.arms) {\n for (const [armsName, value] of Object.entries(config.arms)) {\n ChildUnion._arms[armsName] =\n value instanceof Reference ? value.resolve(context) : value;\n // Add arm accessor helpers\n if (value !== Void) {\n ChildUnion.prototype[armsName] = function get() {\n return this.get(armsName);\n };\n }\n }\n }\n\n return ChildUnion;\n }\n}\n","import { LargeInt } from './large-int';\n\nexport class UnsignedHyper extends LargeInt {\n /**\n * @param {Array} parts - Slices to encode\n */\n constructor(...args) {\n super(args);\n }\n\n get low() {\n return Number(this._value & 0xffffffffn) << 0;\n }\n\n get high() {\n return Number(this._value >> 32n) >> 0;\n }\n\n get size() {\n return 64;\n }\n\n get unsigned() {\n return true;\n }\n\n /**\n * Create UnsignedHyper instance from two [high][low] i32 values\n * @param {Number} low - Low part of u64 number\n * @param {Number} high - High part of u64 number\n * @return {UnsignedHyper}\n */\n static fromBits(low, high) {\n return new this(low, high);\n }\n}\n\nUnsignedHyper.defineIntBoundaries();\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nconst MAX_VALUE = 4294967295;\nconst MIN_VALUE = 0;\n\nexport class UnsignedInt extends XdrPrimitiveType {\n /**\n * @inheritDoc\n */\n static read(reader) {\n return reader.readUInt32BE();\n }\n\n /**\n * @inheritDoc\n */\n static write(value, writer) {\n if (\n typeof value !== 'number' ||\n !(value >= MIN_VALUE && value <= MAX_VALUE) ||\n value % 1 !== 0\n )\n throw new XdrWriterError('invalid u32 value');\n\n writer.writeUInt32BE(value);\n }\n\n /**\n * @inheritDoc\n */\n static isValid(value) {\n if (typeof value !== 'number' || value % 1 !== 0) {\n return false;\n }\n\n return value >= MIN_VALUE && value <= MAX_VALUE;\n }\n}\n\nUnsignedInt.MAX_VALUE = MAX_VALUE;\nUnsignedInt.MIN_VALUE = MIN_VALUE;\n","import { UnsignedInt } from './unsigned-int';\nimport { XdrCompositeType } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class VarArray extends XdrCompositeType {\n constructor(childType, maxLength = UnsignedInt.MAX_VALUE) {\n super();\n this._childType = childType;\n this._maxLength = maxLength;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n const length = UnsignedInt.read(reader);\n if (length > this._maxLength)\n throw new XdrReaderError(\n `saw ${length} length VarArray, max allowed is ${this._maxLength}`\n );\n\n const result = new Array(length);\n for (let i = 0; i < length; i++) {\n result[i] = this._childType.read(reader);\n }\n return result;\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n if (!(value instanceof Array))\n throw new XdrWriterError(`value is not array`);\n\n if (value.length > this._maxLength)\n throw new XdrWriterError(\n `got array of size ${value.length}, max allowed is ${this._maxLength}`\n );\n\n UnsignedInt.write(value.length, writer);\n for (const child of value) {\n this._childType.write(child, writer);\n }\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n if (!(value instanceof Array) || value.length > this._maxLength) {\n return false;\n }\n for (const child of value) {\n if (!this._childType.isValid(child)) return false;\n }\n return true;\n }\n}\n","import { UnsignedInt } from './unsigned-int';\nimport { XdrCompositeType } from './xdr-type';\nimport { XdrReaderError, XdrWriterError } from './errors';\n\nexport class VarOpaque extends XdrCompositeType {\n constructor(maxLength = UnsignedInt.MAX_VALUE) {\n super();\n this._maxLength = maxLength;\n }\n\n /**\n * @inheritDoc\n */\n read(reader) {\n const size = UnsignedInt.read(reader);\n if (size > this._maxLength)\n throw new XdrReaderError(\n `saw ${size} length VarOpaque, max allowed is ${this._maxLength}`\n );\n return reader.read(size);\n }\n\n /**\n * @inheritDoc\n */\n write(value, writer) {\n const { length } = value;\n if (value.length > this._maxLength)\n throw new XdrWriterError(\n `got ${value.length} bytes, max allowed is ${this._maxLength}`\n );\n // write size info\n UnsignedInt.write(length, writer);\n writer.write(value, length);\n }\n\n /**\n * @inheritDoc\n */\n isValid(value) {\n return Buffer.isBuffer(value) && value.length <= this._maxLength;\n }\n}\n","import { XdrPrimitiveType } from './xdr-type';\nimport { XdrWriterError } from './errors';\n\nexport class Void extends XdrPrimitiveType {\n /* jshint unused: false */\n\n static read() {\n return undefined;\n }\n\n static write(value) {\n if (value !== undefined)\n throw new XdrWriterError('trying to write value to a void slot');\n }\n\n static isValid(value) {\n return value === undefined;\n }\n}\n","import { XdrReader } from './serialization/xdr-reader';\nimport { XdrWriter } from './serialization/xdr-writer';\nimport { XdrNotImplementedDefinitionError } from './errors';\n\nclass XdrType {\n /**\n * Encode value to XDR format\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {String|Buffer}\n */\n toXDR(format = 'raw') {\n if (!this.write) return this.constructor.toXDR(this, format);\n\n const writer = new XdrWriter();\n this.write(this, writer);\n return encodeResult(writer.finalize(), format);\n }\n\n /**\n * Decode XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {this}\n */\n fromXDR(input, format = 'raw') {\n if (!this.read) return this.constructor.fromXDR(input, format);\n\n const reader = new XdrReader(decodeInput(input, format));\n const result = this.read(reader);\n reader.ensureInputConsumed();\n return result;\n }\n\n /**\n * Check whether input contains a valid XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {Boolean}\n */\n validateXDR(input, format = 'raw') {\n try {\n this.fromXDR(input, format);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Encode value to XDR format\n * @param {this} value - Value to serialize\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {Buffer}\n */\n static toXDR(value, format = 'raw') {\n const writer = new XdrWriter();\n this.write(value, writer);\n return encodeResult(writer.finalize(), format);\n }\n\n /**\n * Decode XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {this}\n */\n static fromXDR(input, format = 'raw') {\n const reader = new XdrReader(decodeInput(input, format));\n const result = this.read(reader);\n reader.ensureInputConsumed();\n return result;\n }\n\n /**\n * Check whether input contains a valid XDR-encoded value\n * @param {Buffer|String} input - XDR-encoded input data\n * @param {XdrEncodingFormat} [format] - Encoding format (one of \"raw\", \"hex\", \"base64\")\n * @return {Boolean}\n */\n static validateXDR(input, format = 'raw') {\n try {\n this.fromXDR(input, format);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport class XdrPrimitiveType extends XdrType {\n /**\n * Read value from the XDR-serialized input\n * @param {XdrReader} reader - XdrReader instance\n * @return {this}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n static read(reader) {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Write XDR value to the buffer\n * @param {this} value - Value to write\n * @param {XdrWriter} writer - XdrWriter instance\n * @return {void}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n static write(value, writer) {\n throw new XdrNotImplementedDefinitionError();\n }\n\n /**\n * Check whether XDR primitive value is valid\n * @param {this} value - Value to check\n * @return {Boolean}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n static isValid(value) {\n return false;\n }\n}\n\nexport class XdrCompositeType extends XdrType {\n // Every descendant should implement two methods: read(reader) and write(value, writer)\n\n /**\n * Check whether XDR primitive value is valid\n * @param {this} value - Value to check\n * @return {Boolean}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n isValid(value) {\n return false;\n }\n}\n\nclass InvalidXdrEncodingFormatError extends TypeError {\n constructor(format) {\n super(`Invalid format ${format}, must be one of \"raw\", \"hex\", \"base64\"`);\n }\n}\n\nfunction encodeResult(buffer, format) {\n switch (format) {\n case 'raw':\n return buffer;\n case 'hex':\n return buffer.toString('hex');\n case 'base64':\n return buffer.toString('base64');\n default:\n throw new InvalidXdrEncodingFormatError(format);\n }\n}\n\nfunction decodeInput(input, format) {\n switch (format) {\n case 'raw':\n return input;\n case 'hex':\n return Buffer.from(input, 'hex');\n case 'base64':\n return Buffer.from(input, 'base64');\n default:\n throw new InvalidXdrEncodingFormatError(format);\n }\n}\n\n/**\n * Provides a \"duck typed\" version of the native `instanceof` for read/write.\n *\n * \"Duck typing\" means if the parameter _looks like_ and _acts like_ a duck\n * (i.e. the type we're checking), it will be treated as that type.\n *\n * In this case, the \"type\" we're looking for is \"like XdrType\" but also \"like\n * XdrCompositeType|XdrPrimitiveType\" (i.e. serializable), but also conditioned\n * on a particular subclass of \"XdrType\" (e.g. {@link Union} which extends\n * XdrType).\n *\n * This makes the package resilient to downstream systems that may be combining\n * many versions of a package across its stack that are technically compatible\n * but fail `instanceof` checks due to cross-pollination.\n */\nexport function isSerializableIsh(value, subtype) {\n return (\n value !== undefined &&\n value !== null && // prereqs, otherwise `getPrototypeOf` pops\n (value instanceof subtype || // quickest check\n // Do an initial constructor check (anywhere is fine so that children of\n // `subtype` still work), then\n (hasConstructor(value, subtype) &&\n // ensure it has read/write methods, then\n typeof value.constructor.read === 'function' &&\n typeof value.constructor.write === 'function' &&\n // ensure XdrType is in the prototype chain\n hasConstructor(value, 'XdrType')))\n );\n}\n\n/** Tries to find `subtype` in any of the constructors or meta of `instance`. */\nexport function hasConstructor(instance, subtype) {\n do {\n const ctor = instance.constructor;\n if (ctor.name === subtype) {\n return true;\n }\n } while ((instance = Object.getPrototypeOf(instance)));\n return false;\n}\n\n/**\n * @typedef {'raw'|'hex'|'base64'} XdrEncodingFormat\n */\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/browser.js\");\n",""],"names":["XdrCompositeType","XdrWriterError","Array","constructor","childType","length","_childType","_length","read","reader","result","global","i","write","value","writer","isArray","child","isValid","encodeBigIntFromBits","parts","size","unsigned","total","sliceSize","RangeError","BigInt","valueOf","e","TypeError","asUintN","asIntN","min","max","calculateBigIntBoundaries","formatIntName","sliceBigInt","iSize","shift","precision","boundary","Int","XdrPrimitiveType","XdrReaderError","Bool","intVal","exports","require","module","XDRTypes","Reference","XdrDefinitionError","SimpleReference","name","resolve","context","defn","definitions","ArrayReference","childReference","variable","resolvedChild","VarArray","OptionReference","Option","SizedReference","sizedType","Definition","cfg","config","results","createTypedef","typeName","createConst","TypeBuilder","destination","_destination","_definitions","enum","members","Enum","create","define","struct","Struct","union","Union","typedef","const","void","Void","bool","int","hyper","Hyper","uint","UnsignedInt","uhyper","UnsignedHyper","float","Float","double","Double","quadruple","Quadruple","string","String","opaque","Opaque","varOpaque","VarOpaque","array","varArray","maxLength","option","definition","undefined","lookup","Object","values","fn","types","builder","readDoubleBE","writeDoubleBE","isSerializableIsh","res","_byValue","enumName","JSON","stringify","_members","fromName","fromValue","ChildEnum","key","entries","inst","message","XdrNotImplementedDefinitionError","readFloatBE","writeFloatBE","LargeInt","args","low","Number","_value","high","fromBits","defineIntBoundaries","XdrReader","XdrWriter","MAX_VALUE","MIN_VALUE","readInt32BE","writeInt32BE","slice","toString","toJSON","toBigInt","prototype","readBigUInt64BE","from","reverse","writeBigUInt64BE","writeBigInt64BE","part","fromString","Buffer","isBuffer","isPresent","source","ArrayBuffer","isView","_buffer","_index","eof","advance","padding","rewind","subarray","readUInt32BE","readBigInt64BE","ensureInputConsumed","BUFFER_CHUNK","buffer","allocUnsafe","alloc","resize","minRequiredSize","newLength","Math","ceil","newBuffer","copy","finalize","toArray","offset","fill","writeUInt32BE","bufferChunkSize","_maxLength","readString","byteLength","attributes","_attributes","fieldName","type","_fields","structName","attribute","fields","ChildStruct","mappedFields","fieldDescriptor","field","createAccessorMethod","readOrWriteAttribute","aSwitch","set","_switchOn","_switch","arm","armForSwitch","_arm","_armType","_arms","get","armName","switch","armType","member","_switches","_defaultArm","armTypeForArm","unionName","ChildUnion","switchOn","Map","defaultArm","switches","ctr","arms","armsName","XdrType","toXDR","format","encodeResult","fromXDR","input","decodeInput","validateXDR","InvalidXdrEncodingFormatError","subtype","hasConstructor","instance","ctor","getPrototypeOf"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/@stellar/js-xdr/package.json b/node_modules/@stellar/js-xdr/package.json new file mode 100644 index 00000000..d74eb9d0 --- /dev/null +++ b/node_modules/@stellar/js-xdr/package.json @@ -0,0 +1,81 @@ +{ + "name": "@stellar/js-xdr", + "version": "3.1.2", + "description": "Read/write XDR encoded data structures (RFC 4506)", + "main": "lib/xdr.js", + "browser": "dist/xdr.js", + "module": "src/index.js", + "scripts": { + "build": "yarn run build:browser && yarn run build:node", + "build:browser": "webpack --mode=production --config ./webpack.config.js", + "build:node": "webpack --mode=development --config ./webpack.config.js", + "test:node": "yarn run build:node && mocha", + "test:browser": "yarn run build:browser && karma start", + "test": "yarn run test:node && yarn run test:browser", + "test-generate": "bundle exec xdrgen -o generated -n test -l javascript examples/test.x", + "fmt": "prettier --write '**/*.js'", + "prepare": "yarn build", + "clean": "rm -rf lib/ dist/" + }, + "repository": { + "type": "git", + "url": "https://github.com/stellar/js-xdr.git" + }, + "keywords": [], + "author": "Stellar Development Foundation ", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/stellar/js-xdr/issues" + }, + "homepage": "https://github.com/stellar/js-xdr", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "**/*.{js,json}": [ + "yarn fmt", + "git add" + ] + }, + "mocha": { + "require": [ + "@babel/register", + "./test/setup.js" + ], + "recursive": true, + "ui": "bdd" + }, + "devDependencies": { + "@babel/core": "^7.24.9", + "@babel/eslint-parser": "^7.24.8", + "@babel/preset-env": "^7.24.8", + "@babel/register": "^7.24.6", + "babel-loader": "^9.1.3", + "buffer": "^6.0.3", + "chai": "^4.3.10", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prefer-import": "^0.0.1", + "eslint-plugin-prettier": "^4.2.1", + "husky": "^8.0.3", + "karma": "^6.4.3", + "karma-chrome-launcher": "^3.2.0", + "karma-firefox-launcher": "^2.1.3", + "karma-mocha": "^2.0.1", + "karma-sinon-chai": "^2.0.2", + "karma-webpack": "^5.0.1", + "lint-staged": "13.2.2", + "mocha": "^10.6.0", + "prettier": "^2.8.7", + "sinon": "^15.2.0", + "sinon-chai": "^3.7.0", + "terser-webpack-plugin": "^5.3.10", + "webpack": "^5.93.0", + "webpack-cli": "^5.0.2" + } +} diff --git a/node_modules/@stellar/js-xdr/prettier.config.js b/node_modules/@stellar/js-xdr/prettier.config.js new file mode 100644 index 00000000..a87a3ac3 --- /dev/null +++ b/node_modules/@stellar/js-xdr/prettier.config.js @@ -0,0 +1,12 @@ +module.exports = { + arrowParens: 'always', + bracketSpacing: true, + jsxBracketSameLine: false, + printWidth: 80, + proseWrap: 'always', + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'none', + useTabs: false +}; diff --git a/node_modules/@stellar/js-xdr/src/.eslintrc.js b/node_modules/@stellar/js-xdr/src/.eslintrc.js new file mode 100644 index 00000000..6a5046df --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/.eslintrc.js @@ -0,0 +1,117 @@ +module.exports = { + env: { + es6: true, + es2017: true, + es2020: true, + es2022: true + }, + parserOptions: { ecmaVersion: 13 }, + extends: ['airbnb-base', 'prettier'], + plugins: ['prettier', 'prefer-import'], + rules: { + // OFF + 'import/prefer-default-export': 0, + 'node/no-unsupported-features/es-syntax': 0, + 'node/no-unsupported-features/es-builtins': 0, + camelcase: 0, + 'class-methods-use-this': 0, + 'linebreak-style': 0, + 'new-cap': 0, + 'no-param-reassign': 0, + 'no-underscore-dangle': 0, + 'no-use-before-define': 0, + 'prefer-destructuring': 0, + 'lines-between-class-members': 0, + 'no-plusplus': 0, // allow ++ for iterators + 'no-bitwise': 0, // allow high-performant bitwise operations + + // WARN + 'prefer-import/prefer-import-over-require': [1], + 'no-console': ['warn', { allow: ['assert'] }], + 'no-debugger': 1, + 'no-unused-vars': 1, + 'arrow-body-style': 1, + 'valid-jsdoc': [ + 1, + { + requireReturnDescription: false + } + ], + 'prefer-const': 1, + 'object-shorthand': 1, + 'require-await': 1, + 'max-classes-per-file': ['warn', 3], // do not block imports from other classes + + // ERROR + 'no-unused-expressions': [2, { allowTaggedTemplates: true }], + + // we're redefining this without the Math.pow restriction + // (since we don't want to manually add support for it) + // copied from https://github.com/airbnb/javascript/blob/070e6200bb6c70fa31470ed7a6294f2497468b44/packages/eslint-config-airbnb-base/rules/best-practices.js#L200 + 'no-restricted-properties': [ + 'error', + { + object: 'arguments', + property: 'callee', + message: 'arguments.callee is deprecated' + }, + { + object: 'global', + property: 'isFinite', + message: 'Please use Number.isFinite instead' + }, + { + object: 'self', + property: 'isFinite', + message: 'Please use Number.isFinite instead' + }, + { + object: 'window', + property: 'isFinite', + message: 'Please use Number.isFinite instead' + }, + { + object: 'global', + property: 'isNaN', + message: 'Please use Number.isNaN instead' + }, + { + object: 'self', + property: 'isNaN', + message: 'Please use Number.isNaN instead' + }, + { + object: 'window', + property: 'isNaN', + message: 'Please use Number.isNaN instead' + }, + { + property: '__defineGetter__', + message: 'Please use Object.defineProperty instead.' + }, + { + property: '__defineSetter__', + message: 'Please use Object.defineProperty instead.' + } + ], + 'no-restricted-syntax': [ + // override basic rule to allow ForOfStatement + 'error', + { + selector: 'ForInStatement', + message: + 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.' + }, + { + selector: 'LabeledStatement', + message: + 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.' + }, + { + selector: 'WithStatement', + message: + '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.' + } + ] + } +}; diff --git a/node_modules/@stellar/js-xdr/src/array.js b/node_modules/@stellar/js-xdr/src/array.js new file mode 100644 index 00000000..189865ff --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/array.js @@ -0,0 +1,54 @@ +import { XdrCompositeType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Array extends XdrCompositeType { + constructor(childType, length) { + super(); + this._childType = childType; + this._length = length; + } + + /** + * @inheritDoc + */ + read(reader) { + // allocate array of specified length + const result = new global.Array(this._length); + // read values + for (let i = 0; i < this._length; i++) { + result[i] = this._childType.read(reader); + } + return result; + } + + /** + * @inheritDoc + */ + write(value, writer) { + if (!global.Array.isArray(value)) + throw new XdrWriterError(`value is not array`); + + if (value.length !== this._length) + throw new XdrWriterError( + `got array of size ${value.length}, expected ${this._length}` + ); + + for (const child of value) { + this._childType.write(child, writer); + } + } + + /** + * @inheritDoc + */ + isValid(value) { + if (!(value instanceof global.Array) || value.length !== this._length) { + return false; + } + + for (const child of value) { + if (!this._childType.isValid(child)) return false; + } + return true; + } +} diff --git a/node_modules/@stellar/js-xdr/src/bigint-encoder.js b/node_modules/@stellar/js-xdr/src/bigint-encoder.js new file mode 100644 index 00000000..861096df --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/bigint-encoder.js @@ -0,0 +1,141 @@ +/** + * Encode a native `bigint` value from a list of arbitrary integer-like values. + * + * @param {Array} parts - Slices to encode in big-endian + * format (i.e. earlier elements are higher bits) + * @param {64|128|256} size - Number of bits in the target integer type + * @param {boolean} unsigned - Whether it's an unsigned integer + * + * @returns {bigint} + */ +export function encodeBigIntFromBits(parts, size, unsigned) { + if (!(parts instanceof Array)) { + // allow a single parameter instead of an array + parts = [parts]; + } else if (parts.length && parts[0] instanceof Array) { + // unpack nested array param + parts = parts[0]; + } + + const total = parts.length; + const sliceSize = size / total; + switch (sliceSize) { + case 32: + case 64: + case 128: + case 256: + break; + + default: + throw new RangeError( + `expected slices to fit in 32/64/128/256 bits, got ${parts}` + ); + } + + // normalize all inputs to bigint + try { + for (let i = 0; i < parts.length; i++) { + if (typeof parts[i] !== 'bigint') { + parts[i] = BigInt(parts[i].valueOf()); + } + } + } catch (e) { + throw new TypeError(`expected bigint-like values, got: ${parts} (${e})`); + } + + // check for sign mismatches for single inputs (this is a special case to + // handle one parameter passed to e.g. UnsignedHyper et al.) + // see https://github.com/stellar/js-xdr/pull/100#discussion_r1228770845 + if (unsigned && parts.length === 1 && parts[0] < 0n) { + throw new RangeError(`expected a positive value, got: ${parts}`); + } + + // encode in big-endian fashion, shifting each slice by the slice size + let result = BigInt.asUintN(sliceSize, parts[0]); // safe: len >= 1 + for (let i = 1; i < parts.length; i++) { + result |= BigInt.asUintN(sliceSize, parts[i]) << BigInt(i * sliceSize); + } + + // interpret value as signed if necessary and clamp it + if (!unsigned) { + result = BigInt.asIntN(size, result); + } + + // check boundaries + const [min, max] = calculateBigIntBoundaries(size, unsigned); + if (result >= min && result <= max) { + return result; + } + + // failed to encode + throw new TypeError( + `bigint values [${parts}] for ${formatIntName( + size, + unsigned + )} out of range [${min}, ${max}]: ${result}` + ); +} + +/** + * Transforms a single bigint value that's supposed to represent a `size`-bit + * integer into a list of `sliceSize`d chunks. + * + * @param {bigint} value - Single bigint value to decompose + * @param {64|128|256} iSize - Number of bits represented by `value` + * @param {32|64|128} sliceSize - Number of chunks to decompose into + * @return {bigint[]} + */ +export function sliceBigInt(value, iSize, sliceSize) { + if (typeof value !== 'bigint') { + throw new TypeError(`Expected bigint 'value', got ${typeof value}`); + } + + const total = iSize / sliceSize; + if (total === 1) { + return [value]; + } + + if ( + sliceSize < 32 || + sliceSize > 128 || + (total !== 2 && total !== 4 && total !== 8) + ) { + throw new TypeError( + `invalid bigint (${value}) and slice size (${iSize} -> ${sliceSize}) combination` + ); + } + + const shift = BigInt(sliceSize); + + // iterate shift and mask application + const result = new Array(total); + for (let i = 0; i < total; i++) { + // we force a signed interpretation to preserve sign in each slice value, + // but downstream can convert to unsigned if it's appropriate + result[i] = BigInt.asIntN(sliceSize, value); // clamps to size + + // move on to the next chunk + value >>= shift; + } + + return result; +} + +export function formatIntName(precision, unsigned) { + return `${unsigned ? 'u' : 'i'}${precision}`; +} + +/** + * Get min|max boundaries for an integer with a specified bits size + * @param {64|128|256} size - Number of bits in the source integer type + * @param {Boolean} unsigned - Whether it's an unsigned integer + * @return {BigInt[]} + */ +export function calculateBigIntBoundaries(size, unsigned) { + if (unsigned) { + return [0n, (1n << BigInt(size)) - 1n]; + } + + const boundary = 1n << BigInt(size - 1); + return [0n - boundary, boundary - 1n]; +} diff --git a/node_modules/@stellar/js-xdr/src/bool.js b/node_modules/@stellar/js-xdr/src/bool.js new file mode 100644 index 00000000..7909cb9a --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/bool.js @@ -0,0 +1,36 @@ +import { Int } from './int'; +import { XdrPrimitiveType } from './xdr-type'; +import { XdrReaderError } from './errors'; + +export class Bool extends XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + const value = Int.read(reader); + + switch (value) { + case 0: + return false; + case 1: + return true; + default: + throw new XdrReaderError(`got ${value} when trying to read a bool`); + } + } + + /** + * @inheritDoc + */ + static write(value, writer) { + const intVal = value ? 1 : 0; + Int.write(intVal, writer); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'boolean'; + } +} diff --git a/node_modules/@stellar/js-xdr/src/browser.js b/node_modules/@stellar/js-xdr/src/browser.js new file mode 100644 index 00000000..09ec44dc --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/browser.js @@ -0,0 +1,3 @@ +// eslint-disable-next-line prefer-import/prefer-import-over-require +const exports = require('./index'); +module.exports = exports; diff --git a/node_modules/@stellar/js-xdr/src/config.js b/node_modules/@stellar/js-xdr/src/config.js new file mode 100644 index 00000000..151a06d4 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/config.js @@ -0,0 +1,239 @@ +// eslint-disable-next-line max-classes-per-file +import * as XDRTypes from './types'; +import { Reference } from './reference'; +import { XdrDefinitionError } from './errors'; + +export * from './reference'; + +class SimpleReference extends Reference { + constructor(name) { + super(); + this.name = name; + } + + resolve(context) { + const defn = context.definitions[this.name]; + return defn.resolve(context); + } +} + +class ArrayReference extends Reference { + constructor(childReference, length, variable = false) { + super(); + this.childReference = childReference; + this.length = length; + this.variable = variable; + } + + resolve(context) { + let resolvedChild = this.childReference; + let length = this.length; + + if (resolvedChild instanceof Reference) { + resolvedChild = resolvedChild.resolve(context); + } + + if (length instanceof Reference) { + length = length.resolve(context); + } + + if (this.variable) { + return new XDRTypes.VarArray(resolvedChild, length); + } + return new XDRTypes.Array(resolvedChild, length); + } +} + +class OptionReference extends Reference { + constructor(childReference) { + super(); + this.childReference = childReference; + this.name = childReference.name; + } + + resolve(context) { + let resolvedChild = this.childReference; + + if (resolvedChild instanceof Reference) { + resolvedChild = resolvedChild.resolve(context); + } + + return new XDRTypes.Option(resolvedChild); + } +} + +class SizedReference extends Reference { + constructor(sizedType, length) { + super(); + this.sizedType = sizedType; + this.length = length; + } + + resolve(context) { + let length = this.length; + + if (length instanceof Reference) { + length = length.resolve(context); + } + + return new this.sizedType(length); + } +} + +class Definition { + constructor(constructor, name, cfg) { + this.constructor = constructor; + this.name = name; + this.config = cfg; + } + + // resolve calls the constructor of this definition with the provided context + // and this definitions config values. The definitions constructor should + // populate the final type on `context.results`, and may refer to other + // definitions through `context.definitions` + resolve(context) { + if (this.name in context.results) { + return context.results[this.name]; + } + + return this.constructor(context, this.name, this.config); + } +} + +// let the reference resolution system do its thing +// the "constructor" for a typedef just returns the resolved value +function createTypedef(context, typeName, value) { + if (value instanceof Reference) { + value = value.resolve(context); + } + context.results[typeName] = value; + return value; +} + +function createConst(context, name, value) { + context.results[name] = value; + return value; +} + +class TypeBuilder { + constructor(destination) { + this._destination = destination; + this._definitions = {}; + } + + enum(name, members) { + const result = new Definition(XDRTypes.Enum.create, name, members); + this.define(name, result); + } + + struct(name, members) { + const result = new Definition(XDRTypes.Struct.create, name, members); + this.define(name, result); + } + + union(name, cfg) { + const result = new Definition(XDRTypes.Union.create, name, cfg); + this.define(name, result); + } + + typedef(name, cfg) { + const result = new Definition(createTypedef, name, cfg); + this.define(name, result); + } + + const(name, cfg) { + const result = new Definition(createConst, name, cfg); + this.define(name, result); + } + + void() { + return XDRTypes.Void; + } + + bool() { + return XDRTypes.Bool; + } + + int() { + return XDRTypes.Int; + } + + hyper() { + return XDRTypes.Hyper; + } + + uint() { + return XDRTypes.UnsignedInt; + } + + uhyper() { + return XDRTypes.UnsignedHyper; + } + + float() { + return XDRTypes.Float; + } + + double() { + return XDRTypes.Double; + } + + quadruple() { + return XDRTypes.Quadruple; + } + + string(length) { + return new SizedReference(XDRTypes.String, length); + } + + opaque(length) { + return new SizedReference(XDRTypes.Opaque, length); + } + + varOpaque(length) { + return new SizedReference(XDRTypes.VarOpaque, length); + } + + array(childType, length) { + return new ArrayReference(childType, length); + } + + varArray(childType, maxLength) { + return new ArrayReference(childType, maxLength, true); + } + + option(childType) { + return new OptionReference(childType); + } + + define(name, definition) { + if (this._destination[name] === undefined) { + this._definitions[name] = definition; + } else { + throw new XdrDefinitionError(`${name} is already defined`); + } + } + + lookup(name) { + return new SimpleReference(name); + } + + resolve() { + for (const defn of Object.values(this._definitions)) { + defn.resolve({ + definitions: this._definitions, + results: this._destination + }); + } + } +} + +export function config(fn, types = {}) { + if (fn) { + const builder = new TypeBuilder(types); + fn(builder); + builder.resolve(); + } + + return types; +} diff --git a/node_modules/@stellar/js-xdr/src/double.js b/node_modules/@stellar/js-xdr/src/double.js new file mode 100644 index 00000000..963617f1 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/double.js @@ -0,0 +1,27 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Double extends XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readDoubleBE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number') throw new XdrWriterError('not a number'); + + writer.writeDoubleBE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'number'; + } +} diff --git a/node_modules/@stellar/js-xdr/src/enum.js b/node_modules/@stellar/js-xdr/src/enum.js new file mode 100644 index 00000000..ec949f18 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/enum.js @@ -0,0 +1,94 @@ +import { Int } from './int'; +import { XdrPrimitiveType, isSerializableIsh } from './xdr-type'; +import { XdrReaderError, XdrWriterError } from './errors'; + +export class Enum extends XdrPrimitiveType { + constructor(name, value) { + super(); + this.name = name; + this.value = value; + } + + /** + * @inheritDoc + */ + static read(reader) { + const intVal = Int.read(reader); + const res = this._byValue[intVal]; + if (res === undefined) + throw new XdrReaderError( + `unknown ${this.enumName} member for value ${intVal}` + ); + return res; + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (!this.isValid(value)) { + throw new XdrWriterError( + `${value} has enum name ${value?.enumName}, not ${ + this.enumName + }: ${JSON.stringify(value)}` + ); + } + + Int.write(value.value, writer); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return ( + value?.constructor?.enumName === this.enumName || + isSerializableIsh(value, this) + ); + } + + static members() { + return this._members; + } + + static values() { + return Object.values(this._members); + } + + static fromName(name) { + const result = this._members[name]; + + if (!result) + throw new TypeError(`${name} is not a member of ${this.enumName}`); + + return result; + } + + static fromValue(value) { + const result = this._byValue[value]; + if (result === undefined) + throw new TypeError( + `${value} is not a value of any member of ${this.enumName}` + ); + return result; + } + + static create(context, name, members) { + const ChildEnum = class extends Enum {}; + + ChildEnum.enumName = name; + context.results[name] = ChildEnum; + + ChildEnum._members = {}; + ChildEnum._byValue = {}; + + for (const [key, value] of Object.entries(members)) { + const inst = new ChildEnum(key, value); + ChildEnum._members[key] = inst; + ChildEnum._byValue[value] = inst; + ChildEnum[key] = () => inst; + } + + return ChildEnum; + } +} diff --git a/node_modules/@stellar/js-xdr/src/errors.js b/node_modules/@stellar/js-xdr/src/errors.js new file mode 100644 index 00000000..9786e645 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/errors.js @@ -0,0 +1,25 @@ +export class XdrWriterError extends TypeError { + constructor(message) { + super(`XDR Write Error: ${message}`); + } +} + +export class XdrReaderError extends TypeError { + constructor(message) { + super(`XDR Read Error: ${message}`); + } +} + +export class XdrDefinitionError extends TypeError { + constructor(message) { + super(`XDR Type Definition Error: ${message}`); + } +} + +export class XdrNotImplementedDefinitionError extends XdrDefinitionError { + constructor() { + super( + `method not implemented, it should be overloaded in the descendant class.` + ); + } +} diff --git a/node_modules/@stellar/js-xdr/src/float.js b/node_modules/@stellar/js-xdr/src/float.js new file mode 100644 index 00000000..706db16c --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/float.js @@ -0,0 +1,27 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Float extends XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readFloatBE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number') throw new XdrWriterError('not a number'); + + writer.writeFloatBE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'number'; + } +} diff --git a/node_modules/@stellar/js-xdr/src/hyper.js b/node_modules/@stellar/js-xdr/src/hyper.js new file mode 100644 index 00000000..dbe7da20 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/hyper.js @@ -0,0 +1,38 @@ +import { LargeInt } from './large-int'; + +export class Hyper extends LargeInt { + /** + * @param {Array} parts - Slices to encode + */ + constructor(...args) { + super(args); + } + + get low() { + return Number(this._value & 0xffffffffn) << 0; + } + + get high() { + return Number(this._value >> 32n) >> 0; + } + + get size() { + return 64; + } + + get unsigned() { + return false; + } + + /** + * Create Hyper instance from two [high][low] i32 values + * @param {Number} low - Low part of i64 number + * @param {Number} high - High part of i64 number + * @return {LargeInt} + */ + static fromBits(low, high) { + return new this(low, high); + } +} + +Hyper.defineIntBoundaries(); diff --git a/node_modules/@stellar/js-xdr/src/index.js b/node_modules/@stellar/js-xdr/src/index.js new file mode 100644 index 00000000..7bfaaa8e --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/index.js @@ -0,0 +1,5 @@ +export * from './types'; +export * from './config'; + +export { XdrReader } from './serialization/xdr-reader'; +export { XdrWriter } from './serialization/xdr-writer'; diff --git a/node_modules/@stellar/js-xdr/src/int.js b/node_modules/@stellar/js-xdr/src/int.js new file mode 100644 index 00000000..3990f14f --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/int.js @@ -0,0 +1,39 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +const MAX_VALUE = 2147483647; +const MIN_VALUE = -2147483648; + +export class Int extends XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readInt32BE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (typeof value !== 'number') throw new XdrWriterError('not a number'); + + if ((value | 0) !== value) throw new XdrWriterError('invalid i32 value'); + + writer.writeInt32BE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + if (typeof value !== 'number' || (value | 0) !== value) { + return false; + } + + return value >= MIN_VALUE && value <= MAX_VALUE; + } +} + +Int.MAX_VALUE = MAX_VALUE; +Int.MIN_VALUE = -MIN_VALUE; diff --git a/node_modules/@stellar/js-xdr/src/large-int.js b/node_modules/@stellar/js-xdr/src/large-int.js new file mode 100644 index 00000000..78f08354 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/large-int.js @@ -0,0 +1,133 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { + calculateBigIntBoundaries, + encodeBigIntFromBits, + sliceBigInt +} from './bigint-encoder'; +import { XdrNotImplementedDefinitionError, XdrWriterError } from './errors'; + +export class LargeInt extends XdrPrimitiveType { + /** + * @param {Array} parts - Slices to encode + */ + constructor(args) { + super(); + this._value = encodeBigIntFromBits(args, this.size, this.unsigned); + } + + /** + * Signed/unsigned representation + * @type {Boolean} + * @abstract + */ + get unsigned() { + throw new XdrNotImplementedDefinitionError(); + } + + /** + * Size of the integer in bits + * @type {Number} + * @abstract + */ + get size() { + throw new XdrNotImplementedDefinitionError(); + } + + /** + * Slice integer to parts with smaller bit size + * @param {32|64|128} sliceSize - Size of each part in bits + * @return {BigInt[]} + */ + slice(sliceSize) { + return sliceBigInt(this._value, this.size, sliceSize); + } + + toString() { + return this._value.toString(); + } + + toJSON() { + return { _value: this._value.toString() }; + } + + toBigInt() { + return BigInt(this._value); + } + + /** + * @inheritDoc + */ + static read(reader) { + const { size } = this.prototype; + if (size === 64) return new this(reader.readBigUInt64BE()); + return new this( + ...Array.from({ length: size / 64 }, () => + reader.readBigUInt64BE() + ).reverse() + ); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (value instanceof this) { + value = value._value; + } else if ( + typeof value !== 'bigint' || + value > this.MAX_VALUE || + value < this.MIN_VALUE + ) + throw new XdrWriterError(`${value} is not a ${this.name}`); + + const { unsigned, size } = this.prototype; + if (size === 64) { + if (unsigned) { + writer.writeBigUInt64BE(value); + } else { + writer.writeBigInt64BE(value); + } + } else { + for (const part of sliceBigInt(value, size, 64).reverse()) { + if (unsigned) { + writer.writeBigUInt64BE(part); + } else { + writer.writeBigInt64BE(part); + } + } + } + } + + /** + * @inheritDoc + */ + static isValid(value) { + return typeof value === 'bigint' || value instanceof this; + } + + /** + * Create instance from string + * @param {String} string - Numeric representation + * @return {LargeInt} + */ + static fromString(string) { + return new this(string); + } + + static MAX_VALUE = 0n; + + static MIN_VALUE = 0n; + + /** + * @internal + * @return {void} + */ + static defineIntBoundaries() { + const [min, max] = calculateBigIntBoundaries( + this.prototype.size, + this.prototype.unsigned + ); + this.MIN_VALUE = min; + this.MAX_VALUE = max; + } +} diff --git a/node_modules/@stellar/js-xdr/src/opaque.js b/node_modules/@stellar/js-xdr/src/opaque.js new file mode 100644 index 00000000..ae5f744f --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/opaque.js @@ -0,0 +1,35 @@ +import { XdrCompositeType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Opaque extends XdrCompositeType { + constructor(length) { + super(); + this._length = length; + } + + /** + * @inheritDoc + */ + read(reader) { + return reader.read(this._length); + } + + /** + * @inheritDoc + */ + write(value, writer) { + const { length } = value; + if (length !== this._length) + throw new XdrWriterError( + `got ${value.length} bytes, expected ${this._length}` + ); + writer.write(value, length); + } + + /** + * @inheritDoc + */ + isValid(value) { + return Buffer.isBuffer(value) && value.length === this._length; + } +} diff --git a/node_modules/@stellar/js-xdr/src/option.js b/node_modules/@stellar/js-xdr/src/option.js new file mode 100644 index 00000000..0193ead0 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/option.js @@ -0,0 +1,43 @@ +import { Bool } from './bool'; +import { XdrPrimitiveType } from './xdr-type'; + +export class Option extends XdrPrimitiveType { + constructor(childType) { + super(); + this._childType = childType; + } + + /** + * @inheritDoc + */ + read(reader) { + if (Bool.read(reader)) { + return this._childType.read(reader); + } + + return undefined; + } + + /** + * @inheritDoc + */ + write(value, writer) { + const isPresent = value !== null && value !== undefined; + + Bool.write(isPresent, writer); + + if (isPresent) { + this._childType.write(value, writer); + } + } + + /** + * @inheritDoc + */ + isValid(value) { + if (value === null || value === undefined) { + return true; + } + return this._childType.isValid(value); + } +} diff --git a/node_modules/@stellar/js-xdr/src/quadruple.js b/node_modules/@stellar/js-xdr/src/quadruple.js new file mode 100644 index 00000000..ccf2f551 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/quadruple.js @@ -0,0 +1,16 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrDefinitionError } from './errors'; + +export class Quadruple extends XdrPrimitiveType { + static read() { + throw new XdrDefinitionError('quadruple not supported'); + } + + static write() { + throw new XdrDefinitionError('quadruple not supported'); + } + + static isValid() { + return false; + } +} diff --git a/node_modules/@stellar/js-xdr/src/reference.js b/node_modules/@stellar/js-xdr/src/reference.js new file mode 100644 index 00000000..e210b43a --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/reference.js @@ -0,0 +1,11 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrDefinitionError } from './errors'; + +export class Reference extends XdrPrimitiveType { + /* jshint unused: false */ + resolve() { + throw new XdrDefinitionError( + '"resolve" method should be implemented in the descendant class' + ); + } +} diff --git a/node_modules/@stellar/js-xdr/src/serialization/xdr-reader.js b/node_modules/@stellar/js-xdr/src/serialization/xdr-reader.js new file mode 100644 index 00000000..194befe4 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/serialization/xdr-reader.js @@ -0,0 +1,160 @@ +/** + * @internal + */ +import { XdrReaderError } from '../errors'; + +export class XdrReader { + /** + * @constructor + * @param {Buffer} source - Buffer containing serialized data + */ + constructor(source) { + if (!Buffer.isBuffer(source)) { + if ( + source instanceof Array || + Array.isArray(source) || + ArrayBuffer.isView(source) + ) { + source = Buffer.from(source); + } else { + throw new XdrReaderError(`source invalid: ${source}`); + } + } + + this._buffer = source; + this._length = source.length; + this._index = 0; + } + + /** + * @type {Buffer} + * @private + * @readonly + */ + _buffer; + /** + * @type {Number} + * @private + * @readonly + */ + _length; + /** + * @type {Number} + * @private + * @readonly + */ + _index; + + /** + * Check if the reader reached the end of the input buffer + * @return {Boolean} + */ + get eof() { + return this._index === this._length; + } + + /** + * Advance reader position, check padding and overflow + * @param {Number} size - Bytes to read + * @return {Number} Position to read from + * @private + */ + advance(size) { + const from = this._index; + // advance cursor position + this._index += size; + // check buffer boundaries + if (this._length < this._index) + throw new XdrReaderError( + 'attempt to read outside the boundary of the buffer' + ); + // check that padding is correct for Opaque and String + const padding = 4 - (size % 4 || 4); + if (padding > 0) { + for (let i = 0; i < padding; i++) + if (this._buffer[this._index + i] !== 0) + // all bytes in the padding should be zeros + throw new XdrReaderError('invalid padding'); + this._index += padding; + } + return from; + } + + /** + * Reset reader position + * @return {void} + */ + rewind() { + this._index = 0; + } + + /** + * Read byte array from the buffer + * @param {Number} size - Bytes to read + * @return {Buffer} - Sliced portion of the underlying buffer + */ + read(size) { + const from = this.advance(size); + return this._buffer.subarray(from, from + size); + } + + /** + * Read i32 from buffer + * @return {Number} + */ + readInt32BE() { + return this._buffer.readInt32BE(this.advance(4)); + } + + /** + * Read u32 from buffer + * @return {Number} + */ + readUInt32BE() { + return this._buffer.readUInt32BE(this.advance(4)); + } + + /** + * Read i64 from buffer + * @return {BigInt} + */ + readBigInt64BE() { + return this._buffer.readBigInt64BE(this.advance(8)); + } + + /** + * Read u64 from buffer + * @return {BigInt} + */ + readBigUInt64BE() { + return this._buffer.readBigUInt64BE(this.advance(8)); + } + + /** + * Read float from buffer + * @return {Number} + */ + readFloatBE() { + return this._buffer.readFloatBE(this.advance(4)); + } + + /** + * Read double from buffer + * @return {Number} + */ + readDoubleBE() { + return this._buffer.readDoubleBE(this.advance(8)); + } + + /** + * Ensure that input buffer has been consumed in full, otherwise it's a type mismatch + * @return {void} + * @throws {XdrReaderError} + */ + ensureInputConsumed() { + if (this._index !== this._length) + throw new XdrReaderError( + `invalid XDR contract typecast - source buffer not entirely consumed` + ); + } +} diff --git a/node_modules/@stellar/js-xdr/src/serialization/xdr-writer.js b/node_modules/@stellar/js-xdr/src/serialization/xdr-writer.js new file mode 100644 index 00000000..aad22450 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/serialization/xdr-writer.js @@ -0,0 +1,179 @@ +const BUFFER_CHUNK = 8192; // 8 KB chunk size increment + +/** + * @internal + */ +export class XdrWriter { + /** + * @param {Buffer|Number} [buffer] - Optional destination buffer + */ + constructor(buffer) { + if (typeof buffer === 'number') { + buffer = Buffer.allocUnsafe(buffer); + } else if (!(buffer instanceof Buffer)) { + buffer = Buffer.allocUnsafe(BUFFER_CHUNK); + } + this._buffer = buffer; + this._length = buffer.length; + } + + /** + * @type {Buffer} + * @private + * @readonly + */ + _buffer; + /** + * @type {Number} + * @private + * @readonly + */ + _length; + /** + * @type {Number} + * @private + * @readonly + */ + _index = 0; + + /** + * Advance writer position, write padding if needed, auto-resize the buffer + * @param {Number} size - Bytes to write + * @return {Number} Position to read from + * @private + */ + alloc(size) { + const from = this._index; + // advance cursor position + this._index += size; + // ensure sufficient buffer size + if (this._length < this._index) { + this.resize(this._index); + } + return from; + } + + /** + * Increase size of the underlying buffer + * @param {Number} minRequiredSize - Minimum required buffer size + * @return {void} + * @private + */ + resize(minRequiredSize) { + // calculate new length, align new buffer length by chunk size + const newLength = Math.ceil(minRequiredSize / BUFFER_CHUNK) * BUFFER_CHUNK; + // create new buffer and copy previous data + const newBuffer = Buffer.allocUnsafe(newLength); + this._buffer.copy(newBuffer, 0, 0, this._length); + // update references + this._buffer = newBuffer; + this._length = newLength; + } + + /** + * Return XDR-serialized value + * @return {Buffer} + */ + finalize() { + // clip underlying buffer to the actually written value + return this._buffer.subarray(0, this._index); + } + + /** + * Return XDR-serialized value as byte array + * @return {Number[]} + */ + toArray() { + return [...this.finalize()]; + } + + /** + * Write byte array from the buffer + * @param {Buffer|String} value - Bytes/string to write + * @param {Number} size - Size in bytes + * @return {XdrReader} - XdrReader wrapper on top of a subarray + */ + write(value, size) { + if (typeof value === 'string') { + // serialize string directly to the output buffer + const offset = this.alloc(size); + this._buffer.write(value, offset, 'utf8'); + } else { + // copy data to the output buffer + if (!(value instanceof Buffer)) { + value = Buffer.from(value); + } + const offset = this.alloc(size); + value.copy(this._buffer, offset, 0, size); + } + + // add padding for 4-byte XDR alignment + const padding = 4 - (size % 4 || 4); + if (padding > 0) { + const offset = this.alloc(padding); + this._buffer.fill(0, offset, this._index); + } + } + + /** + * Write i32 from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeInt32BE(value) { + const offset = this.alloc(4); + this._buffer.writeInt32BE(value, offset); + } + + /** + * Write u32 from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeUInt32BE(value) { + const offset = this.alloc(4); + this._buffer.writeUInt32BE(value, offset); + } + + /** + * Write i64 from buffer + * @param {BigInt} value - Value to serialize + * @return {void} + */ + writeBigInt64BE(value) { + const offset = this.alloc(8); + this._buffer.writeBigInt64BE(value, offset); + } + + /** + * Write u64 from buffer + * @param {BigInt} value - Value to serialize + * @return {void} + */ + writeBigUInt64BE(value) { + const offset = this.alloc(8); + this._buffer.writeBigUInt64BE(value, offset); + } + + /** + * Write float from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeFloatBE(value) { + const offset = this.alloc(4); + this._buffer.writeFloatBE(value, offset); + } + + /** + * Write double from buffer + * @param {Number} value - Value to serialize + * @return {void} + */ + writeDoubleBE(value) { + const offset = this.alloc(8); + this._buffer.writeDoubleBE(value, offset); + } + + static bufferChunkSize = BUFFER_CHUNK; +} diff --git a/node_modules/@stellar/js-xdr/src/string.js b/node_modules/@stellar/js-xdr/src/string.js new file mode 100644 index 00000000..fec9d4a2 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/string.js @@ -0,0 +1,58 @@ +import { UnsignedInt } from './unsigned-int'; +import { XdrCompositeType } from './xdr-type'; +import { XdrReaderError, XdrWriterError } from './errors'; + +export class String extends XdrCompositeType { + constructor(maxLength = UnsignedInt.MAX_VALUE) { + super(); + this._maxLength = maxLength; + } + + /** + * @inheritDoc + */ + read(reader) { + const size = UnsignedInt.read(reader); + if (size > this._maxLength) + throw new XdrReaderError( + `saw ${size} length String, max allowed is ${this._maxLength}` + ); + + return reader.read(size); + } + + readString(reader) { + return this.read(reader).toString('utf8'); + } + + /** + * @inheritDoc + */ + write(value, writer) { + // calculate string byte size before writing + const size = + typeof value === 'string' + ? Buffer.byteLength(value, 'utf8') + : value.length; + if (size > this._maxLength) + throw new XdrWriterError( + `got ${value.length} bytes, max allowed is ${this._maxLength}` + ); + // write size info + UnsignedInt.write(size, writer); + writer.write(value, size); + } + + /** + * @inheritDoc + */ + isValid(value) { + if (typeof value === 'string') { + return Buffer.byteLength(value, 'utf8') <= this._maxLength; + } + if (value instanceof Array || Buffer.isBuffer(value)) { + return value.length <= this._maxLength; + } + return false; + } +} diff --git a/node_modules/@stellar/js-xdr/src/struct.js b/node_modules/@stellar/js-xdr/src/struct.js new file mode 100644 index 00000000..93e38984 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/struct.js @@ -0,0 +1,83 @@ +import { Reference } from './reference'; +import { XdrCompositeType, isSerializableIsh } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Struct extends XdrCompositeType { + constructor(attributes) { + super(); + this._attributes = attributes || {}; + } + + /** + * @inheritDoc + */ + static read(reader) { + const attributes = {}; + for (const [fieldName, type] of this._fields) { + attributes[fieldName] = type.read(reader); + } + return new this(attributes); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (!this.isValid(value)) { + throw new XdrWriterError( + `${value} has struct name ${value?.constructor?.structName}, not ${ + this.structName + }: ${JSON.stringify(value)}` + ); + } + + for (const [fieldName, type] of this._fields) { + const attribute = value._attributes[fieldName]; + type.write(attribute, writer); + } + } + + /** + * @inheritDoc + */ + static isValid(value) { + return ( + value?.constructor?.structName === this.structName || + isSerializableIsh(value, this) + ); + } + + static create(context, name, fields) { + const ChildStruct = class extends Struct {}; + + ChildStruct.structName = name; + + context.results[name] = ChildStruct; + + const mappedFields = new Array(fields.length); + for (let i = 0; i < fields.length; i++) { + const fieldDescriptor = fields[i]; + const fieldName = fieldDescriptor[0]; + let field = fieldDescriptor[1]; + if (field instanceof Reference) { + field = field.resolve(context); + } + mappedFields[i] = [fieldName, field]; + // create accessors + ChildStruct.prototype[fieldName] = createAccessorMethod(fieldName); + } + + ChildStruct._fields = mappedFields; + + return ChildStruct; + } +} + +function createAccessorMethod(name) { + return function readOrWriteAttribute(value) { + if (value !== undefined) { + this._attributes[name] = value; + } + return this._attributes[name]; + }; +} diff --git a/node_modules/@stellar/js-xdr/src/types.js b/node_modules/@stellar/js-xdr/src/types.js new file mode 100644 index 00000000..f1785f81 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/types.js @@ -0,0 +1,26 @@ +export * from './int'; +export * from './hyper'; +export * from './unsigned-int'; +export * from './unsigned-hyper'; +export * from './large-int'; + +export * from './float'; +export * from './double'; +export * from './quadruple'; + +export * from './bool'; + +export * from './string'; + +export * from './opaque'; +export * from './var-opaque'; + +export * from './array'; +export * from './var-array'; + +export * from './option'; +export * from './void'; + +export * from './enum'; +export * from './struct'; +export * from './union'; diff --git a/node_modules/@stellar/js-xdr/src/union.js b/node_modules/@stellar/js-xdr/src/union.js new file mode 100644 index 00000000..2523334e --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/union.js @@ -0,0 +1,171 @@ +import { Void } from './void'; +import { Reference } from './reference'; +import { XdrCompositeType, isSerializableIsh } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Union extends XdrCompositeType { + constructor(aSwitch, value) { + super(); + this.set(aSwitch, value); + } + + set(aSwitch, value) { + if (typeof aSwitch === 'string') { + aSwitch = this.constructor._switchOn.fromName(aSwitch); + } + + this._switch = aSwitch; + const arm = this.constructor.armForSwitch(this._switch); + this._arm = arm; + this._armType = arm === Void ? Void : this.constructor._arms[arm]; + this._value = value; + } + + get(armName = this._arm) { + if (this._arm !== Void && this._arm !== armName) + throw new TypeError(`${armName} not set`); + return this._value; + } + + switch() { + return this._switch; + } + + arm() { + return this._arm; + } + + armType() { + return this._armType; + } + + value() { + return this._value; + } + + static armForSwitch(aSwitch) { + const member = this._switches.get(aSwitch); + if (member !== undefined) { + return member; + } + if (this._defaultArm) { + return this._defaultArm; + } + throw new TypeError(`Bad union switch: ${aSwitch}`); + } + + static armTypeForArm(arm) { + if (arm === Void) { + return Void; + } + return this._arms[arm]; + } + + /** + * @inheritDoc + */ + static read(reader) { + const aSwitch = this._switchOn.read(reader); + const arm = this.armForSwitch(aSwitch); + const armType = arm === Void ? Void : this._arms[arm]; + let value; + if (armType !== undefined) { + value = armType.read(reader); + } else { + value = arm.read(reader); + } + return new this(aSwitch, value); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if (!this.isValid(value)) { + throw new XdrWriterError( + `${value} has union name ${value?.unionName}, not ${ + this.unionName + }: ${JSON.stringify(value)}` + ); + } + + this._switchOn.write(value.switch(), writer); + value.armType().write(value.value(), writer); + } + + /** + * @inheritDoc + */ + static isValid(value) { + return ( + value?.constructor?.unionName === this.unionName || + isSerializableIsh(value, this) + ); + } + + static create(context, name, config) { + const ChildUnion = class extends Union {}; + + ChildUnion.unionName = name; + context.results[name] = ChildUnion; + + if (config.switchOn instanceof Reference) { + ChildUnion._switchOn = config.switchOn.resolve(context); + } else { + ChildUnion._switchOn = config.switchOn; + } + + ChildUnion._switches = new Map(); + ChildUnion._arms = {}; + + // resolve default arm + let defaultArm = config.defaultArm; + if (defaultArm instanceof Reference) { + defaultArm = defaultArm.resolve(context); + } + + ChildUnion._defaultArm = defaultArm; + + for (const [aSwitch, armName] of config.switches) { + const key = + typeof aSwitch === 'string' + ? ChildUnion._switchOn.fromName(aSwitch) + : aSwitch; + + ChildUnion._switches.set(key, armName); + } + + // add enum-based helpers + // NOTE: we don't have good notation for "is a subclass of XDR.Enum", + // and so we use the following check (does _switchOn have a `values` + // attribute) to approximate the intent. + if (ChildUnion._switchOn.values !== undefined) { + for (const aSwitch of ChildUnion._switchOn.values()) { + // Add enum-based constructors + ChildUnion[aSwitch.name] = function ctr(value) { + return new ChildUnion(aSwitch, value); + }; + + // Add enum-based "set" helpers + ChildUnion.prototype[aSwitch.name] = function set(value) { + return this.set(aSwitch, value); + }; + } + } + + if (config.arms) { + for (const [armsName, value] of Object.entries(config.arms)) { + ChildUnion._arms[armsName] = + value instanceof Reference ? value.resolve(context) : value; + // Add arm accessor helpers + if (value !== Void) { + ChildUnion.prototype[armsName] = function get() { + return this.get(armsName); + }; + } + } + } + + return ChildUnion; + } +} diff --git a/node_modules/@stellar/js-xdr/src/unsigned-hyper.js b/node_modules/@stellar/js-xdr/src/unsigned-hyper.js new file mode 100644 index 00000000..af3b81dc --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/unsigned-hyper.js @@ -0,0 +1,38 @@ +import { LargeInt } from './large-int'; + +export class UnsignedHyper extends LargeInt { + /** + * @param {Array} parts - Slices to encode + */ + constructor(...args) { + super(args); + } + + get low() { + return Number(this._value & 0xffffffffn) << 0; + } + + get high() { + return Number(this._value >> 32n) >> 0; + } + + get size() { + return 64; + } + + get unsigned() { + return true; + } + + /** + * Create UnsignedHyper instance from two [high][low] i32 values + * @param {Number} low - Low part of u64 number + * @param {Number} high - High part of u64 number + * @return {UnsignedHyper} + */ + static fromBits(low, high) { + return new this(low, high); + } +} + +UnsignedHyper.defineIntBoundaries(); diff --git a/node_modules/@stellar/js-xdr/src/unsigned-int.js b/node_modules/@stellar/js-xdr/src/unsigned-int.js new file mode 100644 index 00000000..6d71fa42 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/unsigned-int.js @@ -0,0 +1,42 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +const MAX_VALUE = 4294967295; +const MIN_VALUE = 0; + +export class UnsignedInt extends XdrPrimitiveType { + /** + * @inheritDoc + */ + static read(reader) { + return reader.readUInt32BE(); + } + + /** + * @inheritDoc + */ + static write(value, writer) { + if ( + typeof value !== 'number' || + !(value >= MIN_VALUE && value <= MAX_VALUE) || + value % 1 !== 0 + ) + throw new XdrWriterError('invalid u32 value'); + + writer.writeUInt32BE(value); + } + + /** + * @inheritDoc + */ + static isValid(value) { + if (typeof value !== 'number' || value % 1 !== 0) { + return false; + } + + return value >= MIN_VALUE && value <= MAX_VALUE; + } +} + +UnsignedInt.MAX_VALUE = MAX_VALUE; +UnsignedInt.MIN_VALUE = MIN_VALUE; diff --git a/node_modules/@stellar/js-xdr/src/var-array.js b/node_modules/@stellar/js-xdr/src/var-array.js new file mode 100644 index 00000000..860c39aa --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/var-array.js @@ -0,0 +1,59 @@ +import { UnsignedInt } from './unsigned-int'; +import { XdrCompositeType } from './xdr-type'; +import { XdrReaderError, XdrWriterError } from './errors'; + +export class VarArray extends XdrCompositeType { + constructor(childType, maxLength = UnsignedInt.MAX_VALUE) { + super(); + this._childType = childType; + this._maxLength = maxLength; + } + + /** + * @inheritDoc + */ + read(reader) { + const length = UnsignedInt.read(reader); + if (length > this._maxLength) + throw new XdrReaderError( + `saw ${length} length VarArray, max allowed is ${this._maxLength}` + ); + + const result = new Array(length); + for (let i = 0; i < length; i++) { + result[i] = this._childType.read(reader); + } + return result; + } + + /** + * @inheritDoc + */ + write(value, writer) { + if (!(value instanceof Array)) + throw new XdrWriterError(`value is not array`); + + if (value.length > this._maxLength) + throw new XdrWriterError( + `got array of size ${value.length}, max allowed is ${this._maxLength}` + ); + + UnsignedInt.write(value.length, writer); + for (const child of value) { + this._childType.write(child, writer); + } + } + + /** + * @inheritDoc + */ + isValid(value) { + if (!(value instanceof Array) || value.length > this._maxLength) { + return false; + } + for (const child of value) { + if (!this._childType.isValid(child)) return false; + } + return true; + } +} diff --git a/node_modules/@stellar/js-xdr/src/var-opaque.js b/node_modules/@stellar/js-xdr/src/var-opaque.js new file mode 100644 index 00000000..056c97fe --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/var-opaque.js @@ -0,0 +1,43 @@ +import { UnsignedInt } from './unsigned-int'; +import { XdrCompositeType } from './xdr-type'; +import { XdrReaderError, XdrWriterError } from './errors'; + +export class VarOpaque extends XdrCompositeType { + constructor(maxLength = UnsignedInt.MAX_VALUE) { + super(); + this._maxLength = maxLength; + } + + /** + * @inheritDoc + */ + read(reader) { + const size = UnsignedInt.read(reader); + if (size > this._maxLength) + throw new XdrReaderError( + `saw ${size} length VarOpaque, max allowed is ${this._maxLength}` + ); + return reader.read(size); + } + + /** + * @inheritDoc + */ + write(value, writer) { + const { length } = value; + if (value.length > this._maxLength) + throw new XdrWriterError( + `got ${value.length} bytes, max allowed is ${this._maxLength}` + ); + // write size info + UnsignedInt.write(length, writer); + writer.write(value, length); + } + + /** + * @inheritDoc + */ + isValid(value) { + return Buffer.isBuffer(value) && value.length <= this._maxLength; + } +} diff --git a/node_modules/@stellar/js-xdr/src/void.js b/node_modules/@stellar/js-xdr/src/void.js new file mode 100644 index 00000000..631379d6 --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/void.js @@ -0,0 +1,19 @@ +import { XdrPrimitiveType } from './xdr-type'; +import { XdrWriterError } from './errors'; + +export class Void extends XdrPrimitiveType { + /* jshint unused: false */ + + static read() { + return undefined; + } + + static write(value) { + if (value !== undefined) + throw new XdrWriterError('trying to write value to a void slot'); + } + + static isValid(value) { + return value === undefined; + } +} diff --git a/node_modules/@stellar/js-xdr/src/xdr-type.js b/node_modules/@stellar/js-xdr/src/xdr-type.js new file mode 100644 index 00000000..8dd631dc --- /dev/null +++ b/node_modules/@stellar/js-xdr/src/xdr-type.js @@ -0,0 +1,217 @@ +import { XdrReader } from './serialization/xdr-reader'; +import { XdrWriter } from './serialization/xdr-writer'; +import { XdrNotImplementedDefinitionError } from './errors'; + +class XdrType { + /** + * Encode value to XDR format + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {String|Buffer} + */ + toXDR(format = 'raw') { + if (!this.write) return this.constructor.toXDR(this, format); + + const writer = new XdrWriter(); + this.write(this, writer); + return encodeResult(writer.finalize(), format); + } + + /** + * Decode XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {this} + */ + fromXDR(input, format = 'raw') { + if (!this.read) return this.constructor.fromXDR(input, format); + + const reader = new XdrReader(decodeInput(input, format)); + const result = this.read(reader); + reader.ensureInputConsumed(); + return result; + } + + /** + * Check whether input contains a valid XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {Boolean} + */ + validateXDR(input, format = 'raw') { + try { + this.fromXDR(input, format); + return true; + } catch (e) { + return false; + } + } + + /** + * Encode value to XDR format + * @param {this} value - Value to serialize + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {Buffer} + */ + static toXDR(value, format = 'raw') { + const writer = new XdrWriter(); + this.write(value, writer); + return encodeResult(writer.finalize(), format); + } + + /** + * Decode XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {this} + */ + static fromXDR(input, format = 'raw') { + const reader = new XdrReader(decodeInput(input, format)); + const result = this.read(reader); + reader.ensureInputConsumed(); + return result; + } + + /** + * Check whether input contains a valid XDR-encoded value + * @param {Buffer|String} input - XDR-encoded input data + * @param {XdrEncodingFormat} [format] - Encoding format (one of "raw", "hex", "base64") + * @return {Boolean} + */ + static validateXDR(input, format = 'raw') { + try { + this.fromXDR(input, format); + return true; + } catch (e) { + return false; + } + } +} + +export class XdrPrimitiveType extends XdrType { + /** + * Read value from the XDR-serialized input + * @param {XdrReader} reader - XdrReader instance + * @return {this} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + static read(reader) { + throw new XdrNotImplementedDefinitionError(); + } + + /** + * Write XDR value to the buffer + * @param {this} value - Value to write + * @param {XdrWriter} writer - XdrWriter instance + * @return {void} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + static write(value, writer) { + throw new XdrNotImplementedDefinitionError(); + } + + /** + * Check whether XDR primitive value is valid + * @param {this} value - Value to check + * @return {Boolean} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + static isValid(value) { + return false; + } +} + +export class XdrCompositeType extends XdrType { + // Every descendant should implement two methods: read(reader) and write(value, writer) + + /** + * Check whether XDR primitive value is valid + * @param {this} value - Value to check + * @return {Boolean} + * @abstract + */ + // eslint-disable-next-line no-unused-vars + isValid(value) { + return false; + } +} + +class InvalidXdrEncodingFormatError extends TypeError { + constructor(format) { + super(`Invalid format ${format}, must be one of "raw", "hex", "base64"`); + } +} + +function encodeResult(buffer, format) { + switch (format) { + case 'raw': + return buffer; + case 'hex': + return buffer.toString('hex'); + case 'base64': + return buffer.toString('base64'); + default: + throw new InvalidXdrEncodingFormatError(format); + } +} + +function decodeInput(input, format) { + switch (format) { + case 'raw': + return input; + case 'hex': + return Buffer.from(input, 'hex'); + case 'base64': + return Buffer.from(input, 'base64'); + default: + throw new InvalidXdrEncodingFormatError(format); + } +} + +/** + * Provides a "duck typed" version of the native `instanceof` for read/write. + * + * "Duck typing" means if the parameter _looks like_ and _acts like_ a duck + * (i.e. the type we're checking), it will be treated as that type. + * + * In this case, the "type" we're looking for is "like XdrType" but also "like + * XdrCompositeType|XdrPrimitiveType" (i.e. serializable), but also conditioned + * on a particular subclass of "XdrType" (e.g. {@link Union} which extends + * XdrType). + * + * This makes the package resilient to downstream systems that may be combining + * many versions of a package across its stack that are technically compatible + * but fail `instanceof` checks due to cross-pollination. + */ +export function isSerializableIsh(value, subtype) { + return ( + value !== undefined && + value !== null && // prereqs, otherwise `getPrototypeOf` pops + (value instanceof subtype || // quickest check + // Do an initial constructor check (anywhere is fine so that children of + // `subtype` still work), then + (hasConstructor(value, subtype) && + // ensure it has read/write methods, then + typeof value.constructor.read === 'function' && + typeof value.constructor.write === 'function' && + // ensure XdrType is in the prototype chain + hasConstructor(value, 'XdrType'))) + ); +} + +/** Tries to find `subtype` in any of the constructors or meta of `instance`. */ +export function hasConstructor(instance, subtype) { + do { + const ctor = instance.constructor; + if (ctor.name === subtype) { + return true; + } + } while ((instance = Object.getPrototypeOf(instance))); + return false; +} + +/** + * @typedef {'raw'|'hex'|'base64'} XdrEncodingFormat + */ diff --git a/node_modules/@stellar/js-xdr/test/.eslintrc.js b/node_modules/@stellar/js-xdr/test/.eslintrc.js new file mode 100644 index 00000000..4bc70f28 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + env: { + mocha: true + }, + globals: { + XDR: true, + chai: true, + sinon: true, + expect: true, + stub: true, + spy: true + }, + rules: { + 'no-unused-vars': 0 + } +}; diff --git a/node_modules/@stellar/js-xdr/test/setup.js b/node_modules/@stellar/js-xdr/test/setup.js new file mode 100644 index 00000000..35394b94 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/setup.js @@ -0,0 +1,23 @@ +if (typeof global === 'undefined') { + // eslint-disable-next-line no-undef + window.global = window; +} +global['XDR'] = require('../src'); +global.chai = require('chai'); +global.sinon = require('sinon'); +global.chai.use(require('sinon-chai')); + +global.expect = global.chai.expect; + +exports.mochaHooks = { + beforeEach: function () { + this.sandbox = global.sinon.createSandbox(); + global.stub = this.sandbox.stub.bind(this.sandbox); + global.spy = this.sandbox.spy.bind(this.sandbox); + }, + afterEach: function () { + delete global.stub; + delete global.spy; + this.sandbox.restore(); + } +}; diff --git a/node_modules/@stellar/js-xdr/test/unit/array_test.js b/node_modules/@stellar/js-xdr/test/unit/array_test.js new file mode 100644 index 00000000..28b77923 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/array_test.js @@ -0,0 +1,89 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +let zero = new XDR.Array(XDR.Int, 0); +let one = new XDR.Array(XDR.Int, 1); +let many = new XDR.Array(XDR.Int, 2); + +describe('Array#read', function () { + it('decodes correctly', function () { + expect(read(zero, [])).to.eql([]); + expect(read(zero, [0x00, 0x00, 0x00, 0x00])).to.eql([]); + + expect(read(one, [0x00, 0x00, 0x00, 0x00])).to.eql([0]); + expect(read(one, [0x00, 0x00, 0x00, 0x01])).to.eql([1]); + + expect(read(many, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01])).to.eql( + [0, 1] + ); + expect(read(many, [0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01])).to.eql( + [1, 1] + ); + }); + + it("throws XdrReaderError when the byte stream isn't large enough", function () { + expect(() => read(many, [0x00, 0x00, 0x00, 0x00])).to.throw( + /read outside the boundary/i + ); + }); + + function read(arr, bytes) { + let reader = new XdrReader(bytes); + return arr.read(reader); + } +}); + +describe('Array#write', function () { + let subject = many; + + it('encodes correctly', function () { + expect(write([1, 2])).to.eql([ + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02 + ]); + expect(write([3, 4])).to.eql([ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04 + ]); + }); + + it('throws a write error if the value is not the correct length', function () { + expect(() => write(null)).to.throw(/write error/i); + expect(() => write(undefined)).to.throw(/write error/i); + expect(() => write([])).to.throw(/write error/i); + expect(() => write([1])).to.throw(/write error/i); + expect(() => write([1, 2, 3])).to.throw(/write error/i); + }); + + it('throws a write error if a child element is of the wrong type', function () { + expect(() => write([1, null])).to.throw(/write error/i); + expect(() => write([1, undefined])).to.throw(/write error/i); + expect(() => write([1, 'hi'])).to.throw(/write error/i); + }); + + function write(value) { + let writer = new XdrWriter(8); + subject.write(value, writer); + return writer.toArray(); + } +}); + +describe('Array#isValid', function () { + let subject = many; + + it('returns true for an array of the correct size with the correct types', function () { + expect(subject.isValid([1, 2])).to.be.true; + }); + + it('returns false for arrays of the wrong size', function () { + expect(subject.isValid([])).to.be.false; + expect(subject.isValid([1])).to.be.false; + expect(subject.isValid([1, 2, 3])).to.be.false; + }); + + it('returns false if a child element is invalid for the child type', function () { + expect(subject.isValid([1, null])).to.be.false; + expect(subject.isValid([1, undefined])).to.be.false; + expect(subject.isValid([1, 'hello'])).to.be.false; + expect(subject.isValid([1, []])).to.be.false; + expect(subject.isValid([1, {}])).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/bigint-encoder_test.js b/node_modules/@stellar/js-xdr/test/unit/bigint-encoder_test.js new file mode 100644 index 00000000..1424c845 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/bigint-encoder_test.js @@ -0,0 +1,318 @@ +import { + encodeBigIntFromBits, + formatIntName, + sliceBigInt +} from '../../src/bigint-encoder'; + +describe('encodeBigIntWithPrecision', function () { + it(`encodes values correctly`, () => { + const testCases = [ + // i64 + [[0], 64, false, 0n], + [[-1], 64, false, -1n], + [['-15258'], 64, false, -15258n], + [[-0x8000000000000000n], 64, false, -0x8000000000000000n], + [[0x7fffffffffffffffn], 64, false, 0x7fffffffffffffffn], + [[1, -0x80000000n], 64, false, -0x7fffffffffffffffn], + [[-1, -1], 64, false, -1n], + [[-2, 0x7fffffffn], 64, false, 0x7ffffffffffffffen], + [[345, -345], 64, false, -0x158fffffea7n], + // u64 + [[0], 64, true, 0n], + [[1n], 64, true, 1n], + [[0xffffffffffffffffn], 64, true, 0xffffffffffffffffn], + [[0n, 0n], 64, true, 0n], + [[1, 0], 64, true, 1n], + [[-1, -1], 64, true, 0xffffffffffffffffn], + [[-2, -1], 64, true, 0xfffffffffffffffen], + // i128 + [[0], 128, false, 0n], + [[-1], 128, false, -1n], + [['-15258'], 128, false, -15258n], + [ + [-0x80000000000000000000000000000000n], + 128, + false, + -0x80000000000000000000000000000000n + ], + [ + [0x7fffffffffffffffffffffffffffffffn], + 128, + false, + 0x7fffffffffffffffffffffffffffffffn + ], + [[1, -2147483648], 128, false, -0x7fffffffffffffffffffffffn], + [[-1, -1], 128, false, -1n], + [ + [-1, 0x7fffffffffffffffn], + 128, + false, + 0x7fffffffffffffffffffffffffffffffn + ], + [ + [0xffffffffffffffffn, 0x7fffffffffffffffn], + 128, + false, + 0x7fffffffffffffffffffffffffffffffn + ], + [ + [0, -0x8000000000000000n], + 128, + false, + -0x80000000000000000000000000000000n + ], + [ + [1, -0x8000000000000000n], + 128, + false, + -0x7fffffffffffffffffffffffffffffffn + ], + [ + [1, 0, 0, -0x80000000n], + 128, + false, + -0x7fffffffffffffffffffffffffffffffn + ], + [[345, 345n, '345', 0x159], 128, false, 0x159000001590000015900000159n], + // u128 + [[0], 128, true, 0n], + [[1n], 128, true, 1n], + [ + [0xffffffffffffffffffffffffffffffffn], + 128, + true, + 0xffffffffffffffffffffffffffffffffn + ], + [[0n, 0n], 128, true, 0n], + [[1, 0], 128, true, 1n], + [[-1, -1], 128, true, 0xffffffffffffffffffffffffffffffffn], + [[-2, -1], 128, true, 0xfffffffffffffffffffffffffffffffen], + [ + [0x5cffffffffffffffn, 0x7fffffffffffffffn], + 128, + true, + 0x7fffffffffffffff5cffffffffffffffn + ], + [ + [1, 1, -1, -0x80000000n], + 128, + true, + 0x80000000ffffffff0000000100000001n + ], + [[345, 345n, '345', 0x159], 128, false, 0x159000001590000015900000159n], + // i256 + [[0], 256, false, 0n], + [[-1], 256, false, -1n], + [['-15258'], 256, false, -15258n], + [ + [-0x8000000000000000000000000000000000000000000000000000000000000000n], + 256, + false, + -0x8000000000000000000000000000000000000000000000000000000000000000n + ], + [ + [0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn], + 256, + false, + 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn + ], + [ + [1, -2147483648], + 256, + false, + -0x7fffffffffffffffffffffffffffffffffffffffn + ], + [[-1, -1], 256, false, -1n], + [ + [-1, 0x7fffffffffffffffn], + 256, + false, + 0x7fffffffffffffffffffffffffffffffffffffffffffffffn + ], + [ + [ + 0xffffffffffffffffffffffffffffffffn, + 0x7fffffffffffffffffffffffffffffffn + ], + 256, + false, + 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn + ], + [ + [0, -0x80000000000000000000000000000000n], + 256, + false, + -0x8000000000000000000000000000000000000000000000000000000000000000n + ], + [ + [1, -0x80000000000000000000000000000000n], + 256, + false, + -0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn + ], + [ + [1, 0, 0, -0x800000000000000n], + 256, + false, + -0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn + ], + [ + [345, 345n, '345', -0x159], + 256, + false, + -0x158fffffffffffffea6fffffffffffffea6fffffffffffffea7n + ], + [ + [1, 2, 3, 4, 5, 6, 7, -8], + 256, + false, + -0x7fffffff8fffffff9fffffffafffffffbfffffffcfffffffdffffffffn + ], + [ + [1, -2, 3, -4, 5, -6, 7, -8], + 256, + false, + -0x7fffffff800000005fffffffa00000003fffffffc00000001ffffffffn + ], + // u256 + [[0], 256, true, 0n], + [[1n], 256, true, 1n], + [ + [0xffffffffffffffffffffffffffffffffn], + 256, + true, + 0xffffffffffffffffffffffffffffffffn + ], + [[0n, 0n], 256, true, 0n], + [[1, 0], 256, true, 1n], + [ + [-1, -1], + 256, + true, + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn + ], + [ + [-2, -1], + 256, + true, + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffen + ], + [ + [ + 0x5cffffffffffffffffffffffffffffffn, + 0x7fffffffffffffffffffffffffffffffn + ], + 256, + true, + 0x7fffffffffffffffffffffffffffffff5cffffffffffffffffffffffffffffffn + ], + [ + [1, 1, -1, -0x80000000n], + 256, + true, + 0xffffffff80000000ffffffffffffffff00000000000000010000000000000001n + ], + [ + [ + 1558245471070191615n, + 1558245471070191615n, + '1558245471070191615', + 0x159fffffffffffffn + ], + 256, + false, + 0x159fffffffffffff159fffffffffffff159fffffffffffff159fffffffffffffn + ], + [ + [1, 2, 3, 4, 5, 6, 7, 8], + 256, + false, + 0x0000000800000007000000060000000500000004000000030000000200000001n + ] + ]; + + for (let [args, bits, unsigned, expected] of testCases) { + try { + const actual = encodeBigIntFromBits(args, bits, unsigned); + expect(actual).to.eq( + expected, + `bigint values for ${formatIntName( + bits, + unsigned + )} out of range: [${args.join()}]` + ); + } catch (e) { + e.message = `Encoding [${args.join()}] => ${formatIntName( + bits, + unsigned + )} BigInt failed with error: ${e.message}`; + throw e; + } + } + }); +}); + +describe('sliceBigInt', function () { + it(`slices values correctly`, () => { + const testCases = [ + [0n, 64, 64, [0n]], + [0n, 256, 256, [0n]], + [-1n, 64, 32, [-1n, -1n]], + [0xfffffffffffffffen, 64, 32, [-2n, -1n]], + [ + 0x7fffffffffffffff5cffffffffffffffn, + 128, + 64, + [0x5cffffffffffffffn, 0x7fffffffffffffffn] + ], + [ + 0x80000000ffffffff0000000100000001n, + 128, + 32, + [1n, 1n, -1n, -0x80000000n] + ], + [ + -0x158fffffffffffffea6fffffffffffffea6fffffffffffffea7n, + 256, + 64, + [345n, 345n, 345n, -345n] + ], + [ + 0x0000000800000007000000060000000500000004000000030000000200000001n, + 256, + 32, + [1n, 2n, 3n, 4n, 5n, 6n, 7n, 8n] + ], + [ + -0x7fffffff8fffffff9fffffffafffffffbfffffffcfffffffdffffffffn, + 256, + 32, + [1n, 2n, 3n, 4n, 5n, 6n, 7n, -8n] + ], + [ + -0x7fffffff800000005fffffffa00000003fffffffc00000001ffffffffn, + 256, + 32, + [1n, -2n, 3n, -4n, 5n, -6n, 7n, -8n] + ] + ]; + for (let [value, size, sliceSize, expected] of testCases) { + try { + const actual = sliceBigInt(value, size, sliceSize); + expect(actual).to.eql( + expected, + `Invalid ${formatIntName( + size, + false + )} / ${sliceSize} slicing result for ${value}` + ); + } catch (e) { + e.message = `Slicing ${value} for ${formatIntName( + size, + false + )} / ${sliceSize} failed with error: ${e.message}`; + throw e; + } + } + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/bool_test.js b/node_modules/@stellar/js-xdr/test/unit/bool_test.js new file mode 100644 index 00000000..237c4487 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/bool_test.js @@ -0,0 +1,47 @@ +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { XdrReader } from '../../src/serialization/xdr-reader'; +let Bool = XDR.Bool; + +describe('Bool.read', function () { + it('decodes correctly', function () { + expect(read([0, 0, 0, 0])).to.eql(false); + expect(read([0, 0, 0, 1])).to.eql(true); + + expect(() => read([0, 0, 0, 2])).to.throw(/read error/i); + expect(() => read([255, 255, 255, 255])).to.throw(/read error/i); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Bool.read(io); + } +}); + +describe('Bool.write', function () { + it('encodes correctly', function () { + expect(write(false)).to.eql([0, 0, 0, 0]); + expect(write(true)).to.eql([0, 0, 0, 1]); + }); + + function write(value) { + let io = new XdrWriter(8); + Bool.write(value, io); + return io.toArray(); + } +}); + +describe('Bool.isValid', function () { + it('returns true for booleans', function () { + expect(Bool.isValid(true)).to.be.true; + expect(Bool.isValid(false)).to.be.true; + }); + + it('returns false for non booleans', function () { + expect(Bool.isValid(0)).to.be.false; + expect(Bool.isValid('0')).to.be.false; + expect(Bool.isValid([true])).to.be.false; + expect(Bool.isValid(null)).to.be.false; + expect(Bool.isValid({})).to.be.false; + expect(Bool.isValid(undefined)).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/define_test.js b/node_modules/@stellar/js-xdr/test/unit/define_test.js new file mode 100644 index 00000000..504b471a --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/define_test.js @@ -0,0 +1,175 @@ +import * as XDR from '../../src'; + +describe('XDR.config', function () { + beforeEach(function () { + this.types = XDR.config(); // get the xdr object root + for (const toDelete of Object.keys(this.types)) { + delete this.types[toDelete]; + } + }); + + it('can define objects that have no dependency', function () { + XDR.config((xdr) => { + xdr.enum('Color', { + red: 0, + green: 1, + blue: 2 + }); + + xdr.enum('ResultType', { + ok: 0, + error: 1 + }); + }, this.types); + + expect(this.types.Color).to.exist; + expect(this.types.ResultType).to.exist; + }); + + it('can define objects with the same name from different contexts', function () { + XDR.config((xdr) => { + xdr.enum('Color', { + red: 0, + green: 1, + blue: 2 + }); + }); + + XDR.config((xdr) => { + xdr.enum('Color', { + red: 0, + green: 1, + blue: 2 + }); + }); + }); + + it('can define objects that have simple dependencies', function () { + XDR.config((xdr) => { + xdr.union('Result', { + switchOn: xdr.lookup('ResultType'), + switches: [ + ['ok', XDR.Void], + ['error', 'message'] + ], + defaultArm: XDR.Void, + arms: { + message: new XDR.String(100) + } + }); + + xdr.enum('ResultType', { + ok: 0, + error: 1 + }); + }, this.types); + + expect(this.types.Result).to.exist; + expect(this.types.ResultType).to.exist; + + let result = this.types.Result.ok(); + expect(result.switch()).to.eql(this.types.ResultType.ok()); + + result = this.types.Result.error('It broke!'); + expect(result.switch()).to.eql(this.types.ResultType.error()); + expect(result.message()).to.eql('It broke!'); + }); + + it('can define structs', function () { + XDR.config((xdr) => { + xdr.struct('Color', [ + ['red', xdr.int()], + ['green', xdr.int()], + ['blue', xdr.int()] + ]); + }, this.types); + + expect(this.types.Color).to.exist; + + let result = new this.types.Color({ + red: 0, + green: 1, + blue: 2 + }); + expect(result.red()).to.eql(0); + expect(result.green()).to.eql(1); + expect(result.blue()).to.eql(2); + }); + + it('can define typedefs', function () { + let xdr = XDR.config((xdr) => { + xdr.typedef('Uint256', xdr.opaque(32)); + }); + expect(xdr.Uint256).to.be.instanceof(XDR.Opaque); + }); + + it('can define consts', function () { + let xdr = XDR.config((xdr) => { + xdr.typedef('MAX_SIZE', 300); + }); + expect(xdr.MAX_SIZE).to.eql(300); + }); + + it('can define arrays', function () { + let xdr = XDR.config((xdr) => { + xdr.typedef('ArrayOfInts', xdr.array(xdr.int(), 3)); + xdr.struct('MyStruct', [['red', xdr.int()]]); + xdr.typedef('ArrayOfEmpty', xdr.array(xdr.lookup('MyStruct'), 5)); + }); + + expect(xdr.ArrayOfInts).to.be.instanceof(XDR.Array); + expect(xdr.ArrayOfInts._childType).to.eql(XDR.Int); + expect(xdr.ArrayOfInts._length).to.eql(3); + + expect(xdr.ArrayOfEmpty).to.be.instanceof(XDR.Array); + expect(xdr.ArrayOfEmpty._childType).to.eql(xdr.MyStruct); + expect(xdr.ArrayOfEmpty._length).to.eql(5); + }); + + it('can define vararrays', function () { + let xdr = XDR.config((xdr) => { + xdr.typedef('ArrayOfInts', xdr.varArray(xdr.int(), 3)); + }); + + expect(xdr.ArrayOfInts).to.be.instanceof(XDR.VarArray); + expect(xdr.ArrayOfInts._childType).to.eql(XDR.Int); + expect(xdr.ArrayOfInts._maxLength).to.eql(3); + }); + + it('can define options', function () { + let xdr = XDR.config((xdr) => { + xdr.typedef('OptionalInt', xdr.option(xdr.int())); + }); + + expect(xdr.OptionalInt).to.be.instanceof(XDR.Option); + expect(xdr.OptionalInt._childType).to.eql(XDR.Int); + }); + + it('can use sizes defined as an xdr const', function () { + let xdr = XDR.config((xdr) => { + xdr.const('SIZE', 5); + xdr.typedef('MyArray', xdr.array(xdr.int(), xdr.lookup('SIZE'))); + xdr.typedef('MyVarArray', xdr.varArray(xdr.int(), xdr.lookup('SIZE'))); + xdr.typedef('MyString', xdr.string(xdr.lookup('SIZE'))); + xdr.typedef('MyOpaque', xdr.opaque(xdr.lookup('SIZE'))); + xdr.typedef('MyVarOpaque', xdr.varOpaque(xdr.lookup('SIZE'))); + }); + + expect(xdr.MyArray).to.be.instanceof(XDR.Array); + expect(xdr.MyArray._childType).to.eql(XDR.Int); + expect(xdr.MyArray._length).to.eql(5); + + expect(xdr.MyVarArray).to.be.instanceof(XDR.VarArray); + expect(xdr.MyVarArray._childType).to.eql(XDR.Int); + expect(xdr.MyVarArray._maxLength).to.eql(5); + + expect(xdr.MyString).to.be.instanceof(XDR.String); + expect(xdr.MyString._maxLength).to.eql(5); + + expect(xdr.MyOpaque).to.be.instanceof(XDR.Opaque); + expect(xdr.MyOpaque._length).to.eql(5); + + expect(xdr.MyVarOpaque).to.be.instanceof(XDR.VarOpaque); + expect(xdr.MyVarOpaque._maxLength).to.eql(5); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/double_test.js b/node_modules/@stellar/js-xdr/test/unit/double_test.js new file mode 100644 index 00000000..98ccc26c --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/double_test.js @@ -0,0 +1,62 @@ +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { XdrReader } from '../../src/serialization/xdr-reader'; +let Double = XDR.Double; + +describe('Double.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql(0.0); + expect(read([0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql(-0.0); + expect(read([0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql(1.0); + expect(read([0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql(-1.0); + expect(read([0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql(NaN); + expect(read([0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01])).to.eql(NaN); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Double.read(io); + } +}); + +describe('Double.write', function () { + it('encodes correctly', function () { + expect(write(0.0)).to.eql([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]); + expect(write(-0.0)).to.eql([ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + expect(write(1.0)).to.eql([0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]); + expect(write(-1.0)).to.eql([ + 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + }); + + function write(value) { + let io = new XdrWriter(8); + Double.write(value, io); + return io.toArray(); + } +}); + +describe('Double.isValid', function () { + it('returns true for numbers', function () { + expect(Double.isValid(0)).to.be.true; + expect(Double.isValid(-1)).to.be.true; + expect(Double.isValid(1.0)).to.be.true; + expect(Double.isValid(100000.0)).to.be.true; + expect(Double.isValid(NaN)).to.be.true; + expect(Double.isValid(Infinity)).to.be.true; + expect(Double.isValid(-Infinity)).to.be.true; + }); + + it('returns false for non numbers', function () { + expect(Double.isValid(true)).to.be.false; + expect(Double.isValid(false)).to.be.false; + expect(Double.isValid(null)).to.be.false; + expect(Double.isValid('0')).to.be.false; + expect(Double.isValid([])).to.be.false; + expect(Double.isValid([0])).to.be.false; + expect(Double.isValid('hello')).to.be.false; + expect(Double.isValid({ why: 'hello' })).to.be.false; + expect(Double.isValid(['how', 'do', 'you', 'do'])).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/dynamic-buffer-resize_test.js b/node_modules/@stellar/js-xdr/test/unit/dynamic-buffer-resize_test.js new file mode 100644 index 00000000..3ad5b64b --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/dynamic-buffer-resize_test.js @@ -0,0 +1,19 @@ +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +describe('Dynamic writer buffer resize', function () { + it('automatically resize buffer', function () { + const str = new XDR.String(32768); + let io = new XdrWriter(12); + str.write('7 bytes', io); + // expect buffer size to equal base size + expect(io._buffer.length).to.eql(12); + str.write('a'.repeat(32768), io); + // expect buffer growth up to 5 chunks + expect(io._buffer.length).to.eql(40960); + // increase by 1 more 8 KB chunk + str.write('a'.repeat(9000), io); + expect(io._buffer.length).to.eql(49152); + // check final buffer size + expect(io.toArray().length).to.eql(41788); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/enum_test.js b/node_modules/@stellar/js-xdr/test/unit/enum_test.js new file mode 100644 index 00000000..f9b59c77 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/enum_test.js @@ -0,0 +1,117 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { Enum } from '../../src/enum'; + +/* jshint -W030 */ + +let emptyContext = { definitions: {}, results: {} }; +let Color = XDR.Enum.create(emptyContext, 'Color', { + red: 0, + green: 1, + evenMoreGreen: 3 +}); + +describe('Enum.fromName', function () { + it('returns the member with the provided name', function () { + expect(Color.fromName('red')).to.eql(Color.red()); + expect(Color.fromName('green')).to.eql(Color.green()); + expect(Color.fromName('evenMoreGreen')).to.eql(Color.evenMoreGreen()); + }); + + it('throws an error if the name is not correct', function () { + expect(() => Color.fromName('obviouslyNotAColor')).to.throw( + /not a member/i + ); + }); +}); + +describe('Enum.fromValue', function () { + it('returns the member with the provided value', function () { + expect(Color.fromValue(0)).to.eql(Color.red()); + expect(Color.fromValue(1)).to.eql(Color.green()); + expect(Color.fromValue(3)).to.eql(Color.evenMoreGreen()); + }); + + it('throws an error if the value is not correct', function () { + expect(() => Color.fromValue(999)).to.throw(/not a value/i); + }); +}); + +describe('Enum.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00])).to.eql(Color.red()); + expect(read([0x00, 0x00, 0x00, 0x01])).to.eql(Color.green()); + expect(read([0x00, 0x00, 0x00, 0x03])).to.eql(Color.evenMoreGreen()); + }); + + it("throws read error when encoded value isn't defined on the enum", function () { + expect(() => read([0x00, 0x00, 0x00, 0x02])).to.throw(/read error/i); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Color.read(io); + } +}); + +describe('Enum.write', function () { + it('encodes correctly', function () { + expect(write(Color.red())).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write(Color.green())).to.eql([0x00, 0x00, 0x00, 0x01]); + expect(write(Color.evenMoreGreen())).to.eql([0x00, 0x00, 0x00, 0x03]); + + expect(Color.red().toXDR('hex')).to.eql('00000000'); + expect(Color.green().toXDR('hex')).to.eql('00000001'); + expect(Color.evenMoreGreen().toXDR('hex')).to.eql('00000003'); + }); + + it('throws a write error if the value is not the correct type', function () { + expect(() => write(null)).to.throw(/write error/i); + expect(() => write(undefined)).to.throw(/write error/i); + expect(() => write([])).to.throw(/write error/i); + expect(() => write({})).to.throw(/write error/i); + expect(() => write(1)).to.throw(/write error/i); + expect(() => write(true)).to.throw(/write error/i); + }); + + function write(value) { + let io = new XdrWriter(8); + Color.write(value, io); + return io.toArray(); + } +}); + +describe('Enum.isValid', function () { + it('returns true for members of the enum', function () { + expect(Color.isValid(Color.red())).to.be.true; + expect(Color.isValid(Color.green())).to.be.true; + expect(Color.isValid(Color.evenMoreGreen())).to.be.true; + }); + + it('works for "enum-like" objects', function () { + class FakeEnum extends Enum {} + FakeEnum.enumName = 'Color'; + + let r = new FakeEnum(); + expect(Color.isValid(r)).to.be.true; + + FakeEnum.enumName = 'NotColor'; + r = new FakeEnum(); + expect(Color.isValid(r)).to.be.false; + + // make sure you can't fool it + FakeEnum.enumName = undefined; + FakeEnum.unionName = 'Color'; + r = new FakeEnum(); + expect(Color.isValid(r)).to.be.false; + }); + + it('returns false for arrays of the wrong size', function () { + expect(Color.isValid(null)).to.be.false; + expect(Color.isValid(undefined)).to.be.false; + expect(Color.isValid([])).to.be.false; + expect(Color.isValid({})).to.be.false; + expect(Color.isValid(1)).to.be.false; + expect(Color.isValid(true)).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/float_test.js b/node_modules/@stellar/js-xdr/test/unit/float_test.js new file mode 100644 index 00000000..be790ddf --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/float_test.js @@ -0,0 +1,58 @@ +let Float = XDR.Float; +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +describe('Float.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00])).to.eql(0.0); + expect(read([0x80, 0x00, 0x00, 0x00])).to.eql(-0.0); + expect(read([0x3f, 0x80, 0x00, 0x00])).to.eql(1.0); + expect(read([0xbf, 0x80, 0x00, 0x00])).to.eql(-1.0); + expect(read([0x7f, 0xc0, 0x00, 0x00])).to.eql(NaN); + expect(read([0x7f, 0xf8, 0x00, 0x00])).to.eql(NaN); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Float.read(io); + } +}); + +describe('Float.write', function () { + it('encodes correctly', function () { + expect(write(0.0)).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write(-0.0)).to.eql([0x80, 0x00, 0x00, 0x00]); + expect(write(1.0)).to.eql([0x3f, 0x80, 0x00, 0x00]); + expect(write(-1.0)).to.eql([0xbf, 0x80, 0x00, 0x00]); + }); + + function write(value) { + let io = new XdrWriter(8); + Float.write(value, io); + return io.toArray(); + } +}); + +describe('Float.isValid', function () { + it('returns true for numbers', function () { + expect(Float.isValid(0)).to.be.true; + expect(Float.isValid(-1)).to.be.true; + expect(Float.isValid(1.0)).to.be.true; + expect(Float.isValid(100000.0)).to.be.true; + expect(Float.isValid(NaN)).to.be.true; + expect(Float.isValid(Infinity)).to.be.true; + expect(Float.isValid(-Infinity)).to.be.true; + }); + + it('returns false for non numbers', function () { + expect(Float.isValid(true)).to.be.false; + expect(Float.isValid(false)).to.be.false; + expect(Float.isValid(null)).to.be.false; + expect(Float.isValid('0')).to.be.false; + expect(Float.isValid([])).to.be.false; + expect(Float.isValid([0])).to.be.false; + expect(Float.isValid('hello')).to.be.false; + expect(Float.isValid({ why: 'hello' })).to.be.false; + expect(Float.isValid(['how', 'do', 'you', 'do'])).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/hyper_test.js b/node_modules/@stellar/js-xdr/test/unit/hyper_test.js new file mode 100644 index 00000000..2d5acd45 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/hyper_test.js @@ -0,0 +1,86 @@ +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { XdrReader } from '../../src/serialization/xdr-reader'; +let Hyper = XDR.Hyper; + +describe('Hyper.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql( + Hyper.fromString('0') + ); + expect(read([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01])).to.eql( + Hyper.fromString('1') + ); + expect(read([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])).to.eql( + Hyper.fromString('-1') + ); + expect(read([0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])).to.eql( + new Hyper(Hyper.MAX_VALUE) + ); + expect(read([0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql( + new Hyper(Hyper.MIN_VALUE) + ); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Hyper.read(io); + } +}); + +describe('Hyper.write', function () { + it('encodes correctly', function () { + expect(write(Hyper.fromString('0'))).to.eql([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + expect(write(Hyper.fromString('1'))).to.eql([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + ]); + expect(write(Hyper.fromString('-1'))).to.eql([ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + ]); + expect(write(Hyper.MAX_VALUE)).to.eql([ + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + ]); + expect(write(Hyper.MIN_VALUE)).to.eql([ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + }); + + function write(value) { + let io = new XdrWriter(8); + Hyper.write(value, io); + return io.toArray(); + } +}); + +describe('Hyper.isValid', function () { + it('returns true for Hyper instances', function () { + expect(Hyper.isValid(Hyper.MIN_VALUE)).to.be.true; + expect(Hyper.isValid(Hyper.MAX_VALUE)).to.be.true; + expect(Hyper.isValid(Hyper.fromString('0'))).to.be.true; + expect(Hyper.isValid(Hyper.fromString('-1'))).to.be.true; + }); + + it('returns false for non Hypers', function () { + expect(Hyper.isValid(null)).to.be.false; + expect(Hyper.isValid(undefined)).to.be.false; + expect(Hyper.isValid([])).to.be.false; + expect(Hyper.isValid({})).to.be.false; + expect(Hyper.isValid(1)).to.be.false; + expect(Hyper.isValid(true)).to.be.false; + }); +}); + +describe('Hyper.fromString', function () { + it('works for positive numbers', function () { + expect(Hyper.fromString('1059').toString()).to.eql('1059'); + }); + + it('works for negative numbers', function () { + expect(Hyper.fromString('-1059').toString()).to.eql('-1059'); + }); + + it('fails when providing a string with a decimal place', function () { + expect(() => Hyper.fromString('105946095601.5')).to.throw(/bigint/); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/int_test.js b/node_modules/@stellar/js-xdr/test/unit/int_test.js new file mode 100644 index 00000000..12226045 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/int_test.js @@ -0,0 +1,78 @@ +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { XdrReader } from '../../src/serialization/xdr-reader'; +let Int = XDR.Int; + +describe('Int.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00])).to.eql(0); + expect(read([0x00, 0x00, 0x00, 0x01])).to.eql(1); + expect(read([0xff, 0xff, 0xff, 0xff])).to.eql(-1); + expect(read([0x7f, 0xff, 0xff, 0xff])).to.eql(Math.pow(2, 31) - 1); + expect(read([0x80, 0x00, 0x00, 0x00])).to.eql(-Math.pow(2, 31)); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Int.read(io); + } +}); + +describe('Int.write', function () { + it('encodes correctly', function () { + expect(write(0)).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write(1)).to.eql([0x00, 0x00, 0x00, 0x01]); + expect(write(-1)).to.eql([0xff, 0xff, 0xff, 0xff]); + expect(write(Math.pow(2, 31) - 1)).to.eql([0x7f, 0xff, 0xff, 0xff]); + expect(write(-Math.pow(2, 31))).to.eql([0x80, 0x00, 0x00, 0x00]); + }); + + it('throws a write error if the value is not an integral number', function () { + expect(() => write(true)).to.throw(/write error/i); + expect(() => write(undefined)).to.throw(/write error/i); + expect(() => write([])).to.throw(/write error/i); + expect(() => write({})).to.throw(/write error/i); + expect(() => write(1.1)).to.throw(/write error/i); + }); + + function write(value) { + let io = new XdrWriter(8); + Int.write(value, io); + return io.toArray(); + } +}); + +describe('Int.isValid', function () { + it('returns true for number in a 32-bit range', function () { + expect(Int.isValid(0)).to.be.true; + expect(Int.isValid(-1)).to.be.true; + expect(Int.isValid(1.0)).to.be.true; + expect(Int.isValid(Math.pow(2, 31) - 1)).to.be.true; + expect(Int.isValid(-Math.pow(2, 31))).to.be.true; + }); + + it('returns false for numbers outside a 32-bit range', function () { + expect(Int.isValid(Math.pow(2, 31))).to.be.false; + expect(Int.isValid(-(Math.pow(2, 31) + 1))).to.be.false; + expect(Int.isValid(1000000000000)).to.be.false; + }); + + it('returns false for non numbers', function () { + expect(Int.isValid(true)).to.be.false; + expect(Int.isValid(false)).to.be.false; + expect(Int.isValid(null)).to.be.false; + expect(Int.isValid('0')).to.be.false; + expect(Int.isValid([])).to.be.false; + expect(Int.isValid([0])).to.be.false; + expect(Int.isValid('hello')).to.be.false; + expect(Int.isValid({ why: 'hello' })).to.be.false; + expect(Int.isValid(['how', 'do', 'you', 'do'])).to.be.false; + expect(Int.isValid(NaN)).to.be.false; + }); + + it('returns false for non-integral values', function () { + expect(Int.isValid(1.1)).to.be.false; + expect(Int.isValid(0.1)).to.be.false; + expect(Int.isValid(-0.1)).to.be.false; + expect(Int.isValid(-1.1)).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/opaque_test.js b/node_modules/@stellar/js-xdr/test/unit/opaque_test.js new file mode 100644 index 00000000..7bab2169 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/opaque_test.js @@ -0,0 +1,54 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; +let Opaque = XDR.Opaque; + +let subject = new Opaque(3); + +describe('Opaque#read', function () { + it('decodes correctly', function () { + expect(read([0, 0, 0, 0])).to.eql(Buffer.from([0, 0, 0])); + expect(read([0, 0, 1, 0])).to.eql(Buffer.from([0, 0, 1])); + }); + + it('throws a read error if the padding bytes are not zero', function () { + expect(() => read([0, 0, 1, 1])).to.throw(/read error/i); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + const res = subject.read(io); + expect(io._index).to.eql(4, 'padding not processed by the reader'); + return res; + } +}); + +describe('Opaque#write', function () { + it('encodes correctly', function () { + expect(write(Buffer.from([0, 0, 0]))).to.eql([0, 0, 0, 0]); + expect(write(Buffer.from([0, 0, 1]))).to.eql([0, 0, 1, 0]); + }); + + function write(value) { + let io = new XdrWriter(8); + subject.write(value, io); + return io.toArray(); + } +}); + +describe('Opaque#isValid', function () { + it('returns true for buffers of the correct length', function () { + expect(subject.isValid(Buffer.alloc(3))).to.be.true; + }); + + it('returns false for buffers of the wrong size', function () { + expect(subject.isValid(Buffer.alloc(2))).to.be.false; + expect(subject.isValid(Buffer.alloc(4))).to.be.false; + }); + + it('returns false for non buffers', function () { + expect(subject.isValid(true)).to.be.false; + expect(subject.isValid(null)).to.be.false; + expect(subject.isValid(3)).to.be.false; + expect(subject.isValid([0])).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/option_test.js b/node_modules/@stellar/js-xdr/test/unit/option_test.js new file mode 100644 index 00000000..d924bc44 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/option_test.js @@ -0,0 +1,49 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +const subject = new XDR.Option(XDR.Int); + +describe('Option#read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])).to.eql(0); + expect(read([0x00, 0x00, 0x00, 0x00])).to.be.undefined; + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return subject.read(io); + } +}); + +describe('Option#write', function () { + it('encodes correctly', function () { + expect(write(3)).to.eql([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03]); + expect(write(null)).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write(undefined)).to.eql([0x00, 0x00, 0x00, 0x00]); + }); + + function write(value) { + let io = new XdrWriter(8); + subject.write(value, io); + return io.toArray(); + } +}); + +describe('Option#isValid', function () { + it('returns true for values of the correct child type', function () { + expect(subject.isValid(0)).to.be.true; + expect(subject.isValid(-1)).to.be.true; + expect(subject.isValid(1)).to.be.true; + }); + + it('returns true for null and undefined', function () { + expect(subject.isValid(null)).to.be.true; + expect(subject.isValid(undefined)).to.be.true; + }); + + it('returns false for values of the wrong type', function () { + expect(subject.isValid(false)).to.be.false; + expect(subject.isValid('hello')).to.be.false; + expect(subject.isValid({})).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/quadruple_test.js b/node_modules/@stellar/js-xdr/test/unit/quadruple_test.js new file mode 100644 index 00000000..8f1c0af0 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/quadruple_test.js @@ -0,0 +1,35 @@ +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { XdrReader } from '../../src/serialization/xdr-reader'; + +const Quadruple = XDR.Quadruple; + +describe('Quadruple.read', function () { + it('is not supported', function () { + expect(() => read([0x00, 0x00, 0x00, 0x00])).to.throw( + /Type Definition Error/i + ); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Quadruple.read(io); + } +}); + +describe('Quadruple.write', function () { + it('is not supported', function () { + expect(() => write(0.0)).to.throw(/Type Definition Error/i); + }); + + function write(value) { + let io = new XdrWriter(8); + Quadruple.write(value, io); + return io.toArray(); + } +}); + +describe('Quadruple.isValid', function () { + it('returns false', function () { + expect(Quadruple.isValid(1.0)).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/string_test.js b/node_modules/@stellar/js-xdr/test/unit/string_test.js new file mode 100644 index 00000000..5e8ad32f --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/string_test.js @@ -0,0 +1,148 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +let subject = new XDR.String(4); + +describe('String#read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00]).toString('utf8')).to.eql(''); + expect( + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x00]).toString('utf8') + ).to.eql('A'); + expect( + read([0x00, 0x00, 0x00, 0x03, 0xe4, 0xb8, 0x89, 0x00]).toString('utf8') + ).to.eql('三'); + expect( + read([0x00, 0x00, 0x00, 0x02, 0x41, 0x41, 0x00, 0x00]).toString('utf8') + ).to.eql('AA'); + }); + + it('decodes correctly to string', function () { + expect(readString([0x00, 0x00, 0x00, 0x00])).to.eql(''); + expect(readString([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x00])).to.eql( + 'A' + ); + expect(readString([0x00, 0x00, 0x00, 0x03, 0xe4, 0xb8, 0x89, 0x00])).to.eql( + '三' + ); + expect(readString([0x00, 0x00, 0x00, 0x02, 0x41, 0x41, 0x00, 0x00])).to.eql( + 'AA' + ); + }); + + it('decodes non-utf-8 correctly', function () { + let val = read([0x00, 0x00, 0x00, 0x01, 0xd1, 0x00, 0x00, 0x00]); + expect(val[0]).to.eql(0xd1); + }); + + it('throws a read error when the encoded length is greater than the allowed max', function () { + expect(() => + read([0x00, 0x00, 0x00, 0x05, 0x41, 0x41, 0x41, 0x41, 0x41]) + ).to.throw(/read error/i); + }); + + it('throws a read error if the padding bytes are not zero', function () { + expect(() => + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x01, 0x00, 0x00]) + ).to.throw(/read error/i); + expect(() => + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x01, 0x00]) + ).to.throw(/read error/i); + expect(() => + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01]) + ).to.throw(/read error/i); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return subject.read(io); + } + + function readString(bytes) { + const io = new XdrReader(bytes); + const res = subject.readString(io); + expect(io._index).to.eql( + !res ? 4 : 8, + 'padding not processed by the reader' + ); + return res; + } +}); + +describe('String#write', function () { + it('encodes string correctly', function () { + expect(write('')).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write('三')).to.eql([ + 0x00, 0x00, 0x00, 0x03, 0xe4, 0xb8, 0x89, 0x00 + ]); + expect(write('A')).to.eql([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x00]); + expect(write('AA')).to.eql([ + 0x00, 0x00, 0x00, 0x02, 0x41, 0x41, 0x00, 0x00 + ]); + }); + + it('encodes non-utf-8 correctly', function () { + expect(write([0xd1])).to.eql([ + 0x00, 0x00, 0x00, 0x01, 0xd1, 0x00, 0x00, 0x00 + ]); + }); + + it('encodes non-utf-8 correctly (buffer)', function () { + expect(write(Buffer.from([0xd1]))).to.eql([ + 0x00, 0x00, 0x00, 0x01, 0xd1, 0x00, 0x00, 0x00 + ]); + }); + + it('checks actual utf-8 strings length on write', function () { + expect(() => write('€€€€')).to.throw(/max allowed/i); + }); + + function write(value) { + let io = new XdrWriter(8); + subject.write(value, io); + return io.toArray(); + } +}); + +describe('String#isValid', function () { + it('returns true for strings of the correct length', function () { + expect(subject.isValid('')).to.be.true; + expect(subject.isValid('a')).to.be.true; + expect(subject.isValid('aa')).to.be.true; + }); + + it('returns true for arrays of the correct length', function () { + expect(subject.isValid([0x01])).to.be.true; + }); + + it('returns true for buffers of the correct length', function () { + expect(subject.isValid(Buffer.from([0x01]))).to.be.true; + }); + + it('returns false for strings that are too large', function () { + expect(subject.isValid('aaaaa')).to.be.false; + }); + + it('returns false for arrays that are too large', function () { + expect(subject.isValid([0x01, 0x01, 0x01, 0x01, 0x01])).to.be.false; + }); + + it('returns false for buffers that are too large', function () { + expect(subject.isValid(Buffer.from([0x01, 0x01, 0x01, 0x01, 0x01]))).to.be + .false; + }); + + it('returns false for non string/array/buffer', function () { + expect(subject.isValid(true)).to.be.false; + expect(subject.isValid(null)).to.be.false; + expect(subject.isValid(3)).to.be.false; + }); +}); + +describe('String#constructor', function () { + let subject = new XDR.String(); + + it('defaults to max length of a uint max value', function () { + expect(subject._maxLength).to.eql(Math.pow(2, 32) - 1); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/struct_test.js b/node_modules/@stellar/js-xdr/test/unit/struct_test.js new file mode 100644 index 00000000..ee6e50b1 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/struct_test.js @@ -0,0 +1,135 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { Struct } from '../../src/struct'; + +/* jshint -W030 */ + +let emptyContext = { definitions: {}, results: {} }; +let MyRange = XDR.Struct.create(emptyContext, 'MyRange', [ + ['begin', XDR.Int], + ['end', XDR.Int], + ['inclusive', XDR.Bool] +]); + +describe('Struct.read', function () { + it('decodes correctly', function () { + let empty = read([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + expect(empty).to.be.instanceof(MyRange); + expect(empty.begin()).to.eql(0); + expect(empty.end()).to.eql(0); + expect(empty.inclusive()).to.eql(false); + + let filled = read([ + 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01 + ]); + expect(filled).to.be.instanceof(MyRange); + expect(filled.begin()).to.eql(5); + expect(filled.end()).to.eql(255); + expect(filled.inclusive()).to.eql(true); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return MyRange.read(io); + } +}); + +describe('Struct.write', function () { + it('encodes correctly', function () { + let empty = new MyRange({ + begin: 0, + end: 0, + inclusive: false + }); + + expect(write(empty)).to.eql([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + + let filled = new MyRange({ + begin: 5, + end: 255, + inclusive: true + }); + + expect(write(filled)).to.eql([ + 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01 + ]); + }); + + it('throws a write error if the value is not the correct type', function () { + expect(() => write(null)).to.throw(/write error/i); + expect(() => write(undefined)).to.throw(/write error/i); + expect(() => write([])).to.throw(/write error/i); + expect(() => write({})).to.throw(/write error/i); + expect(() => write(1)).to.throw(/write error/i); + expect(() => write(true)).to.throw(/write error/i); + }); + + it('throws a write error if the struct is not valid', function () { + expect(() => write(new MyRange({}))).to.throw(/write error/i); + }); + + function write(value) { + let io = new XdrWriter(256); + MyRange.write(value, io); + return io.toArray(); + } +}); + +describe('Struct.isValid', function () { + it('returns true for instances of the struct', function () { + expect(MyRange.isValid(new MyRange({}))).to.be.true; + }); + + it('works for "struct-like" objects', function () { + class FakeStruct extends Struct {} + + FakeStruct.structName = 'MyRange'; + let r = new FakeStruct(); + expect(MyRange.isValid(r)).to.be.true; + + FakeStruct.structName = 'NotMyRange'; + r = new FakeStruct(); + expect(MyRange.isValid(r)).to.be.false; + }); + + it('returns false for anything else', function () { + expect(MyRange.isValid(null)).to.be.false; + expect(MyRange.isValid(undefined)).to.be.false; + expect(MyRange.isValid([])).to.be.false; + expect(MyRange.isValid({})).to.be.false; + expect(MyRange.isValid(1)).to.be.false; + expect(MyRange.isValid(true)).to.be.false; + }); +}); + +describe('Struct.validateXDR', function () { + it('returns true for valid XDRs', function () { + let subject = new MyRange({ begin: 5, end: 255, inclusive: true }); + expect(MyRange.validateXDR(subject.toXDR())).to.be.true; + expect(MyRange.validateXDR(subject.toXDR('hex'), 'hex')).to.be.true; + expect(MyRange.validateXDR(subject.toXDR('base64'), 'base64')).to.be.true; + }); + + it('returns false for invalid XDRs', function () { + expect(MyRange.validateXDR(Buffer.alloc(1))).to.be.false; + expect(MyRange.validateXDR('00', 'hex')).to.be.false; + expect(MyRange.validateXDR('AA==', 'base64')).to.be.false; + }); +}); + +describe('Struct: attributes', function () { + it('properly retrieves attributes', function () { + let subject = new MyRange({ begin: 5, end: 255, inclusive: true }); + expect(subject.begin()).to.eql(5); + }); + + it('properly sets attributes', function () { + let subject = new MyRange({ begin: 5, end: 255, inclusive: true }); + expect(subject.begin(10)).to.eql(10); + expect(subject.begin()).to.eql(10); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/struct_union_test.js b/node_modules/@stellar/js-xdr/test/unit/struct_union_test.js new file mode 100644 index 00000000..8e32120b --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/struct_union_test.js @@ -0,0 +1,43 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; + +/* jshint -W030 */ + +let emptyContext = { definitions: {}, results: {} }; + +let Ext = XDR.Union.create(emptyContext, 'Ext', { + switchOn: XDR.Int, + switches: [ + [0, XDR.Void], + [1, XDR.Int] + ] +}); + +let StructUnion = XDR.Struct.create(emptyContext, 'StructUnion', [ + ['id', XDR.Int], + ['ext', Ext] +]); + +describe('StructUnion.read', function () { + it('decodes correctly', function () { + let empty = read([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]); + expect(empty).to.be.instanceof(StructUnion); + expect(empty.id()).to.eql(1); + expect(empty.ext().switch()).to.eql(0); + expect(empty.ext().arm()).to.eql(XDR.Void); + + let filled = read([ + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02 + ]); + + expect(filled).to.be.instanceof(StructUnion); + expect(filled.id()).to.eql(2); + expect(filled.ext().switch()).to.eql(1); + expect(filled.ext().arm()).to.eql(XDR.Int); + expect(filled.ext().value()).to.eql(2); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return StructUnion.read(io); + } +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/union_test.js b/node_modules/@stellar/js-xdr/test/unit/union_test.js new file mode 100644 index 00000000..cd57f746 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/union_test.js @@ -0,0 +1,161 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; +import { XdrPrimitiveType } from '../../src/xdr-type'; + +/* jshint -W030 */ + +let emptyContext = { definitions: {}, results: {} }; +let ResultType = XDR.Enum.create(emptyContext, 'ResultType', { + ok: 0, + error: 1, + nonsense: 2 +}); + +let Result = XDR.Union.create(emptyContext, 'Result', { + switchOn: ResultType, + switches: [ + ['ok', XDR.Void], + ['error', 'code'] + ], + defaultArm: XDR.Void, + arms: { + code: XDR.Int + } +}); + +let Ext = XDR.Union.create(emptyContext, 'Ext', { + switchOn: XDR.Int, + switches: [[0, XDR.Void]] +}); + +describe('Union.armForSwitch', function () { + it('returns the defined arm for the provided switch', function () { + expect(Result.armForSwitch(ResultType.ok())).to.eql(XDR.Void); + expect(Result.armForSwitch(ResultType.error())).to.eql('code'); + }); + + it('returns the default arm if no specific arm is defined', function () { + expect(Result.armForSwitch(ResultType.nonsense())).to.eql(XDR.Void); + }); + + it('works for XDR.Int discriminated unions', function () { + expect(Ext.armForSwitch(0)).to.eql(XDR.Void); + }); +}); + +describe('Union: constructor', function () { + it('works for XDR.Int discriminated unions', function () { + expect(() => new Ext(0)).to.not.throw(); + }); + + it('works for Enum discriminated unions', function () { + expect(() => new Result('ok')).to.not.throw(); + expect(() => new Result(ResultType.ok())).to.not.throw(); + }); +}); + +describe('Union: set', function () { + it('works for XDR.Int discriminated unions', function () { + let u = new Ext(0); + u.set(0); + }); + + it('works for Enum discriminated unions', function () { + let u = Result.ok(); + + expect(() => u.set('ok')).to.not.throw(); + expect(() => u.set('notok')).to.throw(/not a member/); + expect(() => u.set(ResultType.ok())).to.not.throw(); + }); +}); + +describe('Union.read', function () { + it('decodes correctly', function () { + let ok = read([0x00, 0x00, 0x00, 0x00]); + + expect(ok).to.be.instanceof(Result); + expect(ok.switch()).to.eql(ResultType.ok()); + expect(ok.arm()).to.eql(XDR.Void); + expect(ok.armType()).to.eql(XDR.Void); + expect(ok.value()).to.be.undefined; + + let error = read([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05]); + + expect(error).to.be.instanceof(Result); + expect(error.switch()).to.eql(ResultType.error()); + expect(error.arm()).to.eql('code'); + expect(error.armType()).to.eql(XDR.Int); + expect(error.value()).to.eql(5); + expect(error.code()).to.eql(5); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return Result.read(io); + } +}); + +describe('Union.write', function () { + it('encodes correctly', function () { + let ok = Result.ok(); + + expect(write(ok)).to.eql([0x00, 0x00, 0x00, 0x00]); + + let error = Result.error(5); + + expect(write(error)).to.eql([ + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05 + ]); + }); + + it('throws a write error if the value is not the correct type', function () { + expect(() => write(null)).to.throw(/write error/i); + expect(() => write(undefined)).to.throw(/write error/i); + expect(() => write([])).to.throw(/write error/i); + expect(() => write({})).to.throw(/write error/i); + expect(() => write(1)).to.throw(/write error/i); + expect(() => write(true)).to.throw(/write error/i); + }); + + function write(value) { + let io = new XdrWriter(256); + Result.write(value, io); + return io.toArray(); + } +}); + +describe('Union.isValid', function () { + it('returns true for instances of the union', function () { + expect(Result.isValid(Result.ok())).to.be.true; + expect(Result.isValid(Result.error(1))).to.be.true; + expect(Result.isValid(Result.nonsense())).to.be.true; + }); + + it('works for "union-like" objects', function () { + class FakeUnion extends XdrPrimitiveType {} + + FakeUnion.unionName = 'Result'; + let r = new FakeUnion(); + expect(Result.isValid(r)).to.be.true; + + FakeUnion.unionName = 'NotResult'; + r = new FakeUnion(); + expect(Result.isValid(r)).to.be.false; + + // make sure you can't fool it + FakeUnion.unionName = undefined; + FakeUnion.structName = 'Result'; + r = new FakeUnion(); + expect(Result.isValid(r)).to.be.false; + }); + + it('returns false for anything else', function () { + expect(Result.isValid(null)).to.be.false; + expect(Result.isValid(undefined)).to.be.false; + expect(Result.isValid([])).to.be.false; + expect(Result.isValid({})).to.be.false; + expect(Result.isValid(1)).to.be.false; + expect(Result.isValid(true)).to.be.false; + expect(Result.isValid('ok')).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/unsigned-hyper_test.js b/node_modules/@stellar/js-xdr/test/unit/unsigned-hyper_test.js new file mode 100644 index 00000000..6a1f773c --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/unsigned-hyper_test.js @@ -0,0 +1,74 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +const UnsignedHyper = XDR.UnsignedHyper; + +describe('UnsignedHyper.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])).to.eql( + UnsignedHyper.fromString('0') + ); + expect(read([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01])).to.eql( + UnsignedHyper.fromString('1') + ); + expect(read([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])).to.eql( + new UnsignedHyper(UnsignedHyper.MAX_VALUE) + ); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return UnsignedHyper.read(io); + } +}); + +describe('UnsignedHyper.write', function () { + it('encodes correctly', function () { + expect(write(UnsignedHyper.fromString('0'))).to.eql([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]); + expect(write(UnsignedHyper.fromString('1'))).to.eql([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + ]); + expect(write(UnsignedHyper.MAX_VALUE)).to.eql([ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + ]); + }); + + function write(value) { + let io = new XdrWriter(8); + UnsignedHyper.write(value, io); + return io.toArray(); + } +}); + +describe('UnsignedHyper.isValid', function () { + it('returns true for UnsignedHyper instances', function () { + expect(UnsignedHyper.isValid(UnsignedHyper.fromString('1'))).to.be.true; + expect(UnsignedHyper.isValid(UnsignedHyper.MIN_VALUE)).to.be.true; + expect(UnsignedHyper.isValid(UnsignedHyper.MAX_VALUE)).to.be.true; + }); + + it('returns false for non UnsignedHypers', function () { + expect(UnsignedHyper.isValid(null)).to.be.false; + expect(UnsignedHyper.isValid(undefined)).to.be.false; + expect(UnsignedHyper.isValid([])).to.be.false; + expect(UnsignedHyper.isValid({})).to.be.false; + expect(UnsignedHyper.isValid(1)).to.be.false; + expect(UnsignedHyper.isValid(true)).to.be.false; + }); +}); + +describe('UnsignedHyper.fromString', function () { + it('works for positive numbers', function () { + expect(UnsignedHyper.fromString('1059').toString()).to.eql('1059'); + }); + + it('fails for negative numbers', function () { + expect(() => UnsignedHyper.fromString('-1059')).to.throw(/positive/); + }); + + it('fails when providing a string with a decimal place', function () { + expect(() => UnsignedHyper.fromString('105946095601.5')).to.throw(/bigint/); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/unsigned-int_test.js b/node_modules/@stellar/js-xdr/test/unit/unsigned-int_test.js new file mode 100644 index 00000000..d8ff8713 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/unsigned-int_test.js @@ -0,0 +1,70 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; +let UnsignedInt = XDR.UnsignedInt; + +describe('UnsignedInt.read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00])).to.eql(0); + expect(read([0x00, 0x00, 0x00, 0x01])).to.eql(1); + expect(read([0xff, 0xff, 0xff, 0xff])).to.eql(Math.pow(2, 32) - 1); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return UnsignedInt.read(io); + } +}); + +describe('UnsignedInt.write', function () { + it('encodes correctly', function () { + expect(write(0)).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write(1)).to.eql([0x00, 0x00, 0x00, 0x01]); + expect(write(Math.pow(2, 32) - 1)).to.eql([0xff, 0xff, 0xff, 0xff]); + }); + + it('throws a write error if the value is not an integral number', function () { + expect(() => write(true)).to.throw(/write error/i); + expect(() => write(undefined)).to.throw(/write error/i); + expect(() => write([])).to.throw(/write error/i); + expect(() => write({})).to.throw(/write error/i); + expect(() => write(1.1)).to.throw(/write error/i); + }); + + function write(value) { + let io = new XdrWriter(8); + UnsignedInt.write(value, io); + return io.toArray(); + } +}); + +describe('UnsignedInt.isValid', function () { + it('returns true for number in a 32-bit range', function () { + expect(UnsignedInt.isValid(0)).to.be.true; + expect(UnsignedInt.isValid(1)).to.be.true; + expect(UnsignedInt.isValid(1.0)).to.be.true; + expect(UnsignedInt.isValid(Math.pow(2, 32) - 1)).to.be.true; + }); + + it('returns false for numbers outside a 32-bit range', function () { + expect(UnsignedInt.isValid(Math.pow(2, 32))).to.be.false; + expect(UnsignedInt.isValid(-1)).to.be.false; + }); + + it('returns false for non numbers', function () { + expect(UnsignedInt.isValid(true)).to.be.false; + expect(UnsignedInt.isValid(false)).to.be.false; + expect(UnsignedInt.isValid(null)).to.be.false; + expect(UnsignedInt.isValid('0')).to.be.false; + expect(UnsignedInt.isValid([])).to.be.false; + expect(UnsignedInt.isValid([0])).to.be.false; + expect(UnsignedInt.isValid('hello')).to.be.false; + expect(UnsignedInt.isValid({ why: 'hello' })).to.be.false; + expect(UnsignedInt.isValid(['how', 'do', 'you', 'do'])).to.be.false; + expect(UnsignedInt.isValid(NaN)).to.be.false; + }); + + it('returns false for non-integral values', function () { + expect(UnsignedInt.isValid(1.1)).to.be.false; + expect(UnsignedInt.isValid(0.1)).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/var-array_test.js b/node_modules/@stellar/js-xdr/test/unit/var-array_test.js new file mode 100644 index 00000000..fbaa22c0 --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/var-array_test.js @@ -0,0 +1,87 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +const subject = new XDR.VarArray(XDR.Int, 2); + +describe('VarArray#read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00])).to.eql([]); + + expect(read([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])).to.eql([0]); + expect(read([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01])).to.eql([1]); + + expect( + read([ + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + ]) + ).to.eql([0, 1]); + expect( + read([ + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01 + ]) + ).to.eql([1, 1]); + }); + + it('throws read error when the encoded array is too large', function () { + expect(() => read([0x00, 0x00, 0x00, 0x03])).to.throw(/read error/i); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return subject.read(io); + } +}); + +describe('VarArray#write', function () { + it('encodes correctly', function () { + expect(write([])).to.eql([0x00, 0x00, 0x00, 0x00]); + expect(write([0])).to.eql([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]); + expect(write([0, 1])).to.eql([ + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + ]); + }); + + it('throws a write error if the value is too large', function () { + expect(() => write([1, 2, 3])).to.throw(/write error/i); + }); + + it('throws a write error if a child element is of the wrong type', function () { + expect(() => write([1, null])).to.throw(/write error/i); + expect(() => write([1, undefined])).to.throw(/write error/i); + expect(() => write([1, 'hi'])).to.throw(/write error/i); + }); + + function write(value) { + let io = new XdrWriter(256); + subject.write(value, io); + return io.toArray(); + } +}); + +describe('VarArray#isValid', function () { + it('returns true for an array of the correct sizes with the correct types', function () { + expect(subject.isValid([])).to.be.true; + expect(subject.isValid([1])).to.be.true; + expect(subject.isValid([1, 2])).to.be.true; + }); + + it('returns false for arrays of the wrong size', function () { + expect(subject.isValid([1, 2, 3])).to.be.false; + }); + + it('returns false if a child element is invalid for the child type', function () { + expect(subject.isValid([1, null])).to.be.false; + expect(subject.isValid([1, undefined])).to.be.false; + expect(subject.isValid([1, 'hello'])).to.be.false; + expect(subject.isValid([1, []])).to.be.false; + expect(subject.isValid([1, {}])).to.be.false; + }); +}); + +describe('VarArray#constructor', function () { + let subject = new XDR.VarArray(XDR.Int); + + it('defaults to max length of a uint max value', function () { + expect(subject._maxLength).to.eql(Math.pow(2, 32) - 1); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/var-opaque_test.js b/node_modules/@stellar/js-xdr/test/unit/var-opaque_test.js new file mode 100644 index 00000000..ee85a8bd --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/var-opaque_test.js @@ -0,0 +1,84 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +const VarOpaque = XDR.VarOpaque; + +let subject = new VarOpaque(2); + +describe('VarOpaque#read', function () { + it('decodes correctly', function () { + expect(read([0, 0, 0, 0])).to.eql(Buffer.from([])); + expect(read([0, 0, 0, 1, 0, 0, 0, 0])).to.eql(Buffer.from([0])); + expect(read([0, 0, 0, 1, 1, 0, 0, 0])).to.eql(Buffer.from([1])); + expect(read([0, 0, 0, 2, 0, 1, 0, 0])).to.eql(Buffer.from([0, 1])); + }); + + it('throws a read error when the encoded length is greater than the allowed max', function () { + expect(() => read([0, 0, 0, 3, 0, 0, 0, 0])).to.throw(/read error/i); + }); + + it('throws a read error if the padding bytes are not zero', function () { + expect(() => + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x01, 0x00, 0x00]) + ).to.throw(/read error/i); + expect(() => + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x01, 0x00]) + ).to.throw(/read error/i); + expect(() => + read([0x00, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01]) + ).to.throw(/read error/i); + }); + + function read(bytes) { + let io = new XdrReader(bytes); + const res = subject.read(io); + expect(io._index).to.eql( + !res.length ? 4 : 8, + 'padding not processed by the reader' + ); + return res; + } +}); + +describe('VarOpaque#write', function () { + it('encodes correctly', function () { + expect(write(Buffer.from([]))).to.eql([0, 0, 0, 0]); + expect(write(Buffer.from([0]))).to.eql([0, 0, 0, 1, 0, 0, 0, 0]); + expect(write(Buffer.from([1]))).to.eql([0, 0, 0, 1, 1, 0, 0, 0]); + expect(write(Buffer.from([0, 1]))).to.eql([0, 0, 0, 2, 0, 1, 0, 0]); + }); + + function write(value) { + let io = new XdrWriter(8); + subject.write(value, io); + return io.toArray(); + } +}); + +describe('VarOpaque#isValid', function () { + it('returns true for buffers of the correct length', function () { + expect(subject.isValid(Buffer.alloc(0))).to.be.true; + expect(subject.isValid(Buffer.alloc(1))).to.be.true; + expect(subject.isValid(Buffer.alloc(2))).to.be.true; + }); + + it('returns false for buffers of the wrong size', function () { + expect(subject.isValid(Buffer.alloc(3))).to.be.false; + expect(subject.isValid(Buffer.alloc(3000))).to.be.false; + }); + + it('returns false for non buffers', function () { + expect(subject.isValid(true)).to.be.false; + expect(subject.isValid(null)).to.be.false; + expect(subject.isValid(3)).to.be.false; + expect(subject.isValid([0])).to.be.false; + }); +}); + +describe('VarOpaque#constructor', function () { + let subject = new XDR.VarOpaque(); + + it('defaults to max length of a uint max value', function () { + expect(subject._maxLength).to.eql(Math.pow(2, 32) - 1); + }); +}); diff --git a/node_modules/@stellar/js-xdr/test/unit/void_test.js b/node_modules/@stellar/js-xdr/test/unit/void_test.js new file mode 100644 index 00000000..08dc20ac --- /dev/null +++ b/node_modules/@stellar/js-xdr/test/unit/void_test.js @@ -0,0 +1,44 @@ +import { XdrReader } from '../../src/serialization/xdr-reader'; +import { XdrWriter } from '../../src/serialization/xdr-writer'; + +let subject = XDR.Void; + +describe('Void#read', function () { + it('decodes correctly', function () { + expect(read([0x00, 0x00, 0x00, 0x00])).to.be.undefined; + expect(read([0x00, 0x00, 0x00, 0x01])).to.be.undefined; + expect(read([0x00, 0x00, 0x00, 0x02])).to.be.undefined; + }); + + function read(bytes) { + let io = new XdrReader(bytes); + return subject.read(io); + } +}); + +describe('Void#write', function () { + it('encodes correctly', function () { + expect(write(undefined)).to.eql([]); + }); + + function write(value) { + let io = new XdrWriter(8); + subject.write(value, io); + return io.toArray(); + } +}); + +describe('Void#isValid', function () { + it('returns true undefined', function () { + expect(subject.isValid(undefined)).to.be.true; + }); + + it('returns false for anything defined', function () { + expect(subject.isValid(null)).to.be.false; + expect(subject.isValid(false)).to.be.false; + expect(subject.isValid(1)).to.be.false; + expect(subject.isValid('aaa')).to.be.false; + expect(subject.isValid({})).to.be.false; + expect(subject.isValid([undefined])).to.be.false; + }); +}); diff --git a/node_modules/@stellar/js-xdr/webpack.config.js b/node_modules/@stellar/js-xdr/webpack.config.js new file mode 100644 index 00000000..f378abcb --- /dev/null +++ b/node_modules/@stellar/js-xdr/webpack.config.js @@ -0,0 +1,57 @@ +const path = require('path'); +const webpack = require('webpack'); +const TerserPlugin = require('terser-webpack-plugin'); + +const browserBuild = !process.argv.includes('--mode=development'); + +module.exports = function () { + const mode = browserBuild ? 'production' : 'development'; + const config = { + mode, + devtool: 'source-map', + entry: { + xdr: [path.join(__dirname, '/src/browser.js')] + }, + output: { + path: path.join(__dirname, browserBuild ? './dist' : './lib'), + filename: '[name].js', + library: { + name: 'XDR', + type: 'umd' + }, + globalObject: 'this' + }, + module: { + rules: [ + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/ + } + ] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(mode) + }) + ] + }; + if (browserBuild) { + config.optimization = { + minimize: true, + minimizer: [ + new TerserPlugin({ + parallel: true + }) + ] + }; + config.plugins.push( + new webpack.ProvidePlugin({ + Buffer: [path.resolve(__dirname, 'buffer.js'), 'default'] + }) + ); + } else { + config.target = 'node'; + } + return config; +}; diff --git a/node_modules/@stellar/stellar-base/CHANGELOG.md b/node_modules/@stellar/stellar-base/CHANGELOG.md new file mode 100644 index 00000000..6c15ac0d --- /dev/null +++ b/node_modules/@stellar/stellar-base/CHANGELOG.md @@ -0,0 +1,1393 @@ +# Changelog + +## Unreleased + +## [`v13.1.0`](https://github.com/stellar/js-stellar-base/compare/v13.0.1...v13.1.0) + +### Added +* `nativeToScVal` now supports encoding `Keypair`s as addresses ([#794](https://github.com/stellar/js-stellar-base/pull/794)). +* Within `authorizeEntry`, the `SigningCallback` callback function should now return an object containing both the signature and the identity of the signer. In multi-signature situations, it isn't necessarily the case that the address within the authorization entry is the one that actually signs that entry. Thus, the callback now takes the following form, where the original `Promise` option is preserved for backwards compatibility and should be considered deprecated ([#783](https://github.com/stellar/js-stellar-base/pull/783)): +```typescript +export type SigningCallback = ( + preimage: xdr.HashIdPreimage +) => Promise< + BufferLike | + { signature: BufferLike, publicKey: string } +>; +``` + +### Fixed +* `scValToNative` will decode addresses more efficiently and reliably ([#794](https://github.com/stellar/js-stellar-base/pull/794)). + + +## [`v13.0.1`](https://github.com/stellar/js-stellar-base/compare/v13.0.0...v13.0.1) + +### Fixed +* `buildInvocationTree` will now successfully walk creation invocations with constructor arguments ([#784](https://github.com/stellar/js-stellar-base/pull/784)). + + +## [`v13.0.0`](https://github.com/stellar/js-stellar-base/compare/v12.1.1...v13.0.0) + +**This release supports Protocol 22.** While the network has not upgraded yet, you can start integrating the new features into your codebase if you want a head start. Keep in mind that while the binary XDR is backwards-compatible, the naming and layout of structures is not. In other words, this build will continue to work on Protocol 21, but you may have to update code that references XDR directly. + +This version is unchanged from [`beta.1`](#v13.0.0-beta.1). + + +## [`v13.0.0-beta.1`](https://github.com/stellar/js-stellar-base/compare/v12.1.1...v13.0.0-beta.1) + +**This is the first release that supports Protocol 22.** While the network has not upgraded yet, you can start integrating the new features into your codebase if you want a head start. Keep in mind that while the binary XDR is backwards-compatible, the naming and layout of structures is not. In other words, this build will continue to work on Protocol 21, but you may have to update code that references XDR directly. + +### Breaking Changes +* XDR definitions have been upgraded to Protocol 22 ([#777](https://github.com/stellar/js-stellar-base/pull/777)). + +### Added +* You can create contracts with constructors a new, optional parameter of `Operation.createCustomContract`, `constructorArgs: xdr.ScVal[]` ([#770](https://github.com/stellar/js-stellar-base/pull/770)). + + +## [`v12.1.1`](https://github.com/stellar/js-stellar-base/compare/v12.1.0...v12.1.1) + +### Fixed +* Add missing methods to TypeScript definitions ([#766](https://github.com/stellar/js-stellar-base/pull/766)). +* Fix the TypeScript definition of `walkInvocationTree` to allow void returns on the callback function as intended rather than forcing a `return null` ([#765](https://github.com/stellar/js-stellar-base/pull/765)). +* Fix `authorizeEntry` to use the correct public key when passing `Keypair`s ([#772](https://github.com/stellar/js-stellar-base/pull/772)). +* Upgrade misc. dependencies ([#771](https://github.com/stellar/js-stellar-base/pull/771), [#773](https://github.com/stellar/js-stellar-base/pull/773)). + + +## [`v12.1.0`](https://github.com/stellar/js-stellar-base/compare/v12.0.1...v12.1.0) + +### Added +* `TransactionBuilder` now has `addOperationAt` and `clearOperationAt` methods to allow manipulation of individual operations ([#757](https://github.com/stellar/js-stellar-base/pull/757)). + +### Fixed +* Improve the efficiency and portability of asset type retrieval ([#758](https://github.com/stellar/js-stellar-base/pull/758)). +* `nativeToScVal` now correctly sorts maps lexicographically based on the keys to match what the Soroban environment expects ([#759](https://github.com/stellar/js-stellar-base/pull/759)). +* `nativeToScVal` now allows all integer types to come from strings ([#763](https://github.com/stellar/js-stellar-base/pull/763)). +* `humanizeEvents` now handles events without a `contractId` set more reliably ([#764](https://github.com/stellar/js-stellar-base/pull/764)). + + +## [`v12.0.1`](https://github.com/stellar/js-stellar-base/compare/v12.0.0...v12.0.1) + +### Fixed +* Export TypeScript definition for `StrKey.isValidContract` ([#751](https://github.com/stellar/js-stellar-base/pull/751)). +* `scValToNative` would fail when the values contained error codes because the parsing routine hadn't been updated to the new error schemas. Errors are now converted to the following format ([#753](https://github.com/stellar/js-stellar-base/pull/753)): + +```typescript +interface Error { + type: "contract" | "system"; + code: number; + value?: string; // only present for type === 'system' +} +``` + +You can refer to the [XDR documentation](https://github.com/stellar/stellar-xdr/blob/70180d5e8d9caee9e8645ed8a38c36a8cf403cd9/Stellar-contract.x#L76-L115) for additional explanations for each error code. + + +## [`v12.0.0`](https://github.com/stellar/js-stellar-base/compare/v11.0.1...v12.0.0) + +This is a re-tag of v12.0.0-rc.1 with only developer dependency updates in-between. + + +## [`v12.0.0-rc.1`](https://github.com/stellar/js-stellar-base/compare/v11.0.1...v12.0.0-rc.1) + +### Breaking Changes +* The generated XDR has been upgraded to match the upcoming Protocol 21, namely [stellar/stellar-xdr@`1a04392`](https://github.com/stellar/stellar-xdr/commit/1a04392432dacc0092caaeae22a600ea1af3c6a5) ([#738](https://github.com/stellar/js-stellar-base/pull/738)). + +### Added +* To facilitate serialization and deserialization for downstream systems, this package now exports `cereal.XdrWriter` and `cereal.XdrReader` which come directly from `@stellar/js-xdr` ([#744](https://github.com/stellar/js-stellar-base/pull/744)). + +### Fixed +* Updated various dependencies ([#737](https://github.com/stellar/js-stellar-base/pull/737), [#739](https://github.com/stellar/js-stellar-base/pull/739)). +* `Buffer` and `Uint8Array` compatibility has improved in `StrKey` ([#746](https://github.com/stellar/js-stellar-base/pull/746)). + + +## [`v11.0.1`](https://github.com/stellar/js-stellar-base/compare/v11.0.0...v11.0.1) + +### Fixed +* Add compatibility with pre-ES2016 environments (like some React Native JS compilers) by adding a custom `Buffer.subarray` polyfill ([#733](https://github.com/stellar/js-stellar-base/pull/733)). +* Upgrade underlying dependencies, including `@stellar/js-xdr` which should broaden compatibility to pre-ES2016 environments ([#734](https://github.com/stellar/js-stellar-base/pull/734), [#735](https://github.com/stellar/js-stellar-base/pull/735)). + + +## [`v11.0.0`](https://github.com/stellar/js-stellar-base/compare/v10.0.2...v11.0.0) + +**Note:** This version is (still) compatible with Protocol 20. Most people should be unaffected by the technically-breaking changes below and can treat this more like a v10.0.3 patch release. + +### Breaking Changes +* Starting from **v10.0.0-beta.0**, we set [`BigNumber.DEBUG`](https://mikemcl.github.io/bignumber.js/#debug) in `bignumber.js` to `true` internally, which affects all code using `BigNumber`. This behavior has been fixed and only affects this library: globally, `BigNumber.DEBUG` now remains at its default setting (i.e. disabled). This is technically a breaking behavior change and is released as such ([#729](https://github.com/stellar/js-stellar-base/pull/729)). + +### Fixed +* Dependencies have been updated to their latest compatible versions ([#726](https://github.com/stellar/js-stellar-base/pull/729), [#730](https://github.com/stellar/js-stellar-base/pull/730)). + + +## [`v10.0.2`](https://github.com/stellar/js-stellar-base/compare/v10.0.1...v10.0.2) + +### Fixed +* The `contractId` field is correctly omitted from humanized events when it wasn't present in the structure ([#721](https://github.com/stellar/js-stellar-base/pull/721)). +* Misc. outdated or incorrect documentation has been updated ([#723](https://github.com/stellar/js-stellar-base/pull/723), [#720](https://github.com/stellar/js-stellar-base/pull/720)). +* Dependencies have been updated ([#724](https://github.com/stellar/js-stellar-base/pull/724)). + + +## [`v10.0.1`](https://github.com/stellar/js-stellar-base/compare/v10.0.0...v10.0.1) + +### Fixed +* The TypeScript definition for `Asset.contractId()` now includes a missing parameter (the `networkPassphrase` changes the ID for a contract; [#718](https://github.com/stellar/js-stellar-base/pull/#718)). + + +## [`v10.0.0`](https://github.com/stellar/js-stellar-base/compare/v9.0.0...v10.0.0): Protocol 20 Stable Release + +### Breaking Changes +* The new minimum supported Node version is Node 18. +* XDR has been upgraded to the latest stable version ([stellar-xdr@`6a620d1`](https://github.com/stellar/stellar-xdr/tree/6a620d160aab22609c982d54578ff6a63bfcdc01)). This is mostly renames, but it includes the following relevant breaking changes ([#704](https://github.com/stellar/js-stellar-base/pull/704)): + - `Operation.bumpFootprintExpiration` is now `extendFootprintTtl` and its `ledgersToExpire` field is now named `extendTo`, but it serves the same purpose. + - In TypeScript, the `Operation.BumpFootprintExpiration` is now `Operation.ExtendFootprintTTL` + - `xdr.ContractExecutable.contractExecutableToken` is now `contractExecutableStellarAsset` + - `xdr.SorobanTransactionData.refundableFee` is now `resourceFee` + - In turn, `SorobanDataBuilder.setRefundableFee` is now `setResourceFee` + - This new fee encompasses the entirety of the Soroban-related resource fees. Note that this is distinct from the "network-inclusion" fee that you would set on your transaction (i.e. `TransactionBuilder(..., { fee: ... })`). +- `Contract.getFootprint()` now only returns a single result: the ledger key of the deployed instance for the given ID, because the key for the code entry was incorrect (it should not be the ID but rather the WASM hash, which is not calculatable w/o network access) ([#709](https://github.com/stellar/js-stellar-base/pull/709)). + + +## [`v10.0.0-beta.4`](https://github.com/stellar/js-stellar-base/compare/v10.0.0-beta.3...v10.0.0-beta.4) + +### Fixed +- You can now correctly clone transactions (`TransactionBuilder.cloneFrom`) with large sequence numbers ([#711](https://github.com/stellar/js-stellar-base/pull/711)). + + +## [`v10.0.0-beta.3`](https://github.com/stellar/js-stellar-base/compare/v10.0.0-beta.2...v10.0.0-beta.3) + +### Fixed +* Fixes a bug where `authorizeEntry` might perform a no-op when it shouldn't ([#701](https://github.com/stellar/js-stellar-base/pull/701)). +* Fixes a TypeScript bug where `Memo.hash` did not accept a `Buffer` ([#698](https://github.com/stellar/js-stellar-base/pull/698)). +* Upgrades a transient dependency for security ([#296](https://github.com/stellar/js-stellar-base/pull/696)). + + +## [`v10.0.0-beta.2`](https://github.com/stellar/js-stellar-base/compare/v10.0.0-beta.1...v10.0.0-beta.2) + +### Breaking Changes + * The wrappers around multi-party authorization have changed ([#678](https://github.com/stellar/js-stellar-base/pull/678)): + - `authorizeEntry` has been added to help sign auth entries in-place + - the signature for `authorizeInvocation` has changed: it now offers a callback approach by default and requires slightly different parameters + - `buildAuthEntry`, `buildAuthEnvelope`, and `authorizeInvocationCallback` have been removed + +### Fixed + * The TypeScript definitions for XDR schemas now point to the current protocol rather than vNext ([#694](https://github.com/stellar/js-stellar-base/pull/694)). + * Misc. dependencies have been updated to their latest versions ([#694](https://github.com/stellar/js-stellar-base/pull/694)). + + +## [`v10.0.0-beta.1`](https://github.com/stellar/js-stellar-base/compare/v10.0.0-beta.0...v10.0.0-beta.1) + +### Fixed + * `nativeToScVal` now allows anything to be passed to the `opts.type` specifier. Previously, it was only integer types ([#691](https://github.com/stellar/js-stellar-base/pull/691)). + * `Contract.call()` now produces valid `Operation` XDR ([#692](https://github.com/stellar/js-stellar-base/pull/692)). + + +## [`v10.0.0-beta.0`](https://github.com/stellar/js-stellar-base/compare/v9.0.0...v10.0.0-beta.0): Protocol 20 + +### Breaking Changes + * **Node 16 is the new minimum version** to use the SDKs. + * The XDR has been massively overhauled to support [Soroban in Protocol 20](https://soroban.stellar.org/docs/category/fundamentals-and-concepts), which means new operations, data structures, and a transaction format as well as new overlay features ([#538](https://github.com/stellar/js-stellar-base/pull/538)). + +The core data structure of Soroban is a generic type called an `ScVal` (**s**mart **c**ontract **val**ue, which is a union of types that can basically represent anything [numbers, strings, arrays, maps, contract bytecode, etc.]). You can refer to the XDR for details, and you can utilize new APIs to make dealing with these complex values easier: + - `nativeToScVal` helps convert native types to their closest Soroban equivalent + - `scValToNative` helps find the closest native JavaScript type(s) corresponding to a smart contract value + - `scValToBigInt` helps convert numeric `ScVal`s into native `bigint`s + - `ScInt` and `XdrLargeInt` help convert to and from `bigint`s to other types and form sized integer types for smart contract usage + +### Added +The following are new APIs to deal with new Soroban constructs: + - **`Address`, which helps manage "smart" addresses in the Soroban context.** Addresses there (used for auth and identity purposes) can either be contracts (strkey `C...`) or accounts (strkey `G...`). This abstraction helps manage them and distinguish between them easily. + - **`Contract`, which helps manage contract identifiers.** The primary purpose is to build invocations of its methods via the generic `call(...)`, but it also provides utilities for converting to an `Address` or calculating its minimum footprint for state expiration. + - **Three new operations** have been added related to Soroban transactions: + * `invokeHostFunction` for calling contract code + * `bumpFootprintExpiration` for extending the state lifetime of Soroban data + * `restoreFootprint` for restoring expired, off-chain state back onto the ledger + - The `TransactionBuilder` now takes a `sorobanData` parameter (and has a corresponding `.setSorobanData()` builder method) which primarily describes the storage footprint of a Soroban (that is, which parts of the ledger state [in the form of `xdr.LedgerKey`s] it plans to read and write as part of the transaction). + * To facilitate building this out, there's a new `SorobanDataBuilder` factory to set fields individually + - The `TransactionBuilder` now has a `cloneFrom(tx, opts)` constructor method to create an instance from an existing transaction, also allowing parameter overrides via `opts`. + - The following are convenience methods for building out certain types of smart contract-related structures: + * `buildInvocationTree` and `walkInvocationTree` are both ways to visualize invocation calling trees better + * `authorizeInvocation` helps multiple parties sign invocation calling trees + * `humanizeEvents` helps make diagnostic events more readable + - We've added a GHA to track bundle size changes as PRs are made. This protocol upgrade adds +18% to the final, minified bundle size which is significant but acceptable given the size of the upgrade. + +### Fixes +* Improves the error messages when passing invalid amounts to deposit and withdraw operations ([#679](https://github.com/stellar/js-stellar-base/pull/679)). + + +## [v9.0.0](https://github.com/stellar/js-stellar-base/compare/v8.2.2..v9.0.0) + +This is a large update and the following changelog incorporates ALL changes across the `beta.N` versions of this upgrade. + +This version is marked by a major version bump because of the significant upgrades to underlying dependencies. While there should be no noticeable API changes from a downstream perspective, there may be breaking changes in the way that this library is bundled. + +The browser bundle size has decreased **significantly**: + + * `stellar-base.min.js` is **340 KiB**, down from **1.2 MiB** previously. + * the new, unminified `stellar-base.js` is **895 KiB**. + +### Breaking Changes + +- The build system has been completely overhauled to support Webpack 5 ([#584](https://github.com/stellar/js-stellar-base/pull/584), [#585](https://github.com/stellar/js-stellar-base/pull/585)). + +Though we have tried to maintain compatibility with older JavaScript implementations, this still means you may need to update your build pipeline to transpile to certain targets. + +### Fixes + +- Fixes a bug when sorting mixed-case assets for liquidity pools ([#606](https://github.com/stellar/js-stellar-base/pull/606)). +- Documentation is fixed and should generate correctly on https://stellar.github.io/js-stellar-base/ ([#609](https://github.com/stellar/js-stellar-base/pull/609)). + +### Updates + +- XDR has been updated to its latest version (both `curr` and `next` versions, [#587](https://github.com/stellar/js-stellar-base/pull/587)). +- Drop the `lodash` dependency entirely ([#624](https://github.com/stellar/js-stellar-base/issues/624)). +- Drop the `crc` dependency and inline it to lower bundle size ([#621](https://github.com/stellar/js-stellar-base/pull/621)). +- Upgrade all dependencies to their latest versions ([#608](https://github.com/stellar/js-stellar-base/pull/608)). + + +## [v9.0.0-beta.3](https://github.com/stellar/js-stellar-base/compare/v9.0.0-beta.1..v9.0.0-beta.2) + +### Fix + +- Fixes a bug when sorting mixed-case assets for liquidity pools ([#606](https://github.com/stellar/js-stellar-base/pull/606)). + +### Update +- Upgrade all dependencies to their latest versions ([#608](https://github.com/stellar/js-stellar-base/pull/608)). +- Drop the `crc` dependency and inline it to lower bundle size ([#621](https://github.com/stellar/js-stellar-base/pull/621)). + + +## [v9.0.0-beta.2](https://github.com/stellar/js-stellar-base/compare/v9.0.0-beta.1..v9.0.0-beta.2) + +### Update + +- Upgrades the `js-xdr` dependency (major performance improvements, see [`js-xdr@v2.0.0`](https://github.com/stellar/js-xdr/releases/tag/v2.0.0)) and other dependencies to their latest versions ([#592](https://github.com/stellar/js-stellar-base/pull/592)). + + +## [v9.0.0-beta.1](https://github.com/stellar/js-stellar-base/compare/v9.0.0-beta.0..v9.0.0-beta.1) + +### Fix + +- Correct XDR type definition for raw `xdr.Operation`s ([#591](https://github.com/stellar/js-stellar-base/pull/591)). + + +## [v9.0.0-beta.0](https://github.com/stellar/js-stellar-base/compare/v8.2.2..v9.0.0-beta.0) + +This version is marked by a major version bump because of the significant upgrades to underlying dependencies. While there should be no noticeable API changes from a downstream perspective, there may be breaking changes in the way that this library is bundled. + +### Fix + +- Build system has been overhauled to support Webpack 5 ([#585](https://github.com/stellar/js-stellar-base/pull/585)). + +- Current and vNext XDR updated to latest versions ([#587](https://github.com/stellar/js-stellar-base/pull/587)). + + +## [v8.2.2](https://github.com/stellar/js-stellar-base/compare/v8.2.1..v8.2.2) + +### Fix + +- Enable signing in service workers using FastSigning ([#567](https://github.com/stellar/js-stellar-base/pull/567)). + +## [v8.2.1](https://github.com/stellar/js-stellar-base/compare/v8.2.0..v8.2.1) + +### Fix + +* Turn all XLM-like (i.e. casing agnostic) asset codes into the native asset with code `XLM` ([#546](https://github.com/stellar/js-stellar-base/pull/546)). + + +## [v8.2.0](https://github.com/stellar/js-stellar-base/compare/v8.1.0..v8.2.0) + +### Add + +* `Operation.setOptions` now supports the new [CAP-40](https://stellar.org/protocol/cap-40) signed payload signer (`ed25519SignedPayload`) thanks to @orbitlens ([#542](https://github.com/stellar/js-stellar-base/pull/542)). + + +## [v8.1.0](https://github.com/stellar/js-stellar-base/compare/v8.0.1..v8.1.0) + +### Add + +* `TransactionBase.addDecoratedSignature` is a clearer way to add signatures directly to a built transaction without fiddling with the underlying `signatures` array ([#535](https://github.com/stellar/js-stellar-base/pull/535)). + +* Update the XDR definitions (and the way in which they're generated) to contain both the latest current XDR (which introduces [CAP-42](https://stellar.org/protocol/cap-42)) and the "v-next" XDR (which contains XDR related to Soroban and should be considered unstable) ([#537](https://github.com/stellar/js-stellar-base/pull/537)). + +### Fix + +* Correctly set `minAccountSequence` in `TransactionBuilder` for large values ([#539](https://github.com/stellar/js-stellar-base/pull/539), thank you @overcat!). + + +## [v8.0.1](https://github.com/stellar/js-stellar-base/compare/v8.0.0..v8.0.1) + +### Fix + +- Correctly predict claimable balance IDs with large sequence numbers ([#530](https://github.com/stellar/js-stellar-base/pull/530), thank you @overcat!). + + +## [v8.0.0](https://github.com/stellar/js-stellar-base/compare/v7.0.0..v8.0.0) + +This is a promotion from the beta version without changes, now that the CAP-21 and CAP-40 implementations have made it into [stellar/stellar-core#master](https://github.com/stellar/stellar-core/tree/master/). + + +## [v8.0.0-beta.0](https://github.com/stellar/js-stellar-base/compare/v7.0.0..v8.0.0-beta.0) + +**This release adds support for Protocol 19**, which includes [CAP-21](https://stellar.org/protocol/cap-21) (new transaction preconditions) and [CAP-40](https://stellar.org/protocol/cap-40) (signed payload signers). + +This is considered a beta release until the XDR for the Stellar protocol stabilizes and is officially released. + +### Breaking + +As of this release, the minimum supported version of NodeJS is **14.x**. + +- Two XDR types have been renamed: + * `xdr.OperationId` is now `xdr.HashIdPreimage` + * `xdr.OperationIdId` is now `xdr.HashIdPreimageOperationId` + +### Add + +- Support for converting signed payloads ([CAP-40](https://stellar.org/protocol/cap-40)) to and from their StrKey (`P...`) representation ([#511](https://github.com/stellar/js-stellar-base/pull/511)): + * `Keypair.signPayloadDecorated(data)` + * `StrKey.encodeSignedPayload(buf)` + * `StrKey.decodeSignedPayload(str)` + * `StrKey.isValidSignedPayload(str)` + +- Support for creating transactions with the new preconditions ([CAP-21](https://stellar.org/protocol/cap-21)) via `TransactionBuilder` ([#513](https://github.com/stellar/js-stellar-base/pull/513)). + +- A way to convert between addresses (like `G...` and `P...`, i.e. the `StrKey` class) and their respective signer keys (i.e. `xdr.SignerKey`s), particularly for use in the new transaction preconditions ([#520](https://github.com/stellar/js-stellar-base/pull/520)): + * `SignerKey.decodeAddress(address)` + * `SignerKey.encodeSignerKey(address)` + * `TransactionBuilder.setTimebounds(min, max)` + * `TransactionBuilder.setLedgerbounds(min, max)` + * `TransactionBuilder.setMinAccountSequence(seq)` + * `TransactionBuilder.setMinAccountSequenceAge(age)` + * `TransactionBuilder.setMinAccountSequenceLedgerGap(gap)` + * `TransactionBuilder.setExtraSigners([signers])` + +### Fix + +- Correct a TypeScript definition on the `RevokeLiquidityPoolSponsorship` operation ([#522](https://github.com/stellar/js-stellar-base/pull/522)). + +- Resolves a bug that incorrectly sorted `Asset`s with mixed-case asset codes (it preferred lowercase codes incorrectly) ([#516](https://github.com/stellar/js-stellar-base/pull/516)). + +- Update developer dependencies: + * `isparta`, `jsdoc`, and `underscore` ([#500](https://github.com/stellar/js-stellar-base/pull/500)) + * `ajv` ([#503](https://github.com/stellar/js-stellar-base/pull/503)) + * `karma` ([#505](https://github.com/stellar/js-stellar-base/pull/505)) + * `minimist` ([#514](https://github.com/stellar/js-stellar-base/pull/514)) + + +## [v7.0.0](https://github.com/stellar/js-stellar-base/compare/v6.0.6..v7.0.0) + +This release introduces **unconditional support for muxed accounts** ([#485](https://github.com/stellar/js-stellar-base/pull/485)). + +### Breaking Changes + +In [v5.2.0](https://github.com/stellar/js-stellar-base/releases/tag/v5.2.0), we introduced _opt-in_ support for muxed accounts, where you would need to explicitly pass a `true` flag if you wanted to interpret muxed account objects as muxed addresses (in the form `M...`, see [SEP-23](https://stellar.org/protocol/sep-23)). We stated that this would become the default in the future. That is now the case. + +The following fields will now always support muxed properties: + + * `FeeBumpTransaction.feeSource` + * `Transaction.sourceAccount` + * `Operation.sourceAccount` + * `Payment.destination` + * `PathPaymentStrictReceive.destination` + * `PathPaymentStrictSend.destination` + * `AccountMerge.destination` + * `Clawback.from` + +The following functions had a `withMuxing` parameter removed: + + - `Operation.fromXDRObject` + - `Transaction.constructor` + - `FeeBumpTransaction.constructor` + - `TransactionBuilder.fromXDR` + - `TransactionBuilder.buildFeeBumpTransaction` + +The following functions will no longer check the `opts` object for a `withMuxing` field: + + - `TransactionBuilder.constructor` + - `Operation.setSourceAccount` + +There are several other breaking changes: + + - `TransactionBuilder.enableMuxedAccounts()` is removed + - `decodeAddressToMuxedAccount()` and `encodeMuxedAccountToAddress()` no longer accept a second boolean parameter + - `Account.createSubaccount()` and `MuxedAccount.createSubaccount()` are removed ([#487](https://github.com/stellar/js-stellar-base/pull/487)). You should prefer to create them manually: + +```js + let mux1 = new MuxedAccount(someAccount, '1'); + + // before: + let mux2 = mux1.createSubaccount('2'); + + // now: + let mux2 = new MuxedAccount(mux1.baseAccount(), '2'); +``` + + + - Introduced a new helper method to help convert from muxed account addresses to their underlying Stellar addresses ([#485](https://github.com/stellar/js-stellar-base/pull/485)): + +```ts +function extractBaseAddess(address: string): string; +``` + + - The following muxed account validation functions are now available from Typescript ([#483](https://github.com/stellar/js-stellar-base/pull/483/files)): + +```typescript +namespace StrKey { + function encodeMed25519PublicKey(data: Buffer): string; + function decodeMed25519PublicKey(data: string): Buffer; + function isValidMed25519PublicKey(publicKey: string): boolean; +} + +function decodeAddressToMuxedAccount(address: string, supportMuxing: boolean): xdr.MuxedAccount; +function encodeMuxedAccountToAddress(account: xdr.MuxedAccount, supportMuxing: boolean): string; +function encodeMuxedAccount(gAddress: string, id: string): xdr.MuxedAccount; +``` + +- Added a helper function `Transaction.getClaimableBalanceId(int)` which lets you pre-determine the hex claimable balance ID of a `createClaimableBalance` operation prior to submission to the network ([#482](https://github.com/stellar/js-stellar-base/pull/482)). + +### Fix + +- Add `Buffer` as a parameter type option for the `Keypair` constructor in Typescript ([#484](https://github.com/stellar/js-stellar-base/pull/484)). + + +## [v6.0.6](https://github.com/stellar/js-stellar-base/compare/v6.0.5..v6.0.6) + +### Fix + +- Upgrades dependencies: `path-parse` (1.0.6 --> 1.0.7) and `jszip` (3.4.0 to 3.7.1) ([#450](https://github.com/stellar/js-stellar-base/pull/450), [#458](https://github.com/stellar/js-stellar-base/pull/458)). + + +## [v6.0.5](https://github.com/stellar/js-stellar-base/compare/v6.0.4..v6.0.5) + +This version bump fixes a security vulnerability in a _developer_ dependency; **please upgrade as soon as possible!** You may be affected if you are working on this package in a developer capacity (i.e. you've cloned this repository) and have run `yarn` or `yarn install` any time on Oct 22nd, 2021. + +Please refer to the [security advisory](https://github.com/advisories/GHSA-pjwm-rvh2-c87w) for details. + + +### Security Fix +- Pin `ua-parser-js` to a known safe version ([#477](https://github.com/stellar/js-stellar-base/pull/477)). + + +## [v6.0.4](https://github.com/stellar/js-stellar-base/compare/v6.0.3..v6.0.4) + +### Fix +- Allow muxed accounts when decoding transactions via `TransactionBuilder.fromXDR()` ([#470](https://github.com/stellar/js-stellar-base/pull/470)). + + +## [v6.0.3](https://github.com/stellar/js-stellar-base/compare/v6.0.2..v6.0.3) + +### Fix +- When creating a `Transaction`, forward the optional `withMuxing` flag along to its operations so that their properties are also decoded with the appropriate muxing state ([#469](https://github.com/stellar/js-stellar-base/pull/469)). + + +## [v6.0.2](https://github.com/stellar/js-stellar-base/compare/v6.0.1..v6.0.2) + +### Fix +- Fix Typescript signatures for operations to universally allow setting the `withMuxing` flag ([#466](https://github.com/stellar/js-stellar-base/pull/466)). + + +## [v6.0.1](https://github.com/stellar/js-stellar-base/compare/v5.3.2..v6.0.1) + +### Add + +- Introduced new CAP-38 operations `LiquidityPoolDepositOp` and `LiquidityPoolWithdrawOp`. +- Introduced two new types of assets, `LiquidityPoolId` and `LiquidityPoolAsset`. + +### Update + +- The XDR definitions have been updated to support CAP-38. +- Extended `Operation` class with the `Operation.revokeLiquidityPoolSponsorship` helper that allows revoking a liquidity pool sponsorship. +- Asset types now include `AssetType.liquidityPoolShares`. +- `Operation.changeTrust` and `ChangeTrustOp` can now use `LiquidityPoolAsset` in addition to `Asset`. +- `Operation.revokeTrustlineSponsorship` can now use `LiquidityPoolId` in addition to `Asset`. + +## [v5.3.2](https://github.com/stellar/js-stellar-base/compare/v5.3.1..v5.3.2) + +### Fix +- Update various dependencies to secure versions. Most are developer dependencies which means no or minimal downstream effects ([#446](https://github.com/stellar/js-stellar-base/pull/446), [#447](https://github.com/stellar/js-stellar-base/pull/447), [#392](https://github.com/stellar/js-stellar-base/pull/392), [#428](https://github.com/stellar/js-stellar-base/pull/428)); the only non-developer dependency upgrade is a patch version bump to `lodash` ([#449](https://github.com/stellar/js-stellar-base/pull/449)). + + +## [v5.3.1](https://github.com/stellar/js-stellar-base/compare/v5.3.0..v5.3.1) + +### Fix +- Creating operations with both muxed and unmuxed properties resulted in unintuitive XDR. Specifically, the unmuxed property would be transformed into the equivalent property with an ID of 0 ([#441](https://github.com/stellar/js-stellar-base/pull/441)). + + +## [v5.3.0](https://github.com/stellar/js-stellar-base/compare/v5.2.1..v5.3.0) + +### Add +- **Opt-in support for muxed accounts.** In addition to the support introduced in [v5.2.0](https://github.com/stellar/js-stellar-base/releases/v5.2.0), this completes support for muxed accounts by enabling them for fee-bump transactions. Pass a muxed account address (in the `M...` form) as the first parameter (and explicitly opt-in to muxing by passing `true` as the last parameter) to `TransactionBuilder.buildFeeBumpTransaction` to make the `feeSource` a fully-muxed account instance ([#434](https://github.com/stellar/js-stellar-base/pull/434)). + + +## [v5.2.1](https://github.com/stellar/js-stellar-base/compare/v5.2.0..v5.2.1) + +### Fix +- Fix regression where raw public keys were [sometimes](https://github.com/stellar/js-stellar-sdk/issues/645) being parsed incorrectly ([#429](https://github.com/stellar/js-stellar-base/pull/429)). + + +## [v5.2.0](https://github.com/stellar/js-stellar-base/compare/v5.1.0..v5.2.0) + +### Add +- **Opt-in support for muxed accounts.** This introduces `M...` addresses from [SEP-23](https://stellar.org/protocol/sep-23), which multiplex a Stellar `G...` address across IDs to eliminate the need for ad-hoc multiplexing via the Transaction.memo field (see the relevant [SEP-29](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0029.md) and [blog post](https://www.stellar.org/developers-blog/fixing-memo-less-payments) on the topic). The following operations now support muxed accounts ([#416](https://github.com/stellar/js-stellar-base/pull/416)): + * `Payment.destination` + * `PathPaymentStrictReceive.destination` + * `PathPaymentStrictSend.destination` + * `Operation.sourceAccount` + * `AccountMerge.destination` + * `Transaction.sourceAccount` + +- The above changeset also introduces a new high-level object, `MuxedAccount` (not to be confused with `xdr.MuxedAccount`, which is the underlying raw representation) to make working with muxed accounts easier. You can use it to easily create and manage muxed accounts and their underlying shared `Account`, passing them along to the supported operations and `TransactionBuilder` ([#416](https://github.com/stellar/js-stellar-base/pull/416)): + +```js + const PUBKEY = 'GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ'; + const ACC = new StellarBase.Account(PUBKEY, '1'); + + const mux1 = new StellarBase.MuxedAccount(ACC, '1000'); + console.log(mux1.accountId(), mux1.id()); + // MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAD5DTGC 1000 + + const mux2 = ACC.createSubaccount('2000'); + console.log("Parent relationship preserved:", + mux2.baseAccount().accountId() === mux1.baseAccount().accountId()); + console.log(mux2.accountId(), mux2.id()); + // MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAH2B4RU 2000 + + mux1.setID('3000'); + console.log("Underlying account unchanged:", + ACC.accountId() === mux1.baseAccount().accountId()); + console.log(mux1.accountId(), mux1.id()); + // MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAALXC5LE 3000 +``` + +- You can refer to the [documentation](https://stellar.github.io/js-stellar-sdk/MuxedAccount.html) or the [test suite](../test/unit/muxed_account_test.js) for more uses of the API. + +### Update +- Modernize the minimum-supported browser versions for the library ([#419](https://github.com/stellar/js-stellar-base/pull/419)). + +### Fix +- Update Typescript test for `SetOptions` to use authorization flags (e.g. `AuthRequiredFlag`) correctly ([#418](https://github.com/stellar/js-stellar-base/pull/418)). + + +## [v5.1.0](https://github.com/stellar/js-stellar-base/compare/v5.0.0..v5.1.0) + +### Update + +- The Typescript definitions have been updated to support CAP-35 ([#407](https://github.com/stellar/js-stellar-base/pull/407)). + +## [v5.0.0](https://github.com/stellar/js-stellar-base/compare/v4.0.3..v5.0.0) + +### Add + +- Introduced new CAP-35 operations, `ClawbackOp`, `ClawbackClaimableBalanceOp`, and `SetTrustLineFlagsOp` ([#397](https://github.com/stellar/js-stellar-base/pull/397/)). + +### Update + +- Add an additional parameter check to `claimClaimableBalance` to fail faster ([#390](https://github.com/stellar/js-stellar-base/pull/390)). + +- The XDR definitions have been updated to support CAP-35 ([#394](https://github.com/stellar/js-stellar-base/pull/394)). + +### Breaking + +- `AllowTrustOpAsset` has been renamed to `AssetCode` ([#394](https://github.com/stellar/js-stellar-base/pull/394)) + + +### Deprecated + +- `AllowTrustOp` is now a deprecated operation. + +## [v4.0.3](https://github.com/stellar/js-stellar-base/compare/v4.0.2..v4.0.3) + +## Update + +- Update TS definitions for XDRs ([#381](https://github.com/stellar/js-stellar-base/pull/381)) +- Fix typing for ManageData.value ([#379](https://github.com/stellar/js-stellar-base/pull/379)) + + +## [v4.0.2](https://github.com/stellar/js-stellar-base/compare/v4.0.1..v4.0.2) + +## Update + +- Fix deployment script. + + +## [v4.0.1](https://github.com/stellar/js-stellar-base/compare/v4.0.0..v4.0.1) + +## Update + +- Update `createAccount` operation to accept `0` as the starting balance ([#375](https://github.com/stellar/js-stellar-base/pull/375)). + +## [v4.0.0](https://github.com/stellar/js-stellar-base/compare/v3.0.4..v4.0.0) + +## Add +- Add the `Claimant` class which helps the creation of claimable balances. ([#367](https://github.com/stellar/js-stellar-base/pull/367)). +The default behavior of this class it to create claimants with an unconditional predicate if none is passed: + +``` +const claimant = new StellarBase.Claimant( + 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ' +); +``` + +However, you can use any of the following helpers to create a predicate: + +``` +StellarBase.Claimant.predicateUnconditional(); +StellarBase.Claimant.predicateAnd(left, right); +StellarBase.Claimant.predicateOr(left, right); +StellarBase.Claimant.predicateNot(predicate); +StellarBase.Claimant.predicateBeforeAbsoluteTime(unixEpoch); +StellarBase.Claimant.predicateBeforeRelativeTime(seconds); +``` + +And then pass the predicate in the constructor: + +``` +const left = StellarBase.Claimant.predicateBeforeRelativeTime('800'); +const right = StellarBase.Claimant.predicateBeforeRelativeTime( + '1200' +); +const predicate = StellarBase.Claimant.predicateOr(left, right); +const claimant = new StellarBase.Claimant( + 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ', + predicate +); +``` + +- Add `Operation.createClaimableBalance` ([#368](https://github.com/stellar/js-stellar-base/pull/368)) +Extend the operation class with a new helper to create claimable balance operations. + +```js +const asset = new Asset( + 'USD', + 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' +); +const amount = '100.0000000'; +const claimants = [ + new Claimant( + 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ', + Claimant.predicateBeforeAbsoluteTime("4102444800000") + ) +]; + +const op = Operation.createClaimableBalance({ + asset, + amount, + claimants +}); +``` + +- Add `Operation.claimClaimableBalance` ([#368](https://github.com/stellar/js-stellar-base/pull/368)) +Extend the operation class with a new helper to create claim claimable balance operations. It receives the `balanceId` as exposed by Horizon in the `/claimable_balances` end-point. + +```js +const op = Operation.createClaimableBalance({ + balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', +}); +``` +- Add support for Sponsored Reserves (CAP33)([#369](https://github.com/stellar/js-stellar-base/pull/369/)) + +Extend the operation class with helpers that allow sponsoring reserves and also revoke sponsorships. + +To start sponsoring reserves for an account use: +- `Operation.beginSponsoringFutureReserves` +- `Operation.endSponsoringFutureReserves` + +To revoke a sponsorship after it has been created use any of the following helpers: + +- `Operation.revokeAccountSponsorship` +- `Operation.revokeTrustlineSponsorship` +- `Operation.revokeOfferSponsorship` +- `Operation.revokeDataSponsorship` +- `Operation.revokeClaimableBalanceSponsorship` +- `Operation.revokeSignerSponsorship` + +The following example contains a transaction which sponsors operations for an account and then revoke some sponsorships. + +``` +const transaction = new StellarSdk.TransactionBuilder(account, { + fee: "100", + networkPassphrase: StellarSdk.Networks.TESTNET +}) + .addOperation( + StellarSdk.Operation.beginSponsoringFutureReserves({ + sponsoredId: account.accountId(), + source: masterKey.publicKey() + }) + ) + .addOperation( + StellarSdk.Operation.accountMerge({ destination: destKey.publicKey() }), + ).addOperation( + StellarSdk.Operation.createClaimableBalance({ + amount: "10", + asset: StellarSdk.Asset.native(), + claimants: [ + new StellarSdk.Claimant(account.accountId()) + ] + }), + ).addOperation( + StellarSdk.Operation.claimClaimableBalance({ + balanceId: "00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be", + }), + ).addOperation( + StellarSdk.Operation.endSponsoringFutureReserves({ + }) + ).addOperation( + StellarSdk.Operation.revokeAccountSponsorship({ + account: account.accountId(), + }) + ).addOperation( + StellarSdk.Operation.revokeTrustlineSponsorship({ + account: account.accountId(), + asset: usd, + }) + ).addOperation( + StellarSdk.Operation.revokeOfferSponsorship({ + seller: account.accountId(), + offerId: '12345' + }) + ).addOperation( + StellarSdk.Operation.revokeDataSponsorship({ + account: account.accountId(), + name: 'foo' + }) + ).addOperation( + StellarSdk.Operation.revokeClaimableBalanceSponsorship({ + balanceId: "00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be", + }) + ).addOperation( + StellarSdk.Operation.revokeSignerSponsorship({ + account: account.accountId(), + signer: { + ed25519PublicKey: sourceKey.publicKey() + } + }) + ).addOperation( + StellarSdk.Operation.revokeSignerSponsorship({ + account: account.accountId(), + signer: { + sha256Hash: "da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be" + } + }) + ).addOperation( + StellarSdk.Operation.revokeSignerSponsorship({ + account: account.accountId(), + signer: { + preAuthTx: "da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be" + } + }) + ).build(); +``` + +### Breaking + +- The XDR generated in this code includes breaking changes on the internal XDR library since a bug was fixed which was causing incorrect code to be generated (see https://github.com/stellar/xdrgen/pull/52). + +The following functions were renamed: + +- `xdr.OperationBody.setOption()` -> `xdr.OperationBody.setOptions()` +- `xdr.OperationBody.manageDatum()` -> `xdr.OperationBody.manageData()` +- `xdr.OperationType.setOption()` -> `xdr.OperationType.setOptions()` +- `xdr.OperationType.manageDatum()` -> `xdr.OperationType.manageData()` + +The following enum values were rename in `OperationType`: + +- `setOption` -> `setOptions` +- `manageDatum` -> `manageData` + +## [v3.0.4](https://github.com/stellar/js-stellar-base/compare/v3.0.3..v3.0.4) + +### Update + +- Generate V1 transactions by default and allow V0 transactions to be fee bumped ([#355](https://github.com/stellar/js-stellar-base/pull/355)). + +## [v3.0.3](https://github.com/stellar/js-stellar-base/compare/v3.0.2..v3.0.3) + +### Remove + +- Rollback support for SEP23 (Muxed Account StrKey) ([#349](https://github.com/stellar/js-stellar-base/pull/349)). + +## [v3.0.2](https://github.com/stellar/js-stellar-base/compare/v3.0.1..v3.0.2) + +### Fix +- Extend `files` in npm package to include XDR type definitions ([#345](https://github.com/stellar/js-stellar-base/pull/345)). + +## [v3.0.1](https://github.com/stellar/js-stellar-base/compare/v3.0.0..v3.0.1) + +### Add +- Add TypeScript definitions for auto-generated XDR code ([#342](https://github.com/stellar/js-stellar-base/pull/342)). + +## [v3.0.0](https://github.com/stellar/js-stellar-base/compare/v2.1.9..v3.0.0) + +This version brings protocol 13 support with backwards compatibility support for protocol 12. + +### Add +- Add `TransactionBuilder.buildFeeBumpTransaction` which makes it easy to create `FeeBumpTransaction` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- Adds a feature flag which allow consumers of this library to create V1 (protocol 13) transactions using the `TransactionBuilder` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- Add support for [CAP0027](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0027.md): First-class multiplexed accounts ([#325](https://github.com/stellar/js-stellar-base/pull/325)). +- ~Add `Keypair.xdrMuxedAccount` which creates a new `xdr.MuxedAccount`([#325](https://github.com/stellar/js-stellar-base/pull/325)).~ +- Add `FeeBumpTransaction` which makes it easy to work with fee bump transactions ([#328](https://github.com/stellar/js-stellar-base/pull/328)). +- Add `TransactionBuilder.fromXDR` which receives an xdr envelope and return a `Transaction` or `FeeBumpTransaction` ([#328](https://github.com/stellar/js-stellar-base/pull/328)). + +### Update +- Update XDR definitions with protocol 13 ([#317](https://github.com/stellar/js-stellar-base/pull/317)). +- Extend `Transaction` to work with `TransactionV1Envelope` and `TransactionV0Envelope` ([#317](https://github.com/stellar/js-stellar-base/pull/317)). +- Add backward compatibility support for [CAP0018](https://github.com/stellar/stellar-protocol/blob/f01c9354aaab1e8ca97a25cf888829749cadf36a/core/cap-0018.md) ([#317](https://github.com/stellar/js-stellar-base/pull/317)). + CAP0018 provides issuers with a new level of authorization between unauthorized and fully authorized, called "authorized to maintain liabilities". The changes in this release allow you to use the new authorization level and provides backward compatible support for Protocol 12. + + Before Protocol 13, the argument `authorize` in the `AllowTrust` operation was of type `boolean` where `true` was authorize and `false` deauthorize. Starting in Protocol 13, this value is now a `number` where `0` is deauthorize, `1` is authorize, and `2` is authorize to maintain liabilities. + + The syntax for authorizing a trustline is still the same, but the authorize parameter is now a `number`. + + ```js + Operation.allowTrust({ + trustor: trustor.publicKey(), + assetCode: "COP", + authorize: 1 + }); + ``` + + You can use still use a `boolean`; however, we recommend you update your code to pass a `number` instead. Finally, using the value `2` for authorize to maintain liabilities will only be valid if Stellar Core is running on Protocol 13; otherwise, you'll get an error. + +- ~Update operations builder to support multiplexed accounts ([#337](https://github.com/stellar/js-stellar-base/pull/337)).~ + +### Breaking changes + +- `Transaction.toEnvelope()` returns a protocol 13 `xdr.TransactionEnvelope` which is an `xdr.Union` ([#317](https://github.com/stellar/js-stellar-base/pull/317)). + If you have code that looks like this - `transaction.toEnvelope().tx` - you have two options: + - You can grab the value wrapped by the union, calling `value()` like `transaction.toEnvelope().value().tx`. + - You can check which is the discriminant by using `switch()` and then call `v0()`, `v1()`, or `feeBump()`. +- The return value from `Transaction.fee` changed from `number` to `string`. This brings support for `Int64` values ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- The const `BASE_FEE` changed from `number` to `string` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- The option `fee` passed to `new TransactionBuilder({fee: ..})` changed from `number` to `string` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- The following fields, which were previously an `xdr.AccountID` are now a `xdr.MuxedAccount` ([#325](https://github.com/stellar/js-stellar-base/pull/325)): + - `PaymentOp.destination` + - `PathPaymentStrictReceiveOp.destination` + - `PathPaymentStrictSendOp.destination` + - `Operation.sourceAccount` + - `Operation.destination` (for `ACCOUNT_MERGE`) + - `Transaction.sourceAccount` + - `FeeBumpTransaction.feeSource` + + You can get the string representation by calling `StrKey.encodeMuxedAccount` which will return a `G..` or `M..` account. +- Remove the following deprecated functions ([#331](https://github.com/stellar/js-stellar-base/pull/331)): + - `Operation.manageOffer` + - `Operation.createPassiveOffer` + - `Operation.pathPayment` + - `Keypair.fromBase58Seed` +- Remove the `Network` class ([#331](https://github.com/stellar/js-stellar-base/pull/331)). +- Remove `vendor/base58.js` ([#331](https://github.com/stellar/js-stellar-base/pull/331)). + +## [v3.0.0-alpha.1](https://github.com/stellar/js-stellar-base/compare/v3.0.0-alpha.0..v3.0.0-alpha.1) + +### Update + +- Update operations builder to support multiplexed accounts ([#337](https://github.com/stellar/js-stellar-base/pull/337)). + + This allows you to specify an `M` account as the destination or source: + ``` + var destination = 'MAAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITLVL6'; + var amount = '1000.0000000'; + var asset = new StellarBase.Asset( + 'USDUSD', + 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + ); + var source = + 'MAAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITLVL6'; + StellarBase.Operation.payment({ + destination, + asset, + amount, + source + }); + ``` + + **To use multiplexed accounts you need an instance of Stellar running on Protocol 13 or higher** + +## [v3.0.0-alpha.0](https://github.com/stellar/js-stellar-base/compare/v2.1.9..v3.0.0-alpha.0) + +This version brings protocol 13 support with backwards compatibility support for protocol 12. + +### Add +- Add `TransactionBuilder.buildFeeBumpTransaction` which makes it easy to create `FeeBumpTransaction` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- Adds a feature flag which allow consumers of this library to create V1 (protocol 13) transactions using the `TransactionBuilder` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- Add support for [CAP0027](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0027.md): First-class multiplexed accounts ([#325](https://github.com/stellar/js-stellar-base/pull/325)). +- Add `Keypair.xdrMuxedAccount` which creates a new `xdr.MuxedAccount`([#325](https://github.com/stellar/js-stellar-base/pull/325)). +- Add `FeeBumpTransaction` which makes it easy to work with fee bump transactions ([#328](https://github.com/stellar/js-stellar-base/pull/328)). +- Add `TransactionBuilder.fromXDR` which receives an xdr envelope and return a `Transaction` or `FeeBumpTransaction` ([#328](https://github.com/stellar/js-stellar-base/pull/328)). + +### Update +- Update XDR definitions with protocol 13 ([#317](https://github.com/stellar/js-stellar-base/pull/317)). +- Extend `Transaction` to work with `TransactionV1Envelope` and `TransactionV0Envelope` ([#317](https://github.com/stellar/js-stellar-base/pull/317)). +- Add backward compatibility support for [CAP0018](https://github.com/stellar/stellar-protocol/blob/f01c9354aaab1e8ca97a25cf888829749cadf36a/core/cap-0018.md) ([#317](https://github.com/stellar/js-stellar-base/pull/317)). + +### Breaking changes + +- `Transaction.toEnvelope()` returns a protocol 13 `xdr.TransactionEnvelope` which is an `xdr.Union` ([#317](https://github.com/stellar/js-stellar-base/pull/317)). + If you have code that looks like this `transaction.toEnvelope().tx` you have two options: + - You can grab the value wrapped by the union, calling `value()` like `transaction.toEnvelope().value().tx`. + - You can check which is the discriminant by using `switch()` and then call `v0()`, `v1()`, or `feeBump()`. +- The return value from `Transaction.fee` changed from `number` to `string`. This brings support for `Int64` values ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- The const `BASE_FEE` changed from `number` to `string` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- The option `fee` passed to `new TransactionBuilder({fee: ..})` changed from `number` to `string` ([#321](https://github.com/stellar/js-stellar-base/pull/321)). +- The following fields, which were previously an `xdr.AccountID` are now a `xdr.MuxedAccount` ([#325](https://github.com/stellar/js-stellar-base/pull/325)): + - `PaymentOp.destination` + - `PathPaymentStrictReceiveOp.destination` + - `PathPaymentStrictSendOp.destination` + - `Operation.sourceAccount` + - `Operation.destination` (for `ACCOUNT_MERGE`) + - `Transaction.sourceAccount` + - `FeeBumpTransaction.feeSource` + + You can get the string representation by calling `StrKey.encodeMuxedAccount` which will return a `G..` or `M..` account. +- Remove the following deprecated functions ([#331](https://github.com/stellar/js-stellar-base/pull/331)): + - `Operation.manageOffer` + - `Operation.createPassiveOffer` + - `Operation.pathPayment` + - `Keypair.fromBase58Seed` +- Remove the `Network` class ([#331](https://github.com/stellar/js-stellar-base/pull/331)). +- Remove `vendor/base58.js` ([#331](https://github.com/stellar/js-stellar-base/pull/331)). + + +## [v2.1.9](https://github.com/stellar/js-stellar-base/compare/v2.1.8..v2.1.9) + +### Fix +- Update dependencies which depend on minimist. ([#332](https://github.com/stellar/js-stellar-base/pull/332)) + +## [v2.1.8](https://github.com/stellar/js-stellar-base/compare/v2.1.7..v2.1.8) + +### Fix +- Fix `setTimeout(0)` and partially defined timebounds ([#315](https://github.com/stellar/js-stellar-base/pull/315)). + +## [v2.1.7](https://github.com/stellar/js-stellar-base/compare/v2.1.6..v2.1.7) + +### Fix +- Fix TypeScript options for `ManageData` operation to allow setting value to `null` ([#310](https://github.com/stellar/js-stellar-base/issues/310)) +- Fix crash on partially defined time bounds ([#303](https://github.com/stellar/js-stellar-base/issues/303)) + +## [v2.1.6](https://github.com/stellar/js-stellar-base/compare/v2.1.5..v2.1.6) + +### Fix +- Fix npm deployment. + +## [v2.1.5](https://github.com/stellar/js-stellar-base/compare/v2.1.4..v2.1.5) + +### Add +- Add `toXDR` type to Transaction class ([#296](https://github.com/stellar/js-stellar-base/issues/296)) + +### Fix +- Fix doc link ([#298](https://github.com/stellar/js-stellar-base/issues/298)) + +### Remove +- Remove node engine restriction ([#294](https://github.com/stellar/js-stellar-base/issues/294)) + +### Update +- Update creating an account example ([#299](https://github.com/stellar/js-stellar-base/issues/299)) +- Use `console.trace` to get line num in `Networks.use` ([#300](https://github.com/stellar/js-stellar-base/issues/300)) + +## [v2.1.4](https://github.com/stellar/js-stellar-base/compare/v2.1.3..v2.1.4) + +## Update +- Regenerate the XDR definitions to include MetaV2 ([#288](https://github.com/stellar/js-stellar-base/issues/288)) + +## [v2.1.3](https://github.com/stellar/js-stellar-base/compare/v2.1.2...v2.1.3) + +## Update 📣 + +- Throw errors when obviously invalid network passphrases are used in + `new Transaction()`. + ([284](https://github.com/stellar/js-stellar-base/pull/284)) + +## [v2.1.2](https://github.com/stellar/js-stellar-base/compare/v2.1.1...v2.1.2) + +## Update 📣 + +- Update documentation for `Operation` to show `pathPaymentStrictSend` and `pathPaymentStrictReceive`. ([279](https://github.com/stellar/js-stellar-base/pull/279)) + +## [v2.1.1](https://github.com/stellar/js-stellar-base/compare/v2.1.0...v2.1.1) + +## Update 📣 + +- Update `asset.toString()` to return canonical representation for asset. ([277](https://github.com/stellar/js-stellar-base/pull/277)). + + Calling `asset.toString()` will return `native` for `XLM` or `AssetCode:AssetIssuer` for issued assets. See [this PR](https://github.com/stellar/stellar-protocol/pull/313) for more information. + +## [v2.1.0](https://github.com/stellar/js-stellar-base/compare/v2.0.2...v2.1.0) + +This release adds support for [stellar-core protocol 12 release](https://github.com/stellar/stellar-core/projects/11) and [CAP 24](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0024.md) ("Make PathPayment Symmetrical"). + +### Add ➕ + + - `Operation.pathPaymentStrictSend`: Sends a path payments, debiting from the source account exactly a specified amount of one asset, crediting at least a given amount of another asset. ([#274](https://github.com/stellar/js-stellar-base/pull/274)). + + The following operation will debit exactly 10 USD from the source account, crediting at least 9.2 EUR in the destination account 💸: + ```js + var sendAsset = new StellarBase.Asset( + 'USD', + 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + ); + var sendAmount = '10'; + var destination = + 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ'; + var destAsset = new StellarBase.Asset( + 'USD', + 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + ); + var destMin = '9.2'; + var path = [ + new StellarBase.Asset( + 'USD', + 'GBBM6BKZPEHWYO3E3YKREDPQXMS4VK35YLNU7NFBRI26RAN7GI5POFBB' + ), + new StellarBase.Asset( + 'EUR', + 'GDTNXRLOJD2YEBPKK7KCMR7J33AAG5VZXHAJTHIG736D6LVEFLLLKPDL' + ) + ]; + let op = StellarBase.Operation.pathPaymentStrictSend({ + sendAsset, + sendAmount, + destination, + destAsset, + destMin, + path + }); + ``` + - `Operation.pathPaymentStrictReceive`: This behaves the same as the former `pathPayments` operation. ([#274](https://github.com/stellar/js-stellar-base/pull/274)). + + The following operation will debit maximum 10 USD from the source account, crediting exactly 9.2 EUR in the destination account 💸: + ```js + var sendAsset = new StellarBase.Asset( + 'USD', + 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + ); + var sendMax = '10'; + var destination = + 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ'; + var destAsset = new StellarBase.Asset( + 'USD', + 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + ); + var destAmount = '9.2'; + var path = [ + new StellarBase.Asset( + 'USD', + 'GBBM6BKZPEHWYO3E3YKREDPQXMS4VK35YLNU7NFBRI26RAN7GI5POFBB' + ), + new StellarBase.Asset( + 'EUR', + 'GDTNXRLOJD2YEBPKK7KCMR7J33AAG5VZXHAJTHIG736D6LVEFLLLKPDL' + ) + ]; + let op = StellarBase.Operation.pathPaymentStrictReceive({ + sendAsset, + sendMax, + destination, + destAsset, + destAmount, + path + }); + ``` + +## Deprecated ❗️ + +- `Operation.pathPayment` is being deprecated in favor of `Operation.pathPaymentStrictReceive`. Both functions take the same arguments and behave the same. ([#274](https://github.com/stellar/js-stellar-base/pull/274)). + +## [v2.0.2](https://github.com/stellar/js-stellar-base/compare/v2.0.1...v2.0.2) + +### Fix +- Fix issue [#269](https://github.com/stellar/js-stellar-base/issues/269). ManageBuyOffer should extend BaseOptions and inherited property "source". ([#270](https://github.com/stellar/js-stellar-base/pull/270)). + +## [v2.0.1](https://github.com/stellar/js-stellar-base/compare/v2.0.0...v2.0.1) + +No changes. Fixes deploy script and includes changes from [v2.0.0](https://github.com/stellar/js-stellar-base/compare/v1.1.2...v2.0.0). + +## [v2.0.0](https://github.com/stellar/js-stellar-base/compare/v1.1.2...v2.0.0) + +### BREAKING CHANGES + +- Drop Support for Node 6 since it has been end-of-lifed and no longer in LTS. We now require Node 10 which is the current LTS until April 1st, 2021. ([#255](https://github.com/stellar/js-stellar-base/pull/255)) + +## [v1.1.2](https://github.com/stellar/js-stellar-base/compare/v1.1.1...v1.1.2) + +### Fix +- Fix no-network warnings ([#248](https://github.com/stellar/js-stellar-base/issues/248)) + +## [v1.1.1](https://github.com/stellar/js-stellar-base/compare/v1.1.0...v1.1.1) + +### Fix +- Add types for new networkPassphrase argument. Fix [#237](https://github.com/stellar/js-stellar-base/issues/237). ([#238](https://github.com/stellar/js-stellar-base/issues/238)) + +## [v1.1.0](https://github.com/stellar/js-stellar-base/compare/v1.0.3...v1.1.0) + +### Deprecated + +Deprecate global singleton for `Network`. The following classes and +methods take an optional network passphrase, and issue a warning if it +is not passed: + +#### `Keypair.master` + +```js +Keypair.master(Networks.TESTNET) +``` + +#### constructor for `Transaction` + +```js +const xenv = new xdr.TransactionEnvelope({ tx: xtx }); +new Transaction(xenv, Networks.TESTNET); +``` + +#### constructor for `TransactionBuilder` and method `TransactionBuilder.setNetworkPassphrase` + +```js +const transaction = new StellarSdk.TransactionBuilder(account, { + fee: StellarSdk.BASE_FEE, + networkPassphrase: Networks.TESTNET +}) +``` + +See [#207](https://github.com/stellar/js-stellar-base/issues/207) and [#112](https://github.com/stellar/js-stellar-base/issues/112) for more information. + +The `Network` class will be removed on the `2.0` release. + +### Add +- Add docs for BASE_FEE const. ([#211](https://github.com/stellar/js-stellar-base/issues/211)) + +### Fix +- Fix typo. ([#213](https://github.com/stellar/js-stellar-base/issues/213)) + +## [v1.0.3](https://github.com/stellar/js-stellar-base/compare/v1.0.2...v1.0.3) + +### Add + +- Add `toString()` to Asset ([#172](https://github.com/stellar/js-stellar-base/issues/172)) +- Add types for missing Network functions ([#208](https://github.com/stellar/js-stellar-base/issues/208)) +- Add BASE_FEE to TS types ([#209](https://github.com/stellar/js-stellar-base/issues/209)) + +### Fix +- Fix typo in types ([#194](https://github.com/stellar/js-stellar-base/issues/194)) +- Fix types: Fee is no longer optional ([#195](https://github.com/stellar/js-stellar-base/issues/195)) +- Fix typings for Account Sequence Number ([#203](https://github.com/stellar/js-stellar-base/issues/203)) +- Fix typings for Transaction Sequence Number ([#205](https://github.com/stellar/js-stellar-base/issues/205)) + +## [v1.0.2](https://github.com/stellar/js-stellar-base/compare/v1.0.1...v1.0.2) + +- Fix a bug where `sodium-native` was making it into the browser bundle, which + is supposed to use `tweetnacl`. + +## [v1.0.1](https://github.com/stellar/js-stellar-base/compare/v1.0.0...v1.0.1) + +- Restore `Operation.manageOffer` and `Operation.createPassiveOffer`, and issue + a warning if they're called. +- Add type definitions for the timeBounds property of transactions. + +## [v1.0.0](https://github.com/stellar/js-stellar-base/compare/v0.13.2...v1.0.0) + +- **Breaking change** Stellar Protocol 11 compatibility + - Rename `Operation.manageOffer` to `Operation.manageSellOffer`. + - Rename `Operation.createPassiveOffer` to `Operation.createPassiveSellOffer`. + - Add `Operation.manageBuyOffer`. +- **Breaking change** The `fee` parameter to `TransactionBuilder` is now + required. Failing to provide a fee will throw an error. + +## [v0.13.2](https://github.com/stellar/js-stellar-base/compare/v0.13.1...v0.13.2) + +- Bring DefinitelyTyped definitions into the repo for faster updating. +- Add missing Typescript type definitions. +- Add code to verify signatures when added to transactions. +- Replace ed25519 with sodium-native. +- Fix the xdr for SCP_MESSAGE. +- Update the README for the latest info. + +## [v0.13.1](https://github.com/stellar/js-stellar-base/compare/v0.13.0...v0.13.1) + +- Travis: Deploy NPM with an environment variable instead of an encrypted API + key. +- Instruct Travis to cache node_modules + +## [v0.13.0](https://github.com/stellar/js-stellar-base/compare/v0.12.0...v0.13.0) + +- Remove the `crypto` library. This reduces the number of Node built-ins we have + to shim into the production bundle, and incidentally fixes a bug with + Angular 6. + +## [v0.12.0](https://github.com/stellar/js-stellar-base/compare/v0.11.0...v0.12.0) + +- _Warning_ Calling TransactionBuilder without a `fee` param is now deprecated + and will issue a warning. In a later release, it will throw an error. Please + update your transaction builders as soon as you can! +- Add a `toXDR` function for transactions that lets you get the transaction as a + base64-encoded string (so you may enter it into the Stellar Laboratory XDR + viewer, for one) +- Fix TransactionBuilder example syntax errors +- Use more thorough "create account" documentation +- Add `Date` support for `TransactionBuilder` `timebounds` +- Add two functions to `Transaction` that support pre-generated transactions: + - `getKeypairSignature` helps users sign pre-generated transaction XDRs + - `addSignature` lets you add pre-generated signatures to a built transaction + +## 0.11.0 + +- Added ESLint and Prettier to enforce code style +- Upgraded dependencies, including Babel to 6 +- Bump local node version to 6.14.0 +- Change Operations.\_fromXDRAmount to not use scientific notation (1e-7) for + small amounts like 0.0000001. + +## 0.10.0 + +- **Breaking change** Added + [`TransactionBuilder.setTimeout`](https://stellar.github.io/js-stellar-base/TransactionBuilder.html#setTimeout) + method that sets `timebounds.max_time` on a transaction. Because of the + distributed nature of the Stellar network it is possible that the status of + your transaction will be determined after a long time if the network is highly + congested. If you want to be sure to receive the status of the transaction + within a given period you should set the TimeBounds with `maxTime` on the + transaction (this is what `setTimeout` does internally; if there's `minTime` + set but no `maxTime` it will be added). Call to + `TransactionBuilder.setTimeout` is required if Transaction does not have + `max_time` set. If you don't want to set timeout, use `TimeoutInfinite`. In + general you should set `TimeoutInfinite` only in smart contracts. Please check + [`TransactionBuilder.setTimeout`](https://stellar.github.io/js-stellar-base/TransactionBuilder.html#setTimeout) + docs for more information. +- Fixed decoding empty `homeDomain`. + +## 0.9.0 + +- Update `js-xdr` to support unmarshaling non-utf8 strings. +- String fields returned by `Operation.fromXDRObject()` are of type `Buffer` now + (except `SetOptions.home_domain` and `ManageData.name` - both required to be + ASCII by stellar-core). + +## 0.8.3 + +- Update `xdr` files to V10. + +## 0.8.2 + +- Upgrade `js-xdr`. + +## 0.8.1 + +- Removed `src` from `.npmignore`. + +## 0.8.0 + +- Added support for `bump_sequence` operation. +- Fixed many code style issues. +- Updated docs. + +## 0.7.8 + +- Updated dependencies. + +## 0.7.7 + +- Updated docs. + +## 0.7.6 + +- Updated docs. + +## 0.7.5 + +- `Keypair.constructor` now requires `type` field to define public-key signature + system used in this instance (so `Keypair` can support other systems in a + future). It also checks if public key and secret key match if both are passed + (to prevent nasty bugs). +- `Keypair.fromRawSeed` has been renamed to `Keypair.fromRawEd25519Seed` to make + it clear that the seed must be Ed25519 seed. +- It's now possible to instantiate `Memo` class so it's easier to check it's + type and value (without dealing with low level `xdr.Memo` objects). +- Changed `Asset.toXdrObject` to `Asset.toXDRObject` and + `Operation.operationToObject` to `Operation.toXDRObject` for consistency. +- Time bounds support for numeric input values. +- Added `browser` prop to package.json. + +## 0.7.4 + +- Update dependencies. +- Remove unused methods. + +## 0.7.3 + +- Allow hex string in setOptions signers + +## 0.7.2 + +- Updated XDR files + +## 0.7.1 + +- Checking hash preimage length + +## 0.7.0 + +- Support for new signer types: `sha256Hash`, `preAuthTx`. +- `StrKey` helper class with `strkey` encoding related methods. +- Removed deprecated methods: `Keypair.isValidPublicKey` (use `StrKey`), + `Keypair.isValidSecretKey` (use `StrKey`), `Keypair.fromSeed`, `Keypair.seed`, + `Keypair.rawSeed`. +- **Breaking changes**: + - `Network` must be explicitly selected. Previously testnet was a default + network. + - `Operation.setOptions()` method `signer` param changed. + - `Keypair.fromAccountId()` renamed to `Keypair.fromPublicKey()`. + - `Keypair.accountId()` renamed to `Keypair.publicKey()`. + - Dropping support for `End-of-Life` node versions. + +## 0.6.0 + +- **Breaking change** `ed25519` package is now optional dependency. +- Export account flags constants. + +## 0.5.7 + +- Fixes XDR decoding issue when using firefox + +## 0.5.6 + +- UTF-8 support in `Memo.text()`. + +## 0.5.5 + +- Make 0 a valid number for transaction fee, +- Fix signer in Operation.operationToObject() - close #82 + +## 0.5.4 + +- Fixed Lodash registering itself to global scope. + +## 0.5.3 + +- Add support for ManageData operation. + +## 0.5.2 + +- Moved `Account.isValidAccountId` to `Keypair.isValidPublicKey`. It's still + possible to use `Account.isValidAccountId` but it will be removed in the next + minor release (breaking change). (af10f2a) +- `signer.address` option in `Operation.setOptions` was changed to + `signer.pubKey`. It's still possible to use `signer.address` but it will be + removed in the next minor release (breaking change). (07f43fb) +- `Operation.setOptions` now accepts strings for `clearFlags`, `setFlags`, + `masterWeight`, `lowThreshold`, `medThreshold`, `highThreshold`, + `signer.weight` options. (665e018) +- Fixed TransactionBuilder timebounds option. (854f275) +- Added `CHANGELOG.md` file. + +## 0.5.1 + +- Now it's possible to pass `price` params as `{n: numerator, d: denominator}` + object. Thanks @FredericHeem. (#73) + +## 0.5.0 + +- **Breaking change** `sequence` in `Account` constructor must be a string. + (4da5dfc) +- **Breaking change** Removed deprecated methods (180a5b8): + - `Account.isValidAddress` (replaced by `Account.isValidAccountId`) + - `Account.getSequenceNumber` (replaced by `Account.sequenceNumber`) + - `Keypair.address` (replaced by `Keypair.accountId`) + - `Network.usePublicNet` (replaced by `Network.usePublicNetwork`) + - `Network.useTestNet` (replaced by `Network.useTestNetwork`) + - `TransactionBuilder.addSigner` (call `Transaction.sign` on build + `Transaction` object) diff --git a/node_modules/@stellar/stellar-base/LICENSE b/node_modules/@stellar/stellar-base/LICENSE new file mode 100644 index 00000000..e936ce3e --- /dev/null +++ b/node_modules/@stellar/stellar-base/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 Stellar Development Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/README.md b/node_modules/@stellar/stellar-base/README.md new file mode 100644 index 00000000..50220433 --- /dev/null +++ b/node_modules/@stellar/stellar-base/README.md @@ -0,0 +1,198 @@ +# JS Stellar Base + +[![Tests](https://github.com/stellar/js-stellar-base/actions/workflows/tests.yml/badge.svg)](https://github.com/stellar/js-stellar-base/actions/workflows/tests.yml) +[![Code Climate](https://codeclimate.com/github/stellar/js-stellar-base/badges/gpa.svg)](https://codeclimate.com/github/stellar/js-stellar-base) +[![Coverage Status](https://coveralls.io/repos/stellar/js-stellar-base/badge.svg?branch=master&service=github)](https://coveralls.io/github/stellar/js-stellar-base?branch=master) +[![Dependency Status](https://david-dm.org/stellar/js-stellar-base.svg)](https://david-dm.org/stellar/js-stellar-base) + +The stellar-base library is the lowest-level stellar helper library. It consists +of classes to read, write, hash, and sign the xdr structures that are used in +[stellar-core](https://github.com/stellar/stellar-core). This is an +implementation in JavaScript that can be used on either Node.js or web browsers. + +- **[API Reference](https://stellar.github.io/js-stellar-base/)** + +> **Warning!** The Node version of this package uses the [`sodium-native`](https://www.npmjs.com/package/sodium-native) package, a native implementation of [Ed25519](https://ed25519.cr.yp.to/) in Node.js, as an [optional dependency](https://docs.npmjs.com/files/package.json#optionaldependencies). +> This means that if for any reason installation of this package fails, `stellar-base` will fallback to the much slower implementation contained in [`tweetnacl`](https://www.npmjs.com/package/tweetnacl). +> +> If you'd explicitly prefer **not** to install the `sodium-native` package, pass the appropriate flag to skip optional dependencies when installing this package (e.g. `--no-optional` if using `npm install` or `--without-optional` using `yarn install`). +> +> If you are using `stellar-base` in a browser you can ignore this. However, for production backend deployments you should most likely be using `sodium-native`. +> If `sodium-native` is successfully installed and working, +> `StellarBase.FastSigning` variable will be equal `true`. Otherwise it will be +> `false`. + +## Quick start + +Using yarn to include js-stellar-base in your own project: + +```shell +yarn add @stellar/stellar-base +``` + +For browsers, [use Bower to install it](#to-use-in-the-browser). It exports a +variable `StellarBase`. The example below assumes you have `stellar-base.js` +relative to your html file. + +```html + + +``` + +## Install + +### To use as a module in a Node.js project + +1. Install it using yarn: + +```shell +yarn add @stellar/stellar-base +``` + +2. require/import it in your JavaScript: + +```js +var StellarBase = require('@stellar/stellar-base'); +``` + +### To self host for use in the browser + +1. Install it using [bower](http://bower.io): + +```shell +bower install stellar-base +``` + +2. Include it in the browser: + +```html + + +``` + +If you don't want to use install Bower, you can copy built JS files from the +[bower-js-stellar-base repo](https://github.com/stellar/bower-js-stellar-base). + +### To use the [cdnjs](https://cdnjs.com/libraries/stellar-base) hosted script in the browser + +1. Instruct the browser to fetch the library from + [cdnjs](https://cdnjs.com/libraries/stellar-base), a 3rd party service that + hosts js libraries: + +```html + + +``` + +Note that this method relies using a third party to host the JS library. This +may not be entirely secure. + +Make sure that you are using the latest version number. They can be found on the +[releases page in Github](https://github.com/stellar/js-stellar-base/releases). + +### To develop and test js-stellar-base itself + +1. Install Node 18.x + +We support the oldest LTS release of Node, which is [currently 18.x](https://nodejs.org/en/about/releases/). Please likewise install and develop on Node 16 so you don't get surprised when your code works locally but breaks in CI. + +If you work on several projects that use different Node versions, you might find helpful to install a NodeJS version manager: + + - https://github.com/creationix/nvm + - https://github.com/wbyoung/avn + - https://github.com/asdf-vm/asdf + +2. Install Yarn + +This project uses [Yarn](https://yarnpkg.com/) to manages its dependencies. To install Yarn, follow the project instructions available at https://yarnpkg.com/en/docs/install. + +3. Clone the repo + +```shell +git clone https://github.com/stellar/js-stellar-base.git +``` + +4. Install dependencies inside js-stellar-base folder + +```shell +cd js-stellar-base +yarn +``` + +5. Observe the project's code style + +While you're making changes, make sure to regularly run the linter to catch any +linting errors (in addition to making sure your text editor supports ESLint) + +```shell +yarn lint +``` + +as well as fixing any formatting errors with + +```shell +yarn fmt +``` + +If you're working on a file not in `src`, limit your code to Node 6.16 ES! See +what's supported here: https://node.green/. (Our npm library must support +earlier versions of Node, so the tests need to run on those versions.) + +#### Updating XDR definitions + +1. Make sure you have [Docker](https://www.docker.com/) installed and running. +2. `make reset-xdr` + +## Usage + +For information on how to use js-stellar-base, take a look at the docs in the +[docs folder](./docs). + +## Testing + +To run all tests: + +```shell +yarn test +``` + +To run a specific set of tests: + +```shell +yarn test:node +yarn test:browser +``` + +Tests are also run automatically in Github Actions for every master commit and +pull request. + +## Documentation + +Documentation for this repo lives inside the [docs folder](./docs). + +## Contributing + +Please see the [CONTRIBUTING.md](./CONTRIBUTING.md) for details on how to +contribute to this project. + +## Publishing to npm + +``` +npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease] +``` + +A new version will be published to npm **and** Bower by GitHub Actions. + +npm >= 2.13.0 required. Read more about +[npm version](https://docs.npmjs.com/cli/version). + +## License + +js-stellar-base is licensed under an Apache-2.0 license. See the +[LICENSE](./LICENSE) file for details. diff --git a/node_modules/@stellar/stellar-base/dist/stellar-base.js b/node_modules/@stellar/stellar-base/dist/stellar-base.js new file mode 100644 index 00000000..a3de04b0 --- /dev/null +++ b/node_modules/@stellar/stellar-base/dist/stellar-base.js @@ -0,0 +1,32371 @@ +var StellarBase; +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 41: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var $defineProperty = __webpack_require__(655); + +var $SyntaxError = __webpack_require__(8068); +var $TypeError = __webpack_require__(9675); + +var gopd = __webpack_require__(5795); + +/** @type {import('.')} */ +module.exports = function defineDataProperty( + obj, + property, + value +) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new $TypeError('`obj` must be an object or a function`'); + } + if (typeof property !== 'string' && typeof property !== 'symbol') { + throw new $TypeError('`property` must be a string or a symbol`'); + } + if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { + throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); + } + if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { + throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); + } + if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { + throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); + } + if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { + throw new $TypeError('`loose`, if provided, must be a boolean'); + } + + var nonEnumerable = arguments.length > 3 ? arguments[3] : null; + var nonWritable = arguments.length > 4 ? arguments[4] : null; + var nonConfigurable = arguments.length > 5 ? arguments[5] : null; + var loose = arguments.length > 6 ? arguments[6] : false; + + /* @type {false | TypedPropertyDescriptor} */ + var desc = !!gopd && gopd(obj, property); + + if ($defineProperty) { + $defineProperty(obj, property, { + configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, + enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, + value: value, + writable: nonWritable === null && desc ? desc.writable : !nonWritable + }); + } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { + // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable + obj[property] = value; // eslint-disable-line no-param-reassign + } else { + throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); + } +}; + + +/***/ }), + +/***/ 76: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./functionCall')} */ +module.exports = Function.prototype.call; + + +/***/ }), + +/***/ 251: +/***/ ((__unused_webpack_module, exports) => { + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + + +/***/ }), + +/***/ 392: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(2861).Buffer) + +// prototype class for hash functions +function Hash (blockSize, finalSize) { + this._block = Buffer.alloc(blockSize) + this._finalSize = finalSize + this._blockSize = blockSize + this._len = 0 +} + +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8' + data = Buffer.from(data, enc) + } + + var block = this._block + var blockSize = this._blockSize + var length = data.length + var accum = this._len + + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize + var remainder = Math.min(length - offset, blockSize - assigned) + + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i] + } + + accum += remainder + offset += remainder + + if ((accum % blockSize) === 0) { + this._update(block) + } + } + + this._len += length + return this +} + +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize + + this._block[rem] = 0x80 + + // zero (rem + 1) trailing bits, where (rem + 1) is the smallest + // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + this._block.fill(0, rem + 1) + + if (rem >= this._finalSize) { + this._update(this._block) + this._block.fill(0) + } + + var bits = this._len * 8 + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4) + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0 + var highBits = (bits - lowBits) / 0x100000000 + + this._block.writeUInt32BE(highBits, this._blockSize - 8) + this._block.writeUInt32BE(lowBits, this._blockSize - 4) + } + + this._update(this._block) + var hash = this._hash() + + return enc ? hash.toString(enc) : hash +} + +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass') +} + +module.exports = Hash + + +/***/ }), + +/***/ 414: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./round')} */ +module.exports = Math.round; + + +/***/ }), + +/***/ 453: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var undefined; + +var $Object = __webpack_require__(9612); + +var $Error = __webpack_require__(9383); +var $EvalError = __webpack_require__(1237); +var $RangeError = __webpack_require__(9290); +var $ReferenceError = __webpack_require__(9538); +var $SyntaxError = __webpack_require__(8068); +var $TypeError = __webpack_require__(9675); +var $URIError = __webpack_require__(5345); + +var abs = __webpack_require__(1514); +var floor = __webpack_require__(8968); +var max = __webpack_require__(6188); +var min = __webpack_require__(8002); +var pow = __webpack_require__(5880); +var round = __webpack_require__(414); +var sign = __webpack_require__(3093); + +var $Function = Function; + +// eslint-disable-next-line consistent-return +var getEvalledConstructor = function (expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); + } catch (e) {} +}; + +var $gOPD = __webpack_require__(5795); +var $defineProperty = __webpack_require__(655); + +var throwTypeError = function () { + throw new $TypeError(); +}; +var ThrowTypeError = $gOPD + ? (function () { + try { + // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties + arguments.callee; // IE 8 does not throw here + return throwTypeError; + } catch (calleeThrows) { + try { + // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') + return $gOPD(arguments, 'callee').get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }()) + : throwTypeError; + +var hasSymbols = __webpack_require__(4039)(); + +var getProto = __webpack_require__(3628); +var $ObjectGPO = __webpack_require__(1064); +var $ReflectGPO = __webpack_require__(8648); + +var $apply = __webpack_require__(1002); +var $call = __webpack_require__(76); + +var needsEval = {}; + +var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); + +var INTRINSICS = { + __proto__: null, + '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, + '%Array%': Array, + '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, + '%AsyncFromSyncIteratorPrototype%': undefined, + '%AsyncFunction%': needsEval, + '%AsyncGenerator%': needsEval, + '%AsyncGeneratorFunction%': needsEval, + '%AsyncIteratorPrototype%': needsEval, + '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, + '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, + '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, + '%Boolean%': Boolean, + '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '%Date%': Date, + '%decodeURI%': decodeURI, + '%decodeURIComponent%': decodeURIComponent, + '%encodeURI%': encodeURI, + '%encodeURIComponent%': encodeURIComponent, + '%Error%': $Error, + '%eval%': eval, // eslint-disable-line no-eval + '%EvalError%': $EvalError, + '%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array, + '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, + '%Function%': $Function, + '%GeneratorFunction%': needsEval, + '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '%isFinite%': isFinite, + '%isNaN%': isNaN, + '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, + '%JSON%': typeof JSON === 'object' ? JSON : undefined, + '%Map%': typeof Map === 'undefined' ? undefined : Map, + '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), + '%Math%': Math, + '%Number%': Number, + '%Object%': $Object, + '%Object.getOwnPropertyDescriptor%': $gOPD, + '%parseFloat%': parseFloat, + '%parseInt%': parseInt, + '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '%RangeError%': $RangeError, + '%ReferenceError%': $ReferenceError, + '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '%RegExp%': RegExp, + '%Set%': typeof Set === 'undefined' ? undefined : Set, + '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), + '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '%String%': String, + '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, + '%Symbol%': hasSymbols ? Symbol : undefined, + '%SyntaxError%': $SyntaxError, + '%ThrowTypeError%': ThrowTypeError, + '%TypedArray%': TypedArray, + '%TypeError%': $TypeError, + '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '%URIError%': $URIError, + '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, + '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet, + + '%Function.prototype.call%': $call, + '%Function.prototype.apply%': $apply, + '%Object.defineProperty%': $defineProperty, + '%Object.getPrototypeOf%': $ObjectGPO, + '%Math.abs%': abs, + '%Math.floor%': floor, + '%Math.max%': max, + '%Math.min%': min, + '%Math.pow%': pow, + '%Math.round%': round, + '%Math.sign%': sign, + '%Reflect.getPrototypeOf%': $ReflectGPO +}; + +if (getProto) { + try { + null.error; // eslint-disable-line no-unused-expressions + } catch (e) { + // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 + var errorProto = getProto(getProto(e)); + INTRINSICS['%Error.prototype%'] = errorProto; + } +} + +var doEval = function doEval(name) { + var value; + if (name === '%AsyncFunction%') { + value = getEvalledConstructor('async function () {}'); + } else if (name === '%GeneratorFunction%') { + value = getEvalledConstructor('function* () {}'); + } else if (name === '%AsyncGeneratorFunction%') { + value = getEvalledConstructor('async function* () {}'); + } else if (name === '%AsyncGenerator%') { + var fn = doEval('%AsyncGeneratorFunction%'); + if (fn) { + value = fn.prototype; + } + } else if (name === '%AsyncIteratorPrototype%') { + var gen = doEval('%AsyncGenerator%'); + if (gen && getProto) { + value = getProto(gen.prototype); + } + } + + INTRINSICS[name] = value; + + return value; +}; + +var LEGACY_ALIASES = { + __proto__: null, + '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], + '%ArrayPrototype%': ['Array', 'prototype'], + '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], + '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], + '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], + '%ArrayProto_values%': ['Array', 'prototype', 'values'], + '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], + '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], + '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], + '%BooleanPrototype%': ['Boolean', 'prototype'], + '%DataViewPrototype%': ['DataView', 'prototype'], + '%DatePrototype%': ['Date', 'prototype'], + '%ErrorPrototype%': ['Error', 'prototype'], + '%EvalErrorPrototype%': ['EvalError', 'prototype'], + '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], + '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], + '%FunctionPrototype%': ['Function', 'prototype'], + '%Generator%': ['GeneratorFunction', 'prototype'], + '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], + '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], + '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], + '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], + '%JSONParse%': ['JSON', 'parse'], + '%JSONStringify%': ['JSON', 'stringify'], + '%MapPrototype%': ['Map', 'prototype'], + '%NumberPrototype%': ['Number', 'prototype'], + '%ObjectPrototype%': ['Object', 'prototype'], + '%ObjProto_toString%': ['Object', 'prototype', 'toString'], + '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], + '%PromisePrototype%': ['Promise', 'prototype'], + '%PromiseProto_then%': ['Promise', 'prototype', 'then'], + '%Promise_all%': ['Promise', 'all'], + '%Promise_reject%': ['Promise', 'reject'], + '%Promise_resolve%': ['Promise', 'resolve'], + '%RangeErrorPrototype%': ['RangeError', 'prototype'], + '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], + '%RegExpPrototype%': ['RegExp', 'prototype'], + '%SetPrototype%': ['Set', 'prototype'], + '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], + '%StringPrototype%': ['String', 'prototype'], + '%SymbolPrototype%': ['Symbol', 'prototype'], + '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], + '%TypedArrayPrototype%': ['TypedArray', 'prototype'], + '%TypeErrorPrototype%': ['TypeError', 'prototype'], + '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], + '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], + '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], + '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], + '%URIErrorPrototype%': ['URIError', 'prototype'], + '%WeakMapPrototype%': ['WeakMap', 'prototype'], + '%WeakSetPrototype%': ['WeakSet', 'prototype'] +}; + +var bind = __webpack_require__(6743); +var hasOwn = __webpack_require__(9957); +var $concat = bind.call($call, Array.prototype.concat); +var $spliceApply = bind.call($apply, Array.prototype.splice); +var $replace = bind.call($call, String.prototype.replace); +var $strSlice = bind.call($call, String.prototype.slice); +var $exec = bind.call($call, RegExp.prototype.exec); + +/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ +var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; +var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ +var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + if (first === '%' && last !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); + } else if (last === '%' && first !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); + } + var result = []; + $replace(string, rePropName, function (match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; + }); + return result; +}; +/* end adaptation */ + +var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = '%' + alias[0] + '%'; + } + + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === 'undefined' && !allowMissing) { + throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + + return { + alias: alias, + name: intrinsicName, + value: value + }; + } + + throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== 'string' || name.length === 0) { + throw new $TypeError('intrinsic name must be a non-empty string'); + } + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + + if ($exec(/^%?[^%]*%?$/, name) === null) { + throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); + } + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; + + var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + if ( + ( + (first === '"' || first === "'" || first === '`') + || (last === '"' || last === "'" || last === '`') + ) + && first !== last + ) { + throw new $SyntaxError('property names with quotes must have matching quotes'); + } + if (part === 'constructor' || !isOwn) { + skipFurtherCaching = true; + } + + intrinsicBaseName += '.' + part; + intrinsicRealName = '%' + intrinsicBaseName + '%'; + + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); + } + return void undefined; + } + if ($gOPD && (i + 1) >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + + // By convention, when a data property is converted to an accessor + // property to emulate a data property that does not suffer from + // the override mistake, that accessor's getter is marked with + // an `originalValue` property. Here, when we detect this, we + // uphold the illusion by pretending to see that original data + // property, i.e., returning the value rather than the getter + // itself. + if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; +}; + + +/***/ }), + +/***/ 487: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var setFunctionLength = __webpack_require__(6897); + +var $defineProperty = __webpack_require__(655); + +var callBindBasic = __webpack_require__(3126); +var applyBind = __webpack_require__(2205); + +module.exports = function callBind(originalFunction) { + var func = callBindBasic(arguments); + var adjustedLength = originalFunction.length - (arguments.length - 1); + return setFunctionLength( + func, + 1 + (adjustedLength > 0 ? adjustedLength : 0), + true + ); +}; + +if ($defineProperty) { + $defineProperty(module.exports, 'apply', { value: applyBind }); +} else { + module.exports.apply = applyBind; +} + + +/***/ }), + +/***/ 537: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +/* provided dependency */ var process = __webpack_require__(5606); +/* provided dependency */ var console = __webpack_require__(6763); +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || + function getOwnPropertyDescriptors(obj) { + var keys = Object.keys(obj); + var descriptors = {}; + for (var i = 0; i < keys.length; i++) { + descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]); + } + return descriptors; + }; + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + if (typeof process !== 'undefined' && process.noDeprecation === true) { + return fn; + } + + // Allow for deprecating things in the process of starting up. + if (typeof process === 'undefined') { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnvRegex = /^$/; + +if (process.env.NODE_DEBUG) { + var debugEnv = process.env.NODE_DEBUG; + debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&') + .replace(/\*/g, '.*') + .replace(/,/g, '$|^') + .toUpperCase(); + debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i'); +} +exports.debuglog = function(set) { + set = set.toUpperCase(); + if (!debugs[set]) { + if (debugEnvRegex.test(set)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').slice(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.slice(1, -1); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +exports.types = __webpack_require__(9032); + +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; +exports.types.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; +exports.types.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; +exports.types.isNativeError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = __webpack_require__(1135); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = __webpack_require__(6698); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined; + +exports.promisify = function promisify(original) { + if (typeof original !== 'function') + throw new TypeError('The "original" argument must be of type Function'); + + if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) { + var fn = original[kCustomPromisifiedSymbol]; + if (typeof fn !== 'function') { + throw new TypeError('The "util.promisify.custom" argument must be of type Function'); + } + Object.defineProperty(fn, kCustomPromisifiedSymbol, { + value: fn, enumerable: false, writable: false, configurable: true + }); + return fn; + } + + function fn() { + var promiseResolve, promiseReject; + var promise = new Promise(function (resolve, reject) { + promiseResolve = resolve; + promiseReject = reject; + }); + + var args = []; + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + args.push(function (err, value) { + if (err) { + promiseReject(err); + } else { + promiseResolve(value); + } + }); + + try { + original.apply(this, args); + } catch (err) { + promiseReject(err); + } + + return promise; + } + + Object.setPrototypeOf(fn, Object.getPrototypeOf(original)); + + if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, { + value: fn, enumerable: false, writable: false, configurable: true + }); + return Object.defineProperties( + fn, + getOwnPropertyDescriptors(original) + ); +} + +exports.promisify.custom = kCustomPromisifiedSymbol + +function callbackifyOnRejected(reason, cb) { + // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M). + // Because `null` is a special error value in callbacks which means "no error + // occurred", we error-wrap so the callback consumer can distinguish between + // "the promise rejected with null" or "the promise fulfilled with undefined". + if (!reason) { + var newReason = new Error('Promise was rejected with a falsy value'); + newReason.reason = reason; + reason = newReason; + } + return cb(reason); +} + +function callbackify(original) { + if (typeof original !== 'function') { + throw new TypeError('The "original" argument must be of type Function'); + } + + // We DO NOT return the promise as it gives the user a false sense that + // the promise is actually somehow related to the callback's execution + // and that the callback throwing will reject the promise. + function callbackified() { + var args = []; + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + + var maybeCb = args.pop(); + if (typeof maybeCb !== 'function') { + throw new TypeError('The last argument must be of type Function'); + } + var self = this; + var cb = function() { + return maybeCb.apply(self, arguments); + }; + // In true node style we process the callback on `nextTick` with all the + // implications (stack, `uncaughtException`, `async_hooks`) + original.apply(this, args) + .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) }, + function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) }); + } + + Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)); + Object.defineProperties(callbackified, + getOwnPropertyDescriptors(original)); + return callbackified; +} +exports.callbackify = callbackify; + + +/***/ }), + +/***/ 592: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var $defineProperty = __webpack_require__(655); + +var hasPropertyDescriptors = function hasPropertyDescriptors() { + return !!$defineProperty; +}; + +hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { + // node v0.6 has a bug where array lengths can be Set but not Defined + if (!$defineProperty) { + return null; + } + try { + return $defineProperty([], 'length', { value: 1 }).length !== 1; + } catch (e) { + // In Firefox 4-22, defining length on an array throws an exception. + return true; + } +}; + +module.exports = hasPropertyDescriptors; + + +/***/ }), + +/***/ 655: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('.')} */ +var $defineProperty = Object.defineProperty || false; +if ($defineProperty) { + try { + $defineProperty({}, 'a', { value: 1 }); + } catch (e) { + // IE 8 has a broken defineProperty + $defineProperty = false; + } +} + +module.exports = $defineProperty; + + +/***/ }), + +/***/ 1002: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./functionApply')} */ +module.exports = Function.prototype.apply; + + +/***/ }), + +/***/ 1064: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var $Object = __webpack_require__(9612); + +/** @type {import('./Object.getPrototypeOf')} */ +module.exports = $Object.getPrototypeOf || null; + + +/***/ }), + +/***/ 1093: +/***/ ((module) => { + +"use strict"; + + +var toStr = Object.prototype.toString; + +module.exports = function isArguments(value) { + var str = toStr.call(value); + var isArgs = str === '[object Arguments]'; + if (!isArgs) { + isArgs = str !== '[object Array]' && + value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + toStr.call(value.callee) === '[object Function]'; + } + return isArgs; +}; + + +/***/ }), + +/***/ 1135: +/***/ ((module) => { + +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} + +/***/ }), + +/***/ 1189: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var slice = Array.prototype.slice; +var isArgs = __webpack_require__(1093); + +var origKeys = Object.keys; +var keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8875); + +var originalKeys = Object.keys; + +keysShim.shim = function shimObjectKeys() { + if (Object.keys) { + var keysWorksWithArguments = (function () { + // Safari 5.0 bug + var args = Object.keys(arguments); + return args && args.length === arguments.length; + }(1, 2)); + if (!keysWorksWithArguments) { + Object.keys = function keys(object) { // eslint-disable-line func-name-matching + if (isArgs(object)) { + return originalKeys(slice.call(object)); + } + return originalKeys(object); + }; + } + } else { + Object.keys = keysShim; + } + return Object.keys || keysShim; +}; + +module.exports = keysShim; + + +/***/ }), + +/***/ 1237: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./eval')} */ +module.exports = EvalError; + + +/***/ }), + +/***/ 1281: +/***/ (() => { + +/* (ignored) */ + +/***/ }), + +/***/ 1333: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./shams')} */ +/* eslint complexity: [2, 18], max-statements: [2, 33] */ +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } + if (typeof Symbol.iterator === 'symbol') { return true; } + + /** @type {{ [k in symbol]?: unknown }} */ + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + if (typeof sym === 'string') { return false; } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } + + // temp disabled per https://github.com/ljharb/object.assign/issues/17 + // if (sym instanceof Symbol) { return false; } + // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 + // if (!(symObj instanceof Symbol)) { return false; } + + // if (typeof Symbol.prototype.toString !== 'function') { return false; } + // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } + + var symVal = 42; + obj[sym] = symVal; + for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } + + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { return false; } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + // eslint-disable-next-line no-extra-parens + var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym)); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } + } + + return true; +}; + + +/***/ }), + +/***/ 1514: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./abs')} */ +module.exports = Math.abs; + + +/***/ }), + +/***/ 2205: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var bind = __webpack_require__(6743); +var $apply = __webpack_require__(1002); +var actualApply = __webpack_require__(3144); + +/** @type {import('./applyBind')} */ +module.exports = function applyBind() { + return actualApply(bind, $apply, arguments); +}; + + +/***/ }), + +/***/ 2299: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Currently in sync with Node.js lib/internal/util/comparisons.js +// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9 + + + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +var regexFlagsSupported = /a/g.flags !== undefined; +var arrayFromSet = function arrayFromSet(set) { + var array = []; + set.forEach(function (value) { + return array.push(value); + }); + return array; +}; +var arrayFromMap = function arrayFromMap(map) { + var array = []; + map.forEach(function (value, key) { + return array.push([key, value]); + }); + return array; +}; +var objectIs = Object.is ? Object.is : __webpack_require__(7653); +var objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () { + return []; +}; +var numberIsNaN = Number.isNaN ? Number.isNaN : __webpack_require__(4133); +function uncurryThis(f) { + return f.call.bind(f); +} +var hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty); +var propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable); +var objectToString = uncurryThis(Object.prototype.toString); +var _require$types = (__webpack_require__(537).types), + isAnyArrayBuffer = _require$types.isAnyArrayBuffer, + isArrayBufferView = _require$types.isArrayBufferView, + isDate = _require$types.isDate, + isMap = _require$types.isMap, + isRegExp = _require$types.isRegExp, + isSet = _require$types.isSet, + isNativeError = _require$types.isNativeError, + isBoxedPrimitive = _require$types.isBoxedPrimitive, + isNumberObject = _require$types.isNumberObject, + isStringObject = _require$types.isStringObject, + isBooleanObject = _require$types.isBooleanObject, + isBigIntObject = _require$types.isBigIntObject, + isSymbolObject = _require$types.isSymbolObject, + isFloat32Array = _require$types.isFloat32Array, + isFloat64Array = _require$types.isFloat64Array; +function isNonIndex(key) { + if (key.length === 0 || key.length > 10) return true; + for (var i = 0; i < key.length; i++) { + var code = key.charCodeAt(i); + if (code < 48 || code > 57) return true; + } + // The maximum size for an array is 2 ** 32 -1. + return key.length === 10 && key >= Math.pow(2, 32); +} +function getOwnNonIndexProperties(value) { + return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value))); +} + +// Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js +// original notice: +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +function compare(a, b) { + if (a === b) { + return 0; + } + var x = a.length; + var y = b.length; + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + if (x < y) { + return -1; + } + if (y < x) { + return 1; + } + return 0; +} +var ONLY_ENUMERABLE = undefined; +var kStrict = true; +var kLoose = false; +var kNoIterator = 0; +var kIsArray = 1; +var kIsSet = 2; +var kIsMap = 3; + +// Check if they have the same source and flags +function areSimilarRegExps(a, b) { + return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b); +} +function areSimilarFloatArrays(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + for (var offset = 0; offset < a.byteLength; offset++) { + if (a[offset] !== b[offset]) { + return false; + } + } + return true; +} +function areSimilarTypedArrays(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0; +} +function areEqualArrayBuffers(buf1, buf2) { + return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0; +} +function isEqualBoxedPrimitive(val1, val2) { + if (isNumberObject(val1)) { + return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2)); + } + if (isStringObject(val1)) { + return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2); + } + if (isBooleanObject(val1)) { + return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2); + } + if (isBigIntObject(val1)) { + return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2); + } + return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2); +} + +// Notes: Type tags are historical [[Class]] properties that can be set by +// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS +// and retrieved using Object.prototype.toString.call(obj) in JS +// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring +// for a list of tags pre-defined in the spec. +// There are some unspecified tags in the wild too (e.g. typed array tags). +// Since tags can be altered, they only serve fast failures +// +// Typed arrays and buffers are checked by comparing the content in their +// underlying ArrayBuffer. This optimization requires that it's +// reasonable to interpret their underlying memory in the same way, +// which is checked by comparing their type tags. +// (e.g. a Uint8Array and a Uint16Array with the same memory content +// could still be different because they will be interpreted differently). +// +// For strict comparison, objects should have +// a) The same built-in type tags +// b) The same prototypes. + +function innerDeepEqual(val1, val2, strict, memos) { + // All identical values are equivalent, as determined by ===. + if (val1 === val2) { + if (val1 !== 0) return true; + return strict ? objectIs(val1, val2) : true; + } + + // Check more closely if val1 and val2 are equal. + if (strict) { + if (_typeof(val1) !== 'object') { + return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2); + } + if (_typeof(val2) !== 'object' || val1 === null || val2 === null) { + return false; + } + if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) { + return false; + } + } else { + if (val1 === null || _typeof(val1) !== 'object') { + if (val2 === null || _typeof(val2) !== 'object') { + // eslint-disable-next-line eqeqeq + return val1 == val2; + } + return false; + } + if (val2 === null || _typeof(val2) !== 'object') { + return false; + } + } + var val1Tag = objectToString(val1); + var val2Tag = objectToString(val2); + if (val1Tag !== val2Tag) { + return false; + } + if (Array.isArray(val1)) { + // Check for sparse arrays and general fast path + if (val1.length !== val2.length) { + return false; + } + var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE); + var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE); + if (keys1.length !== keys2.length) { + return false; + } + return keyCheck(val1, val2, strict, memos, kIsArray, keys1); + } + // [browserify] This triggers on certain types in IE (Map/Set) so we don't + // wan't to early return out of the rest of the checks. However we can check + // if the second value is one of these values and the first isn't. + if (val1Tag === '[object Object]') { + // return keyCheck(val1, val2, strict, memos, kNoIterator); + if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) { + return false; + } + } + if (isDate(val1)) { + if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) { + return false; + } + } else if (isRegExp(val1)) { + if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) { + return false; + } + } else if (isNativeError(val1) || val1 instanceof Error) { + // Do not compare the stack as it might differ even though the error itself + // is otherwise identical. + if (val1.message !== val2.message || val1.name !== val2.name) { + return false; + } + } else if (isArrayBufferView(val1)) { + if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) { + if (!areSimilarFloatArrays(val1, val2)) { + return false; + } + } else if (!areSimilarTypedArrays(val1, val2)) { + return false; + } + // Buffer.compare returns true, so val1.length === val2.length. If they both + // only contain numeric keys, we don't need to exam further than checking + // the symbols. + var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE); + var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE); + if (_keys.length !== _keys2.length) { + return false; + } + return keyCheck(val1, val2, strict, memos, kNoIterator, _keys); + } else if (isSet(val1)) { + if (!isSet(val2) || val1.size !== val2.size) { + return false; + } + return keyCheck(val1, val2, strict, memos, kIsSet); + } else if (isMap(val1)) { + if (!isMap(val2) || val1.size !== val2.size) { + return false; + } + return keyCheck(val1, val2, strict, memos, kIsMap); + } else if (isAnyArrayBuffer(val1)) { + if (!areEqualArrayBuffers(val1, val2)) { + return false; + } + } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) { + return false; + } + return keyCheck(val1, val2, strict, memos, kNoIterator); +} +function getEnumerables(val, keys) { + return keys.filter(function (k) { + return propertyIsEnumerable(val, k); + }); +} +function keyCheck(val1, val2, strict, memos, iterationType, aKeys) { + // For all remaining Object pairs, including Array, objects and Maps, + // equivalence is determined by having: + // a) The same number of owned enumerable properties + // b) The same set of keys/indexes (although not necessarily the same order) + // c) Equivalent values for every corresponding key/index + // d) For Sets and Maps, equal contents + // Note: this accounts for both named and indexed properties on Arrays. + if (arguments.length === 5) { + aKeys = Object.keys(val1); + var bKeys = Object.keys(val2); + + // The pair must have the same number of owned properties. + if (aKeys.length !== bKeys.length) { + return false; + } + } + + // Cheap key test + var i = 0; + for (; i < aKeys.length; i++) { + if (!hasOwnProperty(val2, aKeys[i])) { + return false; + } + } + if (strict && arguments.length === 5) { + var symbolKeysA = objectGetOwnPropertySymbols(val1); + if (symbolKeysA.length !== 0) { + var count = 0; + for (i = 0; i < symbolKeysA.length; i++) { + var key = symbolKeysA[i]; + if (propertyIsEnumerable(val1, key)) { + if (!propertyIsEnumerable(val2, key)) { + return false; + } + aKeys.push(key); + count++; + } else if (propertyIsEnumerable(val2, key)) { + return false; + } + } + var symbolKeysB = objectGetOwnPropertySymbols(val2); + if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) { + return false; + } + } else { + var _symbolKeysB = objectGetOwnPropertySymbols(val2); + if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) { + return false; + } + } + } + if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) { + return true; + } + + // Use memos to handle cycles. + if (memos === undefined) { + memos = { + val1: new Map(), + val2: new Map(), + position: 0 + }; + } else { + // We prevent up to two map.has(x) calls by directly retrieving the value + // and checking for undefined. The map can only contain numbers, so it is + // safe to check for undefined only. + var val2MemoA = memos.val1.get(val1); + if (val2MemoA !== undefined) { + var val2MemoB = memos.val2.get(val2); + if (val2MemoB !== undefined) { + return val2MemoA === val2MemoB; + } + } + memos.position++; + } + memos.val1.set(val1, memos.position); + memos.val2.set(val2, memos.position); + var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType); + memos.val1.delete(val1); + memos.val2.delete(val2); + return areEq; +} +function setHasEqualElement(set, val1, strict, memo) { + // Go looking. + var setValues = arrayFromSet(set); + for (var i = 0; i < setValues.length; i++) { + var val2 = setValues[i]; + if (innerDeepEqual(val1, val2, strict, memo)) { + // Remove the matching element to make sure we do not check that again. + set.delete(val2); + return true; + } + } + return false; +} + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using +// Sadly it is not possible to detect corresponding values properly in case the +// type is a string, number, bigint or boolean. The reason is that those values +// can match lots of different string values (e.g., 1n == '+00001'). +function findLooseMatchingPrimitives(prim) { + switch (_typeof(prim)) { + case 'undefined': + return null; + case 'object': + // Only pass in null as object! + return undefined; + case 'symbol': + return false; + case 'string': + prim = +prim; + // Loose equal entries exist only if the string is possible to convert to + // a regular number and not NaN. + // Fall through + case 'number': + if (numberIsNaN(prim)) { + return false; + } + } + return true; +} +function setMightHaveLoosePrim(a, b, prim) { + var altValue = findLooseMatchingPrimitives(prim); + if (altValue != null) return altValue; + return b.has(altValue) && !a.has(altValue); +} +function mapMightHaveLoosePrim(a, b, prim, item, memo) { + var altValue = findLooseMatchingPrimitives(prim); + if (altValue != null) { + return altValue; + } + var curB = b.get(altValue); + if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) { + return false; + } + return !a.has(altValue) && innerDeepEqual(item, curB, false, memo); +} +function setEquiv(a, b, strict, memo) { + // This is a lazily initiated Set of entries which have to be compared + // pairwise. + var set = null; + var aValues = arrayFromSet(a); + for (var i = 0; i < aValues.length; i++) { + var val = aValues[i]; + // Note: Checking for the objects first improves the performance for object + // heavy sets but it is a minor slow down for primitives. As they are fast + // to check this improves the worst case scenario instead. + if (_typeof(val) === 'object' && val !== null) { + if (set === null) { + set = new Set(); + } + // If the specified value doesn't exist in the second set its an not null + // object (or non strict only: a not matching primitive) we'll need to go + // hunting for something thats deep-(strict-)equal to it. To make this + // O(n log n) complexity we have to copy these values in a new set first. + set.add(val); + } else if (!b.has(val)) { + if (strict) return false; + + // Fast path to detect missing string, symbol, undefined and null values. + if (!setMightHaveLoosePrim(a, b, val)) { + return false; + } + if (set === null) { + set = new Set(); + } + set.add(val); + } + } + if (set !== null) { + var bValues = arrayFromSet(b); + for (var _i = 0; _i < bValues.length; _i++) { + var _val = bValues[_i]; + // We have to check if a primitive value is already + // matching and only if it's not, go hunting for it. + if (_typeof(_val) === 'object' && _val !== null) { + if (!setHasEqualElement(set, _val, strict, memo)) return false; + } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) { + return false; + } + } + return set.size === 0; + } + return true; +} +function mapHasEqualEntry(set, map, key1, item1, strict, memo) { + // To be able to handle cases like: + // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']]) + // ... we need to consider *all* matching keys, not just the first we find. + var setValues = arrayFromSet(set); + for (var i = 0; i < setValues.length; i++) { + var key2 = setValues[i]; + if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) { + set.delete(key2); + return true; + } + } + return false; +} +function mapEquiv(a, b, strict, memo) { + var set = null; + var aEntries = arrayFromMap(a); + for (var i = 0; i < aEntries.length; i++) { + var _aEntries$i = _slicedToArray(aEntries[i], 2), + key = _aEntries$i[0], + item1 = _aEntries$i[1]; + if (_typeof(key) === 'object' && key !== null) { + if (set === null) { + set = new Set(); + } + set.add(key); + } else { + // By directly retrieving the value we prevent another b.has(key) check in + // almost all possible cases. + var item2 = b.get(key); + if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) { + if (strict) return false; + // Fast path to detect missing string, symbol, undefined and null + // keys. + if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false; + if (set === null) { + set = new Set(); + } + set.add(key); + } + } + } + if (set !== null) { + var bEntries = arrayFromMap(b); + for (var _i2 = 0; _i2 < bEntries.length; _i2++) { + var _bEntries$_i = _slicedToArray(bEntries[_i2], 2), + _key = _bEntries$_i[0], + item = _bEntries$_i[1]; + if (_typeof(_key) === 'object' && _key !== null) { + if (!mapHasEqualEntry(set, a, _key, item, strict, memo)) return false; + } else if (!strict && (!a.has(_key) || !innerDeepEqual(a.get(_key), item, false, memo)) && !mapHasEqualEntry(set, a, _key, item, false, memo)) { + return false; + } + } + return set.size === 0; + } + return true; +} +function objEquiv(a, b, strict, keys, memos, iterationType) { + // Sets and maps don't have their entries accessible via normal object + // properties. + var i = 0; + if (iterationType === kIsSet) { + if (!setEquiv(a, b, strict, memos)) { + return false; + } + } else if (iterationType === kIsMap) { + if (!mapEquiv(a, b, strict, memos)) { + return false; + } + } else if (iterationType === kIsArray) { + for (; i < a.length; i++) { + if (hasOwnProperty(a, i)) { + if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) { + return false; + } + } else if (hasOwnProperty(b, i)) { + return false; + } else { + // Array is sparse. + var keysA = Object.keys(a); + for (; i < keysA.length; i++) { + var key = keysA[i]; + if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) { + return false; + } + } + if (keysA.length !== Object.keys(b).length) { + return false; + } + return true; + } + } + } + + // The pair must have equivalent values for every corresponding key. + // Possibly expensive deep test: + for (i = 0; i < keys.length; i++) { + var _key2 = keys[i]; + if (!innerDeepEqual(a[_key2], b[_key2], strict, memos)) { + return false; + } + } + return true; +} +function isDeepEqual(val1, val2) { + return innerDeepEqual(val1, val2, kLoose); +} +function isDeepStrictEqual(val1, val2) { + return innerDeepEqual(val1, val2, kStrict); +} +module.exports = { + isDeepEqual: isDeepEqual, + isDeepStrictEqual: isDeepStrictEqual +}; + +/***/ }), + +/***/ 2464: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var define = __webpack_require__(8452); +var getPolyfill = __webpack_require__(6642); + +/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */ + +module.exports = function shimNumberIsNaN() { + var polyfill = getPolyfill(); + define(Number, { isNaN: polyfill }, { + isNaN: function testIsNaN() { + return Number.isNaN !== polyfill; + } + }); + return polyfill; +}; + + +/***/ }), + +/***/ 2682: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var isCallable = __webpack_require__(9600); + +var toStr = Object.prototype.toString; +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** @type {(arr: A, iterator: (this: This | void, value: A[number], index: number, arr: A) => void, receiver: This | undefined) => void} */ +var forEachArray = function forEachArray(array, iterator, receiver) { + for (var i = 0, len = array.length; i < len; i++) { + if (hasOwnProperty.call(array, i)) { + if (receiver == null) { + iterator(array[i], i, array); + } else { + iterator.call(receiver, array[i], i, array); + } + } + } +}; + +/** @type {(string: S, iterator: (this: This | void, value: S[number], index: number, string: S) => void, receiver: This | undefined) => void} */ +var forEachString = function forEachString(string, iterator, receiver) { + for (var i = 0, len = string.length; i < len; i++) { + // no such thing as a sparse string. + if (receiver == null) { + iterator(string.charAt(i), i, string); + } else { + iterator.call(receiver, string.charAt(i), i, string); + } + } +}; + +/** @type {(obj: O, iterator: (this: This | void, value: O[keyof O], index: keyof O, obj: O) => void, receiver: This | undefined) => void} */ +var forEachObject = function forEachObject(object, iterator, receiver) { + for (var k in object) { + if (hasOwnProperty.call(object, k)) { + if (receiver == null) { + iterator(object[k], k, object); + } else { + iterator.call(receiver, object[k], k, object); + } + } + } +}; + +/** @type {(x: unknown) => x is readonly unknown[]} */ +function isArray(x) { + return toStr.call(x) === '[object Array]'; +} + +/** @type {import('.')._internal} */ +module.exports = function forEach(list, iterator, thisArg) { + if (!isCallable(iterator)) { + throw new TypeError('iterator must be a function'); + } + + var receiver; + if (arguments.length >= 3) { + receiver = thisArg; + } + + if (isArray(list)) { + forEachArray(list, iterator, receiver); + } else if (typeof list === 'string') { + forEachString(list, iterator, receiver); + } else { + forEachObject(list, iterator, receiver); + } +}; + + +/***/ }), + +/***/ 2802: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var exports = module.exports = function SHA (algorithm) { + algorithm = algorithm.toLowerCase() + + var Algorithm = exports[algorithm] + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') + + return new Algorithm() +} + +exports.sha = __webpack_require__(7816) +exports.sha1 = __webpack_require__(3737) +exports.sha224 = __webpack_require__(6710) +exports.sha256 = __webpack_require__(4107) +exports.sha384 = __webpack_require__(2827) +exports.sha512 = __webpack_require__(2890) + + +/***/ }), + +/***/ 2827: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(6698) +var SHA512 = __webpack_require__(2890) +var Hash = __webpack_require__(392) +var Buffer = (__webpack_require__(2861).Buffer) + +var W = new Array(160) + +function Sha384 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha384, SHA512) + +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d + this._bh = 0x629a292a + this._ch = 0x9159015a + this._dh = 0x152fecd8 + this._eh = 0x67332667 + this._fh = 0x8eb44a87 + this._gh = 0xdb0c2e0d + this._hh = 0x47b5481d + + this._al = 0xc1059ed8 + this._bl = 0x367cd507 + this._cl = 0x3070dd17 + this._dl = 0xf70e5939 + this._el = 0xffc00b31 + this._fl = 0x68581511 + this._gl = 0x64f98fa7 + this._hl = 0xbefa4fa4 + + return this +} + +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + + return H +} + +module.exports = Sha384 + + +/***/ }), + +/***/ 2861: +/***/ ((module, exports, __webpack_require__) => { + +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(8287) +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), + +/***/ 2890: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(6698) +var Hash = __webpack_require__(392) +var Buffer = (__webpack_require__(2861).Buffer) + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +] + +var W = new Array(160) + +function Sha512 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha512, Hash) + +Sha512.prototype.init = function () { + this._ah = 0x6a09e667 + this._bh = 0xbb67ae85 + this._ch = 0x3c6ef372 + this._dh = 0xa54ff53a + this._eh = 0x510e527f + this._fh = 0x9b05688c + this._gh = 0x1f83d9ab + this._hh = 0x5be0cd19 + + this._al = 0xf3bcc908 + this._bl = 0x84caa73b + this._cl = 0xfe94f82b + this._dl = 0x5f1d36f1 + this._el = 0xade682d1 + this._fl = 0x2b3e6c1f + this._gl = 0xfb41bd6b + this._hl = 0x137e2179 + + return this +} + +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +} + +function sigma1 (x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +} + +function Gamma0 (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +} + +function Gamma0l (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +} + +function Gamma1 (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) +} + +function Gamma1l (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +} + +function getCarry (a, b) { + return (a >>> 0) < (b >>> 0) ? 1 : 0 +} + +Sha512.prototype._update = function (M) { + var W = this._w + + var ah = this._ah | 0 + var bh = this._bh | 0 + var ch = this._ch | 0 + var dh = this._dh | 0 + var eh = this._eh | 0 + var fh = this._fh | 0 + var gh = this._gh | 0 + var hh = this._hh | 0 + + var al = this._al | 0 + var bl = this._bl | 0 + var cl = this._cl | 0 + var dl = this._dl | 0 + var el = this._el | 0 + var fl = this._fl | 0 + var gl = this._gl | 0 + var hl = this._hl | 0 + + for (var i = 0; i < 32; i += 2) { + W[i] = M.readInt32BE(i * 4) + W[i + 1] = M.readInt32BE(i * 4 + 4) + } + for (; i < 160; i += 2) { + var xh = W[i - 15 * 2] + var xl = W[i - 15 * 2 + 1] + var gamma0 = Gamma0(xh, xl) + var gamma0l = Gamma0l(xl, xh) + + xh = W[i - 2 * 2] + xl = W[i - 2 * 2 + 1] + var gamma1 = Gamma1(xh, xl) + var gamma1l = Gamma1l(xl, xh) + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7h = W[i - 7 * 2] + var Wi7l = W[i - 7 * 2 + 1] + + var Wi16h = W[i - 16 * 2] + var Wi16l = W[i - 16 * 2 + 1] + + var Wil = (gamma0l + Wi7l) | 0 + var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 + Wil = (Wil + gamma1l) | 0 + Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 + Wil = (Wil + Wi16l) | 0 + Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 + + W[i] = Wih + W[i + 1] = Wil + } + + for (var j = 0; j < 160; j += 2) { + Wih = W[j] + Wil = W[j + 1] + + var majh = maj(ah, bh, ch) + var majl = maj(al, bl, cl) + + var sigma0h = sigma0(ah, al) + var sigma0l = sigma0(al, ah) + var sigma1h = sigma1(eh, el) + var sigma1l = sigma1(el, eh) + + // t1 = h + sigma1 + ch + K[j] + W[j] + var Kih = K[j] + var Kil = K[j + 1] + + var chh = Ch(eh, fh, gh) + var chl = Ch(el, fl, gl) + + var t1l = (hl + sigma1l) | 0 + var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 + t1l = (t1l + chl) | 0 + t1h = (t1h + chh + getCarry(t1l, chl)) | 0 + t1l = (t1l + Kil) | 0 + t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 + t1l = (t1l + Wil) | 0 + t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 + + // t2 = sigma0 + maj + var t2l = (sigma0l + majl) | 0 + var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 + + hh = gh + hl = gl + gh = fh + gl = fl + fh = eh + fl = el + el = (dl + t1l) | 0 + eh = (dh + t1h + getCarry(el, dl)) | 0 + dh = ch + dl = cl + ch = bh + cl = bl + bh = ah + bl = al + al = (t1l + t2l) | 0 + ah = (t1h + t2h + getCarry(al, t1l)) | 0 + } + + this._al = (this._al + al) | 0 + this._bl = (this._bl + bl) | 0 + this._cl = (this._cl + cl) | 0 + this._dl = (this._dl + dl) | 0 + this._el = (this._el + el) | 0 + this._fl = (this._fl + fl) | 0 + this._gl = (this._gl + gl) | 0 + this._hl = (this._hl + hl) | 0 + + this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 + this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 + this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 + this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 + this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 + this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 + this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 + this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 +} + +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + writeInt64BE(this._gh, this._gl, 48) + writeInt64BE(this._hh, this._hl, 56) + + return H +} + +module.exports = Sha512 + + +/***/ }), + +/***/ 3003: +/***/ ((module) => { + +"use strict"; + + +/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */ + +module.exports = function isNaN(value) { + return value !== value; +}; + + +/***/ }), + +/***/ 3093: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var $isNaN = __webpack_require__(4459); + +/** @type {import('./sign')} */ +module.exports = function sign(number) { + if ($isNaN(number) || number === 0) { + return number; + } + return number < 0 ? -1 : +1; +}; + + +/***/ }), + +/***/ 3126: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var bind = __webpack_require__(6743); +var $TypeError = __webpack_require__(9675); + +var $call = __webpack_require__(76); +var $actualApply = __webpack_require__(3144); + +/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ +module.exports = function callBindBasic(args) { + if (args.length < 1 || typeof args[0] !== 'function') { + throw new $TypeError('a function is required'); + } + return $actualApply(bind, $call, args); +}; + + +/***/ }), + +/***/ 3144: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var bind = __webpack_require__(6743); + +var $apply = __webpack_require__(1002); +var $call = __webpack_require__(76); +var $reflectApply = __webpack_require__(7119); + +/** @type {import('./actualApply')} */ +module.exports = $reflectApply || bind.call($call, $apply); + + +/***/ }), + +/***/ 3626: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var buffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8287); +// See https://github.com/stellar/js-xdr/issues/117 + +if (!(buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.alloc(1).subarray(0, 1) instanceof buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer)) { + buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.prototype.subarray = function subarray(start, end) { + var result = Uint8Array.prototype.subarray.call(this, start, end); + Object.setPrototypeOf(result, buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.prototype); + return result; + }; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer); + +/***/ }), + +/***/ 3628: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var reflectGetProto = __webpack_require__(8648); +var originalGetProto = __webpack_require__(1064); + +var getDunderProto = __webpack_require__(7176); + +/** @type {import('.')} */ +module.exports = reflectGetProto + ? function getProto(O) { + // @ts-expect-error TS can't narrow inside a closure, for some reason + return reflectGetProto(O); + } + : originalGetProto + ? function getProto(O) { + if (!O || (typeof O !== 'object' && typeof O !== 'function')) { + throw new TypeError('getProto: not an object'); + } + // @ts-expect-error TS can't narrow inside a closure, for some reason + return originalGetProto(O); + } + : getDunderProto + ? function getProto(O) { + // @ts-expect-error TS can't narrow inside a closure, for some reason + return getDunderProto(O); + } + : null; + + +/***/ }), + +/***/ 3737: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = __webpack_require__(6698) +var Hash = __webpack_require__(392) +var Buffer = (__webpack_require__(2861).Buffer) + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha1 () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha1, Hash) + +Sha1.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl1 (num) { + return (num << 1) | (num >>> 31) +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha1.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha1 + + +/***/ }), + +/***/ 3740: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* provided dependency */ var console = __webpack_require__(6763); +/*! For license information please see xdr.js.LICENSE.txt */ +!function(t,e){ true?module.exports=e():0}(this,(()=>(()=>{var t={616:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(287);n.hp.alloc(1).subarray(0,1)instanceof n.hp||(n.hp.prototype.subarray=function(t,e){const r=Uint8Array.prototype.subarray.call(this,t,e);return Object.setPrototypeOf(r,n.hp.prototype),r});const i=n.hp},281:(t,e,r)=>{const n=r(164);t.exports=n},164:(t,e,r)=>{"use strict";r.r(e),r.d(e,{Array:()=>F,Bool:()=>S,Double:()=>L,Enum:()=>q,Float:()=>O,Hyper:()=>U,Int:()=>v,LargeInt:()=>x,Opaque:()=>D,Option:()=>X,Quadruple:()=>N,Reference:()=>G,String:()=>M,Struct:()=>Y,Union:()=>W,UnsignedHyper:()=>T,UnsignedInt:()=>R,VarArray:()=>P,VarOpaque:()=>z,Void:()=>k,XdrReader:()=>f,XdrWriter:()=>c,config:()=>it});class n extends TypeError{constructor(t){super(`XDR Write Error: ${t}`)}}class i extends TypeError{constructor(t){super(`XDR Read Error: ${t}`)}}class o extends TypeError{constructor(t){super(`XDR Type Definition Error: ${t}`)}}class s extends o{constructor(){super("method not implemented, it should be overloaded in the descendant class.")}}var u=r(616).A;class f{constructor(t){if(!u.isBuffer(t)){if(!(t instanceof Array||Array.isArray(t)||ArrayBuffer.isView(t)))throw new i(`source invalid: ${t}`);t=u.from(t)}this._buffer=t,this._length=t.length,this._index=0}_buffer;_length;_index;get eof(){return this._index===this._length}advance(t){const e=this._index;if(this._index+=t,this._length0){for(let t=0;t0){const t=this.alloc(r);this._buffer.fill(0,t,this._index)}}writeInt32BE(t){const e=this.alloc(4);this._buffer.writeInt32BE(t,e)}writeUInt32BE(t){const e=this.alloc(4);this._buffer.writeUInt32BE(t,e)}writeBigInt64BE(t){const e=this.alloc(8);this._buffer.writeBigInt64BE(t,e)}writeBigUInt64BE(t){const e=this.alloc(8);this._buffer.writeBigUInt64BE(t,e)}writeFloatBE(t){const e=this.alloc(4);this._buffer.writeFloatBE(t,e)}writeDoubleBE(t){const e=this.alloc(8);this._buffer.writeDoubleBE(t,e)}static bufferChunkSize=h}var l=r(616).A;class p{toXDR(t="raw"){if(!this.write)return this.constructor.toXDR(this,t);const e=new c;return this.write(this,e),w(e.finalize(),t)}fromXDR(t,e="raw"){if(!this.read)return this.constructor.fromXDR(t,e);const r=new f(m(t,e)),n=this.read(r);return r.ensureInputConsumed(),n}validateXDR(t,e="raw"){try{return this.fromXDR(t,e),!0}catch(t){return!1}}static toXDR(t,e="raw"){const r=new c;return this.write(t,r),w(r.finalize(),e)}static fromXDR(t,e="raw"){const r=new f(m(t,e)),n=this.read(r);return r.ensureInputConsumed(),n}static validateXDR(t,e="raw"){try{return this.fromXDR(t,e),!0}catch(t){return!1}}}class d extends p{static read(t){throw new s}static write(t,e){throw new s}static isValid(t){return!1}}class g extends p{isValid(t){return!1}}class y extends TypeError{constructor(t){super(`Invalid format ${t}, must be one of "raw", "hex", "base64"`)}}function w(t,e){switch(e){case"raw":return t;case"hex":return t.toString("hex");case"base64":return t.toString("base64");default:throw new y(e)}}function m(t,e){switch(e){case"raw":return t;case"hex":return l.from(t,"hex");case"base64":return l.from(t,"base64");default:throw new y(e)}}function b(t,e){return null!=t&&(t instanceof e||_(t,e)&&"function"==typeof t.constructor.read&&"function"==typeof t.constructor.write&&_(t,"XdrType"))}function _(t,e){do{if(t.constructor.name===e)return!0}while(t=Object.getPrototypeOf(t));return!1}const B=2147483647,E=-2147483648;class v extends d{static read(t){return t.readInt32BE()}static write(t,e){if("number"!=typeof t)throw new n("not a number");if((0|t)!==t)throw new n("invalid i32 value");e.writeInt32BE(t)}static isValid(t){return"number"==typeof t&&(0|t)===t&&(t>=E&&t<=B)}}function A(t,e,r){if("bigint"!=typeof t)throw new TypeError("Expected bigint 'value', got "+typeof t);const n=e/r;if(1===n)return[t];if(r<32||r>128||2!==n&&4!==n&&8!==n)throw new TypeError(`invalid bigint (${t}) and slice size (${e} -> ${r}) combination`);const i=BigInt(r),o=new Array(n);for(let e=0;e>=i;return o}function I(t,e){if(e)return[0n,(1n<=o&&i<=s)return i;throw new TypeError(`bigint values [${t}] for ${function(t,e){return`${e?"u":"i"}${t}`}(e,r)} out of range [${o}, ${s}]: ${i}`)}(t,this.size,this.unsigned)}get unsigned(){throw new s}get size(){throw new s}slice(t){return A(this._value,this.size,t)}toString(){return this._value.toString()}toJSON(){return{_value:this._value.toString()}}toBigInt(){return BigInt(this._value)}static read(t){const{size:e}=this.prototype;return 64===e?new this(t.readBigUInt64BE()):new this(...Array.from({length:e/64},(()=>t.readBigUInt64BE())).reverse())}static write(t,e){if(t instanceof this)t=t._value;else if("bigint"!=typeof t||t>this.MAX_VALUE||t>32n)|0}get size(){return 64}get unsigned(){return!1}static fromBits(t,e){return new this(t,e)}}U.defineIntBoundaries();const $=4294967295;class R extends d{static read(t){return t.readUInt32BE()}static write(t,e){if("number"!=typeof t||!(t>=0&&t<=$)||t%1!=0)throw new n("invalid u32 value");e.writeUInt32BE(t)}static isValid(t){return"number"==typeof t&&t%1==0&&(t>=0&&t<=$)}}R.MAX_VALUE=$,R.MIN_VALUE=0;class T extends x{constructor(...t){super(t)}get low(){return Number(0xffffffffn&this._value)|0}get high(){return Number(this._value>>32n)|0}get size(){return 64}get unsigned(){return!0}static fromBits(t,e){return new this(t,e)}}T.defineIntBoundaries();class O extends d{static read(t){return t.readFloatBE()}static write(t,e){if("number"!=typeof t)throw new n("not a number");e.writeFloatBE(t)}static isValid(t){return"number"==typeof t}}class L extends d{static read(t){return t.readDoubleBE()}static write(t,e){if("number"!=typeof t)throw new n("not a number");e.writeDoubleBE(t)}static isValid(t){return"number"==typeof t}}class N extends d{static read(){throw new o("quadruple not supported")}static write(){throw new o("quadruple not supported")}static isValid(){return!1}}class S extends d{static read(t){const e=v.read(t);switch(e){case 0:return!1;case 1:return!0;default:throw new i(`got ${e} when trying to read a bool`)}}static write(t,e){const r=t?1:0;v.write(r,e)}static isValid(t){return"boolean"==typeof t}}var V=r(616).A;class M extends g{constructor(t=R.MAX_VALUE){super(),this._maxLength=t}read(t){const e=R.read(t);if(e>this._maxLength)throw new i(`saw ${e} length String, max allowed is ${this._maxLength}`);return t.read(e)}readString(t){return this.read(t).toString("utf8")}write(t,e){const r="string"==typeof t?V.byteLength(t,"utf8"):t.length;if(r>this._maxLength)throw new n(`got ${t.length} bytes, max allowed is ${this._maxLength}`);R.write(r,e),e.write(t,r)}isValid(t){return"string"==typeof t?V.byteLength(t,"utf8")<=this._maxLength:!!(t instanceof Array||V.isBuffer(t))&&t.length<=this._maxLength}}var C=r(616).A;class D extends g{constructor(t){super(),this._length=t}read(t){return t.read(this._length)}write(t,e){const{length:r}=t;if(r!==this._length)throw new n(`got ${t.length} bytes, expected ${this._length}`);e.write(t,r)}isValid(t){return C.isBuffer(t)&&t.length===this._length}}var j=r(616).A;class z extends g{constructor(t=R.MAX_VALUE){super(),this._maxLength=t}read(t){const e=R.read(t);if(e>this._maxLength)throw new i(`saw ${e} length VarOpaque, max allowed is ${this._maxLength}`);return t.read(e)}write(t,e){const{length:r}=t;if(t.length>this._maxLength)throw new n(`got ${t.length} bytes, max allowed is ${this._maxLength}`);R.write(r,e),e.write(t,r)}isValid(t){return j.isBuffer(t)&&t.length<=this._maxLength}}class F extends g{constructor(t,e){super(),this._childType=t,this._length=e}read(t){const e=new r.g.Array(this._length);for(let r=0;rthis._maxLength)throw new i(`saw ${e} length VarArray, max allowed is ${this._maxLength}`);const r=new Array(e);for(let n=0;nthis._maxLength)throw new n(`got array of size ${t.length}, max allowed is ${this._maxLength}`);R.write(t.length,e);for(const r of t)this._childType.write(r,e)}isValid(t){if(!(t instanceof Array)||t.length>this._maxLength)return!1;for(const e of t)if(!this._childType.isValid(e))return!1;return!0}}class X extends d{constructor(t){super(),this._childType=t}read(t){if(S.read(t))return this._childType.read(t)}write(t,e){const r=null!=t;S.write(r,e),r&&this._childType.write(t,e)}isValid(t){return null==t||this._childType.isValid(t)}}class k extends d{static read(){}static write(t){if(void 0!==t)throw new n("trying to write value to a void slot")}static isValid(t){return void 0===t}}class q extends d{constructor(t,e){super(),this.name=t,this.value=e}static read(t){const e=v.read(t),r=this._byValue[e];if(void 0===r)throw new i(`unknown ${this.enumName} member for value ${e}`);return r}static write(t,e){if(!this.isValid(t))throw new n(`${t} has enum name ${t?.enumName}, not ${this.enumName}: ${JSON.stringify(t)}`);v.write(t.value,e)}static isValid(t){return t?.constructor?.enumName===this.enumName||b(t,this)}static members(){return this._members}static values(){return Object.values(this._members)}static fromName(t){const e=this._members[t];if(!e)throw new TypeError(`${t} is not a member of ${this.enumName}`);return e}static fromValue(t){const e=this._byValue[t];if(void 0===e)throw new TypeError(`${t} is not a value of any member of ${this.enumName}`);return e}static create(t,e,r){const n=class extends q{};n.enumName=e,t.results[e]=n,n._members={},n._byValue={};for(const[t,e]of Object.entries(r)){const r=new n(t,e);n._members[t]=r,n._byValue[e]=r,n[t]=()=>r}return n}}class G extends d{resolve(){throw new o('"resolve" method should be implemented in the descendant class')}}class Y extends g{constructor(t){super(),this._attributes=t||{}}static read(t){const e={};for(const[r,n]of this._fields)e[r]=n.read(t);return new this(e)}static write(t,e){if(!this.isValid(t))throw new n(`${t} has struct name ${t?.constructor?.structName}, not ${this.structName}: ${JSON.stringify(t)}`);for(const[r,n]of this._fields){const i=t._attributes[r];n.write(i,e)}}static isValid(t){return t?.constructor?.structName===this.structName||b(t,this)}static create(t,e,r){const n=class extends Y{};n.structName=e,t.results[e]=n;const i=new Array(r.length);for(let e=0;e{"use strict";e.byteLength=function(t){var e=u(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=u(t),s=o[0],f=o[1],a=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,f)),h=0,c=f>0?s-4:s;for(r=0;r>16&255,a[h++]=e>>8&255,a[h++]=255&e;2===f&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,a[h++]=255&e);1===f&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,a[h++]=e>>8&255,a[h++]=255&e);return a},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,u=0,a=n-i;ua?a:u+s));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function u(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var i,o,s=[],u=e;u>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},287:(t,e,r)=>{"use strict";const n=r(526),i=r(251),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.hp=f,e.IS=50;const s=2147483647;function u(t){if(t>s)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,f.prototype),e}function f(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return a(t,e,r)}function a(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!f.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=u(r);const i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(W(t,Uint8Array)){const e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return l(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(W(t,ArrayBuffer)||t&&W(t.buffer,ArrayBuffer))return p(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(W(t,SharedArrayBuffer)||t&&W(t.buffer,SharedArrayBuffer)))return p(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return f.from(n,e,r);const i=function(t){if(f.isBuffer(t)){const e=0|d(t.length),r=u(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return"number"!=typeof t.length||H(t.length)?u(0):l(t);if("Buffer"===t.type&&Array.isArray(t.data))return l(t.data)}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return f.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function h(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function c(t){return h(t),u(t<0?0:0|d(t))}function l(t){const e=t.length<0?0:0|d(t.length),r=u(e);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|t}function g(t,e){if(f.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||W(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return G(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Y(t).length;default:if(i)return n?-1:G(t).length;e=(""+e).toLowerCase(),i=!0}}function y(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return x(this,e,r);case"ascii":return $(this,e,r);case"latin1":case"binary":return R(this,e,r);case"base64":return I(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function w(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function m(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),H(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=f.from(e,n)),f.isBuffer(e))return 0===e.length?-1:b(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,r,n,i){let o,s=1,u=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,u/=2,f/=2,r/=2}function a(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){let n=-1;for(o=r;ou&&(r=u-f),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=e.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function I(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function x(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+s<=r){let r,n,u,f;switch(s){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(f=(31&e)<<6|63&r,f>127&&(o=f));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(f=(15&e)<<12|(63&r)<<6|63&n,f>2047&&(f<55296||f>57343)&&(o=f));break;case 4:r=t[i+1],n=t[i+2],u=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&u)&&(f=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&u,f>65535&&f<1114112&&(o=f))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){const e=t.length;if(e<=U)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(f.isBuffer(e)||(e=f.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!f.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},f.byteLength=g,f.prototype._isBuffer=!0,f.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},o&&(f.prototype[o]=f.prototype.inspect),f.prototype.compare=function(t,e,r,n,i){if(W(t,Uint8Array)&&(t=f.from(t,t.offset,t.byteLength)),!f.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0);const u=Math.min(o,s),a=this.slice(n,i),h=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return _(this,t,e,r);case"utf8":case"utf-8":return B(this,t,e,r);case"ascii":case"latin1":case"binary":return E(this,t,e,r);case"base64":return v(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const U=4096;function $(t,e,r){let n="";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function N(t,e,r,n,i,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function S(t,e,r,n,i){P(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,r}function V(t,e,r,n,i){P(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=s,s>>=8,t[r+2]=s,s>>=8,t[r+1]=s,s>>=8,t[r]=s,r+8}function M(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function C(t,e,r,n,o){return e=+e,r>>>=0,o||M(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function D(t,e,r,n,o){return e=+e,r>>>=0,o||M(t,0,r,8),i.write(t,e,r,n,52,8),r+8}f.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],i=1,o=0;for(;++o>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},f.prototype.readUint8=f.prototype.readUInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),this[t]},f.prototype.readUint16LE=f.prototype.readUInt16LE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUint16BE=f.prototype.readUInt16BE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUint32LE=f.prototype.readUInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUint32BE=f.prototype.readUInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readBigUInt64LE=Z((function(t){X(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*e)),n},f.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},f.prototype.readInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readBigInt64LE=Z((function(t){X(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||k(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||L(t,4,this.length),i.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,e){return t>>>=0,e||L(t,4,this.length),i.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,e){return t>>>=0,e||L(t,8,this.length),i.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,e){return t>>>=0,e||L(t,8,this.length),i.read(this,t,!1,52,8)},f.prototype.writeUintLE=f.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){N(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!n){N(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},f.prototype.writeUint8=f.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,255,0),this[e]=255&t,e+1},f.prototype.writeUint16LE=f.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},f.prototype.writeUint16BE=f.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},f.prototype.writeUint32LE=f.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},f.prototype.writeUint32BE=f.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},f.prototype.writeBigUInt64LE=Z((function(t,e=0){return S(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),f.prototype.writeBigUInt64BE=Z((function(t,e=0){return V(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),f.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=0,o=1,s=0;for(this[e]=255&t;++i>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o|0)-s&255;return e+r},f.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},f.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},f.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},f.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},f.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},f.prototype.writeBigInt64LE=Z((function(t,e=0){return S(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),f.prototype.writeBigInt64BE=Z((function(t,e=0){return V(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),f.prototype.writeFloatLE=function(t,e,r){return C(this,t,e,!0,r)},f.prototype.writeFloatBE=function(t,e,r){return C(this,t,e,!1,r)},f.prototype.writeDoubleLE=function(t,e,r){return D(this,t,e,!0,r)},f.prototype.writeDoubleBE=function(t,e,r){return D(this,t,e,!1,r)},f.prototype.copy=function(t,e,r,n){if(!f.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function P(t,e,r,n,i,o){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new j.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,r){X(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||k(e,t.length-(r+1))}(n,i,o)}function X(t,e){if("number"!=typeof t)throw new j.ERR_INVALID_ARG_TYPE(e,"number",t)}function k(t,e,r){if(Math.floor(t)!==t)throw X(t,r),new j.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new j.ERR_BUFFER_OUT_OF_BOUNDS;throw new j.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=F(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=F(i)),i+="n"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const q=/[^+/0-9A-Za-z-_]/g;function G(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Y(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function J(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function W(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function H(t){return t!=t}const Q=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function Z(t){return"undefined"==typeof BigInt?K:t}function K(){throw new Error("BigInt not supported")}},251:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,u=8*i-n-1,f=(1<>1,h=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,o=p&(1<<-h)-1,p>>=-h,h+=u;h>0;o=256*o+t[e+c],c+=l,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+c],c+=l,h-=8);if(0===o)o=1-a;else{if(o===f)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=a}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,u,f,a=8*o-i-1,h=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-s))<1&&(s--,f*=2),(e+=s+c>=1?l/f:l*Math.pow(2,1-c))*f>=2&&(s++,f/=2),s+c>=h?(u=0,s=h):s+c>=1?(u=(e*f-1)*Math.pow(2,i),s+=c):(u=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&u,p+=d,u/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=d,s/=256,a-=8);t[r+p-d]|=128*g}}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r(281)})())); +//# sourceMappingURL=xdr.js.map + +/***/ }), + +/***/ 3918: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +/* provided dependency */ var process = __webpack_require__(5606); +// Currently in sync with Node.js lib/internal/assert/assertion_error.js +// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c + + + +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +var _require = __webpack_require__(537), + inspect = _require.inspect; +var _require2 = __webpack_require__(9597), + ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith +function endsWith(str, search, this_len) { + if (this_len === undefined || this_len > str.length) { + this_len = str.length; + } + return str.substring(this_len - search.length, this_len) === search; +} + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat +function repeat(str, count) { + count = Math.floor(count); + if (str.length == 0 || count == 0) return ''; + var maxCount = str.length * count; + count = Math.floor(Math.log(count) / Math.log(2)); + while (count) { + str += str; + count--; + } + str += str.substring(0, maxCount - str.length); + return str; +} +var blue = ''; +var green = ''; +var red = ''; +var white = ''; +var kReadableOperator = { + deepStrictEqual: 'Expected values to be strictly deep-equal:', + strictEqual: 'Expected values to be strictly equal:', + strictEqualObject: 'Expected "actual" to be reference-equal to "expected":', + deepEqual: 'Expected values to be loosely deep-equal:', + equal: 'Expected values to be loosely equal:', + notDeepStrictEqual: 'Expected "actual" not to be strictly deep-equal to:', + notStrictEqual: 'Expected "actual" to be strictly unequal to:', + notStrictEqualObject: 'Expected "actual" not to be reference-equal to "expected":', + notDeepEqual: 'Expected "actual" not to be loosely deep-equal to:', + notEqual: 'Expected "actual" to be loosely unequal to:', + notIdentical: 'Values identical but not reference-equal:' +}; + +// Comparing short primitives should just show === / !== instead of using the +// diff. +var kMaxShortLength = 10; +function copyError(source) { + var keys = Object.keys(source); + var target = Object.create(Object.getPrototypeOf(source)); + keys.forEach(function (key) { + target[key] = source[key]; + }); + Object.defineProperty(target, 'message', { + value: source.message + }); + return target; +} +function inspectValue(val) { + // The util.inspect default values could be changed. This makes sure the + // error messages contain the necessary information nevertheless. + return inspect(val, { + compact: false, + customInspect: false, + depth: 1000, + maxArrayLength: Infinity, + // Assert compares only enumerable properties (with a few exceptions). + showHidden: false, + // Having a long line as error is better than wrapping the line for + // comparison for now. + // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we + // have meta information about the inspected properties (i.e., know where + // in what line the property starts and ends). + breakLength: Infinity, + // Assert does not detect proxies currently. + showProxy: false, + sorted: true, + // Inspect getters as we also check them when comparing entries. + getters: true + }); +} +function createErrDiff(actual, expected, operator) { + var other = ''; + var res = ''; + var lastPos = 0; + var end = ''; + var skipped = false; + var actualInspected = inspectValue(actual); + var actualLines = actualInspected.split('\n'); + var expectedLines = inspectValue(expected).split('\n'); + var i = 0; + var indicator = ''; + + // In case both values are objects explicitly mark them as not reference equal + // for the `strictEqual` operator. + if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) { + operator = 'strictEqualObject'; + } + + // If "actual" and "expected" fit on a single line and they are not strictly + // equal, check further special handling. + if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) { + var inputLength = actualLines[0].length + expectedLines[0].length; + // If the character length of "actual" and "expected" together is less than + // kMaxShortLength and if neither is an object and at least one of them is + // not `zero`, use the strict equal comparison to visualize the output. + if (inputLength <= kMaxShortLength) { + if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) { + // -0 === +0 + return "".concat(kReadableOperator[operator], "\n\n") + "".concat(actualLines[0], " !== ").concat(expectedLines[0], "\n"); + } + } else if (operator !== 'strictEqualObject') { + // If the stderr is a tty and the input length is lower than the current + // columns per line, add a mismatch indicator below the output. If it is + // not a tty, use a default value of 80 characters. + var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80; + if (inputLength < maxLength) { + while (actualLines[0][i] === expectedLines[0][i]) { + i++; + } + // Ignore the first characters. + if (i > 2) { + // Add position indicator for the first mismatch in case it is a + // single line and the input length is less than the column length. + indicator = "\n ".concat(repeat(' ', i), "^"); + i = 0; + } + } + } + } + + // Remove all ending lines that match (this optimizes the output for + // readability by reducing the number of total changed lines). + var a = actualLines[actualLines.length - 1]; + var b = expectedLines[expectedLines.length - 1]; + while (a === b) { + if (i++ < 2) { + end = "\n ".concat(a).concat(end); + } else { + other = a; + } + actualLines.pop(); + expectedLines.pop(); + if (actualLines.length === 0 || expectedLines.length === 0) break; + a = actualLines[actualLines.length - 1]; + b = expectedLines[expectedLines.length - 1]; + } + var maxLines = Math.max(actualLines.length, expectedLines.length); + // Strict equal with identical objects that are not identical by reference. + // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() }) + if (maxLines === 0) { + // We have to get the result again. The lines were all removed before. + var _actualLines = actualInspected.split('\n'); + + // Only remove lines in case it makes sense to collapse those. + // TODO: Accept env to always show the full error. + if (_actualLines.length > 30) { + _actualLines[26] = "".concat(blue, "...").concat(white); + while (_actualLines.length > 27) { + _actualLines.pop(); + } + } + return "".concat(kReadableOperator.notIdentical, "\n\n").concat(_actualLines.join('\n'), "\n"); + } + if (i > 3) { + end = "\n".concat(blue, "...").concat(white).concat(end); + skipped = true; + } + if (other !== '') { + end = "\n ".concat(other).concat(end); + other = ''; + } + var printedLines = 0; + var msg = kReadableOperator[operator] + "\n".concat(green, "+ actual").concat(white, " ").concat(red, "- expected").concat(white); + var skippedMsg = " ".concat(blue, "...").concat(white, " Lines skipped"); + for (i = 0; i < maxLines; i++) { + // Only extra expected lines exist + var cur = i - lastPos; + if (actualLines.length < i + 1) { + // If the last diverging line is more than one line above and the + // current line is at least line three, add some of the former lines and + // also add dots to indicate skipped entries. + if (cur > 1 && i > 2) { + if (cur > 4) { + res += "\n".concat(blue, "...").concat(white); + skipped = true; + } else if (cur > 3) { + res += "\n ".concat(expectedLines[i - 2]); + printedLines++; + } + res += "\n ".concat(expectedLines[i - 1]); + printedLines++; + } + // Mark the current line as the last diverging one. + lastPos = i; + // Add the expected line to the cache. + other += "\n".concat(red, "-").concat(white, " ").concat(expectedLines[i]); + printedLines++; + // Only extra actual lines exist + } else if (expectedLines.length < i + 1) { + // If the last diverging line is more than one line above and the + // current line is at least line three, add some of the former lines and + // also add dots to indicate skipped entries. + if (cur > 1 && i > 2) { + if (cur > 4) { + res += "\n".concat(blue, "...").concat(white); + skipped = true; + } else if (cur > 3) { + res += "\n ".concat(actualLines[i - 2]); + printedLines++; + } + res += "\n ".concat(actualLines[i - 1]); + printedLines++; + } + // Mark the current line as the last diverging one. + lastPos = i; + // Add the actual line to the result. + res += "\n".concat(green, "+").concat(white, " ").concat(actualLines[i]); + printedLines++; + // Lines diverge + } else { + var expectedLine = expectedLines[i]; + var actualLine = actualLines[i]; + // If the lines diverge, specifically check for lines that only diverge by + // a trailing comma. In that case it is actually identical and we should + // mark it as such. + var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); + // If the expected line has a trailing comma but is otherwise identical, + // add a comma at the end of the actual line. Otherwise the output could + // look weird as in: + // + // [ + // 1 // No comma at the end! + // + 2 + // ] + // + if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) { + divergingLines = false; + actualLine += ','; + } + if (divergingLines) { + // If the last diverging line is more than one line above and the + // current line is at least line three, add some of the former lines and + // also add dots to indicate skipped entries. + if (cur > 1 && i > 2) { + if (cur > 4) { + res += "\n".concat(blue, "...").concat(white); + skipped = true; + } else if (cur > 3) { + res += "\n ".concat(actualLines[i - 2]); + printedLines++; + } + res += "\n ".concat(actualLines[i - 1]); + printedLines++; + } + // Mark the current line as the last diverging one. + lastPos = i; + // Add the actual line to the result and cache the expected diverging + // line so consecutive diverging lines show up as +++--- and not +-+-+-. + res += "\n".concat(green, "+").concat(white, " ").concat(actualLine); + other += "\n".concat(red, "-").concat(white, " ").concat(expectedLine); + printedLines += 2; + // Lines are identical + } else { + // Add all cached information to the result before adding other things + // and reset the cache. + res += other; + other = ''; + // If the last diverging line is exactly one line above or if it is the + // very first line, add the line to the result. + if (cur === 1 || i === 0) { + res += "\n ".concat(actualLine); + printedLines++; + } + } + } + // Inspected object to big (Show ~20 rows max) + if (printedLines > 20 && i < maxLines - 2) { + return "".concat(msg).concat(skippedMsg, "\n").concat(res, "\n").concat(blue, "...").concat(white).concat(other, "\n") + "".concat(blue, "...").concat(white); + } + } + return "".concat(msg).concat(skipped ? skippedMsg : '', "\n").concat(res).concat(other).concat(end).concat(indicator); +} +var AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) { + _inherits(AssertionError, _Error); + var _super = _createSuper(AssertionError); + function AssertionError(options) { + var _this; + _classCallCheck(this, AssertionError); + if (_typeof(options) !== 'object' || options === null) { + throw new ERR_INVALID_ARG_TYPE('options', 'Object', options); + } + var message = options.message, + operator = options.operator, + stackStartFn = options.stackStartFn; + var actual = options.actual, + expected = options.expected; + var limit = Error.stackTraceLimit; + Error.stackTraceLimit = 0; + if (message != null) { + _this = _super.call(this, String(message)); + } else { + if (process.stderr && process.stderr.isTTY) { + // Reset on each call to make sure we handle dynamically set environment + // variables correct. + if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) { + blue = "\x1B[34m"; + green = "\x1B[32m"; + white = "\x1B[39m"; + red = "\x1B[31m"; + } else { + blue = ''; + green = ''; + white = ''; + red = ''; + } + } + // Prevent the error stack from being visible by duplicating the error + // in a very close way to the original in case both sides are actually + // instances of Error. + if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) { + actual = copyError(actual); + expected = copyError(expected); + } + if (operator === 'deepStrictEqual' || operator === 'strictEqual') { + _this = _super.call(this, createErrDiff(actual, expected, operator)); + } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') { + // In case the objects are equal but the operator requires unequal, show + // the first object and say A equals B + var base = kReadableOperator[operator]; + var res = inspectValue(actual).split('\n'); + + // In case "actual" is an object, it should not be reference equal. + if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) { + base = kReadableOperator.notStrictEqualObject; + } + + // Only remove lines in case it makes sense to collapse those. + // TODO: Accept env to always show the full error. + if (res.length > 30) { + res[26] = "".concat(blue, "...").concat(white); + while (res.length > 27) { + res.pop(); + } + } + + // Only print a single input. + if (res.length === 1) { + _this = _super.call(this, "".concat(base, " ").concat(res[0])); + } else { + _this = _super.call(this, "".concat(base, "\n\n").concat(res.join('\n'), "\n")); + } + } else { + var _res = inspectValue(actual); + var other = ''; + var knownOperators = kReadableOperator[operator]; + if (operator === 'notDeepEqual' || operator === 'notEqual') { + _res = "".concat(kReadableOperator[operator], "\n\n").concat(_res); + if (_res.length > 1024) { + _res = "".concat(_res.slice(0, 1021), "..."); + } + } else { + other = "".concat(inspectValue(expected)); + if (_res.length > 512) { + _res = "".concat(_res.slice(0, 509), "..."); + } + if (other.length > 512) { + other = "".concat(other.slice(0, 509), "..."); + } + if (operator === 'deepEqual' || operator === 'equal') { + _res = "".concat(knownOperators, "\n\n").concat(_res, "\n\nshould equal\n\n"); + } else { + other = " ".concat(operator, " ").concat(other); + } + } + _this = _super.call(this, "".concat(_res).concat(other)); + } + } + Error.stackTraceLimit = limit; + _this.generatedMessage = !message; + Object.defineProperty(_assertThisInitialized(_this), 'name', { + value: 'AssertionError [ERR_ASSERTION]', + enumerable: false, + writable: true, + configurable: true + }); + _this.code = 'ERR_ASSERTION'; + _this.actual = actual; + _this.expected = expected; + _this.operator = operator; + if (Error.captureStackTrace) { + // eslint-disable-next-line no-restricted-syntax + Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn); + } + // Create error message including the error code in the name. + _this.stack; + // Reset the name. + _this.name = 'AssertionError'; + return _possibleConstructorReturn(_this); + } + _createClass(AssertionError, [{ + key: "toString", + value: function toString() { + return "".concat(this.name, " [").concat(this.code, "]: ").concat(this.message); + } + }, { + key: _inspect$custom, + value: function value(recurseTimes, ctx) { + // This limits the `actual` and `expected` property default inspection to + // the minimum depth. Otherwise those values would be too verbose compared + // to the actual error message which contains a combined view of these two + // input values. + return inspect(this, _objectSpread(_objectSpread({}, ctx), {}, { + customInspect: false, + depth: 0 + })); + } + }]); + return AssertionError; +}( /*#__PURE__*/_wrapNativeSuper(Error), inspect.custom); +module.exports = AssertionError; + +/***/ }), + +/***/ 4035: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var callBound = __webpack_require__(6556); +var hasToStringTag = __webpack_require__(9092)(); +var hasOwn = __webpack_require__(9957); +var gOPD = __webpack_require__(5795); + +/** @type {import('.')} */ +var fn; + +if (hasToStringTag) { + /** @type {(receiver: ThisParameterType, ...args: Parameters) => ReturnType} */ + var $exec = callBound('RegExp.prototype.exec'); + /** @type {object} */ + var isRegexMarker = {}; + + var throwRegexMarker = function () { + throw isRegexMarker; + }; + /** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */ + var badStringifier = { + toString: throwRegexMarker, + valueOf: throwRegexMarker + }; + + if (typeof Symbol.toPrimitive === 'symbol') { + badStringifier[Symbol.toPrimitive] = throwRegexMarker; + } + + /** @type {import('.')} */ + // @ts-expect-error TS can't figure out that the $exec call always throws + // eslint-disable-next-line consistent-return + fn = function isRegex(value) { + if (!value || typeof value !== 'object') { + return false; + } + + // eslint-disable-next-line no-extra-parens + var descriptor = /** @type {NonNullable} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex'); + var hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value'); + if (!hasLastIndexDataProperty) { + return false; + } + + try { + // eslint-disable-next-line no-extra-parens + $exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier))); + } catch (e) { + return e === isRegexMarker; + } + }; +} else { + /** @type {(receiver: ThisParameterType, ...args: Parameters) => ReturnType} */ + var $toString = callBound('Object.prototype.toString'); + /** @const @type {'[object RegExp]'} */ + var regexClass = '[object RegExp]'; + + /** @type {import('.')} */ + fn = function isRegex(value) { + // In older browsers, typeof regex incorrectly returns 'function' + if (!value || (typeof value !== 'object' && typeof value !== 'function')) { + return false; + } + + return $toString(value) === regexClass; + }; +} + +module.exports = fn; + + +/***/ }), + +/***/ 4039: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; +var hasSymbolSham = __webpack_require__(1333); + +/** @type {import('.')} */ +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { return false; } + if (typeof Symbol !== 'function') { return false; } + if (typeof origSymbol('foo') !== 'symbol') { return false; } + if (typeof Symbol('bar') !== 'symbol') { return false; } + + return hasSymbolSham(); +}; + + +/***/ }), + +/***/ 4107: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = __webpack_require__(6698) +var Hash = __webpack_require__(392) +var Buffer = (__webpack_require__(2861).Buffer) + +var K = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +] + +var W = new Array(64) + +function Sha256 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha256, Hash) + +Sha256.prototype.init = function () { + this._a = 0x6a09e667 + this._b = 0xbb67ae85 + this._c = 0x3c6ef372 + this._d = 0xa54ff53a + this._e = 0x510e527f + this._f = 0x9b05688c + this._g = 0x1f83d9ab + this._h = 0x5be0cd19 + + return this +} + +function ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) +} + +function sigma1 (x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) +} + +function gamma0 (x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) +} + +function gamma1 (x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) +} + +Sha256.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + var f = this._f | 0 + var g = this._g | 0 + var h = this._h | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 + + for (var j = 0; j < 64; ++j) { + var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 + var T2 = (sigma0(a) + maj(a, b, c)) | 0 + + h = g + g = f + f = e + e = (d + T1) | 0 + d = c + c = b + b = a + a = (T1 + T2) | 0 + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 + this._f = (f + this._f) | 0 + this._g = (g + this._g) | 0 + this._h = (h + this._h) | 0 +} + +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + H.writeInt32BE(this._h, 28) + + return H +} + +module.exports = Sha256 + + +/***/ }), + +/***/ 4133: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var callBind = __webpack_require__(487); +var define = __webpack_require__(8452); + +var implementation = __webpack_require__(3003); +var getPolyfill = __webpack_require__(6642); +var shim = __webpack_require__(2464); + +var polyfill = callBind(getPolyfill(), Number); + +/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */ + +define(polyfill, { + getPolyfill: getPolyfill, + implementation: implementation, + shim: shim +}); + +module.exports = polyfill; + + +/***/ }), + +/***/ 4148: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +/* provided dependency */ var process = __webpack_require__(5606); +/* provided dependency */ var console = __webpack_require__(6763); +// Currently in sync with Node.js lib/assert.js +// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b + +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +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, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _require = __webpack_require__(9597), + _require$codes = _require.codes, + ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE, + ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE, + ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS; +var AssertionError = __webpack_require__(3918); +var _require2 = __webpack_require__(537), + inspect = _require2.inspect; +var _require$types = (__webpack_require__(537).types), + isPromise = _require$types.isPromise, + isRegExp = _require$types.isRegExp; +var objectAssign = __webpack_require__(9133)(); +var objectIs = __webpack_require__(9394)(); +var RegExpPrototypeTest = __webpack_require__(8075)('RegExp.prototype.test'); +var errorCache = new Map(); +var isDeepEqual; +var isDeepStrictEqual; +var parseExpressionAt; +var findNodeAround; +var decoder; +function lazyLoadComparison() { + var comparison = __webpack_require__(2299); + isDeepEqual = comparison.isDeepEqual; + isDeepStrictEqual = comparison.isDeepStrictEqual; +} + +// Escape control characters but not \n and \t to keep the line breaks and +// indentation intact. +// eslint-disable-next-line no-control-regex +var escapeSequencesRegExp = /[\x00-\x08\x0b\x0c\x0e-\x1f]/g; +var meta = (/* unused pure expression or super */ null && (["\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005", "\\u0006", "\\u0007", '\\b', '', '', "\\u000b", '\\f', '', "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013", "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019", "\\u001a", "\\u001b", "\\u001c", "\\u001d", "\\u001e", "\\u001f"])); +var escapeFn = function escapeFn(str) { + return meta[str.charCodeAt(0)]; +}; +var warned = false; + +// The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; +var NO_EXCEPTION_SENTINEL = {}; + +// All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function innerFail(obj) { + if (obj.message instanceof Error) throw obj.message; + throw new AssertionError(obj); +} +function fail(actual, expected, message, operator, stackStartFn) { + var argsLen = arguments.length; + var internalMessage; + if (argsLen === 0) { + internalMessage = 'Failed'; + } else if (argsLen === 1) { + message = actual; + actual = undefined; + } else { + if (warned === false) { + warned = true; + var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console); + warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094'); + } + if (argsLen === 2) operator = '!='; + } + if (message instanceof Error) throw message; + var errArgs = { + actual: actual, + expected: expected, + operator: operator === undefined ? 'fail' : operator, + stackStartFn: stackStartFn || fail + }; + if (message !== undefined) { + errArgs.message = message; + } + var err = new AssertionError(errArgs); + if (internalMessage) { + err.message = internalMessage; + err.generatedMessage = true; + } + throw err; +} +assert.fail = fail; + +// The AssertionError is defined in internal/error. +assert.AssertionError = AssertionError; +function innerOk(fn, argLen, value, message) { + if (!value) { + var generatedMessage = false; + if (argLen === 0) { + generatedMessage = true; + message = 'No value argument passed to `assert.ok()`'; + } else if (message instanceof Error) { + throw message; + } + var err = new AssertionError({ + actual: value, + expected: true, + message: message, + operator: '==', + stackStartFn: fn + }); + err.generatedMessage = generatedMessage; + throw err; + } +} + +// Pure assertion tests whether a value is truthy, as determined +// by !!value. +function ok() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + innerOk.apply(void 0, [ok, args.length].concat(args)); +} +assert.ok = ok; + +// The equality assertion tests shallow, coercive equality with ==. +/* eslint-disable no-restricted-properties */ +assert.equal = function equal(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + // eslint-disable-next-line eqeqeq + if (actual != expected) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: '==', + stackStartFn: equal + }); + } +}; + +// The non-equality assertion tests for whether two objects are not +// equal with !=. +assert.notEqual = function notEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + // eslint-disable-next-line eqeqeq + if (actual == expected) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: '!=', + stackStartFn: notEqual + }); + } +}; + +// The equivalence assertion tests a deep equality relation. +assert.deepEqual = function deepEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + if (isDeepEqual === undefined) lazyLoadComparison(); + if (!isDeepEqual(actual, expected)) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: 'deepEqual', + stackStartFn: deepEqual + }); + } +}; + +// The non-equivalence assertion tests for any deep inequality. +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + if (isDeepEqual === undefined) lazyLoadComparison(); + if (isDeepEqual(actual, expected)) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: 'notDeepEqual', + stackStartFn: notDeepEqual + }); + } +}; +/* eslint-enable */ + +assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + if (isDeepEqual === undefined) lazyLoadComparison(); + if (!isDeepStrictEqual(actual, expected)) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: 'deepStrictEqual', + stackStartFn: deepStrictEqual + }); + } +}; +assert.notDeepStrictEqual = notDeepStrictEqual; +function notDeepStrictEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + if (isDeepEqual === undefined) lazyLoadComparison(); + if (isDeepStrictEqual(actual, expected)) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: 'notDeepStrictEqual', + stackStartFn: notDeepStrictEqual + }); + } +} +assert.strictEqual = function strictEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + if (!objectIs(actual, expected)) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: 'strictEqual', + stackStartFn: strictEqual + }); + } +}; +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (arguments.length < 2) { + throw new ERR_MISSING_ARGS('actual', 'expected'); + } + if (objectIs(actual, expected)) { + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: 'notStrictEqual', + stackStartFn: notStrictEqual + }); + } +}; +var Comparison = /*#__PURE__*/_createClass(function Comparison(obj, keys, actual) { + var _this = this; + _classCallCheck(this, Comparison); + keys.forEach(function (key) { + if (key in obj) { + if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && RegExpPrototypeTest(obj[key], actual[key])) { + _this[key] = actual[key]; + } else { + _this[key] = obj[key]; + } + } + }); +}); +function compareExceptionKey(actual, expected, key, message, keys, fn) { + if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) { + if (!message) { + // Create placeholder objects to create a nice output. + var a = new Comparison(actual, keys); + var b = new Comparison(expected, keys, actual); + var err = new AssertionError({ + actual: a, + expected: b, + operator: 'deepStrictEqual', + stackStartFn: fn + }); + err.actual = actual; + err.expected = expected; + err.operator = fn.name; + throw err; + } + innerFail({ + actual: actual, + expected: expected, + message: message, + operator: fn.name, + stackStartFn: fn + }); + } +} +function expectedException(actual, expected, msg, fn) { + if (typeof expected !== 'function') { + if (isRegExp(expected)) return RegExpPrototypeTest(expected, actual); + // assert.doesNotThrow does not accept objects. + if (arguments.length === 2) { + throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected); + } + + // Handle primitives properly. + if (_typeof(actual) !== 'object' || actual === null) { + var err = new AssertionError({ + actual: actual, + expected: expected, + message: msg, + operator: 'deepStrictEqual', + stackStartFn: fn + }); + err.operator = fn.name; + throw err; + } + var keys = Object.keys(expected); + // Special handle errors to make sure the name and the message are compared + // as well. + if (expected instanceof Error) { + keys.push('name', 'message'); + } else if (keys.length === 0) { + throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object'); + } + if (isDeepEqual === undefined) lazyLoadComparison(); + keys.forEach(function (key) { + if (typeof actual[key] === 'string' && isRegExp(expected[key]) && RegExpPrototypeTest(expected[key], actual[key])) { + return; + } + compareExceptionKey(actual, expected, key, msg, keys, fn); + }); + return true; + } + // Guard instanceof against arrow functions as they don't have a prototype. + if (expected.prototype !== undefined && actual instanceof expected) { + return true; + } + if (Error.isPrototypeOf(expected)) { + return false; + } + return expected.call({}, actual) === true; +} +function getActual(fn) { + if (typeof fn !== 'function') { + throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn); + } + try { + fn(); + } catch (e) { + return e; + } + return NO_EXCEPTION_SENTINEL; +} +function checkIsPromise(obj) { + // Accept native ES6 promises and promises that are implemented in a similar + // way. Do not accept thenables that use a function as `obj` and that have no + // `catch` handler. + + // TODO: thenables are checked up until they have the correct methods, + // but according to documentation, the `then` method should receive + // the `fulfill` and `reject` arguments as well or it may be never resolved. + + return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function'; +} +function waitForActual(promiseFn) { + return Promise.resolve().then(function () { + var resultPromise; + if (typeof promiseFn === 'function') { + // Return a rejected promise if `promiseFn` throws synchronously. + resultPromise = promiseFn(); + // Fail in case no promise is returned. + if (!checkIsPromise(resultPromise)) { + throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise); + } + } else if (checkIsPromise(promiseFn)) { + resultPromise = promiseFn; + } else { + throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn); + } + return Promise.resolve().then(function () { + return resultPromise; + }).then(function () { + return NO_EXCEPTION_SENTINEL; + }).catch(function (e) { + return e; + }); + }); +} +function expectsError(stackStartFn, actual, error, message) { + if (typeof error === 'string') { + if (arguments.length === 4) { + throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error); + } + if (_typeof(actual) === 'object' && actual !== null) { + if (actual.message === error) { + throw new ERR_AMBIGUOUS_ARGUMENT('error/message', "The error message \"".concat(actual.message, "\" is identical to the message.")); + } + } else if (actual === error) { + throw new ERR_AMBIGUOUS_ARGUMENT('error/message', "The error \"".concat(actual, "\" is identical to the message.")); + } + message = error; + error = undefined; + } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') { + throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error); + } + if (actual === NO_EXCEPTION_SENTINEL) { + var details = ''; + if (error && error.name) { + details += " (".concat(error.name, ")"); + } + details += message ? ": ".concat(message) : '.'; + var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception'; + innerFail({ + actual: undefined, + expected: error, + operator: stackStartFn.name, + message: "Missing expected ".concat(fnType).concat(details), + stackStartFn: stackStartFn + }); + } + if (error && !expectedException(actual, error, message, stackStartFn)) { + throw actual; + } +} +function expectsNoError(stackStartFn, actual, error, message) { + if (actual === NO_EXCEPTION_SENTINEL) return; + if (typeof error === 'string') { + message = error; + error = undefined; + } + if (!error || expectedException(actual, error)) { + var details = message ? ": ".concat(message) : '.'; + var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception'; + innerFail({ + actual: actual, + expected: error, + operator: stackStartFn.name, + message: "Got unwanted ".concat(fnType).concat(details, "\n") + "Actual message: \"".concat(actual && actual.message, "\""), + stackStartFn: stackStartFn + }); + } + throw actual; +} +assert.throws = function throws(promiseFn) { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args)); +}; +assert.rejects = function rejects(promiseFn) { + for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + return waitForActual(promiseFn).then(function (result) { + return expectsError.apply(void 0, [rejects, result].concat(args)); + }); +}; +assert.doesNotThrow = function doesNotThrow(fn) { + for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args)); +}; +assert.doesNotReject = function doesNotReject(fn) { + for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { + args[_key5 - 1] = arguments[_key5]; + } + return waitForActual(fn).then(function (result) { + return expectsNoError.apply(void 0, [doesNotReject, result].concat(args)); + }); +}; +assert.ifError = function ifError(err) { + if (err !== null && err !== undefined) { + var message = 'ifError got unwanted exception: '; + if (_typeof(err) === 'object' && typeof err.message === 'string') { + if (err.message.length === 0 && err.constructor) { + message += err.constructor.name; + } else { + message += err.message; + } + } else { + message += inspect(err); + } + var newErr = new AssertionError({ + actual: err, + expected: null, + operator: 'ifError', + message: message, + stackStartFn: ifError + }); + + // Make sure we actually have a stack trace! + var origStack = err.stack; + if (typeof origStack === 'string') { + // This will remove any duplicated frames from the error frames taken + // from within `ifError` and add the original error frames to the newly + // created ones. + var tmp2 = origStack.split('\n'); + tmp2.shift(); + // Filter all frames existing in err.stack. + var tmp1 = newErr.stack.split('\n'); + for (var i = 0; i < tmp2.length; i++) { + // Find the first occurrence of the frame. + var pos = tmp1.indexOf(tmp2[i]); + if (pos !== -1) { + // Only keep new frames. + tmp1 = tmp1.slice(0, pos); + break; + } + } + newErr.stack = "".concat(tmp1.join('\n'), "\n").concat(tmp2.join('\n')); + } + throw newErr; + } +}; + +// Currently in sync with Node.js lib/assert.js +// https://github.com/nodejs/node/commit/2a871df3dfb8ea663ef5e1f8f62701ec51384ecb +function internalMatch(string, regexp, message, fn, fnName) { + if (!isRegExp(regexp)) { + throw new ERR_INVALID_ARG_TYPE('regexp', 'RegExp', regexp); + } + var match = fnName === 'match'; + if (typeof string !== 'string' || RegExpPrototypeTest(regexp, string) !== match) { + if (message instanceof Error) { + throw message; + } + var generatedMessage = !message; + + // 'The input was expected to not match the regular expression ' + + message = message || (typeof string !== 'string' ? 'The "string" argument must be of type string. Received type ' + "".concat(_typeof(string), " (").concat(inspect(string), ")") : (match ? 'The input did not match the regular expression ' : 'The input was expected to not match the regular expression ') + "".concat(inspect(regexp), ". Input:\n\n").concat(inspect(string), "\n")); + var err = new AssertionError({ + actual: string, + expected: regexp, + message: message, + operator: fnName, + stackStartFn: fn + }); + err.generatedMessage = generatedMessage; + throw err; + } +} +assert.match = function match(string, regexp, message) { + internalMatch(string, regexp, message, match, 'match'); +}; +assert.doesNotMatch = function doesNotMatch(string, regexp, message) { + internalMatch(string, regexp, message, doesNotMatch, 'doesNotMatch'); +}; + +// Expose a strict only variant of assert +function strict() { + for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + args[_key6] = arguments[_key6]; + } + innerOk.apply(void 0, [strict, args.length].concat(args)); +} +assert.strict = objectAssign(strict, assert, { + equal: assert.strictEqual, + deepEqual: assert.deepStrictEqual, + notEqual: assert.notStrictEqual, + notDeepEqual: assert.notDeepStrictEqual +}); +assert.strict.strict = assert.strict; + +/***/ }), + +/***/ 4459: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./isNaN')} */ +module.exports = Number.isNaN || function isNaN(a) { + return a !== a; +}; + + +/***/ }), + +/***/ 5345: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./uri')} */ +module.exports = URIError; + + +/***/ }), + +/***/ 5360: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +/** + * Generate a character map. + * @param {string} alphabet e.g. "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" + * @param {object} mappings map overrides from key to value + * @method + */ + +var charmap = function (alphabet, mappings) { + mappings || (mappings = {}); + alphabet.split("").forEach(function (c, i) { + if (!(c in mappings)) mappings[c] = i; + }); + return mappings; +} + +/** + * The RFC 4648 base 32 alphabet and character map. + * @see {@link https://tools.ietf.org/html/rfc4648} + */ + +var rfc4648 = { + alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", + charmap: { + 0: 14, + 1: 8 + } +}; + +rfc4648.charmap = charmap(rfc4648.alphabet, rfc4648.charmap); + +/** + * The Crockford base 32 alphabet and character map. + * @see {@link http://www.crockford.com/wrmg/base32.html} + */ + +var crockford = { + alphabet: "0123456789ABCDEFGHJKMNPQRSTVWXYZ", + charmap: { + O: 0, + I: 1, + L: 1 + } +}; + +crockford.charmap = charmap(crockford.alphabet, crockford.charmap); + +/** + * base32hex + * @see {@link https://en.wikipedia.org/wiki/Base32#base32hex} + */ + +var base32hex = { + alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV", + charmap: {} +}; + +base32hex.charmap = charmap(base32hex.alphabet, base32hex.charmap); + +/** + * Create a new `Decoder` with the given options. + * + * @param {object} [options] + * @param {string} [type] Supported Base-32 variants are "rfc4648" and + * "crockford". + * @param {object} [charmap] Override the character map used in decoding. + * @constructor + */ + +function Decoder (options) { + this.buf = []; + this.shift = 8; + this.carry = 0; + + if (options) { + + switch (options.type) { + case "rfc4648": + this.charmap = exports.rfc4648.charmap; + break; + case "crockford": + this.charmap = exports.crockford.charmap; + break; + case "base32hex": + this.charmap = exports.base32hex.charmap; + break; + default: + throw new Error("invalid type"); + } + + if (options.charmap) this.charmap = options.charmap; + } +} + +/** + * The default character map coresponds to RFC4648. + */ + +Decoder.prototype.charmap = rfc4648.charmap; + +/** + * Decode a string, continuing from the previous state. + * + * @param {string} str + * @return {Decoder} this + */ + +Decoder.prototype.write = function (str) { + var charmap = this.charmap; + var buf = this.buf; + var shift = this.shift; + var carry = this.carry; + + // decode string + str.toUpperCase().split("").forEach(function (char) { + + // ignore padding + if (char == "=") return; + + // lookup symbol + var symbol = charmap[char] & 0xff; + + // 1: 00000 000 + // 2: 00 00000 0 + // 3: 0000 0000 + // 4: 0 00000 00 + // 5: 000 00000 + // 6: 00000 000 + // 7: 00 00000 0 + + shift -= 5; + if (shift > 0) { + carry |= symbol << shift; + } else if (shift < 0) { + buf.push(carry | (symbol >> -shift)); + shift += 8; + carry = (symbol << shift) & 0xff; + } else { + buf.push(carry | symbol); + shift = 8; + carry = 0; + } + }); + + // save state + this.shift = shift; + this.carry = carry; + + // for chaining + return this; +}; + +/** + * Finish decoding. + * + * @param {string} [str] The final string to decode. + * @return {Array} Decoded byte array. + */ + +Decoder.prototype.finalize = function (str) { + if (str) { + this.write(str); + } + if (this.shift !== 8 && this.carry !== 0) { + this.buf.push(this.carry); + this.shift = 8; + this.carry = 0; + } + return this.buf; +}; + +/** + * Create a new `Encoder` with the given options. + * + * @param {object} [options] + * @param {string} [type] Supported Base-32 variants are "rfc4648" and + * "crockford". + * @param {object} [alphabet] Override the alphabet used in encoding. + * @constructor + */ + +function Encoder (options) { + this.buf = ""; + this.shift = 3; + this.carry = 0; + + if (options) { + + switch (options.type) { + case "rfc4648": + this.alphabet = exports.rfc4648.alphabet; + break; + case "crockford": + this.alphabet = exports.crockford.alphabet; + break; + case "base32hex": + this.alphabet = exports.base32hex.alphabet; + break; + default: + throw new Error("invalid type"); + } + + if (options.alphabet) this.alphabet = options.alphabet; + else if (options.lc) this.alphabet = this.alphabet.toLowerCase(); + } +} + +/** + * The default alphabet coresponds to RFC4648. + */ + +Encoder.prototype.alphabet = rfc4648.alphabet; + +/** + * Encode a byte array, continuing from the previous state. + * + * @param {byte[]} buf The byte array to encode. + * @return {Encoder} this + */ + +Encoder.prototype.write = function (buf) { + var shift = this.shift; + var carry = this.carry; + var symbol; + var byte; + var i; + + // encode each byte in buf + for (i = 0; i < buf.length; i++) { + byte = buf[i]; + + // 1: 00000 000 + // 2: 00 00000 0 + // 3: 0000 0000 + // 4: 0 00000 00 + // 5: 000 00000 + // 6: 00000 000 + // 7: 00 00000 0 + + symbol = carry | (byte >> shift); + this.buf += this.alphabet[symbol & 0x1f]; + + if (shift > 5) { + shift -= 5; + symbol = byte >> shift; + this.buf += this.alphabet[symbol & 0x1f]; + } + + shift = 5 - shift; + carry = byte << shift; + shift = 8 - shift; + } + + // save state + this.shift = shift; + this.carry = carry; + + // for chaining + return this; +}; + +/** + * Finish encoding. + * + * @param {byte[]} [buf] The final byte array to encode. + * @return {string} The encoded byte array. + */ + +Encoder.prototype.finalize = function (buf) { + if (buf) { + this.write(buf); + } + if (this.shift !== 3) { + this.buf += this.alphabet[this.carry & 0x1f]; + this.shift = 3; + this.carry = 0; + } + return this.buf; +}; + +/** + * Convenience encoder. + * + * @param {byte[]} buf The byte array to encode. + * @param {object} [options] Options to pass to the encoder. + * @return {string} The encoded string. + */ + +exports.encode = function (buf, options) { + return new Encoder(options).finalize(buf); +}; + +/** + * Convenience decoder. + * + * @param {string} str The string to decode. + * @param {object} [options] Options to pass to the decoder. + * @return {byte[]} The decoded byte array. + */ + +exports.decode = function (str, options) { + return new Decoder(options).finalize(str); +}; + +// Exports. +exports.Decoder = Decoder; +exports.Encoder = Encoder; +exports.charmap = charmap; +exports.crockford = crockford; +exports.rfc4648 = rfc4648; +exports.base32hex = base32hex; + + +/***/ }), + +/***/ 5606: +/***/ ((module) => { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), + +/***/ 5680: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var whichTypedArray = __webpack_require__(5767); + +/** @type {import('.')} */ +module.exports = function isTypedArray(value) { + return !!whichTypedArray(value); +}; + + +/***/ }), + +/***/ 5767: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var forEach = __webpack_require__(2682); +var availableTypedArrays = __webpack_require__(9209); +var callBind = __webpack_require__(487); +var callBound = __webpack_require__(6556); +var gOPD = __webpack_require__(5795); +var getProto = __webpack_require__(3628); + +var $toString = callBound('Object.prototype.toString'); +var hasToStringTag = __webpack_require__(9092)(); + +var g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis; +var typedArrays = availableTypedArrays(); + +var $slice = callBound('String.prototype.slice'); + +/** @type {(array: readonly T[], value: unknown) => number} */ +var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { + for (var i = 0; i < array.length; i += 1) { + if (array[i] === value) { + return i; + } + } + return -1; +}; + +/** @typedef {import('./types').Getter} Getter */ +/** @type {import('./types').Cache} */ +var cache = { __proto__: null }; +if (hasToStringTag && gOPD && getProto) { + forEach(typedArrays, function (typedArray) { + var arr = new g[typedArray](); + if (Symbol.toStringTag in arr && getProto) { + var proto = getProto(arr); + // @ts-expect-error TS won't narrow inside a closure + var descriptor = gOPD(proto, Symbol.toStringTag); + if (!descriptor && proto) { + var superProto = getProto(proto); + // @ts-expect-error TS won't narrow inside a closure + descriptor = gOPD(superProto, Symbol.toStringTag); + } + // @ts-expect-error TODO: fix + cache['$' + typedArray] = callBind(descriptor.get); + } + }); +} else { + forEach(typedArrays, function (typedArray) { + var arr = new g[typedArray](); + var fn = arr.slice || arr.set; + if (fn) { + cache[ + /** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray) + ] = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ ( + // @ts-expect-error TODO FIXME + callBind(fn) + ); + } + }); +} + +/** @type {(value: object) => false | import('.').TypedArrayName} */ +var tryTypedArrays = function tryAllTypedArrays(value) { + /** @type {ReturnType} */ var found = false; + forEach( + /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */ (cache), + /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ + function (getter, typedArray) { + if (!found) { + try { + // @ts-expect-error a throw is fine here + if ('$' + getter(value) === typedArray) { + found = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1)); + } + } catch (e) { /**/ } + } + } + ); + return found; +}; + +/** @type {(value: object) => false | import('.').TypedArrayName} */ +var trySlices = function tryAllSlices(value) { + /** @type {ReturnType} */ var found = false; + forEach( + /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */(cache), + /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ function (getter, name) { + if (!found) { + try { + // @ts-expect-error a throw is fine here + getter(value); + found = /** @type {import('.').TypedArrayName} */ ($slice(name, 1)); + } catch (e) { /**/ } + } + } + ); + return found; +}; + +/** @type {import('.')} */ +module.exports = function whichTypedArray(value) { + if (!value || typeof value !== 'object') { return false; } + if (!hasToStringTag) { + /** @type {string} */ + var tag = $slice($toString(value), 8, -1); + if ($indexOf(typedArrays, tag) > -1) { + return tag; + } + if (tag !== 'Object') { + return false; + } + // node < 0.6 hits here on real Typed Arrays + return trySlices(value); + } + if (!gOPD) { return null; } // unknown engine + return tryTypedArrays(value); +}; + + +/***/ }), + +/***/ 5795: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +/** @type {import('.')} */ +var $gOPD = __webpack_require__(6549); + +if ($gOPD) { + try { + $gOPD([], 'length'); + } catch (e) { + // IE 8 has a broken gOPD + $gOPD = null; + } +} + +module.exports = $gOPD; + + +/***/ }), + +/***/ 5880: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./pow')} */ +module.exports = Math.pow; + + +/***/ }), + +/***/ 6188: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./max')} */ +module.exports = Math.max; + + +/***/ }), + +/***/ 6549: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./gOPD')} */ +module.exports = Object.getOwnPropertyDescriptor; + + +/***/ }), + +/***/ 6556: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var GetIntrinsic = __webpack_require__(453); + +var callBindBasic = __webpack_require__(3126); + +/** @type {(thisArg: string, searchString: string, position?: number) => number} */ +var $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]); + +/** @type {import('.')} */ +module.exports = function callBoundIntrinsic(name, allowMissing) { + /* eslint no-extra-parens: 0 */ + + var intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing)); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBindBasic(/** @type {const} */ ([intrinsic])); + } + return intrinsic; +}; + + +/***/ }), + +/***/ 6576: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var getPolyfill = __webpack_require__(9394); +var define = __webpack_require__(8452); + +module.exports = function shimObjectIs() { + var polyfill = getPolyfill(); + define(Object, { is: polyfill }, { + is: function testObjectIs() { + return Object.is !== polyfill; + } + }); + return polyfill; +}; + + +/***/ }), + +/***/ 6578: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('.')} */ +module.exports = [ + 'Float16Array', + 'Float32Array', + 'Float64Array', + 'Int8Array', + 'Int16Array', + 'Int32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Uint16Array', + 'Uint32Array', + 'BigInt64Array', + 'BigUint64Array' +]; + + +/***/ }), + +/***/ 6642: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var implementation = __webpack_require__(3003); + +module.exports = function getPolyfill() { + if (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) { + return Number.isNaN; + } + return implementation; +}; + + +/***/ }), + +/***/ 6698: +/***/ ((module) => { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} + + +/***/ }), + +/***/ 6710: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = __webpack_require__(6698) +var Sha256 = __webpack_require__(4107) +var Hash = __webpack_require__(392) +var Buffer = (__webpack_require__(2861).Buffer) + +var W = new Array(64) + +function Sha224 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha224, Sha256) + +Sha224.prototype.init = function () { + this._a = 0xc1059ed8 + this._b = 0x367cd507 + this._c = 0x3070dd17 + this._d = 0xf70e5939 + this._e = 0xffc00b31 + this._f = 0x68581511 + this._g = 0x64f98fa7 + this._h = 0xbefa4fa4 + + return this +} + +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + + return H +} + +module.exports = Sha224 + + +/***/ }), + +/***/ 6743: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var implementation = __webpack_require__(9353); + +module.exports = Function.prototype.bind || implementation; + + +/***/ }), + +/***/ 6763: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*global window, global*/ +var util = __webpack_require__(537) +var assert = __webpack_require__(4148) +function now() { return new Date().getTime() } + +var slice = Array.prototype.slice +var console +var times = {} + +if (typeof __webpack_require__.g !== "undefined" && __webpack_require__.g.console) { + console = __webpack_require__.g.console +} else if (typeof window !== "undefined" && window.console) { + console = window.console +} else { + console = {} +} + +var functions = [ + [log, "log"], + [info, "info"], + [warn, "warn"], + [error, "error"], + [time, "time"], + [timeEnd, "timeEnd"], + [trace, "trace"], + [dir, "dir"], + [consoleAssert, "assert"] +] + +for (var i = 0; i < functions.length; i++) { + var tuple = functions[i] + var f = tuple[0] + var name = tuple[1] + + if (!console[name]) { + console[name] = f + } +} + +module.exports = console + +function log() {} + +function info() { + console.log.apply(console, arguments) +} + +function warn() { + console.log.apply(console, arguments) +} + +function error() { + console.warn.apply(console, arguments) +} + +function time(label) { + times[label] = now() +} + +function timeEnd(label) { + var time = times[label] + if (!time) { + throw new Error("No such label: " + label) + } + + delete times[label] + var duration = now() - time + console.log(label + ": " + duration + "ms") +} + +function trace() { + var err = new Error() + err.name = "Trace" + err.message = util.format.apply(null, arguments) + console.error(err.stack) +} + +function dir(object) { + console.log(util.inspect(object) + "\n") +} + +function consoleAssert(expression) { + if (!expression) { + var arr = slice.call(arguments, 1) + assert.ok(false, util.format.apply(null, arr)) + } +} + + +/***/ }), + +/***/ 6897: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var GetIntrinsic = __webpack_require__(453); +var define = __webpack_require__(41); +var hasDescriptors = __webpack_require__(592)(); +var gOPD = __webpack_require__(5795); + +var $TypeError = __webpack_require__(9675); +var $floor = GetIntrinsic('%Math.floor%'); + +/** @type {import('.')} */ +module.exports = function setFunctionLength(fn, length) { + if (typeof fn !== 'function') { + throw new $TypeError('`fn` is not a function'); + } + if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { + throw new $TypeError('`length` must be a positive 32-bit integer'); + } + + var loose = arguments.length > 2 && !!arguments[2]; + + var functionLengthIsConfigurable = true; + var functionLengthIsWritable = true; + if ('length' in fn && gOPD) { + var desc = gOPD(fn, 'length'); + if (desc && !desc.configurable) { + functionLengthIsConfigurable = false; + } + if (desc && !desc.writable) { + functionLengthIsWritable = false; + } + } + + if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { + if (hasDescriptors) { + define(/** @type {Parameters[0]} */ (fn), 'length', length, true, true); + } else { + define(/** @type {Parameters[0]} */ (fn), 'length', length); + } + } + return fn; +}; + + +/***/ }), + +/***/ 7119: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./reflectApply')} */ +module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; + + +/***/ }), + +/***/ 7176: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var callBind = __webpack_require__(3126); +var gOPD = __webpack_require__(5795); + +var hasProtoAccessor; +try { + // eslint-disable-next-line no-extra-parens, no-proto + hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype; +} catch (e) { + if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') { + throw e; + } +} + +// eslint-disable-next-line no-extra-parens +var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__')); + +var $Object = Object; +var $getPrototypeOf = $Object.getPrototypeOf; + +/** @type {import('./get')} */ +module.exports = desc && typeof desc.get === 'function' + ? callBind([desc.get]) + : typeof $getPrototypeOf === 'function' + ? /** @type {import('./get')} */ function getDunder(value) { + // eslint-disable-next-line eqeqeq + return $getPrototypeOf(value == null ? value : $Object(value)); + } + : false; + + +/***/ }), + +/***/ 7244: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var hasToStringTag = __webpack_require__(9092)(); +var callBound = __webpack_require__(6556); + +var $toString = callBound('Object.prototype.toString'); + +/** @type {import('.')} */ +var isStandardArguments = function isArguments(value) { + if ( + hasToStringTag + && value + && typeof value === 'object' + && Symbol.toStringTag in value + ) { + return false; + } + return $toString(value) === '[object Arguments]'; +}; + +/** @type {import('.')} */ +var isLegacyArguments = function isArguments(value) { + if (isStandardArguments(value)) { + return true; + } + return value !== null + && typeof value === 'object' + && 'length' in value + && typeof value.length === 'number' + && value.length >= 0 + && $toString(value) !== '[object Array]' + && 'callee' in value + && $toString(value.callee) === '[object Function]'; +}; + +var supportsStandardArguments = (function () { + return isStandardArguments(arguments); +}()); + +// @ts-expect-error TODO make this not error +isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests + +/** @type {import('.')} */ +module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; + + +/***/ }), + +/***/ 7526: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + + +/***/ }), + +/***/ 7653: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var define = __webpack_require__(8452); +var callBind = __webpack_require__(487); + +var implementation = __webpack_require__(9211); +var getPolyfill = __webpack_require__(9394); +var shim = __webpack_require__(6576); + +var polyfill = callBind(getPolyfill(), Object); + +define(polyfill, { + getPolyfill: getPolyfill, + implementation: implementation, + shim: shim +}); + +module.exports = polyfill; + + +/***/ }), + +/***/ 7816: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = __webpack_require__(6698) +var Hash = __webpack_require__(392) +var Buffer = (__webpack_require__(2861).Buffer) + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha, Hash) + +Sha.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha + + +/***/ }), + +/***/ 7957: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Account: () => (/* reexport */ Account), + Address: () => (/* reexport */ Address), + Asset: () => (/* reexport */ Asset), + AuthClawbackEnabledFlag: () => (/* reexport */ AuthClawbackEnabledFlag), + AuthImmutableFlag: () => (/* reexport */ AuthImmutableFlag), + AuthRequiredFlag: () => (/* reexport */ AuthRequiredFlag), + AuthRevocableFlag: () => (/* reexport */ AuthRevocableFlag), + BASE_FEE: () => (/* reexport */ BASE_FEE), + Claimant: () => (/* reexport */ Claimant), + Contract: () => (/* reexport */ Contract), + FastSigning: () => (/* reexport */ FastSigning), + FeeBumpTransaction: () => (/* reexport */ FeeBumpTransaction), + Hyper: () => (/* reexport */ xdr.Hyper), + Int128: () => (/* reexport */ Int128), + Int256: () => (/* reexport */ Int256), + Keypair: () => (/* reexport */ Keypair), + LiquidityPoolAsset: () => (/* reexport */ LiquidityPoolAsset), + LiquidityPoolFeeV18: () => (/* reexport */ LiquidityPoolFeeV18), + LiquidityPoolId: () => (/* reexport */ LiquidityPoolId), + Memo: () => (/* reexport */ Memo), + MemoHash: () => (/* reexport */ MemoHash), + MemoID: () => (/* reexport */ MemoID), + MemoNone: () => (/* reexport */ MemoNone), + MemoReturn: () => (/* reexport */ MemoReturn), + MemoText: () => (/* reexport */ MemoText), + MuxedAccount: () => (/* reexport */ MuxedAccount), + Networks: () => (/* reexport */ Networks), + Operation: () => (/* reexport */ Operation), + ScInt: () => (/* reexport */ ScInt), + SignerKey: () => (/* reexport */ SignerKey), + Soroban: () => (/* reexport */ Soroban), + SorobanDataBuilder: () => (/* reexport */ SorobanDataBuilder), + StrKey: () => (/* reexport */ StrKey), + TimeoutInfinite: () => (/* reexport */ TimeoutInfinite), + Transaction: () => (/* reexport */ Transaction), + TransactionBase: () => (/* reexport */ TransactionBase), + TransactionBuilder: () => (/* reexport */ TransactionBuilder), + Uint128: () => (/* reexport */ Uint128), + Uint256: () => (/* reexport */ Uint256), + UnsignedHyper: () => (/* reexport */ xdr.UnsignedHyper), + XdrLargeInt: () => (/* reexport */ XdrLargeInt), + authorizeEntry: () => (/* reexport */ authorizeEntry), + authorizeInvocation: () => (/* reexport */ authorizeInvocation), + buildInvocationTree: () => (/* reexport */ buildInvocationTree), + cereal: () => (/* reexport */ jsxdr), + decodeAddressToMuxedAccount: () => (/* reexport */ decodeAddressToMuxedAccount), + "default": () => (/* binding */ src), + encodeMuxedAccount: () => (/* reexport */ encodeMuxedAccount), + encodeMuxedAccountToAddress: () => (/* reexport */ encodeMuxedAccountToAddress), + extractBaseAddress: () => (/* reexport */ extractBaseAddress), + getLiquidityPoolId: () => (/* reexport */ getLiquidityPoolId), + hash: () => (/* reexport */ hashing_hash), + humanizeEvents: () => (/* reexport */ humanizeEvents), + nativeToScVal: () => (/* reexport */ nativeToScVal), + scValToBigInt: () => (/* reexport */ scValToBigInt), + scValToNative: () => (/* reexport */ scValToNative), + sign: () => (/* reexport */ signing_sign), + verify: () => (/* reexport */ signing_verify), + walkInvocationTree: () => (/* reexport */ walkInvocationTree), + xdr: () => (/* reexport */ src_xdr) +}); + +// EXTERNAL MODULE: ./node_modules/@stellar/js-xdr/dist/xdr.js +var xdr = __webpack_require__(3740); +;// ./src/generated/curr_generated.js +// Automatically generated by xdrgen on 2024-09-12T11:09:00-08:00 +// DO NOT EDIT or your changes may be overwritten + +/* jshint maxstatements:2147483647 */ +/* jshint esnext:true */ + + +var types = xdr.config(function (xdr) { + // Workaround for https://github.com/stellar/xdrgen/issues/152 + // + // The "correct" way would be to replace bare instances of each constant with + // xdr.lookup("..."), but that's more error-prone. + var SCSYMBOL_LIMIT = 32; + var SC_SPEC_DOC_LIMIT = 1024; + + // === xdr source ============================================================ + // + // typedef opaque Value<>; + // + // =========================================================================== + xdr.typedef("Value", xdr.varOpaque()); + + // === xdr source ============================================================ + // + // struct SCPBallot + // { + // uint32 counter; // n + // Value value; // x + // }; + // + // =========================================================================== + xdr.struct("ScpBallot", [["counter", xdr.lookup("Uint32")], ["value", xdr.lookup("Value")]]); + + // === xdr source ============================================================ + // + // enum SCPStatementType + // { + // SCP_ST_PREPARE = 0, + // SCP_ST_CONFIRM = 1, + // SCP_ST_EXTERNALIZE = 2, + // SCP_ST_NOMINATE = 3 + // }; + // + // =========================================================================== + xdr["enum"]("ScpStatementType", { + scpStPrepare: 0, + scpStConfirm: 1, + scpStExternalize: 2, + scpStNominate: 3 + }); + + // === xdr source ============================================================ + // + // struct SCPNomination + // { + // Hash quorumSetHash; // D + // Value votes<>; // X + // Value accepted<>; // Y + // }; + // + // =========================================================================== + xdr.struct("ScpNomination", [["quorumSetHash", xdr.lookup("Hash")], ["votes", xdr.varArray(xdr.lookup("Value"), 2147483647)], ["accepted", xdr.varArray(xdr.lookup("Value"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } + // + // =========================================================================== + xdr.struct("ScpStatementPrepare", [["quorumSetHash", xdr.lookup("Hash")], ["ballot", xdr.lookup("ScpBallot")], ["prepared", xdr.option(xdr.lookup("ScpBallot"))], ["preparedPrime", xdr.option(xdr.lookup("ScpBallot"))], ["nC", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } + // + // =========================================================================== + xdr.struct("ScpStatementConfirm", [["ballot", xdr.lookup("ScpBallot")], ["nPrepared", xdr.lookup("Uint32")], ["nCommit", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")], ["quorumSetHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } + // + // =========================================================================== + xdr.struct("ScpStatementExternalize", [["commit", xdr.lookup("ScpBallot")], ["nH", xdr.lookup("Uint32")], ["commitQuorumSetHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union switch (SCPStatementType type) + // { + // case SCP_ST_PREPARE: + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } prepare; + // case SCP_ST_CONFIRM: + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } confirm; + // case SCP_ST_EXTERNALIZE: + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } externalize; + // case SCP_ST_NOMINATE: + // SCPNomination nominate; + // } + // + // =========================================================================== + xdr.union("ScpStatementPledges", { + switchOn: xdr.lookup("ScpStatementType"), + switchName: "type", + switches: [["scpStPrepare", "prepare"], ["scpStConfirm", "confirm"], ["scpStExternalize", "externalize"], ["scpStNominate", "nominate"]], + arms: { + prepare: xdr.lookup("ScpStatementPrepare"), + confirm: xdr.lookup("ScpStatementConfirm"), + externalize: xdr.lookup("ScpStatementExternalize"), + nominate: xdr.lookup("ScpNomination") + } + }); + + // === xdr source ============================================================ + // + // struct SCPStatement + // { + // NodeID nodeID; // v + // uint64 slotIndex; // i + // + // union switch (SCPStatementType type) + // { + // case SCP_ST_PREPARE: + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } prepare; + // case SCP_ST_CONFIRM: + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } confirm; + // case SCP_ST_EXTERNALIZE: + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } externalize; + // case SCP_ST_NOMINATE: + // SCPNomination nominate; + // } + // pledges; + // }; + // + // =========================================================================== + xdr.struct("ScpStatement", [["nodeId", xdr.lookup("NodeId")], ["slotIndex", xdr.lookup("Uint64")], ["pledges", xdr.lookup("ScpStatementPledges")]]); + + // === xdr source ============================================================ + // + // struct SCPEnvelope + // { + // SCPStatement statement; + // Signature signature; + // }; + // + // =========================================================================== + xdr.struct("ScpEnvelope", [["statement", xdr.lookup("ScpStatement")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // struct SCPQuorumSet + // { + // uint32 threshold; + // NodeID validators<>; + // SCPQuorumSet innerSets<>; + // }; + // + // =========================================================================== + xdr.struct("ScpQuorumSet", [["threshold", xdr.lookup("Uint32")], ["validators", xdr.varArray(xdr.lookup("NodeId"), 2147483647)], ["innerSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)]]); + + // === xdr source ============================================================ + // + // typedef opaque Thresholds[4]; + // + // =========================================================================== + xdr.typedef("Thresholds", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef string string32<32>; + // + // =========================================================================== + xdr.typedef("String32", xdr.string(32)); + + // === xdr source ============================================================ + // + // typedef string string64<64>; + // + // =========================================================================== + xdr.typedef("String64", xdr.string(64)); + + // === xdr source ============================================================ + // + // typedef int64 SequenceNumber; + // + // =========================================================================== + xdr.typedef("SequenceNumber", xdr.lookup("Int64")); + + // === xdr source ============================================================ + // + // typedef opaque DataValue<64>; + // + // =========================================================================== + xdr.typedef("DataValue", xdr.varOpaque(64)); + + // === xdr source ============================================================ + // + // typedef Hash PoolID; + // + // =========================================================================== + xdr.typedef("PoolId", xdr.lookup("Hash")); + + // === xdr source ============================================================ + // + // typedef opaque AssetCode4[4]; + // + // =========================================================================== + xdr.typedef("AssetCode4", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef opaque AssetCode12[12]; + // + // =========================================================================== + xdr.typedef("AssetCode12", xdr.opaque(12)); + + // === xdr source ============================================================ + // + // enum AssetType + // { + // ASSET_TYPE_NATIVE = 0, + // ASSET_TYPE_CREDIT_ALPHANUM4 = 1, + // ASSET_TYPE_CREDIT_ALPHANUM12 = 2, + // ASSET_TYPE_POOL_SHARE = 3 + // }; + // + // =========================================================================== + xdr["enum"]("AssetType", { + assetTypeNative: 0, + assetTypeCreditAlphanum4: 1, + assetTypeCreditAlphanum12: 2, + assetTypePoolShare: 3 + }); + + // === xdr source ============================================================ + // + // union AssetCode switch (AssetType type) + // { + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AssetCode4 assetCode4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AssetCode12 assetCode12; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("AssetCode", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeCreditAlphanum4", "assetCode4"], ["assetTypeCreditAlphanum12", "assetCode12"]], + arms: { + assetCode4: xdr.lookup("AssetCode4"), + assetCode12: xdr.lookup("AssetCode12") + } + }); + + // === xdr source ============================================================ + // + // struct AlphaNum4 + // { + // AssetCode4 assetCode; + // AccountID issuer; + // }; + // + // =========================================================================== + xdr.struct("AlphaNum4", [["assetCode", xdr.lookup("AssetCode4")], ["issuer", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // struct AlphaNum12 + // { + // AssetCode12 assetCode; + // AccountID issuer; + // }; + // + // =========================================================================== + xdr.struct("AlphaNum12", [["assetCode", xdr.lookup("AssetCode12")], ["issuer", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // union Asset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("Asset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12") + } + }); + + // === xdr source ============================================================ + // + // struct Price + // { + // int32 n; // numerator + // int32 d; // denominator + // }; + // + // =========================================================================== + xdr.struct("Price", [["n", xdr.lookup("Int32")], ["d", xdr.lookup("Int32")]]); + + // === xdr source ============================================================ + // + // struct Liabilities + // { + // int64 buying; + // int64 selling; + // }; + // + // =========================================================================== + xdr.struct("Liabilities", [["buying", xdr.lookup("Int64")], ["selling", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum ThresholdIndexes + // { + // THRESHOLD_MASTER_WEIGHT = 0, + // THRESHOLD_LOW = 1, + // THRESHOLD_MED = 2, + // THRESHOLD_HIGH = 3 + // }; + // + // =========================================================================== + xdr["enum"]("ThresholdIndices", { + thresholdMasterWeight: 0, + thresholdLow: 1, + thresholdMed: 2, + thresholdHigh: 3 + }); + + // === xdr source ============================================================ + // + // enum LedgerEntryType + // { + // ACCOUNT = 0, + // TRUSTLINE = 1, + // OFFER = 2, + // DATA = 3, + // CLAIMABLE_BALANCE = 4, + // LIQUIDITY_POOL = 5, + // CONTRACT_DATA = 6, + // CONTRACT_CODE = 7, + // CONFIG_SETTING = 8, + // TTL = 9 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerEntryType", { + account: 0, + trustline: 1, + offer: 2, + data: 3, + claimableBalance: 4, + liquidityPool: 5, + contractData: 6, + contractCode: 7, + configSetting: 8, + ttl: 9 + }); + + // === xdr source ============================================================ + // + // struct Signer + // { + // SignerKey key; + // uint32 weight; // really only need 1 byte + // }; + // + // =========================================================================== + xdr.struct("Signer", [["key", xdr.lookup("SignerKey")], ["weight", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // enum AccountFlags + // { // masks for each flag + // + // // Flags set on issuer accounts + // // TrustLines are created with authorized set to "false" requiring + // // the issuer to set it for each TrustLine + // AUTH_REQUIRED_FLAG = 0x1, + // // If set, the authorized flag in TrustLines can be cleared + // // otherwise, authorization cannot be revoked + // AUTH_REVOCABLE_FLAG = 0x2, + // // Once set, causes all AUTH_* flags to be read-only + // AUTH_IMMUTABLE_FLAG = 0x4, + // // Trustlines are created with clawback enabled set to "true", + // // and claimable balances created from those trustlines are created + // // with clawback enabled set to "true" + // AUTH_CLAWBACK_ENABLED_FLAG = 0x8 + // }; + // + // =========================================================================== + xdr["enum"]("AccountFlags", { + authRequiredFlag: 1, + authRevocableFlag: 2, + authImmutableFlag: 4, + authClawbackEnabledFlag: 8 + }); + + // === xdr source ============================================================ + // + // const MASK_ACCOUNT_FLAGS = 0x7; + // + // =========================================================================== + xdr["const"]("MASK_ACCOUNT_FLAGS", 0x7); + + // === xdr source ============================================================ + // + // const MASK_ACCOUNT_FLAGS_V17 = 0xF; + // + // =========================================================================== + xdr["const"]("MASK_ACCOUNT_FLAGS_V17", 0xF); + + // === xdr source ============================================================ + // + // const MAX_SIGNERS = 20; + // + // =========================================================================== + xdr["const"]("MAX_SIGNERS", 20); + + // === xdr source ============================================================ + // + // typedef AccountID* SponsorshipDescriptor; + // + // =========================================================================== + xdr.typedef("SponsorshipDescriptor", xdr.option(xdr.lookup("AccountId"))); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV3 + // { + // // We can use this to add more fields, or because it is first, to + // // change AccountEntryExtensionV3 into a union. + // ExtensionPoint ext; + // + // // Ledger number at which `seqNum` took on its present value. + // uint32 seqLedger; + // + // // Time at which `seqNum` took on its present value. + // TimePoint seqTime; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV3", [["ext", xdr.lookup("ExtensionPoint")], ["seqLedger", xdr.lookup("Uint32")], ["seqTime", xdr.lookup("TimePoint")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 3: + // AccountEntryExtensionV3 v3; + // } + // + // =========================================================================== + xdr.union("AccountEntryExtensionV2Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [3, "v3"]], + arms: { + v3: xdr.lookup("AccountEntryExtensionV3") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV2 + // { + // uint32 numSponsored; + // uint32 numSponsoring; + // SponsorshipDescriptor signerSponsoringIDs; + // + // union switch (int v) + // { + // case 0: + // void; + // case 3: + // AccountEntryExtensionV3 v3; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV2", [["numSponsored", xdr.lookup("Uint32")], ["numSponsoring", xdr.lookup("Uint32")], ["signerSponsoringIDs", xdr.varArray(xdr.lookup("SponsorshipDescriptor"), xdr.lookup("MAX_SIGNERS"))], ["ext", xdr.lookup("AccountEntryExtensionV2Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // AccountEntryExtensionV2 v2; + // } + // + // =========================================================================== + xdr.union("AccountEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [2, "v2"]], + arms: { + v2: xdr.lookup("AccountEntryExtensionV2") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV1 + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // AccountEntryExtensionV2 v2; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("AccountEntryExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // AccountEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("AccountEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("AccountEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntry + // { + // AccountID accountID; // master public key for this account + // int64 balance; // in stroops + // SequenceNumber seqNum; // last sequence number used for this account + // uint32 numSubEntries; // number of sub-entries this account has + // // drives the reserve + // AccountID* inflationDest; // Account to vote for during inflation + // uint32 flags; // see AccountFlags + // + // string32 homeDomain; // can be used for reverse federation and memo lookup + // + // // fields used for signatures + // // thresholds stores unsigned bytes: [weight of master|low|medium|high] + // Thresholds thresholds; + // + // Signer signers; // possible signers for this account + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // AccountEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntry", [["accountId", xdr.lookup("AccountId")], ["balance", xdr.lookup("Int64")], ["seqNum", xdr.lookup("SequenceNumber")], ["numSubEntries", xdr.lookup("Uint32")], ["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["flags", xdr.lookup("Uint32")], ["homeDomain", xdr.lookup("String32")], ["thresholds", xdr.lookup("Thresholds")], ["signers", xdr.varArray(xdr.lookup("Signer"), xdr.lookup("MAX_SIGNERS"))], ["ext", xdr.lookup("AccountEntryExt")]]); + + // === xdr source ============================================================ + // + // enum TrustLineFlags + // { + // // issuer has authorized account to perform transactions with its credit + // AUTHORIZED_FLAG = 1, + // // issuer has authorized account to maintain and reduce liabilities for its + // // credit + // AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG = 2, + // // issuer has specified that it may clawback its credit, and that claimable + // // balances created with its credit may also be clawed back + // TRUSTLINE_CLAWBACK_ENABLED_FLAG = 4 + // }; + // + // =========================================================================== + xdr["enum"]("TrustLineFlags", { + authorizedFlag: 1, + authorizedToMaintainLiabilitiesFlag: 2, + trustlineClawbackEnabledFlag: 4 + }); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS = 1; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS", 1); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS_V13 = 3; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS_V13", 3); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS_V17 = 7; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS_V17", 7); + + // === xdr source ============================================================ + // + // enum LiquidityPoolType + // { + // LIQUIDITY_POOL_CONSTANT_PRODUCT = 0 + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolType", { + liquidityPoolConstantProduct: 0 + }); + + // === xdr source ============================================================ + // + // union TrustLineAsset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // case ASSET_TYPE_POOL_SHARE: + // PoolID liquidityPoolID; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("TrustLineAsset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"], ["assetTypePoolShare", "liquidityPoolId"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12"), + liquidityPoolId: xdr.lookup("PoolId") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryExtensionV2Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TrustLineEntryExtensionV2 + // { + // int32 liquidityPoolUseCount; + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TrustLineEntryExtensionV2", [["liquidityPoolUseCount", xdr.lookup("Int32")], ["ext", xdr.lookup("TrustLineEntryExtensionV2Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [2, "v2"]], + arms: { + v2: xdr.lookup("TrustLineEntryExtensionV2") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } + // + // =========================================================================== + xdr.struct("TrustLineEntryV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("TrustLineEntryV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } v1; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("TrustLineEntryV1") + } + }); + + // === xdr source ============================================================ + // + // struct TrustLineEntry + // { + // AccountID accountID; // account this trustline belongs to + // TrustLineAsset asset; // type of asset (with issuer) + // int64 balance; // how much of this asset the user has. + // // Asset defines the unit for this; + // + // int64 limit; // balance cannot be above this + // uint32 flags; // see TrustLineFlags + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TrustLineEntry", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("TrustLineAsset")], ["balance", xdr.lookup("Int64")], ["limit", xdr.lookup("Int64")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("TrustLineEntryExt")]]); + + // === xdr source ============================================================ + // + // enum OfferEntryFlags + // { + // // an offer with this flag will not act on and take a reverse offer of equal + // // price + // PASSIVE_FLAG = 1 + // }; + // + // =========================================================================== + xdr["enum"]("OfferEntryFlags", { + passiveFlag: 1 + }); + + // === xdr source ============================================================ + // + // const MASK_OFFERENTRY_FLAGS = 1; + // + // =========================================================================== + xdr["const"]("MASK_OFFERENTRY_FLAGS", 1); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("OfferEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct OfferEntry + // { + // AccountID sellerID; + // int64 offerID; + // Asset selling; // A + // Asset buying; // B + // int64 amount; // amount of A + // + // /* price for this offer: + // price of A in terms of B + // price=AmountB/AmountA=priceNumerator/priceDenominator + // price is after fees + // */ + // Price price; + // uint32 flags; // see OfferEntryFlags + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("OfferEntry", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")], ["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("OfferEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("DataEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct DataEntry + // { + // AccountID accountID; // account this data belongs to + // string64 dataName; + // DataValue dataValue; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("DataEntry", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")], ["dataValue", xdr.lookup("DataValue")], ["ext", xdr.lookup("DataEntryExt")]]); + + // === xdr source ============================================================ + // + // enum ClaimPredicateType + // { + // CLAIM_PREDICATE_UNCONDITIONAL = 0, + // CLAIM_PREDICATE_AND = 1, + // CLAIM_PREDICATE_OR = 2, + // CLAIM_PREDICATE_NOT = 3, + // CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME = 4, + // CLAIM_PREDICATE_BEFORE_RELATIVE_TIME = 5 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimPredicateType", { + claimPredicateUnconditional: 0, + claimPredicateAnd: 1, + claimPredicateOr: 2, + claimPredicateNot: 3, + claimPredicateBeforeAbsoluteTime: 4, + claimPredicateBeforeRelativeTime: 5 + }); + + // === xdr source ============================================================ + // + // union ClaimPredicate switch (ClaimPredicateType type) + // { + // case CLAIM_PREDICATE_UNCONDITIONAL: + // void; + // case CLAIM_PREDICATE_AND: + // ClaimPredicate andPredicates<2>; + // case CLAIM_PREDICATE_OR: + // ClaimPredicate orPredicates<2>; + // case CLAIM_PREDICATE_NOT: + // ClaimPredicate* notPredicate; + // case CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME: + // int64 absBefore; // Predicate will be true if closeTime < absBefore + // case CLAIM_PREDICATE_BEFORE_RELATIVE_TIME: + // int64 relBefore; // Seconds since closeTime of the ledger in which the + // // ClaimableBalanceEntry was created + // }; + // + // =========================================================================== + xdr.union("ClaimPredicate", { + switchOn: xdr.lookup("ClaimPredicateType"), + switchName: "type", + switches: [["claimPredicateUnconditional", xdr["void"]()], ["claimPredicateAnd", "andPredicates"], ["claimPredicateOr", "orPredicates"], ["claimPredicateNot", "notPredicate"], ["claimPredicateBeforeAbsoluteTime", "absBefore"], ["claimPredicateBeforeRelativeTime", "relBefore"]], + arms: { + andPredicates: xdr.varArray(xdr.lookup("ClaimPredicate"), 2), + orPredicates: xdr.varArray(xdr.lookup("ClaimPredicate"), 2), + notPredicate: xdr.option(xdr.lookup("ClaimPredicate")), + absBefore: xdr.lookup("Int64"), + relBefore: xdr.lookup("Int64") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimantType + // { + // CLAIMANT_TYPE_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimantType", { + claimantTypeV0: 0 + }); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID destination; // The account that can use this condition + // ClaimPredicate predicate; // Claimable if predicate is true + // } + // + // =========================================================================== + xdr.struct("ClaimantV0", [["destination", xdr.lookup("AccountId")], ["predicate", xdr.lookup("ClaimPredicate")]]); + + // === xdr source ============================================================ + // + // union Claimant switch (ClaimantType type) + // { + // case CLAIMANT_TYPE_V0: + // struct + // { + // AccountID destination; // The account that can use this condition + // ClaimPredicate predicate; // Claimable if predicate is true + // } v0; + // }; + // + // =========================================================================== + xdr.union("Claimant", { + switchOn: xdr.lookup("ClaimantType"), + switchName: "type", + switches: [["claimantTypeV0", "v0"]], + arms: { + v0: xdr.lookup("ClaimantV0") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimableBalanceIDType + // { + // CLAIMABLE_BALANCE_ID_TYPE_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimableBalanceIdType", { + claimableBalanceIdTypeV0: 0 + }); + + // === xdr source ============================================================ + // + // union ClaimableBalanceID switch (ClaimableBalanceIDType type) + // { + // case CLAIMABLE_BALANCE_ID_TYPE_V0: + // Hash v0; + // }; + // + // =========================================================================== + xdr.union("ClaimableBalanceId", { + switchOn: xdr.lookup("ClaimableBalanceIdType"), + switchName: "type", + switches: [["claimableBalanceIdTypeV0", "v0"]], + arms: { + v0: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimableBalanceFlags + // { + // // If set, the issuer account of the asset held by the claimable balance may + // // clawback the claimable balance + // CLAIMABLE_BALANCE_CLAWBACK_ENABLED_FLAG = 0x1 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimableBalanceFlags", { + claimableBalanceClawbackEnabledFlag: 1 + }); + + // === xdr source ============================================================ + // + // const MASK_CLAIMABLE_BALANCE_FLAGS = 0x1; + // + // =========================================================================== + xdr["const"]("MASK_CLAIMABLE_BALANCE_FLAGS", 0x1); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("ClaimableBalanceEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct ClaimableBalanceEntryExtensionV1 + // { + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // + // uint32 flags; // see ClaimableBalanceFlags + // }; + // + // =========================================================================== + xdr.struct("ClaimableBalanceEntryExtensionV1", [["ext", xdr.lookup("ClaimableBalanceEntryExtensionV1Ext")], ["flags", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ClaimableBalanceEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("ClaimableBalanceEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("ClaimableBalanceEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct ClaimableBalanceEntry + // { + // // Unique identifier for this ClaimableBalanceEntry + // ClaimableBalanceID balanceID; + // + // // List of claimants with associated predicate + // Claimant claimants<10>; + // + // // Any asset including native + // Asset asset; + // + // // Amount of asset + // int64 amount; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ClaimableBalanceEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("ClaimableBalanceEntry", [["balanceId", xdr.lookup("ClaimableBalanceId")], ["claimants", xdr.varArray(xdr.lookup("Claimant"), 10)], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["ext", xdr.lookup("ClaimableBalanceEntryExt")]]); + + // === xdr source ============================================================ + // + // struct LiquidityPoolConstantProductParameters + // { + // Asset assetA; // assetA < assetB + // Asset assetB; + // int32 fee; // Fee is in basis points, so the actual rate is (fee/100)% + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolConstantProductParameters", [["assetA", xdr.lookup("Asset")], ["assetB", xdr.lookup("Asset")], ["fee", xdr.lookup("Int32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } + // + // =========================================================================== + xdr.struct("LiquidityPoolEntryConstantProduct", [["params", xdr.lookup("LiquidityPoolConstantProductParameters")], ["reserveA", xdr.lookup("Int64")], ["reserveB", xdr.lookup("Int64")], ["totalPoolShares", xdr.lookup("Int64")], ["poolSharesTrustLineCount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } constantProduct; + // } + // + // =========================================================================== + xdr.union("LiquidityPoolEntryBody", { + switchOn: xdr.lookup("LiquidityPoolType"), + switchName: "type", + switches: [["liquidityPoolConstantProduct", "constantProduct"]], + arms: { + constantProduct: xdr.lookup("LiquidityPoolEntryConstantProduct") + } + }); + + // === xdr source ============================================================ + // + // struct LiquidityPoolEntry + // { + // PoolID liquidityPoolID; + // + // union switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } constantProduct; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolEntry", [["liquidityPoolId", xdr.lookup("PoolId")], ["body", xdr.lookup("LiquidityPoolEntryBody")]]); + + // === xdr source ============================================================ + // + // enum ContractDataDurability { + // TEMPORARY = 0, + // PERSISTENT = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractDataDurability", { + temporary: 0, + persistent: 1 + }); + + // === xdr source ============================================================ + // + // struct ContractDataEntry { + // ExtensionPoint ext; + // + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // SCVal val; + // }; + // + // =========================================================================== + xdr.struct("ContractDataEntry", [["ext", xdr.lookup("ExtensionPoint")], ["contract", xdr.lookup("ScAddress")], ["key", xdr.lookup("ScVal")], ["durability", xdr.lookup("ContractDataDurability")], ["val", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // struct ContractCodeCostInputs { + // ExtensionPoint ext; + // uint32 nInstructions; + // uint32 nFunctions; + // uint32 nGlobals; + // uint32 nTableEntries; + // uint32 nTypes; + // uint32 nDataSegments; + // uint32 nElemSegments; + // uint32 nImports; + // uint32 nExports; + // uint32 nDataSegmentBytes; + // }; + // + // =========================================================================== + xdr.struct("ContractCodeCostInputs", [["ext", xdr.lookup("ExtensionPoint")], ["nInstructions", xdr.lookup("Uint32")], ["nFunctions", xdr.lookup("Uint32")], ["nGlobals", xdr.lookup("Uint32")], ["nTableEntries", xdr.lookup("Uint32")], ["nTypes", xdr.lookup("Uint32")], ["nDataSegments", xdr.lookup("Uint32")], ["nElemSegments", xdr.lookup("Uint32")], ["nImports", xdr.lookup("Uint32")], ["nExports", xdr.lookup("Uint32")], ["nDataSegmentBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } + // + // =========================================================================== + xdr.struct("ContractCodeEntryV1", [["ext", xdr.lookup("ExtensionPoint")], ["costInputs", xdr.lookup("ContractCodeCostInputs")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } v1; + // } + // + // =========================================================================== + xdr.union("ContractCodeEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("ContractCodeEntryV1") + } + }); + + // === xdr source ============================================================ + // + // struct ContractCodeEntry { + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } v1; + // } ext; + // + // Hash hash; + // opaque code<>; + // }; + // + // =========================================================================== + xdr.struct("ContractCodeEntry", [["ext", xdr.lookup("ContractCodeEntryExt")], ["hash", xdr.lookup("Hash")], ["code", xdr.varOpaque()]]); + + // === xdr source ============================================================ + // + // struct TTLEntry { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // uint32 liveUntilLedgerSeq; + // }; + // + // =========================================================================== + xdr.struct("TtlEntry", [["keyHash", xdr.lookup("Hash")], ["liveUntilLedgerSeq", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerEntryExtensionV1 + // { + // SponsorshipDescriptor sponsoringID; + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerEntryExtensionV1", [["sponsoringId", xdr.lookup("SponsorshipDescriptor")], ["ext", xdr.lookup("LedgerEntryExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (LedgerEntryType type) + // { + // case ACCOUNT: + // AccountEntry account; + // case TRUSTLINE: + // TrustLineEntry trustLine; + // case OFFER: + // OfferEntry offer; + // case DATA: + // DataEntry data; + // case CLAIMABLE_BALANCE: + // ClaimableBalanceEntry claimableBalance; + // case LIQUIDITY_POOL: + // LiquidityPoolEntry liquidityPool; + // case CONTRACT_DATA: + // ContractDataEntry contractData; + // case CONTRACT_CODE: + // ContractCodeEntry contractCode; + // case CONFIG_SETTING: + // ConfigSettingEntry configSetting; + // case TTL: + // TTLEntry ttl; + // } + // + // =========================================================================== + xdr.union("LedgerEntryData", { + switchOn: xdr.lookup("LedgerEntryType"), + switchName: "type", + switches: [["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["data", "data"], ["claimableBalance", "claimableBalance"], ["liquidityPool", "liquidityPool"], ["contractData", "contractData"], ["contractCode", "contractCode"], ["configSetting", "configSetting"], ["ttl", "ttl"]], + arms: { + account: xdr.lookup("AccountEntry"), + trustLine: xdr.lookup("TrustLineEntry"), + offer: xdr.lookup("OfferEntry"), + data: xdr.lookup("DataEntry"), + claimableBalance: xdr.lookup("ClaimableBalanceEntry"), + liquidityPool: xdr.lookup("LiquidityPoolEntry"), + contractData: xdr.lookup("ContractDataEntry"), + contractCode: xdr.lookup("ContractCodeEntry"), + configSetting: xdr.lookup("ConfigSettingEntry"), + ttl: xdr.lookup("TtlEntry") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("LedgerEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerEntry + // { + // uint32 lastModifiedLedgerSeq; // ledger the LedgerEntry was last changed + // + // union switch (LedgerEntryType type) + // { + // case ACCOUNT: + // AccountEntry account; + // case TRUSTLINE: + // TrustLineEntry trustLine; + // case OFFER: + // OfferEntry offer; + // case DATA: + // DataEntry data; + // case CLAIMABLE_BALANCE: + // ClaimableBalanceEntry claimableBalance; + // case LIQUIDITY_POOL: + // LiquidityPoolEntry liquidityPool; + // case CONTRACT_DATA: + // ContractDataEntry contractData; + // case CONTRACT_CODE: + // ContractCodeEntry contractCode; + // case CONFIG_SETTING: + // ConfigSettingEntry configSetting; + // case TTL: + // TTLEntry ttl; + // } + // data; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerEntry", [["lastModifiedLedgerSeq", xdr.lookup("Uint32")], ["data", xdr.lookup("LedgerEntryData")], ["ext", xdr.lookup("LedgerEntryExt")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyAccount", [["accountId", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // TrustLineAsset asset; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyTrustLine", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("TrustLineAsset")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sellerID; + // int64 offerID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyOffer", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // string64 dataName; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyData", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimableBalanceID balanceID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyClaimableBalance", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // PoolID liquidityPoolID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyLiquidityPool", [["liquidityPoolId", xdr.lookup("PoolId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyContractData", [["contract", xdr.lookup("ScAddress")], ["key", xdr.lookup("ScVal")], ["durability", xdr.lookup("ContractDataDurability")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash hash; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyContractCode", [["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ConfigSettingID configSettingID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyConfigSetting", [["configSettingId", xdr.lookup("ConfigSettingId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyTtl", [["keyHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union LedgerKey switch (LedgerEntryType type) + // { + // case ACCOUNT: + // struct + // { + // AccountID accountID; + // } account; + // + // case TRUSTLINE: + // struct + // { + // AccountID accountID; + // TrustLineAsset asset; + // } trustLine; + // + // case OFFER: + // struct + // { + // AccountID sellerID; + // int64 offerID; + // } offer; + // + // case DATA: + // struct + // { + // AccountID accountID; + // string64 dataName; + // } data; + // + // case CLAIMABLE_BALANCE: + // struct + // { + // ClaimableBalanceID balanceID; + // } claimableBalance; + // + // case LIQUIDITY_POOL: + // struct + // { + // PoolID liquidityPoolID; + // } liquidityPool; + // case CONTRACT_DATA: + // struct + // { + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // } contractData; + // case CONTRACT_CODE: + // struct + // { + // Hash hash; + // } contractCode; + // case CONFIG_SETTING: + // struct + // { + // ConfigSettingID configSettingID; + // } configSetting; + // case TTL: + // struct + // { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // } ttl; + // }; + // + // =========================================================================== + xdr.union("LedgerKey", { + switchOn: xdr.lookup("LedgerEntryType"), + switchName: "type", + switches: [["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["data", "data"], ["claimableBalance", "claimableBalance"], ["liquidityPool", "liquidityPool"], ["contractData", "contractData"], ["contractCode", "contractCode"], ["configSetting", "configSetting"], ["ttl", "ttl"]], + arms: { + account: xdr.lookup("LedgerKeyAccount"), + trustLine: xdr.lookup("LedgerKeyTrustLine"), + offer: xdr.lookup("LedgerKeyOffer"), + data: xdr.lookup("LedgerKeyData"), + claimableBalance: xdr.lookup("LedgerKeyClaimableBalance"), + liquidityPool: xdr.lookup("LedgerKeyLiquidityPool"), + contractData: xdr.lookup("LedgerKeyContractData"), + contractCode: xdr.lookup("LedgerKeyContractCode"), + configSetting: xdr.lookup("LedgerKeyConfigSetting"), + ttl: xdr.lookup("LedgerKeyTtl") + } + }); + + // === xdr source ============================================================ + // + // enum EnvelopeType + // { + // ENVELOPE_TYPE_TX_V0 = 0, + // ENVELOPE_TYPE_SCP = 1, + // ENVELOPE_TYPE_TX = 2, + // ENVELOPE_TYPE_AUTH = 3, + // ENVELOPE_TYPE_SCPVALUE = 4, + // ENVELOPE_TYPE_TX_FEE_BUMP = 5, + // ENVELOPE_TYPE_OP_ID = 6, + // ENVELOPE_TYPE_POOL_REVOKE_OP_ID = 7, + // ENVELOPE_TYPE_CONTRACT_ID = 8, + // ENVELOPE_TYPE_SOROBAN_AUTHORIZATION = 9 + // }; + // + // =========================================================================== + xdr["enum"]("EnvelopeType", { + envelopeTypeTxV0: 0, + envelopeTypeScp: 1, + envelopeTypeTx: 2, + envelopeTypeAuth: 3, + envelopeTypeScpvalue: 4, + envelopeTypeTxFeeBump: 5, + envelopeTypeOpId: 6, + envelopeTypePoolRevokeOpId: 7, + envelopeTypeContractId: 8, + envelopeTypeSorobanAuthorization: 9 + }); + + // === xdr source ============================================================ + // + // enum BucketListType + // { + // LIVE = 0, + // HOT_ARCHIVE = 1, + // COLD_ARCHIVE = 2 + // }; + // + // =========================================================================== + xdr["enum"]("BucketListType", { + live: 0, + hotArchive: 1, + coldArchive: 2 + }); + + // === xdr source ============================================================ + // + // enum BucketEntryType + // { + // METAENTRY = + // -1, // At-and-after protocol 11: bucket metadata, should come first. + // LIVEENTRY = 0, // Before protocol 11: created-or-updated; + // // At-and-after protocol 11: only updated. + // DEADENTRY = 1, + // INITENTRY = 2 // At-and-after protocol 11: only created. + // }; + // + // =========================================================================== + xdr["enum"]("BucketEntryType", { + metaentry: -1, + liveentry: 0, + deadentry: 1, + initentry: 2 + }); + + // === xdr source ============================================================ + // + // enum HotArchiveBucketEntryType + // { + // HOT_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first. + // HOT_ARCHIVE_ARCHIVED = 0, // Entry is Archived + // HOT_ARCHIVE_LIVE = 1, // Entry was previously HOT_ARCHIVE_ARCHIVED, or HOT_ARCHIVE_DELETED, but + // // has been added back to the live BucketList. + // // Does not need to be persisted. + // HOT_ARCHIVE_DELETED = 2 // Entry deleted (Note: must be persisted in archive) + // }; + // + // =========================================================================== + xdr["enum"]("HotArchiveBucketEntryType", { + hotArchiveMetaentry: -1, + hotArchiveArchived: 0, + hotArchiveLive: 1, + hotArchiveDeleted: 2 + }); + + // === xdr source ============================================================ + // + // enum ColdArchiveBucketEntryType + // { + // COLD_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first. + // COLD_ARCHIVE_ARCHIVED_LEAF = 0, // Full LedgerEntry that was archived during the epoch + // COLD_ARCHIVE_DELETED_LEAF = 1, // LedgerKey that was deleted during the epoch + // COLD_ARCHIVE_BOUNDARY_LEAF = 2, // Dummy leaf representing low/high bound + // COLD_ARCHIVE_HASH = 3 // Intermediary Merkle hash entry + // }; + // + // =========================================================================== + xdr["enum"]("ColdArchiveBucketEntryType", { + coldArchiveMetaentry: -1, + coldArchiveArchivedLeaf: 0, + coldArchiveDeletedLeaf: 1, + coldArchiveBoundaryLeaf: 2, + coldArchiveHash: 3 + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // BucketListType bucketListType; + // } + // + // =========================================================================== + xdr.union("BucketMetadataExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "bucketListType"]], + arms: { + bucketListType: xdr.lookup("BucketListType") + } + }); + + // === xdr source ============================================================ + // + // struct BucketMetadata + // { + // // Indicates the protocol version used to create / merge this bucket. + // uint32 ledgerVersion; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // BucketListType bucketListType; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("BucketMetadata", [["ledgerVersion", xdr.lookup("Uint32")], ["ext", xdr.lookup("BucketMetadataExt")]]); + + // === xdr source ============================================================ + // + // union BucketEntry switch (BucketEntryType type) + // { + // case LIVEENTRY: + // case INITENTRY: + // LedgerEntry liveEntry; + // + // case DEADENTRY: + // LedgerKey deadEntry; + // case METAENTRY: + // BucketMetadata metaEntry; + // }; + // + // =========================================================================== + xdr.union("BucketEntry", { + switchOn: xdr.lookup("BucketEntryType"), + switchName: "type", + switches: [["liveentry", "liveEntry"], ["initentry", "liveEntry"], ["deadentry", "deadEntry"], ["metaentry", "metaEntry"]], + arms: { + liveEntry: xdr.lookup("LedgerEntry"), + deadEntry: xdr.lookup("LedgerKey"), + metaEntry: xdr.lookup("BucketMetadata") + } + }); + + // === xdr source ============================================================ + // + // union HotArchiveBucketEntry switch (HotArchiveBucketEntryType type) + // { + // case HOT_ARCHIVE_ARCHIVED: + // LedgerEntry archivedEntry; + // + // case HOT_ARCHIVE_LIVE: + // case HOT_ARCHIVE_DELETED: + // LedgerKey key; + // case HOT_ARCHIVE_METAENTRY: + // BucketMetadata metaEntry; + // }; + // + // =========================================================================== + xdr.union("HotArchiveBucketEntry", { + switchOn: xdr.lookup("HotArchiveBucketEntryType"), + switchName: "type", + switches: [["hotArchiveArchived", "archivedEntry"], ["hotArchiveLive", "key"], ["hotArchiveDeleted", "key"], ["hotArchiveMetaentry", "metaEntry"]], + arms: { + archivedEntry: xdr.lookup("LedgerEntry"), + key: xdr.lookup("LedgerKey"), + metaEntry: xdr.lookup("BucketMetadata") + } + }); + + // === xdr source ============================================================ + // + // struct ColdArchiveArchivedLeaf + // { + // uint32 index; + // LedgerEntry archivedEntry; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveArchivedLeaf", [["index", xdr.lookup("Uint32")], ["archivedEntry", xdr.lookup("LedgerEntry")]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveDeletedLeaf + // { + // uint32 index; + // LedgerKey deletedKey; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveDeletedLeaf", [["index", xdr.lookup("Uint32")], ["deletedKey", xdr.lookup("LedgerKey")]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveBoundaryLeaf + // { + // uint32 index; + // bool isLowerBound; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveBoundaryLeaf", [["index", xdr.lookup("Uint32")], ["isLowerBound", xdr.bool()]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveHashEntry + // { + // uint32 index; + // uint32 level; + // Hash hash; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveHashEntry", [["index", xdr.lookup("Uint32")], ["level", xdr.lookup("Uint32")], ["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union ColdArchiveBucketEntry switch (ColdArchiveBucketEntryType type) + // { + // case COLD_ARCHIVE_METAENTRY: + // BucketMetadata metaEntry; + // case COLD_ARCHIVE_ARCHIVED_LEAF: + // ColdArchiveArchivedLeaf archivedLeaf; + // case COLD_ARCHIVE_DELETED_LEAF: + // ColdArchiveDeletedLeaf deletedLeaf; + // case COLD_ARCHIVE_BOUNDARY_LEAF: + // ColdArchiveBoundaryLeaf boundaryLeaf; + // case COLD_ARCHIVE_HASH: + // ColdArchiveHashEntry hashEntry; + // }; + // + // =========================================================================== + xdr.union("ColdArchiveBucketEntry", { + switchOn: xdr.lookup("ColdArchiveBucketEntryType"), + switchName: "type", + switches: [["coldArchiveMetaentry", "metaEntry"], ["coldArchiveArchivedLeaf", "archivedLeaf"], ["coldArchiveDeletedLeaf", "deletedLeaf"], ["coldArchiveBoundaryLeaf", "boundaryLeaf"], ["coldArchiveHash", "hashEntry"]], + arms: { + metaEntry: xdr.lookup("BucketMetadata"), + archivedLeaf: xdr.lookup("ColdArchiveArchivedLeaf"), + deletedLeaf: xdr.lookup("ColdArchiveDeletedLeaf"), + boundaryLeaf: xdr.lookup("ColdArchiveBoundaryLeaf"), + hashEntry: xdr.lookup("ColdArchiveHashEntry") + } + }); + + // === xdr source ============================================================ + // + // typedef opaque UpgradeType<128>; + // + // =========================================================================== + xdr.typedef("UpgradeType", xdr.varOpaque(128)); + + // === xdr source ============================================================ + // + // enum StellarValueType + // { + // STELLAR_VALUE_BASIC = 0, + // STELLAR_VALUE_SIGNED = 1 + // }; + // + // =========================================================================== + xdr["enum"]("StellarValueType", { + stellarValueBasic: 0, + stellarValueSigned: 1 + }); + + // === xdr source ============================================================ + // + // struct LedgerCloseValueSignature + // { + // NodeID nodeID; // which node introduced the value + // Signature signature; // nodeID's signature + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseValueSignature", [["nodeId", xdr.lookup("NodeId")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // union switch (StellarValueType v) + // { + // case STELLAR_VALUE_BASIC: + // void; + // case STELLAR_VALUE_SIGNED: + // LedgerCloseValueSignature lcValueSignature; + // } + // + // =========================================================================== + xdr.union("StellarValueExt", { + switchOn: xdr.lookup("StellarValueType"), + switchName: "v", + switches: [["stellarValueBasic", xdr["void"]()], ["stellarValueSigned", "lcValueSignature"]], + arms: { + lcValueSignature: xdr.lookup("LedgerCloseValueSignature") + } + }); + + // === xdr source ============================================================ + // + // struct StellarValue + // { + // Hash txSetHash; // transaction set to apply to previous ledger + // TimePoint closeTime; // network close time + // + // // upgrades to apply to the previous ledger (usually empty) + // // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop + // // unknown steps during consensus if needed. + // // see notes below on 'LedgerUpgrade' for more detail + // // max size is dictated by number of upgrade types (+ room for future) + // UpgradeType upgrades<6>; + // + // // reserved for future use + // union switch (StellarValueType v) + // { + // case STELLAR_VALUE_BASIC: + // void; + // case STELLAR_VALUE_SIGNED: + // LedgerCloseValueSignature lcValueSignature; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("StellarValue", [["txSetHash", xdr.lookup("Hash")], ["closeTime", xdr.lookup("TimePoint")], ["upgrades", xdr.varArray(xdr.lookup("UpgradeType"), 6)], ["ext", xdr.lookup("StellarValueExt")]]); + + // === xdr source ============================================================ + // + // const MASK_LEDGER_HEADER_FLAGS = 0x7; + // + // =========================================================================== + xdr["const"]("MASK_LEDGER_HEADER_FLAGS", 0x7); + + // === xdr source ============================================================ + // + // enum LedgerHeaderFlags + // { + // DISABLE_LIQUIDITY_POOL_TRADING_FLAG = 0x1, + // DISABLE_LIQUIDITY_POOL_DEPOSIT_FLAG = 0x2, + // DISABLE_LIQUIDITY_POOL_WITHDRAWAL_FLAG = 0x4 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerHeaderFlags", { + disableLiquidityPoolTradingFlag: 1, + disableLiquidityPoolDepositFlag: 2, + disableLiquidityPoolWithdrawalFlag: 4 + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerHeaderExtensionV1 + // { + // uint32 flags; // LedgerHeaderFlags + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeaderExtensionV1", [["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("LedgerHeaderExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerHeaderExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerHeaderExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerHeader + // { + // uint32 ledgerVersion; // the protocol version of the ledger + // Hash previousLedgerHash; // hash of the previous ledger header + // StellarValue scpValue; // what consensus agreed to + // Hash txSetResultHash; // the TransactionResultSet that led to this ledger + // Hash bucketListHash; // hash of the ledger state + // + // uint32 ledgerSeq; // sequence number of this ledger + // + // int64 totalCoins; // total number of stroops in existence. + // // 10,000,000 stroops in 1 XLM + // + // int64 feePool; // fees burned since last inflation run + // uint32 inflationSeq; // inflation sequence number + // + // uint64 idPool; // last used global ID, used for generating objects + // + // uint32 baseFee; // base fee per operation in stroops + // uint32 baseReserve; // account base reserve in stroops + // + // uint32 maxTxSetSize; // maximum size a transaction set can be + // + // Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back + // // in time without walking the chain back ledger by ledger + // // each slot contains the oldest ledger that is mod of + // // either 50 5000 50000 or 500000 depending on index + // // skipList[0] mod(50), skipList[1] mod(5000), etc + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerHeaderExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeader", [["ledgerVersion", xdr.lookup("Uint32")], ["previousLedgerHash", xdr.lookup("Hash")], ["scpValue", xdr.lookup("StellarValue")], ["txSetResultHash", xdr.lookup("Hash")], ["bucketListHash", xdr.lookup("Hash")], ["ledgerSeq", xdr.lookup("Uint32")], ["totalCoins", xdr.lookup("Int64")], ["feePool", xdr.lookup("Int64")], ["inflationSeq", xdr.lookup("Uint32")], ["idPool", xdr.lookup("Uint64")], ["baseFee", xdr.lookup("Uint32")], ["baseReserve", xdr.lookup("Uint32")], ["maxTxSetSize", xdr.lookup("Uint32")], ["skipList", xdr.array(xdr.lookup("Hash"), 4)], ["ext", xdr.lookup("LedgerHeaderExt")]]); + + // === xdr source ============================================================ + // + // enum LedgerUpgradeType + // { + // LEDGER_UPGRADE_VERSION = 1, + // LEDGER_UPGRADE_BASE_FEE = 2, + // LEDGER_UPGRADE_MAX_TX_SET_SIZE = 3, + // LEDGER_UPGRADE_BASE_RESERVE = 4, + // LEDGER_UPGRADE_FLAGS = 5, + // LEDGER_UPGRADE_CONFIG = 6, + // LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE = 7 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerUpgradeType", { + ledgerUpgradeVersion: 1, + ledgerUpgradeBaseFee: 2, + ledgerUpgradeMaxTxSetSize: 3, + ledgerUpgradeBaseReserve: 4, + ledgerUpgradeFlags: 5, + ledgerUpgradeConfig: 6, + ledgerUpgradeMaxSorobanTxSetSize: 7 + }); + + // === xdr source ============================================================ + // + // struct ConfigUpgradeSetKey { + // Hash contractID; + // Hash contentHash; + // }; + // + // =========================================================================== + xdr.struct("ConfigUpgradeSetKey", [["contractId", xdr.lookup("Hash")], ["contentHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union LedgerUpgrade switch (LedgerUpgradeType type) + // { + // case LEDGER_UPGRADE_VERSION: + // uint32 newLedgerVersion; // update ledgerVersion + // case LEDGER_UPGRADE_BASE_FEE: + // uint32 newBaseFee; // update baseFee + // case LEDGER_UPGRADE_MAX_TX_SET_SIZE: + // uint32 newMaxTxSetSize; // update maxTxSetSize + // case LEDGER_UPGRADE_BASE_RESERVE: + // uint32 newBaseReserve; // update baseReserve + // case LEDGER_UPGRADE_FLAGS: + // uint32 newFlags; // update flags + // case LEDGER_UPGRADE_CONFIG: + // // Update arbitrary `ConfigSetting` entries identified by the key. + // ConfigUpgradeSetKey newConfig; + // case LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE: + // // Update ConfigSettingContractExecutionLanesV0.ledgerMaxTxCount without + // // using `LEDGER_UPGRADE_CONFIG`. + // uint32 newMaxSorobanTxSetSize; + // }; + // + // =========================================================================== + xdr.union("LedgerUpgrade", { + switchOn: xdr.lookup("LedgerUpgradeType"), + switchName: "type", + switches: [["ledgerUpgradeVersion", "newLedgerVersion"], ["ledgerUpgradeBaseFee", "newBaseFee"], ["ledgerUpgradeMaxTxSetSize", "newMaxTxSetSize"], ["ledgerUpgradeBaseReserve", "newBaseReserve"], ["ledgerUpgradeFlags", "newFlags"], ["ledgerUpgradeConfig", "newConfig"], ["ledgerUpgradeMaxSorobanTxSetSize", "newMaxSorobanTxSetSize"]], + arms: { + newLedgerVersion: xdr.lookup("Uint32"), + newBaseFee: xdr.lookup("Uint32"), + newMaxTxSetSize: xdr.lookup("Uint32"), + newBaseReserve: xdr.lookup("Uint32"), + newFlags: xdr.lookup("Uint32"), + newConfig: xdr.lookup("ConfigUpgradeSetKey"), + newMaxSorobanTxSetSize: xdr.lookup("Uint32") + } + }); + + // === xdr source ============================================================ + // + // struct ConfigUpgradeSet { + // ConfigSettingEntry updatedEntry<>; + // }; + // + // =========================================================================== + xdr.struct("ConfigUpgradeSet", [["updatedEntry", xdr.varArray(xdr.lookup("ConfigSettingEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // enum TxSetComponentType + // { + // // txs with effective fee <= bid derived from a base fee (if any). + // // If base fee is not specified, no discount is applied. + // TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE = 0 + // }; + // + // =========================================================================== + xdr["enum"]("TxSetComponentType", { + txsetCompTxsMaybeDiscountedFee: 0 + }); + + // === xdr source ============================================================ + // + // struct + // { + // int64* baseFee; + // TransactionEnvelope txs<>; + // } + // + // =========================================================================== + xdr.struct("TxSetComponentTxsMaybeDiscountedFee", [["baseFee", xdr.option(xdr.lookup("Int64"))], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union TxSetComponent switch (TxSetComponentType type) + // { + // case TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE: + // struct + // { + // int64* baseFee; + // TransactionEnvelope txs<>; + // } txsMaybeDiscountedFee; + // }; + // + // =========================================================================== + xdr.union("TxSetComponent", { + switchOn: xdr.lookup("TxSetComponentType"), + switchName: "type", + switches: [["txsetCompTxsMaybeDiscountedFee", "txsMaybeDiscountedFee"]], + arms: { + txsMaybeDiscountedFee: xdr.lookup("TxSetComponentTxsMaybeDiscountedFee") + } + }); + + // === xdr source ============================================================ + // + // union TransactionPhase switch (int v) + // { + // case 0: + // TxSetComponent v0Components<>; + // }; + // + // =========================================================================== + xdr.union("TransactionPhase", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0Components"]], + arms: { + v0Components: xdr.varArray(xdr.lookup("TxSetComponent"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // struct TransactionSet + // { + // Hash previousLedgerHash; + // TransactionEnvelope txs<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionSet", [["previousLedgerHash", xdr.lookup("Hash")], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionSetV1 + // { + // Hash previousLedgerHash; + // TransactionPhase phases<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionSetV1", [["previousLedgerHash", xdr.lookup("Hash")], ["phases", xdr.varArray(xdr.lookup("TransactionPhase"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union GeneralizedTransactionSet switch (int v) + // { + // // We consider the legacy TransactionSet to be v0. + // case 1: + // TransactionSetV1 v1TxSet; + // }; + // + // =========================================================================== + xdr.union("GeneralizedTransactionSet", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[1, "v1TxSet"]], + arms: { + v1TxSet: xdr.lookup("TransactionSetV1") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionResultPair + // { + // Hash transactionHash; + // TransactionResult result; // result for the transaction + // }; + // + // =========================================================================== + xdr.struct("TransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("TransactionResult")]]); + + // === xdr source ============================================================ + // + // struct TransactionResultSet + // { + // TransactionResultPair results<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionResultSet", [["results", xdr.varArray(xdr.lookup("TransactionResultPair"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // GeneralizedTransactionSet generalizedTxSet; + // } + // + // =========================================================================== + xdr.union("TransactionHistoryEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "generalizedTxSet"]], + arms: { + generalizedTxSet: xdr.lookup("GeneralizedTransactionSet") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionHistoryEntry + // { + // uint32 ledgerSeq; + // TransactionSet txSet; + // + // // when v != 0, txSet must be empty + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // GeneralizedTransactionSet generalizedTxSet; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionHistoryEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txSet", xdr.lookup("TransactionSet")], ["ext", xdr.lookup("TransactionHistoryEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionHistoryResultEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionHistoryResultEntry + // { + // uint32 ledgerSeq; + // TransactionResultSet txResultSet; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionHistoryResultEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txResultSet", xdr.lookup("TransactionResultSet")], ["ext", xdr.lookup("TransactionHistoryResultEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderHistoryEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerHeaderHistoryEntry + // { + // Hash hash; + // LedgerHeader header; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeaderHistoryEntry", [["hash", xdr.lookup("Hash")], ["header", xdr.lookup("LedgerHeader")], ["ext", xdr.lookup("LedgerHeaderHistoryEntryExt")]]); + + // === xdr source ============================================================ + // + // struct LedgerSCPMessages + // { + // uint32 ledgerSeq; + // SCPEnvelope messages<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerScpMessages", [["ledgerSeq", xdr.lookup("Uint32")], ["messages", xdr.varArray(xdr.lookup("ScpEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct SCPHistoryEntryV0 + // { + // SCPQuorumSet quorumSets<>; // additional quorum sets used by ledgerMessages + // LedgerSCPMessages ledgerMessages; + // }; + // + // =========================================================================== + xdr.struct("ScpHistoryEntryV0", [["quorumSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)], ["ledgerMessages", xdr.lookup("LedgerScpMessages")]]); + + // === xdr source ============================================================ + // + // union SCPHistoryEntry switch (int v) + // { + // case 0: + // SCPHistoryEntryV0 v0; + // }; + // + // =========================================================================== + xdr.union("ScpHistoryEntry", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("ScpHistoryEntryV0") + } + }); + + // === xdr source ============================================================ + // + // enum LedgerEntryChangeType + // { + // LEDGER_ENTRY_CREATED = 0, // entry was added to the ledger + // LEDGER_ENTRY_UPDATED = 1, // entry was modified in the ledger + // LEDGER_ENTRY_REMOVED = 2, // entry was removed from the ledger + // LEDGER_ENTRY_STATE = 3 // value of the entry + // }; + // + // =========================================================================== + xdr["enum"]("LedgerEntryChangeType", { + ledgerEntryCreated: 0, + ledgerEntryUpdated: 1, + ledgerEntryRemoved: 2, + ledgerEntryState: 3 + }); + + // === xdr source ============================================================ + // + // union LedgerEntryChange switch (LedgerEntryChangeType type) + // { + // case LEDGER_ENTRY_CREATED: + // LedgerEntry created; + // case LEDGER_ENTRY_UPDATED: + // LedgerEntry updated; + // case LEDGER_ENTRY_REMOVED: + // LedgerKey removed; + // case LEDGER_ENTRY_STATE: + // LedgerEntry state; + // }; + // + // =========================================================================== + xdr.union("LedgerEntryChange", { + switchOn: xdr.lookup("LedgerEntryChangeType"), + switchName: "type", + switches: [["ledgerEntryCreated", "created"], ["ledgerEntryUpdated", "updated"], ["ledgerEntryRemoved", "removed"], ["ledgerEntryState", "state"]], + arms: { + created: xdr.lookup("LedgerEntry"), + updated: xdr.lookup("LedgerEntry"), + removed: xdr.lookup("LedgerKey"), + state: xdr.lookup("LedgerEntry") + } + }); + + // === xdr source ============================================================ + // + // typedef LedgerEntryChange LedgerEntryChanges<>; + // + // =========================================================================== + xdr.typedef("LedgerEntryChanges", xdr.varArray(xdr.lookup("LedgerEntryChange"), 2147483647)); + + // === xdr source ============================================================ + // + // struct OperationMeta + // { + // LedgerEntryChanges changes; + // }; + // + // =========================================================================== + xdr.struct("OperationMeta", [["changes", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV1 + // { + // LedgerEntryChanges txChanges; // tx level changes if any + // OperationMeta operations<>; // meta for each operation + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV1", [["txChanges", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV2 + // { + // LedgerEntryChanges txChangesBefore; // tx level changes before operations + // // are applied if any + // OperationMeta operations<>; // meta for each operation + // LedgerEntryChanges txChangesAfter; // tx level changes after operations are + // // applied if any + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV2", [["txChangesBefore", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)], ["txChangesAfter", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // enum ContractEventType + // { + // SYSTEM = 0, + // CONTRACT = 1, + // DIAGNOSTIC = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ContractEventType", { + system: 0, + contract: 1, + diagnostic: 2 + }); + + // === xdr source ============================================================ + // + // struct + // { + // SCVal topics<>; + // SCVal data; + // } + // + // =========================================================================== + xdr.struct("ContractEventV0", [["topics", xdr.varArray(xdr.lookup("ScVal"), 2147483647)], ["data", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // struct + // { + // SCVal topics<>; + // SCVal data; + // } v0; + // } + // + // =========================================================================== + xdr.union("ContractEventBody", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("ContractEventV0") + } + }); + + // === xdr source ============================================================ + // + // struct ContractEvent + // { + // // We can use this to add more fields, or because it + // // is first, to change ContractEvent into a union. + // ExtensionPoint ext; + // + // Hash* contractID; + // ContractEventType type; + // + // union switch (int v) + // { + // case 0: + // struct + // { + // SCVal topics<>; + // SCVal data; + // } v0; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("ContractEvent", [["ext", xdr.lookup("ExtensionPoint")], ["contractId", xdr.option(xdr.lookup("Hash"))], ["type", xdr.lookup("ContractEventType")], ["body", xdr.lookup("ContractEventBody")]]); + + // === xdr source ============================================================ + // + // struct DiagnosticEvent + // { + // bool inSuccessfulContractCall; + // ContractEvent event; + // }; + // + // =========================================================================== + xdr.struct("DiagnosticEvent", [["inSuccessfulContractCall", xdr.bool()], ["event", xdr.lookup("ContractEvent")]]); + + // === xdr source ============================================================ + // + // typedef DiagnosticEvent DiagnosticEvents<>; + // + // =========================================================================== + xdr.typedef("DiagnosticEvents", xdr.varArray(xdr.lookup("DiagnosticEvent"), 2147483647)); + + // === xdr source ============================================================ + // + // struct SorobanTransactionMetaExtV1 + // { + // ExtensionPoint ext; + // + // // The following are the components of the overall Soroban resource fee + // // charged for the transaction. + // // The following relation holds: + // // `resourceFeeCharged = totalNonRefundableResourceFeeCharged + totalRefundableResourceFeeCharged` + // // where `resourceFeeCharged` is the overall fee charged for the + // // transaction. Also, `resourceFeeCharged` <= `sorobanData.resourceFee` + // // i.e.we never charge more than the declared resource fee. + // // The inclusion fee for charged the Soroban transaction can be found using + // // the following equation: + // // `result.feeCharged = resourceFeeCharged + inclusionFeeCharged`. + // + // // Total amount (in stroops) that has been charged for non-refundable + // // Soroban resources. + // // Non-refundable resources are charged based on the usage declared in + // // the transaction envelope (such as `instructions`, `readBytes` etc.) and + // // is charged regardless of the success of the transaction. + // int64 totalNonRefundableResourceFeeCharged; + // // Total amount (in stroops) that has been charged for refundable + // // Soroban resource fees. + // // Currently this comprises the rent fee (`rentFeeCharged`) and the + // // fee for the events and return value. + // // Refundable resources are charged based on the actual resources usage. + // // Since currently refundable resources are only used for the successful + // // transactions, this will be `0` for failed transactions. + // int64 totalRefundableResourceFeeCharged; + // // Amount (in stroops) that has been charged for rent. + // // This is a part of `totalNonRefundableResourceFeeCharged`. + // int64 rentFeeCharged; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionMetaExtV1", [["ext", xdr.lookup("ExtensionPoint")], ["totalNonRefundableResourceFeeCharged", xdr.lookup("Int64")], ["totalRefundableResourceFeeCharged", xdr.lookup("Int64")], ["rentFeeCharged", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union SorobanTransactionMetaExt switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionMetaExtV1 v1; + // }; + // + // =========================================================================== + xdr.union("SorobanTransactionMetaExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("SorobanTransactionMetaExtV1") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanTransactionMeta + // { + // SorobanTransactionMetaExt ext; + // + // ContractEvent events<>; // custom events populated by the + // // contracts themselves. + // SCVal returnValue; // return value of the host fn invocation + // + // // Diagnostics events that are not hashed. + // // This will contain all contract and diagnostic events. Even ones + // // that were emitted in a failed contract call. + // DiagnosticEvent diagnosticEvents<>; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionMeta", [["ext", xdr.lookup("SorobanTransactionMetaExt")], ["events", xdr.varArray(xdr.lookup("ContractEvent"), 2147483647)], ["returnValue", xdr.lookup("ScVal")], ["diagnosticEvents", xdr.varArray(xdr.lookup("DiagnosticEvent"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV3 + // { + // ExtensionPoint ext; + // + // LedgerEntryChanges txChangesBefore; // tx level changes before operations + // // are applied if any + // OperationMeta operations<>; // meta for each operation + // LedgerEntryChanges txChangesAfter; // tx level changes after operations are + // // applied if any + // SorobanTransactionMeta* sorobanMeta; // Soroban-specific meta (only for + // // Soroban transactions). + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV3", [["ext", xdr.lookup("ExtensionPoint")], ["txChangesBefore", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)], ["txChangesAfter", xdr.lookup("LedgerEntryChanges")], ["sorobanMeta", xdr.option(xdr.lookup("SorobanTransactionMeta"))]]); + + // === xdr source ============================================================ + // + // struct InvokeHostFunctionSuccessPreImage + // { + // SCVal returnValue; + // ContractEvent events<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeHostFunctionSuccessPreImage", [["returnValue", xdr.lookup("ScVal")], ["events", xdr.varArray(xdr.lookup("ContractEvent"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union TransactionMeta switch (int v) + // { + // case 0: + // OperationMeta operations<>; + // case 1: + // TransactionMetaV1 v1; + // case 2: + // TransactionMetaV2 v2; + // case 3: + // TransactionMetaV3 v3; + // }; + // + // =========================================================================== + xdr.union("TransactionMeta", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "operations"], [1, "v1"], [2, "v2"], [3, "v3"]], + arms: { + operations: xdr.varArray(xdr.lookup("OperationMeta"), 2147483647), + v1: xdr.lookup("TransactionMetaV1"), + v2: xdr.lookup("TransactionMetaV2"), + v3: xdr.lookup("TransactionMetaV3") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionResultMeta + // { + // TransactionResultPair result; + // LedgerEntryChanges feeProcessing; + // TransactionMeta txApplyProcessing; + // }; + // + // =========================================================================== + xdr.struct("TransactionResultMeta", [["result", xdr.lookup("TransactionResultPair")], ["feeProcessing", xdr.lookup("LedgerEntryChanges")], ["txApplyProcessing", xdr.lookup("TransactionMeta")]]); + + // === xdr source ============================================================ + // + // struct UpgradeEntryMeta + // { + // LedgerUpgrade upgrade; + // LedgerEntryChanges changes; + // }; + // + // =========================================================================== + xdr.struct("UpgradeEntryMeta", [["upgrade", xdr.lookup("LedgerUpgrade")], ["changes", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaV0 + // { + // LedgerHeaderHistoryEntry ledgerHeader; + // // NB: txSet is sorted in "Hash order" + // TransactionSet txSet; + // + // // NB: transactions are sorted in apply order here + // // fees for all transactions are processed first + // // followed by applying transactions + // TransactionResultMeta txProcessing<>; + // + // // upgrades are applied last + // UpgradeEntryMeta upgradesProcessing<>; + // + // // other misc information attached to the ledger close + // SCPHistoryEntry scpInfo<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaV0", [["ledgerHeader", xdr.lookup("LedgerHeaderHistoryEntry")], ["txSet", xdr.lookup("TransactionSet")], ["txProcessing", xdr.varArray(xdr.lookup("TransactionResultMeta"), 2147483647)], ["upgradesProcessing", xdr.varArray(xdr.lookup("UpgradeEntryMeta"), 2147483647)], ["scpInfo", xdr.varArray(xdr.lookup("ScpHistoryEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaExtV1 + // { + // ExtensionPoint ext; + // int64 sorobanFeeWrite1KB; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaExtV1", [["ext", xdr.lookup("ExtensionPoint")], ["sorobanFeeWrite1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union LedgerCloseMetaExt switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerCloseMetaExtV1 v1; + // }; + // + // =========================================================================== + xdr.union("LedgerCloseMetaExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerCloseMetaExtV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaV1 + // { + // LedgerCloseMetaExt ext; + // + // LedgerHeaderHistoryEntry ledgerHeader; + // + // GeneralizedTransactionSet txSet; + // + // // NB: transactions are sorted in apply order here + // // fees for all transactions are processed first + // // followed by applying transactions + // TransactionResultMeta txProcessing<>; + // + // // upgrades are applied last + // UpgradeEntryMeta upgradesProcessing<>; + // + // // other misc information attached to the ledger close + // SCPHistoryEntry scpInfo<>; + // + // // Size in bytes of BucketList, to support downstream + // // systems calculating storage fees correctly. + // uint64 totalByteSizeOfBucketList; + // + // // Temp keys that are being evicted at this ledger. + // LedgerKey evictedTemporaryLedgerKeys<>; + // + // // Archived restorable ledger entries that are being + // // evicted at this ledger. + // LedgerEntry evictedPersistentLedgerEntries<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaV1", [["ext", xdr.lookup("LedgerCloseMetaExt")], ["ledgerHeader", xdr.lookup("LedgerHeaderHistoryEntry")], ["txSet", xdr.lookup("GeneralizedTransactionSet")], ["txProcessing", xdr.varArray(xdr.lookup("TransactionResultMeta"), 2147483647)], ["upgradesProcessing", xdr.varArray(xdr.lookup("UpgradeEntryMeta"), 2147483647)], ["scpInfo", xdr.varArray(xdr.lookup("ScpHistoryEntry"), 2147483647)], ["totalByteSizeOfBucketList", xdr.lookup("Uint64")], ["evictedTemporaryLedgerKeys", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["evictedPersistentLedgerEntries", xdr.varArray(xdr.lookup("LedgerEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union LedgerCloseMeta switch (int v) + // { + // case 0: + // LedgerCloseMetaV0 v0; + // case 1: + // LedgerCloseMetaV1 v1; + // }; + // + // =========================================================================== + xdr.union("LedgerCloseMeta", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"], [1, "v1"]], + arms: { + v0: xdr.lookup("LedgerCloseMetaV0"), + v1: xdr.lookup("LedgerCloseMetaV1") + } + }); + + // === xdr source ============================================================ + // + // enum ErrorCode + // { + // ERR_MISC = 0, // Unspecific error + // ERR_DATA = 1, // Malformed data + // ERR_CONF = 2, // Misconfiguration error + // ERR_AUTH = 3, // Authentication failure + // ERR_LOAD = 4 // System overloaded + // }; + // + // =========================================================================== + xdr["enum"]("ErrorCode", { + errMisc: 0, + errData: 1, + errConf: 2, + errAuth: 3, + errLoad: 4 + }); + + // === xdr source ============================================================ + // + // struct Error + // { + // ErrorCode code; + // string msg<100>; + // }; + // + // =========================================================================== + xdr.struct("Error", [["code", xdr.lookup("ErrorCode")], ["msg", xdr.string(100)]]); + + // === xdr source ============================================================ + // + // struct SendMore + // { + // uint32 numMessages; + // }; + // + // =========================================================================== + xdr.struct("SendMore", [["numMessages", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SendMoreExtended + // { + // uint32 numMessages; + // uint32 numBytes; + // }; + // + // =========================================================================== + xdr.struct("SendMoreExtended", [["numMessages", xdr.lookup("Uint32")], ["numBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct AuthCert + // { + // Curve25519Public pubkey; + // uint64 expiration; + // Signature sig; + // }; + // + // =========================================================================== + xdr.struct("AuthCert", [["pubkey", xdr.lookup("Curve25519Public")], ["expiration", xdr.lookup("Uint64")], ["sig", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // struct Hello + // { + // uint32 ledgerVersion; + // uint32 overlayVersion; + // uint32 overlayMinVersion; + // Hash networkID; + // string versionStr<100>; + // int listeningPort; + // NodeID peerID; + // AuthCert cert; + // uint256 nonce; + // }; + // + // =========================================================================== + xdr.struct("Hello", [["ledgerVersion", xdr.lookup("Uint32")], ["overlayVersion", xdr.lookup("Uint32")], ["overlayMinVersion", xdr.lookup("Uint32")], ["networkId", xdr.lookup("Hash")], ["versionStr", xdr.string(100)], ["listeningPort", xdr["int"]()], ["peerId", xdr.lookup("NodeId")], ["cert", xdr.lookup("AuthCert")], ["nonce", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // const AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED = 200; + // + // =========================================================================== + xdr["const"]("AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED", 200); + + // === xdr source ============================================================ + // + // struct Auth + // { + // int flags; + // }; + // + // =========================================================================== + xdr.struct("Auth", [["flags", xdr["int"]()]]); + + // === xdr source ============================================================ + // + // enum IPAddrType + // { + // IPv4 = 0, + // IPv6 = 1 + // }; + // + // =========================================================================== + xdr["enum"]("IpAddrType", { + iPv4: 0, + iPv6: 1 + }); + + // === xdr source ============================================================ + // + // union switch (IPAddrType type) + // { + // case IPv4: + // opaque ipv4[4]; + // case IPv6: + // opaque ipv6[16]; + // } + // + // =========================================================================== + xdr.union("PeerAddressIp", { + switchOn: xdr.lookup("IpAddrType"), + switchName: "type", + switches: [["iPv4", "ipv4"], ["iPv6", "ipv6"]], + arms: { + ipv4: xdr.opaque(4), + ipv6: xdr.opaque(16) + } + }); + + // === xdr source ============================================================ + // + // struct PeerAddress + // { + // union switch (IPAddrType type) + // { + // case IPv4: + // opaque ipv4[4]; + // case IPv6: + // opaque ipv6[16]; + // } + // ip; + // uint32 port; + // uint32 numFailures; + // }; + // + // =========================================================================== + xdr.struct("PeerAddress", [["ip", xdr.lookup("PeerAddressIp")], ["port", xdr.lookup("Uint32")], ["numFailures", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // enum MessageType + // { + // ERROR_MSG = 0, + // AUTH = 2, + // DONT_HAVE = 3, + // + // GET_PEERS = 4, // gets a list of peers this guy knows about + // PEERS = 5, + // + // GET_TX_SET = 6, // gets a particular txset by hash + // TX_SET = 7, + // GENERALIZED_TX_SET = 17, + // + // TRANSACTION = 8, // pass on a tx you have heard about + // + // // SCP + // GET_SCP_QUORUMSET = 9, + // SCP_QUORUMSET = 10, + // SCP_MESSAGE = 11, + // GET_SCP_STATE = 12, + // + // // new messages + // HELLO = 13, + // + // SURVEY_REQUEST = 14, + // SURVEY_RESPONSE = 15, + // + // SEND_MORE = 16, + // SEND_MORE_EXTENDED = 20, + // + // FLOOD_ADVERT = 18, + // FLOOD_DEMAND = 19, + // + // TIME_SLICED_SURVEY_REQUEST = 21, + // TIME_SLICED_SURVEY_RESPONSE = 22, + // TIME_SLICED_SURVEY_START_COLLECTING = 23, + // TIME_SLICED_SURVEY_STOP_COLLECTING = 24 + // }; + // + // =========================================================================== + xdr["enum"]("MessageType", { + errorMsg: 0, + auth: 2, + dontHave: 3, + getPeers: 4, + peers: 5, + getTxSet: 6, + txSet: 7, + generalizedTxSet: 17, + transaction: 8, + getScpQuorumset: 9, + scpQuorumset: 10, + scpMessage: 11, + getScpState: 12, + hello: 13, + surveyRequest: 14, + surveyResponse: 15, + sendMore: 16, + sendMoreExtended: 20, + floodAdvert: 18, + floodDemand: 19, + timeSlicedSurveyRequest: 21, + timeSlicedSurveyResponse: 22, + timeSlicedSurveyStartCollecting: 23, + timeSlicedSurveyStopCollecting: 24 + }); + + // === xdr source ============================================================ + // + // struct DontHave + // { + // MessageType type; + // uint256 reqHash; + // }; + // + // =========================================================================== + xdr.struct("DontHave", [["type", xdr.lookup("MessageType")], ["reqHash", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // enum SurveyMessageCommandType + // { + // SURVEY_TOPOLOGY = 0, + // TIME_SLICED_SURVEY_TOPOLOGY = 1 + // }; + // + // =========================================================================== + xdr["enum"]("SurveyMessageCommandType", { + surveyTopology: 0, + timeSlicedSurveyTopology: 1 + }); + + // === xdr source ============================================================ + // + // enum SurveyMessageResponseType + // { + // SURVEY_TOPOLOGY_RESPONSE_V0 = 0, + // SURVEY_TOPOLOGY_RESPONSE_V1 = 1, + // SURVEY_TOPOLOGY_RESPONSE_V2 = 2 + // }; + // + // =========================================================================== + xdr["enum"]("SurveyMessageResponseType", { + surveyTopologyResponseV0: 0, + surveyTopologyResponseV1: 1, + surveyTopologyResponseV2: 2 + }); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyStartCollectingMessage + // { + // NodeID surveyorID; + // uint32 nonce; + // uint32 ledgerNum; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyStartCollectingMessage", [["surveyorId", xdr.lookup("NodeId")], ["nonce", xdr.lookup("Uint32")], ["ledgerNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyStartCollectingMessage + // { + // Signature signature; + // TimeSlicedSurveyStartCollectingMessage startCollecting; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyStartCollectingMessage", [["signature", xdr.lookup("Signature")], ["startCollecting", xdr.lookup("TimeSlicedSurveyStartCollectingMessage")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyStopCollectingMessage + // { + // NodeID surveyorID; + // uint32 nonce; + // uint32 ledgerNum; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyStopCollectingMessage", [["surveyorId", xdr.lookup("NodeId")], ["nonce", xdr.lookup("Uint32")], ["ledgerNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyStopCollectingMessage + // { + // Signature signature; + // TimeSlicedSurveyStopCollectingMessage stopCollecting; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyStopCollectingMessage", [["signature", xdr.lookup("Signature")], ["stopCollecting", xdr.lookup("TimeSlicedSurveyStopCollectingMessage")]]); + + // === xdr source ============================================================ + // + // struct SurveyRequestMessage + // { + // NodeID surveyorPeerID; + // NodeID surveyedPeerID; + // uint32 ledgerNum; + // Curve25519Public encryptionKey; + // SurveyMessageCommandType commandType; + // }; + // + // =========================================================================== + xdr.struct("SurveyRequestMessage", [["surveyorPeerId", xdr.lookup("NodeId")], ["surveyedPeerId", xdr.lookup("NodeId")], ["ledgerNum", xdr.lookup("Uint32")], ["encryptionKey", xdr.lookup("Curve25519Public")], ["commandType", xdr.lookup("SurveyMessageCommandType")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyRequestMessage + // { + // SurveyRequestMessage request; + // uint32 nonce; + // uint32 inboundPeersIndex; + // uint32 outboundPeersIndex; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyRequestMessage", [["request", xdr.lookup("SurveyRequestMessage")], ["nonce", xdr.lookup("Uint32")], ["inboundPeersIndex", xdr.lookup("Uint32")], ["outboundPeersIndex", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedSurveyRequestMessage + // { + // Signature requestSignature; + // SurveyRequestMessage request; + // }; + // + // =========================================================================== + xdr.struct("SignedSurveyRequestMessage", [["requestSignature", xdr.lookup("Signature")], ["request", xdr.lookup("SurveyRequestMessage")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyRequestMessage + // { + // Signature requestSignature; + // TimeSlicedSurveyRequestMessage request; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyRequestMessage", [["requestSignature", xdr.lookup("Signature")], ["request", xdr.lookup("TimeSlicedSurveyRequestMessage")]]); + + // === xdr source ============================================================ + // + // typedef opaque EncryptedBody<64000>; + // + // =========================================================================== + xdr.typedef("EncryptedBody", xdr.varOpaque(64000)); + + // === xdr source ============================================================ + // + // struct SurveyResponseMessage + // { + // NodeID surveyorPeerID; + // NodeID surveyedPeerID; + // uint32 ledgerNum; + // SurveyMessageCommandType commandType; + // EncryptedBody encryptedBody; + // }; + // + // =========================================================================== + xdr.struct("SurveyResponseMessage", [["surveyorPeerId", xdr.lookup("NodeId")], ["surveyedPeerId", xdr.lookup("NodeId")], ["ledgerNum", xdr.lookup("Uint32")], ["commandType", xdr.lookup("SurveyMessageCommandType")], ["encryptedBody", xdr.lookup("EncryptedBody")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyResponseMessage + // { + // SurveyResponseMessage response; + // uint32 nonce; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyResponseMessage", [["response", xdr.lookup("SurveyResponseMessage")], ["nonce", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedSurveyResponseMessage + // { + // Signature responseSignature; + // SurveyResponseMessage response; + // }; + // + // =========================================================================== + xdr.struct("SignedSurveyResponseMessage", [["responseSignature", xdr.lookup("Signature")], ["response", xdr.lookup("SurveyResponseMessage")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyResponseMessage + // { + // Signature responseSignature; + // TimeSlicedSurveyResponseMessage response; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyResponseMessage", [["responseSignature", xdr.lookup("Signature")], ["response", xdr.lookup("TimeSlicedSurveyResponseMessage")]]); + + // === xdr source ============================================================ + // + // struct PeerStats + // { + // NodeID id; + // string versionStr<100>; + // uint64 messagesRead; + // uint64 messagesWritten; + // uint64 bytesRead; + // uint64 bytesWritten; + // uint64 secondsConnected; + // + // uint64 uniqueFloodBytesRecv; + // uint64 duplicateFloodBytesRecv; + // uint64 uniqueFetchBytesRecv; + // uint64 duplicateFetchBytesRecv; + // + // uint64 uniqueFloodMessageRecv; + // uint64 duplicateFloodMessageRecv; + // uint64 uniqueFetchMessageRecv; + // uint64 duplicateFetchMessageRecv; + // }; + // + // =========================================================================== + xdr.struct("PeerStats", [["id", xdr.lookup("NodeId")], ["versionStr", xdr.string(100)], ["messagesRead", xdr.lookup("Uint64")], ["messagesWritten", xdr.lookup("Uint64")], ["bytesRead", xdr.lookup("Uint64")], ["bytesWritten", xdr.lookup("Uint64")], ["secondsConnected", xdr.lookup("Uint64")], ["uniqueFloodBytesRecv", xdr.lookup("Uint64")], ["duplicateFloodBytesRecv", xdr.lookup("Uint64")], ["uniqueFetchBytesRecv", xdr.lookup("Uint64")], ["duplicateFetchBytesRecv", xdr.lookup("Uint64")], ["uniqueFloodMessageRecv", xdr.lookup("Uint64")], ["duplicateFloodMessageRecv", xdr.lookup("Uint64")], ["uniqueFetchMessageRecv", xdr.lookup("Uint64")], ["duplicateFetchMessageRecv", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // typedef PeerStats PeerStatList<25>; + // + // =========================================================================== + xdr.typedef("PeerStatList", xdr.varArray(xdr.lookup("PeerStats"), 25)); + + // === xdr source ============================================================ + // + // struct TimeSlicedNodeData + // { + // uint32 addedAuthenticatedPeers; + // uint32 droppedAuthenticatedPeers; + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // + // // SCP stats + // uint32 p75SCPFirstToSelfLatencyMs; + // uint32 p75SCPSelfToOtherLatencyMs; + // + // // How many times the node lost sync in the time slice + // uint32 lostSyncCount; + // + // // Config data + // bool isValidator; + // uint32 maxInboundPeerCount; + // uint32 maxOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedNodeData", [["addedAuthenticatedPeers", xdr.lookup("Uint32")], ["droppedAuthenticatedPeers", xdr.lookup("Uint32")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")], ["p75ScpFirstToSelfLatencyMs", xdr.lookup("Uint32")], ["p75ScpSelfToOtherLatencyMs", xdr.lookup("Uint32")], ["lostSyncCount", xdr.lookup("Uint32")], ["isValidator", xdr.bool()], ["maxInboundPeerCount", xdr.lookup("Uint32")], ["maxOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedPeerData + // { + // PeerStats peerStats; + // uint32 averageLatencyMs; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedPeerData", [["peerStats", xdr.lookup("PeerStats")], ["averageLatencyMs", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // typedef TimeSlicedPeerData TimeSlicedPeerDataList<25>; + // + // =========================================================================== + xdr.typedef("TimeSlicedPeerDataList", xdr.varArray(xdr.lookup("TimeSlicedPeerData"), 25)); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV0 + // { + // PeerStatList inboundPeers; + // PeerStatList outboundPeers; + // + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV0", [["inboundPeers", xdr.lookup("PeerStatList")], ["outboundPeers", xdr.lookup("PeerStatList")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV1 + // { + // PeerStatList inboundPeers; + // PeerStatList outboundPeers; + // + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // + // uint32 maxInboundPeerCount; + // uint32 maxOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV1", [["inboundPeers", xdr.lookup("PeerStatList")], ["outboundPeers", xdr.lookup("PeerStatList")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")], ["maxInboundPeerCount", xdr.lookup("Uint32")], ["maxOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV2 + // { + // TimeSlicedPeerDataList inboundPeers; + // TimeSlicedPeerDataList outboundPeers; + // TimeSlicedNodeData nodeData; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV2", [["inboundPeers", xdr.lookup("TimeSlicedPeerDataList")], ["outboundPeers", xdr.lookup("TimeSlicedPeerDataList")], ["nodeData", xdr.lookup("TimeSlicedNodeData")]]); + + // === xdr source ============================================================ + // + // union SurveyResponseBody switch (SurveyMessageResponseType type) + // { + // case SURVEY_TOPOLOGY_RESPONSE_V0: + // TopologyResponseBodyV0 topologyResponseBodyV0; + // case SURVEY_TOPOLOGY_RESPONSE_V1: + // TopologyResponseBodyV1 topologyResponseBodyV1; + // case SURVEY_TOPOLOGY_RESPONSE_V2: + // TopologyResponseBodyV2 topologyResponseBodyV2; + // }; + // + // =========================================================================== + xdr.union("SurveyResponseBody", { + switchOn: xdr.lookup("SurveyMessageResponseType"), + switchName: "type", + switches: [["surveyTopologyResponseV0", "topologyResponseBodyV0"], ["surveyTopologyResponseV1", "topologyResponseBodyV1"], ["surveyTopologyResponseV2", "topologyResponseBodyV2"]], + arms: { + topologyResponseBodyV0: xdr.lookup("TopologyResponseBodyV0"), + topologyResponseBodyV1: xdr.lookup("TopologyResponseBodyV1"), + topologyResponseBodyV2: xdr.lookup("TopologyResponseBodyV2") + } + }); + + // === xdr source ============================================================ + // + // const TX_ADVERT_VECTOR_MAX_SIZE = 1000; + // + // =========================================================================== + xdr["const"]("TX_ADVERT_VECTOR_MAX_SIZE", 1000); + + // === xdr source ============================================================ + // + // typedef Hash TxAdvertVector; + // + // =========================================================================== + xdr.typedef("TxAdvertVector", xdr.varArray(xdr.lookup("Hash"), xdr.lookup("TX_ADVERT_VECTOR_MAX_SIZE"))); + + // === xdr source ============================================================ + // + // struct FloodAdvert + // { + // TxAdvertVector txHashes; + // }; + // + // =========================================================================== + xdr.struct("FloodAdvert", [["txHashes", xdr.lookup("TxAdvertVector")]]); + + // === xdr source ============================================================ + // + // const TX_DEMAND_VECTOR_MAX_SIZE = 1000; + // + // =========================================================================== + xdr["const"]("TX_DEMAND_VECTOR_MAX_SIZE", 1000); + + // === xdr source ============================================================ + // + // typedef Hash TxDemandVector; + // + // =========================================================================== + xdr.typedef("TxDemandVector", xdr.varArray(xdr.lookup("Hash"), xdr.lookup("TX_DEMAND_VECTOR_MAX_SIZE"))); + + // === xdr source ============================================================ + // + // struct FloodDemand + // { + // TxDemandVector txHashes; + // }; + // + // =========================================================================== + xdr.struct("FloodDemand", [["txHashes", xdr.lookup("TxDemandVector")]]); + + // === xdr source ============================================================ + // + // union StellarMessage switch (MessageType type) + // { + // case ERROR_MSG: + // Error error; + // case HELLO: + // Hello hello; + // case AUTH: + // Auth auth; + // case DONT_HAVE: + // DontHave dontHave; + // case GET_PEERS: + // void; + // case PEERS: + // PeerAddress peers<100>; + // + // case GET_TX_SET: + // uint256 txSetHash; + // case TX_SET: + // TransactionSet txSet; + // case GENERALIZED_TX_SET: + // GeneralizedTransactionSet generalizedTxSet; + // + // case TRANSACTION: + // TransactionEnvelope transaction; + // + // case SURVEY_REQUEST: + // SignedSurveyRequestMessage signedSurveyRequestMessage; + // + // case SURVEY_RESPONSE: + // SignedSurveyResponseMessage signedSurveyResponseMessage; + // + // case TIME_SLICED_SURVEY_REQUEST: + // SignedTimeSlicedSurveyRequestMessage signedTimeSlicedSurveyRequestMessage; + // + // case TIME_SLICED_SURVEY_RESPONSE: + // SignedTimeSlicedSurveyResponseMessage signedTimeSlicedSurveyResponseMessage; + // + // case TIME_SLICED_SURVEY_START_COLLECTING: + // SignedTimeSlicedSurveyStartCollectingMessage + // signedTimeSlicedSurveyStartCollectingMessage; + // + // case TIME_SLICED_SURVEY_STOP_COLLECTING: + // SignedTimeSlicedSurveyStopCollectingMessage + // signedTimeSlicedSurveyStopCollectingMessage; + // + // // SCP + // case GET_SCP_QUORUMSET: + // uint256 qSetHash; + // case SCP_QUORUMSET: + // SCPQuorumSet qSet; + // case SCP_MESSAGE: + // SCPEnvelope envelope; + // case GET_SCP_STATE: + // uint32 getSCPLedgerSeq; // ledger seq requested ; if 0, requests the latest + // case SEND_MORE: + // SendMore sendMoreMessage; + // case SEND_MORE_EXTENDED: + // SendMoreExtended sendMoreExtendedMessage; + // // Pull mode + // case FLOOD_ADVERT: + // FloodAdvert floodAdvert; + // case FLOOD_DEMAND: + // FloodDemand floodDemand; + // }; + // + // =========================================================================== + xdr.union("StellarMessage", { + switchOn: xdr.lookup("MessageType"), + switchName: "type", + switches: [["errorMsg", "error"], ["hello", "hello"], ["auth", "auth"], ["dontHave", "dontHave"], ["getPeers", xdr["void"]()], ["peers", "peers"], ["getTxSet", "txSetHash"], ["txSet", "txSet"], ["generalizedTxSet", "generalizedTxSet"], ["transaction", "transaction"], ["surveyRequest", "signedSurveyRequestMessage"], ["surveyResponse", "signedSurveyResponseMessage"], ["timeSlicedSurveyRequest", "signedTimeSlicedSurveyRequestMessage"], ["timeSlicedSurveyResponse", "signedTimeSlicedSurveyResponseMessage"], ["timeSlicedSurveyStartCollecting", "signedTimeSlicedSurveyStartCollectingMessage"], ["timeSlicedSurveyStopCollecting", "signedTimeSlicedSurveyStopCollectingMessage"], ["getScpQuorumset", "qSetHash"], ["scpQuorumset", "qSet"], ["scpMessage", "envelope"], ["getScpState", "getScpLedgerSeq"], ["sendMore", "sendMoreMessage"], ["sendMoreExtended", "sendMoreExtendedMessage"], ["floodAdvert", "floodAdvert"], ["floodDemand", "floodDemand"]], + arms: { + error: xdr.lookup("Error"), + hello: xdr.lookup("Hello"), + auth: xdr.lookup("Auth"), + dontHave: xdr.lookup("DontHave"), + peers: xdr.varArray(xdr.lookup("PeerAddress"), 100), + txSetHash: xdr.lookup("Uint256"), + txSet: xdr.lookup("TransactionSet"), + generalizedTxSet: xdr.lookup("GeneralizedTransactionSet"), + transaction: xdr.lookup("TransactionEnvelope"), + signedSurveyRequestMessage: xdr.lookup("SignedSurveyRequestMessage"), + signedSurveyResponseMessage: xdr.lookup("SignedSurveyResponseMessage"), + signedTimeSlicedSurveyRequestMessage: xdr.lookup("SignedTimeSlicedSurveyRequestMessage"), + signedTimeSlicedSurveyResponseMessage: xdr.lookup("SignedTimeSlicedSurveyResponseMessage"), + signedTimeSlicedSurveyStartCollectingMessage: xdr.lookup("SignedTimeSlicedSurveyStartCollectingMessage"), + signedTimeSlicedSurveyStopCollectingMessage: xdr.lookup("SignedTimeSlicedSurveyStopCollectingMessage"), + qSetHash: xdr.lookup("Uint256"), + qSet: xdr.lookup("ScpQuorumSet"), + envelope: xdr.lookup("ScpEnvelope"), + getScpLedgerSeq: xdr.lookup("Uint32"), + sendMoreMessage: xdr.lookup("SendMore"), + sendMoreExtendedMessage: xdr.lookup("SendMoreExtended"), + floodAdvert: xdr.lookup("FloodAdvert"), + floodDemand: xdr.lookup("FloodDemand") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // uint64 sequence; + // StellarMessage message; + // HmacSha256Mac mac; + // } + // + // =========================================================================== + xdr.struct("AuthenticatedMessageV0", [["sequence", xdr.lookup("Uint64")], ["message", xdr.lookup("StellarMessage")], ["mac", xdr.lookup("HmacSha256Mac")]]); + + // === xdr source ============================================================ + // + // union AuthenticatedMessage switch (uint32 v) + // { + // case 0: + // struct + // { + // uint64 sequence; + // StellarMessage message; + // HmacSha256Mac mac; + // } v0; + // }; + // + // =========================================================================== + xdr.union("AuthenticatedMessage", { + switchOn: xdr.lookup("Uint32"), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("AuthenticatedMessageV0") + } + }); + + // === xdr source ============================================================ + // + // const MAX_OPS_PER_TX = 100; + // + // =========================================================================== + xdr["const"]("MAX_OPS_PER_TX", 100); + + // === xdr source ============================================================ + // + // union LiquidityPoolParameters switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // LiquidityPoolConstantProductParameters constantProduct; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolParameters", { + switchOn: xdr.lookup("LiquidityPoolType"), + switchName: "type", + switches: [["liquidityPoolConstantProduct", "constantProduct"]], + arms: { + constantProduct: xdr.lookup("LiquidityPoolConstantProductParameters") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // uint64 id; + // uint256 ed25519; + // } + // + // =========================================================================== + xdr.struct("MuxedAccountMed25519", [["id", xdr.lookup("Uint64")], ["ed25519", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // union MuxedAccount switch (CryptoKeyType type) + // { + // case KEY_TYPE_ED25519: + // uint256 ed25519; + // case KEY_TYPE_MUXED_ED25519: + // struct + // { + // uint64 id; + // uint256 ed25519; + // } med25519; + // }; + // + // =========================================================================== + xdr.union("MuxedAccount", { + switchOn: xdr.lookup("CryptoKeyType"), + switchName: "type", + switches: [["keyTypeEd25519", "ed25519"], ["keyTypeMuxedEd25519", "med25519"]], + arms: { + ed25519: xdr.lookup("Uint256"), + med25519: xdr.lookup("MuxedAccountMed25519") + } + }); + + // === xdr source ============================================================ + // + // struct DecoratedSignature + // { + // SignatureHint hint; // last 4 bytes of the public key, used as a hint + // Signature signature; // actual signature + // }; + // + // =========================================================================== + xdr.struct("DecoratedSignature", [["hint", xdr.lookup("SignatureHint")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // enum OperationType + // { + // CREATE_ACCOUNT = 0, + // PAYMENT = 1, + // PATH_PAYMENT_STRICT_RECEIVE = 2, + // MANAGE_SELL_OFFER = 3, + // CREATE_PASSIVE_SELL_OFFER = 4, + // SET_OPTIONS = 5, + // CHANGE_TRUST = 6, + // ALLOW_TRUST = 7, + // ACCOUNT_MERGE = 8, + // INFLATION = 9, + // MANAGE_DATA = 10, + // BUMP_SEQUENCE = 11, + // MANAGE_BUY_OFFER = 12, + // PATH_PAYMENT_STRICT_SEND = 13, + // CREATE_CLAIMABLE_BALANCE = 14, + // CLAIM_CLAIMABLE_BALANCE = 15, + // BEGIN_SPONSORING_FUTURE_RESERVES = 16, + // END_SPONSORING_FUTURE_RESERVES = 17, + // REVOKE_SPONSORSHIP = 18, + // CLAWBACK = 19, + // CLAWBACK_CLAIMABLE_BALANCE = 20, + // SET_TRUST_LINE_FLAGS = 21, + // LIQUIDITY_POOL_DEPOSIT = 22, + // LIQUIDITY_POOL_WITHDRAW = 23, + // INVOKE_HOST_FUNCTION = 24, + // EXTEND_FOOTPRINT_TTL = 25, + // RESTORE_FOOTPRINT = 26 + // }; + // + // =========================================================================== + xdr["enum"]("OperationType", { + createAccount: 0, + payment: 1, + pathPaymentStrictReceive: 2, + manageSellOffer: 3, + createPassiveSellOffer: 4, + setOptions: 5, + changeTrust: 6, + allowTrust: 7, + accountMerge: 8, + inflation: 9, + manageData: 10, + bumpSequence: 11, + manageBuyOffer: 12, + pathPaymentStrictSend: 13, + createClaimableBalance: 14, + claimClaimableBalance: 15, + beginSponsoringFutureReserves: 16, + endSponsoringFutureReserves: 17, + revokeSponsorship: 18, + clawback: 19, + clawbackClaimableBalance: 20, + setTrustLineFlags: 21, + liquidityPoolDeposit: 22, + liquidityPoolWithdraw: 23, + invokeHostFunction: 24, + extendFootprintTtl: 25, + restoreFootprint: 26 + }); + + // === xdr source ============================================================ + // + // struct CreateAccountOp + // { + // AccountID destination; // account to create + // int64 startingBalance; // amount they end up with + // }; + // + // =========================================================================== + xdr.struct("CreateAccountOp", [["destination", xdr.lookup("AccountId")], ["startingBalance", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct PaymentOp + // { + // MuxedAccount destination; // recipient of the payment + // Asset asset; // what they end up with + // int64 amount; // amount they end up with + // }; + // + // =========================================================================== + xdr.struct("PaymentOp", [["destination", xdr.lookup("MuxedAccount")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct PathPaymentStrictReceiveOp + // { + // Asset sendAsset; // asset we pay with + // int64 sendMax; // the maximum amount of sendAsset to + // // send (excluding fees). + // // The operation will fail if can't be met + // + // MuxedAccount destination; // recipient of the payment + // Asset destAsset; // what they end up with + // int64 destAmount; // amount they end up with + // + // Asset path<5>; // additional hops it must go through to get there + // }; + // + // =========================================================================== + xdr.struct("PathPaymentStrictReceiveOp", [["sendAsset", xdr.lookup("Asset")], ["sendMax", xdr.lookup("Int64")], ["destination", xdr.lookup("MuxedAccount")], ["destAsset", xdr.lookup("Asset")], ["destAmount", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]); + + // === xdr source ============================================================ + // + // struct PathPaymentStrictSendOp + // { + // Asset sendAsset; // asset we pay with + // int64 sendAmount; // amount of sendAsset to send (excluding fees) + // + // MuxedAccount destination; // recipient of the payment + // Asset destAsset; // what they end up with + // int64 destMin; // the minimum amount of dest asset to + // // be received + // // The operation will fail if it can't be met + // + // Asset path<5>; // additional hops it must go through to get there + // }; + // + // =========================================================================== + xdr.struct("PathPaymentStrictSendOp", [["sendAsset", xdr.lookup("Asset")], ["sendAmount", xdr.lookup("Int64")], ["destination", xdr.lookup("MuxedAccount")], ["destAsset", xdr.lookup("Asset")], ["destMin", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]); + + // === xdr source ============================================================ + // + // struct ManageSellOfferOp + // { + // Asset selling; + // Asset buying; + // int64 amount; // amount being sold. if set to 0, delete the offer + // Price price; // price of thing being sold in terms of what you are buying + // + // // 0=create a new offer, otherwise edit an existing offer + // int64 offerID; + // }; + // + // =========================================================================== + xdr.struct("ManageSellOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ManageBuyOfferOp + // { + // Asset selling; + // Asset buying; + // int64 buyAmount; // amount being bought. if set to 0, delete the offer + // Price price; // price of thing being bought in terms of what you are + // // selling + // + // // 0=create a new offer, otherwise edit an existing offer + // int64 offerID; + // }; + // + // =========================================================================== + xdr.struct("ManageBuyOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["buyAmount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct CreatePassiveSellOfferOp + // { + // Asset selling; // A + // Asset buying; // B + // int64 amount; // amount taker gets + // Price price; // cost of A in terms of B + // }; + // + // =========================================================================== + xdr.struct("CreatePassiveSellOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")]]); + + // === xdr source ============================================================ + // + // struct SetOptionsOp + // { + // AccountID* inflationDest; // sets the inflation destination + // + // uint32* clearFlags; // which flags to clear + // uint32* setFlags; // which flags to set + // + // // account threshold manipulation + // uint32* masterWeight; // weight of the master account + // uint32* lowThreshold; + // uint32* medThreshold; + // uint32* highThreshold; + // + // string32* homeDomain; // sets the home domain + // + // // Add, update or remove a signer for the account + // // signer is deleted if the weight is 0 + // Signer* signer; + // }; + // + // =========================================================================== + xdr.struct("SetOptionsOp", [["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["clearFlags", xdr.option(xdr.lookup("Uint32"))], ["setFlags", xdr.option(xdr.lookup("Uint32"))], ["masterWeight", xdr.option(xdr.lookup("Uint32"))], ["lowThreshold", xdr.option(xdr.lookup("Uint32"))], ["medThreshold", xdr.option(xdr.lookup("Uint32"))], ["highThreshold", xdr.option(xdr.lookup("Uint32"))], ["homeDomain", xdr.option(xdr.lookup("String32"))], ["signer", xdr.option(xdr.lookup("Signer"))]]); + + // === xdr source ============================================================ + // + // union ChangeTrustAsset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // case ASSET_TYPE_POOL_SHARE: + // LiquidityPoolParameters liquidityPool; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("ChangeTrustAsset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"], ["assetTypePoolShare", "liquidityPool"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12"), + liquidityPool: xdr.lookup("LiquidityPoolParameters") + } + }); + + // === xdr source ============================================================ + // + // struct ChangeTrustOp + // { + // ChangeTrustAsset line; + // + // // if limit is set to 0, deletes the trust line + // int64 limit; + // }; + // + // =========================================================================== + xdr.struct("ChangeTrustOp", [["line", xdr.lookup("ChangeTrustAsset")], ["limit", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct AllowTrustOp + // { + // AccountID trustor; + // AssetCode asset; + // + // // One of 0, AUTHORIZED_FLAG, or AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG + // uint32 authorize; + // }; + // + // =========================================================================== + xdr.struct("AllowTrustOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("AssetCode")], ["authorize", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ManageDataOp + // { + // string64 dataName; + // DataValue* dataValue; // set to null to clear + // }; + // + // =========================================================================== + xdr.struct("ManageDataOp", [["dataName", xdr.lookup("String64")], ["dataValue", xdr.option(xdr.lookup("DataValue"))]]); + + // === xdr source ============================================================ + // + // struct BumpSequenceOp + // { + // SequenceNumber bumpTo; + // }; + // + // =========================================================================== + xdr.struct("BumpSequenceOp", [["bumpTo", xdr.lookup("SequenceNumber")]]); + + // === xdr source ============================================================ + // + // struct CreateClaimableBalanceOp + // { + // Asset asset; + // int64 amount; + // Claimant claimants<10>; + // }; + // + // =========================================================================== + xdr.struct("CreateClaimableBalanceOp", [["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["claimants", xdr.varArray(xdr.lookup("Claimant"), 10)]]); + + // === xdr source ============================================================ + // + // struct ClaimClaimableBalanceOp + // { + // ClaimableBalanceID balanceID; + // }; + // + // =========================================================================== + xdr.struct("ClaimClaimableBalanceOp", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct BeginSponsoringFutureReservesOp + // { + // AccountID sponsoredID; + // }; + // + // =========================================================================== + xdr.struct("BeginSponsoringFutureReservesOp", [["sponsoredId", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // enum RevokeSponsorshipType + // { + // REVOKE_SPONSORSHIP_LEDGER_ENTRY = 0, + // REVOKE_SPONSORSHIP_SIGNER = 1 + // }; + // + // =========================================================================== + xdr["enum"]("RevokeSponsorshipType", { + revokeSponsorshipLedgerEntry: 0, + revokeSponsorshipSigner: 1 + }); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // SignerKey signerKey; + // } + // + // =========================================================================== + xdr.struct("RevokeSponsorshipOpSigner", [["accountId", xdr.lookup("AccountId")], ["signerKey", xdr.lookup("SignerKey")]]); + + // === xdr source ============================================================ + // + // union RevokeSponsorshipOp switch (RevokeSponsorshipType type) + // { + // case REVOKE_SPONSORSHIP_LEDGER_ENTRY: + // LedgerKey ledgerKey; + // case REVOKE_SPONSORSHIP_SIGNER: + // struct + // { + // AccountID accountID; + // SignerKey signerKey; + // } signer; + // }; + // + // =========================================================================== + xdr.union("RevokeSponsorshipOp", { + switchOn: xdr.lookup("RevokeSponsorshipType"), + switchName: "type", + switches: [["revokeSponsorshipLedgerEntry", "ledgerKey"], ["revokeSponsorshipSigner", "signer"]], + arms: { + ledgerKey: xdr.lookup("LedgerKey"), + signer: xdr.lookup("RevokeSponsorshipOpSigner") + } + }); + + // === xdr source ============================================================ + // + // struct ClawbackOp + // { + // Asset asset; + // MuxedAccount from; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("ClawbackOp", [["asset", xdr.lookup("Asset")], ["from", xdr.lookup("MuxedAccount")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClawbackClaimableBalanceOp + // { + // ClaimableBalanceID balanceID; + // }; + // + // =========================================================================== + xdr.struct("ClawbackClaimableBalanceOp", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct SetTrustLineFlagsOp + // { + // AccountID trustor; + // Asset asset; + // + // uint32 clearFlags; // which flags to clear + // uint32 setFlags; // which flags to set + // }; + // + // =========================================================================== + xdr.struct("SetTrustLineFlagsOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["clearFlags", xdr.lookup("Uint32")], ["setFlags", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // const LIQUIDITY_POOL_FEE_V18 = 30; + // + // =========================================================================== + xdr["const"]("LIQUIDITY_POOL_FEE_V18", 30); + + // === xdr source ============================================================ + // + // struct LiquidityPoolDepositOp + // { + // PoolID liquidityPoolID; + // int64 maxAmountA; // maximum amount of first asset to deposit + // int64 maxAmountB; // maximum amount of second asset to deposit + // Price minPrice; // minimum depositA/depositB + // Price maxPrice; // maximum depositA/depositB + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolDepositOp", [["liquidityPoolId", xdr.lookup("PoolId")], ["maxAmountA", xdr.lookup("Int64")], ["maxAmountB", xdr.lookup("Int64")], ["minPrice", xdr.lookup("Price")], ["maxPrice", xdr.lookup("Price")]]); + + // === xdr source ============================================================ + // + // struct LiquidityPoolWithdrawOp + // { + // PoolID liquidityPoolID; + // int64 amount; // amount of pool shares to withdraw + // int64 minAmountA; // minimum amount of first asset to withdraw + // int64 minAmountB; // minimum amount of second asset to withdraw + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolWithdrawOp", [["liquidityPoolId", xdr.lookup("PoolId")], ["amount", xdr.lookup("Int64")], ["minAmountA", xdr.lookup("Int64")], ["minAmountB", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum HostFunctionType + // { + // HOST_FUNCTION_TYPE_INVOKE_CONTRACT = 0, + // HOST_FUNCTION_TYPE_CREATE_CONTRACT = 1, + // HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM = 2, + // HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2 = 3 + // }; + // + // =========================================================================== + xdr["enum"]("HostFunctionType", { + hostFunctionTypeInvokeContract: 0, + hostFunctionTypeCreateContract: 1, + hostFunctionTypeUploadContractWasm: 2, + hostFunctionTypeCreateContractV2: 3 + }); + + // === xdr source ============================================================ + // + // enum ContractIDPreimageType + // { + // CONTRACT_ID_PREIMAGE_FROM_ADDRESS = 0, + // CONTRACT_ID_PREIMAGE_FROM_ASSET = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractIdPreimageType", { + contractIdPreimageFromAddress: 0, + contractIdPreimageFromAsset: 1 + }); + + // === xdr source ============================================================ + // + // struct + // { + // SCAddress address; + // uint256 salt; + // } + // + // =========================================================================== + xdr.struct("ContractIdPreimageFromAddress", [["address", xdr.lookup("ScAddress")], ["salt", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // union ContractIDPreimage switch (ContractIDPreimageType type) + // { + // case CONTRACT_ID_PREIMAGE_FROM_ADDRESS: + // struct + // { + // SCAddress address; + // uint256 salt; + // } fromAddress; + // case CONTRACT_ID_PREIMAGE_FROM_ASSET: + // Asset fromAsset; + // }; + // + // =========================================================================== + xdr.union("ContractIdPreimage", { + switchOn: xdr.lookup("ContractIdPreimageType"), + switchName: "type", + switches: [["contractIdPreimageFromAddress", "fromAddress"], ["contractIdPreimageFromAsset", "fromAsset"]], + arms: { + fromAddress: xdr.lookup("ContractIdPreimageFromAddress"), + fromAsset: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // struct CreateContractArgs + // { + // ContractIDPreimage contractIDPreimage; + // ContractExecutable executable; + // }; + // + // =========================================================================== + xdr.struct("CreateContractArgs", [["contractIdPreimage", xdr.lookup("ContractIdPreimage")], ["executable", xdr.lookup("ContractExecutable")]]); + + // === xdr source ============================================================ + // + // struct CreateContractArgsV2 + // { + // ContractIDPreimage contractIDPreimage; + // ContractExecutable executable; + // // Arguments of the contract's constructor. + // SCVal constructorArgs<>; + // }; + // + // =========================================================================== + xdr.struct("CreateContractArgsV2", [["contractIdPreimage", xdr.lookup("ContractIdPreimage")], ["executable", xdr.lookup("ContractExecutable")], ["constructorArgs", xdr.varArray(xdr.lookup("ScVal"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct InvokeContractArgs { + // SCAddress contractAddress; + // SCSymbol functionName; + // SCVal args<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeContractArgs", [["contractAddress", xdr.lookup("ScAddress")], ["functionName", xdr.lookup("ScSymbol")], ["args", xdr.varArray(xdr.lookup("ScVal"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union HostFunction switch (HostFunctionType type) + // { + // case HOST_FUNCTION_TYPE_INVOKE_CONTRACT: + // InvokeContractArgs invokeContract; + // case HOST_FUNCTION_TYPE_CREATE_CONTRACT: + // CreateContractArgs createContract; + // case HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM: + // opaque wasm<>; + // case HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2: + // CreateContractArgsV2 createContractV2; + // }; + // + // =========================================================================== + xdr.union("HostFunction", { + switchOn: xdr.lookup("HostFunctionType"), + switchName: "type", + switches: [["hostFunctionTypeInvokeContract", "invokeContract"], ["hostFunctionTypeCreateContract", "createContract"], ["hostFunctionTypeUploadContractWasm", "wasm"], ["hostFunctionTypeCreateContractV2", "createContractV2"]], + arms: { + invokeContract: xdr.lookup("InvokeContractArgs"), + createContract: xdr.lookup("CreateContractArgs"), + wasm: xdr.varOpaque(), + createContractV2: xdr.lookup("CreateContractArgsV2") + } + }); + + // === xdr source ============================================================ + // + // enum SorobanAuthorizedFunctionType + // { + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN = 0, + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN = 1, + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN = 2 + // }; + // + // =========================================================================== + xdr["enum"]("SorobanAuthorizedFunctionType", { + sorobanAuthorizedFunctionTypeContractFn: 0, + sorobanAuthorizedFunctionTypeCreateContractHostFn: 1, + sorobanAuthorizedFunctionTypeCreateContractV2HostFn: 2 + }); + + // === xdr source ============================================================ + // + // union SorobanAuthorizedFunction switch (SorobanAuthorizedFunctionType type) + // { + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN: + // InvokeContractArgs contractFn; + // // This variant of auth payload for creating new contract instances + // // doesn't allow specifying the constructor arguments, creating contracts + // // with constructors that take arguments is only possible by authorizing + // // `SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN` + // // (protocol 22+). + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN: + // CreateContractArgs createContractHostFn; + // // This variant of auth payload for creating new contract instances + // // is only accepted in and after protocol 22. It allows authorizing the + // // contract constructor arguments. + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN: + // CreateContractArgsV2 createContractV2HostFn; + // }; + // + // =========================================================================== + xdr.union("SorobanAuthorizedFunction", { + switchOn: xdr.lookup("SorobanAuthorizedFunctionType"), + switchName: "type", + switches: [["sorobanAuthorizedFunctionTypeContractFn", "contractFn"], ["sorobanAuthorizedFunctionTypeCreateContractHostFn", "createContractHostFn"], ["sorobanAuthorizedFunctionTypeCreateContractV2HostFn", "createContractV2HostFn"]], + arms: { + contractFn: xdr.lookup("InvokeContractArgs"), + createContractHostFn: xdr.lookup("CreateContractArgs"), + createContractV2HostFn: xdr.lookup("CreateContractArgsV2") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanAuthorizedInvocation + // { + // SorobanAuthorizedFunction function; + // SorobanAuthorizedInvocation subInvocations<>; + // }; + // + // =========================================================================== + xdr.struct("SorobanAuthorizedInvocation", [["function", xdr.lookup("SorobanAuthorizedFunction")], ["subInvocations", xdr.varArray(xdr.lookup("SorobanAuthorizedInvocation"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct SorobanAddressCredentials + // { + // SCAddress address; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SCVal signature; + // }; + // + // =========================================================================== + xdr.struct("SorobanAddressCredentials", [["address", xdr.lookup("ScAddress")], ["nonce", xdr.lookup("Int64")], ["signatureExpirationLedger", xdr.lookup("Uint32")], ["signature", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // enum SorobanCredentialsType + // { + // SOROBAN_CREDENTIALS_SOURCE_ACCOUNT = 0, + // SOROBAN_CREDENTIALS_ADDRESS = 1 + // }; + // + // =========================================================================== + xdr["enum"]("SorobanCredentialsType", { + sorobanCredentialsSourceAccount: 0, + sorobanCredentialsAddress: 1 + }); + + // === xdr source ============================================================ + // + // union SorobanCredentials switch (SorobanCredentialsType type) + // { + // case SOROBAN_CREDENTIALS_SOURCE_ACCOUNT: + // void; + // case SOROBAN_CREDENTIALS_ADDRESS: + // SorobanAddressCredentials address; + // }; + // + // =========================================================================== + xdr.union("SorobanCredentials", { + switchOn: xdr.lookup("SorobanCredentialsType"), + switchName: "type", + switches: [["sorobanCredentialsSourceAccount", xdr["void"]()], ["sorobanCredentialsAddress", "address"]], + arms: { + address: xdr.lookup("SorobanAddressCredentials") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanAuthorizationEntry + // { + // SorobanCredentials credentials; + // SorobanAuthorizedInvocation rootInvocation; + // }; + // + // =========================================================================== + xdr.struct("SorobanAuthorizationEntry", [["credentials", xdr.lookup("SorobanCredentials")], ["rootInvocation", xdr.lookup("SorobanAuthorizedInvocation")]]); + + // === xdr source ============================================================ + // + // struct InvokeHostFunctionOp + // { + // // Host function to invoke. + // HostFunction hostFunction; + // // Per-address authorizations for this host function. + // SorobanAuthorizationEntry auth<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeHostFunctionOp", [["hostFunction", xdr.lookup("HostFunction")], ["auth", xdr.varArray(xdr.lookup("SorobanAuthorizationEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct ExtendFootprintTTLOp + // { + // ExtensionPoint ext; + // uint32 extendTo; + // }; + // + // =========================================================================== + xdr.struct("ExtendFootprintTtlOp", [["ext", xdr.lookup("ExtensionPoint")], ["extendTo", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct RestoreFootprintOp + // { + // ExtensionPoint ext; + // }; + // + // =========================================================================== + xdr.struct("RestoreFootprintOp", [["ext", xdr.lookup("ExtensionPoint")]]); + + // === xdr source ============================================================ + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountOp createAccountOp; + // case PAYMENT: + // PaymentOp paymentOp; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp; + // case MANAGE_SELL_OFFER: + // ManageSellOfferOp manageSellOfferOp; + // case CREATE_PASSIVE_SELL_OFFER: + // CreatePassiveSellOfferOp createPassiveSellOfferOp; + // case SET_OPTIONS: + // SetOptionsOp setOptionsOp; + // case CHANGE_TRUST: + // ChangeTrustOp changeTrustOp; + // case ALLOW_TRUST: + // AllowTrustOp allowTrustOp; + // case ACCOUNT_MERGE: + // MuxedAccount destination; + // case INFLATION: + // void; + // case MANAGE_DATA: + // ManageDataOp manageDataOp; + // case BUMP_SEQUENCE: + // BumpSequenceOp bumpSequenceOp; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferOp manageBuyOfferOp; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendOp pathPaymentStrictSendOp; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceOp createClaimableBalanceOp; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceOp claimClaimableBalanceOp; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp; + // case END_SPONSORING_FUTURE_RESERVES: + // void; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipOp revokeSponsorshipOp; + // case CLAWBACK: + // ClawbackOp clawbackOp; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceOp clawbackClaimableBalanceOp; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsOp setTrustLineFlagsOp; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositOp liquidityPoolDepositOp; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawOp liquidityPoolWithdrawOp; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionOp invokeHostFunctionOp; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLOp extendFootprintTTLOp; + // case RESTORE_FOOTPRINT: + // RestoreFootprintOp restoreFootprintOp; + // } + // + // =========================================================================== + xdr.union("OperationBody", { + switchOn: xdr.lookup("OperationType"), + switchName: "type", + switches: [["createAccount", "createAccountOp"], ["payment", "paymentOp"], ["pathPaymentStrictReceive", "pathPaymentStrictReceiveOp"], ["manageSellOffer", "manageSellOfferOp"], ["createPassiveSellOffer", "createPassiveSellOfferOp"], ["setOptions", "setOptionsOp"], ["changeTrust", "changeTrustOp"], ["allowTrust", "allowTrustOp"], ["accountMerge", "destination"], ["inflation", xdr["void"]()], ["manageData", "manageDataOp"], ["bumpSequence", "bumpSequenceOp"], ["manageBuyOffer", "manageBuyOfferOp"], ["pathPaymentStrictSend", "pathPaymentStrictSendOp"], ["createClaimableBalance", "createClaimableBalanceOp"], ["claimClaimableBalance", "claimClaimableBalanceOp"], ["beginSponsoringFutureReserves", "beginSponsoringFutureReservesOp"], ["endSponsoringFutureReserves", xdr["void"]()], ["revokeSponsorship", "revokeSponsorshipOp"], ["clawback", "clawbackOp"], ["clawbackClaimableBalance", "clawbackClaimableBalanceOp"], ["setTrustLineFlags", "setTrustLineFlagsOp"], ["liquidityPoolDeposit", "liquidityPoolDepositOp"], ["liquidityPoolWithdraw", "liquidityPoolWithdrawOp"], ["invokeHostFunction", "invokeHostFunctionOp"], ["extendFootprintTtl", "extendFootprintTtlOp"], ["restoreFootprint", "restoreFootprintOp"]], + arms: { + createAccountOp: xdr.lookup("CreateAccountOp"), + paymentOp: xdr.lookup("PaymentOp"), + pathPaymentStrictReceiveOp: xdr.lookup("PathPaymentStrictReceiveOp"), + manageSellOfferOp: xdr.lookup("ManageSellOfferOp"), + createPassiveSellOfferOp: xdr.lookup("CreatePassiveSellOfferOp"), + setOptionsOp: xdr.lookup("SetOptionsOp"), + changeTrustOp: xdr.lookup("ChangeTrustOp"), + allowTrustOp: xdr.lookup("AllowTrustOp"), + destination: xdr.lookup("MuxedAccount"), + manageDataOp: xdr.lookup("ManageDataOp"), + bumpSequenceOp: xdr.lookup("BumpSequenceOp"), + manageBuyOfferOp: xdr.lookup("ManageBuyOfferOp"), + pathPaymentStrictSendOp: xdr.lookup("PathPaymentStrictSendOp"), + createClaimableBalanceOp: xdr.lookup("CreateClaimableBalanceOp"), + claimClaimableBalanceOp: xdr.lookup("ClaimClaimableBalanceOp"), + beginSponsoringFutureReservesOp: xdr.lookup("BeginSponsoringFutureReservesOp"), + revokeSponsorshipOp: xdr.lookup("RevokeSponsorshipOp"), + clawbackOp: xdr.lookup("ClawbackOp"), + clawbackClaimableBalanceOp: xdr.lookup("ClawbackClaimableBalanceOp"), + setTrustLineFlagsOp: xdr.lookup("SetTrustLineFlagsOp"), + liquidityPoolDepositOp: xdr.lookup("LiquidityPoolDepositOp"), + liquidityPoolWithdrawOp: xdr.lookup("LiquidityPoolWithdrawOp"), + invokeHostFunctionOp: xdr.lookup("InvokeHostFunctionOp"), + extendFootprintTtlOp: xdr.lookup("ExtendFootprintTtlOp"), + restoreFootprintOp: xdr.lookup("RestoreFootprintOp") + } + }); + + // === xdr source ============================================================ + // + // struct Operation + // { + // // sourceAccount is the account used to run the operation + // // if not set, the runtime defaults to "sourceAccount" specified at + // // the transaction level + // MuxedAccount* sourceAccount; + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountOp createAccountOp; + // case PAYMENT: + // PaymentOp paymentOp; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp; + // case MANAGE_SELL_OFFER: + // ManageSellOfferOp manageSellOfferOp; + // case CREATE_PASSIVE_SELL_OFFER: + // CreatePassiveSellOfferOp createPassiveSellOfferOp; + // case SET_OPTIONS: + // SetOptionsOp setOptionsOp; + // case CHANGE_TRUST: + // ChangeTrustOp changeTrustOp; + // case ALLOW_TRUST: + // AllowTrustOp allowTrustOp; + // case ACCOUNT_MERGE: + // MuxedAccount destination; + // case INFLATION: + // void; + // case MANAGE_DATA: + // ManageDataOp manageDataOp; + // case BUMP_SEQUENCE: + // BumpSequenceOp bumpSequenceOp; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferOp manageBuyOfferOp; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendOp pathPaymentStrictSendOp; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceOp createClaimableBalanceOp; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceOp claimClaimableBalanceOp; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp; + // case END_SPONSORING_FUTURE_RESERVES: + // void; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipOp revokeSponsorshipOp; + // case CLAWBACK: + // ClawbackOp clawbackOp; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceOp clawbackClaimableBalanceOp; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsOp setTrustLineFlagsOp; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositOp liquidityPoolDepositOp; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawOp liquidityPoolWithdrawOp; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionOp invokeHostFunctionOp; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLOp extendFootprintTTLOp; + // case RESTORE_FOOTPRINT: + // RestoreFootprintOp restoreFootprintOp; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("Operation", [["sourceAccount", xdr.option(xdr.lookup("MuxedAccount"))], ["body", xdr.lookup("OperationBody")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageOperationId", [["sourceAccount", xdr.lookup("AccountId")], ["seqNum", xdr.lookup("SequenceNumber")], ["opNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // PoolID liquidityPoolID; + // Asset asset; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageRevokeId", [["sourceAccount", xdr.lookup("AccountId")], ["seqNum", xdr.lookup("SequenceNumber")], ["opNum", xdr.lookup("Uint32")], ["liquidityPoolId", xdr.lookup("PoolId")], ["asset", xdr.lookup("Asset")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash networkID; + // ContractIDPreimage contractIDPreimage; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageContractId", [["networkId", xdr.lookup("Hash")], ["contractIdPreimage", xdr.lookup("ContractIdPreimage")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash networkID; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SorobanAuthorizedInvocation invocation; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageSorobanAuthorization", [["networkId", xdr.lookup("Hash")], ["nonce", xdr.lookup("Int64")], ["signatureExpirationLedger", xdr.lookup("Uint32")], ["invocation", xdr.lookup("SorobanAuthorizedInvocation")]]); + + // === xdr source ============================================================ + // + // union HashIDPreimage switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_OP_ID: + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // } operationID; + // case ENVELOPE_TYPE_POOL_REVOKE_OP_ID: + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // PoolID liquidityPoolID; + // Asset asset; + // } revokeID; + // case ENVELOPE_TYPE_CONTRACT_ID: + // struct + // { + // Hash networkID; + // ContractIDPreimage contractIDPreimage; + // } contractID; + // case ENVELOPE_TYPE_SOROBAN_AUTHORIZATION: + // struct + // { + // Hash networkID; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SorobanAuthorizedInvocation invocation; + // } sorobanAuthorization; + // }; + // + // =========================================================================== + xdr.union("HashIdPreimage", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeOpId", "operationId"], ["envelopeTypePoolRevokeOpId", "revokeId"], ["envelopeTypeContractId", "contractId"], ["envelopeTypeSorobanAuthorization", "sorobanAuthorization"]], + arms: { + operationId: xdr.lookup("HashIdPreimageOperationId"), + revokeId: xdr.lookup("HashIdPreimageRevokeId"), + contractId: xdr.lookup("HashIdPreimageContractId"), + sorobanAuthorization: xdr.lookup("HashIdPreimageSorobanAuthorization") + } + }); + + // === xdr source ============================================================ + // + // enum MemoType + // { + // MEMO_NONE = 0, + // MEMO_TEXT = 1, + // MEMO_ID = 2, + // MEMO_HASH = 3, + // MEMO_RETURN = 4 + // }; + // + // =========================================================================== + xdr["enum"]("MemoType", { + memoNone: 0, + memoText: 1, + memoId: 2, + memoHash: 3, + memoReturn: 4 + }); + + // === xdr source ============================================================ + // + // union Memo switch (MemoType type) + // { + // case MEMO_NONE: + // void; + // case MEMO_TEXT: + // string text<28>; + // case MEMO_ID: + // uint64 id; + // case MEMO_HASH: + // Hash hash; // the hash of what to pull from the content server + // case MEMO_RETURN: + // Hash retHash; // the hash of the tx you are rejecting + // }; + // + // =========================================================================== + xdr.union("Memo", { + switchOn: xdr.lookup("MemoType"), + switchName: "type", + switches: [["memoNone", xdr["void"]()], ["memoText", "text"], ["memoId", "id"], ["memoHash", "hash"], ["memoReturn", "retHash"]], + arms: { + text: xdr.string(28), + id: xdr.lookup("Uint64"), + hash: xdr.lookup("Hash"), + retHash: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // struct TimeBounds + // { + // TimePoint minTime; + // TimePoint maxTime; // 0 here means no maxTime + // }; + // + // =========================================================================== + xdr.struct("TimeBounds", [["minTime", xdr.lookup("TimePoint")], ["maxTime", xdr.lookup("TimePoint")]]); + + // === xdr source ============================================================ + // + // struct LedgerBounds + // { + // uint32 minLedger; + // uint32 maxLedger; // 0 here means no maxLedger + // }; + // + // =========================================================================== + xdr.struct("LedgerBounds", [["minLedger", xdr.lookup("Uint32")], ["maxLedger", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct PreconditionsV2 + // { + // TimeBounds* timeBounds; + // + // // Transaction only valid for ledger numbers n such that + // // minLedger <= n < maxLedger (if maxLedger == 0, then + // // only minLedger is checked) + // LedgerBounds* ledgerBounds; + // + // // If NULL, only valid when sourceAccount's sequence number + // // is seqNum - 1. Otherwise, valid when sourceAccount's + // // sequence number n satisfies minSeqNum <= n < tx.seqNum. + // // Note that after execution the account's sequence number + // // is always raised to tx.seqNum, and a transaction is not + // // valid if tx.seqNum is too high to ensure replay protection. + // SequenceNumber* minSeqNum; + // + // // For the transaction to be valid, the current ledger time must + // // be at least minSeqAge greater than sourceAccount's seqTime. + // Duration minSeqAge; + // + // // For the transaction to be valid, the current ledger number + // // must be at least minSeqLedgerGap greater than sourceAccount's + // // seqLedger. + // uint32 minSeqLedgerGap; + // + // // For the transaction to be valid, there must be a signature + // // corresponding to every Signer in this array, even if the + // // signature is not otherwise required by the sourceAccount or + // // operations. + // SignerKey extraSigners<2>; + // }; + // + // =========================================================================== + xdr.struct("PreconditionsV2", [["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["ledgerBounds", xdr.option(xdr.lookup("LedgerBounds"))], ["minSeqNum", xdr.option(xdr.lookup("SequenceNumber"))], ["minSeqAge", xdr.lookup("Duration")], ["minSeqLedgerGap", xdr.lookup("Uint32")], ["extraSigners", xdr.varArray(xdr.lookup("SignerKey"), 2)]]); + + // === xdr source ============================================================ + // + // enum PreconditionType + // { + // PRECOND_NONE = 0, + // PRECOND_TIME = 1, + // PRECOND_V2 = 2 + // }; + // + // =========================================================================== + xdr["enum"]("PreconditionType", { + precondNone: 0, + precondTime: 1, + precondV2: 2 + }); + + // === xdr source ============================================================ + // + // union Preconditions switch (PreconditionType type) + // { + // case PRECOND_NONE: + // void; + // case PRECOND_TIME: + // TimeBounds timeBounds; + // case PRECOND_V2: + // PreconditionsV2 v2; + // }; + // + // =========================================================================== + xdr.union("Preconditions", { + switchOn: xdr.lookup("PreconditionType"), + switchName: "type", + switches: [["precondNone", xdr["void"]()], ["precondTime", "timeBounds"], ["precondV2", "v2"]], + arms: { + timeBounds: xdr.lookup("TimeBounds"), + v2: xdr.lookup("PreconditionsV2") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerFootprint + // { + // LedgerKey readOnly<>; + // LedgerKey readWrite<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerFootprint", [["readOnly", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["readWrite", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)]]); + + // === xdr source ============================================================ + // + // enum ArchivalProofType + // { + // EXISTENCE = 0, + // NONEXISTENCE = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ArchivalProofType", { + existence: 0, + nonexistence: 1 + }); + + // === xdr source ============================================================ + // + // struct ArchivalProofNode + // { + // uint32 index; + // Hash hash; + // }; + // + // =========================================================================== + xdr.struct("ArchivalProofNode", [["index", xdr.lookup("Uint32")], ["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // typedef ArchivalProofNode ProofLevel<>; + // + // =========================================================================== + xdr.typedef("ProofLevel", xdr.varArray(xdr.lookup("ArchivalProofNode"), 2147483647)); + + // === xdr source ============================================================ + // + // struct NonexistenceProofBody + // { + // ColdArchiveBucketEntry entriesToProve<>; + // + // // Vector of vectors, where proofLevels[level] + // // contains all HashNodes that correspond with that level + // ProofLevel proofLevels<>; + // }; + // + // =========================================================================== + xdr.struct("NonexistenceProofBody", [["entriesToProve", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["proofLevels", xdr.varArray(xdr.lookup("ProofLevel"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct ExistenceProofBody + // { + // LedgerKey keysToProve<>; + // + // // Bounds for each key being proved, where bound[n] + // // corresponds to keysToProve[n] + // ColdArchiveBucketEntry lowBoundEntries<>; + // ColdArchiveBucketEntry highBoundEntries<>; + // + // // Vector of vectors, where proofLevels[level] + // // contains all HashNodes that correspond with that level + // ProofLevel proofLevels<>; + // }; + // + // =========================================================================== + xdr.struct("ExistenceProofBody", [["keysToProve", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["lowBoundEntries", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["highBoundEntries", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["proofLevels", xdr.varArray(xdr.lookup("ProofLevel"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union switch (ArchivalProofType t) + // { + // case EXISTENCE: + // NonexistenceProofBody nonexistenceProof; + // case NONEXISTENCE: + // ExistenceProofBody existenceProof; + // } + // + // =========================================================================== + xdr.union("ArchivalProofBody", { + switchOn: xdr.lookup("ArchivalProofType"), + switchName: "t", + switches: [["existence", "nonexistenceProof"], ["nonexistence", "existenceProof"]], + arms: { + nonexistenceProof: xdr.lookup("NonexistenceProofBody"), + existenceProof: xdr.lookup("ExistenceProofBody") + } + }); + + // === xdr source ============================================================ + // + // struct ArchivalProof + // { + // uint32 epoch; // AST Subtree for this proof + // + // union switch (ArchivalProofType t) + // { + // case EXISTENCE: + // NonexistenceProofBody nonexistenceProof; + // case NONEXISTENCE: + // ExistenceProofBody existenceProof; + // } body; + // }; + // + // =========================================================================== + xdr.struct("ArchivalProof", [["epoch", xdr.lookup("Uint32")], ["body", xdr.lookup("ArchivalProofBody")]]); + + // === xdr source ============================================================ + // + // struct SorobanResources + // { + // // The ledger footprint of the transaction. + // LedgerFootprint footprint; + // // The maximum number of instructions this transaction can use + // uint32 instructions; + // + // // The maximum number of bytes this transaction can read from ledger + // uint32 readBytes; + // // The maximum number of bytes this transaction can write to ledger + // uint32 writeBytes; + // }; + // + // =========================================================================== + xdr.struct("SorobanResources", [["footprint", xdr.lookup("LedgerFootprint")], ["instructions", xdr.lookup("Uint32")], ["readBytes", xdr.lookup("Uint32")], ["writeBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SorobanTransactionData + // { + // ExtensionPoint ext; + // SorobanResources resources; + // // Amount of the transaction `fee` allocated to the Soroban resource fees. + // // The fraction of `resourceFee` corresponding to `resources` specified + // // above is *not* refundable (i.e. fees for instructions, ledger I/O), as + // // well as fees for the transaction size. + // // The remaining part of the fee is refundable and the charged value is + // // based on the actual consumption of refundable resources (events, ledger + // // rent bumps). + // // The `inclusionFee` used for prioritization of the transaction is defined + // // as `tx.fee - resourceFee`. + // int64 resourceFee; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionData", [["ext", xdr.lookup("ExtensionPoint")], ["resources", xdr.lookup("SorobanResources")], ["resourceFee", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionV0Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionV0 + // { + // uint256 sourceAccountEd25519; + // uint32 fee; + // SequenceNumber seqNum; + // TimeBounds* timeBounds; + // Memo memo; + // Operation operations; + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionV0", [["sourceAccountEd25519", xdr.lookup("Uint256")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), xdr.lookup("MAX_OPS_PER_TX"))], ["ext", xdr.lookup("TransactionV0Ext")]]); + + // === xdr source ============================================================ + // + // struct TransactionV0Envelope + // { + // TransactionV0 tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("TransactionV0Envelope", [["tx", xdr.lookup("TransactionV0")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionData sorobanData; + // } + // + // =========================================================================== + xdr.union("TransactionExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "sorobanData"]], + arms: { + sorobanData: xdr.lookup("SorobanTransactionData") + } + }); + + // === xdr source ============================================================ + // + // struct Transaction + // { + // // account used to run the transaction + // MuxedAccount sourceAccount; + // + // // the fee the sourceAccount will pay + // uint32 fee; + // + // // sequence number to consume in the account + // SequenceNumber seqNum; + // + // // validity conditions + // Preconditions cond; + // + // Memo memo; + // + // Operation operations; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionData sorobanData; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("Transaction", [["sourceAccount", xdr.lookup("MuxedAccount")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["cond", xdr.lookup("Preconditions")], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), xdr.lookup("MAX_OPS_PER_TX"))], ["ext", xdr.lookup("TransactionExt")]]); + + // === xdr source ============================================================ + // + // struct TransactionV1Envelope + // { + // Transaction tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("TransactionV1Envelope", [["tx", xdr.lookup("Transaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // } + // + // =========================================================================== + xdr.union("FeeBumpTransactionInnerTx", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTx", "v1"]], + arms: { + v1: xdr.lookup("TransactionV1Envelope") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("FeeBumpTransactionExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct FeeBumpTransaction + // { + // MuxedAccount feeSource; + // int64 fee; + // union switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // } + // innerTx; + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("FeeBumpTransaction", [["feeSource", xdr.lookup("MuxedAccount")], ["fee", xdr.lookup("Int64")], ["innerTx", xdr.lookup("FeeBumpTransactionInnerTx")], ["ext", xdr.lookup("FeeBumpTransactionExt")]]); + + // === xdr source ============================================================ + // + // struct FeeBumpTransactionEnvelope + // { + // FeeBumpTransaction tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("FeeBumpTransactionEnvelope", [["tx", xdr.lookup("FeeBumpTransaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union TransactionEnvelope switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX_V0: + // TransactionV0Envelope v0; + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransactionEnvelope feeBump; + // }; + // + // =========================================================================== + xdr.union("TransactionEnvelope", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTxV0", "v0"], ["envelopeTypeTx", "v1"], ["envelopeTypeTxFeeBump", "feeBump"]], + arms: { + v0: xdr.lookup("TransactionV0Envelope"), + v1: xdr.lookup("TransactionV1Envelope"), + feeBump: xdr.lookup("FeeBumpTransactionEnvelope") + } + }); + + // === xdr source ============================================================ + // + // union switch (EnvelopeType type) + // { + // // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // case ENVELOPE_TYPE_TX: + // Transaction tx; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransaction feeBump; + // } + // + // =========================================================================== + xdr.union("TransactionSignaturePayloadTaggedTransaction", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTx", "tx"], ["envelopeTypeTxFeeBump", "feeBump"]], + arms: { + tx: xdr.lookup("Transaction"), + feeBump: xdr.lookup("FeeBumpTransaction") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionSignaturePayload + // { + // Hash networkId; + // union switch (EnvelopeType type) + // { + // // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // case ENVELOPE_TYPE_TX: + // Transaction tx; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransaction feeBump; + // } + // taggedTransaction; + // }; + // + // =========================================================================== + xdr.struct("TransactionSignaturePayload", [["networkId", xdr.lookup("Hash")], ["taggedTransaction", xdr.lookup("TransactionSignaturePayloadTaggedTransaction")]]); + + // === xdr source ============================================================ + // + // enum ClaimAtomType + // { + // CLAIM_ATOM_TYPE_V0 = 0, + // CLAIM_ATOM_TYPE_ORDER_BOOK = 1, + // CLAIM_ATOM_TYPE_LIQUIDITY_POOL = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimAtomType", { + claimAtomTypeV0: 0, + claimAtomTypeOrderBook: 1, + claimAtomTypeLiquidityPool: 2 + }); + + // === xdr source ============================================================ + // + // struct ClaimOfferAtomV0 + // { + // // emitted to identify the offer + // uint256 sellerEd25519; // Account that owns the offer + // int64 offerID; + // + // // amount and asset taken from the owner + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the owner + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimOfferAtomV0", [["sellerEd25519", xdr.lookup("Uint256")], ["offerId", xdr.lookup("Int64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClaimOfferAtom + // { + // // emitted to identify the offer + // AccountID sellerID; // Account that owns the offer + // int64 offerID; + // + // // amount and asset taken from the owner + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the owner + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimOfferAtom", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClaimLiquidityAtom + // { + // PoolID liquidityPoolID; + // + // // amount and asset taken from the pool + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the pool + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimLiquidityAtom", [["liquidityPoolId", xdr.lookup("PoolId")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union ClaimAtom switch (ClaimAtomType type) + // { + // case CLAIM_ATOM_TYPE_V0: + // ClaimOfferAtomV0 v0; + // case CLAIM_ATOM_TYPE_ORDER_BOOK: + // ClaimOfferAtom orderBook; + // case CLAIM_ATOM_TYPE_LIQUIDITY_POOL: + // ClaimLiquidityAtom liquidityPool; + // }; + // + // =========================================================================== + xdr.union("ClaimAtom", { + switchOn: xdr.lookup("ClaimAtomType"), + switchName: "type", + switches: [["claimAtomTypeV0", "v0"], ["claimAtomTypeOrderBook", "orderBook"], ["claimAtomTypeLiquidityPool", "liquidityPool"]], + arms: { + v0: xdr.lookup("ClaimOfferAtomV0"), + orderBook: xdr.lookup("ClaimOfferAtom"), + liquidityPool: xdr.lookup("ClaimLiquidityAtom") + } + }); + + // === xdr source ============================================================ + // + // enum CreateAccountResultCode + // { + // // codes considered as "success" for the operation + // CREATE_ACCOUNT_SUCCESS = 0, // account was created + // + // // codes considered as "failure" for the operation + // CREATE_ACCOUNT_MALFORMED = -1, // invalid destination + // CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account + // CREATE_ACCOUNT_LOW_RESERVE = + // -3, // would create an account below the min reserve + // CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists + // }; + // + // =========================================================================== + xdr["enum"]("CreateAccountResultCode", { + createAccountSuccess: 0, + createAccountMalformed: -1, + createAccountUnderfunded: -2, + createAccountLowReserve: -3, + createAccountAlreadyExist: -4 + }); + + // === xdr source ============================================================ + // + // union CreateAccountResult switch (CreateAccountResultCode code) + // { + // case CREATE_ACCOUNT_SUCCESS: + // void; + // case CREATE_ACCOUNT_MALFORMED: + // case CREATE_ACCOUNT_UNDERFUNDED: + // case CREATE_ACCOUNT_LOW_RESERVE: + // case CREATE_ACCOUNT_ALREADY_EXIST: + // void; + // }; + // + // =========================================================================== + xdr.union("CreateAccountResult", { + switchOn: xdr.lookup("CreateAccountResultCode"), + switchName: "code", + switches: [["createAccountSuccess", xdr["void"]()], ["createAccountMalformed", xdr["void"]()], ["createAccountUnderfunded", xdr["void"]()], ["createAccountLowReserve", xdr["void"]()], ["createAccountAlreadyExist", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum PaymentResultCode + // { + // // codes considered as "success" for the operation + // PAYMENT_SUCCESS = 0, // payment successfully completed + // + // // codes considered as "failure" for the operation + // PAYMENT_MALFORMED = -1, // bad input + // PAYMENT_UNDERFUNDED = -2, // not enough funds in source account + // PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account + // PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer + // PAYMENT_NO_DESTINATION = -5, // destination account does not exist + // PAYMENT_NO_TRUST = -6, // destination missing a trust line for asset + // PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset + // PAYMENT_LINE_FULL = -8, // destination would go above their limit + // PAYMENT_NO_ISSUER = -9 // missing issuer on asset + // }; + // + // =========================================================================== + xdr["enum"]("PaymentResultCode", { + paymentSuccess: 0, + paymentMalformed: -1, + paymentUnderfunded: -2, + paymentSrcNoTrust: -3, + paymentSrcNotAuthorized: -4, + paymentNoDestination: -5, + paymentNoTrust: -6, + paymentNotAuthorized: -7, + paymentLineFull: -8, + paymentNoIssuer: -9 + }); + + // === xdr source ============================================================ + // + // union PaymentResult switch (PaymentResultCode code) + // { + // case PAYMENT_SUCCESS: + // void; + // case PAYMENT_MALFORMED: + // case PAYMENT_UNDERFUNDED: + // case PAYMENT_SRC_NO_TRUST: + // case PAYMENT_SRC_NOT_AUTHORIZED: + // case PAYMENT_NO_DESTINATION: + // case PAYMENT_NO_TRUST: + // case PAYMENT_NOT_AUTHORIZED: + // case PAYMENT_LINE_FULL: + // case PAYMENT_NO_ISSUER: + // void; + // }; + // + // =========================================================================== + xdr.union("PaymentResult", { + switchOn: xdr.lookup("PaymentResultCode"), + switchName: "code", + switches: [["paymentSuccess", xdr["void"]()], ["paymentMalformed", xdr["void"]()], ["paymentUnderfunded", xdr["void"]()], ["paymentSrcNoTrust", xdr["void"]()], ["paymentSrcNotAuthorized", xdr["void"]()], ["paymentNoDestination", xdr["void"]()], ["paymentNoTrust", xdr["void"]()], ["paymentNotAuthorized", xdr["void"]()], ["paymentLineFull", xdr["void"]()], ["paymentNoIssuer", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum PathPaymentStrictReceiveResultCode + // { + // // codes considered as "success" for the operation + // PATH_PAYMENT_STRICT_RECEIVE_SUCCESS = 0, // success + // + // // codes considered as "failure" for the operation + // PATH_PAYMENT_STRICT_RECEIVE_MALFORMED = -1, // bad input + // PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED = + // -2, // not enough funds in source account + // PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST = + // -3, // no trust line on source account + // PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED = + // -4, // source not authorized to transfer + // PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION = + // -5, // destination account does not exist + // PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST = + // -6, // dest missing a trust line for asset + // PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED = + // -7, // dest not authorized to hold asset + // PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL = + // -8, // dest would go above their limit + // PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER = -9, // missing issuer on one asset + // PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS = + // -10, // not enough offers to satisfy path + // PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF = + // -11, // would cross one of its own offers + // PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX = -12 // could not satisfy sendmax + // }; + // + // =========================================================================== + xdr["enum"]("PathPaymentStrictReceiveResultCode", { + pathPaymentStrictReceiveSuccess: 0, + pathPaymentStrictReceiveMalformed: -1, + pathPaymentStrictReceiveUnderfunded: -2, + pathPaymentStrictReceiveSrcNoTrust: -3, + pathPaymentStrictReceiveSrcNotAuthorized: -4, + pathPaymentStrictReceiveNoDestination: -5, + pathPaymentStrictReceiveNoTrust: -6, + pathPaymentStrictReceiveNotAuthorized: -7, + pathPaymentStrictReceiveLineFull: -8, + pathPaymentStrictReceiveNoIssuer: -9, + pathPaymentStrictReceiveTooFewOffers: -10, + pathPaymentStrictReceiveOfferCrossSelf: -11, + pathPaymentStrictReceiveOverSendmax: -12 + }); + + // === xdr source ============================================================ + // + // struct SimplePaymentResult + // { + // AccountID destination; + // Asset asset; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("SimplePaymentResult", [["destination", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } + // + // =========================================================================== + xdr.struct("PathPaymentStrictReceiveResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]); + + // === xdr source ============================================================ + // + // union PathPaymentStrictReceiveResult switch ( + // PathPaymentStrictReceiveResultCode code) + // { + // case PATH_PAYMENT_STRICT_RECEIVE_SUCCESS: + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } success; + // case PATH_PAYMENT_STRICT_RECEIVE_MALFORMED: + // case PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED: + // case PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST: + // case PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION: + // case PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST: + // case PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL: + // void; + // case PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER: + // Asset noIssuer; // the asset that caused the error + // case PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS: + // case PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF: + // case PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX: + // void; + // }; + // + // =========================================================================== + xdr.union("PathPaymentStrictReceiveResult", { + switchOn: xdr.lookup("PathPaymentStrictReceiveResultCode"), + switchName: "code", + switches: [["pathPaymentStrictReceiveSuccess", "success"], ["pathPaymentStrictReceiveMalformed", xdr["void"]()], ["pathPaymentStrictReceiveUnderfunded", xdr["void"]()], ["pathPaymentStrictReceiveSrcNoTrust", xdr["void"]()], ["pathPaymentStrictReceiveSrcNotAuthorized", xdr["void"]()], ["pathPaymentStrictReceiveNoDestination", xdr["void"]()], ["pathPaymentStrictReceiveNoTrust", xdr["void"]()], ["pathPaymentStrictReceiveNotAuthorized", xdr["void"]()], ["pathPaymentStrictReceiveLineFull", xdr["void"]()], ["pathPaymentStrictReceiveNoIssuer", "noIssuer"], ["pathPaymentStrictReceiveTooFewOffers", xdr["void"]()], ["pathPaymentStrictReceiveOfferCrossSelf", xdr["void"]()], ["pathPaymentStrictReceiveOverSendmax", xdr["void"]()]], + arms: { + success: xdr.lookup("PathPaymentStrictReceiveResultSuccess"), + noIssuer: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // enum PathPaymentStrictSendResultCode + // { + // // codes considered as "success" for the operation + // PATH_PAYMENT_STRICT_SEND_SUCCESS = 0, // success + // + // // codes considered as "failure" for the operation + // PATH_PAYMENT_STRICT_SEND_MALFORMED = -1, // bad input + // PATH_PAYMENT_STRICT_SEND_UNDERFUNDED = + // -2, // not enough funds in source account + // PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST = + // -3, // no trust line on source account + // PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED = + // -4, // source not authorized to transfer + // PATH_PAYMENT_STRICT_SEND_NO_DESTINATION = + // -5, // destination account does not exist + // PATH_PAYMENT_STRICT_SEND_NO_TRUST = + // -6, // dest missing a trust line for asset + // PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED = + // -7, // dest not authorized to hold asset + // PATH_PAYMENT_STRICT_SEND_LINE_FULL = -8, // dest would go above their limit + // PATH_PAYMENT_STRICT_SEND_NO_ISSUER = -9, // missing issuer on one asset + // PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS = + // -10, // not enough offers to satisfy path + // PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF = + // -11, // would cross one of its own offers + // PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN = -12 // could not satisfy destMin + // }; + // + // =========================================================================== + xdr["enum"]("PathPaymentStrictSendResultCode", { + pathPaymentStrictSendSuccess: 0, + pathPaymentStrictSendMalformed: -1, + pathPaymentStrictSendUnderfunded: -2, + pathPaymentStrictSendSrcNoTrust: -3, + pathPaymentStrictSendSrcNotAuthorized: -4, + pathPaymentStrictSendNoDestination: -5, + pathPaymentStrictSendNoTrust: -6, + pathPaymentStrictSendNotAuthorized: -7, + pathPaymentStrictSendLineFull: -8, + pathPaymentStrictSendNoIssuer: -9, + pathPaymentStrictSendTooFewOffers: -10, + pathPaymentStrictSendOfferCrossSelf: -11, + pathPaymentStrictSendUnderDestmin: -12 + }); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } + // + // =========================================================================== + xdr.struct("PathPaymentStrictSendResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]); + + // === xdr source ============================================================ + // + // union PathPaymentStrictSendResult switch (PathPaymentStrictSendResultCode code) + // { + // case PATH_PAYMENT_STRICT_SEND_SUCCESS: + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } success; + // case PATH_PAYMENT_STRICT_SEND_MALFORMED: + // case PATH_PAYMENT_STRICT_SEND_UNDERFUNDED: + // case PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST: + // case PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_SEND_NO_DESTINATION: + // case PATH_PAYMENT_STRICT_SEND_NO_TRUST: + // case PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_SEND_LINE_FULL: + // void; + // case PATH_PAYMENT_STRICT_SEND_NO_ISSUER: + // Asset noIssuer; // the asset that caused the error + // case PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS: + // case PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF: + // case PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN: + // void; + // }; + // + // =========================================================================== + xdr.union("PathPaymentStrictSendResult", { + switchOn: xdr.lookup("PathPaymentStrictSendResultCode"), + switchName: "code", + switches: [["pathPaymentStrictSendSuccess", "success"], ["pathPaymentStrictSendMalformed", xdr["void"]()], ["pathPaymentStrictSendUnderfunded", xdr["void"]()], ["pathPaymentStrictSendSrcNoTrust", xdr["void"]()], ["pathPaymentStrictSendSrcNotAuthorized", xdr["void"]()], ["pathPaymentStrictSendNoDestination", xdr["void"]()], ["pathPaymentStrictSendNoTrust", xdr["void"]()], ["pathPaymentStrictSendNotAuthorized", xdr["void"]()], ["pathPaymentStrictSendLineFull", xdr["void"]()], ["pathPaymentStrictSendNoIssuer", "noIssuer"], ["pathPaymentStrictSendTooFewOffers", xdr["void"]()], ["pathPaymentStrictSendOfferCrossSelf", xdr["void"]()], ["pathPaymentStrictSendUnderDestmin", xdr["void"]()]], + arms: { + success: xdr.lookup("PathPaymentStrictSendResultSuccess"), + noIssuer: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // enum ManageSellOfferResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_SELL_OFFER_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // MANAGE_SELL_OFFER_MALFORMED = -1, // generated offer would be invalid + // MANAGE_SELL_OFFER_SELL_NO_TRUST = + // -2, // no trust line for what we're selling + // MANAGE_SELL_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying + // MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell + // MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy + // MANAGE_SELL_OFFER_LINE_FULL = -6, // can't receive more of what it's buying + // MANAGE_SELL_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell + // MANAGE_SELL_OFFER_CROSS_SELF = + // -8, // would cross an offer from the same user + // MANAGE_SELL_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling + // MANAGE_SELL_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying + // + // // update errors + // MANAGE_SELL_OFFER_NOT_FOUND = + // -11, // offerID does not match an existing offer + // + // MANAGE_SELL_OFFER_LOW_RESERVE = + // -12 // not enough funds to create a new Offer + // }; + // + // =========================================================================== + xdr["enum"]("ManageSellOfferResultCode", { + manageSellOfferSuccess: 0, + manageSellOfferMalformed: -1, + manageSellOfferSellNoTrust: -2, + manageSellOfferBuyNoTrust: -3, + manageSellOfferSellNotAuthorized: -4, + manageSellOfferBuyNotAuthorized: -5, + manageSellOfferLineFull: -6, + manageSellOfferUnderfunded: -7, + manageSellOfferCrossSelf: -8, + manageSellOfferSellNoIssuer: -9, + manageSellOfferBuyNoIssuer: -10, + manageSellOfferNotFound: -11, + manageSellOfferLowReserve: -12 + }); + + // === xdr source ============================================================ + // + // enum ManageOfferEffect + // { + // MANAGE_OFFER_CREATED = 0, + // MANAGE_OFFER_UPDATED = 1, + // MANAGE_OFFER_DELETED = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ManageOfferEffect", { + manageOfferCreated: 0, + manageOfferUpdated: 1, + manageOfferDeleted: 2 + }); + + // === xdr source ============================================================ + // + // union switch (ManageOfferEffect effect) + // { + // case MANAGE_OFFER_CREATED: + // case MANAGE_OFFER_UPDATED: + // OfferEntry offer; + // case MANAGE_OFFER_DELETED: + // void; + // } + // + // =========================================================================== + xdr.union("ManageOfferSuccessResultOffer", { + switchOn: xdr.lookup("ManageOfferEffect"), + switchName: "effect", + switches: [["manageOfferCreated", "offer"], ["manageOfferUpdated", "offer"], ["manageOfferDeleted", xdr["void"]()]], + arms: { + offer: xdr.lookup("OfferEntry") + } + }); + + // === xdr source ============================================================ + // + // struct ManageOfferSuccessResult + // { + // // offers that got claimed while creating this offer + // ClaimAtom offersClaimed<>; + // + // union switch (ManageOfferEffect effect) + // { + // case MANAGE_OFFER_CREATED: + // case MANAGE_OFFER_UPDATED: + // OfferEntry offer; + // case MANAGE_OFFER_DELETED: + // void; + // } + // offer; + // }; + // + // =========================================================================== + xdr.struct("ManageOfferSuccessResult", [["offersClaimed", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["offer", xdr.lookup("ManageOfferSuccessResultOffer")]]); + + // === xdr source ============================================================ + // + // union ManageSellOfferResult switch (ManageSellOfferResultCode code) + // { + // case MANAGE_SELL_OFFER_SUCCESS: + // ManageOfferSuccessResult success; + // case MANAGE_SELL_OFFER_MALFORMED: + // case MANAGE_SELL_OFFER_SELL_NO_TRUST: + // case MANAGE_SELL_OFFER_BUY_NO_TRUST: + // case MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED: + // case MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED: + // case MANAGE_SELL_OFFER_LINE_FULL: + // case MANAGE_SELL_OFFER_UNDERFUNDED: + // case MANAGE_SELL_OFFER_CROSS_SELF: + // case MANAGE_SELL_OFFER_SELL_NO_ISSUER: + // case MANAGE_SELL_OFFER_BUY_NO_ISSUER: + // case MANAGE_SELL_OFFER_NOT_FOUND: + // case MANAGE_SELL_OFFER_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageSellOfferResult", { + switchOn: xdr.lookup("ManageSellOfferResultCode"), + switchName: "code", + switches: [["manageSellOfferSuccess", "success"], ["manageSellOfferMalformed", xdr["void"]()], ["manageSellOfferSellNoTrust", xdr["void"]()], ["manageSellOfferBuyNoTrust", xdr["void"]()], ["manageSellOfferSellNotAuthorized", xdr["void"]()], ["manageSellOfferBuyNotAuthorized", xdr["void"]()], ["manageSellOfferLineFull", xdr["void"]()], ["manageSellOfferUnderfunded", xdr["void"]()], ["manageSellOfferCrossSelf", xdr["void"]()], ["manageSellOfferSellNoIssuer", xdr["void"]()], ["manageSellOfferBuyNoIssuer", xdr["void"]()], ["manageSellOfferNotFound", xdr["void"]()], ["manageSellOfferLowReserve", xdr["void"]()]], + arms: { + success: xdr.lookup("ManageOfferSuccessResult") + } + }); + + // === xdr source ============================================================ + // + // enum ManageBuyOfferResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_BUY_OFFER_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // MANAGE_BUY_OFFER_MALFORMED = -1, // generated offer would be invalid + // MANAGE_BUY_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling + // MANAGE_BUY_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying + // MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell + // MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy + // MANAGE_BUY_OFFER_LINE_FULL = -6, // can't receive more of what it's buying + // MANAGE_BUY_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell + // MANAGE_BUY_OFFER_CROSS_SELF = -8, // would cross an offer from the same user + // MANAGE_BUY_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling + // MANAGE_BUY_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying + // + // // update errors + // MANAGE_BUY_OFFER_NOT_FOUND = + // -11, // offerID does not match an existing offer + // + // MANAGE_BUY_OFFER_LOW_RESERVE = -12 // not enough funds to create a new Offer + // }; + // + // =========================================================================== + xdr["enum"]("ManageBuyOfferResultCode", { + manageBuyOfferSuccess: 0, + manageBuyOfferMalformed: -1, + manageBuyOfferSellNoTrust: -2, + manageBuyOfferBuyNoTrust: -3, + manageBuyOfferSellNotAuthorized: -4, + manageBuyOfferBuyNotAuthorized: -5, + manageBuyOfferLineFull: -6, + manageBuyOfferUnderfunded: -7, + manageBuyOfferCrossSelf: -8, + manageBuyOfferSellNoIssuer: -9, + manageBuyOfferBuyNoIssuer: -10, + manageBuyOfferNotFound: -11, + manageBuyOfferLowReserve: -12 + }); + + // === xdr source ============================================================ + // + // union ManageBuyOfferResult switch (ManageBuyOfferResultCode code) + // { + // case MANAGE_BUY_OFFER_SUCCESS: + // ManageOfferSuccessResult success; + // case MANAGE_BUY_OFFER_MALFORMED: + // case MANAGE_BUY_OFFER_SELL_NO_TRUST: + // case MANAGE_BUY_OFFER_BUY_NO_TRUST: + // case MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED: + // case MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED: + // case MANAGE_BUY_OFFER_LINE_FULL: + // case MANAGE_BUY_OFFER_UNDERFUNDED: + // case MANAGE_BUY_OFFER_CROSS_SELF: + // case MANAGE_BUY_OFFER_SELL_NO_ISSUER: + // case MANAGE_BUY_OFFER_BUY_NO_ISSUER: + // case MANAGE_BUY_OFFER_NOT_FOUND: + // case MANAGE_BUY_OFFER_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageBuyOfferResult", { + switchOn: xdr.lookup("ManageBuyOfferResultCode"), + switchName: "code", + switches: [["manageBuyOfferSuccess", "success"], ["manageBuyOfferMalformed", xdr["void"]()], ["manageBuyOfferSellNoTrust", xdr["void"]()], ["manageBuyOfferBuyNoTrust", xdr["void"]()], ["manageBuyOfferSellNotAuthorized", xdr["void"]()], ["manageBuyOfferBuyNotAuthorized", xdr["void"]()], ["manageBuyOfferLineFull", xdr["void"]()], ["manageBuyOfferUnderfunded", xdr["void"]()], ["manageBuyOfferCrossSelf", xdr["void"]()], ["manageBuyOfferSellNoIssuer", xdr["void"]()], ["manageBuyOfferBuyNoIssuer", xdr["void"]()], ["manageBuyOfferNotFound", xdr["void"]()], ["manageBuyOfferLowReserve", xdr["void"]()]], + arms: { + success: xdr.lookup("ManageOfferSuccessResult") + } + }); + + // === xdr source ============================================================ + // + // enum SetOptionsResultCode + // { + // // codes considered as "success" for the operation + // SET_OPTIONS_SUCCESS = 0, + // // codes considered as "failure" for the operation + // SET_OPTIONS_LOW_RESERVE = -1, // not enough funds to add a signer + // SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached + // SET_OPTIONS_BAD_FLAGS = -3, // invalid combination of clear/set flags + // SET_OPTIONS_INVALID_INFLATION = -4, // inflation account does not exist + // SET_OPTIONS_CANT_CHANGE = -5, // can no longer change this option + // SET_OPTIONS_UNKNOWN_FLAG = -6, // can't set an unknown flag + // SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold + // SET_OPTIONS_BAD_SIGNER = -8, // signer cannot be masterkey + // SET_OPTIONS_INVALID_HOME_DOMAIN = -9, // malformed home domain + // SET_OPTIONS_AUTH_REVOCABLE_REQUIRED = + // -10 // auth revocable is required for clawback + // }; + // + // =========================================================================== + xdr["enum"]("SetOptionsResultCode", { + setOptionsSuccess: 0, + setOptionsLowReserve: -1, + setOptionsTooManySigners: -2, + setOptionsBadFlags: -3, + setOptionsInvalidInflation: -4, + setOptionsCantChange: -5, + setOptionsUnknownFlag: -6, + setOptionsThresholdOutOfRange: -7, + setOptionsBadSigner: -8, + setOptionsInvalidHomeDomain: -9, + setOptionsAuthRevocableRequired: -10 + }); + + // === xdr source ============================================================ + // + // union SetOptionsResult switch (SetOptionsResultCode code) + // { + // case SET_OPTIONS_SUCCESS: + // void; + // case SET_OPTIONS_LOW_RESERVE: + // case SET_OPTIONS_TOO_MANY_SIGNERS: + // case SET_OPTIONS_BAD_FLAGS: + // case SET_OPTIONS_INVALID_INFLATION: + // case SET_OPTIONS_CANT_CHANGE: + // case SET_OPTIONS_UNKNOWN_FLAG: + // case SET_OPTIONS_THRESHOLD_OUT_OF_RANGE: + // case SET_OPTIONS_BAD_SIGNER: + // case SET_OPTIONS_INVALID_HOME_DOMAIN: + // case SET_OPTIONS_AUTH_REVOCABLE_REQUIRED: + // void; + // }; + // + // =========================================================================== + xdr.union("SetOptionsResult", { + switchOn: xdr.lookup("SetOptionsResultCode"), + switchName: "code", + switches: [["setOptionsSuccess", xdr["void"]()], ["setOptionsLowReserve", xdr["void"]()], ["setOptionsTooManySigners", xdr["void"]()], ["setOptionsBadFlags", xdr["void"]()], ["setOptionsInvalidInflation", xdr["void"]()], ["setOptionsCantChange", xdr["void"]()], ["setOptionsUnknownFlag", xdr["void"]()], ["setOptionsThresholdOutOfRange", xdr["void"]()], ["setOptionsBadSigner", xdr["void"]()], ["setOptionsInvalidHomeDomain", xdr["void"]()], ["setOptionsAuthRevocableRequired", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ChangeTrustResultCode + // { + // // codes considered as "success" for the operation + // CHANGE_TRUST_SUCCESS = 0, + // // codes considered as "failure" for the operation + // CHANGE_TRUST_MALFORMED = -1, // bad input + // CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer + // CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance + // // cannot create with a limit of 0 + // CHANGE_TRUST_LOW_RESERVE = + // -4, // not enough funds to create a new trust line, + // CHANGE_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed + // CHANGE_TRUST_TRUST_LINE_MISSING = -6, // Asset trustline is missing for pool + // CHANGE_TRUST_CANNOT_DELETE = + // -7, // Asset trustline is still referenced in a pool + // CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES = + // -8 // Asset trustline is deauthorized + // }; + // + // =========================================================================== + xdr["enum"]("ChangeTrustResultCode", { + changeTrustSuccess: 0, + changeTrustMalformed: -1, + changeTrustNoIssuer: -2, + changeTrustInvalidLimit: -3, + changeTrustLowReserve: -4, + changeTrustSelfNotAllowed: -5, + changeTrustTrustLineMissing: -6, + changeTrustCannotDelete: -7, + changeTrustNotAuthMaintainLiabilities: -8 + }); + + // === xdr source ============================================================ + // + // union ChangeTrustResult switch (ChangeTrustResultCode code) + // { + // case CHANGE_TRUST_SUCCESS: + // void; + // case CHANGE_TRUST_MALFORMED: + // case CHANGE_TRUST_NO_ISSUER: + // case CHANGE_TRUST_INVALID_LIMIT: + // case CHANGE_TRUST_LOW_RESERVE: + // case CHANGE_TRUST_SELF_NOT_ALLOWED: + // case CHANGE_TRUST_TRUST_LINE_MISSING: + // case CHANGE_TRUST_CANNOT_DELETE: + // case CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES: + // void; + // }; + // + // =========================================================================== + xdr.union("ChangeTrustResult", { + switchOn: xdr.lookup("ChangeTrustResultCode"), + switchName: "code", + switches: [["changeTrustSuccess", xdr["void"]()], ["changeTrustMalformed", xdr["void"]()], ["changeTrustNoIssuer", xdr["void"]()], ["changeTrustInvalidLimit", xdr["void"]()], ["changeTrustLowReserve", xdr["void"]()], ["changeTrustSelfNotAllowed", xdr["void"]()], ["changeTrustTrustLineMissing", xdr["void"]()], ["changeTrustCannotDelete", xdr["void"]()], ["changeTrustNotAuthMaintainLiabilities", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum AllowTrustResultCode + // { + // // codes considered as "success" for the operation + // ALLOW_TRUST_SUCCESS = 0, + // // codes considered as "failure" for the operation + // ALLOW_TRUST_MALFORMED = -1, // asset is not ASSET_TYPE_ALPHANUM + // ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline + // // source account does not require trust + // ALLOW_TRUST_TRUST_NOT_REQUIRED = -3, + // ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust, + // ALLOW_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed + // ALLOW_TRUST_LOW_RESERVE = -6 // claimable balances can't be created + // // on revoke due to low reserves + // }; + // + // =========================================================================== + xdr["enum"]("AllowTrustResultCode", { + allowTrustSuccess: 0, + allowTrustMalformed: -1, + allowTrustNoTrustLine: -2, + allowTrustTrustNotRequired: -3, + allowTrustCantRevoke: -4, + allowTrustSelfNotAllowed: -5, + allowTrustLowReserve: -6 + }); + + // === xdr source ============================================================ + // + // union AllowTrustResult switch (AllowTrustResultCode code) + // { + // case ALLOW_TRUST_SUCCESS: + // void; + // case ALLOW_TRUST_MALFORMED: + // case ALLOW_TRUST_NO_TRUST_LINE: + // case ALLOW_TRUST_TRUST_NOT_REQUIRED: + // case ALLOW_TRUST_CANT_REVOKE: + // case ALLOW_TRUST_SELF_NOT_ALLOWED: + // case ALLOW_TRUST_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("AllowTrustResult", { + switchOn: xdr.lookup("AllowTrustResultCode"), + switchName: "code", + switches: [["allowTrustSuccess", xdr["void"]()], ["allowTrustMalformed", xdr["void"]()], ["allowTrustNoTrustLine", xdr["void"]()], ["allowTrustTrustNotRequired", xdr["void"]()], ["allowTrustCantRevoke", xdr["void"]()], ["allowTrustSelfNotAllowed", xdr["void"]()], ["allowTrustLowReserve", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum AccountMergeResultCode + // { + // // codes considered as "success" for the operation + // ACCOUNT_MERGE_SUCCESS = 0, + // // codes considered as "failure" for the operation + // ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself + // ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist + // ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set + // ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers + // ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5, // sequence number is over max allowed + // ACCOUNT_MERGE_DEST_FULL = -6, // can't add source balance to + // // destination balance + // ACCOUNT_MERGE_IS_SPONSOR = -7 // can't merge account that is a sponsor + // }; + // + // =========================================================================== + xdr["enum"]("AccountMergeResultCode", { + accountMergeSuccess: 0, + accountMergeMalformed: -1, + accountMergeNoAccount: -2, + accountMergeImmutableSet: -3, + accountMergeHasSubEntries: -4, + accountMergeSeqnumTooFar: -5, + accountMergeDestFull: -6, + accountMergeIsSponsor: -7 + }); + + // === xdr source ============================================================ + // + // union AccountMergeResult switch (AccountMergeResultCode code) + // { + // case ACCOUNT_MERGE_SUCCESS: + // int64 sourceAccountBalance; // how much got transferred from source account + // case ACCOUNT_MERGE_MALFORMED: + // case ACCOUNT_MERGE_NO_ACCOUNT: + // case ACCOUNT_MERGE_IMMUTABLE_SET: + // case ACCOUNT_MERGE_HAS_SUB_ENTRIES: + // case ACCOUNT_MERGE_SEQNUM_TOO_FAR: + // case ACCOUNT_MERGE_DEST_FULL: + // case ACCOUNT_MERGE_IS_SPONSOR: + // void; + // }; + // + // =========================================================================== + xdr.union("AccountMergeResult", { + switchOn: xdr.lookup("AccountMergeResultCode"), + switchName: "code", + switches: [["accountMergeSuccess", "sourceAccountBalance"], ["accountMergeMalformed", xdr["void"]()], ["accountMergeNoAccount", xdr["void"]()], ["accountMergeImmutableSet", xdr["void"]()], ["accountMergeHasSubEntries", xdr["void"]()], ["accountMergeSeqnumTooFar", xdr["void"]()], ["accountMergeDestFull", xdr["void"]()], ["accountMergeIsSponsor", xdr["void"]()]], + arms: { + sourceAccountBalance: xdr.lookup("Int64") + } + }); + + // === xdr source ============================================================ + // + // enum InflationResultCode + // { + // // codes considered as "success" for the operation + // INFLATION_SUCCESS = 0, + // // codes considered as "failure" for the operation + // INFLATION_NOT_TIME = -1 + // }; + // + // =========================================================================== + xdr["enum"]("InflationResultCode", { + inflationSuccess: 0, + inflationNotTime: -1 + }); + + // === xdr source ============================================================ + // + // struct InflationPayout // or use PaymentResultAtom to limit types? + // { + // AccountID destination; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("InflationPayout", [["destination", xdr.lookup("AccountId")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union InflationResult switch (InflationResultCode code) + // { + // case INFLATION_SUCCESS: + // InflationPayout payouts<>; + // case INFLATION_NOT_TIME: + // void; + // }; + // + // =========================================================================== + xdr.union("InflationResult", { + switchOn: xdr.lookup("InflationResultCode"), + switchName: "code", + switches: [["inflationSuccess", "payouts"], ["inflationNotTime", xdr["void"]()]], + arms: { + payouts: xdr.varArray(xdr.lookup("InflationPayout"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // enum ManageDataResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_DATA_SUCCESS = 0, + // // codes considered as "failure" for the operation + // MANAGE_DATA_NOT_SUPPORTED_YET = + // -1, // The network hasn't moved to this protocol change yet + // MANAGE_DATA_NAME_NOT_FOUND = + // -2, // Trying to remove a Data Entry that isn't there + // MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry + // MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string + // }; + // + // =========================================================================== + xdr["enum"]("ManageDataResultCode", { + manageDataSuccess: 0, + manageDataNotSupportedYet: -1, + manageDataNameNotFound: -2, + manageDataLowReserve: -3, + manageDataInvalidName: -4 + }); + + // === xdr source ============================================================ + // + // union ManageDataResult switch (ManageDataResultCode code) + // { + // case MANAGE_DATA_SUCCESS: + // void; + // case MANAGE_DATA_NOT_SUPPORTED_YET: + // case MANAGE_DATA_NAME_NOT_FOUND: + // case MANAGE_DATA_LOW_RESERVE: + // case MANAGE_DATA_INVALID_NAME: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageDataResult", { + switchOn: xdr.lookup("ManageDataResultCode"), + switchName: "code", + switches: [["manageDataSuccess", xdr["void"]()], ["manageDataNotSupportedYet", xdr["void"]()], ["manageDataNameNotFound", xdr["void"]()], ["manageDataLowReserve", xdr["void"]()], ["manageDataInvalidName", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum BumpSequenceResultCode + // { + // // codes considered as "success" for the operation + // BUMP_SEQUENCE_SUCCESS = 0, + // // codes considered as "failure" for the operation + // BUMP_SEQUENCE_BAD_SEQ = -1 // `bumpTo` is not within bounds + // }; + // + // =========================================================================== + xdr["enum"]("BumpSequenceResultCode", { + bumpSequenceSuccess: 0, + bumpSequenceBadSeq: -1 + }); + + // === xdr source ============================================================ + // + // union BumpSequenceResult switch (BumpSequenceResultCode code) + // { + // case BUMP_SEQUENCE_SUCCESS: + // void; + // case BUMP_SEQUENCE_BAD_SEQ: + // void; + // }; + // + // =========================================================================== + xdr.union("BumpSequenceResult", { + switchOn: xdr.lookup("BumpSequenceResultCode"), + switchName: "code", + switches: [["bumpSequenceSuccess", xdr["void"]()], ["bumpSequenceBadSeq", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum CreateClaimableBalanceResultCode + // { + // CREATE_CLAIMABLE_BALANCE_SUCCESS = 0, + // CREATE_CLAIMABLE_BALANCE_MALFORMED = -1, + // CREATE_CLAIMABLE_BALANCE_LOW_RESERVE = -2, + // CREATE_CLAIMABLE_BALANCE_NO_TRUST = -3, + // CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -4, + // CREATE_CLAIMABLE_BALANCE_UNDERFUNDED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("CreateClaimableBalanceResultCode", { + createClaimableBalanceSuccess: 0, + createClaimableBalanceMalformed: -1, + createClaimableBalanceLowReserve: -2, + createClaimableBalanceNoTrust: -3, + createClaimableBalanceNotAuthorized: -4, + createClaimableBalanceUnderfunded: -5 + }); + + // === xdr source ============================================================ + // + // union CreateClaimableBalanceResult switch ( + // CreateClaimableBalanceResultCode code) + // { + // case CREATE_CLAIMABLE_BALANCE_SUCCESS: + // ClaimableBalanceID balanceID; + // case CREATE_CLAIMABLE_BALANCE_MALFORMED: + // case CREATE_CLAIMABLE_BALANCE_LOW_RESERVE: + // case CREATE_CLAIMABLE_BALANCE_NO_TRUST: + // case CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED: + // case CREATE_CLAIMABLE_BALANCE_UNDERFUNDED: + // void; + // }; + // + // =========================================================================== + xdr.union("CreateClaimableBalanceResult", { + switchOn: xdr.lookup("CreateClaimableBalanceResultCode"), + switchName: "code", + switches: [["createClaimableBalanceSuccess", "balanceId"], ["createClaimableBalanceMalformed", xdr["void"]()], ["createClaimableBalanceLowReserve", xdr["void"]()], ["createClaimableBalanceNoTrust", xdr["void"]()], ["createClaimableBalanceNotAuthorized", xdr["void"]()], ["createClaimableBalanceUnderfunded", xdr["void"]()]], + arms: { + balanceId: xdr.lookup("ClaimableBalanceId") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimClaimableBalanceResultCode + // { + // CLAIM_CLAIMABLE_BALANCE_SUCCESS = 0, + // CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1, + // CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM = -2, + // CLAIM_CLAIMABLE_BALANCE_LINE_FULL = -3, + // CLAIM_CLAIMABLE_BALANCE_NO_TRUST = -4, + // CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimClaimableBalanceResultCode", { + claimClaimableBalanceSuccess: 0, + claimClaimableBalanceDoesNotExist: -1, + claimClaimableBalanceCannotClaim: -2, + claimClaimableBalanceLineFull: -3, + claimClaimableBalanceNoTrust: -4, + claimClaimableBalanceNotAuthorized: -5 + }); + + // === xdr source ============================================================ + // + // union ClaimClaimableBalanceResult switch (ClaimClaimableBalanceResultCode code) + // { + // case CLAIM_CLAIMABLE_BALANCE_SUCCESS: + // void; + // case CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST: + // case CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM: + // case CLAIM_CLAIMABLE_BALANCE_LINE_FULL: + // case CLAIM_CLAIMABLE_BALANCE_NO_TRUST: + // case CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClaimClaimableBalanceResult", { + switchOn: xdr.lookup("ClaimClaimableBalanceResultCode"), + switchName: "code", + switches: [["claimClaimableBalanceSuccess", xdr["void"]()], ["claimClaimableBalanceDoesNotExist", xdr["void"]()], ["claimClaimableBalanceCannotClaim", xdr["void"]()], ["claimClaimableBalanceLineFull", xdr["void"]()], ["claimClaimableBalanceNoTrust", xdr["void"]()], ["claimClaimableBalanceNotAuthorized", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum BeginSponsoringFutureReservesResultCode + // { + // // codes considered as "success" for the operation + // BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED = -1, + // BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED = -2, + // BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("BeginSponsoringFutureReservesResultCode", { + beginSponsoringFutureReservesSuccess: 0, + beginSponsoringFutureReservesMalformed: -1, + beginSponsoringFutureReservesAlreadySponsored: -2, + beginSponsoringFutureReservesRecursive: -3 + }); + + // === xdr source ============================================================ + // + // union BeginSponsoringFutureReservesResult switch ( + // BeginSponsoringFutureReservesResultCode code) + // { + // case BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS: + // void; + // case BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED: + // case BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED: + // case BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE: + // void; + // }; + // + // =========================================================================== + xdr.union("BeginSponsoringFutureReservesResult", { + switchOn: xdr.lookup("BeginSponsoringFutureReservesResultCode"), + switchName: "code", + switches: [["beginSponsoringFutureReservesSuccess", xdr["void"]()], ["beginSponsoringFutureReservesMalformed", xdr["void"]()], ["beginSponsoringFutureReservesAlreadySponsored", xdr["void"]()], ["beginSponsoringFutureReservesRecursive", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum EndSponsoringFutureReservesResultCode + // { + // // codes considered as "success" for the operation + // END_SPONSORING_FUTURE_RESERVES_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED = -1 + // }; + // + // =========================================================================== + xdr["enum"]("EndSponsoringFutureReservesResultCode", { + endSponsoringFutureReservesSuccess: 0, + endSponsoringFutureReservesNotSponsored: -1 + }); + + // === xdr source ============================================================ + // + // union EndSponsoringFutureReservesResult switch ( + // EndSponsoringFutureReservesResultCode code) + // { + // case END_SPONSORING_FUTURE_RESERVES_SUCCESS: + // void; + // case END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED: + // void; + // }; + // + // =========================================================================== + xdr.union("EndSponsoringFutureReservesResult", { + switchOn: xdr.lookup("EndSponsoringFutureReservesResultCode"), + switchName: "code", + switches: [["endSponsoringFutureReservesSuccess", xdr["void"]()], ["endSponsoringFutureReservesNotSponsored", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum RevokeSponsorshipResultCode + // { + // // codes considered as "success" for the operation + // REVOKE_SPONSORSHIP_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // REVOKE_SPONSORSHIP_DOES_NOT_EXIST = -1, + // REVOKE_SPONSORSHIP_NOT_SPONSOR = -2, + // REVOKE_SPONSORSHIP_LOW_RESERVE = -3, + // REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE = -4, + // REVOKE_SPONSORSHIP_MALFORMED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("RevokeSponsorshipResultCode", { + revokeSponsorshipSuccess: 0, + revokeSponsorshipDoesNotExist: -1, + revokeSponsorshipNotSponsor: -2, + revokeSponsorshipLowReserve: -3, + revokeSponsorshipOnlyTransferable: -4, + revokeSponsorshipMalformed: -5 + }); + + // === xdr source ============================================================ + // + // union RevokeSponsorshipResult switch (RevokeSponsorshipResultCode code) + // { + // case REVOKE_SPONSORSHIP_SUCCESS: + // void; + // case REVOKE_SPONSORSHIP_DOES_NOT_EXIST: + // case REVOKE_SPONSORSHIP_NOT_SPONSOR: + // case REVOKE_SPONSORSHIP_LOW_RESERVE: + // case REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE: + // case REVOKE_SPONSORSHIP_MALFORMED: + // void; + // }; + // + // =========================================================================== + xdr.union("RevokeSponsorshipResult", { + switchOn: xdr.lookup("RevokeSponsorshipResultCode"), + switchName: "code", + switches: [["revokeSponsorshipSuccess", xdr["void"]()], ["revokeSponsorshipDoesNotExist", xdr["void"]()], ["revokeSponsorshipNotSponsor", xdr["void"]()], ["revokeSponsorshipLowReserve", xdr["void"]()], ["revokeSponsorshipOnlyTransferable", xdr["void"]()], ["revokeSponsorshipMalformed", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ClawbackResultCode + // { + // // codes considered as "success" for the operation + // CLAWBACK_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // CLAWBACK_MALFORMED = -1, + // CLAWBACK_NOT_CLAWBACK_ENABLED = -2, + // CLAWBACK_NO_TRUST = -3, + // CLAWBACK_UNDERFUNDED = -4 + // }; + // + // =========================================================================== + xdr["enum"]("ClawbackResultCode", { + clawbackSuccess: 0, + clawbackMalformed: -1, + clawbackNotClawbackEnabled: -2, + clawbackNoTrust: -3, + clawbackUnderfunded: -4 + }); + + // === xdr source ============================================================ + // + // union ClawbackResult switch (ClawbackResultCode code) + // { + // case CLAWBACK_SUCCESS: + // void; + // case CLAWBACK_MALFORMED: + // case CLAWBACK_NOT_CLAWBACK_ENABLED: + // case CLAWBACK_NO_TRUST: + // case CLAWBACK_UNDERFUNDED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClawbackResult", { + switchOn: xdr.lookup("ClawbackResultCode"), + switchName: "code", + switches: [["clawbackSuccess", xdr["void"]()], ["clawbackMalformed", xdr["void"]()], ["clawbackNotClawbackEnabled", xdr["void"]()], ["clawbackNoTrust", xdr["void"]()], ["clawbackUnderfunded", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ClawbackClaimableBalanceResultCode + // { + // // codes considered as "success" for the operation + // CLAWBACK_CLAIMABLE_BALANCE_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1, + // CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER = -2, + // CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED = -3 + // }; + // + // =========================================================================== + xdr["enum"]("ClawbackClaimableBalanceResultCode", { + clawbackClaimableBalanceSuccess: 0, + clawbackClaimableBalanceDoesNotExist: -1, + clawbackClaimableBalanceNotIssuer: -2, + clawbackClaimableBalanceNotClawbackEnabled: -3 + }); + + // === xdr source ============================================================ + // + // union ClawbackClaimableBalanceResult switch ( + // ClawbackClaimableBalanceResultCode code) + // { + // case CLAWBACK_CLAIMABLE_BALANCE_SUCCESS: + // void; + // case CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST: + // case CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER: + // case CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClawbackClaimableBalanceResult", { + switchOn: xdr.lookup("ClawbackClaimableBalanceResultCode"), + switchName: "code", + switches: [["clawbackClaimableBalanceSuccess", xdr["void"]()], ["clawbackClaimableBalanceDoesNotExist", xdr["void"]()], ["clawbackClaimableBalanceNotIssuer", xdr["void"]()], ["clawbackClaimableBalanceNotClawbackEnabled", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum SetTrustLineFlagsResultCode + // { + // // codes considered as "success" for the operation + // SET_TRUST_LINE_FLAGS_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // SET_TRUST_LINE_FLAGS_MALFORMED = -1, + // SET_TRUST_LINE_FLAGS_NO_TRUST_LINE = -2, + // SET_TRUST_LINE_FLAGS_CANT_REVOKE = -3, + // SET_TRUST_LINE_FLAGS_INVALID_STATE = -4, + // SET_TRUST_LINE_FLAGS_LOW_RESERVE = -5 // claimable balances can't be created + // // on revoke due to low reserves + // }; + // + // =========================================================================== + xdr["enum"]("SetTrustLineFlagsResultCode", { + setTrustLineFlagsSuccess: 0, + setTrustLineFlagsMalformed: -1, + setTrustLineFlagsNoTrustLine: -2, + setTrustLineFlagsCantRevoke: -3, + setTrustLineFlagsInvalidState: -4, + setTrustLineFlagsLowReserve: -5 + }); + + // === xdr source ============================================================ + // + // union SetTrustLineFlagsResult switch (SetTrustLineFlagsResultCode code) + // { + // case SET_TRUST_LINE_FLAGS_SUCCESS: + // void; + // case SET_TRUST_LINE_FLAGS_MALFORMED: + // case SET_TRUST_LINE_FLAGS_NO_TRUST_LINE: + // case SET_TRUST_LINE_FLAGS_CANT_REVOKE: + // case SET_TRUST_LINE_FLAGS_INVALID_STATE: + // case SET_TRUST_LINE_FLAGS_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("SetTrustLineFlagsResult", { + switchOn: xdr.lookup("SetTrustLineFlagsResultCode"), + switchName: "code", + switches: [["setTrustLineFlagsSuccess", xdr["void"]()], ["setTrustLineFlagsMalformed", xdr["void"]()], ["setTrustLineFlagsNoTrustLine", xdr["void"]()], ["setTrustLineFlagsCantRevoke", xdr["void"]()], ["setTrustLineFlagsInvalidState", xdr["void"]()], ["setTrustLineFlagsLowReserve", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum LiquidityPoolDepositResultCode + // { + // // codes considered as "success" for the operation + // LIQUIDITY_POOL_DEPOSIT_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // LIQUIDITY_POOL_DEPOSIT_MALFORMED = -1, // bad input + // LIQUIDITY_POOL_DEPOSIT_NO_TRUST = -2, // no trust line for one of the + // // assets + // LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED = -3, // not authorized for one of the + // // assets + // LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED = -4, // not enough balance for one of + // // the assets + // LIQUIDITY_POOL_DEPOSIT_LINE_FULL = -5, // pool share trust line doesn't + // // have sufficient limit + // LIQUIDITY_POOL_DEPOSIT_BAD_PRICE = -6, // deposit price outside bounds + // LIQUIDITY_POOL_DEPOSIT_POOL_FULL = -7 // pool reserves are full + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolDepositResultCode", { + liquidityPoolDepositSuccess: 0, + liquidityPoolDepositMalformed: -1, + liquidityPoolDepositNoTrust: -2, + liquidityPoolDepositNotAuthorized: -3, + liquidityPoolDepositUnderfunded: -4, + liquidityPoolDepositLineFull: -5, + liquidityPoolDepositBadPrice: -6, + liquidityPoolDepositPoolFull: -7 + }); + + // === xdr source ============================================================ + // + // union LiquidityPoolDepositResult switch (LiquidityPoolDepositResultCode code) + // { + // case LIQUIDITY_POOL_DEPOSIT_SUCCESS: + // void; + // case LIQUIDITY_POOL_DEPOSIT_MALFORMED: + // case LIQUIDITY_POOL_DEPOSIT_NO_TRUST: + // case LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED: + // case LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED: + // case LIQUIDITY_POOL_DEPOSIT_LINE_FULL: + // case LIQUIDITY_POOL_DEPOSIT_BAD_PRICE: + // case LIQUIDITY_POOL_DEPOSIT_POOL_FULL: + // void; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolDepositResult", { + switchOn: xdr.lookup("LiquidityPoolDepositResultCode"), + switchName: "code", + switches: [["liquidityPoolDepositSuccess", xdr["void"]()], ["liquidityPoolDepositMalformed", xdr["void"]()], ["liquidityPoolDepositNoTrust", xdr["void"]()], ["liquidityPoolDepositNotAuthorized", xdr["void"]()], ["liquidityPoolDepositUnderfunded", xdr["void"]()], ["liquidityPoolDepositLineFull", xdr["void"]()], ["liquidityPoolDepositBadPrice", xdr["void"]()], ["liquidityPoolDepositPoolFull", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum LiquidityPoolWithdrawResultCode + // { + // // codes considered as "success" for the operation + // LIQUIDITY_POOL_WITHDRAW_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // LIQUIDITY_POOL_WITHDRAW_MALFORMED = -1, // bad input + // LIQUIDITY_POOL_WITHDRAW_NO_TRUST = -2, // no trust line for one of the + // // assets + // LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED = -3, // not enough balance of the + // // pool share + // LIQUIDITY_POOL_WITHDRAW_LINE_FULL = -4, // would go above limit for one + // // of the assets + // LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM = -5 // didn't withdraw enough + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolWithdrawResultCode", { + liquidityPoolWithdrawSuccess: 0, + liquidityPoolWithdrawMalformed: -1, + liquidityPoolWithdrawNoTrust: -2, + liquidityPoolWithdrawUnderfunded: -3, + liquidityPoolWithdrawLineFull: -4, + liquidityPoolWithdrawUnderMinimum: -5 + }); + + // === xdr source ============================================================ + // + // union LiquidityPoolWithdrawResult switch (LiquidityPoolWithdrawResultCode code) + // { + // case LIQUIDITY_POOL_WITHDRAW_SUCCESS: + // void; + // case LIQUIDITY_POOL_WITHDRAW_MALFORMED: + // case LIQUIDITY_POOL_WITHDRAW_NO_TRUST: + // case LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED: + // case LIQUIDITY_POOL_WITHDRAW_LINE_FULL: + // case LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM: + // void; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolWithdrawResult", { + switchOn: xdr.lookup("LiquidityPoolWithdrawResultCode"), + switchName: "code", + switches: [["liquidityPoolWithdrawSuccess", xdr["void"]()], ["liquidityPoolWithdrawMalformed", xdr["void"]()], ["liquidityPoolWithdrawNoTrust", xdr["void"]()], ["liquidityPoolWithdrawUnderfunded", xdr["void"]()], ["liquidityPoolWithdrawLineFull", xdr["void"]()], ["liquidityPoolWithdrawUnderMinimum", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum InvokeHostFunctionResultCode + // { + // // codes considered as "success" for the operation + // INVOKE_HOST_FUNCTION_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // INVOKE_HOST_FUNCTION_MALFORMED = -1, + // INVOKE_HOST_FUNCTION_TRAPPED = -2, + // INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3, + // INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4, + // INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5 + // }; + // + // =========================================================================== + xdr["enum"]("InvokeHostFunctionResultCode", { + invokeHostFunctionSuccess: 0, + invokeHostFunctionMalformed: -1, + invokeHostFunctionTrapped: -2, + invokeHostFunctionResourceLimitExceeded: -3, + invokeHostFunctionEntryArchived: -4, + invokeHostFunctionInsufficientRefundableFee: -5 + }); + + // === xdr source ============================================================ + // + // union InvokeHostFunctionResult switch (InvokeHostFunctionResultCode code) + // { + // case INVOKE_HOST_FUNCTION_SUCCESS: + // Hash success; // sha256(InvokeHostFunctionSuccessPreImage) + // case INVOKE_HOST_FUNCTION_MALFORMED: + // case INVOKE_HOST_FUNCTION_TRAPPED: + // case INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED: + // case INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED: + // case INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("InvokeHostFunctionResult", { + switchOn: xdr.lookup("InvokeHostFunctionResultCode"), + switchName: "code", + switches: [["invokeHostFunctionSuccess", "success"], ["invokeHostFunctionMalformed", xdr["void"]()], ["invokeHostFunctionTrapped", xdr["void"]()], ["invokeHostFunctionResourceLimitExceeded", xdr["void"]()], ["invokeHostFunctionEntryArchived", xdr["void"]()], ["invokeHostFunctionInsufficientRefundableFee", xdr["void"]()]], + arms: { + success: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum ExtendFootprintTTLResultCode + // { + // // codes considered as "success" for the operation + // EXTEND_FOOTPRINT_TTL_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // EXTEND_FOOTPRINT_TTL_MALFORMED = -1, + // EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2, + // EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("ExtendFootprintTtlResultCode", { + extendFootprintTtlSuccess: 0, + extendFootprintTtlMalformed: -1, + extendFootprintTtlResourceLimitExceeded: -2, + extendFootprintTtlInsufficientRefundableFee: -3 + }); + + // === xdr source ============================================================ + // + // union ExtendFootprintTTLResult switch (ExtendFootprintTTLResultCode code) + // { + // case EXTEND_FOOTPRINT_TTL_SUCCESS: + // void; + // case EXTEND_FOOTPRINT_TTL_MALFORMED: + // case EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED: + // case EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("ExtendFootprintTtlResult", { + switchOn: xdr.lookup("ExtendFootprintTtlResultCode"), + switchName: "code", + switches: [["extendFootprintTtlSuccess", xdr["void"]()], ["extendFootprintTtlMalformed", xdr["void"]()], ["extendFootprintTtlResourceLimitExceeded", xdr["void"]()], ["extendFootprintTtlInsufficientRefundableFee", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum RestoreFootprintResultCode + // { + // // codes considered as "success" for the operation + // RESTORE_FOOTPRINT_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // RESTORE_FOOTPRINT_MALFORMED = -1, + // RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED = -2, + // RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("RestoreFootprintResultCode", { + restoreFootprintSuccess: 0, + restoreFootprintMalformed: -1, + restoreFootprintResourceLimitExceeded: -2, + restoreFootprintInsufficientRefundableFee: -3 + }); + + // === xdr source ============================================================ + // + // union RestoreFootprintResult switch (RestoreFootprintResultCode code) + // { + // case RESTORE_FOOTPRINT_SUCCESS: + // void; + // case RESTORE_FOOTPRINT_MALFORMED: + // case RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED: + // case RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("RestoreFootprintResult", { + switchOn: xdr.lookup("RestoreFootprintResultCode"), + switchName: "code", + switches: [["restoreFootprintSuccess", xdr["void"]()], ["restoreFootprintMalformed", xdr["void"]()], ["restoreFootprintResourceLimitExceeded", xdr["void"]()], ["restoreFootprintInsufficientRefundableFee", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum OperationResultCode + // { + // opINNER = 0, // inner object result is valid + // + // opBAD_AUTH = -1, // too few valid signatures / wrong network + // opNO_ACCOUNT = -2, // source account was not found + // opNOT_SUPPORTED = -3, // operation not supported at this time + // opTOO_MANY_SUBENTRIES = -4, // max number of subentries already reached + // opEXCEEDED_WORK_LIMIT = -5, // operation did too much work + // opTOO_MANY_SPONSORING = -6 // account is sponsoring too many entries + // }; + // + // =========================================================================== + xdr["enum"]("OperationResultCode", { + opInner: 0, + opBadAuth: -1, + opNoAccount: -2, + opNotSupported: -3, + opTooManySubentries: -4, + opExceededWorkLimit: -5, + opTooManySponsoring: -6 + }); + + // === xdr source ============================================================ + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountResult createAccountResult; + // case PAYMENT: + // PaymentResult paymentResult; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult; + // case MANAGE_SELL_OFFER: + // ManageSellOfferResult manageSellOfferResult; + // case CREATE_PASSIVE_SELL_OFFER: + // ManageSellOfferResult createPassiveSellOfferResult; + // case SET_OPTIONS: + // SetOptionsResult setOptionsResult; + // case CHANGE_TRUST: + // ChangeTrustResult changeTrustResult; + // case ALLOW_TRUST: + // AllowTrustResult allowTrustResult; + // case ACCOUNT_MERGE: + // AccountMergeResult accountMergeResult; + // case INFLATION: + // InflationResult inflationResult; + // case MANAGE_DATA: + // ManageDataResult manageDataResult; + // case BUMP_SEQUENCE: + // BumpSequenceResult bumpSeqResult; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferResult manageBuyOfferResult; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendResult pathPaymentStrictSendResult; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceResult createClaimableBalanceResult; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceResult claimClaimableBalanceResult; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult; + // case END_SPONSORING_FUTURE_RESERVES: + // EndSponsoringFutureReservesResult endSponsoringFutureReservesResult; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipResult revokeSponsorshipResult; + // case CLAWBACK: + // ClawbackResult clawbackResult; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceResult clawbackClaimableBalanceResult; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsResult setTrustLineFlagsResult; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositResult liquidityPoolDepositResult; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawResult liquidityPoolWithdrawResult; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionResult invokeHostFunctionResult; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLResult extendFootprintTTLResult; + // case RESTORE_FOOTPRINT: + // RestoreFootprintResult restoreFootprintResult; + // } + // + // =========================================================================== + xdr.union("OperationResultTr", { + switchOn: xdr.lookup("OperationType"), + switchName: "type", + switches: [["createAccount", "createAccountResult"], ["payment", "paymentResult"], ["pathPaymentStrictReceive", "pathPaymentStrictReceiveResult"], ["manageSellOffer", "manageSellOfferResult"], ["createPassiveSellOffer", "createPassiveSellOfferResult"], ["setOptions", "setOptionsResult"], ["changeTrust", "changeTrustResult"], ["allowTrust", "allowTrustResult"], ["accountMerge", "accountMergeResult"], ["inflation", "inflationResult"], ["manageData", "manageDataResult"], ["bumpSequence", "bumpSeqResult"], ["manageBuyOffer", "manageBuyOfferResult"], ["pathPaymentStrictSend", "pathPaymentStrictSendResult"], ["createClaimableBalance", "createClaimableBalanceResult"], ["claimClaimableBalance", "claimClaimableBalanceResult"], ["beginSponsoringFutureReserves", "beginSponsoringFutureReservesResult"], ["endSponsoringFutureReserves", "endSponsoringFutureReservesResult"], ["revokeSponsorship", "revokeSponsorshipResult"], ["clawback", "clawbackResult"], ["clawbackClaimableBalance", "clawbackClaimableBalanceResult"], ["setTrustLineFlags", "setTrustLineFlagsResult"], ["liquidityPoolDeposit", "liquidityPoolDepositResult"], ["liquidityPoolWithdraw", "liquidityPoolWithdrawResult"], ["invokeHostFunction", "invokeHostFunctionResult"], ["extendFootprintTtl", "extendFootprintTtlResult"], ["restoreFootprint", "restoreFootprintResult"]], + arms: { + createAccountResult: xdr.lookup("CreateAccountResult"), + paymentResult: xdr.lookup("PaymentResult"), + pathPaymentStrictReceiveResult: xdr.lookup("PathPaymentStrictReceiveResult"), + manageSellOfferResult: xdr.lookup("ManageSellOfferResult"), + createPassiveSellOfferResult: xdr.lookup("ManageSellOfferResult"), + setOptionsResult: xdr.lookup("SetOptionsResult"), + changeTrustResult: xdr.lookup("ChangeTrustResult"), + allowTrustResult: xdr.lookup("AllowTrustResult"), + accountMergeResult: xdr.lookup("AccountMergeResult"), + inflationResult: xdr.lookup("InflationResult"), + manageDataResult: xdr.lookup("ManageDataResult"), + bumpSeqResult: xdr.lookup("BumpSequenceResult"), + manageBuyOfferResult: xdr.lookup("ManageBuyOfferResult"), + pathPaymentStrictSendResult: xdr.lookup("PathPaymentStrictSendResult"), + createClaimableBalanceResult: xdr.lookup("CreateClaimableBalanceResult"), + claimClaimableBalanceResult: xdr.lookup("ClaimClaimableBalanceResult"), + beginSponsoringFutureReservesResult: xdr.lookup("BeginSponsoringFutureReservesResult"), + endSponsoringFutureReservesResult: xdr.lookup("EndSponsoringFutureReservesResult"), + revokeSponsorshipResult: xdr.lookup("RevokeSponsorshipResult"), + clawbackResult: xdr.lookup("ClawbackResult"), + clawbackClaimableBalanceResult: xdr.lookup("ClawbackClaimableBalanceResult"), + setTrustLineFlagsResult: xdr.lookup("SetTrustLineFlagsResult"), + liquidityPoolDepositResult: xdr.lookup("LiquidityPoolDepositResult"), + liquidityPoolWithdrawResult: xdr.lookup("LiquidityPoolWithdrawResult"), + invokeHostFunctionResult: xdr.lookup("InvokeHostFunctionResult"), + extendFootprintTtlResult: xdr.lookup("ExtendFootprintTtlResult"), + restoreFootprintResult: xdr.lookup("RestoreFootprintResult") + } + }); + + // === xdr source ============================================================ + // + // union OperationResult switch (OperationResultCode code) + // { + // case opINNER: + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountResult createAccountResult; + // case PAYMENT: + // PaymentResult paymentResult; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult; + // case MANAGE_SELL_OFFER: + // ManageSellOfferResult manageSellOfferResult; + // case CREATE_PASSIVE_SELL_OFFER: + // ManageSellOfferResult createPassiveSellOfferResult; + // case SET_OPTIONS: + // SetOptionsResult setOptionsResult; + // case CHANGE_TRUST: + // ChangeTrustResult changeTrustResult; + // case ALLOW_TRUST: + // AllowTrustResult allowTrustResult; + // case ACCOUNT_MERGE: + // AccountMergeResult accountMergeResult; + // case INFLATION: + // InflationResult inflationResult; + // case MANAGE_DATA: + // ManageDataResult manageDataResult; + // case BUMP_SEQUENCE: + // BumpSequenceResult bumpSeqResult; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferResult manageBuyOfferResult; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendResult pathPaymentStrictSendResult; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceResult createClaimableBalanceResult; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceResult claimClaimableBalanceResult; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult; + // case END_SPONSORING_FUTURE_RESERVES: + // EndSponsoringFutureReservesResult endSponsoringFutureReservesResult; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipResult revokeSponsorshipResult; + // case CLAWBACK: + // ClawbackResult clawbackResult; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceResult clawbackClaimableBalanceResult; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsResult setTrustLineFlagsResult; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositResult liquidityPoolDepositResult; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawResult liquidityPoolWithdrawResult; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionResult invokeHostFunctionResult; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLResult extendFootprintTTLResult; + // case RESTORE_FOOTPRINT: + // RestoreFootprintResult restoreFootprintResult; + // } + // tr; + // case opBAD_AUTH: + // case opNO_ACCOUNT: + // case opNOT_SUPPORTED: + // case opTOO_MANY_SUBENTRIES: + // case opEXCEEDED_WORK_LIMIT: + // case opTOO_MANY_SPONSORING: + // void; + // }; + // + // =========================================================================== + xdr.union("OperationResult", { + switchOn: xdr.lookup("OperationResultCode"), + switchName: "code", + switches: [["opInner", "tr"], ["opBadAuth", xdr["void"]()], ["opNoAccount", xdr["void"]()], ["opNotSupported", xdr["void"]()], ["opTooManySubentries", xdr["void"]()], ["opExceededWorkLimit", xdr["void"]()], ["opTooManySponsoring", xdr["void"]()]], + arms: { + tr: xdr.lookup("OperationResultTr") + } + }); + + // === xdr source ============================================================ + // + // enum TransactionResultCode + // { + // txFEE_BUMP_INNER_SUCCESS = 1, // fee bump inner transaction succeeded + // txSUCCESS = 0, // all operations succeeded + // + // txFAILED = -1, // one of the operations failed (none were applied) + // + // txTOO_EARLY = -2, // ledger closeTime before minTime + // txTOO_LATE = -3, // ledger closeTime after maxTime + // txMISSING_OPERATION = -4, // no operation was specified + // txBAD_SEQ = -5, // sequence number does not match source account + // + // txBAD_AUTH = -6, // too few valid signatures / wrong network + // txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve + // txNO_ACCOUNT = -8, // source account not found + // txINSUFFICIENT_FEE = -9, // fee is too small + // txBAD_AUTH_EXTRA = -10, // unused signatures attached to transaction + // txINTERNAL_ERROR = -11, // an unknown error occurred + // + // txNOT_SUPPORTED = -12, // transaction type not supported + // txFEE_BUMP_INNER_FAILED = -13, // fee bump inner transaction failed + // txBAD_SPONSORSHIP = -14, // sponsorship not confirmed + // txBAD_MIN_SEQ_AGE_OR_GAP = -15, // minSeqAge or minSeqLedgerGap conditions not met + // txMALFORMED = -16, // precondition is invalid + // txSOROBAN_INVALID = -17 // soroban-specific preconditions were not met + // }; + // + // =========================================================================== + xdr["enum"]("TransactionResultCode", { + txFeeBumpInnerSuccess: 1, + txSuccess: 0, + txFailed: -1, + txTooEarly: -2, + txTooLate: -3, + txMissingOperation: -4, + txBadSeq: -5, + txBadAuth: -6, + txInsufficientBalance: -7, + txNoAccount: -8, + txInsufficientFee: -9, + txBadAuthExtra: -10, + txInternalError: -11, + txNotSupported: -12, + txFeeBumpInnerFailed: -13, + txBadSponsorship: -14, + txBadMinSeqAgeOrGap: -15, + txMalformed: -16, + txSorobanInvalid: -17 + }); + + // === xdr source ============================================================ + // + // union switch (TransactionResultCode code) + // { + // // txFEE_BUMP_INNER_SUCCESS is not included + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // txFEE_BUMP_INNER_FAILED is not included + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // + // =========================================================================== + xdr.union("InnerTransactionResultResult", { + switchOn: xdr.lookup("TransactionResultCode"), + switchName: "code", + switches: [["txSuccess", "results"], ["txFailed", "results"], ["txTooEarly", xdr["void"]()], ["txTooLate", xdr["void"]()], ["txMissingOperation", xdr["void"]()], ["txBadSeq", xdr["void"]()], ["txBadAuth", xdr["void"]()], ["txInsufficientBalance", xdr["void"]()], ["txNoAccount", xdr["void"]()], ["txInsufficientFee", xdr["void"]()], ["txBadAuthExtra", xdr["void"]()], ["txInternalError", xdr["void"]()], ["txNotSupported", xdr["void"]()], ["txBadSponsorship", xdr["void"]()], ["txBadMinSeqAgeOrGap", xdr["void"]()], ["txMalformed", xdr["void"]()], ["txSorobanInvalid", xdr["void"]()]], + arms: { + results: xdr.varArray(xdr.lookup("OperationResult"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("InnerTransactionResultExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct InnerTransactionResult + // { + // // Always 0. Here for binary compatibility. + // int64 feeCharged; + // + // union switch (TransactionResultCode code) + // { + // // txFEE_BUMP_INNER_SUCCESS is not included + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // txFEE_BUMP_INNER_FAILED is not included + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // result; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("InnerTransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("InnerTransactionResultResult")], ["ext", xdr.lookup("InnerTransactionResultExt")]]); + + // === xdr source ============================================================ + // + // struct InnerTransactionResultPair + // { + // Hash transactionHash; // hash of the inner transaction + // InnerTransactionResult result; // result for the inner transaction + // }; + // + // =========================================================================== + xdr.struct("InnerTransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("InnerTransactionResult")]]); + + // === xdr source ============================================================ + // + // union switch (TransactionResultCode code) + // { + // case txFEE_BUMP_INNER_SUCCESS: + // case txFEE_BUMP_INNER_FAILED: + // InnerTransactionResultPair innerResultPair; + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // case txFEE_BUMP_INNER_FAILED: handled above + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionResultResult", { + switchOn: xdr.lookup("TransactionResultCode"), + switchName: "code", + switches: [["txFeeBumpInnerSuccess", "innerResultPair"], ["txFeeBumpInnerFailed", "innerResultPair"], ["txSuccess", "results"], ["txFailed", "results"], ["txTooEarly", xdr["void"]()], ["txTooLate", xdr["void"]()], ["txMissingOperation", xdr["void"]()], ["txBadSeq", xdr["void"]()], ["txBadAuth", xdr["void"]()], ["txInsufficientBalance", xdr["void"]()], ["txNoAccount", xdr["void"]()], ["txInsufficientFee", xdr["void"]()], ["txBadAuthExtra", xdr["void"]()], ["txInternalError", xdr["void"]()], ["txNotSupported", xdr["void"]()], ["txBadSponsorship", xdr["void"]()], ["txBadMinSeqAgeOrGap", xdr["void"]()], ["txMalformed", xdr["void"]()], ["txSorobanInvalid", xdr["void"]()]], + arms: { + innerResultPair: xdr.lookup("InnerTransactionResultPair"), + results: xdr.varArray(xdr.lookup("OperationResult"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionResultExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionResult + // { + // int64 feeCharged; // actual fee charged for the transaction + // + // union switch (TransactionResultCode code) + // { + // case txFEE_BUMP_INNER_SUCCESS: + // case txFEE_BUMP_INNER_FAILED: + // InnerTransactionResultPair innerResultPair; + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // case txFEE_BUMP_INNER_FAILED: handled above + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // result; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("TransactionResultResult")], ["ext", xdr.lookup("TransactionResultExt")]]); + + // === xdr source ============================================================ + // + // typedef opaque Hash[32]; + // + // =========================================================================== + xdr.typedef("Hash", xdr.opaque(32)); + + // === xdr source ============================================================ + // + // typedef opaque uint256[32]; + // + // =========================================================================== + xdr.typedef("Uint256", xdr.opaque(32)); + + // === xdr source ============================================================ + // + // typedef unsigned int uint32; + // + // =========================================================================== + xdr.typedef("Uint32", xdr.uint()); + + // === xdr source ============================================================ + // + // typedef int int32; + // + // =========================================================================== + xdr.typedef("Int32", xdr["int"]()); + + // === xdr source ============================================================ + // + // typedef unsigned hyper uint64; + // + // =========================================================================== + xdr.typedef("Uint64", xdr.uhyper()); + + // === xdr source ============================================================ + // + // typedef hyper int64; + // + // =========================================================================== + xdr.typedef("Int64", xdr.hyper()); + + // === xdr source ============================================================ + // + // typedef uint64 TimePoint; + // + // =========================================================================== + xdr.typedef("TimePoint", xdr.lookup("Uint64")); + + // === xdr source ============================================================ + // + // typedef uint64 Duration; + // + // =========================================================================== + xdr.typedef("Duration", xdr.lookup("Uint64")); + + // === xdr source ============================================================ + // + // union ExtensionPoint switch (int v) + // { + // case 0: + // void; + // }; + // + // =========================================================================== + xdr.union("ExtensionPoint", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum CryptoKeyType + // { + // KEY_TYPE_ED25519 = 0, + // KEY_TYPE_PRE_AUTH_TX = 1, + // KEY_TYPE_HASH_X = 2, + // KEY_TYPE_ED25519_SIGNED_PAYLOAD = 3, + // // MUXED enum values for supported type are derived from the enum values + // // above by ORing them with 0x100 + // KEY_TYPE_MUXED_ED25519 = 0x100 + // }; + // + // =========================================================================== + xdr["enum"]("CryptoKeyType", { + keyTypeEd25519: 0, + keyTypePreAuthTx: 1, + keyTypeHashX: 2, + keyTypeEd25519SignedPayload: 3, + keyTypeMuxedEd25519: 256 + }); + + // === xdr source ============================================================ + // + // enum PublicKeyType + // { + // PUBLIC_KEY_TYPE_ED25519 = KEY_TYPE_ED25519 + // }; + // + // =========================================================================== + xdr["enum"]("PublicKeyType", { + publicKeyTypeEd25519: 0 + }); + + // === xdr source ============================================================ + // + // enum SignerKeyType + // { + // SIGNER_KEY_TYPE_ED25519 = KEY_TYPE_ED25519, + // SIGNER_KEY_TYPE_PRE_AUTH_TX = KEY_TYPE_PRE_AUTH_TX, + // SIGNER_KEY_TYPE_HASH_X = KEY_TYPE_HASH_X, + // SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD = KEY_TYPE_ED25519_SIGNED_PAYLOAD + // }; + // + // =========================================================================== + xdr["enum"]("SignerKeyType", { + signerKeyTypeEd25519: 0, + signerKeyTypePreAuthTx: 1, + signerKeyTypeHashX: 2, + signerKeyTypeEd25519SignedPayload: 3 + }); + + // === xdr source ============================================================ + // + // union PublicKey switch (PublicKeyType type) + // { + // case PUBLIC_KEY_TYPE_ED25519: + // uint256 ed25519; + // }; + // + // =========================================================================== + xdr.union("PublicKey", { + switchOn: xdr.lookup("PublicKeyType"), + switchName: "type", + switches: [["publicKeyTypeEd25519", "ed25519"]], + arms: { + ed25519: xdr.lookup("Uint256") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // /* Public key that must sign the payload. */ + // uint256 ed25519; + // /* Payload to be raw signed by ed25519. */ + // opaque payload<64>; + // } + // + // =========================================================================== + xdr.struct("SignerKeyEd25519SignedPayload", [["ed25519", xdr.lookup("Uint256")], ["payload", xdr.varOpaque(64)]]); + + // === xdr source ============================================================ + // + // union SignerKey switch (SignerKeyType type) + // { + // case SIGNER_KEY_TYPE_ED25519: + // uint256 ed25519; + // case SIGNER_KEY_TYPE_PRE_AUTH_TX: + // /* SHA-256 Hash of TransactionSignaturePayload structure */ + // uint256 preAuthTx; + // case SIGNER_KEY_TYPE_HASH_X: + // /* Hash of random 256 bit preimage X */ + // uint256 hashX; + // case SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD: + // struct + // { + // /* Public key that must sign the payload. */ + // uint256 ed25519; + // /* Payload to be raw signed by ed25519. */ + // opaque payload<64>; + // } ed25519SignedPayload; + // }; + // + // =========================================================================== + xdr.union("SignerKey", { + switchOn: xdr.lookup("SignerKeyType"), + switchName: "type", + switches: [["signerKeyTypeEd25519", "ed25519"], ["signerKeyTypePreAuthTx", "preAuthTx"], ["signerKeyTypeHashX", "hashX"], ["signerKeyTypeEd25519SignedPayload", "ed25519SignedPayload"]], + arms: { + ed25519: xdr.lookup("Uint256"), + preAuthTx: xdr.lookup("Uint256"), + hashX: xdr.lookup("Uint256"), + ed25519SignedPayload: xdr.lookup("SignerKeyEd25519SignedPayload") + } + }); + + // === xdr source ============================================================ + // + // typedef opaque Signature<64>; + // + // =========================================================================== + xdr.typedef("Signature", xdr.varOpaque(64)); + + // === xdr source ============================================================ + // + // typedef opaque SignatureHint[4]; + // + // =========================================================================== + xdr.typedef("SignatureHint", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef PublicKey NodeID; + // + // =========================================================================== + xdr.typedef("NodeId", xdr.lookup("PublicKey")); + + // === xdr source ============================================================ + // + // typedef PublicKey AccountID; + // + // =========================================================================== + xdr.typedef("AccountId", xdr.lookup("PublicKey")); + + // === xdr source ============================================================ + // + // struct Curve25519Secret + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("Curve25519Secret", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct Curve25519Public + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("Curve25519Public", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct HmacSha256Key + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("HmacSha256Key", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct HmacSha256Mac + // { + // opaque mac[32]; + // }; + // + // =========================================================================== + xdr.struct("HmacSha256Mac", [["mac", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct ShortHashSeed + // { + // opaque seed[16]; + // }; + // + // =========================================================================== + xdr.struct("ShortHashSeed", [["seed", xdr.opaque(16)]]); + + // === xdr source ============================================================ + // + // enum BinaryFuseFilterType + // { + // BINARY_FUSE_FILTER_8_BIT = 0, + // BINARY_FUSE_FILTER_16_BIT = 1, + // BINARY_FUSE_FILTER_32_BIT = 2 + // }; + // + // =========================================================================== + xdr["enum"]("BinaryFuseFilterType", { + binaryFuseFilter8Bit: 0, + binaryFuseFilter16Bit: 1, + binaryFuseFilter32Bit: 2 + }); + + // === xdr source ============================================================ + // + // struct SerializedBinaryFuseFilter + // { + // BinaryFuseFilterType type; + // + // // Seed used to hash input to filter + // ShortHashSeed inputHashSeed; + // + // // Seed used for internal filter hash operations + // ShortHashSeed filterSeed; + // uint32 segmentLength; + // uint32 segementLengthMask; + // uint32 segmentCount; + // uint32 segmentCountLength; + // uint32 fingerprintLength; // Length in terms of element count, not bytes + // + // // Array of uint8_t, uint16_t, or uint32_t depending on filter type + // opaque fingerprints<>; + // }; + // + // =========================================================================== + xdr.struct("SerializedBinaryFuseFilter", [["type", xdr.lookup("BinaryFuseFilterType")], ["inputHashSeed", xdr.lookup("ShortHashSeed")], ["filterSeed", xdr.lookup("ShortHashSeed")], ["segmentLength", xdr.lookup("Uint32")], ["segementLengthMask", xdr.lookup("Uint32")], ["segmentCount", xdr.lookup("Uint32")], ["segmentCountLength", xdr.lookup("Uint32")], ["fingerprintLength", xdr.lookup("Uint32")], ["fingerprints", xdr.varOpaque()]]); + + // === xdr source ============================================================ + // + // enum SCValType + // { + // SCV_BOOL = 0, + // SCV_VOID = 1, + // SCV_ERROR = 2, + // + // // 32 bits is the smallest type in WASM or XDR; no need for u8/u16. + // SCV_U32 = 3, + // SCV_I32 = 4, + // + // // 64 bits is naturally supported by both WASM and XDR also. + // SCV_U64 = 5, + // SCV_I64 = 6, + // + // // Time-related u64 subtypes with their own functions and formatting. + // SCV_TIMEPOINT = 7, + // SCV_DURATION = 8, + // + // // 128 bits is naturally supported by Rust and we use it for Soroban + // // fixed-point arithmetic prices / balances / similar "quantities". These + // // are represented in XDR as a pair of 2 u64s. + // SCV_U128 = 9, + // SCV_I128 = 10, + // + // // 256 bits is the size of sha256 output, ed25519 keys, and the EVM machine + // // word, so for interop use we include this even though it requires a small + // // amount of Rust guest and/or host library code. + // SCV_U256 = 11, + // SCV_I256 = 12, + // + // // Bytes come in 3 flavors, 2 of which have meaningfully different + // // formatting and validity-checking / domain-restriction. + // SCV_BYTES = 13, + // SCV_STRING = 14, + // SCV_SYMBOL = 15, + // + // // Vecs and maps are just polymorphic containers of other ScVals. + // SCV_VEC = 16, + // SCV_MAP = 17, + // + // // Address is the universal identifier for contracts and classic + // // accounts. + // SCV_ADDRESS = 18, + // + // // The following are the internal SCVal variants that are not + // // exposed to the contracts. + // SCV_CONTRACT_INSTANCE = 19, + // + // // SCV_LEDGER_KEY_CONTRACT_INSTANCE and SCV_LEDGER_KEY_NONCE are unique + // // symbolic SCVals used as the key for ledger entries for a contract's + // // instance and an address' nonce, respectively. + // SCV_LEDGER_KEY_CONTRACT_INSTANCE = 20, + // SCV_LEDGER_KEY_NONCE = 21 + // }; + // + // =========================================================================== + xdr["enum"]("ScValType", { + scvBool: 0, + scvVoid: 1, + scvError: 2, + scvU32: 3, + scvI32: 4, + scvU64: 5, + scvI64: 6, + scvTimepoint: 7, + scvDuration: 8, + scvU128: 9, + scvI128: 10, + scvU256: 11, + scvI256: 12, + scvBytes: 13, + scvString: 14, + scvSymbol: 15, + scvVec: 16, + scvMap: 17, + scvAddress: 18, + scvContractInstance: 19, + scvLedgerKeyContractInstance: 20, + scvLedgerKeyNonce: 21 + }); + + // === xdr source ============================================================ + // + // enum SCErrorType + // { + // SCE_CONTRACT = 0, // Contract-specific, user-defined codes. + // SCE_WASM_VM = 1, // Errors while interpreting WASM bytecode. + // SCE_CONTEXT = 2, // Errors in the contract's host context. + // SCE_STORAGE = 3, // Errors accessing host storage. + // SCE_OBJECT = 4, // Errors working with host objects. + // SCE_CRYPTO = 5, // Errors in cryptographic operations. + // SCE_EVENTS = 6, // Errors while emitting events. + // SCE_BUDGET = 7, // Errors relating to budget limits. + // SCE_VALUE = 8, // Errors working with host values or SCVals. + // SCE_AUTH = 9 // Errors from the authentication subsystem. + // }; + // + // =========================================================================== + xdr["enum"]("ScErrorType", { + sceContract: 0, + sceWasmVm: 1, + sceContext: 2, + sceStorage: 3, + sceObject: 4, + sceCrypto: 5, + sceEvents: 6, + sceBudget: 7, + sceValue: 8, + sceAuth: 9 + }); + + // === xdr source ============================================================ + // + // enum SCErrorCode + // { + // SCEC_ARITH_DOMAIN = 0, // Some arithmetic was undefined (overflow, divide-by-zero). + // SCEC_INDEX_BOUNDS = 1, // Something was indexed beyond its bounds. + // SCEC_INVALID_INPUT = 2, // User provided some otherwise-bad data. + // SCEC_MISSING_VALUE = 3, // Some value was required but not provided. + // SCEC_EXISTING_VALUE = 4, // Some value was provided where not allowed. + // SCEC_EXCEEDED_LIMIT = 5, // Some arbitrary limit -- gas or otherwise -- was hit. + // SCEC_INVALID_ACTION = 6, // Data was valid but action requested was not. + // SCEC_INTERNAL_ERROR = 7, // The host detected an error in its own logic. + // SCEC_UNEXPECTED_TYPE = 8, // Some type wasn't as expected. + // SCEC_UNEXPECTED_SIZE = 9 // Something's size wasn't as expected. + // }; + // + // =========================================================================== + xdr["enum"]("ScErrorCode", { + scecArithDomain: 0, + scecIndexBounds: 1, + scecInvalidInput: 2, + scecMissingValue: 3, + scecExistingValue: 4, + scecExceededLimit: 5, + scecInvalidAction: 6, + scecInternalError: 7, + scecUnexpectedType: 8, + scecUnexpectedSize: 9 + }); + + // === xdr source ============================================================ + // + // union SCError switch (SCErrorType type) + // { + // case SCE_CONTRACT: + // uint32 contractCode; + // case SCE_WASM_VM: + // case SCE_CONTEXT: + // case SCE_STORAGE: + // case SCE_OBJECT: + // case SCE_CRYPTO: + // case SCE_EVENTS: + // case SCE_BUDGET: + // case SCE_VALUE: + // case SCE_AUTH: + // SCErrorCode code; + // }; + // + // =========================================================================== + xdr.union("ScError", { + switchOn: xdr.lookup("ScErrorType"), + switchName: "type", + switches: [["sceContract", "contractCode"], ["sceWasmVm", "code"], ["sceContext", "code"], ["sceStorage", "code"], ["sceObject", "code"], ["sceCrypto", "code"], ["sceEvents", "code"], ["sceBudget", "code"], ["sceValue", "code"], ["sceAuth", "code"]], + arms: { + contractCode: xdr.lookup("Uint32"), + code: xdr.lookup("ScErrorCode") + } + }); + + // === xdr source ============================================================ + // + // struct UInt128Parts { + // uint64 hi; + // uint64 lo; + // }; + // + // =========================================================================== + xdr.struct("UInt128Parts", [["hi", xdr.lookup("Uint64")], ["lo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct Int128Parts { + // int64 hi; + // uint64 lo; + // }; + // + // =========================================================================== + xdr.struct("Int128Parts", [["hi", xdr.lookup("Int64")], ["lo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct UInt256Parts { + // uint64 hi_hi; + // uint64 hi_lo; + // uint64 lo_hi; + // uint64 lo_lo; + // }; + // + // =========================================================================== + xdr.struct("UInt256Parts", [["hiHi", xdr.lookup("Uint64")], ["hiLo", xdr.lookup("Uint64")], ["loHi", xdr.lookup("Uint64")], ["loLo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct Int256Parts { + // int64 hi_hi; + // uint64 hi_lo; + // uint64 lo_hi; + // uint64 lo_lo; + // }; + // + // =========================================================================== + xdr.struct("Int256Parts", [["hiHi", xdr.lookup("Int64")], ["hiLo", xdr.lookup("Uint64")], ["loHi", xdr.lookup("Uint64")], ["loLo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // enum ContractExecutableType + // { + // CONTRACT_EXECUTABLE_WASM = 0, + // CONTRACT_EXECUTABLE_STELLAR_ASSET = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractExecutableType", { + contractExecutableWasm: 0, + contractExecutableStellarAsset: 1 + }); + + // === xdr source ============================================================ + // + // union ContractExecutable switch (ContractExecutableType type) + // { + // case CONTRACT_EXECUTABLE_WASM: + // Hash wasm_hash; + // case CONTRACT_EXECUTABLE_STELLAR_ASSET: + // void; + // }; + // + // =========================================================================== + xdr.union("ContractExecutable", { + switchOn: xdr.lookup("ContractExecutableType"), + switchName: "type", + switches: [["contractExecutableWasm", "wasmHash"], ["contractExecutableStellarAsset", xdr["void"]()]], + arms: { + wasmHash: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum SCAddressType + // { + // SC_ADDRESS_TYPE_ACCOUNT = 0, + // SC_ADDRESS_TYPE_CONTRACT = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ScAddressType", { + scAddressTypeAccount: 0, + scAddressTypeContract: 1 + }); + + // === xdr source ============================================================ + // + // union SCAddress switch (SCAddressType type) + // { + // case SC_ADDRESS_TYPE_ACCOUNT: + // AccountID accountId; + // case SC_ADDRESS_TYPE_CONTRACT: + // Hash contractId; + // }; + // + // =========================================================================== + xdr.union("ScAddress", { + switchOn: xdr.lookup("ScAddressType"), + switchName: "type", + switches: [["scAddressTypeAccount", "accountId"], ["scAddressTypeContract", "contractId"]], + arms: { + accountId: xdr.lookup("AccountId"), + contractId: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // const SCSYMBOL_LIMIT = 32; + // + // =========================================================================== + xdr["const"]("SCSYMBOL_LIMIT", 32); + + // === xdr source ============================================================ + // + // typedef SCVal SCVec<>; + // + // =========================================================================== + xdr.typedef("ScVec", xdr.varArray(xdr.lookup("ScVal"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef SCMapEntry SCMap<>; + // + // =========================================================================== + xdr.typedef("ScMap", xdr.varArray(xdr.lookup("ScMapEntry"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef opaque SCBytes<>; + // + // =========================================================================== + xdr.typedef("ScBytes", xdr.varOpaque()); + + // === xdr source ============================================================ + // + // typedef string SCString<>; + // + // =========================================================================== + xdr.typedef("ScString", xdr.string()); + + // === xdr source ============================================================ + // + // typedef string SCSymbol; + // + // =========================================================================== + xdr.typedef("ScSymbol", xdr.string(SCSYMBOL_LIMIT)); + + // === xdr source ============================================================ + // + // struct SCNonceKey { + // int64 nonce; + // }; + // + // =========================================================================== + xdr.struct("ScNonceKey", [["nonce", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct SCContractInstance { + // ContractExecutable executable; + // SCMap* storage; + // }; + // + // =========================================================================== + xdr.struct("ScContractInstance", [["executable", xdr.lookup("ContractExecutable")], ["storage", xdr.option(xdr.lookup("ScMap"))]]); + + // === xdr source ============================================================ + // + // union SCVal switch (SCValType type) + // { + // + // case SCV_BOOL: + // bool b; + // case SCV_VOID: + // void; + // case SCV_ERROR: + // SCError error; + // + // case SCV_U32: + // uint32 u32; + // case SCV_I32: + // int32 i32; + // + // case SCV_U64: + // uint64 u64; + // case SCV_I64: + // int64 i64; + // case SCV_TIMEPOINT: + // TimePoint timepoint; + // case SCV_DURATION: + // Duration duration; + // + // case SCV_U128: + // UInt128Parts u128; + // case SCV_I128: + // Int128Parts i128; + // + // case SCV_U256: + // UInt256Parts u256; + // case SCV_I256: + // Int256Parts i256; + // + // case SCV_BYTES: + // SCBytes bytes; + // case SCV_STRING: + // SCString str; + // case SCV_SYMBOL: + // SCSymbol sym; + // + // // Vec and Map are recursive so need to live + // // behind an option, due to xdrpp limitations. + // case SCV_VEC: + // SCVec *vec; + // case SCV_MAP: + // SCMap *map; + // + // case SCV_ADDRESS: + // SCAddress address; + // + // // Special SCVals reserved for system-constructed contract-data + // // ledger keys, not generally usable elsewhere. + // case SCV_LEDGER_KEY_CONTRACT_INSTANCE: + // void; + // case SCV_LEDGER_KEY_NONCE: + // SCNonceKey nonce_key; + // + // case SCV_CONTRACT_INSTANCE: + // SCContractInstance instance; + // }; + // + // =========================================================================== + xdr.union("ScVal", { + switchOn: xdr.lookup("ScValType"), + switchName: "type", + switches: [["scvBool", "b"], ["scvVoid", xdr["void"]()], ["scvError", "error"], ["scvU32", "u32"], ["scvI32", "i32"], ["scvU64", "u64"], ["scvI64", "i64"], ["scvTimepoint", "timepoint"], ["scvDuration", "duration"], ["scvU128", "u128"], ["scvI128", "i128"], ["scvU256", "u256"], ["scvI256", "i256"], ["scvBytes", "bytes"], ["scvString", "str"], ["scvSymbol", "sym"], ["scvVec", "vec"], ["scvMap", "map"], ["scvAddress", "address"], ["scvLedgerKeyContractInstance", xdr["void"]()], ["scvLedgerKeyNonce", "nonceKey"], ["scvContractInstance", "instance"]], + arms: { + b: xdr.bool(), + error: xdr.lookup("ScError"), + u32: xdr.lookup("Uint32"), + i32: xdr.lookup("Int32"), + u64: xdr.lookup("Uint64"), + i64: xdr.lookup("Int64"), + timepoint: xdr.lookup("TimePoint"), + duration: xdr.lookup("Duration"), + u128: xdr.lookup("UInt128Parts"), + i128: xdr.lookup("Int128Parts"), + u256: xdr.lookup("UInt256Parts"), + i256: xdr.lookup("Int256Parts"), + bytes: xdr.lookup("ScBytes"), + str: xdr.lookup("ScString"), + sym: xdr.lookup("ScSymbol"), + vec: xdr.option(xdr.lookup("ScVec")), + map: xdr.option(xdr.lookup("ScMap")), + address: xdr.lookup("ScAddress"), + nonceKey: xdr.lookup("ScNonceKey"), + instance: xdr.lookup("ScContractInstance") + } + }); + + // === xdr source ============================================================ + // + // struct SCMapEntry + // { + // SCVal key; + // SCVal val; + // }; + // + // =========================================================================== + xdr.struct("ScMapEntry", [["key", xdr.lookup("ScVal")], ["val", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // enum SCEnvMetaKind + // { + // SC_ENV_META_KIND_INTERFACE_VERSION = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ScEnvMetaKind", { + scEnvMetaKindInterfaceVersion: 0 + }); + + // === xdr source ============================================================ + // + // struct { + // uint32 protocol; + // uint32 preRelease; + // } + // + // =========================================================================== + xdr.struct("ScEnvMetaEntryInterfaceVersion", [["protocol", xdr.lookup("Uint32")], ["preRelease", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union SCEnvMetaEntry switch (SCEnvMetaKind kind) + // { + // case SC_ENV_META_KIND_INTERFACE_VERSION: + // struct { + // uint32 protocol; + // uint32 preRelease; + // } interfaceVersion; + // }; + // + // =========================================================================== + xdr.union("ScEnvMetaEntry", { + switchOn: xdr.lookup("ScEnvMetaKind"), + switchName: "kind", + switches: [["scEnvMetaKindInterfaceVersion", "interfaceVersion"]], + arms: { + interfaceVersion: xdr.lookup("ScEnvMetaEntryInterfaceVersion") + } + }); + + // === xdr source ============================================================ + // + // struct SCMetaV0 + // { + // string key<>; + // string val<>; + // }; + // + // =========================================================================== + xdr.struct("ScMetaV0", [["key", xdr.string()], ["val", xdr.string()]]); + + // === xdr source ============================================================ + // + // enum SCMetaKind + // { + // SC_META_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ScMetaKind", { + scMetaV0: 0 + }); + + // === xdr source ============================================================ + // + // union SCMetaEntry switch (SCMetaKind kind) + // { + // case SC_META_V0: + // SCMetaV0 v0; + // }; + // + // =========================================================================== + xdr.union("ScMetaEntry", { + switchOn: xdr.lookup("ScMetaKind"), + switchName: "kind", + switches: [["scMetaV0", "v0"]], + arms: { + v0: xdr.lookup("ScMetaV0") + } + }); + + // === xdr source ============================================================ + // + // const SC_SPEC_DOC_LIMIT = 1024; + // + // =========================================================================== + xdr["const"]("SC_SPEC_DOC_LIMIT", 1024); + + // === xdr source ============================================================ + // + // enum SCSpecType + // { + // SC_SPEC_TYPE_VAL = 0, + // + // // Types with no parameters. + // SC_SPEC_TYPE_BOOL = 1, + // SC_SPEC_TYPE_VOID = 2, + // SC_SPEC_TYPE_ERROR = 3, + // SC_SPEC_TYPE_U32 = 4, + // SC_SPEC_TYPE_I32 = 5, + // SC_SPEC_TYPE_U64 = 6, + // SC_SPEC_TYPE_I64 = 7, + // SC_SPEC_TYPE_TIMEPOINT = 8, + // SC_SPEC_TYPE_DURATION = 9, + // SC_SPEC_TYPE_U128 = 10, + // SC_SPEC_TYPE_I128 = 11, + // SC_SPEC_TYPE_U256 = 12, + // SC_SPEC_TYPE_I256 = 13, + // SC_SPEC_TYPE_BYTES = 14, + // SC_SPEC_TYPE_STRING = 16, + // SC_SPEC_TYPE_SYMBOL = 17, + // SC_SPEC_TYPE_ADDRESS = 19, + // + // // Types with parameters. + // SC_SPEC_TYPE_OPTION = 1000, + // SC_SPEC_TYPE_RESULT = 1001, + // SC_SPEC_TYPE_VEC = 1002, + // SC_SPEC_TYPE_MAP = 1004, + // SC_SPEC_TYPE_TUPLE = 1005, + // SC_SPEC_TYPE_BYTES_N = 1006, + // + // // User defined types. + // SC_SPEC_TYPE_UDT = 2000 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecType", { + scSpecTypeVal: 0, + scSpecTypeBool: 1, + scSpecTypeVoid: 2, + scSpecTypeError: 3, + scSpecTypeU32: 4, + scSpecTypeI32: 5, + scSpecTypeU64: 6, + scSpecTypeI64: 7, + scSpecTypeTimepoint: 8, + scSpecTypeDuration: 9, + scSpecTypeU128: 10, + scSpecTypeI128: 11, + scSpecTypeU256: 12, + scSpecTypeI256: 13, + scSpecTypeBytes: 14, + scSpecTypeString: 16, + scSpecTypeSymbol: 17, + scSpecTypeAddress: 19, + scSpecTypeOption: 1000, + scSpecTypeResult: 1001, + scSpecTypeVec: 1002, + scSpecTypeMap: 1004, + scSpecTypeTuple: 1005, + scSpecTypeBytesN: 1006, + scSpecTypeUdt: 2000 + }); + + // === xdr source ============================================================ + // + // struct SCSpecTypeOption + // { + // SCSpecTypeDef valueType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeOption", [["valueType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeResult + // { + // SCSpecTypeDef okType; + // SCSpecTypeDef errorType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeResult", [["okType", xdr.lookup("ScSpecTypeDef")], ["errorType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeVec + // { + // SCSpecTypeDef elementType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeVec", [["elementType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeMap + // { + // SCSpecTypeDef keyType; + // SCSpecTypeDef valueType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeMap", [["keyType", xdr.lookup("ScSpecTypeDef")], ["valueType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeTuple + // { + // SCSpecTypeDef valueTypes<12>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeTuple", [["valueTypes", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 12)]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeBytesN + // { + // uint32 n; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeBytesN", [["n", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeUDT + // { + // string name<60>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeUdt", [["name", xdr.string(60)]]); + + // === xdr source ============================================================ + // + // union SCSpecTypeDef switch (SCSpecType type) + // { + // case SC_SPEC_TYPE_VAL: + // case SC_SPEC_TYPE_BOOL: + // case SC_SPEC_TYPE_VOID: + // case SC_SPEC_TYPE_ERROR: + // case SC_SPEC_TYPE_U32: + // case SC_SPEC_TYPE_I32: + // case SC_SPEC_TYPE_U64: + // case SC_SPEC_TYPE_I64: + // case SC_SPEC_TYPE_TIMEPOINT: + // case SC_SPEC_TYPE_DURATION: + // case SC_SPEC_TYPE_U128: + // case SC_SPEC_TYPE_I128: + // case SC_SPEC_TYPE_U256: + // case SC_SPEC_TYPE_I256: + // case SC_SPEC_TYPE_BYTES: + // case SC_SPEC_TYPE_STRING: + // case SC_SPEC_TYPE_SYMBOL: + // case SC_SPEC_TYPE_ADDRESS: + // void; + // case SC_SPEC_TYPE_OPTION: + // SCSpecTypeOption option; + // case SC_SPEC_TYPE_RESULT: + // SCSpecTypeResult result; + // case SC_SPEC_TYPE_VEC: + // SCSpecTypeVec vec; + // case SC_SPEC_TYPE_MAP: + // SCSpecTypeMap map; + // case SC_SPEC_TYPE_TUPLE: + // SCSpecTypeTuple tuple; + // case SC_SPEC_TYPE_BYTES_N: + // SCSpecTypeBytesN bytesN; + // case SC_SPEC_TYPE_UDT: + // SCSpecTypeUDT udt; + // }; + // + // =========================================================================== + xdr.union("ScSpecTypeDef", { + switchOn: xdr.lookup("ScSpecType"), + switchName: "type", + switches: [["scSpecTypeVal", xdr["void"]()], ["scSpecTypeBool", xdr["void"]()], ["scSpecTypeVoid", xdr["void"]()], ["scSpecTypeError", xdr["void"]()], ["scSpecTypeU32", xdr["void"]()], ["scSpecTypeI32", xdr["void"]()], ["scSpecTypeU64", xdr["void"]()], ["scSpecTypeI64", xdr["void"]()], ["scSpecTypeTimepoint", xdr["void"]()], ["scSpecTypeDuration", xdr["void"]()], ["scSpecTypeU128", xdr["void"]()], ["scSpecTypeI128", xdr["void"]()], ["scSpecTypeU256", xdr["void"]()], ["scSpecTypeI256", xdr["void"]()], ["scSpecTypeBytes", xdr["void"]()], ["scSpecTypeString", xdr["void"]()], ["scSpecTypeSymbol", xdr["void"]()], ["scSpecTypeAddress", xdr["void"]()], ["scSpecTypeOption", "option"], ["scSpecTypeResult", "result"], ["scSpecTypeVec", "vec"], ["scSpecTypeMap", "map"], ["scSpecTypeTuple", "tuple"], ["scSpecTypeBytesN", "bytesN"], ["scSpecTypeUdt", "udt"]], + arms: { + option: xdr.lookup("ScSpecTypeOption"), + result: xdr.lookup("ScSpecTypeResult"), + vec: xdr.lookup("ScSpecTypeVec"), + map: xdr.lookup("ScSpecTypeMap"), + tuple: xdr.lookup("ScSpecTypeTuple"), + bytesN: xdr.lookup("ScSpecTypeBytesN"), + udt: xdr.lookup("ScSpecTypeUdt") + } + }); + + // === xdr source ============================================================ + // + // struct SCSpecUDTStructFieldV0 + // { + // string doc; + // string name<30>; + // SCSpecTypeDef type; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtStructFieldV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(30)], ["type", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTStructV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTStructFieldV0 fields<40>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtStructV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["fields", xdr.varArray(xdr.lookup("ScSpecUdtStructFieldV0"), 40)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionCaseVoidV0 + // { + // string doc; + // string name<60>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionCaseVoidV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionCaseTupleV0 + // { + // string doc; + // string name<60>; + // SCSpecTypeDef type<12>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionCaseTupleV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["type", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 12)]]); + + // === xdr source ============================================================ + // + // enum SCSpecUDTUnionCaseV0Kind + // { + // SC_SPEC_UDT_UNION_CASE_VOID_V0 = 0, + // SC_SPEC_UDT_UNION_CASE_TUPLE_V0 = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecUdtUnionCaseV0Kind", { + scSpecUdtUnionCaseVoidV0: 0, + scSpecUdtUnionCaseTupleV0: 1 + }); + + // === xdr source ============================================================ + // + // union SCSpecUDTUnionCaseV0 switch (SCSpecUDTUnionCaseV0Kind kind) + // { + // case SC_SPEC_UDT_UNION_CASE_VOID_V0: + // SCSpecUDTUnionCaseVoidV0 voidCase; + // case SC_SPEC_UDT_UNION_CASE_TUPLE_V0: + // SCSpecUDTUnionCaseTupleV0 tupleCase; + // }; + // + // =========================================================================== + xdr.union("ScSpecUdtUnionCaseV0", { + switchOn: xdr.lookup("ScSpecUdtUnionCaseV0Kind"), + switchName: "kind", + switches: [["scSpecUdtUnionCaseVoidV0", "voidCase"], ["scSpecUdtUnionCaseTupleV0", "tupleCase"]], + arms: { + voidCase: xdr.lookup("ScSpecUdtUnionCaseVoidV0"), + tupleCase: xdr.lookup("ScSpecUdtUnionCaseTupleV0") + } + }); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTUnionCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtUnionCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTEnumCaseV0 + // { + // string doc; + // string name<60>; + // uint32 value; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtEnumCaseV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["value", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTEnumV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTEnumCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtEnumV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtEnumCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTErrorEnumCaseV0 + // { + // string doc; + // string name<60>; + // uint32 value; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtErrorEnumCaseV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["value", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTErrorEnumV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTErrorEnumCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtErrorEnumV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtErrorEnumCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecFunctionInputV0 + // { + // string doc; + // string name<30>; + // SCSpecTypeDef type; + // }; + // + // =========================================================================== + xdr.struct("ScSpecFunctionInputV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(30)], ["type", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecFunctionV0 + // { + // string doc; + // SCSymbol name; + // SCSpecFunctionInputV0 inputs<10>; + // SCSpecTypeDef outputs<1>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecFunctionV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.lookup("ScSymbol")], ["inputs", xdr.varArray(xdr.lookup("ScSpecFunctionInputV0"), 10)], ["outputs", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 1)]]); + + // === xdr source ============================================================ + // + // enum SCSpecEntryKind + // { + // SC_SPEC_ENTRY_FUNCTION_V0 = 0, + // SC_SPEC_ENTRY_UDT_STRUCT_V0 = 1, + // SC_SPEC_ENTRY_UDT_UNION_V0 = 2, + // SC_SPEC_ENTRY_UDT_ENUM_V0 = 3, + // SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0 = 4 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecEntryKind", { + scSpecEntryFunctionV0: 0, + scSpecEntryUdtStructV0: 1, + scSpecEntryUdtUnionV0: 2, + scSpecEntryUdtEnumV0: 3, + scSpecEntryUdtErrorEnumV0: 4 + }); + + // === xdr source ============================================================ + // + // union SCSpecEntry switch (SCSpecEntryKind kind) + // { + // case SC_SPEC_ENTRY_FUNCTION_V0: + // SCSpecFunctionV0 functionV0; + // case SC_SPEC_ENTRY_UDT_STRUCT_V0: + // SCSpecUDTStructV0 udtStructV0; + // case SC_SPEC_ENTRY_UDT_UNION_V0: + // SCSpecUDTUnionV0 udtUnionV0; + // case SC_SPEC_ENTRY_UDT_ENUM_V0: + // SCSpecUDTEnumV0 udtEnumV0; + // case SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0: + // SCSpecUDTErrorEnumV0 udtErrorEnumV0; + // }; + // + // =========================================================================== + xdr.union("ScSpecEntry", { + switchOn: xdr.lookup("ScSpecEntryKind"), + switchName: "kind", + switches: [["scSpecEntryFunctionV0", "functionV0"], ["scSpecEntryUdtStructV0", "udtStructV0"], ["scSpecEntryUdtUnionV0", "udtUnionV0"], ["scSpecEntryUdtEnumV0", "udtEnumV0"], ["scSpecEntryUdtErrorEnumV0", "udtErrorEnumV0"]], + arms: { + functionV0: xdr.lookup("ScSpecFunctionV0"), + udtStructV0: xdr.lookup("ScSpecUdtStructV0"), + udtUnionV0: xdr.lookup("ScSpecUdtUnionV0"), + udtEnumV0: xdr.lookup("ScSpecUdtEnumV0"), + udtErrorEnumV0: xdr.lookup("ScSpecUdtErrorEnumV0") + } + }); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractExecutionLanesV0 + // { + // // maximum number of Soroban transactions per ledger + // uint32 ledgerMaxTxCount; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractExecutionLanesV0", [["ledgerMaxTxCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractComputeV0 + // { + // // Maximum instructions per ledger + // int64 ledgerMaxInstructions; + // // Maximum instructions per transaction + // int64 txMaxInstructions; + // // Cost of 10000 instructions + // int64 feeRatePerInstructionsIncrement; + // + // // Memory limit per transaction. Unlike instructions, there is no fee + // // for memory, just the limit. + // uint32 txMemoryLimit; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractComputeV0", [["ledgerMaxInstructions", xdr.lookup("Int64")], ["txMaxInstructions", xdr.lookup("Int64")], ["feeRatePerInstructionsIncrement", xdr.lookup("Int64")], ["txMemoryLimit", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractLedgerCostV0 + // { + // // Maximum number of ledger entry read operations per ledger + // uint32 ledgerMaxReadLedgerEntries; + // // Maximum number of bytes that can be read per ledger + // uint32 ledgerMaxReadBytes; + // // Maximum number of ledger entry write operations per ledger + // uint32 ledgerMaxWriteLedgerEntries; + // // Maximum number of bytes that can be written per ledger + // uint32 ledgerMaxWriteBytes; + // + // // Maximum number of ledger entry read operations per transaction + // uint32 txMaxReadLedgerEntries; + // // Maximum number of bytes that can be read per transaction + // uint32 txMaxReadBytes; + // // Maximum number of ledger entry write operations per transaction + // uint32 txMaxWriteLedgerEntries; + // // Maximum number of bytes that can be written per transaction + // uint32 txMaxWriteBytes; + // + // int64 feeReadLedgerEntry; // Fee per ledger entry read + // int64 feeWriteLedgerEntry; // Fee per ledger entry write + // + // int64 feeRead1KB; // Fee for reading 1KB + // + // // The following parameters determine the write fee per 1KB. + // // Write fee grows linearly until bucket list reaches this size + // int64 bucketListTargetSizeBytes; + // // Fee per 1KB write when the bucket list is empty + // int64 writeFee1KBBucketListLow; + // // Fee per 1KB write when the bucket list has reached `bucketListTargetSizeBytes` + // int64 writeFee1KBBucketListHigh; + // // Write fee multiplier for any additional data past the first `bucketListTargetSizeBytes` + // uint32 bucketListWriteFeeGrowthFactor; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractLedgerCostV0", [["ledgerMaxReadLedgerEntries", xdr.lookup("Uint32")], ["ledgerMaxReadBytes", xdr.lookup("Uint32")], ["ledgerMaxWriteLedgerEntries", xdr.lookup("Uint32")], ["ledgerMaxWriteBytes", xdr.lookup("Uint32")], ["txMaxReadLedgerEntries", xdr.lookup("Uint32")], ["txMaxReadBytes", xdr.lookup("Uint32")], ["txMaxWriteLedgerEntries", xdr.lookup("Uint32")], ["txMaxWriteBytes", xdr.lookup("Uint32")], ["feeReadLedgerEntry", xdr.lookup("Int64")], ["feeWriteLedgerEntry", xdr.lookup("Int64")], ["feeRead1Kb", xdr.lookup("Int64")], ["bucketListTargetSizeBytes", xdr.lookup("Int64")], ["writeFee1KbBucketListLow", xdr.lookup("Int64")], ["writeFee1KbBucketListHigh", xdr.lookup("Int64")], ["bucketListWriteFeeGrowthFactor", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractHistoricalDataV0 + // { + // int64 feeHistorical1KB; // Fee for storing 1KB in archives + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractHistoricalDataV0", [["feeHistorical1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractEventsV0 + // { + // // Maximum size of events that a contract call can emit. + // uint32 txMaxContractEventsSizeBytes; + // // Fee for generating 1KB of contract events. + // int64 feeContractEvents1KB; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractEventsV0", [["txMaxContractEventsSizeBytes", xdr.lookup("Uint32")], ["feeContractEvents1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractBandwidthV0 + // { + // // Maximum sum of all transaction sizes in the ledger in bytes + // uint32 ledgerMaxTxsSizeBytes; + // // Maximum size in bytes for a transaction + // uint32 txMaxSizeBytes; + // + // // Fee for 1 KB of transaction size + // int64 feeTxSize1KB; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractBandwidthV0", [["ledgerMaxTxsSizeBytes", xdr.lookup("Uint32")], ["txMaxSizeBytes", xdr.lookup("Uint32")], ["feeTxSize1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum ContractCostType { + // // Cost of running 1 wasm instruction + // WasmInsnExec = 0, + // // Cost of allocating a slice of memory (in bytes) + // MemAlloc = 1, + // // Cost of copying a slice of bytes into a pre-allocated memory + // MemCpy = 2, + // // Cost of comparing two slices of memory + // MemCmp = 3, + // // Cost of a host function dispatch, not including the actual work done by + // // the function nor the cost of VM invocation machinary + // DispatchHostFunction = 4, + // // Cost of visiting a host object from the host object storage. Exists to + // // make sure some baseline cost coverage, i.e. repeatly visiting objects + // // by the guest will always incur some charges. + // VisitObject = 5, + // // Cost of serializing an xdr object to bytes + // ValSer = 6, + // // Cost of deserializing an xdr object from bytes + // ValDeser = 7, + // // Cost of computing the sha256 hash from bytes + // ComputeSha256Hash = 8, + // // Cost of computing the ed25519 pubkey from bytes + // ComputeEd25519PubKey = 9, + // // Cost of verifying ed25519 signature of a payload. + // VerifyEd25519Sig = 10, + // // Cost of instantiation a VM from wasm bytes code. + // VmInstantiation = 11, + // // Cost of instantiation a VM from a cached state. + // VmCachedInstantiation = 12, + // // Cost of invoking a function on the VM. If the function is a host function, + // // additional cost will be covered by `DispatchHostFunction`. + // InvokeVmFunction = 13, + // // Cost of computing a keccak256 hash from bytes. + // ComputeKeccak256Hash = 14, + // // Cost of decoding an ECDSA signature computed from a 256-bit prime modulus + // // curve (e.g. secp256k1 and secp256r1) + // DecodeEcdsaCurve256Sig = 15, + // // Cost of recovering an ECDSA secp256k1 key from a signature. + // RecoverEcdsaSecp256k1Key = 16, + // // Cost of int256 addition (`+`) and subtraction (`-`) operations + // Int256AddSub = 17, + // // Cost of int256 multiplication (`*`) operation + // Int256Mul = 18, + // // Cost of int256 division (`/`) operation + // Int256Div = 19, + // // Cost of int256 power (`exp`) operation + // Int256Pow = 20, + // // Cost of int256 shift (`shl`, `shr`) operation + // Int256Shift = 21, + // // Cost of drawing random bytes using a ChaCha20 PRNG + // ChaCha20DrawBytes = 22, + // + // // Cost of parsing wasm bytes that only encode instructions. + // ParseWasmInstructions = 23, + // // Cost of parsing a known number of wasm functions. + // ParseWasmFunctions = 24, + // // Cost of parsing a known number of wasm globals. + // ParseWasmGlobals = 25, + // // Cost of parsing a known number of wasm table entries. + // ParseWasmTableEntries = 26, + // // Cost of parsing a known number of wasm types. + // ParseWasmTypes = 27, + // // Cost of parsing a known number of wasm data segments. + // ParseWasmDataSegments = 28, + // // Cost of parsing a known number of wasm element segments. + // ParseWasmElemSegments = 29, + // // Cost of parsing a known number of wasm imports. + // ParseWasmImports = 30, + // // Cost of parsing a known number of wasm exports. + // ParseWasmExports = 31, + // // Cost of parsing a known number of data segment bytes. + // ParseWasmDataSegmentBytes = 32, + // + // // Cost of instantiating wasm bytes that only encode instructions. + // InstantiateWasmInstructions = 33, + // // Cost of instantiating a known number of wasm functions. + // InstantiateWasmFunctions = 34, + // // Cost of instantiating a known number of wasm globals. + // InstantiateWasmGlobals = 35, + // // Cost of instantiating a known number of wasm table entries. + // InstantiateWasmTableEntries = 36, + // // Cost of instantiating a known number of wasm types. + // InstantiateWasmTypes = 37, + // // Cost of instantiating a known number of wasm data segments. + // InstantiateWasmDataSegments = 38, + // // Cost of instantiating a known number of wasm element segments. + // InstantiateWasmElemSegments = 39, + // // Cost of instantiating a known number of wasm imports. + // InstantiateWasmImports = 40, + // // Cost of instantiating a known number of wasm exports. + // InstantiateWasmExports = 41, + // // Cost of instantiating a known number of data segment bytes. + // InstantiateWasmDataSegmentBytes = 42, + // + // // Cost of decoding a bytes array representing an uncompressed SEC-1 encoded + // // point on a 256-bit elliptic curve + // Sec1DecodePointUncompressed = 43, + // // Cost of verifying an ECDSA Secp256r1 signature + // VerifyEcdsaSecp256r1Sig = 44, + // + // // Cost of encoding a BLS12-381 Fp (base field element) + // Bls12381EncodeFp = 45, + // // Cost of decoding a BLS12-381 Fp (base field element) + // Bls12381DecodeFp = 46, + // // Cost of checking a G1 point lies on the curve + // Bls12381G1CheckPointOnCurve = 47, + // // Cost of checking a G1 point belongs to the correct subgroup + // Bls12381G1CheckPointInSubgroup = 48, + // // Cost of checking a G2 point lies on the curve + // Bls12381G2CheckPointOnCurve = 49, + // // Cost of checking a G2 point belongs to the correct subgroup + // Bls12381G2CheckPointInSubgroup = 50, + // // Cost of converting a BLS12-381 G1 point from projective to affine coordinates + // Bls12381G1ProjectiveToAffine = 51, + // // Cost of converting a BLS12-381 G2 point from projective to affine coordinates + // Bls12381G2ProjectiveToAffine = 52, + // // Cost of performing BLS12-381 G1 point addition + // Bls12381G1Add = 53, + // // Cost of performing BLS12-381 G1 scalar multiplication + // Bls12381G1Mul = 54, + // // Cost of performing BLS12-381 G1 multi-scalar multiplication (MSM) + // Bls12381G1Msm = 55, + // // Cost of mapping a BLS12-381 Fp field element to a G1 point + // Bls12381MapFpToG1 = 56, + // // Cost of hashing to a BLS12-381 G1 point + // Bls12381HashToG1 = 57, + // // Cost of performing BLS12-381 G2 point addition + // Bls12381G2Add = 58, + // // Cost of performing BLS12-381 G2 scalar multiplication + // Bls12381G2Mul = 59, + // // Cost of performing BLS12-381 G2 multi-scalar multiplication (MSM) + // Bls12381G2Msm = 60, + // // Cost of mapping a BLS12-381 Fp2 field element to a G2 point + // Bls12381MapFp2ToG2 = 61, + // // Cost of hashing to a BLS12-381 G2 point + // Bls12381HashToG2 = 62, + // // Cost of performing BLS12-381 pairing operation + // Bls12381Pairing = 63, + // // Cost of converting a BLS12-381 scalar element from U256 + // Bls12381FrFromU256 = 64, + // // Cost of converting a BLS12-381 scalar element to U256 + // Bls12381FrToU256 = 65, + // // Cost of performing BLS12-381 scalar element addition/subtraction + // Bls12381FrAddSub = 66, + // // Cost of performing BLS12-381 scalar element multiplication + // Bls12381FrMul = 67, + // // Cost of performing BLS12-381 scalar element exponentiation + // Bls12381FrPow = 68, + // // Cost of performing BLS12-381 scalar element inversion + // Bls12381FrInv = 69 + // }; + // + // =========================================================================== + xdr["enum"]("ContractCostType", { + wasmInsnExec: 0, + memAlloc: 1, + memCpy: 2, + memCmp: 3, + dispatchHostFunction: 4, + visitObject: 5, + valSer: 6, + valDeser: 7, + computeSha256Hash: 8, + computeEd25519PubKey: 9, + verifyEd25519Sig: 10, + vmInstantiation: 11, + vmCachedInstantiation: 12, + invokeVmFunction: 13, + computeKeccak256Hash: 14, + decodeEcdsaCurve256Sig: 15, + recoverEcdsaSecp256k1Key: 16, + int256AddSub: 17, + int256Mul: 18, + int256Div: 19, + int256Pow: 20, + int256Shift: 21, + chaCha20DrawBytes: 22, + parseWasmInstructions: 23, + parseWasmFunctions: 24, + parseWasmGlobals: 25, + parseWasmTableEntries: 26, + parseWasmTypes: 27, + parseWasmDataSegments: 28, + parseWasmElemSegments: 29, + parseWasmImports: 30, + parseWasmExports: 31, + parseWasmDataSegmentBytes: 32, + instantiateWasmInstructions: 33, + instantiateWasmFunctions: 34, + instantiateWasmGlobals: 35, + instantiateWasmTableEntries: 36, + instantiateWasmTypes: 37, + instantiateWasmDataSegments: 38, + instantiateWasmElemSegments: 39, + instantiateWasmImports: 40, + instantiateWasmExports: 41, + instantiateWasmDataSegmentBytes: 42, + sec1DecodePointUncompressed: 43, + verifyEcdsaSecp256r1Sig: 44, + bls12381EncodeFp: 45, + bls12381DecodeFp: 46, + bls12381G1CheckPointOnCurve: 47, + bls12381G1CheckPointInSubgroup: 48, + bls12381G2CheckPointOnCurve: 49, + bls12381G2CheckPointInSubgroup: 50, + bls12381G1ProjectiveToAffine: 51, + bls12381G2ProjectiveToAffine: 52, + bls12381G1Add: 53, + bls12381G1Mul: 54, + bls12381G1Msm: 55, + bls12381MapFpToG1: 56, + bls12381HashToG1: 57, + bls12381G2Add: 58, + bls12381G2Mul: 59, + bls12381G2Msm: 60, + bls12381MapFp2ToG2: 61, + bls12381HashToG2: 62, + bls12381Pairing: 63, + bls12381FrFromU256: 64, + bls12381FrToU256: 65, + bls12381FrAddSub: 66, + bls12381FrMul: 67, + bls12381FrPow: 68, + bls12381FrInv: 69 + }); + + // === xdr source ============================================================ + // + // struct ContractCostParamEntry { + // // use `ext` to add more terms (e.g. higher order polynomials) in the future + // ExtensionPoint ext; + // + // int64 constTerm; + // int64 linearTerm; + // }; + // + // =========================================================================== + xdr.struct("ContractCostParamEntry", [["ext", xdr.lookup("ExtensionPoint")], ["constTerm", xdr.lookup("Int64")], ["linearTerm", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct StateArchivalSettings { + // uint32 maxEntryTTL; + // uint32 minTemporaryTTL; + // uint32 minPersistentTTL; + // + // // rent_fee = wfee_rate_average / rent_rate_denominator_for_type + // int64 persistentRentRateDenominator; + // int64 tempRentRateDenominator; + // + // // max number of entries that emit archival meta in a single ledger + // uint32 maxEntriesToArchive; + // + // // Number of snapshots to use when calculating average BucketList size + // uint32 bucketListSizeWindowSampleSize; + // + // // How often to sample the BucketList size for the average, in ledgers + // uint32 bucketListWindowSamplePeriod; + // + // // Maximum number of bytes that we scan for eviction per ledger + // uint32 evictionScanSize; + // + // // Lowest BucketList level to be scanned to evict entries + // uint32 startingEvictionScanLevel; + // }; + // + // =========================================================================== + xdr.struct("StateArchivalSettings", [["maxEntryTtl", xdr.lookup("Uint32")], ["minTemporaryTtl", xdr.lookup("Uint32")], ["minPersistentTtl", xdr.lookup("Uint32")], ["persistentRentRateDenominator", xdr.lookup("Int64")], ["tempRentRateDenominator", xdr.lookup("Int64")], ["maxEntriesToArchive", xdr.lookup("Uint32")], ["bucketListSizeWindowSampleSize", xdr.lookup("Uint32")], ["bucketListWindowSamplePeriod", xdr.lookup("Uint32")], ["evictionScanSize", xdr.lookup("Uint32")], ["startingEvictionScanLevel", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct EvictionIterator { + // uint32 bucketListLevel; + // bool isCurrBucket; + // uint64 bucketFileOffset; + // }; + // + // =========================================================================== + xdr.struct("EvictionIterator", [["bucketListLevel", xdr.lookup("Uint32")], ["isCurrBucket", xdr.bool()], ["bucketFileOffset", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // const CONTRACT_COST_COUNT_LIMIT = 1024; + // + // =========================================================================== + xdr["const"]("CONTRACT_COST_COUNT_LIMIT", 1024); + + // === xdr source ============================================================ + // + // typedef ContractCostParamEntry ContractCostParams; + // + // =========================================================================== + xdr.typedef("ContractCostParams", xdr.varArray(xdr.lookup("ContractCostParamEntry"), xdr.lookup("CONTRACT_COST_COUNT_LIMIT"))); + + // === xdr source ============================================================ + // + // enum ConfigSettingID + // { + // CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES = 0, + // CONFIG_SETTING_CONTRACT_COMPUTE_V0 = 1, + // CONFIG_SETTING_CONTRACT_LEDGER_COST_V0 = 2, + // CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0 = 3, + // CONFIG_SETTING_CONTRACT_EVENTS_V0 = 4, + // CONFIG_SETTING_CONTRACT_BANDWIDTH_V0 = 5, + // CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS = 6, + // CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7, + // CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8, + // CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9, + // CONFIG_SETTING_STATE_ARCHIVAL = 10, + // CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11, + // CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW = 12, + // CONFIG_SETTING_EVICTION_ITERATOR = 13 + // }; + // + // =========================================================================== + xdr["enum"]("ConfigSettingId", { + configSettingContractMaxSizeBytes: 0, + configSettingContractComputeV0: 1, + configSettingContractLedgerCostV0: 2, + configSettingContractHistoricalDataV0: 3, + configSettingContractEventsV0: 4, + configSettingContractBandwidthV0: 5, + configSettingContractCostParamsCpuInstructions: 6, + configSettingContractCostParamsMemoryBytes: 7, + configSettingContractDataKeySizeBytes: 8, + configSettingContractDataEntrySizeBytes: 9, + configSettingStateArchival: 10, + configSettingContractExecutionLanes: 11, + configSettingBucketlistSizeWindow: 12, + configSettingEvictionIterator: 13 + }); + + // === xdr source ============================================================ + // + // union ConfigSettingEntry switch (ConfigSettingID configSettingID) + // { + // case CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES: + // uint32 contractMaxSizeBytes; + // case CONFIG_SETTING_CONTRACT_COMPUTE_V0: + // ConfigSettingContractComputeV0 contractCompute; + // case CONFIG_SETTING_CONTRACT_LEDGER_COST_V0: + // ConfigSettingContractLedgerCostV0 contractLedgerCost; + // case CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0: + // ConfigSettingContractHistoricalDataV0 contractHistoricalData; + // case CONFIG_SETTING_CONTRACT_EVENTS_V0: + // ConfigSettingContractEventsV0 contractEvents; + // case CONFIG_SETTING_CONTRACT_BANDWIDTH_V0: + // ConfigSettingContractBandwidthV0 contractBandwidth; + // case CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS: + // ContractCostParams contractCostParamsCpuInsns; + // case CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES: + // ContractCostParams contractCostParamsMemBytes; + // case CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES: + // uint32 contractDataKeySizeBytes; + // case CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES: + // uint32 contractDataEntrySizeBytes; + // case CONFIG_SETTING_STATE_ARCHIVAL: + // StateArchivalSettings stateArchivalSettings; + // case CONFIG_SETTING_CONTRACT_EXECUTION_LANES: + // ConfigSettingContractExecutionLanesV0 contractExecutionLanes; + // case CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW: + // uint64 bucketListSizeWindow<>; + // case CONFIG_SETTING_EVICTION_ITERATOR: + // EvictionIterator evictionIterator; + // }; + // + // =========================================================================== + xdr.union("ConfigSettingEntry", { + switchOn: xdr.lookup("ConfigSettingId"), + switchName: "configSettingId", + switches: [["configSettingContractMaxSizeBytes", "contractMaxSizeBytes"], ["configSettingContractComputeV0", "contractCompute"], ["configSettingContractLedgerCostV0", "contractLedgerCost"], ["configSettingContractHistoricalDataV0", "contractHistoricalData"], ["configSettingContractEventsV0", "contractEvents"], ["configSettingContractBandwidthV0", "contractBandwidth"], ["configSettingContractCostParamsCpuInstructions", "contractCostParamsCpuInsns"], ["configSettingContractCostParamsMemoryBytes", "contractCostParamsMemBytes"], ["configSettingContractDataKeySizeBytes", "contractDataKeySizeBytes"], ["configSettingContractDataEntrySizeBytes", "contractDataEntrySizeBytes"], ["configSettingStateArchival", "stateArchivalSettings"], ["configSettingContractExecutionLanes", "contractExecutionLanes"], ["configSettingBucketlistSizeWindow", "bucketListSizeWindow"], ["configSettingEvictionIterator", "evictionIterator"]], + arms: { + contractMaxSizeBytes: xdr.lookup("Uint32"), + contractCompute: xdr.lookup("ConfigSettingContractComputeV0"), + contractLedgerCost: xdr.lookup("ConfigSettingContractLedgerCostV0"), + contractHistoricalData: xdr.lookup("ConfigSettingContractHistoricalDataV0"), + contractEvents: xdr.lookup("ConfigSettingContractEventsV0"), + contractBandwidth: xdr.lookup("ConfigSettingContractBandwidthV0"), + contractCostParamsCpuInsns: xdr.lookup("ContractCostParams"), + contractCostParamsMemBytes: xdr.lookup("ContractCostParams"), + contractDataKeySizeBytes: xdr.lookup("Uint32"), + contractDataEntrySizeBytes: xdr.lookup("Uint32"), + stateArchivalSettings: xdr.lookup("StateArchivalSettings"), + contractExecutionLanes: xdr.lookup("ConfigSettingContractExecutionLanesV0"), + bucketListSizeWindow: xdr.varArray(xdr.lookup("Uint64"), 2147483647), + evictionIterator: xdr.lookup("EvictionIterator") + } + }); +}); +/* harmony default export */ const curr_generated = (types); +;// ./src/xdr.js + +/* harmony default export */ const src_xdr = (curr_generated); +;// ./src/jsxdr.js + +var cereal = { + XdrWriter: xdr.XdrWriter, + XdrReader: xdr.XdrReader +}; +/* harmony default export */ const jsxdr = (cereal); +// EXTERNAL MODULE: ./node_modules/sha.js/index.js +var sha_js = __webpack_require__(2802); +;// ./src/hashing.js + +function hashing_hash(data) { + var hasher = new sha_js.sha256(); + hasher.update(data, 'utf8'); + return hasher.digest(); +} +;// ./src/signing.js +/* provided dependency */ var Buffer = __webpack_require__(3626)["A"]; +// This module provides the signing functionality used by the stellar network +// The code below may look a little strange... this is because we try to provide +// the most efficient signing method possible. First, we try to load the +// native `sodium-native` package for node.js environments, and if that fails we +// fallback to `tweetnacl` + +var actualMethods = {}; + +/** + * Use this flag to check if fast signing (provided by `sodium-native` package) is available. + * If your app is signing a large number of transaction or verifying a large number + * of signatures make sure `sodium-native` package is installed. + */ +var FastSigning = checkFastSigning(); +function signing_sign(data, secretKey) { + return actualMethods.sign(data, secretKey); +} +function signing_verify(data, signature, publicKey) { + return actualMethods.verify(data, signature, publicKey); +} +function generate(secretKey) { + return actualMethods.generate(secretKey); +} +function checkFastSigning() { + return typeof window === 'undefined' ? checkFastSigningNode() : checkFastSigningBrowser(); +} +function checkFastSigningNode() { + // NOTE: we use commonjs style require here because es6 imports + // can only occur at the top level. thanks, obama. + var sodium; + try { + // eslint-disable-next-line + sodium = __webpack_require__(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'sodium-native'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); + } catch (err) { + return checkFastSigningBrowser(); + } + if (!Object.keys(sodium).length) { + return checkFastSigningBrowser(); + } + actualMethods.generate = function (secretKey) { + var pk = Buffer.alloc(sodium.crypto_sign_PUBLICKEYBYTES); + var sk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES); + sodium.crypto_sign_seed_keypair(pk, sk, secretKey); + return pk; + }; + actualMethods.sign = function (data, secretKey) { + data = Buffer.from(data); + var signature = Buffer.alloc(sodium.crypto_sign_BYTES); + sodium.crypto_sign_detached(signature, data, secretKey); + return signature; + }; + actualMethods.verify = function (data, signature, publicKey) { + data = Buffer.from(data); + try { + return sodium.crypto_sign_verify_detached(signature, data, publicKey); + } catch (e) { + return false; + } + }; + return true; +} +function checkFastSigningBrowser() { + // fallback to `tweetnacl` if we're in the browser or + // if there was a failure installing `sodium-native` + // eslint-disable-next-line + var nacl = __webpack_require__(8947); + actualMethods.generate = function (secretKey) { + var secretKeyUint8 = new Uint8Array(secretKey); + var naclKeys = nacl.sign.keyPair.fromSeed(secretKeyUint8); + return Buffer.from(naclKeys.publicKey); + }; + actualMethods.sign = function (data, secretKey) { + data = Buffer.from(data); + data = new Uint8Array(data.toJSON().data); + secretKey = new Uint8Array(secretKey.toJSON().data); + var signature = nacl.sign.detached(data, secretKey); + return Buffer.from(signature); + }; + actualMethods.verify = function (data, signature, publicKey) { + data = Buffer.from(data); + data = new Uint8Array(data.toJSON().data); + signature = new Uint8Array(signature.toJSON().data); + publicKey = new Uint8Array(publicKey.toJSON().data); + return nacl.sign.detached.verify(data, signature, publicKey); + }; + return false; +} +;// ./src/util/util.js +var trimEnd = function trimEnd(input, _char) { + var isNumber = typeof input === 'number'; + var str = String(input); + while (str.endsWith(_char)) { + str = str.slice(0, -1); + } + return isNumber ? Number(str) : str; +}; +// EXTERNAL MODULE: ./node_modules/tweetnacl/nacl-fast.js +var nacl_fast = __webpack_require__(8947); +var nacl_fast_default = /*#__PURE__*/__webpack_require__.n(nacl_fast); +// EXTERNAL MODULE: ./node_modules/base32.js/base32.js +var base32 = __webpack_require__(5360); +;// ./src/util/checksum.js +function verifyChecksum(expected, actual) { + if (expected.length !== actual.length) { + return false; + } + if (expected.length === 0) { + return true; + } + for (var i = 0; i < expected.length; i += 1) { + if (expected[i] !== actual[i]) { + return false; + } + } + return true; +} +;// ./src/strkey.js +/* provided dependency */ var strkey_Buffer = __webpack_require__(3626)["A"]; +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* eslint no-bitwise: ["error", {"allow": ["<<", ">>", "^", "&", "&="]}] */ + + + +var versionBytes = { + ed25519PublicKey: 6 << 3, + // G (when encoded in base32) + ed25519SecretSeed: 18 << 3, + // S + med25519PublicKey: 12 << 3, + // M + preAuthTx: 19 << 3, + // T + sha256Hash: 23 << 3, + // X + signedPayload: 15 << 3, + // P + contract: 2 << 3 // C +}; +var strkeyTypes = { + G: 'ed25519PublicKey', + S: 'ed25519SecretSeed', + M: 'med25519PublicKey', + T: 'preAuthTx', + X: 'sha256Hash', + P: 'signedPayload', + C: 'contract' +}; + +/** + * StrKey is a helper class that allows encoding and decoding Stellar keys + * to/from strings, i.e. between their binary (Buffer, xdr.PublicKey, etc.) and + * string (i.e. "GABCD...", etc.) representations. + */ +var StrKey = /*#__PURE__*/function () { + function StrKey() { + _classCallCheck(this, StrKey); + } + return _createClass(StrKey, null, [{ + key: "encodeEd25519PublicKey", + value: + /** + * Encodes `data` to strkey ed25519 public key. + * + * @param {Buffer} data raw data to encode + * @returns {string} "G..." representation of the key + */ + function encodeEd25519PublicKey(data) { + return encodeCheck('ed25519PublicKey', data); + } + + /** + * Decodes strkey ed25519 public key to raw data. + * + * If the parameter is a muxed account key ("M..."), this will only encode it + * as a basic Ed25519 key (as if in "G..." format). + * + * @param {string} data "G..." (or "M...") key representation to decode + * @returns {Buffer} raw key + */ + }, { + key: "decodeEd25519PublicKey", + value: function decodeEd25519PublicKey(data) { + return decodeCheck('ed25519PublicKey', data); + } + + /** + * Returns true if the given Stellar public key is a valid ed25519 public key. + * @param {string} publicKey public key to check + * @returns {boolean} + */ + }, { + key: "isValidEd25519PublicKey", + value: function isValidEd25519PublicKey(publicKey) { + return isValid('ed25519PublicKey', publicKey); + } + + /** + * Encodes data to strkey ed25519 seed. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeEd25519SecretSeed", + value: function encodeEd25519SecretSeed(data) { + return encodeCheck('ed25519SecretSeed', data); + } + + /** + * Decodes strkey ed25519 seed to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodeEd25519SecretSeed", + value: function decodeEd25519SecretSeed(address) { + return decodeCheck('ed25519SecretSeed', address); + } + + /** + * Returns true if the given Stellar secret key is a valid ed25519 secret seed. + * @param {string} seed seed to check + * @returns {boolean} + */ + }, { + key: "isValidEd25519SecretSeed", + value: function isValidEd25519SecretSeed(seed) { + return isValid('ed25519SecretSeed', seed); + } + + /** + * Encodes data to strkey med25519 public key. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeMed25519PublicKey", + value: function encodeMed25519PublicKey(data) { + return encodeCheck('med25519PublicKey', data); + } + + /** + * Decodes strkey med25519 public key to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodeMed25519PublicKey", + value: function decodeMed25519PublicKey(address) { + return decodeCheck('med25519PublicKey', address); + } + + /** + * Returns true if the given Stellar public key is a valid med25519 public key. + * @param {string} publicKey public key to check + * @returns {boolean} + */ + }, { + key: "isValidMed25519PublicKey", + value: function isValidMed25519PublicKey(publicKey) { + return isValid('med25519PublicKey', publicKey); + } + + /** + * Encodes data to strkey preAuthTx. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodePreAuthTx", + value: function encodePreAuthTx(data) { + return encodeCheck('preAuthTx', data); + } + + /** + * Decodes strkey PreAuthTx to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodePreAuthTx", + value: function decodePreAuthTx(address) { + return decodeCheck('preAuthTx', address); + } + + /** + * Encodes data to strkey sha256 hash. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeSha256Hash", + value: function encodeSha256Hash(data) { + return encodeCheck('sha256Hash', data); + } + + /** + * Decodes strkey sha256 hash to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodeSha256Hash", + value: function decodeSha256Hash(address) { + return decodeCheck('sha256Hash', address); + } + + /** + * Encodes raw data to strkey signed payload (P...). + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeSignedPayload", + value: function encodeSignedPayload(data) { + return encodeCheck('signedPayload', data); + } + + /** + * Decodes strkey signed payload (P...) to raw data. + * @param {string} address address to decode + * @returns {Buffer} + */ + }, { + key: "decodeSignedPayload", + value: function decodeSignedPayload(address) { + return decodeCheck('signedPayload', address); + } + + /** + * Checks validity of alleged signed payload (P...) strkey address. + * @param {string} address signer key to check + * @returns {boolean} + */ + }, { + key: "isValidSignedPayload", + value: function isValidSignedPayload(address) { + return isValid('signedPayload', address); + } + + /** + * Encodes raw data to strkey contract (C...). + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeContract", + value: function encodeContract(data) { + return encodeCheck('contract', data); + } + + /** + * Decodes strkey contract (C...) to raw data. + * @param {string} address address to decode + * @returns {Buffer} + */ + }, { + key: "decodeContract", + value: function decodeContract(address) { + return decodeCheck('contract', address); + } + + /** + * Checks validity of alleged contract (C...) strkey address. + * @param {string} address signer key to check + * @returns {boolean} + */ + }, { + key: "isValidContract", + value: function isValidContract(address) { + return isValid('contract', address); + } + }, { + key: "getVersionByteForPrefix", + value: function getVersionByteForPrefix(address) { + return strkeyTypes[address[0]]; + } + }]); +}(); + +/** + * Sanity-checks whether or not a strkey *appears* valid. + * + * @param {string} versionByteName the type of strkey to expect in `encoded` + * @param {string} encoded the strkey to validate + * + * @return {Boolean} whether or not the `encoded` strkey appears valid for the + * `versionByteName` strkey type (see `versionBytes`, above). + * + * @note This isn't a *definitive* check of validity, but rather a best-effort + * check based on (a) input length, (b) whether or not it can be decoded, + * and (c) output length. + */ +function isValid(versionByteName, encoded) { + if (typeof encoded !== 'string') { + return false; + } + + // basic length checks on the strkey lengths + switch (versionByteName) { + case 'ed25519PublicKey': // falls through + case 'ed25519SecretSeed': // falls through + case 'preAuthTx': // falls through + case 'sha256Hash': // falls through + case 'contract': + if (encoded.length !== 56) { + return false; + } + break; + case 'med25519PublicKey': + if (encoded.length !== 69) { + return false; + } + break; + case 'signedPayload': + if (encoded.length < 56 || encoded.length > 165) { + return false; + } + break; + default: + return false; + } + var decoded = ''; + try { + decoded = decodeCheck(versionByteName, encoded); + } catch (err) { + return false; + } + + // basic length checks on the resulting buffer sizes + switch (versionByteName) { + case 'ed25519PublicKey': // falls through + case 'ed25519SecretSeed': // falls through + case 'preAuthTx': // falls through + case 'sha256Hash': // falls through + case 'contract': + return decoded.length === 32; + case 'med25519PublicKey': + return decoded.length === 40; + // +8 bytes for the ID + + case 'signedPayload': + return ( + // 32 for the signer, +4 for the payload size, then either +4 for the + // min or +64 for the max payload + decoded.length >= 32 + 4 + 4 && decoded.length <= 32 + 4 + 64 + ); + default: + return false; + } +} +function decodeCheck(versionByteName, encoded) { + if (typeof encoded !== 'string') { + throw new TypeError('encoded argument must be of type String'); + } + var decoded = base32.decode(encoded); + var versionByte = decoded[0]; + var payload = decoded.slice(0, -2); + var data = payload.slice(1); + var checksum = decoded.slice(-2); + if (encoded !== base32.encode(decoded)) { + throw new Error('invalid encoded string'); + } + var expectedVersion = versionBytes[versionByteName]; + if (expectedVersion === undefined) { + throw new Error("".concat(versionByteName, " is not a valid version byte name. ") + "Expected one of ".concat(Object.keys(versionBytes).join(', '))); + } + if (versionByte !== expectedVersion) { + throw new Error("invalid version byte. expected ".concat(expectedVersion, ", got ").concat(versionByte)); + } + var expectedChecksum = calculateChecksum(payload); + if (!verifyChecksum(expectedChecksum, checksum)) { + throw new Error("invalid checksum"); + } + return strkey_Buffer.from(data); +} +function encodeCheck(versionByteName, data) { + if (data === null || data === undefined) { + throw new Error('cannot encode null data'); + } + var versionByte = versionBytes[versionByteName]; + if (versionByte === undefined) { + throw new Error("".concat(versionByteName, " is not a valid version byte name. ") + "Expected one of ".concat(Object.keys(versionBytes).join(', '))); + } + data = strkey_Buffer.from(data); + var versionBuffer = strkey_Buffer.from([versionByte]); + var payload = strkey_Buffer.concat([versionBuffer, data]); + var checksum = strkey_Buffer.from(calculateChecksum(payload)); + var unencoded = strkey_Buffer.concat([payload, checksum]); + return base32.encode(unencoded); +} + +// Computes the CRC16-XModem checksum of `payload` in little-endian order +function calculateChecksum(payload) { + var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0]; + var crc16 = 0x0; + for (var i = 0; i < payload.length; i += 1) { + var _byte = payload[i]; + var lookupIndex = crc16 >> 8 ^ _byte; + crc16 = crc16 << 8 ^ crcTable[lookupIndex]; + crc16 &= 0xffff; + } + var checksum = new Uint8Array(2); + checksum[0] = crc16 & 0xff; + checksum[1] = crc16 >> 8 & 0xff; + return checksum; +} +;// ./src/keypair.js +/* provided dependency */ var keypair_Buffer = __webpack_require__(3626)["A"]; +function keypair_typeof(o) { "@babel/helpers - typeof"; return keypair_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, keypair_typeof(o); } +function keypair_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function keypair_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, keypair_toPropertyKey(o.key), o); } } +function keypair_createClass(e, r, t) { return r && keypair_defineProperties(e.prototype, r), t && keypair_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function keypair_toPropertyKey(t) { var i = keypair_toPrimitive(t, "string"); return "symbol" == keypair_typeof(i) ? i : i + ""; } +function keypair_toPrimitive(t, r) { if ("object" != keypair_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != keypair_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* eslint no-bitwise: ["error", {"allow": ["^"]}] */ + + + + + + + +/** + * `Keypair` represents public (and secret) keys of the account. + * + * Currently `Keypair` only supports ed25519 but in a future this class can be abstraction layer for other + * public-key signature systems. + * + * Use more convenient methods to create `Keypair` object: + * * `{@link Keypair.fromPublicKey}` + * * `{@link Keypair.fromSecret}` + * * `{@link Keypair.random}` + * + * @constructor + * @param {object} keys At least one of keys must be provided. + * @param {string} keys.type Public-key signature system name. (currently only `ed25519` keys are supported) + * @param {Buffer} [keys.publicKey] Raw public key + * @param {Buffer} [keys.secretKey] Raw secret key (32-byte secret seed in ed25519`) + */ +var Keypair = /*#__PURE__*/function () { + function Keypair(keys) { + keypair_classCallCheck(this, Keypair); + if (keys.type !== 'ed25519') { + throw new Error('Invalid keys type'); + } + this.type = keys.type; + if (keys.secretKey) { + keys.secretKey = keypair_Buffer.from(keys.secretKey); + if (keys.secretKey.length !== 32) { + throw new Error('secretKey length is invalid'); + } + this._secretSeed = keys.secretKey; + this._publicKey = generate(keys.secretKey); + this._secretKey = keypair_Buffer.concat([keys.secretKey, this._publicKey]); + if (keys.publicKey && !this._publicKey.equals(keypair_Buffer.from(keys.publicKey))) { + throw new Error('secretKey does not match publicKey'); + } + } else { + this._publicKey = keypair_Buffer.from(keys.publicKey); + if (this._publicKey.length !== 32) { + throw new Error('publicKey length is invalid'); + } + } + } + + /** + * Creates a new `Keypair` instance from secret. This can either be secret key or secret seed depending + * on underlying public-key signature system. Currently `Keypair` only supports ed25519. + * @param {string} secret secret key (ex. `SDAKFNYEIAORZKKCYRILFQKLLOCNPL5SWJ3YY5NM3ZH6GJSZGXHZEPQS`) + * @returns {Keypair} + */ + return keypair_createClass(Keypair, [{ + key: "xdrAccountId", + value: function xdrAccountId() { + return new src_xdr.AccountId.publicKeyTypeEd25519(this._publicKey); + } + }, { + key: "xdrPublicKey", + value: function xdrPublicKey() { + return new src_xdr.PublicKey.publicKeyTypeEd25519(this._publicKey); + } + + /** + * Creates a {@link xdr.MuxedAccount} object from the public key. + * + * You will get a different type of muxed account depending on whether or not + * you pass an ID. + * + * @param {string} [id] - stringified integer indicating the underlying muxed + * ID of the new account object + * + * @return {xdr.MuxedAccount} + */ + }, { + key: "xdrMuxedAccount", + value: function xdrMuxedAccount(id) { + if (typeof id !== 'undefined') { + if (typeof id !== 'string') { + throw new TypeError("expected string for ID, got ".concat(keypair_typeof(id))); + } + return src_xdr.MuxedAccount.keyTypeMuxedEd25519(new src_xdr.MuxedAccountMed25519({ + id: src_xdr.Uint64.fromString(id), + ed25519: this._publicKey + })); + } + return new src_xdr.MuxedAccount.keyTypeEd25519(this._publicKey); + } + + /** + * Returns raw public key + * @returns {Buffer} + */ + }, { + key: "rawPublicKey", + value: function rawPublicKey() { + return this._publicKey; + } + }, { + key: "signatureHint", + value: function signatureHint() { + var a = this.xdrAccountId().toXDR(); + return a.slice(a.length - 4); + } + + /** + * Returns public key associated with this `Keypair` object. + * @returns {string} + */ + }, { + key: "publicKey", + value: function publicKey() { + return StrKey.encodeEd25519PublicKey(this._publicKey); + } + + /** + * Returns secret key associated with this `Keypair` object + * @returns {string} + */ + }, { + key: "secret", + value: function secret() { + if (!this._secretSeed) { + throw new Error('no secret key available'); + } + if (this.type === 'ed25519') { + return StrKey.encodeEd25519SecretSeed(this._secretSeed); + } + throw new Error('Invalid Keypair type'); + } + + /** + * Returns raw secret key. + * @returns {Buffer} + */ + }, { + key: "rawSecretKey", + value: function rawSecretKey() { + return this._secretSeed; + } + + /** + * Returns `true` if this `Keypair` object contains secret key and can sign. + * @returns {boolean} + */ + }, { + key: "canSign", + value: function canSign() { + return !!this._secretKey; + } + + /** + * Signs data. + * @param {Buffer} data Data to sign + * @returns {Buffer} + */ + }, { + key: "sign", + value: function sign(data) { + if (!this.canSign()) { + throw new Error('cannot sign: no secret key available'); + } + return signing_sign(data, this._secretKey); + } + + /** + * Verifies if `signature` for `data` is valid. + * @param {Buffer} data Signed data + * @param {Buffer} signature Signature + * @returns {boolean} + */ + }, { + key: "verify", + value: function verify(data, signature) { + return signing_verify(data, signature, this._publicKey); + } + + /** + * Returns the decorated signature (hint+sig) for arbitrary data. + * + * @param {Buffer} data arbitrary data to sign + * @return {xdr.DecoratedSignature} the raw signature structure which can be + * added directly to a transaction envelope + * + * @see TransactionBase.addDecoratedSignature + */ + }, { + key: "signDecorated", + value: function signDecorated(data) { + var signature = this.sign(data); + var hint = this.signatureHint(); + return new src_xdr.DecoratedSignature({ + hint: hint, + signature: signature + }); + } + + /** + * Returns the raw decorated signature (hint+sig) for a signed payload signer. + * + * The hint is defined as the last 4 bytes of the signer key XORed with last + * 4 bytes of the payload (zero-left-padded if necessary). + * + * @param {Buffer} data data to both sign and treat as the payload + * @return {xdr.DecoratedSignature} + * + * @see https://github.com/stellar/stellar-protocol/blob/master/core/cap-0040.md#signature-hint + * @see TransactionBase.addDecoratedSignature + */ + }, { + key: "signPayloadDecorated", + value: function signPayloadDecorated(data) { + var signature = this.sign(data); + var keyHint = this.signatureHint(); + var hint = keypair_Buffer.from(data.slice(-4)); + if (hint.length < 4) { + // append zeroes as needed + hint = keypair_Buffer.concat([hint, keypair_Buffer.alloc(4 - data.length, 0)]); + } + return new src_xdr.DecoratedSignature({ + hint: hint.map(function (_byte, i) { + return _byte ^ keyHint[i]; + }), + signature: signature + }); + } + }], [{ + key: "fromSecret", + value: function fromSecret(secret) { + var rawSecret = StrKey.decodeEd25519SecretSeed(secret); + return this.fromRawEd25519Seed(rawSecret); + } + + /** + * Creates a new `Keypair` object from ed25519 secret key seed raw bytes. + * + * @param {Buffer} rawSeed Raw 32-byte ed25519 secret key seed + * @returns {Keypair} + */ + }, { + key: "fromRawEd25519Seed", + value: function fromRawEd25519Seed(rawSeed) { + return new this({ + type: 'ed25519', + secretKey: rawSeed + }); + } + + /** + * Returns `Keypair` object representing network master key. + * @param {string} networkPassphrase passphrase of the target stellar network (e.g. "Public Global Stellar Network ; September 2015"). + * @returns {Keypair} + */ + }, { + key: "master", + value: function master(networkPassphrase) { + if (!networkPassphrase) { + throw new Error('No network selected. Please pass a network argument, e.g. `Keypair.master(Networks.PUBLIC)`.'); + } + return this.fromRawEd25519Seed(hashing_hash(networkPassphrase)); + } + + /** + * Creates a new `Keypair` object from public key. + * @param {string} publicKey public key (ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`) + * @returns {Keypair} + */ + }, { + key: "fromPublicKey", + value: function fromPublicKey(publicKey) { + publicKey = StrKey.decodeEd25519PublicKey(publicKey); + if (publicKey.length !== 32) { + throw new Error('Invalid Stellar public key'); + } + return new this({ + type: 'ed25519', + publicKey: publicKey + }); + } + + /** + * Create a random `Keypair` object. + * @returns {Keypair} + */ + }, { + key: "random", + value: function random() { + var secret = nacl_fast_default().randomBytes(32); + return this.fromRawEd25519Seed(secret); + } + }]); +}(); +;// ./src/asset.js +/* provided dependency */ var asset_Buffer = __webpack_require__(3626)["A"]; +function asset_typeof(o) { "@babel/helpers - typeof"; return asset_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, asset_typeof(o); } +function asset_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function asset_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, asset_toPropertyKey(o.key), o); } } +function asset_createClass(e, r, t) { return r && asset_defineProperties(e.prototype, r), t && asset_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function asset_toPropertyKey(t) { var i = asset_toPrimitive(t, "string"); return "symbol" == asset_typeof(i) ? i : i + ""; } +function asset_toPrimitive(t, r) { if ("object" != asset_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != asset_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + +/** + * Asset class represents an asset, either the native asset (`XLM`) + * or an asset code / issuer account ID pair. + * + * An asset code describes an asset code and issuer pair. In the case of the native + * asset XLM, the issuer will be null. + * + * @constructor + * @param {string} code - The asset code. + * @param {string} issuer - The account ID of the issuer. + */ +var Asset = /*#__PURE__*/function () { + function Asset(code, issuer) { + asset_classCallCheck(this, Asset); + if (!/^[a-zA-Z0-9]{1,12}$/.test(code)) { + throw new Error('Asset code is invalid (maximum alphanumeric, 12 characters at max)'); + } + if (String(code).toLowerCase() !== 'xlm' && !issuer) { + throw new Error('Issuer cannot be null'); + } + if (issuer && !StrKey.isValidEd25519PublicKey(issuer)) { + throw new Error('Issuer is invalid'); + } + if (String(code).toLowerCase() === 'xlm') { + // transform all xLM, Xlm, etc. variants -> XLM + this.code = 'XLM'; + } else { + this.code = code; + } + this.issuer = issuer; + } + + /** + * Returns an asset object for the native asset. + * @Return {Asset} + */ + return asset_createClass(Asset, [{ + key: "toXDRObject", + value: + /** + * Returns the xdr.Asset object for this asset. + * @returns {xdr.Asset} XDR asset object + */ + function toXDRObject() { + return this._toXDRObject(src_xdr.Asset); + } + + /** + * Returns the xdr.ChangeTrustAsset object for this asset. + * @returns {xdr.ChangeTrustAsset} XDR asset object + */ + }, { + key: "toChangeTrustXDRObject", + value: function toChangeTrustXDRObject() { + return this._toXDRObject(src_xdr.ChangeTrustAsset); + } + + /** + * Returns the xdr.TrustLineAsset object for this asset. + * @returns {xdr.TrustLineAsset} XDR asset object + */ + }, { + key: "toTrustLineXDRObject", + value: function toTrustLineXDRObject() { + return this._toXDRObject(src_xdr.TrustLineAsset); + } + + /** + * Returns the would-be contract ID (`C...` format) for this asset on a given + * network. + * + * @param {string} networkPassphrase indicates which network the contract + * ID should refer to, since every network will have a unique ID for the + * same contract (see {@link Networks} for options) + * + * @returns {string} the strkey-encoded (`C...`) contract ID for this asset + * + * @warning This makes no guarantee that this contract actually *exists*. + */ + }, { + key: "contractId", + value: function contractId(networkPassphrase) { + var networkId = hashing_hash(asset_Buffer.from(networkPassphrase)); + var preimage = src_xdr.HashIdPreimage.envelopeTypeContractId(new src_xdr.HashIdPreimageContractId({ + networkId: networkId, + contractIdPreimage: src_xdr.ContractIdPreimage.contractIdPreimageFromAsset(this.toXDRObject()) + })); + return StrKey.encodeContract(hashing_hash(preimage.toXDR())); + } + + /** + * Returns the xdr object for this asset. + * @param {xdr.Asset | xdr.ChangeTrustAsset} xdrAsset - The asset xdr object. + * @returns {xdr.Asset | xdr.ChangeTrustAsset | xdr.TrustLineAsset} XDR Asset object + */ + }, { + key: "_toXDRObject", + value: function _toXDRObject() { + var xdrAsset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : src_xdr.Asset; + if (this.isNative()) { + return xdrAsset.assetTypeNative(); + } + var xdrType; + var xdrTypeString; + if (this.code.length <= 4) { + xdrType = src_xdr.AlphaNum4; + xdrTypeString = 'assetTypeCreditAlphanum4'; + } else { + xdrType = src_xdr.AlphaNum12; + xdrTypeString = 'assetTypeCreditAlphanum12'; + } + + // pad code with null bytes if necessary + var padLength = this.code.length <= 4 ? 4 : 12; + var paddedCode = this.code.padEnd(padLength, '\0'); + + // eslint-disable-next-line new-cap + var assetType = new xdrType({ + assetCode: paddedCode, + issuer: Keypair.fromPublicKey(this.issuer).xdrAccountId() + }); + return new xdrAsset(xdrTypeString, assetType); + } + + /** + * @returns {string} Asset code + */ + }, { + key: "getCode", + value: function getCode() { + if (this.code === undefined) { + return undefined; + } + return String(this.code); + } + + /** + * @returns {string} Asset issuer + */ + }, { + key: "getIssuer", + value: function getIssuer() { + if (this.issuer === undefined) { + return undefined; + } + return String(this.issuer); + } + + /** + * @see [Assets concept](https://developers.stellar.org/docs/glossary/assets/) + * @returns {string} Asset type. Can be one of following types: + * + * - `native`, + * - `credit_alphanum4`, + * - `credit_alphanum12`, or + * - `unknown` as the error case (which should never occur) + */ + }, { + key: "getAssetType", + value: function getAssetType() { + switch (this.getRawAssetType().value) { + case src_xdr.AssetType.assetTypeNative().value: + return 'native'; + case src_xdr.AssetType.assetTypeCreditAlphanum4().value: + return 'credit_alphanum4'; + case src_xdr.AssetType.assetTypeCreditAlphanum12().value: + return 'credit_alphanum12'; + default: + return 'unknown'; + } + } + + /** + * @returns {xdr.AssetType} the raw XDR representation of the asset type + */ + }, { + key: "getRawAssetType", + value: function getRawAssetType() { + if (this.isNative()) { + return src_xdr.AssetType.assetTypeNative(); + } + if (this.code.length <= 4) { + return src_xdr.AssetType.assetTypeCreditAlphanum4(); + } + return src_xdr.AssetType.assetTypeCreditAlphanum12(); + } + + /** + * @returns {boolean} true if this asset object is the native asset. + */ + }, { + key: "isNative", + value: function isNative() { + return !this.issuer; + } + + /** + * @param {Asset} asset Asset to compare + * @returns {boolean} true if this asset equals the given asset. + */ + }, { + key: "equals", + value: function equals(asset) { + return this.code === asset.getCode() && this.issuer === asset.getIssuer(); + } + }, { + key: "toString", + value: function toString() { + if (this.isNative()) { + return 'native'; + } + return "".concat(this.getCode(), ":").concat(this.getIssuer()); + } + + /** + * Compares two assets according to the criteria: + * + * 1. First compare the type (native < alphanum4 < alphanum12). + * 2. If the types are equal, compare the assets codes. + * 3. If the asset codes are equal, compare the issuers. + * + * @param {Asset} assetA - the first asset + * @param {Asset} assetB - the second asset + * @returns {number} `-1` if assetA < assetB, `0` if assetA == assetB, `1` if assetA > assetB. + * + * @static + * @memberof Asset + */ + }], [{ + key: "native", + value: function _native() { + return new Asset('XLM'); + } + + /** + * Returns an asset object from its XDR object representation. + * @param {xdr.Asset} assetXdr - The asset xdr object. + * @returns {Asset} + */ + }, { + key: "fromOperation", + value: function fromOperation(assetXdr) { + var anum; + var code; + var issuer; + switch (assetXdr["switch"]()) { + case src_xdr.AssetType.assetTypeNative(): + return this["native"](); + case src_xdr.AssetType.assetTypeCreditAlphanum4(): + anum = assetXdr.alphaNum4(); + /* falls through */ + case src_xdr.AssetType.assetTypeCreditAlphanum12(): + anum = anum || assetXdr.alphaNum12(); + issuer = StrKey.encodeEd25519PublicKey(anum.issuer().ed25519()); + code = trimEnd(anum.assetCode(), '\0'); + return new this(code, issuer); + default: + throw new Error("Invalid asset type: ".concat(assetXdr["switch"]().name)); + } + } + }, { + key: "compare", + value: function compare(assetA, assetB) { + if (!assetA || !(assetA instanceof Asset)) { + throw new Error('assetA is invalid'); + } + if (!assetB || !(assetB instanceof Asset)) { + throw new Error('assetB is invalid'); + } + if (assetA.equals(assetB)) { + return 0; + } + + // Compare asset types. + var xdrAtype = assetA.getRawAssetType().value; + var xdrBtype = assetB.getRawAssetType().value; + if (xdrAtype !== xdrBtype) { + return xdrAtype < xdrBtype ? -1 : 1; + } + + // Compare asset codes. + var result = asciiCompare(assetA.getCode(), assetB.getCode()); + if (result !== 0) { + return result; + } + + // Compare asset issuers. + return asciiCompare(assetA.getIssuer(), assetB.getIssuer()); + } + }]); +}(); + +/** + * Compares two ASCII strings in lexographic order with uppercase precedence. + * + * @param {string} a - the first string to compare + * @param {string} b - the second + * @returns {number} like all `compare()`s: + * -1 if `a < b`, 0 if `a == b`, and 1 if `a > b` + * + * @warning No type-checks are done on the parameters + */ +function asciiCompare(a, b) { + return asset_Buffer.compare(asset_Buffer.from(a, 'ascii'), asset_Buffer.from(b, 'ascii')); +} +;// ./src/get_liquidity_pool_id.js +/* provided dependency */ var get_liquidity_pool_id_Buffer = __webpack_require__(3626)["A"]; + + + + +// LiquidityPoolFeeV18 is the default liquidity pool fee in protocol v18. It defaults to 30 base points (0.3%). +var LiquidityPoolFeeV18 = 30; + +/** + * getLiquidityPoolId computes the Pool ID for the given assets, fee and pool type. + * + * @see [stellar-core getPoolID](https://github.com/stellar/stellar-core/blob/9f3a48c6a8f1aa77b6043a055d0638661f718080/src/ledger/test/LedgerTxnTests.cpp#L3746-L3751) + * + * @export + * @param {string} liquidityPoolType – A string representing the liquidity pool type. + * @param {object} liquidityPoolParameters – The liquidity pool parameters. + * @param {Asset} liquidityPoolParameters.assetA – The first asset in the Pool, it must respect the rule assetA < assetB. + * @param {Asset} liquidityPoolParameters.assetB – The second asset in the Pool, it must respect the rule assetA < assetB. + * @param {number} liquidityPoolParameters.fee – The liquidity pool fee. For now the only fee supported is `30`. + * + * @return {Buffer} the raw Pool ID buffer, which can be stringfied with `toString('hex')` + */ +function getLiquidityPoolId(liquidityPoolType) { + var liquidityPoolParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if (liquidityPoolType !== 'constant_product') { + throw new Error('liquidityPoolType is invalid'); + } + var assetA = liquidityPoolParameters.assetA, + assetB = liquidityPoolParameters.assetB, + fee = liquidityPoolParameters.fee; + if (!assetA || !(assetA instanceof Asset)) { + throw new Error('assetA is invalid'); + } + if (!assetB || !(assetB instanceof Asset)) { + throw new Error('assetB is invalid'); + } + if (!fee || fee !== LiquidityPoolFeeV18) { + throw new Error('fee is invalid'); + } + if (Asset.compare(assetA, assetB) !== -1) { + throw new Error('Assets are not in lexicographic order'); + } + var lpTypeData = src_xdr.LiquidityPoolType.liquidityPoolConstantProduct().toXDR(); + var lpParamsData = new src_xdr.LiquidityPoolConstantProductParameters({ + assetA: assetA.toXDRObject(), + assetB: assetB.toXDRObject(), + fee: fee + }).toXDR(); + var payload = get_liquidity_pool_id_Buffer.concat([lpTypeData, lpParamsData]); + return hashing_hash(payload); +} +;// ./src/transaction_base.js +/* provided dependency */ var transaction_base_Buffer = __webpack_require__(3626)["A"]; +function transaction_base_typeof(o) { "@babel/helpers - typeof"; return transaction_base_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, transaction_base_typeof(o); } +function transaction_base_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function transaction_base_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, transaction_base_toPropertyKey(o.key), o); } } +function transaction_base_createClass(e, r, t) { return r && transaction_base_defineProperties(e.prototype, r), t && transaction_base_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function transaction_base_toPropertyKey(t) { var i = transaction_base_toPrimitive(t, "string"); return "symbol" == transaction_base_typeof(i) ? i : i + ""; } +function transaction_base_toPrimitive(t, r) { if ("object" != transaction_base_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != transaction_base_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + +/** + * @ignore + */ +var TransactionBase = /*#__PURE__*/function () { + function TransactionBase(tx, signatures, fee, networkPassphrase) { + transaction_base_classCallCheck(this, TransactionBase); + if (typeof networkPassphrase !== 'string') { + throw new Error("Invalid passphrase provided to Transaction: expected a string but got a ".concat(transaction_base_typeof(networkPassphrase))); + } + this._networkPassphrase = networkPassphrase; + this._tx = tx; + this._signatures = signatures; + this._fee = fee; + } + + /** + * @type {Array.} + * @readonly + */ + return transaction_base_createClass(TransactionBase, [{ + key: "signatures", + get: function get() { + return this._signatures; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + }, { + key: "tx", + get: function get() { + return this._tx; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "fee", + get: function get() { + return this._fee; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "networkPassphrase", + get: function get() { + return this._networkPassphrase; + }, + set: function set(networkPassphrase) { + this._networkPassphrase = networkPassphrase; + } + + /** + * Signs the transaction with the given {@link Keypair}. + * @param {...Keypair} keypairs Keypairs of signers + * @returns {void} + */ + }, { + key: "sign", + value: function sign() { + var _this = this; + var txHash = this.hash(); + for (var _len = arguments.length, keypairs = new Array(_len), _key = 0; _key < _len; _key++) { + keypairs[_key] = arguments[_key]; + } + keypairs.forEach(function (kp) { + var sig = kp.signDecorated(txHash); + _this.signatures.push(sig); + }); + } + + /** + * Signs a transaction with the given {@link Keypair}. Useful if someone sends + * you a transaction XDR for you to sign and return (see + * [addSignature](#addSignature) for more information). + * + * When you get a transaction XDR to sign.... + * - Instantiate a `Transaction` object with the XDR + * - Use {@link Keypair} to generate a keypair object for your Stellar seed. + * - Run `getKeypairSignature` with that keypair + * - Send back the signature along with your publicKey (not your secret seed!) + * + * Example: + * ```javascript + * // `transactionXDR` is a string from the person generating the transaction + * const transaction = new Transaction(transactionXDR, networkPassphrase); + * const keypair = Keypair.fromSecret(myStellarSeed); + * return transaction.getKeypairSignature(keypair); + * ``` + * + * @param {Keypair} keypair Keypair of signer + * @returns {string} Signature string + */ + }, { + key: "getKeypairSignature", + value: function getKeypairSignature(keypair) { + return keypair.sign(this.hash()).toString('base64'); + } + + /** + * Add a signature to the transaction. Useful when a party wants to pre-sign + * a transaction but doesn't want to give access to their secret keys. + * This will also verify whether the signature is valid. + * + * Here's how you would use this feature to solicit multiple signatures. + * - Use `TransactionBuilder` to build a new transaction. + * - Make sure to set a long enough timeout on that transaction to give your + * signers enough time to sign! + * - Once you build the transaction, use `transaction.toXDR()` to get the + * base64-encoded XDR string. + * - _Warning!_ Once you've built this transaction, don't submit any other + * transactions onto your account! Doing so will invalidate this pre-compiled + * transaction! + * - Send this XDR string to your other parties. They can use the instructions + * for [getKeypairSignature](#getKeypairSignature) to sign the transaction. + * - They should send you back their `publicKey` and the `signature` string + * from [getKeypairSignature](#getKeypairSignature), both of which you pass to + * this function. + * + * @param {string} publicKey The public key of the signer + * @param {string} signature The base64 value of the signature XDR + * @returns {void} + */ + }, { + key: "addSignature", + value: function addSignature() { + var publicKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + if (!signature || typeof signature !== 'string') { + throw new Error('Invalid signature'); + } + if (!publicKey || typeof publicKey !== 'string') { + throw new Error('Invalid publicKey'); + } + var keypair; + var hint; + var signatureBuffer = transaction_base_Buffer.from(signature, 'base64'); + try { + keypair = Keypair.fromPublicKey(publicKey); + hint = keypair.signatureHint(); + } catch (e) { + throw new Error('Invalid publicKey'); + } + if (!keypair.verify(this.hash(), signatureBuffer)) { + throw new Error('Invalid signature'); + } + this.signatures.push(new src_xdr.DecoratedSignature({ + hint: hint, + signature: signatureBuffer + })); + } + + /** + * Add a decorated signature directly to the transaction envelope. + * + * @param {xdr.DecoratedSignature} signature raw signature to add + * @returns {void} + * + * @see Keypair.signDecorated + * @see Keypair.signPayloadDecorated + */ + }, { + key: "addDecoratedSignature", + value: function addDecoratedSignature(signature) { + this.signatures.push(signature); + } + + /** + * Add `hashX` signer preimage as signature. + * @param {Buffer|String} preimage Preimage of hash used as signer + * @returns {void} + */ + }, { + key: "signHashX", + value: function signHashX(preimage) { + if (typeof preimage === 'string') { + preimage = transaction_base_Buffer.from(preimage, 'hex'); + } + if (preimage.length > 64) { + throw new Error('preimage cannnot be longer than 64 bytes'); + } + var signature = preimage; + var hashX = hashing_hash(preimage); + var hint = hashX.slice(hashX.length - 4); + this.signatures.push(new src_xdr.DecoratedSignature({ + hint: hint, + signature: signature + })); + } + + /** + * Returns a hash for this transaction, suitable for signing. + * @returns {Buffer} + */ + }, { + key: "hash", + value: function hash() { + return hashing_hash(this.signatureBase()); + } + }, { + key: "signatureBase", + value: function signatureBase() { + throw new Error('Implement in subclass'); + } + }, { + key: "toEnvelope", + value: function toEnvelope() { + throw new Error('Implement in subclass'); + } + + /** + * Get the transaction envelope as a base64-encoded string + * @returns {string} XDR string + */ + }, { + key: "toXDR", + value: function toXDR() { + return this.toEnvelope().toXDR().toString('base64'); + } + }]); +}(); +;// ./node_modules/bignumber.js/bignumber.mjs +/* + * bignumber.js v9.1.2 + * A JavaScript library for arbitrary-precision arithmetic. + * https://github.com/MikeMcl/bignumber.js + * Copyright (c) 2022 Michael Mclaughlin + * MIT Licensed. + * + * BigNumber.prototype methods | BigNumber methods + * | + * absoluteValue abs | clone + * comparedTo | config set + * decimalPlaces dp | DECIMAL_PLACES + * dividedBy div | ROUNDING_MODE + * dividedToIntegerBy idiv | EXPONENTIAL_AT + * exponentiatedBy pow | RANGE + * integerValue | CRYPTO + * isEqualTo eq | MODULO_MODE + * isFinite | POW_PRECISION + * isGreaterThan gt | FORMAT + * isGreaterThanOrEqualTo gte | ALPHABET + * isInteger | isBigNumber + * isLessThan lt | maximum max + * isLessThanOrEqualTo lte | minimum min + * isNaN | random + * isNegative | sum + * isPositive | + * isZero | + * minus | + * modulo mod | + * multipliedBy times | + * negated | + * plus | + * precision sd | + * shiftedBy | + * squareRoot sqrt | + * toExponential | + * toFixed | + * toFormat | + * toFraction | + * toJSON | + * toNumber | + * toPrecision | + * toString | + * valueOf | + * + */ + + +var + isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, + mathceil = Math.ceil, + mathfloor = Math.floor, + + bignumberError = '[BigNumber Error] ', + tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ', + + BASE = 1e14, + LOG_BASE = 14, + MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 + // MAX_INT32 = 0x7fffffff, // 2^31 - 1 + POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], + SQRT_BASE = 1e7, + + // EDITABLE + // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and + // the arguments to toExponential, toFixed, toFormat, and toPrecision. + MAX = 1E9; // 0 to MAX_INT32 + + +/* + * Create and return a BigNumber constructor. + */ +function clone(configObject) { + var div, convertBase, parseNumeric, + P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null }, + ONE = new BigNumber(1), + + + //----------------------------- EDITABLE CONFIG DEFAULTS ------------------------------- + + + // The default values below must be integers within the inclusive ranges stated. + // The values can also be changed at run-time using BigNumber.set. + + // The maximum number of decimal places for operations involving division. + DECIMAL_PLACES = 20, // 0 to MAX + + // The rounding mode used when rounding to the above decimal places, and when using + // toExponential, toFixed, toFormat and toPrecision, and round (default value). + // UP 0 Away from zero. + // DOWN 1 Towards zero. + // CEIL 2 Towards +Infinity. + // FLOOR 3 Towards -Infinity. + // HALF_UP 4 Towards nearest neighbour. If equidistant, up. + // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. + // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. + // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. + // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. + ROUNDING_MODE = 4, // 0 to 8 + + // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] + + // The exponent value at and beneath which toString returns exponential notation. + // Number type: -7 + TO_EXP_NEG = -7, // 0 to -MAX + + // The exponent value at and above which toString returns exponential notation. + // Number type: 21 + TO_EXP_POS = 21, // 0 to MAX + + // RANGE : [MIN_EXP, MAX_EXP] + + // The minimum exponent value, beneath which underflow to zero occurs. + // Number type: -324 (5e-324) + MIN_EXP = -1e7, // -1 to -MAX + + // The maximum exponent value, above which overflow to Infinity occurs. + // Number type: 308 (1.7976931348623157e+308) + // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. + MAX_EXP = 1e7, // 1 to MAX + + // Whether to use cryptographically-secure random number generation, if available. + CRYPTO = false, // true or false + + // The modulo mode used when calculating the modulus: a mod n. + // The quotient (q = a / n) is calculated according to the corresponding rounding mode. + // The remainder (r) is calculated as: r = a - n * q. + // + // UP 0 The remainder is positive if the dividend is negative, else is negative. + // DOWN 1 The remainder has the same sign as the dividend. + // This modulo mode is commonly known as 'truncated division' and is + // equivalent to (a % n) in JavaScript. + // FLOOR 3 The remainder has the same sign as the divisor (Python %). + // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. + // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). + // The remainder is always positive. + // + // The truncated division, floored division, Euclidian division and IEEE 754 remainder + // modes are commonly used for the modulus operation. + // Although the other rounding modes can also be used, they may not give useful results. + MODULO_MODE = 1, // 0 to 9 + + // The maximum number of significant digits of the result of the exponentiatedBy operation. + // If POW_PRECISION is 0, there will be unlimited significant digits. + POW_PRECISION = 0, // 0 to MAX + + // The format specification used by the BigNumber.prototype.toFormat method. + FORMAT = { + prefix: '', + groupSize: 3, + secondaryGroupSize: 0, + groupSeparator: ',', + decimalSeparator: '.', + fractionGroupSize: 0, + fractionGroupSeparator: '\xA0', // non-breaking space + suffix: '' + }, + + // The alphabet used for base conversion. It must be at least 2 characters long, with no '+', + // '-', '.', whitespace, or repeated character. + // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' + ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz', + alphabetHasNormalDecimalDigits = true; + + + //------------------------------------------------------------------------------------------ + + + // CONSTRUCTOR + + + /* + * The BigNumber constructor and exported function. + * Create and return a new instance of a BigNumber object. + * + * v {number|string|BigNumber} A numeric value. + * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive. + */ + function BigNumber(v, b) { + var alphabet, c, caseChanged, e, i, isNum, len, str, + x = this; + + // Enable constructor call without `new`. + if (!(x instanceof BigNumber)) return new BigNumber(v, b); + + if (b == null) { + + if (v && v._isBigNumber === true) { + x.s = v.s; + + if (!v.c || v.e > MAX_EXP) { + x.c = x.e = null; + } else if (v.e < MIN_EXP) { + x.c = [x.e = 0]; + } else { + x.e = v.e; + x.c = v.c.slice(); + } + + return; + } + + if ((isNum = typeof v == 'number') && v * 0 == 0) { + + // Use `1 / n` to handle minus zero also. + x.s = 1 / v < 0 ? (v = -v, -1) : 1; + + // Fast path for integers, where n < 2147483648 (2**31). + if (v === ~~v) { + for (e = 0, i = v; i >= 10; i /= 10, e++); + + if (e > MAX_EXP) { + x.c = x.e = null; + } else { + x.e = e; + x.c = [v]; + } + + return; + } + + str = String(v); + } else { + + if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum); + + x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; + } + + // Decimal point? + if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); + + // Exponential form? + if ((i = str.search(/e/i)) > 0) { + + // Determine exponent. + if (e < 0) e = i; + e += +str.slice(i + 1); + str = str.substring(0, i); + } else if (e < 0) { + + // Integer. + e = str.length; + } + + } else { + + // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' + intCheck(b, 2, ALPHABET.length, 'Base'); + + // Allow exponential notation to be used with base 10 argument, while + // also rounding to DECIMAL_PLACES as with other bases. + if (b == 10 && alphabetHasNormalDecimalDigits) { + x = new BigNumber(v); + return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); + } + + str = String(v); + + if (isNum = typeof v == 'number') { + + // Avoid potential interpretation of Infinity and NaN as base 44+ values. + if (v * 0 != 0) return parseNumeric(x, str, isNum, b); + + x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; + + // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' + if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) { + throw Error + (tooManyDigits + v); + } + } else { + x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; + } + + alphabet = ALPHABET.slice(0, b); + e = i = 0; + + // Check that str is a valid base b number. + // Don't use RegExp, so alphabet can contain special characters. + for (len = str.length; i < len; i++) { + if (alphabet.indexOf(c = str.charAt(i)) < 0) { + if (c == '.') { + + // If '.' is not the first character and it has not be found before. + if (i > e) { + e = len; + continue; + } + } else if (!caseChanged) { + + // Allow e.g. hexadecimal 'FF' as well as 'ff'. + if (str == str.toUpperCase() && (str = str.toLowerCase()) || + str == str.toLowerCase() && (str = str.toUpperCase())) { + caseChanged = true; + i = -1; + e = 0; + continue; + } + } + + return parseNumeric(x, String(v), isNum, b); + } + } + + // Prevent later check for length on converted number. + isNum = false; + str = convertBase(str, b, 10, x.s); + + // Decimal point? + if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); + else e = str.length; + } + + // Determine leading zeros. + for (i = 0; str.charCodeAt(i) === 48; i++); + + // Determine trailing zeros. + for (len = str.length; str.charCodeAt(--len) === 48;); + + if (str = str.slice(i, ++len)) { + len -= i; + + // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' + if (isNum && BigNumber.DEBUG && + len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { + throw Error + (tooManyDigits + (x.s * v)); + } + + // Overflow? + if ((e = e - i - 1) > MAX_EXP) { + + // Infinity. + x.c = x.e = null; + + // Underflow? + } else if (e < MIN_EXP) { + + // Zero. + x.c = [x.e = 0]; + } else { + x.e = e; + x.c = []; + + // Transform base + + // e is the base 10 exponent. + // i is where to slice str to get the first element of the coefficient array. + i = (e + 1) % LOG_BASE; + if (e < 0) i += LOG_BASE; // i < 1 + + if (i < len) { + if (i) x.c.push(+str.slice(0, i)); + + for (len -= LOG_BASE; i < len;) { + x.c.push(+str.slice(i, i += LOG_BASE)); + } + + i = LOG_BASE - (str = str.slice(i)).length; + } else { + i -= len; + } + + for (; i--; str += '0'); + x.c.push(+str); + } + } else { + + // Zero. + x.c = [x.e = 0]; + } + } + + + // CONSTRUCTOR PROPERTIES + + + BigNumber.clone = clone; + + BigNumber.ROUND_UP = 0; + BigNumber.ROUND_DOWN = 1; + BigNumber.ROUND_CEIL = 2; + BigNumber.ROUND_FLOOR = 3; + BigNumber.ROUND_HALF_UP = 4; + BigNumber.ROUND_HALF_DOWN = 5; + BigNumber.ROUND_HALF_EVEN = 6; + BigNumber.ROUND_HALF_CEIL = 7; + BigNumber.ROUND_HALF_FLOOR = 8; + BigNumber.EUCLID = 9; + + + /* + * Configure infrequently-changing library-wide settings. + * + * Accept an object with the following optional properties (if the value of a property is + * a number, it must be an integer within the inclusive range stated): + * + * DECIMAL_PLACES {number} 0 to MAX + * ROUNDING_MODE {number} 0 to 8 + * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX] + * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX] + * CRYPTO {boolean} true or false + * MODULO_MODE {number} 0 to 9 + * POW_PRECISION {number} 0 to MAX + * ALPHABET {string} A string of two or more unique characters which does + * not contain '.'. + * FORMAT {object} An object with some of the following properties: + * prefix {string} + * groupSize {number} + * secondaryGroupSize {number} + * groupSeparator {string} + * decimalSeparator {string} + * fractionGroupSize {number} + * fractionGroupSeparator {string} + * suffix {string} + * + * (The values assigned to the above FORMAT object properties are not checked for validity.) + * + * E.g. + * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) + * + * Ignore properties/parameters set to null or undefined, except for ALPHABET. + * + * Return an object with the properties current values. + */ + BigNumber.config = BigNumber.set = function (obj) { + var p, v; + + if (obj != null) { + + if (typeof obj == 'object') { + + // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. + // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) { + v = obj[p]; + intCheck(v, 0, MAX, p); + DECIMAL_PLACES = v; + } + + // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. + // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) { + v = obj[p]; + intCheck(v, 0, 8, p); + ROUNDING_MODE = v; + } + + // EXPONENTIAL_AT {number|number[]} + // Integer, -MAX to MAX inclusive or + // [integer -MAX to 0 inclusive, 0 to MAX inclusive]. + // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) { + v = obj[p]; + if (v && v.pop) { + intCheck(v[0], -MAX, 0, p); + intCheck(v[1], 0, MAX, p); + TO_EXP_NEG = v[0]; + TO_EXP_POS = v[1]; + } else { + intCheck(v, -MAX, MAX, p); + TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); + } + } + + // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or + // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. + // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}' + if (obj.hasOwnProperty(p = 'RANGE')) { + v = obj[p]; + if (v && v.pop) { + intCheck(v[0], -MAX, -1, p); + intCheck(v[1], 1, MAX, p); + MIN_EXP = v[0]; + MAX_EXP = v[1]; + } else { + intCheck(v, -MAX, MAX, p); + if (v) { + MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); + } else { + throw Error + (bignumberError + p + ' cannot be zero: ' + v); + } + } + } + + // CRYPTO {boolean} true or false. + // '[BigNumber Error] CRYPTO not true or false: {v}' + // '[BigNumber Error] crypto unavailable' + if (obj.hasOwnProperty(p = 'CRYPTO')) { + v = obj[p]; + if (v === !!v) { + if (v) { + if (typeof crypto != 'undefined' && crypto && + (crypto.getRandomValues || crypto.randomBytes)) { + CRYPTO = v; + } else { + CRYPTO = !v; + throw Error + (bignumberError + 'crypto unavailable'); + } + } else { + CRYPTO = v; + } + } else { + throw Error + (bignumberError + p + ' not true or false: ' + v); + } + } + + // MODULO_MODE {number} Integer, 0 to 9 inclusive. + // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'MODULO_MODE')) { + v = obj[p]; + intCheck(v, 0, 9, p); + MODULO_MODE = v; + } + + // POW_PRECISION {number} Integer, 0 to MAX inclusive. + // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'POW_PRECISION')) { + v = obj[p]; + intCheck(v, 0, MAX, p); + POW_PRECISION = v; + } + + // FORMAT {object} + // '[BigNumber Error] FORMAT not an object: {v}' + if (obj.hasOwnProperty(p = 'FORMAT')) { + v = obj[p]; + if (typeof v == 'object') FORMAT = v; + else throw Error + (bignumberError + p + ' not an object: ' + v); + } + + // ALPHABET {string} + // '[BigNumber Error] ALPHABET invalid: {v}' + if (obj.hasOwnProperty(p = 'ALPHABET')) { + v = obj[p]; + + // Disallow if less than two characters, + // or if it contains '+', '-', '.', whitespace, or a repeated character. + if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) { + alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789'; + ALPHABET = v; + } else { + throw Error + (bignumberError + p + ' invalid: ' + v); + } + } + + } else { + + // '[BigNumber Error] Object expected: {v}' + throw Error + (bignumberError + 'Object expected: ' + obj); + } + } + + return { + DECIMAL_PLACES: DECIMAL_PLACES, + ROUNDING_MODE: ROUNDING_MODE, + EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], + RANGE: [MIN_EXP, MAX_EXP], + CRYPTO: CRYPTO, + MODULO_MODE: MODULO_MODE, + POW_PRECISION: POW_PRECISION, + FORMAT: FORMAT, + ALPHABET: ALPHABET + }; + }; + + + /* + * Return true if v is a BigNumber instance, otherwise return false. + * + * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed. + * + * v {any} + * + * '[BigNumber Error] Invalid BigNumber: {v}' + */ + BigNumber.isBigNumber = function (v) { + if (!v || v._isBigNumber !== true) return false; + if (!BigNumber.DEBUG) return true; + + var i, n, + c = v.c, + e = v.e, + s = v.s; + + out: if ({}.toString.call(c) == '[object Array]') { + + if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { + + // If the first element is zero, the BigNumber value must be zero. + if (c[0] === 0) { + if (e === 0 && c.length === 1) return true; + break out; + } + + // Calculate number of digits that c[0] should have, based on the exponent. + i = (e + 1) % LOG_BASE; + if (i < 1) i += LOG_BASE; + + // Calculate number of digits of c[0]. + //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) { + if (String(c[0]).length == i) { + + for (i = 0; i < c.length; i++) { + n = c[i]; + if (n < 0 || n >= BASE || n !== mathfloor(n)) break out; + } + + // Last element cannot be zero, unless it is the only element. + if (n !== 0) return true; + } + } + + // Infinity/NaN + } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { + return true; + } + + throw Error + (bignumberError + 'Invalid BigNumber: ' + v); + }; + + + /* + * Return a new BigNumber whose value is the maximum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.maximum = BigNumber.max = function () { + return maxOrMin(arguments, -1); + }; + + + /* + * Return a new BigNumber whose value is the minimum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.minimum = BigNumber.min = function () { + return maxOrMin(arguments, 1); + }; + + + /* + * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, + * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing + * zeros are produced). + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}' + * '[BigNumber Error] crypto unavailable' + */ + BigNumber.random = (function () { + var pow2_53 = 0x20000000000000; + + // Return a 53 bit integer n, where 0 <= n < 9007199254740992. + // Check if Math.random() produces more than 32 bits of randomness. + // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. + // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. + var random53bitInt = (Math.random() * pow2_53) & 0x1fffff + ? function () { return mathfloor(Math.random() * pow2_53); } + : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + + (Math.random() * 0x800000 | 0); }; + + return function (dp) { + var a, b, e, k, v, + i = 0, + c = [], + rand = new BigNumber(ONE); + + if (dp == null) dp = DECIMAL_PLACES; + else intCheck(dp, 0, MAX); + + k = mathceil(dp / LOG_BASE); + + if (CRYPTO) { + + // Browsers supporting crypto.getRandomValues. + if (crypto.getRandomValues) { + + a = crypto.getRandomValues(new Uint32Array(k *= 2)); + + for (; i < k;) { + + // 53 bits: + // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) + // 11111 11111111 11111111 11111111 11100000 00000000 00000000 + // ((Math.pow(2, 32) - 1) >>> 11).toString(2) + // 11111 11111111 11111111 + // 0x20000 is 2^21. + v = a[i] * 0x20000 + (a[i + 1] >>> 11); + + // Rejection sampling: + // 0 <= v < 9007199254740992 + // Probability that v >= 9e15, is + // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 + if (v >= 9e15) { + b = crypto.getRandomValues(new Uint32Array(2)); + a[i] = b[0]; + a[i + 1] = b[1]; + } else { + + // 0 <= v <= 8999999999999999 + // 0 <= (v % 1e14) <= 99999999999999 + c.push(v % 1e14); + i += 2; + } + } + i = k / 2; + + // Node.js supporting crypto.randomBytes. + } else if (crypto.randomBytes) { + + // buffer + a = crypto.randomBytes(k *= 7); + + for (; i < k;) { + + // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 + // 0x100000000 is 2^32, 0x1000000 is 2^24 + // 11111 11111111 11111111 11111111 11111111 11111111 11111111 + // 0 <= v < 9007199254740992 + v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) + + (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) + + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; + + if (v >= 9e15) { + crypto.randomBytes(7).copy(a, i); + } else { + + // 0 <= (v % 1e14) <= 99999999999999 + c.push(v % 1e14); + i += 7; + } + } + i = k / 7; + } else { + CRYPTO = false; + throw Error + (bignumberError + 'crypto unavailable'); + } + } + + // Use Math.random. + if (!CRYPTO) { + + for (; i < k;) { + v = random53bitInt(); + if (v < 9e15) c[i++] = v % 1e14; + } + } + + k = c[--i]; + dp %= LOG_BASE; + + // Convert trailing digits to zeros according to dp. + if (k && dp) { + v = POWS_TEN[LOG_BASE - dp]; + c[i] = mathfloor(k / v) * v; + } + + // Remove trailing elements which are zero. + for (; c[i] === 0; c.pop(), i--); + + // Zero? + if (i < 0) { + c = [e = 0]; + } else { + + // Remove leading elements which are zero and adjust exponent accordingly. + for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); + + // Count the digits of the first element of c to determine leading zeros, and... + for (i = 1, v = c[0]; v >= 10; v /= 10, i++); + + // adjust the exponent accordingly. + if (i < LOG_BASE) e -= LOG_BASE - i; + } + + rand.e = e; + rand.c = c; + return rand; + }; + })(); + + + /* + * Return a BigNumber whose value is the sum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.sum = function () { + var i = 1, + args = arguments, + sum = new BigNumber(args[0]); + for (; i < args.length;) sum = sum.plus(args[i++]); + return sum; + }; + + + // PRIVATE FUNCTIONS + + + // Called by BigNumber and BigNumber.prototype.toString. + convertBase = (function () { + var decimal = '0123456789'; + + /* + * Convert string of baseIn to an array of numbers of baseOut. + * Eg. toBaseOut('255', 10, 16) returns [15, 15]. + * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5]. + */ + function toBaseOut(str, baseIn, baseOut, alphabet) { + var j, + arr = [0], + arrL, + i = 0, + len = str.length; + + for (; i < len;) { + for (arrL = arr.length; arrL--; arr[arrL] *= baseIn); + + arr[0] += alphabet.indexOf(str.charAt(i++)); + + for (j = 0; j < arr.length; j++) { + + if (arr[j] > baseOut - 1) { + if (arr[j + 1] == null) arr[j + 1] = 0; + arr[j + 1] += arr[j] / baseOut | 0; + arr[j] %= baseOut; + } + } + } + + return arr.reverse(); + } + + // Convert a numeric string of baseIn to a numeric string of baseOut. + // If the caller is toString, we are converting from base 10 to baseOut. + // If the caller is BigNumber, we are converting from baseIn to base 10. + return function (str, baseIn, baseOut, sign, callerIsToString) { + var alphabet, d, e, k, r, x, xc, y, + i = str.indexOf('.'), + dp = DECIMAL_PLACES, + rm = ROUNDING_MODE; + + // Non-integer. + if (i >= 0) { + k = POW_PRECISION; + + // Unlimited precision. + POW_PRECISION = 0; + str = str.replace('.', ''); + y = new BigNumber(baseIn); + x = y.pow(str.length - i); + POW_PRECISION = k; + + // Convert str as if an integer, then restore the fraction part by dividing the + // result by its base raised to a power. + + y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), + 10, baseOut, decimal); + y.e = y.c.length; + } + + // Convert the number as integer. + + xc = toBaseOut(str, baseIn, baseOut, callerIsToString + ? (alphabet = ALPHABET, decimal) + : (alphabet = decimal, ALPHABET)); + + // xc now represents str as an integer and converted to baseOut. e is the exponent. + e = k = xc.length; + + // Remove trailing zeros. + for (; xc[--k] == 0; xc.pop()); + + // Zero? + if (!xc[0]) return alphabet.charAt(0); + + // Does str represent an integer? If so, no need for the division. + if (i < 0) { + --e; + } else { + x.c = xc; + x.e = e; + + // The sign is needed for correct rounding. + x.s = sign; + x = div(x, y, dp, rm, baseOut); + xc = x.c; + r = x.r; + e = x.e; + } + + // xc now represents str converted to baseOut. + + // THe index of the rounding digit. + d = e + dp + 1; + + // The rounding digit: the digit to the right of the digit that may be rounded up. + i = xc[d]; + + // Look at the rounding digits and mode to determine whether to round up. + + k = baseOut / 2; + r = r || d < 0 || xc[d + 1] != null; + + r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) + : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 || + rm == (x.s < 0 ? 8 : 7)); + + // If the index of the rounding digit is not greater than zero, or xc represents + // zero, then the result of the base conversion is zero or, if rounding up, a value + // such as 0.00001. + if (d < 1 || !xc[0]) { + + // 1^-dp or 0 + str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); + } else { + + // Truncate xc to the required number of decimal places. + xc.length = d; + + // Round up? + if (r) { + + // Rounding up may mean the previous digit has to be rounded up and so on. + for (--baseOut; ++xc[--d] > baseOut;) { + xc[d] = 0; + + if (!d) { + ++e; + xc = [1].concat(xc); + } + } + } + + // Determine trailing zeros. + for (k = xc.length; !xc[--k];); + + // E.g. [4, 11, 15] becomes 4bf. + for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); + + // Add leading zeros, decimal point and trailing zeros as required. + str = toFixedPoint(str, e, alphabet.charAt(0)); + } + + // The caller will add the sign. + return str; + }; + })(); + + + // Perform division in the specified base. Called by div and convertBase. + div = (function () { + + // Assume non-zero x and k. + function multiply(x, k, base) { + var m, temp, xlo, xhi, + carry = 0, + i = x.length, + klo = k % SQRT_BASE, + khi = k / SQRT_BASE | 0; + + for (x = x.slice(); i--;) { + xlo = x[i] % SQRT_BASE; + xhi = x[i] / SQRT_BASE | 0; + m = khi * xlo + xhi * klo; + temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry; + carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; + x[i] = temp % base; + } + + if (carry) x = [carry].concat(x); + + return x; + } + + function compare(a, b, aL, bL) { + var i, cmp; + + if (aL != bL) { + cmp = aL > bL ? 1 : -1; + } else { + + for (i = cmp = 0; i < aL; i++) { + + if (a[i] != b[i]) { + cmp = a[i] > b[i] ? 1 : -1; + break; + } + } + } + + return cmp; + } + + function subtract(a, b, aL, base) { + var i = 0; + + // Subtract b from a. + for (; aL--;) { + a[aL] -= i; + i = a[aL] < b[aL] ? 1 : 0; + a[aL] = i * base + a[aL] - b[aL]; + } + + // Remove leading zeros. + for (; !a[0] && a.length > 1; a.splice(0, 1)); + } + + // x: dividend, y: divisor. + return function (x, y, dp, rm, base) { + var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, + yL, yz, + s = x.s == y.s ? 1 : -1, + xc = x.c, + yc = y.c; + + // Either NaN, Infinity or 0? + if (!xc || !xc[0] || !yc || !yc[0]) { + + return new BigNumber( + + // Return NaN if either NaN, or both Infinity or 0. + !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : + + // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. + xc && xc[0] == 0 || !yc ? s * 0 : s / 0 + ); + } + + q = new BigNumber(s); + qc = q.c = []; + e = x.e - y.e; + s = dp + e + 1; + + if (!base) { + base = BASE; + e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); + s = s / LOG_BASE | 0; + } + + // Result exponent may be one less then the current value of e. + // The coefficients of the BigNumbers from convertBase may have trailing zeros. + for (i = 0; yc[i] == (xc[i] || 0); i++); + + if (yc[i] > (xc[i] || 0)) e--; + + if (s < 0) { + qc.push(1); + more = true; + } else { + xL = xc.length; + yL = yc.length; + i = 0; + s += 2; + + // Normalise xc and yc so highest order digit of yc is >= base / 2. + + n = mathfloor(base / (yc[0] + 1)); + + // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1. + // if (n > 1 || n++ == 1 && yc[0] < base / 2) { + if (n > 1) { + yc = multiply(yc, n, base); + xc = multiply(xc, n, base); + yL = yc.length; + xL = xc.length; + } + + xi = yL; + rem = xc.slice(0, yL); + remL = rem.length; + + // Add zeros to make remainder as long as divisor. + for (; remL < yL; rem[remL++] = 0); + yz = yc.slice(); + yz = [0].concat(yz); + yc0 = yc[0]; + if (yc[1] >= base / 2) yc0++; + // Not necessary, but to prevent trial digit n > base, when using base 3. + // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15; + + do { + n = 0; + + // Compare divisor and remainder. + cmp = compare(yc, rem, yL, remL); + + // If divisor < remainder. + if (cmp < 0) { + + // Calculate trial digit, n. + + rem0 = rem[0]; + if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); + + // n is how many times the divisor goes into the current remainder. + n = mathfloor(rem0 / yc0); + + // Algorithm: + // product = divisor multiplied by trial digit (n). + // Compare product and remainder. + // If product is greater than remainder: + // Subtract divisor from product, decrement trial digit. + // Subtract product from remainder. + // If product was less than remainder at the last compare: + // Compare new remainder and divisor. + // If remainder is greater than divisor: + // Subtract divisor from remainder, increment trial digit. + + if (n > 1) { + + // n may be > base only when base is 3. + if (n >= base) n = base - 1; + + // product = divisor * trial digit. + prod = multiply(yc, n, base); + prodL = prod.length; + remL = rem.length; + + // Compare product and remainder. + // If product > remainder then trial digit n too high. + // n is 1 too high about 5% of the time, and is not known to have + // ever been more than 1 too high. + while (compare(prod, rem, prodL, remL) == 1) { + n--; + + // Subtract divisor from product. + subtract(prod, yL < prodL ? yz : yc, prodL, base); + prodL = prod.length; + cmp = 1; + } + } else { + + // n is 0 or 1, cmp is -1. + // If n is 0, there is no need to compare yc and rem again below, + // so change cmp to 1 to avoid it. + // If n is 1, leave cmp as -1, so yc and rem are compared again. + if (n == 0) { + + // divisor < remainder, so n must be at least 1. + cmp = n = 1; + } + + // product = divisor + prod = yc.slice(); + prodL = prod.length; + } + + if (prodL < remL) prod = [0].concat(prod); + + // Subtract product from remainder. + subtract(rem, prod, remL, base); + remL = rem.length; + + // If product was < remainder. + if (cmp == -1) { + + // Compare divisor and new remainder. + // If divisor < new remainder, subtract divisor from remainder. + // Trial digit n too low. + // n is 1 too low about 5% of the time, and very rarely 2 too low. + while (compare(yc, rem, yL, remL) < 1) { + n++; + + // Subtract divisor from remainder. + subtract(rem, yL < remL ? yz : yc, remL, base); + remL = rem.length; + } + } + } else if (cmp === 0) { + n++; + rem = [0]; + } // else cmp === 1 and n will be 0 + + // Add the next digit, n, to the result array. + qc[i++] = n; + + // Update the remainder. + if (rem[0]) { + rem[remL++] = xc[xi] || 0; + } else { + rem = [xc[xi]]; + remL = 1; + } + } while ((xi++ < xL || rem[0] != null) && s--); + + more = rem[0] != null; + + // Leading zero? + if (!qc[0]) qc.splice(0, 1); + } + + if (base == BASE) { + + // To calculate q.e, first get the number of digits of qc[0]. + for (i = 1, s = qc[0]; s >= 10; s /= 10, i++); + + round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); + + // Caller is convertBase. + } else { + q.e = e; + q.r = +more; + } + + return q; + }; + })(); + + + /* + * Return a string representing the value of BigNumber n in fixed-point or exponential + * notation rounded to the specified decimal places or significant digits. + * + * n: a BigNumber. + * i: the index of the last digit required (i.e. the digit that may be rounded up). + * rm: the rounding mode. + * id: 1 (toExponential) or 2 (toPrecision). + */ + function format(n, i, rm, id) { + var c0, e, ne, len, str; + + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + if (!n.c) return n.toString(); + + c0 = n.c[0]; + ne = n.e; + + if (i == null) { + str = coeffToString(n.c); + str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) + ? toExponential(str, ne) + : toFixedPoint(str, ne, '0'); + } else { + n = round(new BigNumber(n), i, rm); + + // n.e may have changed if the value was rounded up. + e = n.e; + + str = coeffToString(n.c); + len = str.length; + + // toPrecision returns exponential notation if the number of significant digits + // specified is less than the number of digits necessary to represent the integer + // part of the value in fixed-point notation. + + // Exponential notation. + if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { + + // Append zeros? + for (; len < i; str += '0', len++); + str = toExponential(str, e); + + // Fixed-point notation. + } else { + i -= ne; + str = toFixedPoint(str, e, '0'); + + // Append zeros? + if (e + 1 > len) { + if (--i > 0) for (str += '.'; i--; str += '0'); + } else { + i += e - len; + if (i > 0) { + if (e + 1 == len) str += '.'; + for (; i--; str += '0'); + } + } + } + } + + return n.s < 0 && c0 ? '-' + str : str; + } + + + // Handle BigNumber.max and BigNumber.min. + // If any number is NaN, return NaN. + function maxOrMin(args, n) { + var k, y, + i = 1, + x = new BigNumber(args[0]); + + for (; i < args.length; i++) { + y = new BigNumber(args[i]); + if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) { + x = y; + } + } + + return x; + } + + + /* + * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. + * Called by minus, plus and times. + */ + function normalise(n, c, e) { + var i = 1, + j = c.length; + + // Remove trailing zeros. + for (; !c[--j]; c.pop()); + + // Calculate the base 10 exponent. First get the number of digits of c[0]. + for (j = c[0]; j >= 10; j /= 10, i++); + + // Overflow? + if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { + + // Infinity. + n.c = n.e = null; + + // Underflow? + } else if (e < MIN_EXP) { + + // Zero. + n.c = [n.e = 0]; + } else { + n.e = e; + n.c = c; + } + + return n; + } + + + // Handle values that fail the validity test in BigNumber. + parseNumeric = (function () { + var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, + dotAfter = /^([^.]+)\.$/, + dotBefore = /^\.([^.]+)$/, + isInfinityOrNaN = /^-?(Infinity|NaN)$/, + whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; + + return function (x, str, isNum, b) { + var base, + s = isNum ? str : str.replace(whitespaceOrPlus, ''); + + // No exception on ±Infinity or NaN. + if (isInfinityOrNaN.test(s)) { + x.s = isNaN(s) ? null : s < 0 ? -1 : 1; + } else { + if (!isNum) { + + // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i + s = s.replace(basePrefix, function (m, p1, p2) { + base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8; + return !b || b == base ? p1 : m; + }); + + if (b) { + base = b; + + // E.g. '1.' to '1', '.1' to '0.1' + s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1'); + } + + if (str != s) return new BigNumber(s, base); + } + + // '[BigNumber Error] Not a number: {n}' + // '[BigNumber Error] Not a base {b} number: {n}' + if (BigNumber.DEBUG) { + throw Error + (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str); + } + + // NaN + x.s = null; + } + + x.c = x.e = null; + } + })(); + + + /* + * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. + * If r is truthy, it is known that there are more digits after the rounding digit. + */ + function round(x, sd, rm, r) { + var d, i, j, k, n, ni, rd, + xc = x.c, + pows10 = POWS_TEN; + + // if x is not Infinity or NaN... + if (xc) { + + // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. + // n is a base 1e14 number, the value of the element of array x.c containing rd. + // ni is the index of n within x.c. + // d is the number of digits of n. + // i is the index of rd within n including leading zeros. + // j is the actual index of rd within n (if < 0, rd is a leading zero). + out: { + + // Get the number of digits of the first element of xc. + for (d = 1, k = xc[0]; k >= 10; k /= 10, d++); + i = sd - d; + + // If the rounding digit is in the first element of xc... + if (i < 0) { + i += LOG_BASE; + j = sd; + n = xc[ni = 0]; + + // Get the rounding digit at index j of n. + rd = mathfloor(n / pows10[d - j - 1] % 10); + } else { + ni = mathceil((i + 1) / LOG_BASE); + + if (ni >= xc.length) { + + if (r) { + + // Needed by sqrt. + for (; xc.length <= ni; xc.push(0)); + n = rd = 0; + d = 1; + i %= LOG_BASE; + j = i - LOG_BASE + 1; + } else { + break out; + } + } else { + n = k = xc[ni]; + + // Get the number of digits of n. + for (d = 1; k >= 10; k /= 10, d++); + + // Get the index of rd within n. + i %= LOG_BASE; + + // Get the index of rd within n, adjusted for leading zeros. + // The number of leading zeros of n is given by LOG_BASE - d. + j = i - LOG_BASE + d; + + // Get the rounding digit at index j of n. + rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10); + } + } + + r = r || sd < 0 || + + // Are there any non-zero digits after the rounding digit? + // The expression n % pows10[d - j - 1] returns all digits of n to the right + // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. + xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); + + r = rm < 4 + ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) + : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && + + // Check whether the digit to the left of the rounding digit is odd. + ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 || + rm == (x.s < 0 ? 8 : 7)); + + if (sd < 1 || !xc[0]) { + xc.length = 0; + + if (r) { + + // Convert sd to decimal places. + sd -= x.e + 1; + + // 1, 0.1, 0.01, 0.001, 0.0001 etc. + xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; + x.e = -sd || 0; + } else { + + // Zero. + xc[0] = x.e = 0; + } + + return x; + } + + // Remove excess digits. + if (i == 0) { + xc.length = ni; + k = 1; + ni--; + } else { + xc.length = ni + 1; + k = pows10[LOG_BASE - i]; + + // E.g. 56700 becomes 56000 if 7 is the rounding digit. + // j > 0 means i > number of leading zeros of n. + xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; + } + + // Round up? + if (r) { + + for (; ;) { + + // If the digit to be rounded up is in the first element of xc... + if (ni == 0) { + + // i will be the length of xc[0] before k is added. + for (i = 1, j = xc[0]; j >= 10; j /= 10, i++); + j = xc[0] += k; + for (k = 1; j >= 10; j /= 10, k++); + + // if i != k the length has increased. + if (i != k) { + x.e++; + if (xc[0] == BASE) xc[0] = 1; + } + + break; + } else { + xc[ni] += k; + if (xc[ni] != BASE) break; + xc[ni--] = 0; + k = 1; + } + } + } + + // Remove trailing zeros. + for (i = xc.length; xc[--i] === 0; xc.pop()); + } + + // Overflow? Infinity. + if (x.e > MAX_EXP) { + x.c = x.e = null; + + // Underflow? Zero. + } else if (x.e < MIN_EXP) { + x.c = [x.e = 0]; + } + } + + return x; + } + + + function valueOf(n) { + var str, + e = n.e; + + if (e === null) return n.toString(); + + str = coeffToString(n.c); + + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential(str, e) + : toFixedPoint(str, e, '0'); + + return n.s < 0 ? '-' + str : str; + } + + + // PROTOTYPE/INSTANCE METHODS + + + /* + * Return a new BigNumber whose value is the absolute value of this BigNumber. + */ + P.absoluteValue = P.abs = function () { + var x = new BigNumber(this); + if (x.s < 0) x.s = 1; + return x; + }; + + + /* + * Return + * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), + * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), + * 0 if they have the same value, + * or null if the value of either is NaN. + */ + P.comparedTo = function (y, b) { + return compare(this, new BigNumber(y, b)); + }; + + + /* + * If dp is undefined or null or true or false, return the number of decimal places of the + * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. + * + * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this + * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or + * ROUNDING_MODE if rm is omitted. + * + * [dp] {number} Decimal places: integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.decimalPlaces = P.dp = function (dp, rm) { + var c, n, v, + x = this; + + if (dp != null) { + intCheck(dp, 0, MAX); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + return round(new BigNumber(x), dp + x.e + 1, rm); + } + + if (!(c = x.c)) return null; + n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; + + // Subtract the number of trailing zeros of the last number. + if (v = c[v]) for (; v % 10 == 0; v /= 10, n--); + if (n < 0) n = 0; + + return n; + }; + + + /* + * n / 0 = I + * n / N = N + * n / I = 0 + * 0 / n = 0 + * 0 / 0 = N + * 0 / N = N + * 0 / I = 0 + * N / n = N + * N / 0 = N + * N / N = N + * N / I = N + * I / n = I + * I / 0 = I + * I / N = N + * I / I = N + * + * Return a new BigNumber whose value is the value of this BigNumber divided by the value of + * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.dividedBy = P.div = function (y, b) { + return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE); + }; + + + /* + * Return a new BigNumber whose value is the integer part of dividing the value of this + * BigNumber by the value of BigNumber(y, b). + */ + P.dividedToIntegerBy = P.idiv = function (y, b) { + return div(this, new BigNumber(y, b), 0, 1); + }; + + + /* + * Return a BigNumber whose value is the value of this BigNumber exponentiated by n. + * + * If m is present, return the result modulo m. + * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. + * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE. + * + * The modular power operation works efficiently when x, n, and m are integers, otherwise it + * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0. + * + * n {number|string|BigNumber} The exponent. An integer. + * [m] {number|string|BigNumber} The modulus. + * + * '[BigNumber Error] Exponent not an integer: {n}' + */ + P.exponentiatedBy = P.pow = function (n, m) { + var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, + x = this; + + n = new BigNumber(n); + + // Allow NaN and ±Infinity, but not other non-integers. + if (n.c && !n.isInteger()) { + throw Error + (bignumberError + 'Exponent not an integer: ' + valueOf(n)); + } + + if (m != null) m = new BigNumber(m); + + // Exponent of MAX_SAFE_INTEGER is 15. + nIsBig = n.e > 14; + + // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0. + if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { + + // The sign of the result of pow when x is negative depends on the evenness of n. + // If +n overflows to ±Infinity, the evenness of n would be not be known. + y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n))); + return m ? y.mod(m) : y; + } + + nIsNeg = n.s < 0; + + if (m) { + + // x % m returns NaN if abs(m) is zero, or m is NaN. + if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN); + + isModExp = !nIsNeg && x.isInteger() && m.isInteger(); + + if (isModExp) x = x.mod(m); + + // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15. + // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15. + } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 + // [1, 240000000] + ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 + // [80000000000000] [99999750000000] + : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) { + + // If x is negative and n is odd, k = -0, else k = 0. + k = x.s < 0 && isOdd(n) ? -0 : 0; + + // If x >= 1, k = ±Infinity. + if (x.e > -1) k = 1 / k; + + // If n is negative return ±0, else return ±Infinity. + return new BigNumber(nIsNeg ? 1 / k : k); + + } else if (POW_PRECISION) { + + // Truncating each coefficient array to a length of k after each multiplication + // equates to truncating significant digits to POW_PRECISION + [28, 41], + // i.e. there will be a minimum of 28 guard digits retained. + k = mathceil(POW_PRECISION / LOG_BASE + 2); + } + + if (nIsBig) { + half = new BigNumber(0.5); + if (nIsNeg) n.s = 1; + nIsOdd = isOdd(n); + } else { + i = Math.abs(+valueOf(n)); + nIsOdd = i % 2; + } + + y = new BigNumber(ONE); + + // Performs 54 loop iterations for n of 9007199254740991. + for (; ;) { + + if (nIsOdd) { + y = y.times(x); + if (!y.c) break; + + if (k) { + if (y.c.length > k) y.c.length = k; + } else if (isModExp) { + y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m)); + } + } + + if (i) { + i = mathfloor(i / 2); + if (i === 0) break; + nIsOdd = i % 2; + } else { + n = n.times(half); + round(n, n.e + 1, 1); + + if (n.e > 14) { + nIsOdd = isOdd(n); + } else { + i = +valueOf(n); + if (i === 0) break; + nIsOdd = i % 2; + } + } + + x = x.times(x); + + if (k) { + if (x.c && x.c.length > k) x.c.length = k; + } else if (isModExp) { + x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m)); + } + } + + if (isModExp) return y; + if (nIsNeg) y = ONE.div(y); + + return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer + * using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}' + */ + P.integerValue = function (rm) { + var n = new BigNumber(this); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + return round(n, n.e + 1, rm); + }; + + + /* + * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), + * otherwise return false. + */ + P.isEqualTo = P.eq = function (y, b) { + return compare(this, new BigNumber(y, b)) === 0; + }; + + + /* + * Return true if the value of this BigNumber is a finite number, otherwise return false. + */ + P.isFinite = function () { + return !!this.c; + }; + + + /* + * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), + * otherwise return false. + */ + P.isGreaterThan = P.gt = function (y, b) { + return compare(this, new BigNumber(y, b)) > 0; + }; + + + /* + * Return true if the value of this BigNumber is greater than or equal to the value of + * BigNumber(y, b), otherwise return false. + */ + P.isGreaterThanOrEqualTo = P.gte = function (y, b) { + return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0; + + }; + + + /* + * Return true if the value of this BigNumber is an integer, otherwise return false. + */ + P.isInteger = function () { + return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; + }; + + + /* + * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), + * otherwise return false. + */ + P.isLessThan = P.lt = function (y, b) { + return compare(this, new BigNumber(y, b)) < 0; + }; + + + /* + * Return true if the value of this BigNumber is less than or equal to the value of + * BigNumber(y, b), otherwise return false. + */ + P.isLessThanOrEqualTo = P.lte = function (y, b) { + return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0; + }; + + + /* + * Return true if the value of this BigNumber is NaN, otherwise return false. + */ + P.isNaN = function () { + return !this.s; + }; + + + /* + * Return true if the value of this BigNumber is negative, otherwise return false. + */ + P.isNegative = function () { + return this.s < 0; + }; + + + /* + * Return true if the value of this BigNumber is positive, otherwise return false. + */ + P.isPositive = function () { + return this.s > 0; + }; + + + /* + * Return true if the value of this BigNumber is 0 or -0, otherwise return false. + */ + P.isZero = function () { + return !!this.c && this.c[0] == 0; + }; + + + /* + * n - 0 = n + * n - N = N + * n - I = -I + * 0 - n = -n + * 0 - 0 = 0 + * 0 - N = N + * 0 - I = -I + * N - n = N + * N - 0 = N + * N - N = N + * N - I = N + * I - n = I + * I - 0 = I + * I - N = N + * I - I = N + * + * Return a new BigNumber whose value is the value of this BigNumber minus the value of + * BigNumber(y, b). + */ + P.minus = function (y, b) { + var i, j, t, xLTy, + x = this, + a = x.s; + + y = new BigNumber(y, b); + b = y.s; + + // Either NaN? + if (!a || !b) return new BigNumber(NaN); + + // Signs differ? + if (a != b) { + y.s = -b; + return x.plus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if (!xe || !ye) { + + // Either Infinity? + if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); + + // Either zero? + if (!xc[0] || !yc[0]) { + + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : + + // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity + ROUNDING_MODE == 3 ? -0 : 0); + } + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Determine which is the bigger number. + if (a = xe - ye) { + + if (xLTy = a < 0) { + a = -a; + t = xc; + } else { + ye = xe; + t = yc; + } + + t.reverse(); + + // Prepend zeros to equalise exponents. + for (b = a; b--; t.push(0)); + t.reverse(); + } else { + + // Exponents equal. Check digit by digit. + j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; + + for (a = b = 0; b < j; b++) { + + if (xc[b] != yc[b]) { + xLTy = xc[b] < yc[b]; + break; + } + } + } + + // x < y? Point xc to the array of the bigger number. + if (xLTy) { + t = xc; + xc = yc; + yc = t; + y.s = -y.s; + } + + b = (j = yc.length) - (i = xc.length); + + // Append zeros to xc if shorter. + // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. + if (b > 0) for (; b--; xc[i++] = 0); + b = BASE - 1; + + // Subtract yc from xc. + for (; j > a;) { + + if (xc[--j] < yc[j]) { + for (i = j; i && !xc[--i]; xc[i] = b); + --xc[i]; + xc[j] += BASE; + } + + xc[j] -= yc[j]; + } + + // Remove leading zeros and adjust exponent accordingly. + for (; xc[0] == 0; xc.splice(0, 1), --ye); + + // Zero? + if (!xc[0]) { + + // Following IEEE 754 (2008) 6.3, + // n - n = +0 but n - n = -0 when rounding towards -Infinity. + y.s = ROUNDING_MODE == 3 ? -1 : 1; + y.c = [y.e = 0]; + return y; + } + + // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity + // for finite x and y. + return normalise(y, xc, ye); + }; + + + /* + * n % 0 = N + * n % N = N + * n % I = n + * 0 % n = 0 + * -0 % n = -0 + * 0 % 0 = N + * 0 % N = N + * 0 % I = 0 + * N % n = N + * N % 0 = N + * N % N = N + * N % I = N + * I % n = N + * I % 0 = N + * I % N = N + * I % I = N + * + * Return a new BigNumber whose value is the value of this BigNumber modulo the value of + * BigNumber(y, b). The result depends on the value of MODULO_MODE. + */ + P.modulo = P.mod = function (y, b) { + var q, s, + x = this; + + y = new BigNumber(y, b); + + // Return NaN if x is Infinity or NaN, or y is NaN or zero. + if (!x.c || !y.s || y.c && !y.c[0]) { + return new BigNumber(NaN); + + // Return x if y is Infinity or x is zero. + } else if (!y.c || x.c && !x.c[0]) { + return new BigNumber(x); + } + + if (MODULO_MODE == 9) { + + // Euclidian division: q = sign(y) * floor(x / abs(y)) + // r = x - qy where 0 <= r < abs(y) + s = y.s; + y.s = 1; + q = div(x, y, 0, 3); + y.s = s; + q.s *= s; + } else { + q = div(x, y, 0, MODULO_MODE); + } + + y = x.minus(q.times(y)); + + // To match JavaScript %, ensure sign of zero is sign of dividend. + if (!y.c[0] && MODULO_MODE == 1) y.s = x.s; + + return y; + }; + + + /* + * n * 0 = 0 + * n * N = N + * n * I = I + * 0 * n = 0 + * 0 * 0 = 0 + * 0 * N = N + * 0 * I = N + * N * n = N + * N * 0 = N + * N * N = N + * N * I = N + * I * n = I + * I * 0 = N + * I * N = N + * I * I = I + * + * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value + * of BigNumber(y, b). + */ + P.multipliedBy = P.times = function (y, b) { + var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, + base, sqrtBase, + x = this, + xc = x.c, + yc = (y = new BigNumber(y, b)).c; + + // Either NaN, ±Infinity or ±0? + if (!xc || !yc || !xc[0] || !yc[0]) { + + // Return NaN if either is NaN, or one is 0 and the other is Infinity. + if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { + y.c = y.e = y.s = null; + } else { + y.s *= x.s; + + // Return ±Infinity if either is ±Infinity. + if (!xc || !yc) { + y.c = y.e = null; + + // Return ±0 if either is ±0. + } else { + y.c = [0]; + y.e = 0; + } + } + + return y; + } + + e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); + y.s *= x.s; + xcL = xc.length; + ycL = yc.length; + + // Ensure xc points to longer array and xcL to its length. + if (xcL < ycL) { + zc = xc; + xc = yc; + yc = zc; + i = xcL; + xcL = ycL; + ycL = i; + } + + // Initialise the result array with zeros. + for (i = xcL + ycL, zc = []; i--; zc.push(0)); + + base = BASE; + sqrtBase = SQRT_BASE; + + for (i = ycL; --i >= 0;) { + c = 0; + ylo = yc[i] % sqrtBase; + yhi = yc[i] / sqrtBase | 0; + + for (k = xcL, j = i + k; j > i;) { + xlo = xc[--k] % sqrtBase; + xhi = xc[k] / sqrtBase | 0; + m = yhi * xlo + xhi * ylo; + xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c; + c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; + zc[j--] = xlo % base; + } + + zc[j] = c; + } + + if (c) { + ++e; + } else { + zc.splice(0, 1); + } + + return normalise(y, zc, e); + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber negated, + * i.e. multiplied by -1. + */ + P.negated = function () { + var x = new BigNumber(this); + x.s = -x.s || null; + return x; + }; + + + /* + * n + 0 = n + * n + N = N + * n + I = I + * 0 + n = n + * 0 + 0 = 0 + * 0 + N = N + * 0 + I = I + * N + n = N + * N + 0 = N + * N + N = N + * N + I = N + * I + n = I + * I + 0 = I + * I + N = N + * I + I = I + * + * Return a new BigNumber whose value is the value of this BigNumber plus the value of + * BigNumber(y, b). + */ + P.plus = function (y, b) { + var t, + x = this, + a = x.s; + + y = new BigNumber(y, b); + b = y.s; + + // Either NaN? + if (!a || !b) return new BigNumber(NaN); + + // Signs differ? + if (a != b) { + y.s = -b; + return x.minus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if (!xe || !ye) { + + // Return ±Infinity if either ±Infinity. + if (!xc || !yc) return new BigNumber(a / 0); + + // Either zero? + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0); + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. + if (a = xe - ye) { + if (a > 0) { + ye = xe; + t = yc; + } else { + a = -a; + t = xc; + } + + t.reverse(); + for (; a--; t.push(0)); + t.reverse(); + } + + a = xc.length; + b = yc.length; + + // Point xc to the longer array, and b to the shorter length. + if (a - b < 0) { + t = yc; + yc = xc; + xc = t; + b = a; + } + + // Only start adding at yc.length - 1 as the further digits of xc can be ignored. + for (a = 0; b;) { + a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; + xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; + } + + if (a) { + xc = [a].concat(xc); + ++ye; + } + + // No need to check for zero, as +x + +y != 0 && -x + -y != 0 + // ye = MAX_EXP + 1 possible + return normalise(y, xc, ye); + }; + + + /* + * If sd is undefined or null or true or false, return the number of significant digits of + * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. + * If sd is true include integer-part trailing zeros in the count. + * + * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this + * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or + * ROUNDING_MODE if rm is omitted. + * + * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive. + * boolean: whether to count integer-part trailing zeros: true or false. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' + */ + P.precision = P.sd = function (sd, rm) { + var c, n, v, + x = this; + + if (sd != null && sd !== !!sd) { + intCheck(sd, 1, MAX); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + return round(new BigNumber(x), sd, rm); + } + + if (!(c = x.c)) return null; + v = c.length - 1; + n = v * LOG_BASE + 1; + + if (v = c[v]) { + + // Subtract the number of trailing zeros of the last element. + for (; v % 10 == 0; v /= 10, n--); + + // Add the number of digits of the first element. + for (v = c[0]; v >= 10; v /= 10, n++); + } + + if (sd && x.e + 1 > n) n = x.e + 1; + + return n; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber shifted by k places + * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. + * + * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}' + */ + P.shiftedBy = function (k) { + intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); + return this.times('1e' + k); + }; + + + /* + * sqrt(-n) = N + * sqrt(N) = N + * sqrt(-I) = N + * sqrt(I) = I + * sqrt(0) = 0 + * sqrt(-0) = -0 + * + * Return a new BigNumber whose value is the square root of the value of this BigNumber, + * rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.squareRoot = P.sqrt = function () { + var m, n, r, rep, t, + x = this, + c = x.c, + s = x.s, + e = x.e, + dp = DECIMAL_PLACES + 4, + half = new BigNumber('0.5'); + + // Negative/NaN/Infinity/zero? + if (s !== 1 || !c || !c[0]) { + return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); + } + + // Initial estimate. + s = Math.sqrt(+valueOf(x)); + + // Math.sqrt underflow/overflow? + // Pass x to Math.sqrt as integer, then adjust the exponent of the result. + if (s == 0 || s == 1 / 0) { + n = coeffToString(c); + if ((n.length + e) % 2 == 0) n += '0'; + s = Math.sqrt(+n); + e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); + + if (s == 1 / 0) { + n = '5e' + e; + } else { + n = s.toExponential(); + n = n.slice(0, n.indexOf('e') + 1) + e; + } + + r = new BigNumber(n); + } else { + r = new BigNumber(s + ''); + } + + // Check for zero. + // r could be zero if MIN_EXP is changed after the this value was created. + // This would cause a division by zero (x/t) and hence Infinity below, which would cause + // coeffToString to throw. + if (r.c[0]) { + e = r.e; + s = e + dp; + if (s < 3) s = 0; + + // Newton-Raphson iteration. + for (; ;) { + t = r; + r = half.times(t.plus(div(x, t, dp, 1))); + + if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { + + // The exponent of r may here be one less than the final result exponent, + // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits + // are indexed correctly. + if (r.e < e) --s; + n = n.slice(s - 3, s + 1); + + // The 4th rounding digit may be in error by -1 so if the 4 rounding digits + // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the + // iteration. + if (n == '9999' || !rep && n == '4999') { + + // On the first iteration only, check to see if rounding up gives the + // exact result as the nines may infinitely repeat. + if (!rep) { + round(t, t.e + DECIMAL_PLACES + 2, 0); + + if (t.times(t).eq(x)) { + r = t; + break; + } + } + + dp += 4; + s += 4; + rep = 1; + } else { + + // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact + // result. If not, then there are further digits and m will be truthy. + if (!+n || !+n.slice(1) && n.charAt(0) == '5') { + + // Truncate to the first rounding digit. + round(r, r.e + DECIMAL_PLACES + 2, 1); + m = !r.times(r).eq(x); + } + + break; + } + } + } + } + + return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); + }; + + + /* + * Return a string representing the value of this BigNumber in exponential notation and + * rounded using ROUNDING_MODE to dp fixed decimal places. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.toExponential = function (dp, rm) { + if (dp != null) { + intCheck(dp, 0, MAX); + dp++; + } + return format(this, dp, rm, 1); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounding + * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', + * but e.g. (-0.00001).toFixed(0) is '-0'. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.toFixed = function (dp, rm) { + if (dp != null) { + intCheck(dp, 0, MAX); + dp = dp + this.e + 1; + } + return format(this, dp, rm); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounded + * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties + * of the format or FORMAT object (see BigNumber.set). + * + * The formatting object may contain some or all of the properties shown below. + * + * FORMAT = { + * prefix: '', + * groupSize: 3, + * secondaryGroupSize: 0, + * groupSeparator: ',', + * decimalSeparator: '.', + * fractionGroupSize: 0, + * fractionGroupSeparator: '\xA0', // non-breaking space + * suffix: '' + * }; + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * [format] {object} Formatting options. See FORMAT pbject above. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + * '[BigNumber Error] Argument not an object: {format}' + */ + P.toFormat = function (dp, rm, format) { + var str, + x = this; + + if (format == null) { + if (dp != null && rm && typeof rm == 'object') { + format = rm; + rm = null; + } else if (dp && typeof dp == 'object') { + format = dp; + dp = rm = null; + } else { + format = FORMAT; + } + } else if (typeof format != 'object') { + throw Error + (bignumberError + 'Argument not an object: ' + format); + } + + str = x.toFixed(dp, rm); + + if (x.c) { + var i, + arr = str.split('.'), + g1 = +format.groupSize, + g2 = +format.secondaryGroupSize, + groupSeparator = format.groupSeparator || '', + intPart = arr[0], + fractionPart = arr[1], + isNeg = x.s < 0, + intDigits = isNeg ? intPart.slice(1) : intPart, + len = intDigits.length; + + if (g2) { + i = g1; + g1 = g2; + g2 = i; + len -= i; + } + + if (g1 > 0 && len > 0) { + i = len % g1 || g1; + intPart = intDigits.substr(0, i); + for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1); + if (g2 > 0) intPart += groupSeparator + intDigits.slice(i); + if (isNeg) intPart = '-' + intPart; + } + + str = fractionPart + ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) + ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), + '$&' + (format.fractionGroupSeparator || '')) + : fractionPart) + : intPart; + } + + return (format.prefix || '') + str + (format.suffix || ''); + }; + + + /* + * Return an array of two BigNumbers representing the value of this BigNumber as a simple + * fraction with an integer numerator and an integer denominator. + * The denominator will be a positive non-zero value less than or equal to the specified + * maximum denominator. If a maximum denominator is not specified, the denominator will be + * the lowest value necessary to represent the number exactly. + * + * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator. + * + * '[BigNumber Error] Argument {not an integer|out of range} : {md}' + */ + P.toFraction = function (md) { + var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, + x = this, + xc = x.c; + + if (md != null) { + n = new BigNumber(md); + + // Throw if md is less than one or is not an integer, unless it is Infinity. + if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { + throw Error + (bignumberError + 'Argument ' + + (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n)); + } + } + + if (!xc) return new BigNumber(x); + + d = new BigNumber(ONE); + n1 = d0 = new BigNumber(ONE); + d1 = n0 = new BigNumber(ONE); + s = coeffToString(xc); + + // Determine initial denominator. + // d is a power of 10 and the minimum max denominator that specifies the value exactly. + e = d.e = s.length - x.e - 1; + d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; + md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n; + + exp = MAX_EXP; + MAX_EXP = 1 / 0; + n = new BigNumber(s); + + // n0 = d1 = 0 + n0.c[0] = 0; + + for (; ;) { + q = div(n, d, 0, 1); + d2 = d0.plus(q.times(d1)); + if (d2.comparedTo(md) == 1) break; + d0 = d1; + d1 = d2; + n1 = n0.plus(q.times(d2 = n1)); + n0 = d2; + d = n.minus(q.times(d2 = d)); + n = d2; + } + + d2 = div(md.minus(d0), d1, 0, 1); + n0 = n0.plus(d2.times(n1)); + d0 = d0.plus(d2.times(d1)); + n0.s = n1.s = x.s; + e = e * 2; + + // Determine which fraction is closer to x, n0/d0 or n1/d1 + r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo( + div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; + + MAX_EXP = exp; + + return r; + }; + + + /* + * Return the value of this BigNumber converted to a number primitive. + */ + P.toNumber = function () { + return +valueOf(this); + }; + + + /* + * Return a string representing the value of this BigNumber rounded to sd significant digits + * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits + * necessary to represent the integer part of the value in fixed-point notation, then use + * exponential notation. + * + * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' + */ + P.toPrecision = function (sd, rm) { + if (sd != null) intCheck(sd, 1, MAX); + return format(this, sd, rm, 2); + }; + + + /* + * Return a string representing the value of this BigNumber in base b, or base 10 if b is + * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and + * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent + * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than + * TO_EXP_NEG, return exponential notation. + * + * [b] {number} Integer, 2 to ALPHABET.length inclusive. + * + * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' + */ + P.toString = function (b) { + var str, + n = this, + s = n.s, + e = n.e; + + // Infinity or NaN? + if (e === null) { + if (s) { + str = 'Infinity'; + if (s < 0) str = '-' + str; + } else { + str = 'NaN'; + } + } else { + if (b == null) { + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential(coeffToString(n.c), e) + : toFixedPoint(coeffToString(n.c), e, '0'); + } else if (b === 10 && alphabetHasNormalDecimalDigits) { + n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); + str = toFixedPoint(coeffToString(n.c), n.e, '0'); + } else { + intCheck(b, 2, ALPHABET.length, 'Base'); + str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true); + } + + if (s < 0 && n.c[0]) str = '-' + str; + } + + return str; + }; + + + /* + * Return as toString, but do not accept a base argument, and include the minus sign for + * negative zero. + */ + P.valueOf = P.toJSON = function () { + return valueOf(this); + }; + + + P._isBigNumber = true; + + P[Symbol.toStringTag] = 'BigNumber'; + + // Node.js v10.12.0+ + P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf; + + if (configObject != null) BigNumber.set(configObject); + + return BigNumber; +} + + +// PRIVATE HELPER FUNCTIONS + +// These functions don't need access to variables, +// e.g. DECIMAL_PLACES, in the scope of the `clone` function above. + + +function bitFloor(n) { + var i = n | 0; + return n > 0 || n === i ? i : i - 1; +} + + +// Return a coefficient array as a string of base 10 digits. +function coeffToString(a) { + var s, z, + i = 1, + j = a.length, + r = a[0] + ''; + + for (; i < j;) { + s = a[i++] + ''; + z = LOG_BASE - s.length; + for (; z--; s = '0' + s); + r += s; + } + + // Determine trailing zeros. + for (j = r.length; r.charCodeAt(--j) === 48;); + + return r.slice(0, j + 1 || 1); +} + + +// Compare the value of BigNumbers x and y. +function compare(x, y) { + var a, b, + xc = x.c, + yc = y.c, + i = x.s, + j = y.s, + k = x.e, + l = y.e; + + // Either NaN? + if (!i || !j) return null; + + a = xc && !xc[0]; + b = yc && !yc[0]; + + // Either zero? + if (a || b) return a ? b ? 0 : -j : i; + + // Signs differ? + if (i != j) return i; + + a = i < 0; + b = k == l; + + // Either Infinity? + if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; + + // Compare exponents. + if (!b) return k > l ^ a ? 1 : -1; + + j = (k = xc.length) < (l = yc.length) ? k : l; + + // Compare digit by digit. + for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; + + // Compare lengths. + return k == l ? 0 : k > l ^ a ? 1 : -1; +} + + +/* + * Check that n is a primitive number, an integer, and in range, otherwise throw. + */ +function intCheck(n, min, max, name) { + if (n < min || n > max || n !== mathfloor(n)) { + throw Error + (bignumberError + (name || 'Argument') + (typeof n == 'number' + ? n < min || n > max ? ' out of range: ' : ' not an integer: ' + : ' not a primitive number: ') + String(n)); + } +} + + +// Assumes finite n. +function isOdd(n) { + var k = n.c.length - 1; + return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; +} + + +function toExponential(str, e) { + return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + + (e < 0 ? 'e' : 'e+') + e; +} + + +function toFixedPoint(str, e, z) { + var len, zs; + + // Negative exponent? + if (e < 0) { + + // Prepend zeros. + for (zs = z + '.'; ++e; zs += z); + str = zs + str; + + // Positive exponent + } else { + len = str.length; + + // Append zeros. + if (++e > len) { + for (zs = z, e -= len; --e; zs += z); + str += zs; + } else if (e < len) { + str = str.slice(0, e) + '.' + str.slice(e); + } + } + + return str; +} + + +// EXPORT + + +var BigNumber = clone(); + +/* harmony default export */ const bignumber = (BigNumber); + +;// ./src/util/bignumber.js + +var bignumber_BigNumber = bignumber.clone(); +bignumber_BigNumber.DEBUG = true; // gives us exceptions on bad constructor values + +/* harmony default export */ const util_bignumber = (bignumber_BigNumber); +;// ./src/util/continued_fraction.js +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } + + +// eslint-disable-next-line no-bitwise +var MAX_INT = (1 << 31 >>> 0) - 1; + +/** + * Calculates and returns the best rational approximation of the given real number. + * @private + * @param {string|number|BigNumber} rawNumber Real number + * @throws Error Throws `Error` when the best rational approximation cannot be found. + * @returns {array} first element is n (numerator), second element is d (denominator) + */ +function best_r(rawNumber) { + var number = new util_bignumber(rawNumber); + var a; + var f; + var fractions = [[new util_bignumber(0), new util_bignumber(1)], [new util_bignumber(1), new util_bignumber(0)]]; + var i = 2; + + // eslint-disable-next-line no-constant-condition + while (true) { + if (number.gt(MAX_INT)) { + break; + } + a = number.integerValue(util_bignumber.ROUND_FLOOR); + f = number.minus(a); + var h = a.times(fractions[i - 1][0]).plus(fractions[i - 2][0]); + var k = a.times(fractions[i - 1][1]).plus(fractions[i - 2][1]); + if (h.gt(MAX_INT) || k.gt(MAX_INT)) { + break; + } + fractions.push([h, k]); + if (f.eq(0)) { + break; + } + number = new util_bignumber(1).div(f); + i += 1; + } + var _fractions = _slicedToArray(fractions[fractions.length - 1], 2), + n = _fractions[0], + d = _fractions[1]; + if (n.isZero() || d.isZero()) { + throw new Error("Couldn't find approximation"); + } + return [n.toNumber(), d.toNumber()]; +} +;// ./src/liquidity_pool_asset.js +function liquidity_pool_asset_typeof(o) { "@babel/helpers - typeof"; return liquidity_pool_asset_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, liquidity_pool_asset_typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = liquidity_pool_asset_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function liquidity_pool_asset_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function liquidity_pool_asset_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, liquidity_pool_asset_toPropertyKey(o.key), o); } } +function liquidity_pool_asset_createClass(e, r, t) { return r && liquidity_pool_asset_defineProperties(e.prototype, r), t && liquidity_pool_asset_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function liquidity_pool_asset_toPropertyKey(t) { var i = liquidity_pool_asset_toPrimitive(t, "string"); return "symbol" == liquidity_pool_asset_typeof(i) ? i : i + ""; } +function liquidity_pool_asset_toPrimitive(t, r) { if ("object" != liquidity_pool_asset_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != liquidity_pool_asset_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + +/** + * LiquidityPoolAsset class represents a liquidity pool trustline change. + * + * @constructor + * @param {Asset} assetA – The first asset in the Pool, it must respect the rule assetA < assetB. See {@link Asset.compare} for more details on how assets are sorted. + * @param {Asset} assetB – The second asset in the Pool, it must respect the rule assetA < assetB. See {@link Asset.compare} for more details on how assets are sorted. + * @param {number} fee – The liquidity pool fee. For now the only fee supported is `30`. + */ +var LiquidityPoolAsset = /*#__PURE__*/function () { + function LiquidityPoolAsset(assetA, assetB, fee) { + liquidity_pool_asset_classCallCheck(this, LiquidityPoolAsset); + if (!assetA || !(assetA instanceof Asset)) { + throw new Error('assetA is invalid'); + } + if (!assetB || !(assetB instanceof Asset)) { + throw new Error('assetB is invalid'); + } + if (Asset.compare(assetA, assetB) !== -1) { + throw new Error('Assets are not in lexicographic order'); + } + if (!fee || fee !== LiquidityPoolFeeV18) { + throw new Error('fee is invalid'); + } + this.assetA = assetA; + this.assetB = assetB; + this.fee = fee; + } + + /** + * Returns a liquidity pool asset object from its XDR ChangeTrustAsset object + * representation. + * @param {xdr.ChangeTrustAsset} ctAssetXdr - The asset XDR object. + * @returns {LiquidityPoolAsset} + */ + return liquidity_pool_asset_createClass(LiquidityPoolAsset, [{ + key: "toXDRObject", + value: + /** + * Returns the `xdr.ChangeTrustAsset` object for this liquidity pool asset. + * + * Note: To convert from an {@link Asset `Asset`} to `xdr.ChangeTrustAsset` + * please refer to the + * {@link Asset.toChangeTrustXDRObject `Asset.toChangeTrustXDRObject`} method. + * + * @returns {xdr.ChangeTrustAsset} XDR ChangeTrustAsset object. + */ + function toXDRObject() { + var lpConstantProductParamsXdr = new src_xdr.LiquidityPoolConstantProductParameters({ + assetA: this.assetA.toXDRObject(), + assetB: this.assetB.toXDRObject(), + fee: this.fee + }); + var lpParamsXdr = new src_xdr.LiquidityPoolParameters('liquidityPoolConstantProduct', lpConstantProductParamsXdr); + return new src_xdr.ChangeTrustAsset('assetTypePoolShare', lpParamsXdr); + } + + /** + * @returns {LiquidityPoolParameters} Liquidity pool parameters. + */ + }, { + key: "getLiquidityPoolParameters", + value: function getLiquidityPoolParameters() { + return _objectSpread(_objectSpread({}, this), {}, { + assetA: this.assetA, + assetB: this.assetB, + fee: this.fee + }); + } + + /** + * @see [Assets concept](https://developers.stellar.org/docs/glossary/assets/) + * @returns {AssetType.liquidityPoolShares} asset type. Can only be `liquidity_pool_shares`. + */ + }, { + key: "getAssetType", + value: function getAssetType() { + return 'liquidity_pool_shares'; + } + + /** + * @param {LiquidityPoolAsset} other the LiquidityPoolAsset to compare + * @returns {boolean} `true` if this asset equals the given asset. + */ + }, { + key: "equals", + value: function equals(other) { + return this.assetA.equals(other.assetA) && this.assetB.equals(other.assetB) && this.fee === other.fee; + } + }, { + key: "toString", + value: function toString() { + var poolId = getLiquidityPoolId('constant_product', this.getLiquidityPoolParameters()).toString('hex'); + return "liquidity_pool:".concat(poolId); + } + }], [{ + key: "fromOperation", + value: function fromOperation(ctAssetXdr) { + var assetType = ctAssetXdr["switch"](); + if (assetType === src_xdr.AssetType.assetTypePoolShare()) { + var liquidityPoolParameters = ctAssetXdr.liquidityPool().constantProduct(); + return new this(Asset.fromOperation(liquidityPoolParameters.assetA()), Asset.fromOperation(liquidityPoolParameters.assetB()), liquidityPoolParameters.fee()); + } + throw new Error("Invalid asset type: ".concat(assetType.name)); + } + }]); +}(); +;// ./src/claimant.js +function claimant_typeof(o) { "@babel/helpers - typeof"; return claimant_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, claimant_typeof(o); } +function claimant_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function claimant_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, claimant_toPropertyKey(o.key), o); } } +function claimant_createClass(e, r, t) { return r && claimant_defineProperties(e.prototype, r), t && claimant_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function claimant_toPropertyKey(t) { var i = claimant_toPrimitive(t, "string"); return "symbol" == claimant_typeof(i) ? i : i + ""; } +function claimant_toPrimitive(t, r) { if ("object" != claimant_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != claimant_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + +/** + * Claimant class represents an xdr.Claimant + * + * The claim predicate is optional, it defaults to unconditional if none is specified. + * + * @constructor + * @param {string} destination - The destination account ID. + * @param {xdr.ClaimPredicate} [predicate] - The claim predicate. + */ +var Claimant = /*#__PURE__*/function () { + function Claimant(destination, predicate) { + claimant_classCallCheck(this, Claimant); + if (destination && !StrKey.isValidEd25519PublicKey(destination)) { + throw new Error('Destination is invalid'); + } + this._destination = destination; + if (!predicate) { + this._predicate = src_xdr.ClaimPredicate.claimPredicateUnconditional(); + } else if (predicate instanceof src_xdr.ClaimPredicate) { + this._predicate = predicate; + } else { + throw new Error('Predicate should be an xdr.ClaimPredicate'); + } + } + + /** + * Returns an unconditional claim predicate + * @Return {xdr.ClaimPredicate} + */ + return claimant_createClass(Claimant, [{ + key: "toXDRObject", + value: + /** + * Returns the xdr object for this claimant. + * @returns {xdr.Claimant} XDR Claimant object + */ + function toXDRObject() { + var claimant = new src_xdr.ClaimantV0({ + destination: Keypair.fromPublicKey(this._destination).xdrAccountId(), + predicate: this._predicate + }); + return src_xdr.Claimant.claimantTypeV0(claimant); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "destination", + get: function get() { + return this._destination; + }, + set: function set(value) { + throw new Error('Claimant is immutable'); + } + + /** + * @type {xdr.ClaimPredicate} + * @readonly + */ + }, { + key: "predicate", + get: function get() { + return this._predicate; + }, + set: function set(value) { + throw new Error('Claimant is immutable'); + } + }], [{ + key: "predicateUnconditional", + value: function predicateUnconditional() { + return src_xdr.ClaimPredicate.claimPredicateUnconditional(); + } + + /** + * Returns an `and` claim predicate + * @param {xdr.ClaimPredicate} left an xdr.ClaimPredicate + * @param {xdr.ClaimPredicate} right an xdr.ClaimPredicate + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateAnd", + value: function predicateAnd(left, right) { + if (!(left instanceof src_xdr.ClaimPredicate)) { + throw new Error('left Predicate should be an xdr.ClaimPredicate'); + } + if (!(right instanceof src_xdr.ClaimPredicate)) { + throw new Error('right Predicate should be an xdr.ClaimPredicate'); + } + return src_xdr.ClaimPredicate.claimPredicateAnd([left, right]); + } + + /** + * Returns an `or` claim predicate + * @param {xdr.ClaimPredicate} left an xdr.ClaimPredicate + * @param {xdr.ClaimPredicate} right an xdr.ClaimPredicate + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateOr", + value: function predicateOr(left, right) { + if (!(left instanceof src_xdr.ClaimPredicate)) { + throw new Error('left Predicate should be an xdr.ClaimPredicate'); + } + if (!(right instanceof src_xdr.ClaimPredicate)) { + throw new Error('right Predicate should be an xdr.ClaimPredicate'); + } + return src_xdr.ClaimPredicate.claimPredicateOr([left, right]); + } + + /** + * Returns a `not` claim predicate + * @param {xdr.ClaimPredicate} predicate an xdr.ClaimPredicate + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateNot", + value: function predicateNot(predicate) { + if (!(predicate instanceof src_xdr.ClaimPredicate)) { + throw new Error('right Predicate should be an xdr.ClaimPredicate'); + } + return src_xdr.ClaimPredicate.claimPredicateNot(predicate); + } + + /** + * Returns a `BeforeAbsoluteTime` claim predicate + * + * This predicate will be fulfilled if the closing time of the ledger that + * includes the CreateClaimableBalance operation is less than this (absolute) + * Unix timestamp (expressed in seconds). + * + * @param {string} absBefore Unix epoch (in seconds) as a string + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateBeforeAbsoluteTime", + value: function predicateBeforeAbsoluteTime(absBefore) { + return src_xdr.ClaimPredicate.claimPredicateBeforeAbsoluteTime(src_xdr.Int64.fromString(absBefore)); + } + + /** + * Returns a `BeforeRelativeTime` claim predicate + * + * This predicate will be fulfilled if the closing time of the ledger that + * includes the CreateClaimableBalance operation plus this relative time delta + * (in seconds) is less than the current time. + * + * @param {strings} seconds seconds since closeTime of the ledger in which the ClaimableBalanceEntry was created (as string) + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateBeforeRelativeTime", + value: function predicateBeforeRelativeTime(seconds) { + return src_xdr.ClaimPredicate.claimPredicateBeforeRelativeTime(src_xdr.Int64.fromString(seconds)); + } + + /** + * Returns a claimant object from its XDR object representation. + * @param {xdr.Claimant} claimantXdr - The claimant xdr object. + * @returns {Claimant} + */ + }, { + key: "fromXDR", + value: function fromXDR(claimantXdr) { + var value; + switch (claimantXdr["switch"]()) { + case src_xdr.ClaimantType.claimantTypeV0(): + value = claimantXdr.v0(); + return new this(StrKey.encodeEd25519PublicKey(value.destination().ed25519()), value.predicate()); + default: + throw new Error("Invalid claimant type: ".concat(claimantXdr["switch"]().name)); + } + } + }]); +}(); +;// ./src/liquidity_pool_id.js +function liquidity_pool_id_typeof(o) { "@babel/helpers - typeof"; return liquidity_pool_id_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, liquidity_pool_id_typeof(o); } +function liquidity_pool_id_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function liquidity_pool_id_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, liquidity_pool_id_toPropertyKey(o.key), o); } } +function liquidity_pool_id_createClass(e, r, t) { return r && liquidity_pool_id_defineProperties(e.prototype, r), t && liquidity_pool_id_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function liquidity_pool_id_toPropertyKey(t) { var i = liquidity_pool_id_toPrimitive(t, "string"); return "symbol" == liquidity_pool_id_typeof(i) ? i : i + ""; } +function liquidity_pool_id_toPrimitive(t, r) { if ("object" != liquidity_pool_id_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != liquidity_pool_id_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + +/** + * LiquidityPoolId class represents the asset referenced by a trustline to a + * liquidity pool. + * + * @constructor + * @param {string} liquidityPoolId - The ID of the liquidity pool in string 'hex'. + */ +var LiquidityPoolId = /*#__PURE__*/function () { + function LiquidityPoolId(liquidityPoolId) { + liquidity_pool_id_classCallCheck(this, LiquidityPoolId); + if (!liquidityPoolId) { + throw new Error('liquidityPoolId cannot be empty'); + } + if (!/^[a-f0-9]{64}$/.test(liquidityPoolId)) { + throw new Error('Liquidity pool ID is not a valid hash'); + } + this.liquidityPoolId = liquidityPoolId; + } + + /** + * Returns a liquidity pool ID object from its xdr.TrustLineAsset representation. + * @param {xdr.TrustLineAsset} tlAssetXdr - The asset XDR object. + * @returns {LiquidityPoolId} + */ + return liquidity_pool_id_createClass(LiquidityPoolId, [{ + key: "toXDRObject", + value: + /** + * Returns the `xdr.TrustLineAsset` object for this liquidity pool ID. + * + * Note: To convert from {@link Asset `Asset`} to `xdr.TrustLineAsset` please + * refer to the + * {@link Asset.toTrustLineXDRObject `Asset.toTrustLineXDRObject`} method. + * + * @returns {xdr.TrustLineAsset} XDR LiquidityPoolId object + */ + function toXDRObject() { + var xdrPoolId = src_xdr.PoolId.fromXDR(this.liquidityPoolId, 'hex'); + return new src_xdr.TrustLineAsset('assetTypePoolShare', xdrPoolId); + } + + /** + * @returns {string} Liquidity pool ID. + */ + }, { + key: "getLiquidityPoolId", + value: function getLiquidityPoolId() { + return String(this.liquidityPoolId); + } + + /** + * @see [Assets concept](https://developers.stellar.org/docs/glossary/assets/) + * @returns {AssetType.liquidityPoolShares} asset type. Can only be `liquidity_pool_shares`. + */ + }, { + key: "getAssetType", + value: function getAssetType() { + return 'liquidity_pool_shares'; + } + + /** + * @param {LiquidityPoolId} asset LiquidityPoolId to compare. + * @returns {boolean} `true` if this asset equals the given asset. + */ + }, { + key: "equals", + value: function equals(asset) { + return this.liquidityPoolId === asset.getLiquidityPoolId(); + } + }, { + key: "toString", + value: function toString() { + return "liquidity_pool:".concat(this.liquidityPoolId); + } + }], [{ + key: "fromOperation", + value: function fromOperation(tlAssetXdr) { + var assetType = tlAssetXdr["switch"](); + if (assetType === src_xdr.AssetType.assetTypePoolShare()) { + var liquidityPoolId = tlAssetXdr.liquidityPoolId().toString('hex'); + return new this(liquidityPoolId); + } + throw new Error("Invalid asset type: ".concat(assetType.name)); + } + }]); +}(); +;// ./src/operations/manage_sell_offer.js + + +/** + * Returns a XDR ManageSellOfferOp. A "manage sell offer" operation creates, updates, or + * deletes an offer. + * @function + * @alias Operation.manageSellOffer + * @param {object} opts Options object + * @param {Asset} opts.selling - What you're selling. + * @param {Asset} opts.buying - What you're buying. + * @param {string} opts.amount - The total amount you're selling. If 0, deletes the offer. + * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `selling` in terms of `buying`. + * @param {number} opts.price.n - If `opts.price` is an object: the price numerator + * @param {number} opts.price.d - If `opts.price` is an object: the price denominator + * @param {number|string} [opts.offerId ] - If `0`, will create a new offer (default). Otherwise, edits an exisiting offer. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found. + * @returns {xdr.ManageSellOfferOp} Manage Sell Offer operation + */ +function manageSellOffer(opts) { + var attributes = {}; + attributes.selling = opts.selling.toXDRObject(); + attributes.buying = opts.buying.toXDRObject(); + if (!this.isValidAmount(opts.amount, true)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + if (opts.price === undefined) { + throw new TypeError('price argument is required'); + } + attributes.price = this._toXDRPrice(opts.price); + if (opts.offerId !== undefined) { + opts.offerId = opts.offerId.toString(); + } else { + opts.offerId = '0'; + } + attributes.offerId = xdr.Hyper.fromString(opts.offerId); + var manageSellOfferOp = new src_xdr.ManageSellOfferOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.manageSellOffer(manageSellOfferOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/create_passive_sell_offer.js + + +/** + * Returns a XDR CreatePasiveSellOfferOp. A "create passive offer" operation creates an + * offer that won't consume a counter offer that exactly matches this offer. This is + * useful for offers just used as 1:1 exchanges for path payments. Use manage offer + * to manage this offer after using this operation to create it. + * @function + * @alias Operation.createPassiveSellOffer + * @param {object} opts Options object + * @param {Asset} opts.selling - What you're selling. + * @param {Asset} opts.buying - What you're buying. + * @param {string} opts.amount - The total amount you're selling. If 0, deletes the offer. + * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `selling` in terms of `buying`. + * @param {number} opts.price.n - If `opts.price` is an object: the price numerator + * @param {number} opts.price.d - If `opts.price` is an object: the price denominator + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found. + * @returns {xdr.CreatePassiveSellOfferOp} Create Passive Sell Offer operation + */ +function createPassiveSellOffer(opts) { + var attributes = {}; + attributes.selling = opts.selling.toXDRObject(); + attributes.buying = opts.buying.toXDRObject(); + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + if (opts.price === undefined) { + throw new TypeError('price argument is required'); + } + attributes.price = this._toXDRPrice(opts.price); + var createPassiveSellOfferOp = new src_xdr.CreatePassiveSellOfferOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.createPassiveSellOffer(createPassiveSellOfferOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/util/decode_encode_muxed_account.js +/* provided dependency */ var decode_encode_muxed_account_Buffer = __webpack_require__(3626)["A"]; + + + +/** + * Converts a Stellar address (in G... or M... form) to an `xdr.MuxedAccount` + * structure, using the ed25519 representation when possible. + * + * This supports full muxed accounts, where an `M...` address will resolve to + * both its underlying `G...` address and an integer ID. + * + * @param {string} address G... or M... address to encode into XDR + * @returns {xdr.MuxedAccount} a muxed account object for this address string + */ +function decodeAddressToMuxedAccount(address) { + if (StrKey.isValidMed25519PublicKey(address)) { + return _decodeAddressFullyToMuxedAccount(address); + } + return src_xdr.MuxedAccount.keyTypeEd25519(StrKey.decodeEd25519PublicKey(address)); +} + +/** + * Converts an xdr.MuxedAccount to its StrKey representation. + * + * This returns its "M..." string representation if there is a muxing ID within + * the object and returns the "G..." representation otherwise. + * + * @param {xdr.MuxedAccount} muxedAccount Raw account to stringify + * @returns {string} Stringified G... (corresponding to the underlying pubkey) + * or M... address (corresponding to both the key and the muxed ID) + * + * @see https://stellar.org/protocol/sep-23 + */ +function encodeMuxedAccountToAddress(muxedAccount) { + if (muxedAccount["switch"]().value === src_xdr.CryptoKeyType.keyTypeMuxedEd25519().value) { + return _encodeMuxedAccountFullyToAddress(muxedAccount); + } + return StrKey.encodeEd25519PublicKey(muxedAccount.ed25519()); +} + +/** + * Transform a Stellar address (G...) and an ID into its XDR representation. + * + * @param {string} address - a Stellar G... address + * @param {string} id - a Uint64 ID represented as a string + * + * @return {xdr.MuxedAccount} - XDR representation of the above muxed account + */ +function encodeMuxedAccount(address, id) { + if (!StrKey.isValidEd25519PublicKey(address)) { + throw new Error('address should be a Stellar account ID (G...)'); + } + if (typeof id !== 'string') { + throw new Error('id should be a string representing a number (uint64)'); + } + return src_xdr.MuxedAccount.keyTypeMuxedEd25519(new src_xdr.MuxedAccountMed25519({ + id: src_xdr.Uint64.fromString(id), + ed25519: StrKey.decodeEd25519PublicKey(address) + })); +} + +/** + * Extracts the underlying base (G...) address from an M-address. + * @param {string} address an account address (either M... or G...) + * @return {string} a Stellar public key address (G...) + */ +function extractBaseAddress(address) { + if (StrKey.isValidEd25519PublicKey(address)) { + return address; + } + if (!StrKey.isValidMed25519PublicKey(address)) { + throw new TypeError("expected muxed account (M...), got ".concat(address)); + } + var muxedAccount = decodeAddressToMuxedAccount(address); + return StrKey.encodeEd25519PublicKey(muxedAccount.med25519().ed25519()); +} + +// Decodes an "M..." account ID into its MuxedAccount object representation. +function _decodeAddressFullyToMuxedAccount(address) { + var rawBytes = StrKey.decodeMed25519PublicKey(address); + + // Decoding M... addresses cannot be done through a simple + // MuxedAccountMed25519.fromXDR() call, because the definition is: + // + // constructor(attributes: { id: Uint64; ed25519: Buffer }); + // + // Note the ID is the first attribute. However, the ID comes *last* in the + // stringified (base32-encoded) address itself (it's the last 8-byte suffix). + // The `fromXDR()` method interprets bytes in order, so we need to parse out + // the raw binary into its requisite parts, i.e. use the MuxedAccountMed25519 + // constructor directly. + // + // Refer to https://github.com/stellar/go/blob/master/xdr/muxed_account.go#L26 + // for the Golang implementation of the M... parsing. + return src_xdr.MuxedAccount.keyTypeMuxedEd25519(new src_xdr.MuxedAccountMed25519({ + id: src_xdr.Uint64.fromXDR(rawBytes.subarray(-8)), + ed25519: rawBytes.subarray(0, -8) + })); +} + +// Converts an xdr.MuxedAccount into its *true* "M..." string representation. +function _encodeMuxedAccountFullyToAddress(muxedAccount) { + if (muxedAccount["switch"]() === src_xdr.CryptoKeyType.keyTypeEd25519()) { + return encodeMuxedAccountToAddress(muxedAccount); + } + var muxed = muxedAccount.med25519(); + return StrKey.encodeMed25519PublicKey(decode_encode_muxed_account_Buffer.concat([muxed.ed25519(), muxed.id().toXDR('raw')])); +} +;// ./src/operations/account_merge.js + + + +/** + * Transfers native balance to destination account. + * + * @function + * @alias Operation.accountMerge + * + * @param {object} opts - options object + * @param {string} opts.destination - destination to merge the source account into + * @param {string} [opts.source] - operation source account (defaults to + * transaction source) + * + * @returns {xdr.Operation} an Account Merge operation (xdr.AccountMergeOp) + */ +function accountMerge(opts) { + var opAttributes = {}; + try { + opAttributes.body = src_xdr.OperationBody.accountMerge(decodeAddressToMuxedAccount(opts.destination)); + } catch (e) { + throw new Error('destination is invalid'); + } + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/allow_trust.js + + + + +/** + * @deprecated since v5.0 + * + * Returns an XDR AllowTrustOp. An "allow trust" operation authorizes another + * account to hold your account's credit for a given asset. + * + * @function + * @alias Operation.allowTrust + * + * @param {object} opts Options object + * @param {string} opts.trustor - The trusting account (the one being authorized) + * @param {string} opts.assetCode - The asset code being authorized. + * @param {(0|1|2)} opts.authorize - `1` to authorize, `2` to authorize to maintain liabilities, and `0` to deauthorize. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * + * @returns {xdr.AllowTrustOp} Allow Trust operation + */ +function allowTrust(opts) { + if (!StrKey.isValidEd25519PublicKey(opts.trustor)) { + throw new Error('trustor is invalid'); + } + var attributes = {}; + attributes.trustor = Keypair.fromPublicKey(opts.trustor).xdrAccountId(); + if (opts.assetCode.length <= 4) { + var code = opts.assetCode.padEnd(4, '\0'); + attributes.asset = src_xdr.AssetCode.assetTypeCreditAlphanum4(code); + } else if (opts.assetCode.length <= 12) { + var _code = opts.assetCode.padEnd(12, '\0'); + attributes.asset = src_xdr.AssetCode.assetTypeCreditAlphanum12(_code); + } else { + throw new Error('Asset code must be 12 characters at max.'); + } + if (typeof opts.authorize === 'boolean') { + if (opts.authorize) { + attributes.authorize = src_xdr.TrustLineFlags.authorizedFlag().value; + } else { + attributes.authorize = 0; + } + } else { + attributes.authorize = opts.authorize; + } + var allowTrustOp = new src_xdr.AllowTrustOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.allowTrust(allowTrustOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/bump_sequence.js + + + + +/** + * This operation bumps sequence number. + * @function + * @alias Operation.bumpSequence + * @param {object} opts Options object + * @param {string} opts.bumpTo - Sequence number to bump to. + * @param {string} [opts.source] - The optional source account. + * @returns {xdr.BumpSequenceOp} Operation + */ +function bumpSequence(opts) { + var attributes = {}; + if (typeof opts.bumpTo !== 'string') { + throw new Error('bumpTo must be a string'); + } + try { + // eslint-disable-next-line no-new + new util_bignumber(opts.bumpTo); + } catch (e) { + throw new Error('bumpTo must be a stringified number'); + } + attributes.bumpTo = xdr.Hyper.fromString(opts.bumpTo); + var bumpSequenceOp = new src_xdr.BumpSequenceOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.bumpSequence(bumpSequenceOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/change_trust.js + + + + + +var MAX_INT64 = '9223372036854775807'; + +/** + * Returns an XDR ChangeTrustOp. A "change trust" operation adds, removes, or updates a + * trust line for a given asset from the source account to another. + * @function + * @alias Operation.changeTrust + * @param {object} opts Options object + * @param {Asset | LiquidityPoolAsset} opts.asset - The asset for the trust line. + * @param {string} [opts.limit] - The limit for the asset, defaults to max int64. + * If the limit is set to "0" it deletes the trustline. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @returns {xdr.ChangeTrustOp} Change Trust operation + */ +function changeTrust(opts) { + var attributes = {}; + if (opts.asset instanceof Asset) { + attributes.line = opts.asset.toChangeTrustXDRObject(); + } else if (opts.asset instanceof LiquidityPoolAsset) { + attributes.line = opts.asset.toXDRObject(); + } else { + throw new TypeError('asset must be Asset or LiquidityPoolAsset'); + } + if (opts.limit !== undefined && !this.isValidAmount(opts.limit, true)) { + throw new TypeError(this.constructAmountRequirementsError('limit')); + } + if (opts.limit) { + attributes.limit = this._toXDRAmount(opts.limit); + } else { + attributes.limit = xdr.Hyper.fromString(new util_bignumber(MAX_INT64).toString()); + } + if (opts.source) { + attributes.source = opts.source.masterKeypair; + } + var changeTrustOP = new src_xdr.ChangeTrustOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.changeTrust(changeTrustOP); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/create_account.js + + + + +/** + * Create and fund a non existent account. + * @function + * @alias Operation.createAccount + * @param {object} opts Options object + * @param {string} opts.destination - Destination account ID to create an account for. + * @param {string} opts.startingBalance - Amount in XLM the account should be funded for. Must be greater + * than the [reserve balance amount](https://developers.stellar.org/docs/glossary/fees/). + * @param {string} [opts.source] - The source account for the payment. Defaults to the transaction's source account. + * @returns {xdr.CreateAccountOp} Create account operation + */ +function createAccount(opts) { + if (!StrKey.isValidEd25519PublicKey(opts.destination)) { + throw new Error('destination is invalid'); + } + if (!this.isValidAmount(opts.startingBalance, true)) { + throw new TypeError(this.constructAmountRequirementsError('startingBalance')); + } + var attributes = {}; + attributes.destination = Keypair.fromPublicKey(opts.destination).xdrAccountId(); + attributes.startingBalance = this._toXDRAmount(opts.startingBalance); + var createAccountOp = new src_xdr.CreateAccountOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.createAccount(createAccountOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/create_claimable_balance.js + + + +/** + * Create a new claimable balance operation. + * + * @function + * @alias Operation.createClaimableBalance + * + * @param {object} opts Options object + * @param {Asset} opts.asset - The asset for the claimable balance. + * @param {string} opts.amount - Amount. + * @param {Claimant[]} opts.claimants - An array of Claimants + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @returns {xdr.Operation} Create claimable balance operation + * + * @example + * const asset = new Asset( + * 'USD', + * 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + * ); + * const amount = '100.0000000'; + * const claimants = [ + * new Claimant( + * 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ', + * Claimant.predicateBeforeAbsoluteTime("4102444800000") + * ) + * ]; + * + * const op = Operation.createClaimableBalance({ + * asset, + * amount, + * claimants + * }); + * + */ +function createClaimableBalance(opts) { + if (!(opts.asset instanceof Asset)) { + throw new Error('must provide an asset for create claimable balance operation'); + } + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + if (!Array.isArray(opts.claimants) || opts.claimants.length === 0) { + throw new Error('must provide at least one claimant'); + } + var attributes = {}; + attributes.asset = opts.asset.toXDRObject(); + attributes.amount = this._toXDRAmount(opts.amount); + attributes.claimants = Object.values(opts.claimants).map(function (c) { + return c.toXDRObject(); + }); + var createClaimableBalanceOp = new src_xdr.CreateClaimableBalanceOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.createClaimableBalance(createClaimableBalanceOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/claim_claimable_balance.js + + +/** + * Create a new claim claimable balance operation. + * @function + * @alias Operation.claimClaimableBalance + * @param {object} opts Options object + * @param {string} opts.balanceId - The claimable balance id to be claimed. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} Claim claimable balance operation + * + * @example + * const op = Operation.claimClaimableBalance({ + * balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', + * }); + * + */ +function claimClaimableBalance() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + validateClaimableBalanceId(opts.balanceId); + var attributes = {}; + attributes.balanceId = src_xdr.ClaimableBalanceId.fromXDR(opts.balanceId, 'hex'); + var claimClaimableBalanceOp = new src_xdr.ClaimClaimableBalanceOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.claimClaimableBalance(claimClaimableBalanceOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +function validateClaimableBalanceId(balanceId) { + if (typeof balanceId !== 'string' || balanceId.length !== 8 + 64 /* 8b discriminant + 64b string */) { + throw new Error('must provide a valid claimable balance id'); + } +} +;// ./src/operations/clawback_claimable_balance.js + + + +/** + * Creates a clawback operation for a claimable balance. + * + * @function + * @alias Operation.clawbackClaimableBalance + * @param {object} opts - Options object + * @param {string} opts.balanceId - The claimable balance ID to be clawed back. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @return {xdr.ClawbackClaimableBalanceOp} + * + * @example + * const op = Operation.clawbackClaimableBalance({ + * balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', + * }); + * + * @link https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md#clawback-claimable-balance-operation + */ +function clawbackClaimableBalance() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + validateClaimableBalanceId(opts.balanceId); + var attributes = { + balanceId: src_xdr.ClaimableBalanceId.fromXDR(opts.balanceId, 'hex') + }; + var opAttributes = { + body: src_xdr.OperationBody.clawbackClaimableBalance(new src_xdr.ClawbackClaimableBalanceOp(attributes)) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/inflation.js + + +/** + * This operation generates the inflation. + * @function + * @alias Operation.inflation + * @param {object} [opts] Options object + * @param {string} [opts.source] - The optional source account. + * @returns {xdr.InflationOp} Inflation operation + */ +function inflation() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.inflation(); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/manage_data.js +/* provided dependency */ var manage_data_Buffer = __webpack_require__(3626)["A"]; + + +/** + * This operation adds data entry to the ledger. + * @function + * @alias Operation.manageData + * @param {object} opts Options object + * @param {string} opts.name - The name of the data entry. + * @param {string|Buffer} opts.value - The value of the data entry. + * @param {string} [opts.source] - The optional source account. + * @returns {xdr.ManageDataOp} Manage Data operation + */ +function manageData(opts) { + var attributes = {}; + if (!(typeof opts.name === 'string' && opts.name.length <= 64)) { + throw new Error('name must be a string, up to 64 characters'); + } + attributes.dataName = opts.name; + if (typeof opts.value !== 'string' && !manage_data_Buffer.isBuffer(opts.value) && opts.value !== null) { + throw new Error('value must be a string, Buffer or null'); + } + if (typeof opts.value === 'string') { + attributes.dataValue = manage_data_Buffer.from(opts.value); + } else { + attributes.dataValue = opts.value; + } + if (attributes.dataValue !== null && attributes.dataValue.length > 64) { + throw new Error('value cannot be longer that 64 bytes'); + } + var manageDataOp = new src_xdr.ManageDataOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.manageData(manageDataOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/manage_buy_offer.js + + +/** + * Returns a XDR ManageBuyOfferOp. A "manage buy offer" operation creates, updates, or + * deletes a buy offer. + * @function + * @alias Operation.manageBuyOffer + * @param {object} opts Options object + * @param {Asset} opts.selling - What you're selling. + * @param {Asset} opts.buying - What you're buying. + * @param {string} opts.buyAmount - The total amount you're buying. If 0, deletes the offer. + * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `buying` in terms of `selling`. + * @param {number} opts.price.n - If `opts.price` is an object: the price numerator + * @param {number} opts.price.d - If `opts.price` is an object: the price denominator + * @param {number|string} [opts.offerId ] - If `0`, will create a new offer (default). Otherwise, edits an exisiting offer. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found. + * @returns {xdr.ManageBuyOfferOp} Manage Buy Offer operation + */ +function manageBuyOffer(opts) { + var attributes = {}; + attributes.selling = opts.selling.toXDRObject(); + attributes.buying = opts.buying.toXDRObject(); + if (!this.isValidAmount(opts.buyAmount, true)) { + throw new TypeError(this.constructAmountRequirementsError('buyAmount')); + } + attributes.buyAmount = this._toXDRAmount(opts.buyAmount); + if (opts.price === undefined) { + throw new TypeError('price argument is required'); + } + attributes.price = this._toXDRPrice(opts.price); + if (opts.offerId !== undefined) { + opts.offerId = opts.offerId.toString(); + } else { + opts.offerId = '0'; + } + attributes.offerId = xdr.Hyper.fromString(opts.offerId); + var manageBuyOfferOp = new src_xdr.ManageBuyOfferOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.manageBuyOffer(manageBuyOfferOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/path_payment_strict_receive.js + + + +/** + * Creates a PathPaymentStrictReceive operation. + * + * A `PathPaymentStrictReceive` operation sends the specified amount to the + * destination account. It credits the destination with `destAmount` of + * `destAsset`, while debiting at most `sendMax` of `sendAsset` from the source. + * The transfer optionally occurs through a path. XLM payments create the + * destination account if it does not exist. + * + * @function + * @alias Operation.pathPaymentStrictReceive + * @see https://developers.stellar.org/docs/start/list-of-operations/#path-payment-strict-receive + * + * @param {object} opts - Options object + * @param {Asset} opts.sendAsset - asset to pay with + * @param {string} opts.sendMax - maximum amount of sendAsset to send + * @param {string} opts.destination - destination account to send to + * @param {Asset} opts.destAsset - asset the destination will receive + * @param {string} opts.destAmount - amount the destination receives + * @param {Asset[]} opts.path - array of Asset objects to use as the path + * + * @param {string} [opts.source] - The source account for the payment. + * Defaults to the transaction's source account. + * + * @returns {xdr.PathPaymentStrictReceiveOp} the resulting path payment op + */ +function pathPaymentStrictReceive(opts) { + switch (true) { + case !opts.sendAsset: + throw new Error('Must specify a send asset'); + case !this.isValidAmount(opts.sendMax): + throw new TypeError(this.constructAmountRequirementsError('sendMax')); + case !opts.destAsset: + throw new Error('Must provide a destAsset for a payment operation'); + case !this.isValidAmount(opts.destAmount): + throw new TypeError(this.constructAmountRequirementsError('destAmount')); + default: + break; + } + var attributes = {}; + attributes.sendAsset = opts.sendAsset.toXDRObject(); + attributes.sendMax = this._toXDRAmount(opts.sendMax); + try { + attributes.destination = decodeAddressToMuxedAccount(opts.destination); + } catch (e) { + throw new Error('destination is invalid'); + } + attributes.destAsset = opts.destAsset.toXDRObject(); + attributes.destAmount = this._toXDRAmount(opts.destAmount); + var path = opts.path ? opts.path : []; + attributes.path = path.map(function (x) { + return x.toXDRObject(); + }); + var payment = new src_xdr.PathPaymentStrictReceiveOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.pathPaymentStrictReceive(payment); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/path_payment_strict_send.js + + + +/** + * Creates a PathPaymentStrictSend operation. + * + * A `PathPaymentStrictSend` operation sends the specified amount to the + * destination account crediting at least `destMin` of `destAsset`, optionally + * through a path. XLM payments create the destination account if it does not + * exist. + * + * @function + * @alias Operation.pathPaymentStrictSend + * @see https://developers.stellar.org/docs/start/list-of-operations/#path-payment-strict-send + * + * @param {object} opts - Options object + * @param {Asset} opts.sendAsset - asset to pay with + * @param {string} opts.sendAmount - amount of sendAsset to send (excluding fees) + * @param {string} opts.destination - destination account to send to + * @param {Asset} opts.destAsset - asset the destination will receive + * @param {string} opts.destMin - minimum amount of destAsset to be receive + * @param {Asset[]} opts.path - array of Asset objects to use as the path + * + * @param {string} [opts.source] - The source account for the payment. + * Defaults to the transaction's source account. + * + * @returns {xdr.Operation} the resulting path payment operation + * (xdr.PathPaymentStrictSendOp) + */ +function pathPaymentStrictSend(opts) { + switch (true) { + case !opts.sendAsset: + throw new Error('Must specify a send asset'); + case !this.isValidAmount(opts.sendAmount): + throw new TypeError(this.constructAmountRequirementsError('sendAmount')); + case !opts.destAsset: + throw new Error('Must provide a destAsset for a payment operation'); + case !this.isValidAmount(opts.destMin): + throw new TypeError(this.constructAmountRequirementsError('destMin')); + default: + break; + } + var attributes = {}; + attributes.sendAsset = opts.sendAsset.toXDRObject(); + attributes.sendAmount = this._toXDRAmount(opts.sendAmount); + try { + attributes.destination = decodeAddressToMuxedAccount(opts.destination); + } catch (e) { + throw new Error('destination is invalid'); + } + attributes.destAsset = opts.destAsset.toXDRObject(); + attributes.destMin = this._toXDRAmount(opts.destMin); + var path = opts.path ? opts.path : []; + attributes.path = path.map(function (x) { + return x.toXDRObject(); + }); + var payment = new src_xdr.PathPaymentStrictSendOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.pathPaymentStrictSend(payment); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/payment.js + + + +/** + * Create a payment operation. + * + * @function + * @alias Operation.payment + * @see https://developers.stellar.org/docs/start/list-of-operations/#payment + * + * @param {object} opts - Options object + * @param {string} opts.destination - destination account ID + * @param {Asset} opts.asset - asset to send + * @param {string} opts.amount - amount to send + * + * @param {string} [opts.source] - The source account for the payment. + * Defaults to the transaction's source account. + * + * @returns {xdr.Operation} The resulting payment operation (xdr.PaymentOp) + */ +function payment(opts) { + if (!opts.asset) { + throw new Error('Must provide an asset for a payment operation'); + } + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + var attributes = {}; + try { + attributes.destination = decodeAddressToMuxedAccount(opts.destination); + } catch (e) { + throw new Error('destination is invalid'); + } + attributes.asset = opts.asset.toXDRObject(); + attributes.amount = this._toXDRAmount(opts.amount); + var paymentOp = new src_xdr.PaymentOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.payment(paymentOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/set_options.js +/* provided dependency */ var set_options_Buffer = __webpack_require__(3626)["A"]; +/* eslint-disable no-param-reassign */ + + + + +function weightCheckFunction(value, name) { + if (value >= 0 && value <= 255) { + return true; + } + throw new Error("".concat(name, " value must be between 0 and 255")); +} + +/** + * Returns an XDR SetOptionsOp. A "set options" operations set or clear account flags, + * set the account's inflation destination, and/or add new signers to the account. + * The flags used in `opts.clearFlags` and `opts.setFlags` can be the following: + * - `{@link AuthRequiredFlag}` + * - `{@link AuthRevocableFlag}` + * - `{@link AuthImmutableFlag}` + * - `{@link AuthClawbackEnabledFlag}` + * + * It's possible to set/clear multiple flags at once using logical or. + * + * @function + * @alias Operation.setOptions + * + * @param {object} opts Options object + * @param {string} [opts.inflationDest] - Set this account ID as the account's inflation destination. + * @param {(number|string)} [opts.clearFlags] - Bitmap integer for which account flags to clear. + * @param {(number|string)} [opts.setFlags] - Bitmap integer for which account flags to set. + * @param {number|string} [opts.masterWeight] - The master key weight. + * @param {number|string} [opts.lowThreshold] - The sum weight for the low threshold. + * @param {number|string} [opts.medThreshold] - The sum weight for the medium threshold. + * @param {number|string} [opts.highThreshold] - The sum weight for the high threshold. + * @param {object} [opts.signer] - Add or remove a signer from the account. The signer is + * deleted if the weight is 0. Only one of `ed25519PublicKey`, `sha256Hash`, `preAuthTx` should be defined. + * @param {string} [opts.signer.ed25519PublicKey] - The ed25519 public key of the signer. + * @param {Buffer|string} [opts.signer.sha256Hash] - sha256 hash (Buffer or hex string) of preimage that will unlock funds. Preimage should be used as signature of future transaction. + * @param {Buffer|string} [opts.signer.preAuthTx] - Hash (Buffer or hex string) of transaction that will unlock funds. + * @param {string} [opts.signer.ed25519SignedPayload] - Signed payload signer (ed25519 public key + raw payload) for atomic transaction signature disclosure. + * @param {number|string} [opts.signer.weight] - The weight of the new signer (0 to delete or 1-255) + * @param {string} [opts.homeDomain] - sets the home domain used for reverse federation lookup. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * + * @returns {xdr.SetOptionsOp} XDR operation + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +function setOptions(opts) { + var attributes = {}; + if (opts.inflationDest) { + if (!StrKey.isValidEd25519PublicKey(opts.inflationDest)) { + throw new Error('inflationDest is invalid'); + } + attributes.inflationDest = Keypair.fromPublicKey(opts.inflationDest).xdrAccountId(); + } + attributes.clearFlags = this._checkUnsignedIntValue('clearFlags', opts.clearFlags); + attributes.setFlags = this._checkUnsignedIntValue('setFlags', opts.setFlags); + attributes.masterWeight = this._checkUnsignedIntValue('masterWeight', opts.masterWeight, weightCheckFunction); + attributes.lowThreshold = this._checkUnsignedIntValue('lowThreshold', opts.lowThreshold, weightCheckFunction); + attributes.medThreshold = this._checkUnsignedIntValue('medThreshold', opts.medThreshold, weightCheckFunction); + attributes.highThreshold = this._checkUnsignedIntValue('highThreshold', opts.highThreshold, weightCheckFunction); + if (opts.homeDomain !== undefined && typeof opts.homeDomain !== 'string') { + throw new TypeError('homeDomain argument must be of type String'); + } + attributes.homeDomain = opts.homeDomain; + if (opts.signer) { + var weight = this._checkUnsignedIntValue('signer.weight', opts.signer.weight, weightCheckFunction); + var key; + var setValues = 0; + if (opts.signer.ed25519PublicKey) { + if (!StrKey.isValidEd25519PublicKey(opts.signer.ed25519PublicKey)) { + throw new Error('signer.ed25519PublicKey is invalid.'); + } + var rawKey = StrKey.decodeEd25519PublicKey(opts.signer.ed25519PublicKey); + + // eslint-disable-next-line new-cap + key = new src_xdr.SignerKey.signerKeyTypeEd25519(rawKey); + setValues += 1; + } + if (opts.signer.preAuthTx) { + if (typeof opts.signer.preAuthTx === 'string') { + opts.signer.preAuthTx = set_options_Buffer.from(opts.signer.preAuthTx, 'hex'); + } + if (!(set_options_Buffer.isBuffer(opts.signer.preAuthTx) && opts.signer.preAuthTx.length === 32)) { + throw new Error('signer.preAuthTx must be 32 bytes Buffer.'); + } + + // eslint-disable-next-line new-cap + key = new src_xdr.SignerKey.signerKeyTypePreAuthTx(opts.signer.preAuthTx); + setValues += 1; + } + if (opts.signer.sha256Hash) { + if (typeof opts.signer.sha256Hash === 'string') { + opts.signer.sha256Hash = set_options_Buffer.from(opts.signer.sha256Hash, 'hex'); + } + if (!(set_options_Buffer.isBuffer(opts.signer.sha256Hash) && opts.signer.sha256Hash.length === 32)) { + throw new Error('signer.sha256Hash must be 32 bytes Buffer.'); + } + + // eslint-disable-next-line new-cap + key = new src_xdr.SignerKey.signerKeyTypeHashX(opts.signer.sha256Hash); + setValues += 1; + } + if (opts.signer.ed25519SignedPayload) { + if (!StrKey.isValidSignedPayload(opts.signer.ed25519SignedPayload)) { + throw new Error('signer.ed25519SignedPayload is invalid.'); + } + var _rawKey = StrKey.decodeSignedPayload(opts.signer.ed25519SignedPayload); + var signedPayloadXdr = src_xdr.SignerKeyEd25519SignedPayload.fromXDR(_rawKey); + + // eslint-disable-next-line new-cap + key = src_xdr.SignerKey.signerKeyTypeEd25519SignedPayload(signedPayloadXdr); + setValues += 1; + } + if (setValues !== 1) { + throw new Error('Signer object must contain exactly one of signer.ed25519PublicKey, signer.sha256Hash, signer.preAuthTx.'); + } + attributes.signer = new src_xdr.Signer({ + key: key, + weight: weight + }); + } + var setOptionsOp = new src_xdr.SetOptionsOp(attributes); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.setOptions(setOptionsOp); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/begin_sponsoring_future_reserves.js + + + + +/** + * Create a "begin sponsoring future reserves" operation. + * @function + * @alias Operation.beginSponsoringFutureReserves + * @param {object} opts Options object + * @param {string} opts.sponsoredId - The sponsored account id. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.beginSponsoringFutureReserves({ + * sponsoredId: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + * }); + * + */ +function beginSponsoringFutureReserves() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!StrKey.isValidEd25519PublicKey(opts.sponsoredId)) { + throw new Error('sponsoredId is invalid'); + } + var op = new src_xdr.BeginSponsoringFutureReservesOp({ + sponsoredId: Keypair.fromPublicKey(opts.sponsoredId).xdrAccountId() + }); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.beginSponsoringFutureReserves(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/end_sponsoring_future_reserves.js + + +/** + * Create an "end sponsoring future reserves" operation. + * @function + * @alias Operation.endSponsoringFutureReserves + * @param {object} opts Options object + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.endSponsoringFutureReserves(); + * + */ +function endSponsoringFutureReserves() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.endSponsoringFutureReserves(); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/revoke_sponsorship.js +/* provided dependency */ var revoke_sponsorship_Buffer = __webpack_require__(3626)["A"]; + + + + + + +/** + * Create a "revoke sponsorship" operation for an account. + * + * @function + * @alias Operation.revokeAccountSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The sponsored account ID. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeAccountSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * }); + * + */ +function revokeAccountSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + var ledgerKey = src_xdr.LedgerKey.account(new src_xdr.LedgerKeyAccount({ + accountId: Keypair.fromPublicKey(opts.account).xdrAccountId() + })); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a trustline. + * + * @function + * @alias Operation.revokeTrustlineSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The account ID which owns the trustline. + * @param {Asset | LiquidityPoolId} opts.asset - The trustline asset. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeTrustlineSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * asset: new StellarBase.LiquidityPoolId( + * 'USDUSD', + * 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + * ) + * }); + * + */ +function revokeTrustlineSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + var asset; + if (opts.asset instanceof Asset) { + asset = opts.asset.toTrustLineXDRObject(); + } else if (opts.asset instanceof LiquidityPoolId) { + asset = opts.asset.toXDRObject(); + } else { + throw new TypeError('asset must be an Asset or LiquidityPoolId'); + } + var ledgerKey = src_xdr.LedgerKey.trustline(new src_xdr.LedgerKeyTrustLine({ + accountId: Keypair.fromPublicKey(opts.account).xdrAccountId(), + asset: asset + })); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for an offer. + * + * @function + * @alias Operation.revokeOfferSponsorship + * @param {object} opts Options object + * @param {string} opts.seller - The account ID which created the offer. + * @param {string} opts.offerId - The offer ID. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeOfferSponsorship({ + * seller: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * offerId: '1234' + * }); + * + */ +function revokeOfferSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!StrKey.isValidEd25519PublicKey(opts.seller)) { + throw new Error('seller is invalid'); + } + if (typeof opts.offerId !== 'string') { + throw new Error('offerId is invalid'); + } + var ledgerKey = src_xdr.LedgerKey.offer(new src_xdr.LedgerKeyOffer({ + sellerId: Keypair.fromPublicKey(opts.seller).xdrAccountId(), + offerId: src_xdr.Int64.fromString(opts.offerId) + })); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a data entry. + * + * @function + * @alias Operation.revokeDataSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The account ID which owns the data entry. + * @param {string} opts.name - The name of the data entry + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeDataSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * name: 'foo' + * }); + * + */ +function revokeDataSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + if (typeof opts.name !== 'string' || opts.name.length > 64) { + throw new Error('name must be a string, up to 64 characters'); + } + var ledgerKey = src_xdr.LedgerKey.data(new src_xdr.LedgerKeyData({ + accountId: Keypair.fromPublicKey(opts.account).xdrAccountId(), + dataName: opts.name + })); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a claimable balance. + * + * @function + * @alias Operation.revokeClaimableBalanceSponsorship + * @param {object} opts Options object + * @param {string} opts.balanceId - The sponsored claimable balance ID. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeClaimableBalanceSponsorship({ + * balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', + * }); + * + */ +function revokeClaimableBalanceSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (typeof opts.balanceId !== 'string') { + throw new Error('balanceId is invalid'); + } + var ledgerKey = src_xdr.LedgerKey.claimableBalance(new src_xdr.LedgerKeyClaimableBalance({ + balanceId: src_xdr.ClaimableBalanceId.fromXDR(opts.balanceId, 'hex') + })); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Creates a "revoke sponsorship" operation for a liquidity pool. + * + * @function + * @alias Operation.revokeLiquidityPoolSponsorship + * @param {object} opts – Options object. + * @param {string} opts.liquidityPoolId - The sponsored liquidity pool ID in 'hex' string. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr Operation. + * + * @example + * const op = Operation.revokeLiquidityPoolSponsorship({ + * liquidityPoolId: 'dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380fac7', + * }); + * + */ +function revokeLiquidityPoolSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (typeof opts.liquidityPoolId !== 'string') { + throw new Error('liquidityPoolId is invalid'); + } + var ledgerKey = src_xdr.LedgerKey.liquidityPool(new src_xdr.LedgerKeyLiquidityPool({ + liquidityPoolId: src_xdr.PoolId.fromXDR(opts.liquidityPoolId, 'hex') + })); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = { + body: src_xdr.OperationBody.revokeSponsorship(op) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a signer. + * + * @function + * @alias Operation.revokeSignerSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The account ID where the signer sponsorship is being removed from. + * @param {object} opts.signer - The signer whose sponsorship is being removed. + * @param {string} [opts.signer.ed25519PublicKey] - The ed25519 public key of the signer. + * @param {Buffer|string} [opts.signer.sha256Hash] - sha256 hash (Buffer or hex string). + * @param {Buffer|string} [opts.signer.preAuthTx] - Hash (Buffer or hex string) of transaction. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeSignerSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * signer: { + * ed25519PublicKey: 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ' + * } + * }) + * + */ +function revokeSignerSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + var key; + if (opts.signer.ed25519PublicKey) { + if (!StrKey.isValidEd25519PublicKey(opts.signer.ed25519PublicKey)) { + throw new Error('signer.ed25519PublicKey is invalid.'); + } + var rawKey = StrKey.decodeEd25519PublicKey(opts.signer.ed25519PublicKey); + key = new src_xdr.SignerKey.signerKeyTypeEd25519(rawKey); + } else if (opts.signer.preAuthTx) { + var buffer; + if (typeof opts.signer.preAuthTx === 'string') { + buffer = revoke_sponsorship_Buffer.from(opts.signer.preAuthTx, 'hex'); + } else { + buffer = opts.signer.preAuthTx; + } + if (!(revoke_sponsorship_Buffer.isBuffer(buffer) && buffer.length === 32)) { + throw new Error('signer.preAuthTx must be 32 bytes Buffer.'); + } + key = new src_xdr.SignerKey.signerKeyTypePreAuthTx(buffer); + } else if (opts.signer.sha256Hash) { + var _buffer; + if (typeof opts.signer.sha256Hash === 'string') { + _buffer = revoke_sponsorship_Buffer.from(opts.signer.sha256Hash, 'hex'); + } else { + _buffer = opts.signer.sha256Hash; + } + if (!(revoke_sponsorship_Buffer.isBuffer(_buffer) && _buffer.length === 32)) { + throw new Error('signer.sha256Hash must be 32 bytes Buffer.'); + } + key = new src_xdr.SignerKey.signerKeyTypeHashX(_buffer); + } else { + throw new Error('signer is invalid'); + } + var signer = new src_xdr.RevokeSponsorshipOpSigner({ + accountId: Keypair.fromPublicKey(opts.account).xdrAccountId(), + signerKey: key + }); + var op = src_xdr.RevokeSponsorshipOp.revokeSponsorshipSigner(signer); + var opAttributes = {}; + opAttributes.body = src_xdr.OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/clawback.js + + + +/** + * Creates a clawback operation. + * + * @function + * @alias Operation.clawback + * + * @param {object} opts - Options object + * @param {Asset} opts.asset - The asset being clawed back. + * @param {string} opts.amount - The amount of the asset to claw back. + * @param {string} opts.from - The public key of the (optionally-muxed) + * account to claw back from. + * + * @param {string} [opts.source] - The source account for the operation. + * Defaults to the transaction's source account. + * + * @return {xdr.ClawbackOp} + * + * @see https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md#clawback-operation + */ +function clawback(opts) { + var attributes = {}; + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + attributes.asset = opts.asset.toXDRObject(); + try { + attributes.from = decodeAddressToMuxedAccount(opts.from); + } catch (e) { + throw new Error('from address is invalid'); + } + var opAttributes = { + body: src_xdr.OperationBody.clawback(new src_xdr.ClawbackOp(attributes)) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/set_trustline_flags.js +function set_trustline_flags_typeof(o) { "@babel/helpers - typeof"; return set_trustline_flags_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, set_trustline_flags_typeof(o); } + + + +/** + * Creates a trustline flag configuring operation. + * + * For the flags, set them to true to enable them and false to disable them. Any + * unmodified operations will be marked `undefined` in the result. + * + * Note that you can only **clear** the clawbackEnabled flag set; it must be set + * account-wide via operations.SetOptions (setting + * xdr.AccountFlags.clawbackEnabled). + * + * @function + * @alias Operation.setTrustLineFlags + * + * @param {object} opts - Options object + * @param {string} opts.trustor - the account whose trustline this is + * @param {Asset} opts.asset - the asset on the trustline + * @param {object} opts.flags - the set of flags to modify + * + * @param {bool} [opts.flags.authorized] - authorize account to perform + * transactions with its credit + * @param {bool} [opts.flags.authorizedToMaintainLiabilities] - authorize + * account to maintain and reduce liabilities for its credit + * @param {bool} [opts.flags.clawbackEnabled] - stop claimable balances on + * this trustlines from having clawbacks enabled (this flag can only be set + * to false!) + * @param {string} [opts.source] - The source account for the operation. + * Defaults to the transaction's source account. + * + * @note You must include at least one flag. + * + * @return {xdr.SetTrustLineFlagsOp} + * + * @link xdr.AccountFlags + * @link xdr.TrustLineFlags + * @see https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md#set-trustline-flags-operation + * @see https://developers.stellar.org/docs/start/list-of-operations/#set-options + */ +function setTrustLineFlags() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var attributes = {}; + if (set_trustline_flags_typeof(opts.flags) !== 'object' || Object.keys(opts.flags).length === 0) { + throw new Error('opts.flags must be a map of boolean flags to modify'); + } + var mapping = { + authorized: src_xdr.TrustLineFlags.authorizedFlag(), + authorizedToMaintainLiabilities: src_xdr.TrustLineFlags.authorizedToMaintainLiabilitiesFlag(), + clawbackEnabled: src_xdr.TrustLineFlags.trustlineClawbackEnabledFlag() + }; + + /* eslint no-bitwise: "off" */ + var clearFlag = 0; + var setFlag = 0; + Object.keys(opts.flags).forEach(function (flagName) { + if (!Object.prototype.hasOwnProperty.call(mapping, flagName)) { + throw new Error("unsupported flag name specified: ".concat(flagName)); + } + var flagValue = opts.flags[flagName]; + var bit = mapping[flagName].value; + if (flagValue === true) { + setFlag |= bit; + } else if (flagValue === false) { + clearFlag |= bit; + } + }); + attributes.trustor = Keypair.fromPublicKey(opts.trustor).xdrAccountId(); + attributes.asset = opts.asset.toXDRObject(); + attributes.clearFlags = clearFlag; + attributes.setFlags = setFlag; + var opAttributes = { + body: src_xdr.OperationBody.setTrustLineFlags(new src_xdr.SetTrustLineFlagsOp(attributes)) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/liquidity_pool_deposit.js + + +/** + * Creates a liquidity pool deposit operation. + * + * @function + * @alias Operation.liquidityPoolDeposit + * @see https://developers.stellar.org/docs/start/list-of-operations/#liquidity-pool-deposit + * + * @param {object} opts - Options object + * @param {string} opts.liquidityPoolId - The liquidity pool ID. + * @param {string} opts.maxAmountA - Maximum amount of first asset to deposit. + * @param {string} opts.maxAmountB - Maximum amount of second asset to deposit. + * @param {number|string|BigNumber|Object} opts.minPrice - Minimum depositA/depositB price. + * @param {number} opts.minPrice.n - If `opts.minPrice` is an object: the price numerator + * @param {number} opts.minPrice.d - If `opts.minPrice` is an object: the price denominator + * @param {number|string|BigNumber|Object} opts.maxPrice - Maximum depositA/depositB price. + * @param {number} opts.maxPrice.n - If `opts.maxPrice` is an object: the price numerator + * @param {number} opts.maxPrice.d - If `opts.maxPrice` is an object: the price denominator + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @returns {xdr.Operation} The resulting operation (xdr.LiquidityPoolDepositOp). + */ +function liquidityPoolDeposit() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var liquidityPoolId = opts.liquidityPoolId, + maxAmountA = opts.maxAmountA, + maxAmountB = opts.maxAmountB, + minPrice = opts.minPrice, + maxPrice = opts.maxPrice; + var attributes = {}; + if (!liquidityPoolId) { + throw new TypeError('liquidityPoolId argument is required'); + } + attributes.liquidityPoolId = src_xdr.PoolId.fromXDR(liquidityPoolId, 'hex'); + if (!this.isValidAmount(maxAmountA, true)) { + throw new TypeError(this.constructAmountRequirementsError('maxAmountA')); + } + attributes.maxAmountA = this._toXDRAmount(maxAmountA); + if (!this.isValidAmount(maxAmountB, true)) { + throw new TypeError(this.constructAmountRequirementsError('maxAmountB')); + } + attributes.maxAmountB = this._toXDRAmount(maxAmountB); + if (minPrice === undefined) { + throw new TypeError('minPrice argument is required'); + } + attributes.minPrice = this._toXDRPrice(minPrice); + if (maxPrice === undefined) { + throw new TypeError('maxPrice argument is required'); + } + attributes.maxPrice = this._toXDRPrice(maxPrice); + var liquidityPoolDepositOp = new src_xdr.LiquidityPoolDepositOp(attributes); + var opAttributes = { + body: src_xdr.OperationBody.liquidityPoolDeposit(liquidityPoolDepositOp) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/liquidity_pool_withdraw.js + + +/** + * Creates a liquidity pool withdraw operation. + * + * @function + * @alias Operation.liquidityPoolWithdraw + * @see https://developers.stellar.org/docs/start/list-of-operations/#liquidity-pool-withdraw + * + * @param {object} opts - Options object + * @param {string} opts.liquidityPoolId - The liquidity pool ID. + * @param {string} opts.amount - Amount of pool shares to withdraw. + * @param {string} opts.minAmountA - Minimum amount of first asset to withdraw. + * @param {string} opts.minAmountB - Minimum amount of second asset to withdraw. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @returns {xdr.Operation} The resulting operation (xdr.LiquidityPoolWithdrawOp). + */ +function liquidityPoolWithdraw() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var attributes = {}; + if (!opts.liquidityPoolId) { + throw new TypeError('liquidityPoolId argument is required'); + } + attributes.liquidityPoolId = src_xdr.PoolId.fromXDR(opts.liquidityPoolId, 'hex'); + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + if (!this.isValidAmount(opts.minAmountA, true)) { + throw new TypeError(this.constructAmountRequirementsError('minAmountA')); + } + attributes.minAmountA = this._toXDRAmount(opts.minAmountA); + if (!this.isValidAmount(opts.minAmountB, true)) { + throw new TypeError(this.constructAmountRequirementsError('minAmountB')); + } + attributes.minAmountB = this._toXDRAmount(opts.minAmountB); + var liquidityPoolWithdrawOp = new src_xdr.LiquidityPoolWithdrawOp(attributes); + var opAttributes = { + body: src_xdr.OperationBody.liquidityPoolWithdraw(liquidityPoolWithdrawOp) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/address.js +function address_typeof(o) { "@babel/helpers - typeof"; return address_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, address_typeof(o); } +function address_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function address_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, address_toPropertyKey(o.key), o); } } +function address_createClass(e, r, t) { return r && address_defineProperties(e.prototype, r), t && address_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function address_toPropertyKey(t) { var i = address_toPrimitive(t, "string"); return "symbol" == address_typeof(i) ? i : i + ""; } +function address_toPrimitive(t, r) { if ("object" != address_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != address_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + +/** + * Create a new Address object. + * + * `Address` represents a single address in the Stellar network. An address can + * represent an account or a contract. + * + * @constructor + * + * @param {string} address - ID of the account (ex. + * `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`). If you + * provide a muxed account address, this will throw; use {@link + * MuxedAccount} instead. + */ +var Address = /*#__PURE__*/function () { + function Address(address) { + address_classCallCheck(this, Address); + if (StrKey.isValidEd25519PublicKey(address)) { + this._type = 'account'; + this._key = StrKey.decodeEd25519PublicKey(address); + } else if (StrKey.isValidContract(address)) { + this._type = 'contract'; + this._key = StrKey.decodeContract(address); + } else { + throw new Error("Unsupported address type: ".concat(address)); + } + } + + /** + * Parses a string and returns an Address object. + * + * @param {string} address - The address to parse. ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA` + * @returns {Address} + */ + return address_createClass(Address, [{ + key: "toString", + value: + /** + * Serialize an address to string. + * + * @returns {string} + */ + function toString() { + switch (this._type) { + case 'account': + return StrKey.encodeEd25519PublicKey(this._key); + case 'contract': + return StrKey.encodeContract(this._key); + default: + throw new Error('Unsupported address type'); + } + } + + /** + * Convert this Address to an xdr.ScVal type. + * + * @returns {xdr.ScVal} + */ + }, { + key: "toScVal", + value: function toScVal() { + return src_xdr.ScVal.scvAddress(this.toScAddress()); + } + + /** + * Convert this Address to an xdr.ScAddress type. + * + * @returns {xdr.ScAddress} + */ + }, { + key: "toScAddress", + value: function toScAddress() { + switch (this._type) { + case 'account': + return src_xdr.ScAddress.scAddressTypeAccount(src_xdr.PublicKey.publicKeyTypeEd25519(this._key)); + case 'contract': + return src_xdr.ScAddress.scAddressTypeContract(this._key); + default: + throw new Error('Unsupported address type'); + } + } + + /** + * Return the raw public key bytes for this address. + * + * @returns {Buffer} + */ + }, { + key: "toBuffer", + value: function toBuffer() { + return this._key; + } + }], [{ + key: "fromString", + value: function fromString(address) { + return new Address(address); + } + + /** + * Creates a new account Address object from a buffer of raw bytes. + * + * @param {Buffer} buffer - The bytes of an address to parse. + * @returns {Address} + */ + }, { + key: "account", + value: function account(buffer) { + return new Address(StrKey.encodeEd25519PublicKey(buffer)); + } + + /** + * Creates a new contract Address object from a buffer of raw bytes. + * + * @param {Buffer} buffer - The bytes of an address to parse. + * @returns {Address} + */ + }, { + key: "contract", + value: function contract(buffer) { + return new Address(StrKey.encodeContract(buffer)); + } + + /** + * Convert this from an xdr.ScVal type + * + * @param {xdr.ScVal} scVal - The xdr.ScVal type to parse + * @returns {Address} + */ + }, { + key: "fromScVal", + value: function fromScVal(scVal) { + return Address.fromScAddress(scVal.address()); + } + + /** + * Convert this from an xdr.ScAddress type + * + * @param {xdr.ScAddress} scAddress - The xdr.ScAddress type to parse + * @returns {Address} + */ + }, { + key: "fromScAddress", + value: function fromScAddress(scAddress) { + switch (scAddress["switch"]().value) { + case src_xdr.ScAddressType.scAddressTypeAccount().value: + return Address.account(scAddress.accountId().ed25519()); + case src_xdr.ScAddressType.scAddressTypeContract().value: + return Address.contract(scAddress.contractId()); + default: + throw new Error('Unsupported address type'); + } + } + }]); +}(); +;// ./src/operations/invoke_host_function.js +/* provided dependency */ var invoke_host_function_Buffer = __webpack_require__(3626)["A"]; +function invoke_host_function_slicedToArray(r, e) { return invoke_host_function_arrayWithHoles(r) || invoke_host_function_iterableToArrayLimit(r, e) || invoke_host_function_unsupportedIterableToArray(r, e) || invoke_host_function_nonIterableRest(); } +function invoke_host_function_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function invoke_host_function_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return invoke_host_function_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? invoke_host_function_arrayLikeToArray(r, a) : void 0; } } +function invoke_host_function_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function invoke_host_function_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function invoke_host_function_arrayWithHoles(r) { if (Array.isArray(r)) return r; } + + + + + +/** + * Invokes a single smart contract host function. + * + * @function + * @alias Operation.invokeHostFunction + * + * @param {object} opts - options object + * @param {xdr.HostFunction} opts.func - host function to execute (with its + * wrapped parameters) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - list outlining the + * tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#function + * @see Operation.invokeContractFunction + * @see Operation.createCustomContract + * @see Operation.createStellarAssetContract + * @see Operation.uploadContractWasm + * @see Contract.call + */ +function invokeHostFunction(opts) { + if (!opts.func) { + throw new TypeError("host function invocation ('func') required (got ".concat(JSON.stringify(opts), ")")); + } + var invokeHostFunctionOp = new src_xdr.InvokeHostFunctionOp({ + hostFunction: opts.func, + auth: opts.auth || [] + }); + var opAttributes = { + body: src_xdr.OperationBody.invokeHostFunction(invokeHostFunctionOp) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} + +/** + * Returns an operation that invokes a contract function. + * + * @function + * @alias Operation.invokeContractFunction + * + * @param {any} opts - the set of parameters + * @param {string} opts.contract - a strkey-fied contract address (`C...`) + * @param {string} opts.function - the name of the contract fn to invoke + * @param {xdr.ScVal[]} opts.args - parameters to pass to the function + * invocation (try {@link nativeToScVal} or {@link ScInt} to make building + * these easier) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see Operation.invokeHostFunction + * @see Contract.call + * @see Address + */ +function invokeContractFunction(opts) { + var c = new Address(opts.contract); + if (c._type !== 'contract') { + throw new TypeError("expected contract strkey instance, got ".concat(c)); + } + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: src_xdr.HostFunction.hostFunctionTypeInvokeContract(new src_xdr.InvokeContractArgs({ + contractAddress: c.toScAddress(), + functionName: opts["function"], + args: opts.args + })) + }); +} + +/** + * Returns an operation that creates a custom WASM contract and atomically + * invokes its constructor. + * + * @function + * @alias Operation.createCustomContract + * + * @param {any} opts - the set of parameters + * @param {Address} opts.address - the contract uploader address + * @param {Uint8Array|Buffer} opts.wasmHash - the SHA-256 hash of the contract + * WASM you're uploading (see {@link hash} and + * {@link Operation.uploadContractWasm}) + * @param {xdr.ScVal[]} [opts.constructorArgs] - the optional parameters to pass + * to the constructor of this contract (see {@link nativeToScVal} for ways to + * easily create these parameters from native JS values) + * @param {Uint8Array|Buffer} [opts.salt] - an optional, 32-byte salt to + * distinguish deployment instances of the same wasm from the same user (if + * omitted, one will be generated for you) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see + * https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#function + */ +function createCustomContract(opts) { + var _opts$constructorArgs; + var salt = invoke_host_function_Buffer.from(opts.salt || getSalty()); + if (!opts.wasmHash || opts.wasmHash.length !== 32) { + throw new TypeError("expected hash(contract WASM) in 'opts.wasmHash', got ".concat(opts.wasmHash)); + } + if (salt.length !== 32) { + throw new TypeError("expected 32-byte salt in 'opts.salt', got ".concat(opts.wasmHash)); + } + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: src_xdr.HostFunction.hostFunctionTypeCreateContractV2(new src_xdr.CreateContractArgsV2({ + executable: src_xdr.ContractExecutable.contractExecutableWasm(invoke_host_function_Buffer.from(opts.wasmHash)), + contractIdPreimage: src_xdr.ContractIdPreimage.contractIdPreimageFromAddress(new src_xdr.ContractIdPreimageFromAddress({ + address: opts.address.toScAddress(), + salt: salt + })), + constructorArgs: (_opts$constructorArgs = opts.constructorArgs) !== null && _opts$constructorArgs !== void 0 ? _opts$constructorArgs : [] + })) + }); +} + +/** + * Returns an operation that wraps a Stellar asset into a token contract. + * + * @function + * @alias Operation.createStellarAssetContract + * + * @param {any} opts - the set of parameters + * @param {Asset|string} opts.asset - the Stellar asset to wrap, either as an + * {@link Asset} object or in canonical form (SEP-11, `code:issuer`) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see https://stellar.org/protocol/sep-11#alphanum4-alphanum12 + * @see + * https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions + * @see + * https://soroban.stellar.org/docs/advanced-tutorials/stellar-asset-contract + * @see Operation.invokeHostFunction + */ +function createStellarAssetContract(opts) { + var asset = opts.asset; + if (typeof asset === 'string') { + var _asset$split = asset.split(':'), + _asset$split2 = invoke_host_function_slicedToArray(_asset$split, 2), + code = _asset$split2[0], + issuer = _asset$split2[1]; + asset = new Asset(code, issuer); // handles 'xlm' by default + } + if (!(asset instanceof Asset)) { + throw new TypeError("expected Asset in 'opts.asset', got ".concat(asset)); + } + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: src_xdr.HostFunction.hostFunctionTypeCreateContract(new src_xdr.CreateContractArgs({ + executable: src_xdr.ContractExecutable.contractExecutableStellarAsset(), + contractIdPreimage: src_xdr.ContractIdPreimage.contractIdPreimageFromAsset(asset.toXDRObject()) + })) + }); +} + +/** + * Returns an operation that uploads WASM for a contract. + * + * @function + * @alias Operation.uploadContractWasm + * + * @param {any} opts - the set of parameters + * @param {Uint8Array|Buffer} opts.wasm - a WASM blob to upload to the ledger + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see + * https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#function + */ +function uploadContractWasm(opts) { + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: src_xdr.HostFunction.hostFunctionTypeUploadContractWasm(invoke_host_function_Buffer.from(opts.wasm) // coalesce so we can drop `Buffer` someday + ) + }); +} + +/** @returns {Buffer} a random 256-bit "salt" value. */ +function getSalty() { + return Keypair.random().xdrPublicKey().value(); // ed25519 is 256 bits, too +} +;// ./src/operations/extend_footprint_ttl.js + + +/** + * Builds an operation to bump the time-to-live (TTL) of the ledger keys. The + * keys for extension have to be provided in the read-only footprint of + * the transaction. + * + * The only parameter of the operation itself is the new minimum TTL for + * all the provided entries. If an entry already has a higher TTL, then it + * will just be skipped. + * + * TTL is the number of ledgers from the current ledger (exclusive) until + * the last ledger the entry is still considered alive (inclusive). Thus + * the exact ledger until the entries will live will only be determined + * when transaction has been applied. + * + * The footprint has to be specified in the transaction. See + * {@link TransactionBuilder}'s `opts.sorobanData` parameter, which is a + * {@link xdr.SorobanTransactionData} instance that contains fee data & resource + * usage as part of {@link xdr.SorobanResources}. + * + * @function + * @alias Operation.extendFootprintTtl + * + * @param {object} opts - object holding operation parameters + * @param {number} opts.extendTo - the minimum TTL that all the entries in + * the read-only footprint will have + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Extend Footprint TTL operation + * (xdr.ExtendFootprintTTLOp) + */ +function extendFootprintTtl(opts) { + var _opts$extendTo; + if (((_opts$extendTo = opts.extendTo) !== null && _opts$extendTo !== void 0 ? _opts$extendTo : -1) <= 0) { + throw new RangeError('extendTo has to be positive'); + } + var extendFootprintOp = new src_xdr.ExtendFootprintTtlOp({ + ext: new src_xdr.ExtensionPoint(0), + extendTo: opts.extendTo + }); + var opAttributes = { + body: src_xdr.OperationBody.extendFootprintTtl(extendFootprintOp) + }; + this.setSourceAccount(opAttributes, opts); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/restore_footprint.js + + +/** + * Builds an operation to restore the archived ledger entries specified + * by the ledger keys. + * + * The ledger keys to restore are specified separately from the operation + * in read-write footprint of the transaction. + * + * It takes no parameters because the relevant footprint is derived from the + * transaction itself. See {@link TransactionBuilder}'s `opts.sorobanData` + * parameter (or {@link TransactionBuilder.setSorobanData} / + * {@link TransactionBuilder.setLedgerKeys}), which is a + * {@link xdr.SorobanTransactionData} instance that contains fee data & resource + * usage as part of {@link xdr.SorobanTransactionData}. + * + * @function + * @alias Operation.restoreFootprint + * + * @param {object} [opts] - an optional set of parameters + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} a Bump Footprint Expiration operation + * (xdr.RestoreFootprintOp) + */ +function restoreFootprint() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var op = new src_xdr.RestoreFootprintOp({ + ext: new src_xdr.ExtensionPoint(0) + }); + var opAttributes = { + body: src_xdr.OperationBody.restoreFootprint(op) + }; + this.setSourceAccount(opAttributes, opts !== null && opts !== void 0 ? opts : {}); + return new src_xdr.Operation(opAttributes); +} +;// ./src/operations/index.js + + + + + + + + + + + + + + + + + + + + + + + + + + + +;// ./src/operation.js +function operation_typeof(o) { "@babel/helpers - typeof"; return operation_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, operation_typeof(o); } +function operation_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function operation_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, operation_toPropertyKey(o.key), o); } } +function operation_createClass(e, r, t) { return r && operation_defineProperties(e.prototype, r), t && operation_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function operation_toPropertyKey(t) { var i = operation_toPrimitive(t, "string"); return "symbol" == operation_typeof(i) ? i : i + ""; } +function operation_toPrimitive(t, r) { if ("object" != operation_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != operation_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* eslint-disable no-bitwise */ + + + + + + + + + + + + + +var ONE = 10000000; +var operation_MAX_INT64 = '9223372036854775807'; + +/** + * When set using `{@link Operation.setOptions}` option, requires the issuing + * account to give other accounts permission before they can hold the issuing + * account’s credit. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthRequiredFlag = 1 << 0; +/** + * When set using `{@link Operation.setOptions}` option, allows the issuing + * account to revoke its credit held by other accounts. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthRevocableFlag = 1 << 1; +/** + * When set using `{@link Operation.setOptions}` option, then none of the + * authorization flags can be set and the account can never be deleted. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthImmutableFlag = 1 << 2; + +/** + * When set using `{@link Operation.setOptions}` option, then any trustlines + * created by this account can have a ClawbackOp operation submitted for the + * corresponding asset. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthClawbackEnabledFlag = 1 << 3; + +/** + * `Operation` class represents + * [operations](https://developers.stellar.org/docs/glossary/operations/) in + * Stellar network. + * + * Use one of static methods to create operations: + * * `{@link Operation.createAccount}` + * * `{@link Operation.payment}` + * * `{@link Operation.pathPaymentStrictReceive}` + * * `{@link Operation.pathPaymentStrictSend}` + * * `{@link Operation.manageSellOffer}` + * * `{@link Operation.manageBuyOffer}` + * * `{@link Operation.createPassiveSellOffer}` + * * `{@link Operation.setOptions}` + * * `{@link Operation.changeTrust}` + * * `{@link Operation.allowTrust}` + * * `{@link Operation.accountMerge}` + * * `{@link Operation.inflation}` + * * `{@link Operation.manageData}` + * * `{@link Operation.bumpSequence}` + * * `{@link Operation.createClaimableBalance}` + * * `{@link Operation.claimClaimableBalance}` + * * `{@link Operation.beginSponsoringFutureReserves}` + * * `{@link Operation.endSponsoringFutureReserves}` + * * `{@link Operation.revokeAccountSponsorship}` + * * `{@link Operation.revokeTrustlineSponsorship}` + * * `{@link Operation.revokeOfferSponsorship}` + * * `{@link Operation.revokeDataSponsorship}` + * * `{@link Operation.revokeClaimableBalanceSponsorship}` + * * `{@link Operation.revokeLiquidityPoolSponsorship}` + * * `{@link Operation.revokeSignerSponsorship}` + * * `{@link Operation.clawback}` + * * `{@link Operation.clawbackClaimableBalance}` + * * `{@link Operation.setTrustLineFlags}` + * * `{@link Operation.liquidityPoolDeposit}` + * * `{@link Operation.liquidityPoolWithdraw}` + * * `{@link Operation.invokeHostFunction}`, which has the following additional + * "pseudo-operations" that make building host functions easier: + * - `{@link Operation.createStellarAssetContract}` + * - `{@link Operation.invokeContractFunction}` + * - `{@link Operation.createCustomContract}` + * - `{@link Operation.uploadContractWasm}` + * * `{@link Operation.extendFootprintTtlOp}` + * * `{@link Operation.restoreFootprint}` + * + * @class Operation + */ +var Operation = /*#__PURE__*/function () { + function Operation() { + operation_classCallCheck(this, Operation); + } + return operation_createClass(Operation, null, [{ + key: "setSourceAccount", + value: function setSourceAccount(opAttributes, opts) { + if (opts.source) { + try { + opAttributes.sourceAccount = decodeAddressToMuxedAccount(opts.source); + } catch (e) { + throw new Error('Source address is invalid'); + } + } + } + + /** + * Deconstructs the raw XDR operation object into the structured object that + * was used to create the operation (i.e. the `opts` parameter to most ops). + * + * @param {xdr.Operation} operation - An XDR Operation. + * @return {Operation} + */ + }, { + key: "fromXDRObject", + value: function fromXDRObject(operation) { + var result = {}; + if (operation.sourceAccount()) { + result.source = encodeMuxedAccountToAddress(operation.sourceAccount()); + } + var attrs = operation.body().value(); + var operationName = operation.body()["switch"]().name; + switch (operationName) { + case 'createAccount': + { + result.type = 'createAccount'; + result.destination = accountIdtoAddress(attrs.destination()); + result.startingBalance = this._fromXDRAmount(attrs.startingBalance()); + break; + } + case 'payment': + { + result.type = 'payment'; + result.destination = encodeMuxedAccountToAddress(attrs.destination()); + result.asset = Asset.fromOperation(attrs.asset()); + result.amount = this._fromXDRAmount(attrs.amount()); + break; + } + case 'pathPaymentStrictReceive': + { + result.type = 'pathPaymentStrictReceive'; + result.sendAsset = Asset.fromOperation(attrs.sendAsset()); + result.sendMax = this._fromXDRAmount(attrs.sendMax()); + result.destination = encodeMuxedAccountToAddress(attrs.destination()); + result.destAsset = Asset.fromOperation(attrs.destAsset()); + result.destAmount = this._fromXDRAmount(attrs.destAmount()); + result.path = []; + var path = attrs.path(); + + // note that Object.values isn't supported by node 6! + Object.keys(path).forEach(function (pathKey) { + result.path.push(Asset.fromOperation(path[pathKey])); + }); + break; + } + case 'pathPaymentStrictSend': + { + result.type = 'pathPaymentStrictSend'; + result.sendAsset = Asset.fromOperation(attrs.sendAsset()); + result.sendAmount = this._fromXDRAmount(attrs.sendAmount()); + result.destination = encodeMuxedAccountToAddress(attrs.destination()); + result.destAsset = Asset.fromOperation(attrs.destAsset()); + result.destMin = this._fromXDRAmount(attrs.destMin()); + result.path = []; + var _path = attrs.path(); + + // note that Object.values isn't supported by node 6! + Object.keys(_path).forEach(function (pathKey) { + result.path.push(Asset.fromOperation(_path[pathKey])); + }); + break; + } + case 'changeTrust': + { + result.type = 'changeTrust'; + switch (attrs.line()["switch"]()) { + case src_xdr.AssetType.assetTypePoolShare(): + result.line = LiquidityPoolAsset.fromOperation(attrs.line()); + break; + default: + result.line = Asset.fromOperation(attrs.line()); + break; + } + result.limit = this._fromXDRAmount(attrs.limit()); + break; + } + case 'allowTrust': + { + result.type = 'allowTrust'; + result.trustor = accountIdtoAddress(attrs.trustor()); + result.assetCode = attrs.asset().value().toString(); + result.assetCode = trimEnd(result.assetCode, '\0'); + result.authorize = attrs.authorize(); + break; + } + case 'setOptions': + { + result.type = 'setOptions'; + if (attrs.inflationDest()) { + result.inflationDest = accountIdtoAddress(attrs.inflationDest()); + } + result.clearFlags = attrs.clearFlags(); + result.setFlags = attrs.setFlags(); + result.masterWeight = attrs.masterWeight(); + result.lowThreshold = attrs.lowThreshold(); + result.medThreshold = attrs.medThreshold(); + result.highThreshold = attrs.highThreshold(); + // home_domain is checked by iscntrl in stellar-core + result.homeDomain = attrs.homeDomain() !== undefined ? attrs.homeDomain().toString('ascii') : undefined; + if (attrs.signer()) { + var signer = {}; + var arm = attrs.signer().key().arm(); + if (arm === 'ed25519') { + signer.ed25519PublicKey = accountIdtoAddress(attrs.signer().key()); + } else if (arm === 'preAuthTx') { + signer.preAuthTx = attrs.signer().key().preAuthTx(); + } else if (arm === 'hashX') { + signer.sha256Hash = attrs.signer().key().hashX(); + } else if (arm === 'ed25519SignedPayload') { + var signedPayload = attrs.signer().key().ed25519SignedPayload(); + signer.ed25519SignedPayload = StrKey.encodeSignedPayload(signedPayload.toXDR()); + } + signer.weight = attrs.signer().weight(); + result.signer = signer; + } + break; + } + // the next case intentionally falls through! + case 'manageOffer': + case 'manageSellOffer': + { + result.type = 'manageSellOffer'; + result.selling = Asset.fromOperation(attrs.selling()); + result.buying = Asset.fromOperation(attrs.buying()); + result.amount = this._fromXDRAmount(attrs.amount()); + result.price = this._fromXDRPrice(attrs.price()); + result.offerId = attrs.offerId().toString(); + break; + } + case 'manageBuyOffer': + { + result.type = 'manageBuyOffer'; + result.selling = Asset.fromOperation(attrs.selling()); + result.buying = Asset.fromOperation(attrs.buying()); + result.buyAmount = this._fromXDRAmount(attrs.buyAmount()); + result.price = this._fromXDRPrice(attrs.price()); + result.offerId = attrs.offerId().toString(); + break; + } + // the next case intentionally falls through! + case 'createPassiveOffer': + case 'createPassiveSellOffer': + { + result.type = 'createPassiveSellOffer'; + result.selling = Asset.fromOperation(attrs.selling()); + result.buying = Asset.fromOperation(attrs.buying()); + result.amount = this._fromXDRAmount(attrs.amount()); + result.price = this._fromXDRPrice(attrs.price()); + break; + } + case 'accountMerge': + { + result.type = 'accountMerge'; + result.destination = encodeMuxedAccountToAddress(attrs); + break; + } + case 'manageData': + { + result.type = 'manageData'; + // manage_data.name is checked by iscntrl in stellar-core + result.name = attrs.dataName().toString('ascii'); + result.value = attrs.dataValue(); + break; + } + case 'inflation': + { + result.type = 'inflation'; + break; + } + case 'bumpSequence': + { + result.type = 'bumpSequence'; + result.bumpTo = attrs.bumpTo().toString(); + break; + } + case 'createClaimableBalance': + { + result.type = 'createClaimableBalance'; + result.asset = Asset.fromOperation(attrs.asset()); + result.amount = this._fromXDRAmount(attrs.amount()); + result.claimants = []; + attrs.claimants().forEach(function (claimant) { + result.claimants.push(Claimant.fromXDR(claimant)); + }); + break; + } + case 'claimClaimableBalance': + { + result.type = 'claimClaimableBalance'; + result.balanceId = attrs.toXDR('hex'); + break; + } + case 'beginSponsoringFutureReserves': + { + result.type = 'beginSponsoringFutureReserves'; + result.sponsoredId = accountIdtoAddress(attrs.sponsoredId()); + break; + } + case 'endSponsoringFutureReserves': + { + result.type = 'endSponsoringFutureReserves'; + break; + } + case 'revokeSponsorship': + { + extractRevokeSponshipDetails(attrs, result); + break; + } + case 'clawback': + { + result.type = 'clawback'; + result.amount = this._fromXDRAmount(attrs.amount()); + result.from = encodeMuxedAccountToAddress(attrs.from()); + result.asset = Asset.fromOperation(attrs.asset()); + break; + } + case 'clawbackClaimableBalance': + { + result.type = 'clawbackClaimableBalance'; + result.balanceId = attrs.toXDR('hex'); + break; + } + case 'setTrustLineFlags': + { + result.type = 'setTrustLineFlags'; + result.asset = Asset.fromOperation(attrs.asset()); + result.trustor = accountIdtoAddress(attrs.trustor()); + + // Convert from the integer-bitwised flag into a sensible object that + // indicates true/false for each flag that's on/off. + var clears = attrs.clearFlags(); + var sets = attrs.setFlags(); + var mapping = { + authorized: src_xdr.TrustLineFlags.authorizedFlag(), + authorizedToMaintainLiabilities: src_xdr.TrustLineFlags.authorizedToMaintainLiabilitiesFlag(), + clawbackEnabled: src_xdr.TrustLineFlags.trustlineClawbackEnabledFlag() + }; + var getFlagValue = function getFlagValue(key) { + var bit = mapping[key].value; + if (sets & bit) { + return true; + } + if (clears & bit) { + return false; + } + return undefined; + }; + result.flags = {}; + Object.keys(mapping).forEach(function (flagName) { + result.flags[flagName] = getFlagValue(flagName); + }); + break; + } + case 'liquidityPoolDeposit': + { + result.type = 'liquidityPoolDeposit'; + result.liquidityPoolId = attrs.liquidityPoolId().toString('hex'); + result.maxAmountA = this._fromXDRAmount(attrs.maxAmountA()); + result.maxAmountB = this._fromXDRAmount(attrs.maxAmountB()); + result.minPrice = this._fromXDRPrice(attrs.minPrice()); + result.maxPrice = this._fromXDRPrice(attrs.maxPrice()); + break; + } + case 'liquidityPoolWithdraw': + { + result.type = 'liquidityPoolWithdraw'; + result.liquidityPoolId = attrs.liquidityPoolId().toString('hex'); + result.amount = this._fromXDRAmount(attrs.amount()); + result.minAmountA = this._fromXDRAmount(attrs.minAmountA()); + result.minAmountB = this._fromXDRAmount(attrs.minAmountB()); + break; + } + case 'invokeHostFunction': + { + var _attrs$auth; + result.type = 'invokeHostFunction'; + result.func = attrs.hostFunction(); + result.auth = (_attrs$auth = attrs.auth()) !== null && _attrs$auth !== void 0 ? _attrs$auth : []; + break; + } + case 'extendFootprintTtl': + { + result.type = 'extendFootprintTtl'; + result.extendTo = attrs.extendTo(); + break; + } + case 'restoreFootprint': + { + result.type = 'restoreFootprint'; + break; + } + default: + { + throw new Error("Unknown operation: ".concat(operationName)); + } + } + return result; + } + + /** + * Validates that a given amount is possible for a Stellar asset. + * + * Specifically, this means that the amount is well, a valid number, but also + * that it is within the int64 range and has no more than 7 decimal levels of + * precision. + * + * Note that while smart contracts allow larger amounts, this is oriented + * towards validating the standard Stellar operations. + * + * @param {string} value the amount to validate + * @param {boolean} allowZero optionally, whether or not zero is valid (default: no) + * + * @returns {boolean} + */ + }, { + key: "isValidAmount", + value: function isValidAmount(value) { + var allowZero = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (typeof value !== 'string') { + return false; + } + var amount; + try { + amount = new util_bignumber(value); + } catch (e) { + return false; + } + if ( + // == 0 + !allowZero && amount.isZero() || + // < 0 + amount.isNegative() || + // > Max value + amount.times(ONE).gt(new util_bignumber(operation_MAX_INT64).toString()) || + // Decimal places (max 7) + amount.decimalPlaces() > 7 || + // NaN or Infinity + amount.isNaN() || !amount.isFinite()) { + return false; + } + return true; + } + }, { + key: "constructAmountRequirementsError", + value: function constructAmountRequirementsError(arg) { + return "".concat(arg, " argument must be of type String, represent a positive number and have at most 7 digits after the decimal"); + } + + /** + * Returns value converted to uint32 value or undefined. + * If `value` is not `Number`, `String` or `Undefined` then throws an error. + * Used in {@link Operation.setOptions}. + * @private + * @param {string} name Name of the property (used in error message only) + * @param {*} value Value to check + * @param {function(value, name)} isValidFunction Function to check other constraints (the argument will be a `Number`) + * @returns {undefined|Number} + */ + }, { + key: "_checkUnsignedIntValue", + value: function _checkUnsignedIntValue(name, value) { + var isValidFunction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + if (typeof value === 'undefined') { + return undefined; + } + if (typeof value === 'string') { + value = parseFloat(value); + } + switch (true) { + case typeof value !== 'number' || !Number.isFinite(value) || value % 1 !== 0: + throw new Error("".concat(name, " value is invalid")); + case value < 0: + throw new Error("".concat(name, " value must be unsigned")); + case !isValidFunction || isValidFunction && isValidFunction(value, name): + return value; + default: + throw new Error("".concat(name, " value is invalid")); + } + } + /** + * @private + * @param {string|BigNumber} value Value + * @returns {Hyper} XDR amount + */ + }, { + key: "_toXDRAmount", + value: function _toXDRAmount(value) { + var amount = new util_bignumber(value).times(ONE); + return xdr.Hyper.fromString(amount.toString()); + } + + /** + * @private + * @param {string|BigNumber} value XDR amount + * @returns {BigNumber} Number + */ + }, { + key: "_fromXDRAmount", + value: function _fromXDRAmount(value) { + return new util_bignumber(value).div(ONE).toFixed(7); + } + + /** + * @private + * @param {object} price Price object + * @param {function} price.n numerator function that returns a value + * @param {function} price.d denominator function that returns a value + * @returns {BigNumber} Big string + */ + }, { + key: "_fromXDRPrice", + value: function _fromXDRPrice(price) { + var n = new util_bignumber(price.n()); + return n.div(new util_bignumber(price.d())).toString(); + } + + /** + * @private + * @param {object} price Price object + * @param {function} price.n numerator function that returns a value + * @param {function} price.d denominator function that returns a value + * @returns {object} XDR price object + */ + }, { + key: "_toXDRPrice", + value: function _toXDRPrice(price) { + var xdrObject; + if (price.n && price.d) { + xdrObject = new src_xdr.Price(price); + } else { + var approx = best_r(price); + xdrObject = new src_xdr.Price({ + n: parseInt(approx[0], 10), + d: parseInt(approx[1], 10) + }); + } + if (xdrObject.n() < 0 || xdrObject.d() < 0) { + throw new Error('price must be positive'); + } + return xdrObject; + } + }]); +}(); +function extractRevokeSponshipDetails(attrs, result) { + switch (attrs["switch"]().name) { + case 'revokeSponsorshipLedgerEntry': + { + var ledgerKey = attrs.ledgerKey(); + switch (ledgerKey["switch"]().name) { + case src_xdr.LedgerEntryType.account().name: + { + result.type = 'revokeAccountSponsorship'; + result.account = accountIdtoAddress(ledgerKey.account().accountId()); + break; + } + case src_xdr.LedgerEntryType.trustline().name: + { + result.type = 'revokeTrustlineSponsorship'; + result.account = accountIdtoAddress(ledgerKey.trustLine().accountId()); + var xdrAsset = ledgerKey.trustLine().asset(); + switch (xdrAsset["switch"]()) { + case src_xdr.AssetType.assetTypePoolShare(): + result.asset = LiquidityPoolId.fromOperation(xdrAsset); + break; + default: + result.asset = Asset.fromOperation(xdrAsset); + break; + } + break; + } + case src_xdr.LedgerEntryType.offer().name: + { + result.type = 'revokeOfferSponsorship'; + result.seller = accountIdtoAddress(ledgerKey.offer().sellerId()); + result.offerId = ledgerKey.offer().offerId().toString(); + break; + } + case src_xdr.LedgerEntryType.data().name: + { + result.type = 'revokeDataSponsorship'; + result.account = accountIdtoAddress(ledgerKey.data().accountId()); + result.name = ledgerKey.data().dataName().toString('ascii'); + break; + } + case src_xdr.LedgerEntryType.claimableBalance().name: + { + result.type = 'revokeClaimableBalanceSponsorship'; + result.balanceId = ledgerKey.claimableBalance().balanceId().toXDR('hex'); + break; + } + case src_xdr.LedgerEntryType.liquidityPool().name: + { + result.type = 'revokeLiquidityPoolSponsorship'; + result.liquidityPoolId = ledgerKey.liquidityPool().liquidityPoolId().toString('hex'); + break; + } + default: + { + throw new Error("Unknown ledgerKey: ".concat(attrs["switch"]().name)); + } + } + break; + } + case 'revokeSponsorshipSigner': + { + result.type = 'revokeSignerSponsorship'; + result.account = accountIdtoAddress(attrs.signer().accountId()); + result.signer = convertXDRSignerKeyToObject(attrs.signer().signerKey()); + break; + } + default: + { + throw new Error("Unknown revokeSponsorship: ".concat(attrs["switch"]().name)); + } + } +} +function convertXDRSignerKeyToObject(signerKey) { + var attrs = {}; + switch (signerKey["switch"]().name) { + case src_xdr.SignerKeyType.signerKeyTypeEd25519().name: + { + attrs.ed25519PublicKey = StrKey.encodeEd25519PublicKey(signerKey.ed25519()); + break; + } + case src_xdr.SignerKeyType.signerKeyTypePreAuthTx().name: + { + attrs.preAuthTx = signerKey.preAuthTx().toString('hex'); + break; + } + case src_xdr.SignerKeyType.signerKeyTypeHashX().name: + { + attrs.sha256Hash = signerKey.hashX().toString('hex'); + break; + } + default: + { + throw new Error("Unknown signerKey: ".concat(signerKey["switch"]().name)); + } + } + return attrs; +} +function accountIdtoAddress(accountId) { + return StrKey.encodeEd25519PublicKey(accountId.ed25519()); +} + +// Attach all imported operations as static methods on the Operation class +Operation.accountMerge = accountMerge; +Operation.allowTrust = allowTrust; +Operation.bumpSequence = bumpSequence; +Operation.changeTrust = changeTrust; +Operation.createAccount = createAccount; +Operation.createClaimableBalance = createClaimableBalance; +Operation.claimClaimableBalance = claimClaimableBalance; +Operation.clawbackClaimableBalance = clawbackClaimableBalance; +Operation.createPassiveSellOffer = createPassiveSellOffer; +Operation.inflation = inflation; +Operation.manageData = manageData; +Operation.manageSellOffer = manageSellOffer; +Operation.manageBuyOffer = manageBuyOffer; +Operation.pathPaymentStrictReceive = pathPaymentStrictReceive; +Operation.pathPaymentStrictSend = pathPaymentStrictSend; +Operation.payment = payment; +Operation.setOptions = setOptions; +Operation.beginSponsoringFutureReserves = beginSponsoringFutureReserves; +Operation.endSponsoringFutureReserves = endSponsoringFutureReserves; +Operation.revokeAccountSponsorship = revokeAccountSponsorship; +Operation.revokeTrustlineSponsorship = revokeTrustlineSponsorship; +Operation.revokeOfferSponsorship = revokeOfferSponsorship; +Operation.revokeDataSponsorship = revokeDataSponsorship; +Operation.revokeClaimableBalanceSponsorship = revokeClaimableBalanceSponsorship; +Operation.revokeLiquidityPoolSponsorship = revokeLiquidityPoolSponsorship; +Operation.revokeSignerSponsorship = revokeSignerSponsorship; +Operation.clawback = clawback; +Operation.setTrustLineFlags = setTrustLineFlags; +Operation.liquidityPoolDeposit = liquidityPoolDeposit; +Operation.liquidityPoolWithdraw = liquidityPoolWithdraw; +Operation.invokeHostFunction = invokeHostFunction; +Operation.extendFootprintTtl = extendFootprintTtl; +Operation.restoreFootprint = restoreFootprint; + +// these are not `xdr.Operation`s directly, but are proxies for complex but +// common versions of `Operation.invokeHostFunction` +Operation.createStellarAssetContract = createStellarAssetContract; +Operation.invokeContractFunction = invokeContractFunction; +Operation.createCustomContract = createCustomContract; +Operation.uploadContractWasm = uploadContractWasm; +;// ./src/memo.js +/* provided dependency */ var memo_Buffer = __webpack_require__(3626)["A"]; +function memo_typeof(o) { "@babel/helpers - typeof"; return memo_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, memo_typeof(o); } +function memo_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function memo_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, memo_toPropertyKey(o.key), o); } } +function memo_createClass(e, r, t) { return r && memo_defineProperties(e.prototype, r), t && memo_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function memo_toPropertyKey(t) { var i = memo_toPrimitive(t, "string"); return "symbol" == memo_typeof(i) ? i : i + ""; } +function memo_toPrimitive(t, r) { if ("object" != memo_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != memo_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + +/** + * Type of {@link Memo}. + */ +var MemoNone = 'none'; +/** + * Type of {@link Memo}. + */ +var MemoID = 'id'; +/** + * Type of {@link Memo}. + */ +var MemoText = 'text'; +/** + * Type of {@link Memo}. + */ +var MemoHash = 'hash'; +/** + * Type of {@link Memo}. + */ +var MemoReturn = 'return'; + +/** + * `Memo` represents memos attached to transactions. + * + * @param {string} type - `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn` + * @param {*} value - `string` for `MemoID`, `MemoText`, buffer of hex string for `MemoHash` or `MemoReturn` + * @see [Transactions concept](https://developers.stellar.org/docs/glossary/transactions/) + * @class Memo + */ +var Memo = /*#__PURE__*/function () { + function Memo(type) { + var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + memo_classCallCheck(this, Memo); + this._type = type; + this._value = value; + switch (this._type) { + case MemoNone: + break; + case MemoID: + Memo._validateIdValue(value); + break; + case MemoText: + Memo._validateTextValue(value); + break; + case MemoHash: + case MemoReturn: + Memo._validateHashValue(value); + // We want MemoHash and MemoReturn to have Buffer as a value + if (typeof value === 'string') { + this._value = memo_Buffer.from(value, 'hex'); + } + break; + default: + throw new Error('Invalid memo type'); + } + } + + /** + * Contains memo type: `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn` + */ + return memo_createClass(Memo, [{ + key: "type", + get: function get() { + return this._type; + }, + set: function set(type) { + throw new Error('Memo is immutable'); + } + + /** + * Contains memo value: + * * `null` for `MemoNone`, + * * `string` for `MemoID`, + * * `Buffer` for `MemoText` after decoding using `fromXDRObject`, original value otherwise, + * * `Buffer` for `MemoHash`, `MemoReturn`. + */ + }, { + key: "value", + get: function get() { + switch (this._type) { + case MemoNone: + return null; + case MemoID: + case MemoText: + return this._value; + case MemoHash: + case MemoReturn: + return memo_Buffer.from(this._value); + default: + throw new Error('Invalid memo type'); + } + }, + set: function set(value) { + throw new Error('Memo is immutable'); + } + }, { + key: "toXDRObject", + value: + /** + * Returns XDR memo object. + * @returns {xdr.Memo} + */ + function toXDRObject() { + switch (this._type) { + case MemoNone: + return src_xdr.Memo.memoNone(); + case MemoID: + return src_xdr.Memo.memoId(xdr.UnsignedHyper.fromString(this._value)); + case MemoText: + return src_xdr.Memo.memoText(this._value); + case MemoHash: + return src_xdr.Memo.memoHash(this._value); + case MemoReturn: + return src_xdr.Memo.memoReturn(this._value); + default: + return null; + } + } + + /** + * Returns {@link Memo} from XDR memo object. + * @param {xdr.Memo} object XDR memo object + * @returns {Memo} + */ + }], [{ + key: "_validateIdValue", + value: function _validateIdValue(value) { + var error = new Error("Expects a int64 as a string. Got ".concat(value)); + if (typeof value !== 'string') { + throw error; + } + var number; + try { + number = new util_bignumber(value); + } catch (e) { + throw error; + } + + // Infinity + if (!number.isFinite()) { + throw error; + } + + // NaN + if (number.isNaN()) { + throw error; + } + } + }, { + key: "_validateTextValue", + value: function _validateTextValue(value) { + if (!src_xdr.Memo.armTypeForArm('text').isValid(value)) { + throw new Error('Expects string, array or buffer, max 28 bytes'); + } + } + }, { + key: "_validateHashValue", + value: function _validateHashValue(value) { + var error = new Error("Expects a 32 byte hash value or hex encoded string. Got ".concat(value)); + if (value === null || typeof value === 'undefined') { + throw error; + } + var valueBuffer; + if (typeof value === 'string') { + if (!/^[0-9A-Fa-f]{64}$/g.test(value)) { + throw error; + } + valueBuffer = memo_Buffer.from(value, 'hex'); + } else if (memo_Buffer.isBuffer(value)) { + valueBuffer = memo_Buffer.from(value); + } else { + throw error; + } + if (!valueBuffer.length || valueBuffer.length !== 32) { + throw error; + } + } + + /** + * Returns an empty memo (`MemoNone`). + * @returns {Memo} + */ + }, { + key: "none", + value: function none() { + return new Memo(MemoNone); + } + + /** + * Creates and returns a `MemoText` memo. + * @param {string} text - memo text + * @returns {Memo} + */ + }, { + key: "text", + value: function text(_text) { + return new Memo(MemoText, _text); + } + + /** + * Creates and returns a `MemoID` memo. + * @param {string} id - 64-bit number represented as a string + * @returns {Memo} + */ + }, { + key: "id", + value: function id(_id) { + return new Memo(MemoID, _id); + } + + /** + * Creates and returns a `MemoHash` memo. + * @param {array|string} hash - 32 byte hash or hex encoded string + * @returns {Memo} + */ + }, { + key: "hash", + value: function hash(_hash) { + return new Memo(MemoHash, _hash); + } + + /** + * Creates and returns a `MemoReturn` memo. + * @param {array|string} hash - 32 byte hash or hex encoded string + * @returns {Memo} + */ + }, { + key: "return", + value: function _return(hash) { + return new Memo(MemoReturn, hash); + } + }, { + key: "fromXDRObject", + value: function fromXDRObject(object) { + switch (object.arm()) { + case 'id': + return Memo.id(object.value().toString()); + case 'text': + return Memo.text(object.value()); + case 'hash': + return Memo.hash(object.value()); + case 'retHash': + return Memo["return"](object.value()); + default: + break; + } + if (typeof object.value() === 'undefined') { + return Memo.none(); + } + throw new Error('Unknown type'); + } + }]); +}(); +;// ./src/transaction.js +/* provided dependency */ var transaction_Buffer = __webpack_require__(3626)["A"]; +function transaction_typeof(o) { "@babel/helpers - typeof"; return transaction_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, transaction_typeof(o); } +function transaction_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function transaction_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, transaction_toPropertyKey(o.key), o); } } +function transaction_createClass(e, r, t) { return r && transaction_defineProperties(e.prototype, r), t && transaction_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function transaction_toPropertyKey(t) { var i = transaction_toPrimitive(t, "string"); return "symbol" == transaction_typeof(i) ? i : i + ""; } +function transaction_toPrimitive(t, r) { if ("object" != transaction_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != transaction_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == transaction_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + + + + + +/** + * Use {@link TransactionBuilder} to build a transaction object. If you have an + * object or base64-encoded string of the transaction envelope XDR, use {@link + * TransactionBuilder.fromXDR}. + * + * Once a Transaction has been created, its attributes and operations should not + * be changed. You should only add signatures (using {@link Transaction#sign}) + * to a Transaction object before submitting to the network or forwarding on to + * additional signers. + * + * @constructor + * + * @param {string|xdr.TransactionEnvelope} envelope - transaction envelope + * object or base64 encoded string + * @param {string} [networkPassphrase] - passphrase of the target stellar + * network (e.g. "Public Global Stellar Network ; September 2015") + * + * @extends TransactionBase + */ +var Transaction = /*#__PURE__*/function (_TransactionBase) { + function Transaction(envelope, networkPassphrase) { + var _this; + transaction_classCallCheck(this, Transaction); + if (typeof envelope === 'string') { + var buffer = transaction_Buffer.from(envelope, 'base64'); + envelope = src_xdr.TransactionEnvelope.fromXDR(buffer); + } + var envelopeType = envelope["switch"](); + if (!(envelopeType === src_xdr.EnvelopeType.envelopeTypeTxV0() || envelopeType === src_xdr.EnvelopeType.envelopeTypeTx())) { + throw new Error("Invalid TransactionEnvelope: expected an envelopeTypeTxV0 or envelopeTypeTx but received an ".concat(envelopeType.name, ".")); + } + var txEnvelope = envelope.value(); + var tx = txEnvelope.tx(); + var fee = tx.fee().toString(); + var signatures = (txEnvelope.signatures() || []).slice(); + _this = _callSuper(this, Transaction, [tx, signatures, fee, networkPassphrase]); + _this._envelopeType = envelopeType; + _this._memo = tx.memo(); + _this._sequence = tx.seqNum().toString(); + switch (_this._envelopeType) { + case src_xdr.EnvelopeType.envelopeTypeTxV0(): + _this._source = StrKey.encodeEd25519PublicKey(_this.tx.sourceAccountEd25519()); + break; + default: + _this._source = encodeMuxedAccountToAddress(_this.tx.sourceAccount()); + break; + } + var cond = null; + var timeBounds = null; + switch (_this._envelopeType) { + case src_xdr.EnvelopeType.envelopeTypeTxV0(): + timeBounds = tx.timeBounds(); + break; + case src_xdr.EnvelopeType.envelopeTypeTx(): + switch (tx.cond()["switch"]()) { + case src_xdr.PreconditionType.precondTime(): + timeBounds = tx.cond().timeBounds(); + break; + case src_xdr.PreconditionType.precondV2(): + cond = tx.cond().v2(); + timeBounds = cond.timeBounds(); + break; + default: + break; + } + break; + default: + break; + } + if (timeBounds) { + _this._timeBounds = { + minTime: timeBounds.minTime().toString(), + maxTime: timeBounds.maxTime().toString() + }; + } + if (cond) { + var ledgerBounds = cond.ledgerBounds(); + if (ledgerBounds) { + _this._ledgerBounds = { + minLedger: ledgerBounds.minLedger(), + maxLedger: ledgerBounds.maxLedger() + }; + } + var minSeq = cond.minSeqNum(); + if (minSeq) { + _this._minAccountSequence = minSeq.toString(); + } + _this._minAccountSequenceAge = cond.minSeqAge(); + _this._minAccountSequenceLedgerGap = cond.minSeqLedgerGap(); + _this._extraSigners = cond.extraSigners(); + } + var operations = tx.operations() || []; + _this._operations = operations.map(function (op) { + return Operation.fromXDRObject(op); + }); + return _this; + } + + /** + * @type {object} + * @property {string} 64 bit unix timestamp + * @property {string} 64 bit unix timestamp + * @readonly + */ + _inherits(Transaction, _TransactionBase); + return transaction_createClass(Transaction, [{ + key: "timeBounds", + get: function get() { + return this._timeBounds; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {object} + * @property {number} minLedger - smallest ledger bound (uint32) + * @property {number} maxLedger - largest ledger bound (or 0 for inf) + * @readonly + */ + }, { + key: "ledgerBounds", + get: function get() { + return this._ledgerBounds; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * 64 bit account sequence + * @readonly + * @type {string} + */ + }, { + key: "minAccountSequence", + get: function get() { + return this._minAccountSequence; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * 64 bit number of seconds + * @type {number} + * @readonly + */ + }, { + key: "minAccountSequenceAge", + get: function get() { + return this._minAccountSequenceAge; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * 32 bit number of ledgers + * @type {number} + * @readonly + */ + }, { + key: "minAccountSequenceLedgerGap", + get: function get() { + return this._minAccountSequenceLedgerGap; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * array of extra signers ({@link StrKey}s) + * @type {string[]} + * @readonly + */ + }, { + key: "extraSigners", + get: function get() { + return this._extraSigners; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "sequence", + get: function get() { + return this._sequence; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "source", + get: function get() { + return this._source; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {Array.} + * @readonly + */ + }, { + key: "operations", + get: function get() { + return this._operations; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "memo", + get: function get() { + return Memo.fromXDRObject(this._memo); + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * Returns the "signature base" of this transaction, which is the value + * that, when hashed, should be signed to create a signature that + * validators on the Stellar Network will accept. + * + * It is composed of a 4 prefix bytes followed by the xdr-encoded form + * of this transaction. + * @returns {Buffer} + */ + }, { + key: "signatureBase", + value: function signatureBase() { + var tx = this.tx; + + // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // we need a Transaction to generate the signature base + if (this._envelopeType === src_xdr.EnvelopeType.envelopeTypeTxV0()) { + tx = src_xdr.Transaction.fromXDR(transaction_Buffer.concat([ + // TransactionV0 is a transaction with the AccountID discriminant + // stripped off, we need to put it back to build a valid transaction + // which we can use to build a TransactionSignaturePayloadTaggedTransaction + src_xdr.PublicKeyType.publicKeyTypeEd25519().toXDR(), tx.toXDR()])); + } + var taggedTransaction = new src_xdr.TransactionSignaturePayloadTaggedTransaction.envelopeTypeTx(tx); + var txSignature = new src_xdr.TransactionSignaturePayload({ + networkId: src_xdr.Hash.fromXDR(hashing_hash(this.networkPassphrase)), + taggedTransaction: taggedTransaction + }); + return txSignature.toXDR(); + } + + /** + * To envelope returns a xdr.TransactionEnvelope which can be submitted to the network. + * @returns {xdr.TransactionEnvelope} + */ + }, { + key: "toEnvelope", + value: function toEnvelope() { + var rawTx = this.tx.toXDR(); + var signatures = this.signatures.slice(); // make a copy of the signatures + + var envelope; + switch (this._envelopeType) { + case src_xdr.EnvelopeType.envelopeTypeTxV0(): + envelope = new src_xdr.TransactionEnvelope.envelopeTypeTxV0(new src_xdr.TransactionV0Envelope({ + tx: src_xdr.TransactionV0.fromXDR(rawTx), + // make a copy of tx + signatures: signatures + })); + break; + case src_xdr.EnvelopeType.envelopeTypeTx(): + envelope = new src_xdr.TransactionEnvelope.envelopeTypeTx(new src_xdr.TransactionV1Envelope({ + tx: src_xdr.Transaction.fromXDR(rawTx), + // make a copy of tx + signatures: signatures + })); + break; + default: + throw new Error("Invalid TransactionEnvelope: expected an envelopeTypeTxV0 or envelopeTypeTx but received an ".concat(this._envelopeType.name, ".")); + } + return envelope; + } + + /** + * Calculate the claimable balance ID for an operation within the transaction. + * + * @param {integer} opIndex the index of the CreateClaimableBalance op + * @returns {string} a hex string representing the claimable balance ID + * + * @throws {RangeError} for invalid `opIndex` value + * @throws {TypeError} if op at `opIndex` is not `CreateClaimableBalance` + * @throws for general XDR un/marshalling failures + * + * @see https://github.com/stellar/go/blob/d712346e61e288d450b0c08038c158f8848cc3e4/txnbuild/transaction.go#L392-L435 + * + */ + }, { + key: "getClaimableBalanceId", + value: function getClaimableBalanceId(opIndex) { + // Validate and then extract the operation from the transaction. + if (!Number.isInteger(opIndex) || opIndex < 0 || opIndex >= this.operations.length) { + throw new RangeError('invalid operation index'); + } + var op = this.operations[opIndex]; + try { + op = Operation.createClaimableBalance(op); + } catch (err) { + throw new TypeError("expected createClaimableBalance, got ".concat(op.type, ": ").concat(err)); + } + + // Always use the transaction's *unmuxed* source. + var account = StrKey.decodeEd25519PublicKey(extractBaseAddress(this.source)); + var operationId = src_xdr.HashIdPreimage.envelopeTypeOpId(new src_xdr.HashIdPreimageOperationId({ + sourceAccount: src_xdr.AccountId.publicKeyTypeEd25519(account), + seqNum: src_xdr.SequenceNumber.fromString(this.sequence), + opNum: opIndex + })); + var opIdHash = hashing_hash(operationId.toXDR('raw')); + var balanceId = src_xdr.ClaimableBalanceId.claimableBalanceIdTypeV0(opIdHash); + return balanceId.toXDR('hex'); + } + }]); +}(TransactionBase); +;// ./src/fee_bump_transaction.js +/* provided dependency */ var fee_bump_transaction_Buffer = __webpack_require__(3626)["A"]; +function fee_bump_transaction_typeof(o) { "@babel/helpers - typeof"; return fee_bump_transaction_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, fee_bump_transaction_typeof(o); } +function fee_bump_transaction_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function fee_bump_transaction_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, fee_bump_transaction_toPropertyKey(o.key), o); } } +function fee_bump_transaction_createClass(e, r, t) { return r && fee_bump_transaction_defineProperties(e.prototype, r), t && fee_bump_transaction_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function fee_bump_transaction_toPropertyKey(t) { var i = fee_bump_transaction_toPrimitive(t, "string"); return "symbol" == fee_bump_transaction_typeof(i) ? i : i + ""; } +function fee_bump_transaction_toPrimitive(t, r) { if ("object" != fee_bump_transaction_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != fee_bump_transaction_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function fee_bump_transaction_callSuper(t, o, e) { return o = fee_bump_transaction_getPrototypeOf(o), fee_bump_transaction_possibleConstructorReturn(t, fee_bump_transaction_isNativeReflectConstruct() ? Reflect.construct(o, e || [], fee_bump_transaction_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function fee_bump_transaction_possibleConstructorReturn(t, e) { if (e && ("object" == fee_bump_transaction_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return fee_bump_transaction_assertThisInitialized(t); } +function fee_bump_transaction_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function fee_bump_transaction_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (fee_bump_transaction_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function fee_bump_transaction_getPrototypeOf(t) { return fee_bump_transaction_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, fee_bump_transaction_getPrototypeOf(t); } +function fee_bump_transaction_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && fee_bump_transaction_setPrototypeOf(t, e); } +function fee_bump_transaction_setPrototypeOf(t, e) { return fee_bump_transaction_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, fee_bump_transaction_setPrototypeOf(t, e); } + + + + + + +/** + * Use {@link TransactionBuilder.buildFeeBumpTransaction} to build a + * FeeBumpTransaction object. If you have an object or base64-encoded string of + * the transaction envelope XDR use {@link TransactionBuilder.fromXDR}. + * + * Once a {@link FeeBumpTransaction} has been created, its attributes and operations + * should not be changed. You should only add signatures (using {@link FeeBumpTransaction#sign}) before + * submitting to the network or forwarding on to additional signers. + * + * @param {string|xdr.TransactionEnvelope} envelope - transaction envelope + * object or base64 encoded string. + * @param {string} networkPassphrase - passphrase of the target Stellar network + * (e.g. "Public Global Stellar Network ; September 2015"). + * + * @extends TransactionBase + */ +var FeeBumpTransaction = /*#__PURE__*/function (_TransactionBase) { + function FeeBumpTransaction(envelope, networkPassphrase) { + var _this; + fee_bump_transaction_classCallCheck(this, FeeBumpTransaction); + if (typeof envelope === 'string') { + var buffer = fee_bump_transaction_Buffer.from(envelope, 'base64'); + envelope = src_xdr.TransactionEnvelope.fromXDR(buffer); + } + var envelopeType = envelope["switch"](); + if (envelopeType !== src_xdr.EnvelopeType.envelopeTypeTxFeeBump()) { + throw new Error("Invalid TransactionEnvelope: expected an envelopeTypeTxFeeBump but received an ".concat(envelopeType.name, ".")); + } + var txEnvelope = envelope.value(); + var tx = txEnvelope.tx(); + var fee = tx.fee().toString(); + // clone signatures + var signatures = (txEnvelope.signatures() || []).slice(); + _this = fee_bump_transaction_callSuper(this, FeeBumpTransaction, [tx, signatures, fee, networkPassphrase]); + var innerTxEnvelope = src_xdr.TransactionEnvelope.envelopeTypeTx(tx.innerTx().v1()); + _this._feeSource = encodeMuxedAccountToAddress(_this.tx.feeSource()); + _this._innerTransaction = new Transaction(innerTxEnvelope, networkPassphrase); + return _this; + } + + /** + * @type {Transaction} + * @readonly + */ + fee_bump_transaction_inherits(FeeBumpTransaction, _TransactionBase); + return fee_bump_transaction_createClass(FeeBumpTransaction, [{ + key: "innerTransaction", + get: function get() { + return this._innerTransaction; + } + + /** + * @type {Operation[]} + * @readonly + */ + }, { + key: "operations", + get: function get() { + return this._innerTransaction.operations; + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "feeSource", + get: function get() { + return this._feeSource; + } + + /** + * Returns the "signature base" of this transaction, which is the value + * that, when hashed, should be signed to create a signature that + * validators on the Stellar Network will accept. + * + * It is composed of a 4 prefix bytes followed by the xdr-encoded form + * of this transaction. + * @returns {Buffer} + */ + }, { + key: "signatureBase", + value: function signatureBase() { + var taggedTransaction = new src_xdr.TransactionSignaturePayloadTaggedTransaction.envelopeTypeTxFeeBump(this.tx); + var txSignature = new src_xdr.TransactionSignaturePayload({ + networkId: src_xdr.Hash.fromXDR(hashing_hash(this.networkPassphrase)), + taggedTransaction: taggedTransaction + }); + return txSignature.toXDR(); + } + + /** + * To envelope returns a xdr.TransactionEnvelope which can be submitted to the network. + * @returns {xdr.TransactionEnvelope} + */ + }, { + key: "toEnvelope", + value: function toEnvelope() { + var envelope = new src_xdr.FeeBumpTransactionEnvelope({ + tx: src_xdr.FeeBumpTransaction.fromXDR(this.tx.toXDR()), + // make a copy of the tx + signatures: this.signatures.slice() // make a copy of the signatures + }); + return new src_xdr.TransactionEnvelope.envelopeTypeTxFeeBump(envelope); + } + }]); +}(TransactionBase); +;// ./src/account.js +function account_typeof(o) { "@babel/helpers - typeof"; return account_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, account_typeof(o); } +function account_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function account_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, account_toPropertyKey(o.key), o); } } +function account_createClass(e, r, t) { return r && account_defineProperties(e.prototype, r), t && account_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function account_toPropertyKey(t) { var i = account_toPrimitive(t, "string"); return "symbol" == account_typeof(i) ? i : i + ""; } +function account_toPrimitive(t, r) { if ("object" != account_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != account_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + +/** + * Create a new Account object. + * + * `Account` represents a single account in the Stellar network and its sequence + * number. Account tracks the sequence number as it is used by {@link + * TransactionBuilder}. See + * [Accounts](https://developers.stellar.org/docs/glossary/accounts/) for + * more information about how accounts work in Stellar. + * + * @constructor + * + * @param {string} accountId - ID of the account (ex. + * `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`). If you + * provide a muxed account address, this will throw; use {@link + * MuxedAccount} instead. + * @param {string} sequence - current sequence number of the account + */ +var Account = /*#__PURE__*/function () { + function Account(accountId, sequence) { + account_classCallCheck(this, Account); + if (StrKey.isValidMed25519PublicKey(accountId)) { + throw new Error('accountId is an M-address; use MuxedAccount instead'); + } + if (!StrKey.isValidEd25519PublicKey(accountId)) { + throw new Error('accountId is invalid'); + } + if (!(typeof sequence === 'string')) { + throw new Error('sequence must be of type string'); + } + this._accountId = accountId; + this.sequence = new util_bignumber(sequence); + } + + /** + * Returns Stellar account ID, ex. + * `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`. + * @returns {string} + */ + return account_createClass(Account, [{ + key: "accountId", + value: function accountId() { + return this._accountId; + } + + /** + * @returns {string} sequence number for the account as a string + */ + }, { + key: "sequenceNumber", + value: function sequenceNumber() { + return this.sequence.toString(); + } + + /** + * Increments sequence number in this object by one. + * @returns {void} + */ + }, { + key: "incrementSequenceNumber", + value: function incrementSequenceNumber() { + this.sequence = this.sequence.plus(1); + } + }]); +}(); +;// ./src/muxed_account.js +function muxed_account_typeof(o) { "@babel/helpers - typeof"; return muxed_account_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, muxed_account_typeof(o); } +function muxed_account_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function muxed_account_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, muxed_account_toPropertyKey(o.key), o); } } +function muxed_account_createClass(e, r, t) { return r && muxed_account_defineProperties(e.prototype, r), t && muxed_account_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function muxed_account_toPropertyKey(t) { var i = muxed_account_toPrimitive(t, "string"); return "symbol" == muxed_account_typeof(i) ? i : i + ""; } +function muxed_account_toPrimitive(t, r) { if ("object" != muxed_account_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != muxed_account_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + +/** + * Represents a muxed account for transactions and operations. + * + * A muxed (or *multiplexed*) account (defined rigorously in + * [CAP-27](https://stellar.org/protocol/cap-27) and briefly in + * [SEP-23](https://stellar.org/protocol/sep-23)) is one that resolves a single + * Stellar `G...`` account to many different underlying IDs. + * + * For example, you may have a single Stellar address for accounting purposes: + * GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ + * + * Yet would like to use it for 4 different family members: + * 1: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAAGZFQ + * 2: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAALIWQ + * 3: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAAPYHQ + * 4: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAAQLQQ + * + * This object makes it easy to create muxed accounts from regular accounts, + * duplicate them, get/set the underlying IDs, etc. without mucking around with + * the raw XDR. + * + * Because muxed accounts are purely an off-chain convention, they all share the + * sequence number tied to their underlying G... account. Thus, this object + * *requires* an {@link Account} instance to be passed in, so that muxed + * instances of an account can collectively modify the sequence number whenever + * a muxed account is used as the source of a @{link Transaction} with {@link + * TransactionBuilder}. + * + * @constructor + * + * @param {Account} account - the @{link Account} instance representing the + * underlying G... address + * @param {string} id - a stringified uint64 value that represents the + * ID of the muxed account + * + * @link https://developers.stellar.org/docs/glossary/muxed-accounts/ + */ +var MuxedAccount = /*#__PURE__*/function () { + function MuxedAccount(baseAccount, id) { + muxed_account_classCallCheck(this, MuxedAccount); + var accountId = baseAccount.accountId(); + if (!StrKey.isValidEd25519PublicKey(accountId)) { + throw new Error('accountId is invalid'); + } + this.account = baseAccount; + this._muxedXdr = encodeMuxedAccount(accountId, id); + this._mAddress = encodeMuxedAccountToAddress(this._muxedXdr); + this._id = id; + } + + /** + * Parses an M-address into a MuxedAccount object. + * + * @param {string} mAddress - an M-address to transform + * @param {string} sequenceNum - the sequence number of the underlying {@link + * Account}, to use for the underlying base account (@link + * MuxedAccount.baseAccount). If you're using the SDK, you can use + * `server.loadAccount` to fetch this if you don't know it. + * + * @return {MuxedAccount} + */ + return muxed_account_createClass(MuxedAccount, [{ + key: "baseAccount", + value: + /** + * @return {Account} the underlying account object shared among all muxed + * accounts with this Stellar address + */ + function baseAccount() { + return this.account; + } + + /** + * @return {string} the M-address representing this account's (G-address, ID) + */ + }, { + key: "accountId", + value: function accountId() { + return this._mAddress; + } + }, { + key: "id", + value: function id() { + return this._id; + } + }, { + key: "setId", + value: function setId(id) { + if (typeof id !== 'string') { + throw new Error('id should be a string representing a number (uint64)'); + } + this._muxedXdr.med25519().id(src_xdr.Uint64.fromString(id)); + this._mAddress = encodeMuxedAccountToAddress(this._muxedXdr); + this._id = id; + return this; + } + + /** + * Accesses the underlying account's sequence number. + * @return {string} strigified sequence number for the underlying account + */ + }, { + key: "sequenceNumber", + value: function sequenceNumber() { + return this.account.sequenceNumber(); + } + + /** + * Increments the underlying account's sequence number by one. + * @return {void} + */ + }, { + key: "incrementSequenceNumber", + value: function incrementSequenceNumber() { + return this.account.incrementSequenceNumber(); + } + + /** + * @return {xdr.MuxedAccount} the XDR object representing this muxed account's + * G-address and uint64 ID + */ + }, { + key: "toXDRObject", + value: function toXDRObject() { + return this._muxedXdr; + } + }, { + key: "equals", + value: function equals(otherMuxedAccount) { + return this.accountId() === otherMuxedAccount.accountId(); + } + }], [{ + key: "fromAddress", + value: function fromAddress(mAddress, sequenceNum) { + var muxedAccount = decodeAddressToMuxedAccount(mAddress); + var gAddress = extractBaseAddress(mAddress); + var id = muxedAccount.med25519().id().toString(); + return new MuxedAccount(new Account(gAddress, sequenceNum), id); + } + }]); +}(); +;// ./src/sorobandata_builder.js +function sorobandata_builder_typeof(o) { "@babel/helpers - typeof"; return sorobandata_builder_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, sorobandata_builder_typeof(o); } +function sorobandata_builder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function sorobandata_builder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, sorobandata_builder_toPropertyKey(o.key), o); } } +function sorobandata_builder_createClass(e, r, t) { return r && sorobandata_builder_defineProperties(e.prototype, r), t && sorobandata_builder_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function sorobandata_builder_defineProperty(e, r, t) { return (r = sorobandata_builder_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function sorobandata_builder_toPropertyKey(t) { var i = sorobandata_builder_toPrimitive(t, "string"); return "symbol" == sorobandata_builder_typeof(i) ? i : i + ""; } +function sorobandata_builder_toPrimitive(t, r) { if ("object" != sorobandata_builder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != sorobandata_builder_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + +/** + * Supports building {@link xdr.SorobanTransactionData} structures with various + * items set to specific values. + * + * This is recommended for when you are building + * {@link Operation.extendFootprintTtl} / {@link Operation.restoreFootprint} + * operations and need to {@link TransactionBuilder.setSorobanData} to avoid + * (re)building the entire data structure from scratch. + * + * @constructor + * + * @param {string | xdr.SorobanTransactionData} [sorobanData] either a + * base64-encoded string that represents an + * {@link xdr.SorobanTransactionData} instance or an XDR instance itself + * (it will be copied); if omitted or "falsy" (e.g. an empty string), it + * starts with an empty instance + * + * @example + * // You want to use an existing data blob but override specific parts. + * const newData = new SorobanDataBuilder(existing) + * .setReadOnly(someLedgerKeys) + * .setRefundableFee("1000") + * .build(); + * + * // You want an instance from scratch + * const newData = new SorobanDataBuilder() + * .setFootprint([someLedgerKey], []) + * .setRefundableFee("1000") + * .build(); + */ +var SorobanDataBuilder = /*#__PURE__*/function () { + function SorobanDataBuilder(sorobanData) { + sorobandata_builder_classCallCheck(this, SorobanDataBuilder); + sorobandata_builder_defineProperty(this, "_data", void 0); + var data; + if (!sorobanData) { + data = new src_xdr.SorobanTransactionData({ + resources: new src_xdr.SorobanResources({ + footprint: new src_xdr.LedgerFootprint({ + readOnly: [], + readWrite: [] + }), + instructions: 0, + readBytes: 0, + writeBytes: 0 + }), + ext: new src_xdr.ExtensionPoint(0), + resourceFee: new src_xdr.Int64(0) + }); + } else if (typeof sorobanData === 'string' || ArrayBuffer.isView(sorobanData)) { + data = SorobanDataBuilder.fromXDR(sorobanData); + } else { + data = SorobanDataBuilder.fromXDR(sorobanData.toXDR()); // copy + } + this._data = data; + } + + /** + * Decodes and builds a {@link xdr.SorobanTransactionData} instance. + * @param {Uint8Array|Buffer|string} data raw input to decode + * @returns {xdr.SorobanTransactionData} + */ + return sorobandata_builder_createClass(SorobanDataBuilder, [{ + key: "setResourceFee", + value: + /** + * Sets the resource fee portion of the Soroban data. + * @param {number | bigint | string} fee the resource fee to set (int64) + * @returns {SorobanDataBuilder} + */ + function setResourceFee(fee) { + this._data.resourceFee(new src_xdr.Int64(fee)); + return this; + } + + /** + * Sets up the resource metrics. + * + * You should almost NEVER need this, as its often generated / provided to you + * by transaction simulation/preflight from a Soroban RPC server. + * + * @param {number} cpuInstrs number of CPU instructions + * @param {number} readBytes number of bytes being read + * @param {number} writeBytes number of bytes being written + * + * @returns {SorobanDataBuilder} + */ + }, { + key: "setResources", + value: function setResources(cpuInstrs, readBytes, writeBytes) { + this._data.resources().instructions(cpuInstrs); + this._data.resources().readBytes(readBytes); + this._data.resources().writeBytes(writeBytes); + return this; + } + + /** + * Appends the given ledger keys to the existing storage access footprint. + * @param {xdr.LedgerKey[]} readOnly read-only keys to add + * @param {xdr.LedgerKey[]} readWrite read-write keys to add + * @returns {SorobanDataBuilder} this builder instance + */ + }, { + key: "appendFootprint", + value: function appendFootprint(readOnly, readWrite) { + return this.setFootprint(this.getReadOnly().concat(readOnly), this.getReadWrite().concat(readWrite)); + } + + /** + * Sets the storage access footprint to be a certain set of ledger keys. + * + * You can also set each field explicitly via + * {@link SorobanDataBuilder.setReadOnly} and + * {@link SorobanDataBuilder.setReadWrite} or add to the existing footprint + * via {@link SorobanDataBuilder.appendFootprint}. + * + * Passing `null|undefined` to either parameter will IGNORE the existing + * values. If you want to clear them, pass `[]`, instead. + * + * @param {xdr.LedgerKey[]|null} [readOnly] the set of ledger keys to set in + * the read-only portion of the transaction's `sorobanData`, or `null | + * undefined` to keep the existing keys + * @param {xdr.LedgerKey[]|null} [readWrite] the set of ledger keys to set in + * the read-write portion of the transaction's `sorobanData`, or `null | + * undefined` to keep the existing keys + * @returns {SorobanDataBuilder} this builder instance + */ + }, { + key: "setFootprint", + value: function setFootprint(readOnly, readWrite) { + if (readOnly !== null) { + // null means "leave me alone" + this.setReadOnly(readOnly); + } + if (readWrite !== null) { + this.setReadWrite(readWrite); + } + return this; + } + + /** + * @param {xdr.LedgerKey[]} readOnly read-only keys in the access footprint + * @returns {SorobanDataBuilder} + */ + }, { + key: "setReadOnly", + value: function setReadOnly(readOnly) { + this._data.resources().footprint().readOnly(readOnly !== null && readOnly !== void 0 ? readOnly : []); + return this; + } + + /** + * @param {xdr.LedgerKey[]} readWrite read-write keys in the access footprint + * @returns {SorobanDataBuilder} + */ + }, { + key: "setReadWrite", + value: function setReadWrite(readWrite) { + this._data.resources().footprint().readWrite(readWrite !== null && readWrite !== void 0 ? readWrite : []); + return this; + } + + /** + * @returns {xdr.SorobanTransactionData} a copy of the final data structure + */ + }, { + key: "build", + value: function build() { + return src_xdr.SorobanTransactionData.fromXDR(this._data.toXDR()); // clone + } + + // + // getters follow + // + + /** @returns {xdr.LedgerKey[]} the read-only storage access pattern */ + }, { + key: "getReadOnly", + value: function getReadOnly() { + return this.getFootprint().readOnly(); + } + + /** @returns {xdr.LedgerKey[]} the read-write storage access pattern */ + }, { + key: "getReadWrite", + value: function getReadWrite() { + return this.getFootprint().readWrite(); + } + + /** @returns {xdr.LedgerFootprint} the storage access pattern */ + }, { + key: "getFootprint", + value: function getFootprint() { + return this._data.resources().footprint(); + } + }], [{ + key: "fromXDR", + value: function fromXDR(data) { + return src_xdr.SorobanTransactionData.fromXDR(data, typeof data === 'string' ? 'base64' : 'raw'); + } + }]); +}(); +;// ./src/signerkey.js +function signerkey_typeof(o) { "@babel/helpers - typeof"; return signerkey_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, signerkey_typeof(o); } +function signerkey_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function signerkey_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, signerkey_toPropertyKey(o.key), o); } } +function signerkey_createClass(e, r, t) { return r && signerkey_defineProperties(e.prototype, r), t && signerkey_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function signerkey_toPropertyKey(t) { var i = signerkey_toPrimitive(t, "string"); return "symbol" == signerkey_typeof(i) ? i : i + ""; } +function signerkey_toPrimitive(t, r) { if ("object" != signerkey_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != signerkey_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + +/** + * A container class with helpers to convert between signer keys + * (`xdr.SignerKey`) and {@link StrKey}s. + * + * It's primarly used for manipulating the `extraSigners` precondition on a + * {@link Transaction}. + * + * @see {@link TransactionBuilder.setExtraSigners} + */ +var SignerKey = /*#__PURE__*/function () { + function SignerKey() { + signerkey_classCallCheck(this, SignerKey); + } + return signerkey_createClass(SignerKey, null, [{ + key: "decodeAddress", + value: + /** + * Decodes a StrKey address into an xdr.SignerKey instance. + * + * Only ED25519 public keys (G...), pre-auth transactions (T...), hashes + * (H...), and signed payloads (P...) can be signer keys. + * + * @param {string} address a StrKey-encoded signer address + * @returns {xdr.SignerKey} + */ + function decodeAddress(address) { + var signerKeyMap = { + ed25519PublicKey: src_xdr.SignerKey.signerKeyTypeEd25519, + preAuthTx: src_xdr.SignerKey.signerKeyTypePreAuthTx, + sha256Hash: src_xdr.SignerKey.signerKeyTypeHashX, + signedPayload: src_xdr.SignerKey.signerKeyTypeEd25519SignedPayload + }; + var vb = StrKey.getVersionByteForPrefix(address); + var encoder = signerKeyMap[vb]; + if (!encoder) { + throw new Error("invalid signer key type (".concat(vb, ")")); + } + var raw = decodeCheck(vb, address); + switch (vb) { + case 'signedPayload': + return encoder(new src_xdr.SignerKeyEd25519SignedPayload({ + ed25519: raw.slice(0, 32), + payload: raw.slice(32 + 4) + })); + case 'ed25519PublicKey': // falls through + case 'preAuthTx': // falls through + case 'sha256Hash': // falls through + default: + return encoder(raw); + } + } + + /** + * Encodes a signer key into its StrKey equivalent. + * + * @param {xdr.SignerKey} signerKey the signer + * @returns {string} the StrKey representation of the signer + */ + }, { + key: "encodeSignerKey", + value: function encodeSignerKey(signerKey) { + var strkeyType; + var raw; + switch (signerKey["switch"]()) { + case src_xdr.SignerKeyType.signerKeyTypeEd25519(): + strkeyType = 'ed25519PublicKey'; + raw = signerKey.value(); + break; + case src_xdr.SignerKeyType.signerKeyTypePreAuthTx(): + strkeyType = 'preAuthTx'; + raw = signerKey.value(); + break; + case src_xdr.SignerKeyType.signerKeyTypeHashX(): + strkeyType = 'sha256Hash'; + raw = signerKey.value(); + break; + case src_xdr.SignerKeyType.signerKeyTypeEd25519SignedPayload(): + strkeyType = 'signedPayload'; + raw = signerKey.ed25519SignedPayload().toXDR('raw'); + break; + default: + throw new Error("invalid SignerKey (type: ".concat(signerKey["switch"](), ")")); + } + return encodeCheck(strkeyType, raw); + } + }]); +}(); +;// ./src/transaction_builder.js +function transaction_builder_typeof(o) { "@babel/helpers - typeof"; return transaction_builder_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, transaction_builder_typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || transaction_builder_unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function transaction_builder_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return transaction_builder_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? transaction_builder_arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return transaction_builder_arrayLikeToArray(r); } +function transaction_builder_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function transaction_builder_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function transaction_builder_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? transaction_builder_ownKeys(Object(t), !0).forEach(function (r) { transaction_builder_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : transaction_builder_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function transaction_builder_defineProperty(e, r, t) { return (r = transaction_builder_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function transaction_builder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function transaction_builder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, transaction_builder_toPropertyKey(o.key), o); } } +function transaction_builder_createClass(e, r, t) { return r && transaction_builder_defineProperties(e.prototype, r), t && transaction_builder_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function transaction_builder_toPropertyKey(t) { var i = transaction_builder_toPrimitive(t, "string"); return "symbol" == transaction_builder_typeof(i) ? i : i + ""; } +function transaction_builder_toPrimitive(t, r) { if ("object" != transaction_builder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != transaction_builder_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + + + + + + + + +/** + * Minimum base fee for transactions. If this fee is below the network + * minimum, the transaction will fail. The more operations in the + * transaction, the greater the required fee. Use {@link + * Server#fetchBaseFee} to get an accurate value of minimum transaction + * fee on the network. + * + * @constant + * @see [Fees](https://developers.stellar.org/docs/glossary/fees/) + */ +var BASE_FEE = '100'; // Stroops + +/** + * @constant + * @see {@link TransactionBuilder#setTimeout} + * @see [Timeout](https://developers.stellar.org/api/resources/transactions/post/) + */ +var TimeoutInfinite = 0; + +/** + *

Transaction builder helps constructs a new `{@link Transaction}` using the + * given {@link Account} as the transaction's "source account". The transaction + * will use the current sequence number of the given account as its sequence + * number and increment the given account's sequence number by one. The given + * source account must include a private key for signing the transaction or an + * error will be thrown.

+ * + *

Operations can be added to the transaction via their corresponding builder + * methods, and each returns the TransactionBuilder object so they can be + * chained together. After adding the desired operations, call the `build()` + * method on the `TransactionBuilder` to return a fully constructed `{@link + * Transaction}` that can be signed. The returned transaction will contain the + * sequence number of the source account and include the signature from the + * source account.

+ * + *

Be careful about unsubmitted transactions! When you build + * a transaction, `stellar-sdk` automatically increments the source account's + * sequence number. If you end up not submitting this transaction and submitting + * another one instead, it'll fail due to the sequence number being wrong. So if + * you decide not to use a built transaction, make sure to update the source + * account's sequence number with + * [Server.loadAccount](https://stellar.github.io/js-stellar-sdk/Server.html#loadAccount) + * before creating another transaction.

+ * + *

The following code example creates a new transaction with {@link + * Operation.createAccount} and {@link Operation.payment} operations. The + * Transaction's source account first funds `destinationA`, then sends a payment + * to `destinationB`. The built transaction is then signed by + * `sourceKeypair`.

+ * + * ``` + * var transaction = new TransactionBuilder(source, { fee, networkPassphrase: Networks.TESTNET }) + * .addOperation(Operation.createAccount({ + * destination: destinationA, + * startingBalance: "20" + * })) // <- funds and creates destinationA + * .addOperation(Operation.payment({ + * destination: destinationB, + * amount: "100", + * asset: Asset.native() + * })) // <- sends 100 XLM to destinationB + * .setTimeout(30) + * .build(); + * + * transaction.sign(sourceKeypair); + * ``` + * + * @constructor + * + * @param {Account} sourceAccount - source account for this transaction + * @param {object} opts - Options object + * @param {string} opts.fee - max fee you're willing to pay per + * operation in this transaction (**in stroops**) + * + * @param {object} [opts.timebounds] - timebounds for the + * validity of this transaction + * @param {number|string|Date} [opts.timebounds.minTime] - 64-bit UNIX + * timestamp or Date object + * @param {number|string|Date} [opts.timebounds.maxTime] - 64-bit UNIX + * timestamp or Date object + * @param {object} [opts.ledgerbounds] - ledger bounds for the + * validity of this transaction + * @param {number} [opts.ledgerbounds.minLedger] - number of the minimum + * ledger sequence + * @param {number} [opts.ledgerbounds.maxLedger] - number of the maximum + * ledger sequence + * @param {string} [opts.minAccountSequence] - number for + * the minimum account sequence + * @param {number} [opts.minAccountSequenceAge] - number of + * seconds for the minimum account sequence age + * @param {number} [opts.minAccountSequenceLedgerGap] - number of + * ledgers for the minimum account sequence ledger gap + * @param {string[]} [opts.extraSigners] - list of the extra signers + * required for this transaction + * @param {Memo} [opts.memo] - memo for the transaction + * @param {string} [opts.networkPassphrase] passphrase of the + * target Stellar network (e.g. "Public Global Stellar Network ; September + * 2015" for the pubnet) + * @param {xdr.SorobanTransactionData | string} [opts.sorobanData] - an + * optional instance of {@link xdr.SorobanTransactionData} to be set as the + * internal `Transaction.Ext.SorobanData` field (either the xdr object or a + * base64 string). In the case of Soroban transactions, this can be obtained + * from a prior simulation of the transaction with a contract invocation and + * provides necessary resource estimations. You can also use + * {@link SorobanDataBuilder} to construct complicated combinations of + * parameters without mucking with XDR directly. **Note:** For + * non-contract(non-Soroban) transactions, this has no effect. + */ +var TransactionBuilder = /*#__PURE__*/function () { + function TransactionBuilder(sourceAccount) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + transaction_builder_classCallCheck(this, TransactionBuilder); + if (!sourceAccount) { + throw new Error('must specify source account for the transaction'); + } + if (opts.fee === undefined) { + throw new Error('must specify fee for the transaction (in stroops)'); + } + this.source = sourceAccount; + this.operations = []; + this.baseFee = opts.fee; + this.timebounds = opts.timebounds ? transaction_builder_objectSpread({}, opts.timebounds) : null; + this.ledgerbounds = opts.ledgerbounds ? transaction_builder_objectSpread({}, opts.ledgerbounds) : null; + this.minAccountSequence = opts.minAccountSequence || null; + this.minAccountSequenceAge = opts.minAccountSequenceAge || null; + this.minAccountSequenceLedgerGap = opts.minAccountSequenceLedgerGap || null; + this.extraSigners = opts.extraSigners ? _toConsumableArray(opts.extraSigners) : null; + this.memo = opts.memo || Memo.none(); + this.networkPassphrase = opts.networkPassphrase || null; + this.sorobanData = opts.sorobanData ? new SorobanDataBuilder(opts.sorobanData).build() : null; + } + + /** + * Creates a builder instance using an existing {@link Transaction} as a + * template, ignoring any existing envelope signatures. + * + * Note that the sequence number WILL be cloned, so EITHER this transaction or + * the one it was cloned from will be valid. This is useful in situations + * where you are constructing a transaction in pieces and need to make + * adjustments as you go (for example, when filling out Soroban resource + * information). + * + * @param {Transaction} tx a "template" transaction to clone exactly + * @param {object} [opts] additional options to override the clone, e.g. + * {fee: '1000'} will override the existing base fee derived from `tx` (see + * the {@link TransactionBuilder} constructor for detailed options) + * + * @returns {TransactionBuilder} a "prepared" builder instance with the same + * configuration and operations as the given transaction + * + * @warning This does not clone the transaction's + * {@link xdr.SorobanTransactionData} (if applicable), use + * {@link SorobanDataBuilder} and {@link TransactionBuilder.setSorobanData} + * as needed, instead.. + * + * @todo This cannot clone {@link FeeBumpTransaction}s, yet. + */ + return transaction_builder_createClass(TransactionBuilder, [{ + key: "addOperation", + value: + /** + * Adds an operation to the transaction. + * + * @param {xdr.Operation} operation The xdr operation object, use {@link + * Operation} static methods. + * + * @returns {TransactionBuilder} + */ + function addOperation(operation) { + this.operations.push(operation); + return this; + } + + /** + * Adds an operation to the transaction at a specific index. + * + * @param {xdr.Operation} operation - The xdr operation object to add, use {@link Operation} static methods. + * @param {number} index - The index at which to insert the operation. + * + * @returns {TransactionBuilder} - The TransactionBuilder instance for method chaining. + */ + }, { + key: "addOperationAt", + value: function addOperationAt(operation, index) { + this.operations.splice(index, 0, operation); + return this; + } + + /** + * Removes the operations from the builder (useful when cloning). + * @returns {TransactionBuilder} this builder instance + */ + }, { + key: "clearOperations", + value: function clearOperations() { + this.operations = []; + return this; + } + + /** + * Removes the operation at the specified index from the transaction. + * + * @param {number} index - The index of the operation to remove. + * + * @returns {TransactionBuilder} The TransactionBuilder instance for method chaining. + */ + }, { + key: "clearOperationAt", + value: function clearOperationAt(index) { + this.operations.splice(index, 1); + return this; + } + + /** + * Adds a memo to the transaction. + * @param {Memo} memo {@link Memo} object + * @returns {TransactionBuilder} + */ + }, { + key: "addMemo", + value: function addMemo(memo) { + this.memo = memo; + return this; + } + + /** + * Sets a timeout precondition on the transaction. + * + * Because of the distributed nature of the Stellar network it is possible + * that the status of your transaction will be determined after a long time + * if the network is highly congested. If you want to be sure to receive the + * status of the transaction within a given period you should set the {@link + * TimeBounds} with `maxTime` on the transaction (this is what `setTimeout` + * does internally; if there's `minTime` set but no `maxTime` it will be + * added). + * + * A call to `TransactionBuilder.setTimeout` is **required** if Transaction + * does not have `max_time` set. If you don't want to set timeout, use + * `{@link TimeoutInfinite}`. In general you should set `{@link + * TimeoutInfinite}` only in smart contracts. + * + * Please note that Horizon may still return 504 Gateway Timeout + * error, even for short timeouts. In such case you need to resubmit the same + * transaction again without making any changes to receive a status. This + * method is using the machine system time (UTC), make sure it is set + * correctly. + * + * @param {number} timeoutSeconds Number of seconds the transaction is good. + * Can't be negative. If the value is {@link TimeoutInfinite}, the + * transaction is good indefinitely. + * + * @returns {TransactionBuilder} + * + * @see {@link TimeoutInfinite} + * @see https://developers.stellar.org/docs/tutorials/handling-errors/ + */ + }, { + key: "setTimeout", + value: function setTimeout(timeoutSeconds) { + if (this.timebounds !== null && this.timebounds.maxTime > 0) { + throw new Error('TimeBounds.max_time has been already set - setting timeout would overwrite it.'); + } + if (timeoutSeconds < 0) { + throw new Error('timeout cannot be negative'); + } + if (timeoutSeconds > 0) { + var timeoutTimestamp = Math.floor(Date.now() / 1000) + timeoutSeconds; + if (this.timebounds === null) { + this.timebounds = { + minTime: 0, + maxTime: timeoutTimestamp + }; + } else { + this.timebounds = { + minTime: this.timebounds.minTime, + maxTime: timeoutTimestamp + }; + } + } else { + this.timebounds = { + minTime: 0, + maxTime: 0 + }; + } + return this; + } + + /** + * If you want to prepare a transaction which will become valid at some point + * in the future, or be invalid after some time, you can set a timebounds + * precondition. Internally this will set the `minTime`, and `maxTime` + * preconditions. Conflicts with `setTimeout`, so use one or the other. + * + * @param {Date|number} minEpochOrDate Either a JS Date object, or a number + * of UNIX epoch seconds. The transaction is valid after this timestamp. + * Can't be negative. If the value is `0`, the transaction is valid + * immediately. + * @param {Date|number} maxEpochOrDate Either a JS Date object, or a number + * of UNIX epoch seconds. The transaction is valid until this timestamp. + * Can't be negative. If the value is `0`, the transaction is valid + * indefinitely. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setTimebounds", + value: function setTimebounds(minEpochOrDate, maxEpochOrDate) { + // Force it to a date type + if (typeof minEpochOrDate === 'number') { + minEpochOrDate = new Date(minEpochOrDate * 1000); + } + if (typeof maxEpochOrDate === 'number') { + maxEpochOrDate = new Date(maxEpochOrDate * 1000); + } + if (this.timebounds !== null) { + throw new Error('TimeBounds has been already set - setting timebounds would overwrite it.'); + } + + // Convert that date to the epoch seconds + var minTime = Math.floor(minEpochOrDate.valueOf() / 1000); + var maxTime = Math.floor(maxEpochOrDate.valueOf() / 1000); + if (minTime < 0) { + throw new Error('min_time cannot be negative'); + } + if (maxTime < 0) { + throw new Error('max_time cannot be negative'); + } + if (maxTime > 0 && minTime > maxTime) { + throw new Error('min_time cannot be greater than max_time'); + } + this.timebounds = { + minTime: minTime, + maxTime: maxTime + }; + return this; + } + + /** + * If you want to prepare a transaction which will only be valid within some + * range of ledgers, you can set a ledgerbounds precondition. + * Internally this will set the `minLedger` and `maxLedger` preconditions. + * + * @param {number} minLedger The minimum ledger this transaction is valid at + * or after. Cannot be negative. If the value is `0` (the default), the + * transaction is valid immediately. + * + * @param {number} maxLedger The maximum ledger this transaction is valid + * before. Cannot be negative. If the value is `0`, the transaction is + * valid indefinitely. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setLedgerbounds", + value: function setLedgerbounds(minLedger, maxLedger) { + if (this.ledgerbounds !== null) { + throw new Error('LedgerBounds has been already set - setting ledgerbounds would overwrite it.'); + } + if (minLedger < 0) { + throw new Error('min_ledger cannot be negative'); + } + if (maxLedger < 0) { + throw new Error('max_ledger cannot be negative'); + } + if (maxLedger > 0 && minLedger > maxLedger) { + throw new Error('min_ledger cannot be greater than max_ledger'); + } + this.ledgerbounds = { + minLedger: minLedger, + maxLedger: maxLedger + }; + return this; + } + + /** + * If you want to prepare a transaction which will be valid only while the + * account sequence number is + * + * minAccountSequence <= sourceAccountSequence < tx.seqNum + * + * Note that after execution the account's sequence number is always raised to + * `tx.seqNum`. Internally this will set the `minAccountSequence` + * precondition. + * + * @param {string} minAccountSequence The minimum source account sequence + * number this transaction is valid for. If the value is `0` (the + * default), the transaction is valid when `sourceAccount's sequence + * number == tx.seqNum- 1`. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setMinAccountSequence", + value: function setMinAccountSequence(minAccountSequence) { + if (this.minAccountSequence !== null) { + throw new Error('min_account_sequence has been already set - setting min_account_sequence would overwrite it.'); + } + this.minAccountSequence = minAccountSequence; + return this; + } + + /** + * For the transaction to be valid, the current ledger time must be at least + * `minAccountSequenceAge` greater than sourceAccount's `sequenceTime`. + * Internally this will set the `minAccountSequenceAge` precondition. + * + * @param {number} durationInSeconds The minimum amount of time between + * source account sequence time and the ledger time when this transaction + * will become valid. If the value is `0`, the transaction is unrestricted + * by the account sequence age. Cannot be negative. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setMinAccountSequenceAge", + value: function setMinAccountSequenceAge(durationInSeconds) { + if (typeof durationInSeconds !== 'number') { + throw new Error('min_account_sequence_age must be a number'); + } + if (this.minAccountSequenceAge !== null) { + throw new Error('min_account_sequence_age has been already set - setting min_account_sequence_age would overwrite it.'); + } + if (durationInSeconds < 0) { + throw new Error('min_account_sequence_age cannot be negative'); + } + this.minAccountSequenceAge = durationInSeconds; + return this; + } + + /** + * For the transaction to be valid, the current ledger number must be at least + * `minAccountSequenceLedgerGap` greater than sourceAccount's ledger sequence. + * Internally this will set the `minAccountSequenceLedgerGap` precondition. + * + * @param {number} gap The minimum number of ledgers between source account + * sequence and the ledger number when this transaction will become valid. + * If the value is `0`, the transaction is unrestricted by the account + * sequence ledger. Cannot be negative. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setMinAccountSequenceLedgerGap", + value: function setMinAccountSequenceLedgerGap(gap) { + if (this.minAccountSequenceLedgerGap !== null) { + throw new Error('min_account_sequence_ledger_gap has been already set - setting min_account_sequence_ledger_gap would overwrite it.'); + } + if (gap < 0) { + throw new Error('min_account_sequence_ledger_gap cannot be negative'); + } + this.minAccountSequenceLedgerGap = gap; + return this; + } + + /** + * For the transaction to be valid, there must be a signature corresponding to + * every Signer in this array, even if the signature is not otherwise required + * by the sourceAccount or operations. Internally this will set the + * `extraSigners` precondition. + * + * @param {string[]} extraSigners required extra signers (as {@link StrKey}s) + * + * @returns {TransactionBuilder} + */ + }, { + key: "setExtraSigners", + value: function setExtraSigners(extraSigners) { + if (!Array.isArray(extraSigners)) { + throw new Error('extra_signers must be an array of strings.'); + } + if (this.extraSigners !== null) { + throw new Error('extra_signers has been already set - setting extra_signers would overwrite it.'); + } + if (extraSigners.length > 2) { + throw new Error('extra_signers cannot be longer than 2 elements.'); + } + this.extraSigners = _toConsumableArray(extraSigners); + return this; + } + + /** + * Set network nassphrase for the Transaction that will be built. + * + * @param {string} networkPassphrase passphrase of the target Stellar + * network (e.g. "Public Global Stellar Network ; September 2015"). + * + * @returns {TransactionBuilder} + */ + }, { + key: "setNetworkPassphrase", + value: function setNetworkPassphrase(networkPassphrase) { + this.networkPassphrase = networkPassphrase; + return this; + } + + /** + * Sets the transaction's internal Soroban transaction data (resources, + * footprint, etc.). + * + * For non-contract(non-Soroban) transactions, this setting has no effect. In + * the case of Soroban transactions, this is either an instance of + * {@link xdr.SorobanTransactionData} or a base64-encoded string of said + * structure. This is usually obtained from the simulation response based on a + * transaction with a Soroban operation (e.g. + * {@link Operation.invokeHostFunction}, providing necessary resource + * and storage footprint estimations for contract invocation. + * + * @param {xdr.SorobanTransactionData | string} sorobanData the + * {@link xdr.SorobanTransactionData} as a raw xdr object or a base64 + * string to be decoded + * + * @returns {TransactionBuilder} + * @see {SorobanDataBuilder} + */ + }, { + key: "setSorobanData", + value: function setSorobanData(sorobanData) { + this.sorobanData = new SorobanDataBuilder(sorobanData).build(); + return this; + } + + /** + * This will build the transaction. + * It will also increment the source account's sequence number by 1. + * @returns {Transaction} This method will return the built {@link Transaction}. + */ + }, { + key: "build", + value: function build() { + var sequenceNumber = new util_bignumber(this.source.sequenceNumber()).plus(1); + var fee = new util_bignumber(this.baseFee).times(this.operations.length).toNumber(); + var attrs = { + fee: fee, + seqNum: src_xdr.SequenceNumber.fromString(sequenceNumber.toString()), + memo: this.memo ? this.memo.toXDRObject() : null + }; + if (this.timebounds === null || typeof this.timebounds.minTime === 'undefined' || typeof this.timebounds.maxTime === 'undefined') { + throw new Error('TimeBounds has to be set or you must call setTimeout(TimeoutInfinite).'); + } + if (isValidDate(this.timebounds.minTime)) { + this.timebounds.minTime = this.timebounds.minTime.getTime() / 1000; + } + if (isValidDate(this.timebounds.maxTime)) { + this.timebounds.maxTime = this.timebounds.maxTime.getTime() / 1000; + } + this.timebounds.minTime = xdr.UnsignedHyper.fromString(this.timebounds.minTime.toString()); + this.timebounds.maxTime = xdr.UnsignedHyper.fromString(this.timebounds.maxTime.toString()); + var timeBounds = new src_xdr.TimeBounds(this.timebounds); + if (this.hasV2Preconditions()) { + var ledgerBounds = null; + if (this.ledgerbounds !== null) { + ledgerBounds = new src_xdr.LedgerBounds(this.ledgerbounds); + } + var minSeqNum = this.minAccountSequence || '0'; + minSeqNum = src_xdr.SequenceNumber.fromString(minSeqNum); + var minSeqAge = xdr.UnsignedHyper.fromString(this.minAccountSequenceAge !== null ? this.minAccountSequenceAge.toString() : '0'); + var minSeqLedgerGap = this.minAccountSequenceLedgerGap || 0; + var extraSigners = this.extraSigners !== null ? this.extraSigners.map(SignerKey.decodeAddress) : []; + attrs.cond = src_xdr.Preconditions.precondV2(new src_xdr.PreconditionsV2({ + timeBounds: timeBounds, + ledgerBounds: ledgerBounds, + minSeqNum: minSeqNum, + minSeqAge: minSeqAge, + minSeqLedgerGap: minSeqLedgerGap, + extraSigners: extraSigners + })); + } else { + attrs.cond = src_xdr.Preconditions.precondTime(timeBounds); + } + attrs.sourceAccount = decodeAddressToMuxedAccount(this.source.accountId()); + + // TODO - remove this workaround for TransactionExt ts constructor + // and use the typescript generated static factory method once fixed + // https://github.com/stellar/dts-xdr/issues/5 + if (this.sorobanData) { + // @ts-ignore + attrs.ext = new src_xdr.TransactionExt(1, this.sorobanData); + } else { + // @ts-ignore + attrs.ext = new src_xdr.TransactionExt(0, src_xdr.Void); + } + var xtx = new src_xdr.Transaction(attrs); + xtx.operations(this.operations); + var txEnvelope = new src_xdr.TransactionEnvelope.envelopeTypeTx(new src_xdr.TransactionV1Envelope({ + tx: xtx + })); + var tx = new Transaction(txEnvelope, this.networkPassphrase); + this.source.incrementSequenceNumber(); + return tx; + } + }, { + key: "hasV2Preconditions", + value: function hasV2Preconditions() { + return this.ledgerbounds !== null || this.minAccountSequence !== null || this.minAccountSequenceAge !== null || this.minAccountSequenceLedgerGap !== null || this.extraSigners !== null && this.extraSigners.length > 0; + } + + /** + * Builds a {@link FeeBumpTransaction}, enabling you to resubmit an existing + * transaction with a higher fee. + * + * @param {Keypair|string} feeSource - account paying for the transaction, + * in the form of either a Keypair (only the public key is used) or + * an account ID (in G... or M... form, but refer to `withMuxing`) + * @param {string} baseFee - max fee willing to pay per operation + * in inner transaction (**in stroops**) + * @param {Transaction} innerTx - {@link Transaction} to be bumped by + * the fee bump transaction + * @param {string} networkPassphrase - passphrase of the target + * Stellar network (e.g. "Public Global Stellar Network ; September 2015", + * see {@link Networks}) + * + * @todo Alongside the next major version bump, this type signature can be + * changed to be less awkward: accept a MuxedAccount as the `feeSource` + * rather than a keypair or string. + * + * @note Your fee-bump amount should be >= 10x the original fee. + * @see https://developers.stellar.org/docs/glossary/fee-bumps/#replace-by-fee + * + * @returns {FeeBumpTransaction} + */ + }], [{ + key: "cloneFrom", + value: function cloneFrom(tx) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if (!(tx instanceof Transaction)) { + throw new TypeError("expected a 'Transaction', got: ".concat(tx)); + } + var sequenceNum = (BigInt(tx.sequence) - 1n).toString(); + var source; + // rebuild the source account based on the strkey + if (StrKey.isValidMed25519PublicKey(tx.source)) { + source = MuxedAccount.fromAddress(tx.source, sequenceNum); + } else if (StrKey.isValidEd25519PublicKey(tx.source)) { + source = new Account(tx.source, sequenceNum); + } else { + throw new TypeError("unsupported tx source account: ".concat(tx.source)); + } + + // the initial fee passed to the builder gets scaled up based on the number + // of operations at the end, so we have to down-scale first + var unscaledFee = parseInt(tx.fee, 10) / tx.operations.length; + var builder = new TransactionBuilder(source, transaction_builder_objectSpread({ + fee: (unscaledFee || BASE_FEE).toString(), + memo: tx.memo, + networkPassphrase: tx.networkPassphrase, + timebounds: tx.timeBounds, + ledgerbounds: tx.ledgerBounds, + minAccountSequence: tx.minAccountSequence, + minAccountSequenceAge: tx.minAccountSequenceAge, + minAccountSequenceLedgerGap: tx.minAccountSequenceLedgerGap, + extraSigners: tx.extraSigners + }, opts)); + tx._tx.operations().forEach(function (op) { + return builder.addOperation(op); + }); + return builder; + } + }, { + key: "buildFeeBumpTransaction", + value: function buildFeeBumpTransaction(feeSource, baseFee, innerTx, networkPassphrase) { + var innerOps = innerTx.operations.length; + var innerBaseFeeRate = new util_bignumber(innerTx.fee).div(innerOps); + var base = new util_bignumber(baseFee); + + // The fee rate for fee bump is at least the fee rate of the inner transaction + if (base.lt(innerBaseFeeRate)) { + throw new Error("Invalid baseFee, it should be at least ".concat(innerBaseFeeRate, " stroops.")); + } + var minBaseFee = new util_bignumber(BASE_FEE); + + // The fee rate is at least the minimum fee + if (base.lt(minBaseFee)) { + throw new Error("Invalid baseFee, it should be at least ".concat(minBaseFee, " stroops.")); + } + var innerTxEnvelope = innerTx.toEnvelope(); + if (innerTxEnvelope["switch"]() === src_xdr.EnvelopeType.envelopeTypeTxV0()) { + var v0Tx = innerTxEnvelope.v0().tx(); + var v1Tx = new src_xdr.Transaction({ + sourceAccount: new src_xdr.MuxedAccount.keyTypeEd25519(v0Tx.sourceAccountEd25519()), + fee: v0Tx.fee(), + seqNum: v0Tx.seqNum(), + cond: src_xdr.Preconditions.precondTime(v0Tx.timeBounds()), + memo: v0Tx.memo(), + operations: v0Tx.operations(), + ext: new src_xdr.TransactionExt(0) + }); + innerTxEnvelope = new src_xdr.TransactionEnvelope.envelopeTypeTx(new src_xdr.TransactionV1Envelope({ + tx: v1Tx, + signatures: innerTxEnvelope.v0().signatures() + })); + } + var feeSourceAccount; + if (typeof feeSource === 'string') { + feeSourceAccount = decodeAddressToMuxedAccount(feeSource); + } else { + feeSourceAccount = feeSource.xdrMuxedAccount(); + } + var tx = new src_xdr.FeeBumpTransaction({ + feeSource: feeSourceAccount, + fee: src_xdr.Int64.fromString(base.times(innerOps + 1).toString()), + innerTx: src_xdr.FeeBumpTransactionInnerTx.envelopeTypeTx(innerTxEnvelope.v1()), + ext: new src_xdr.FeeBumpTransactionExt(0) + }); + var feeBumpTxEnvelope = new src_xdr.FeeBumpTransactionEnvelope({ + tx: tx, + signatures: [] + }); + var envelope = new src_xdr.TransactionEnvelope.envelopeTypeTxFeeBump(feeBumpTxEnvelope); + return new FeeBumpTransaction(envelope, networkPassphrase); + } + + /** + * Build a {@link Transaction} or {@link FeeBumpTransaction} from an + * xdr.TransactionEnvelope. + * + * @param {string|xdr.TransactionEnvelope} envelope - The transaction envelope + * object or base64 encoded string. + * @param {string} networkPassphrase - The network passphrase of the target + * Stellar network (e.g. "Public Global Stellar Network ; September + * 2015"), see {@link Networks}. + * + * @returns {Transaction|FeeBumpTransaction} + */ + }, { + key: "fromXDR", + value: function fromXDR(envelope, networkPassphrase) { + if (typeof envelope === 'string') { + envelope = src_xdr.TransactionEnvelope.fromXDR(envelope, 'base64'); + } + if (envelope["switch"]() === src_xdr.EnvelopeType.envelopeTypeTxFeeBump()) { + return new FeeBumpTransaction(envelope, networkPassphrase); + } + return new Transaction(envelope, networkPassphrase); + } + }]); +}(); + +/** + * Checks whether a provided object is a valid Date. + * @argument {Date} d date object + * @returns {boolean} + */ +function isValidDate(d) { + // isnan is okay here because it correctly checks for invalid date objects + // eslint-disable-next-line no-restricted-globals + return d instanceof Date && !isNaN(d); +} +;// ./src/network.js +/** + * Contains passphrases for common networks: + * * `Networks.PUBLIC`: `Public Global Stellar Network ; September 2015` + * * `Networks.TESTNET`: `Test SDF Network ; September 2015` + * * `Networks.FUTURENET`: `Test SDF Future Network ; October 2022` + * * `Networks.STANDALONE`: `Standalone Network ; February 2017` + * + * @type {{PUBLIC: string, TESTNET: string, FUTURENET: string, STANDALONE: string }} + */ +var Networks = { + PUBLIC: 'Public Global Stellar Network ; September 2015', + TESTNET: 'Test SDF Network ; September 2015', + FUTURENET: 'Test SDF Future Network ; October 2022', + SANDBOX: 'Local Sandbox Stellar Network ; September 2022', + STANDALONE: 'Standalone Network ; February 2017' +}; +;// ./src/soroban.js +function soroban_typeof(o) { "@babel/helpers - typeof"; return soroban_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, soroban_typeof(o); } +function _toArray(r) { return soroban_arrayWithHoles(r) || soroban_iterableToArray(r) || soroban_unsupportedIterableToArray(r) || soroban_nonIterableRest(); } +function soroban_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function soroban_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return soroban_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? soroban_arrayLikeToArray(r, a) : void 0; } } +function soroban_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function soroban_iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function soroban_arrayWithHoles(r) { if (Array.isArray(r)) return r; } +function soroban_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function soroban_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, soroban_toPropertyKey(o.key), o); } } +function soroban_createClass(e, r, t) { return r && soroban_defineProperties(e.prototype, r), t && soroban_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function soroban_toPropertyKey(t) { var i = soroban_toPrimitive(t, "string"); return "symbol" == soroban_typeof(i) ? i : i + ""; } +function soroban_toPrimitive(t, r) { if ("object" != soroban_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != soroban_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* Helper class to assist with formatting and parsing token amounts. */ +var Soroban = /*#__PURE__*/function () { + function Soroban() { + soroban_classCallCheck(this, Soroban); + } + return soroban_createClass(Soroban, null, [{ + key: "formatTokenAmount", + value: + /** + * Given a whole number smart contract amount of a token and an amount of + * decimal places (if the token has any), it returns a "display" value. + * + * All arithmetic inside the contract is performed on integers to avoid + * potential precision and consistency issues of floating-point. + * + * @param {string} amount the token amount you want to display + * @param {number} decimals specify how many decimal places a token has + * + * @returns {string} the display value + * @throws {TypeError} if the given amount has a decimal point already + * @example + * formatTokenAmount("123000", 4) === "12.3"; + */ + function formatTokenAmount(amount, decimals) { + if (amount.includes('.')) { + throw new TypeError('No decimals are allowed'); + } + var formatted = amount; + if (decimals > 0) { + if (decimals > formatted.length) { + formatted = ['0', formatted.toString().padStart(decimals, '0')].join('.'); + } else { + formatted = [formatted.slice(0, -decimals), formatted.slice(-decimals)].join('.'); + } + } + + // remove trailing zero if any + return formatted.replace(/(\.\d*?)0+$/, '$1'); + } + + /** + * Parse a token amount to use it on smart contract + * + * This function takes the display value and its decimals (if the token has + * any) and returns a string that'll be used within the smart contract. + * + * @param {string} value the token amount you want to use it on smart + * contract which you've been displaying in a UI + * @param {number} decimals the number of decimal places expected in the + * display value (different than the "actual" number, because suffix zeroes + * might not be present) + * + * @returns {string} the whole number token amount represented by the display + * value with the decimal places shifted over + * + * @example + * const displayValueAmount = "123.4560" + * const parsedAmtForSmartContract = parseTokenAmount(displayValueAmount, 5); + * parsedAmtForSmartContract === "12345600" + */ + }, { + key: "parseTokenAmount", + value: function parseTokenAmount(value, decimals) { + var _fraction$padEnd; + var _value$split$slice = value.split('.').slice(), + _value$split$slice2 = _toArray(_value$split$slice), + whole = _value$split$slice2[0], + fraction = _value$split$slice2[1], + rest = _value$split$slice2.slice(2); + if (rest.length) { + throw new Error("Invalid decimal value: ".concat(value)); + } + var shifted = BigInt(whole + ((_fraction$padEnd = fraction === null || fraction === void 0 ? void 0 : fraction.padEnd(decimals, '0')) !== null && _fraction$padEnd !== void 0 ? _fraction$padEnd : '0'.repeat(decimals))); + return shifted.toString(); + } + }]); +}(); +;// ./src/contract.js +function contract_typeof(o) { "@babel/helpers - typeof"; return contract_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, contract_typeof(o); } +function contract_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function contract_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, contract_toPropertyKey(o.key), o); } } +function contract_createClass(e, r, t) { return r && contract_defineProperties(e.prototype, r), t && contract_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function contract_toPropertyKey(t) { var i = contract_toPrimitive(t, "string"); return "symbol" == contract_typeof(i) ? i : i + ""; } +function contract_toPrimitive(t, r) { if ("object" != contract_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != contract_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + +/** + * Create a new Contract object. + * + * `Contract` represents a single contract in the Stellar network, embodying the + * interface of the contract. See + * [Contracts](https://soroban.stellar.org/docs/learn/interacting-with-contracts) + * for more information about how contracts work in Stellar. + * + * @constructor + * + * @param {string} contractId - ID of the contract (ex. + * `CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE`). + */ +var Contract = /*#__PURE__*/function () { + function Contract(contractId) { + contract_classCallCheck(this, Contract); + try { + // First, try it as a strkey + this._id = StrKey.decodeContract(contractId); + } catch (_) { + throw new Error("Invalid contract ID: ".concat(contractId)); + } + } + + /** + * Returns Stellar contract ID as a strkey, ex. + * `CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE`. + * @returns {string} + */ + return contract_createClass(Contract, [{ + key: "contractId", + value: function contractId() { + return StrKey.encodeContract(this._id); + } + + /** @returns {string} the ID as a strkey (C...) */ + }, { + key: "toString", + value: function toString() { + return this.contractId(); + } + + /** @returns {Address} the wrapped address of this contract */ + }, { + key: "address", + value: function address() { + return Address.contract(this._id); + } + + /** + * Returns an operation that will invoke this contract call. + * + * @param {string} method name of the method to call + * @param {...xdr.ScVal} params arguments to pass to the function call + * + * @returns {xdr.Operation} an InvokeHostFunctionOp operation to call the + * contract with the given method and parameters + * + * @see Operation.invokeHostFunction + * @see Operation.invokeContractFunction + * @see Operation.createCustomContract + * @see Operation.createStellarAssetContract + * @see Operation.uploadContractWasm + */ + }, { + key: "call", + value: function call(method) { + for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + params[_key - 1] = arguments[_key]; + } + return Operation.invokeContractFunction({ + contract: this.address().toString(), + "function": method, + args: params + }); + } + + /** + * Returns the read-only footprint entries necessary for any invocations to + * this contract, for convenience when manually adding it to your + * transaction's overall footprint or doing bump/restore operations. + * + * @returns {xdr.LedgerKey} the ledger key for the deployed contract instance + */ + }, { + key: "getFootprint", + value: function getFootprint() { + return src_xdr.LedgerKey.contractData(new src_xdr.LedgerKeyContractData({ + contract: this.address().toScAddress(), + key: src_xdr.ScVal.scvLedgerKeyContractInstance(), + durability: src_xdr.ContractDataDurability.persistent() + })); + } + }]); +}(); +;// ./src/numbers/uint128.js +function uint128_typeof(o) { "@babel/helpers - typeof"; return uint128_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, uint128_typeof(o); } +function uint128_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function uint128_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, uint128_toPropertyKey(o.key), o); } } +function uint128_createClass(e, r, t) { return r && uint128_defineProperties(e.prototype, r), t && uint128_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function uint128_toPropertyKey(t) { var i = uint128_toPrimitive(t, "string"); return "symbol" == uint128_typeof(i) ? i : i + ""; } +function uint128_toPrimitive(t, r) { if ("object" != uint128_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != uint128_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function uint128_callSuper(t, o, e) { return o = uint128_getPrototypeOf(o), uint128_possibleConstructorReturn(t, uint128_isNativeReflectConstruct() ? Reflect.construct(o, e || [], uint128_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function uint128_possibleConstructorReturn(t, e) { if (e && ("object" == uint128_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return uint128_assertThisInitialized(t); } +function uint128_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function uint128_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (uint128_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function uint128_getPrototypeOf(t) { return uint128_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, uint128_getPrototypeOf(t); } +function uint128_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && uint128_setPrototypeOf(t, e); } +function uint128_setPrototypeOf(t, e) { return uint128_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, uint128_setPrototypeOf(t, e); } + +var Uint128 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct an unsigned 128-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Uint128() { + uint128_classCallCheck(this, Uint128); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return uint128_callSuper(this, Uint128, [args]); + } + uint128_inherits(Uint128, _LargeInt); + return uint128_createClass(Uint128, [{ + key: "unsigned", + get: function get() { + return true; + } + }, { + key: "size", + get: function get() { + return 128; + } + }]); +}(xdr.LargeInt); +Uint128.defineIntBoundaries(); +;// ./src/numbers/uint256.js +function uint256_typeof(o) { "@babel/helpers - typeof"; return uint256_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, uint256_typeof(o); } +function uint256_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function uint256_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, uint256_toPropertyKey(o.key), o); } } +function uint256_createClass(e, r, t) { return r && uint256_defineProperties(e.prototype, r), t && uint256_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function uint256_toPropertyKey(t) { var i = uint256_toPrimitive(t, "string"); return "symbol" == uint256_typeof(i) ? i : i + ""; } +function uint256_toPrimitive(t, r) { if ("object" != uint256_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != uint256_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function uint256_callSuper(t, o, e) { return o = uint256_getPrototypeOf(o), uint256_possibleConstructorReturn(t, uint256_isNativeReflectConstruct() ? Reflect.construct(o, e || [], uint256_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function uint256_possibleConstructorReturn(t, e) { if (e && ("object" == uint256_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return uint256_assertThisInitialized(t); } +function uint256_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function uint256_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (uint256_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function uint256_getPrototypeOf(t) { return uint256_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, uint256_getPrototypeOf(t); } +function uint256_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && uint256_setPrototypeOf(t, e); } +function uint256_setPrototypeOf(t, e) { return uint256_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, uint256_setPrototypeOf(t, e); } + +var Uint256 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct an unsigned 256-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Uint256() { + uint256_classCallCheck(this, Uint256); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return uint256_callSuper(this, Uint256, [args]); + } + uint256_inherits(Uint256, _LargeInt); + return uint256_createClass(Uint256, [{ + key: "unsigned", + get: function get() { + return true; + } + }, { + key: "size", + get: function get() { + return 256; + } + }]); +}(xdr.LargeInt); +Uint256.defineIntBoundaries(); +;// ./src/numbers/int128.js +function int128_typeof(o) { "@babel/helpers - typeof"; return int128_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, int128_typeof(o); } +function int128_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function int128_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, int128_toPropertyKey(o.key), o); } } +function int128_createClass(e, r, t) { return r && int128_defineProperties(e.prototype, r), t && int128_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function int128_toPropertyKey(t) { var i = int128_toPrimitive(t, "string"); return "symbol" == int128_typeof(i) ? i : i + ""; } +function int128_toPrimitive(t, r) { if ("object" != int128_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != int128_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function int128_callSuper(t, o, e) { return o = int128_getPrototypeOf(o), int128_possibleConstructorReturn(t, int128_isNativeReflectConstruct() ? Reflect.construct(o, e || [], int128_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function int128_possibleConstructorReturn(t, e) { if (e && ("object" == int128_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return int128_assertThisInitialized(t); } +function int128_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function int128_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (int128_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function int128_getPrototypeOf(t) { return int128_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, int128_getPrototypeOf(t); } +function int128_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && int128_setPrototypeOf(t, e); } +function int128_setPrototypeOf(t, e) { return int128_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, int128_setPrototypeOf(t, e); } + +var Int128 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct a signed 128-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Int128() { + int128_classCallCheck(this, Int128); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return int128_callSuper(this, Int128, [args]); + } + int128_inherits(Int128, _LargeInt); + return int128_createClass(Int128, [{ + key: "unsigned", + get: function get() { + return false; + } + }, { + key: "size", + get: function get() { + return 128; + } + }]); +}(xdr.LargeInt); +Int128.defineIntBoundaries(); +;// ./src/numbers/int256.js +function int256_typeof(o) { "@babel/helpers - typeof"; return int256_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, int256_typeof(o); } +function int256_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function int256_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, int256_toPropertyKey(o.key), o); } } +function int256_createClass(e, r, t) { return r && int256_defineProperties(e.prototype, r), t && int256_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function int256_toPropertyKey(t) { var i = int256_toPrimitive(t, "string"); return "symbol" == int256_typeof(i) ? i : i + ""; } +function int256_toPrimitive(t, r) { if ("object" != int256_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != int256_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function int256_callSuper(t, o, e) { return o = int256_getPrototypeOf(o), int256_possibleConstructorReturn(t, int256_isNativeReflectConstruct() ? Reflect.construct(o, e || [], int256_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function int256_possibleConstructorReturn(t, e) { if (e && ("object" == int256_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return int256_assertThisInitialized(t); } +function int256_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function int256_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (int256_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function int256_getPrototypeOf(t) { return int256_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, int256_getPrototypeOf(t); } +function int256_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && int256_setPrototypeOf(t, e); } +function int256_setPrototypeOf(t, e) { return int256_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, int256_setPrototypeOf(t, e); } + +var Int256 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct a signed 256-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Int256() { + int256_classCallCheck(this, Int256); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return int256_callSuper(this, Int256, [args]); + } + int256_inherits(Int256, _LargeInt); + return int256_createClass(Int256, [{ + key: "unsigned", + get: function get() { + return false; + } + }, { + key: "size", + get: function get() { + return 256; + } + }]); +}(xdr.LargeInt); +Int256.defineIntBoundaries(); +;// ./src/numbers/xdr_large_int.js +function xdr_large_int_typeof(o) { "@babel/helpers - typeof"; return xdr_large_int_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, xdr_large_int_typeof(o); } +function xdr_large_int_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function xdr_large_int_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, xdr_large_int_toPropertyKey(o.key), o); } } +function xdr_large_int_createClass(e, r, t) { return r && xdr_large_int_defineProperties(e.prototype, r), t && xdr_large_int_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function xdr_large_int_defineProperty(e, r, t) { return (r = xdr_large_int_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function xdr_large_int_toPropertyKey(t) { var i = xdr_large_int_toPrimitive(t, "string"); return "symbol" == xdr_large_int_typeof(i) ? i : i + ""; } +function xdr_large_int_toPrimitive(t, r) { if ("object" != xdr_large_int_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != xdr_large_int_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* eslint no-bitwise: ["error", {"allow": [">>"]}] */ + + + + + + + +/** + * A wrapper class to represent large XDR-encodable integers. + * + * This operates at a lower level than {@link ScInt} by forcing you to specify + * the type / width / size in bits of the integer you're targeting, regardless + * of the input value(s) you provide. + * + * @param {string} type - force a specific data type. the type choices are: + * 'i64', 'u64', 'i128', 'u128', 'i256', and 'u256' (default: the smallest + * one that fits the `value`) (see {@link XdrLargeInt.isType}) + * @param {number|bigint|string|Array} values a list of + * integer-like values interpreted in big-endian order + */ +var XdrLargeInt = /*#__PURE__*/function () { + function XdrLargeInt(type, values) { + xdr_large_int_classCallCheck(this, XdrLargeInt); + /** @type {xdr.LargeInt} */ + xdr_large_int_defineProperty(this, "int", void 0); + // child class of a jsXdr.LargeInt + /** @type {string} */ + xdr_large_int_defineProperty(this, "type", void 0); + if (!(values instanceof Array)) { + values = [values]; + } + + // normalize values to one type + values = values.map(function (i) { + // micro-optimization to no-op on the likeliest input value: + if (typeof i === 'bigint') { + return i; + } + if (i instanceof XdrLargeInt) { + return i.toBigInt(); + } + return BigInt(i); + }); + switch (type) { + case 'i64': + this["int"] = new xdr.Hyper(values); + break; + case 'i128': + this["int"] = new Int128(values); + break; + case 'i256': + this["int"] = new Int256(values); + break; + case 'u64': + this["int"] = new xdr.UnsignedHyper(values); + break; + case 'u128': + this["int"] = new Uint128(values); + break; + case 'u256': + this["int"] = new Uint256(values); + break; + default: + throw TypeError("invalid type: ".concat(type)); + } + this.type = type; + } + + /** + * @returns {number} + * @throws {RangeError} if the value can't fit into a Number + */ + return xdr_large_int_createClass(XdrLargeInt, [{ + key: "toNumber", + value: function toNumber() { + var bi = this["int"].toBigInt(); + if (bi > Number.MAX_SAFE_INTEGER || bi < Number.MIN_SAFE_INTEGER) { + throw RangeError("value ".concat(bi, " not in range for Number ") + "[".concat(Number.MAX_SAFE_INTEGER, ", ").concat(Number.MIN_SAFE_INTEGER, "]")); + } + return Number(bi); + } + + /** @returns {bigint} */ + }, { + key: "toBigInt", + value: function toBigInt() { + return this["int"].toBigInt(); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = I64` */ + }, { + key: "toI64", + value: function toI64() { + this._sizeCheck(64); + var v = this.toBigInt(); + if (BigInt.asIntN(64, v) !== v) { + throw RangeError("value too large for i64: ".concat(v)); + } + return src_xdr.ScVal.scvI64(new src_xdr.Int64(v)); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = U64` */ + }, { + key: "toU64", + value: function toU64() { + this._sizeCheck(64); + return src_xdr.ScVal.scvU64(new src_xdr.Uint64(BigInt.asUintN(64, this.toBigInt())) // reiterpret as unsigned + ); + } + + /** + * @returns {xdr.ScVal} the integer encoded with `ScValType = I128` + * @throws {RangeError} if the value cannot fit in 128 bits + */ + }, { + key: "toI128", + value: function toI128() { + this._sizeCheck(128); + var v = this["int"].toBigInt(); + var hi64 = BigInt.asIntN(64, v >> 64n); // encode top 64 w/ sign bit + var lo64 = BigInt.asUintN(64, v); // grab btm 64, encode sign + + return src_xdr.ScVal.scvI128(new src_xdr.Int128Parts({ + hi: new src_xdr.Int64(hi64), + lo: new src_xdr.Uint64(lo64) + })); + } + + /** + * @returns {xdr.ScVal} the integer encoded with `ScValType = U128` + * @throws {RangeError} if the value cannot fit in 128 bits + */ + }, { + key: "toU128", + value: function toU128() { + this._sizeCheck(128); + var v = this["int"].toBigInt(); + return src_xdr.ScVal.scvU128(new src_xdr.UInt128Parts({ + hi: new src_xdr.Uint64(BigInt.asUintN(64, v >> 64n)), + lo: new src_xdr.Uint64(BigInt.asUintN(64, v)) + })); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = I256` */ + }, { + key: "toI256", + value: function toI256() { + var v = this["int"].toBigInt(); + var hiHi64 = BigInt.asIntN(64, v >> 192n); // keep sign bit + var hiLo64 = BigInt.asUintN(64, v >> 128n); + var loHi64 = BigInt.asUintN(64, v >> 64n); + var loLo64 = BigInt.asUintN(64, v); + return src_xdr.ScVal.scvI256(new src_xdr.Int256Parts({ + hiHi: new src_xdr.Int64(hiHi64), + hiLo: new src_xdr.Uint64(hiLo64), + loHi: new src_xdr.Uint64(loHi64), + loLo: new src_xdr.Uint64(loLo64) + })); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = U256` */ + }, { + key: "toU256", + value: function toU256() { + var v = this["int"].toBigInt(); + var hiHi64 = BigInt.asUintN(64, v >> 192n); // encode sign bit + var hiLo64 = BigInt.asUintN(64, v >> 128n); + var loHi64 = BigInt.asUintN(64, v >> 64n); + var loLo64 = BigInt.asUintN(64, v); + return src_xdr.ScVal.scvU256(new src_xdr.UInt256Parts({ + hiHi: new src_xdr.Uint64(hiHi64), + hiLo: new src_xdr.Uint64(hiLo64), + loHi: new src_xdr.Uint64(loHi64), + loLo: new src_xdr.Uint64(loLo64) + })); + } + + /** @returns {xdr.ScVal} the smallest interpretation of the stored value */ + }, { + key: "toScVal", + value: function toScVal() { + switch (this.type) { + case 'i64': + return this.toI64(); + case 'i128': + return this.toI128(); + case 'i256': + return this.toI256(); + case 'u64': + return this.toU64(); + case 'u128': + return this.toU128(); + case 'u256': + return this.toU256(); + default: + throw TypeError("invalid type: ".concat(this.type)); + } + } + }, { + key: "valueOf", + value: function valueOf() { + return this["int"].valueOf(); + } + }, { + key: "toString", + value: function toString() { + return this["int"].toString(); + } + }, { + key: "toJSON", + value: function toJSON() { + return { + value: this.toBigInt().toString(), + type: this.type + }; + } + }, { + key: "_sizeCheck", + value: function _sizeCheck(bits) { + if (this["int"].size > bits) { + throw RangeError("value too large for ".concat(bits, " bits (").concat(this.type, ")")); + } + } + }], [{ + key: "isType", + value: function isType(type) { + switch (type) { + case 'i64': + case 'i128': + case 'i256': + case 'u64': + case 'u128': + case 'u256': + return true; + default: + return false; + } + } + + /** + * Convert the raw `ScValType` string (e.g. 'scvI128', generated by the XDR) + * to a type description for {@link XdrLargeInt} construction (e.g. 'i128') + * + * @param {string} scvType the `xdr.ScValType` as a string + * @returns {string} a suitable equivalent type to construct this object + */ + }, { + key: "getType", + value: function getType(scvType) { + return scvType.slice(3).toLowerCase(); + } + }]); +}(); +;// ./src/numbers/sc_int.js +function sc_int_typeof(o) { "@babel/helpers - typeof"; return sc_int_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, sc_int_typeof(o); } +function sc_int_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, sc_int_toPropertyKey(o.key), o); } } +function sc_int_createClass(e, r, t) { return r && sc_int_defineProperties(e.prototype, r), t && sc_int_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function sc_int_toPropertyKey(t) { var i = sc_int_toPrimitive(t, "string"); return "symbol" == sc_int_typeof(i) ? i : i + ""; } +function sc_int_toPrimitive(t, r) { if ("object" != sc_int_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != sc_int_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function sc_int_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function sc_int_callSuper(t, o, e) { return o = sc_int_getPrototypeOf(o), sc_int_possibleConstructorReturn(t, sc_int_isNativeReflectConstruct() ? Reflect.construct(o, e || [], sc_int_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function sc_int_possibleConstructorReturn(t, e) { if (e && ("object" == sc_int_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return sc_int_assertThisInitialized(t); } +function sc_int_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function sc_int_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (sc_int_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function sc_int_getPrototypeOf(t) { return sc_int_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, sc_int_getPrototypeOf(t); } +function sc_int_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && sc_int_setPrototypeOf(t, e); } +function sc_int_setPrototypeOf(t, e) { return sc_int_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, sc_int_setPrototypeOf(t, e); } + + +/** + * Provides an easier way to manipulate large numbers for Stellar operations. + * + * You can instantiate this "**s**mart **c**ontract integer" value either from + * bigints, strings, or numbers (whole numbers, or this will throw). + * + * If you need to create a native BigInt from a list of integer "parts" (for + * example, you have a series of encoded 32-bit integers that represent a larger + * value), you can use the lower level abstraction {@link XdrLargeInt}. For + * example, you could do `new XdrLargeInt('u128', bytes...).toBigInt()`. + * + * @example + * import { xdr, ScInt, scValToBigInt } from "@stellar/stellar-base"; + * + * // You have an ScVal from a contract and want to parse it into JS native. + * const value = xdr.ScVal.fromXDR(someXdr, "base64"); + * const bigi = scValToBigInt(value); // grab it as a BigInt + * let sci = new ScInt(bigi); + * + * sci.toNumber(); // gives native JS type (w/ size check) + * sci.toBigInt(); // gives the native BigInt value + * sci.toU64(); // gives ScValType-specific XDR constructs (with size checks) + * + * // You have a number and want to shove it into a contract. + * sci = ScInt(0xdeadcafebabe); + * sci.toBigInt() // returns 244838016400062n + * sci.toNumber() // throws: too large + * + * // Pass any to e.g. a Contract.call(), conversion happens automatically + * // regardless of the initial type. + * const scValU128 = sci.toU128(); + * const scValI256 = sci.toI256(); + * const scValU64 = sci.toU64(); + * + * // Lots of ways to initialize: + * ScInt("123456789123456789") + * ScInt(123456789123456789n); + * ScInt(1n << 140n); + * ScInt(-42); + * ScInt(scValToBigInt(scValU128)); // from above + * + * // If you know the type ahead of time (accessing `.raw` is faster than + * // conversions), you can specify the type directly (otherwise, it's + * // interpreted from the numbers you pass in): + * const i = ScInt(123456789n, { type: "u256" }); + * + * // For example, you can use the underlying `sdk.U256` and convert it to an + * // `xdr.ScVal` directly like so: + * const scv = new xdr.ScVal.scvU256(i.raw); + * + * // Or reinterpret it as a different type (size permitting): + * const scv = i.toI64(); + * + * @param {number|bigint|string} value - a single, integer-like value which will + * be interpreted in the smallest appropriate XDR type supported by Stellar + * (64, 128, or 256 bit integer values). signed values are supported, though + * they are sanity-checked against `opts.type`. if you need 32-bit values, + * you can construct them directly without needing this wrapper, e.g. + * `xdr.ScVal.scvU32(1234)`. + * + * @param {object} [opts] - an optional object controlling optional parameters + * @param {string} [opts.type] - force a specific data type. the type choices + * are: 'i64', 'u64', 'i128', 'u128', 'i256', and 'u256' (default: the + * smallest one that fits the `value`) + * + * @throws {RangeError} if the `value` is invalid (e.g. floating point), too + * large (i.e. exceeds a 256-bit value), or doesn't fit in the `opts.type` + * @throws {TypeError} on missing parameters, or if the "signedness" of `opts` + * doesn't match input `value`, e.g. passing `{type: 'u64'}` yet passing -1n + * @throws {SyntaxError} if a string `value` can't be parsed as a big integer + */ +var ScInt = /*#__PURE__*/function (_XdrLargeInt) { + function ScInt(value, opts) { + var _opts$type; + sc_int_classCallCheck(this, ScInt); + var signed = value < 0; + var type = (_opts$type = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type !== void 0 ? _opts$type : ''; + if (type.startsWith('u') && signed) { + throw TypeError("specified type ".concat(opts.type, " yet negative (").concat(value, ")")); + } + + // If unspecified, we make a best guess at the type based on the bit length + // of the value, treating 64 as a minimum and 256 as a maximum. + if (type === '') { + type = signed ? 'i' : 'u'; + var bitlen = nearestBigIntSize(value); + switch (bitlen) { + case 64: + case 128: + case 256: + type += bitlen.toString(); + break; + default: + throw RangeError("expected 64/128/256 bits for input (".concat(value, "), got ").concat(bitlen)); + } + } + return sc_int_callSuper(this, ScInt, [type, value]); + } + sc_int_inherits(ScInt, _XdrLargeInt); + return sc_int_createClass(ScInt); +}(XdrLargeInt); +function nearestBigIntSize(bigI) { + var _find; + // Note: Even though BigInt.toString(2) includes the negative sign for + // negative values (???), the following is still accurate, because the + // negative sign would be represented by a sign bit. + var bitlen = bigI.toString(2).length; + return (_find = [64, 128, 256].find(function (len) { + return bitlen <= len; + })) !== null && _find !== void 0 ? _find : bitlen; +} +;// ./src/numbers/index.js + + + + + + + + +/** + * Transforms an opaque {@link xdr.ScVal} into a native bigint, if possible. + * + * If you then want to use this in the abstractions provided by this module, + * you can pass it to the constructor of {@link XdrLargeInt}. + * + * @example + * let scv = contract.call("add", x, y); // assume it returns an xdr.ScVal + * let bigi = scValToBigInt(scv); + * + * new ScInt(bigi); // if you don't care about types, and + * new XdrLargeInt('i128', bigi); // if you do + * + * @param {xdr.ScVal} scv - the raw XDR value to parse into an integer + * @returns {bigint} the native value of this input value + * + * @throws {TypeError} if the `scv` input value doesn't represent an integer + */ +function scValToBigInt(scv) { + var scIntType = XdrLargeInt.getType(scv["switch"]().name); + switch (scv["switch"]().name) { + case 'scvU32': + case 'scvI32': + return BigInt(scv.value()); + case 'scvU64': + case 'scvI64': + return new XdrLargeInt(scIntType, scv.value()).toBigInt(); + case 'scvU128': + case 'scvI128': + return new XdrLargeInt(scIntType, [scv.value().lo(), scv.value().hi()]).toBigInt(); + case 'scvU256': + case 'scvI256': + return new XdrLargeInt(scIntType, [scv.value().loLo(), scv.value().loHi(), scv.value().hiLo(), scv.value().hiHi()]).toBigInt(); + default: + throw TypeError("expected integer type, got ".concat(scv["switch"]())); + } +} +;// ./src/scval.js +/* provided dependency */ var scval_Buffer = __webpack_require__(3626)["A"]; +function scval_slicedToArray(r, e) { return scval_arrayWithHoles(r) || scval_iterableToArrayLimit(r, e) || scval_unsupportedIterableToArray(r, e) || scval_nonIterableRest(); } +function scval_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function scval_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return scval_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? scval_arrayLikeToArray(r, a) : void 0; } } +function scval_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function scval_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function scval_arrayWithHoles(r) { if (Array.isArray(r)) return r; } +function scval_typeof(o) { "@babel/helpers - typeof"; return scval_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, scval_typeof(o); } + + + + + + +/** + * Attempts to convert native types into smart contract values + * ({@link xdr.ScVal}). + * + * Provides conversions from smart contract XDR values ({@link xdr.ScVal}) to + * native JavaScript types. + * + * The conversions are as follows: + * + * - xdr.ScVal -> passthrough + * - null/undefined -> scvVoid + * - string -> scvString (a copy is made) + * - UintArray8 -> scvBytes (a copy is made) + * - boolean -> scvBool + * + * - number/bigint -> the smallest possible XDR integer type that will fit the + * input value (if you want a specific type, use {@link ScInt}) + * + * - {@link Address} or {@link Contract} -> scvAddress (for contracts and + * public keys) + * + * - Array -> scvVec after attempting to convert each item of type `T` to an + * xdr.ScVal (recursively). note that all values must be the same type! + * + * - object -> scvMap after attempting to convert each key and value to an + * xdr.ScVal (recursively). note that there is no restriction on types + * matching anywhere (unlike arrays) + * + * When passing an integer-like native value, you can also optionally specify a + * type which will force a particular interpretation of that value. + * + * Note that not all type specifications are compatible with all `ScVal`s, e.g. + * `toScVal("a string", {type: "i256"})` will throw. + * + * @param {any} val - a native (or convertible) input value to wrap + * @param {object} [opts] - an optional set of hints around the type of + * conversion you'd like to see + * @param {string} [opts.type] - there is different behavior for different input + * types for `val`: + * + * - when `val` is an integer-like type (i.e. number|bigint), this will be + * forwarded to {@link ScInt} or forced to be u32/i32. + * + * - when `val` is an array type, this is forwarded to the recursion + * + * - when `val` is an object type (key-value entries), this should be an + * object in which each key has a pair of types (to represent forced types + * for the key and the value), where `null` (or a missing entry) indicates + * the default interpretation(s) (refer to the examples, below) + * + * - when `val` is a string type, this can be 'string' or 'symbol' to force + * a particular interpretation of `val`. + * + * - when `val` is a bytes-like type, this can be 'string', 'symbol', or + * 'bytes' to force a particular interpretation + * + * As a simple example, `nativeToScVal("hello", {type: 'symbol'})` will + * return an `scvSymbol`, whereas without the type it would have been an + * `scvString`. + * + * @returns {xdr.ScVal} a wrapped, smart, XDR version of the input value + * @throws {TypeError} if... + * - there are arrays with more than one type in them + * - there are values that do not have a sensible conversion (e.g. random XDR + * types, custom classes) + * - the type of the input object (or some inner value of said object) cannot + * be determined (via `typeof`) + * - the type you specified (via `opts.type`) is incompatible with the value + * you passed in (`val`), e.g. `nativeToScVal("a string", { type: 'i128' })`, + * though this does not apply for types that ignore `opts` (e.g. addresses). + * @see scValToNative + * + * @example + * nativeToScVal(1000); // gives ScValType === scvU64 + * nativeToScVal(1000n); // gives ScValType === scvU64 + * nativeToScVal(1n << 100n); // gives ScValType === scvU128 + * nativeToScVal(1000, { type: 'u32' }); // gives ScValType === scvU32 + * nativeToScVal(1000, { type: 'i125' }); // gives ScValType === scvI256 + * nativeToScVal("a string"); // gives ScValType === scvString + * nativeToScVal("a string", { type: 'symbol' }); // gives scvSymbol + * nativeToScVal(new Uint8Array(5)); // scvBytes + * nativeToScVal(new Uint8Array(5), { type: 'symbol' }); // scvSymbol + * nativeToScVal(null); // scvVoid + * nativeToScVal(true); // scvBool + * nativeToScVal([1, 2, 3]); // gives scvVec with each element as scvU64 + * nativeToScVal([1, 2, 3], { type: 'i128' }); // scvVec + * nativeToScVal({ 'hello': 1, 'world': [ true, false ] }, { + * type: { + * 'hello': [ 'symbol', 'i128' ], + * } + * }) + * // gives scvMap with entries: [ + * // [ scvSymbol, scvI128 ], + * // [ scvString, scvArray ] + * // ] + * + * @example + * import { + * nativeToScVal, + * scValToNative, + * ScInt, + * xdr + * } from '@stellar/stellar-base'; + * + * let gigaMap = { + * bool: true, + * void: null, + * u32: xdr.ScVal.scvU32(1), + * i32: xdr.ScVal.scvI32(1), + * u64: 1n, + * i64: -1n, + * u128: new ScInt(1).toU128(), + * i128: new ScInt(1).toI128(), + * u256: new ScInt(1).toU256(), + * i256: new ScInt(1).toI256(), + * map: { + * arbitrary: 1n, + * nested: 'values', + * etc: false + * }, + * vec: ['same', 'type', 'list'], + * }; + * + * // then, simply: + * let scv = nativeToScVal(gigaMap); // scv.switch() == xdr.ScValType.scvMap() + * + * // then... + * someContract.call("method", scv); + * + * // Similarly, the inverse should work: + * scValToNative(scv) == gigaMap; // true + */ +function nativeToScVal(val) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + switch (scval_typeof(val)) { + case 'object': + { + var _val$constructor$name, _val$constructor; + if (val === null) { + return src_xdr.ScVal.scvVoid(); + } + if (val instanceof src_xdr.ScVal) { + return val; // should we copy? + } + if (val instanceof Address) { + return val.toScVal(); + } + if (val instanceof Keypair) { + return nativeToScVal(val.publicKey(), { + type: 'address' + }); + } + if (val instanceof Contract) { + return val.address().toScVal(); + } + if (val instanceof Uint8Array || scval_Buffer.isBuffer(val)) { + var _opts$type; + var copy = Uint8Array.from(val); + switch ((_opts$type = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type !== void 0 ? _opts$type : 'bytes') { + case 'bytes': + return src_xdr.ScVal.scvBytes(copy); + case 'symbol': + return src_xdr.ScVal.scvSymbol(copy); + case 'string': + return src_xdr.ScVal.scvString(copy); + default: + throw new TypeError("invalid type (".concat(opts.type, ") specified for bytes-like value")); + } + } + if (Array.isArray(val)) { + return src_xdr.ScVal.scvVec(val.map(function (v) { + return nativeToScVal(v, opts); + })); + } + if (((_val$constructor$name = (_val$constructor = val.constructor) === null || _val$constructor === void 0 ? void 0 : _val$constructor.name) !== null && _val$constructor$name !== void 0 ? _val$constructor$name : '') !== 'Object') { + var _val$constructor2; + throw new TypeError("cannot interpret ".concat((_val$constructor2 = val.constructor) === null || _val$constructor2 === void 0 ? void 0 : _val$constructor2.name, " value as ScVal (").concat(JSON.stringify(val), ")")); + } + return src_xdr.ScVal.scvMap(Object.entries(val) + // The Soroban runtime expects maps to have their keys in sorted + // order, so let's do that here as part of the conversion to prevent + // confusing error messages on execution. + .sort(function (_ref, _ref2) { + var _ref3 = scval_slicedToArray(_ref, 1), + key1 = _ref3[0]; + var _ref4 = scval_slicedToArray(_ref2, 1), + key2 = _ref4[0]; + return key1.localeCompare(key2); + }).map(function (_ref5) { + var _k, _opts$type2; + var _ref6 = scval_slicedToArray(_ref5, 2), + k = _ref6[0], + v = _ref6[1]; + // the type can be specified with an entry for the key and the value, + // e.g. val = { 'hello': 1 } and opts.type = { hello: [ 'symbol', + // 'u128' ]} or you can use `null` for the default interpretation + var _ref7 = (_k = ((_opts$type2 = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type2 !== void 0 ? _opts$type2 : {})[k]) !== null && _k !== void 0 ? _k : [null, null], + _ref8 = scval_slicedToArray(_ref7, 2), + keyType = _ref8[0], + valType = _ref8[1]; + var keyOpts = keyType ? { + type: keyType + } : {}; + var valOpts = valType ? { + type: valType + } : {}; + return new src_xdr.ScMapEntry({ + key: nativeToScVal(k, keyOpts), + val: nativeToScVal(v, valOpts) + }); + })); + } + case 'number': + case 'bigint': + switch (opts === null || opts === void 0 ? void 0 : opts.type) { + case 'u32': + return src_xdr.ScVal.scvU32(val); + case 'i32': + return src_xdr.ScVal.scvI32(val); + default: + break; + } + return new ScInt(val, { + type: opts === null || opts === void 0 ? void 0 : opts.type + }).toScVal(); + case 'string': + { + var _opts$type3; + var optType = (_opts$type3 = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type3 !== void 0 ? _opts$type3 : 'string'; + switch (optType) { + case 'string': + return src_xdr.ScVal.scvString(val); + case 'symbol': + return src_xdr.ScVal.scvSymbol(val); + case 'address': + return new Address(val).toScVal(); + case 'u32': + return src_xdr.ScVal.scvU32(parseInt(val, 10)); + case 'i32': + return src_xdr.ScVal.scvI32(parseInt(val, 10)); + default: + if (XdrLargeInt.isType(optType)) { + return new XdrLargeInt(optType, val).toScVal(); + } + throw new TypeError("invalid type (".concat(opts.type, ") specified for string value")); + } + } + case 'boolean': + return src_xdr.ScVal.scvBool(val); + case 'undefined': + return src_xdr.ScVal.scvVoid(); + case 'function': + // FIXME: Is this too helpful? + return nativeToScVal(val()); + default: + throw new TypeError("failed to convert typeof ".concat(scval_typeof(val), " (").concat(val, ")")); + } +} + +/** + * Given a smart contract value, attempt to convert it to a native type. + * Possible conversions include: + * + * - void -> `null` + * - u32, i32 -> `number` + * - u64, i64, u128, i128, u256, i256 -> `bigint` + * - vec -> `Array` of any of the above (via recursion) + * - map -> key-value object of any of the above (via recursion) + * - bool -> `boolean` + * - bytes -> `Uint8Array` + * - symbol -> `string` + * - string -> `string` IF the underlying buffer can be decoded as ascii/utf8, + * `Uint8Array` of the raw contents in any error case + * + * If no viable conversion can be determined, this just "unwraps" the smart + * value to return its underlying XDR value. + * + * @param {xdr.ScVal} scv - the input smart contract value + * + * @returns {any} + * @see nativeToScVal + */ +function scValToNative(scv) { + var _scv$vec, _scv$map; + // we use the verbose xdr.ScValType..value form here because it's faster + // than string comparisons and the underlying constants never need to be + // updated + switch (scv["switch"]().value) { + case src_xdr.ScValType.scvVoid().value: + return null; + + // these can be converted to bigints directly + case src_xdr.ScValType.scvU64().value: + case src_xdr.ScValType.scvI64().value: + return scv.value().toBigInt(); + + // these can be parsed by internal abstractions note that this can also + // handle the above two cases, but it's not as efficient (another + // type-check, parsing, etc.) + case src_xdr.ScValType.scvU128().value: + case src_xdr.ScValType.scvI128().value: + case src_xdr.ScValType.scvU256().value: + case src_xdr.ScValType.scvI256().value: + return scValToBigInt(scv); + case src_xdr.ScValType.scvVec().value: + return ((_scv$vec = scv.vec()) !== null && _scv$vec !== void 0 ? _scv$vec : []).map(scValToNative); + case src_xdr.ScValType.scvAddress().value: + return Address.fromScVal(scv).toString(); + case src_xdr.ScValType.scvMap().value: + return Object.fromEntries(((_scv$map = scv.map()) !== null && _scv$map !== void 0 ? _scv$map : []).map(function (entry) { + return [scValToNative(entry.key()), scValToNative(entry.val())]; + })); + + // these return the primitive type directly + case src_xdr.ScValType.scvBool().value: + case src_xdr.ScValType.scvU32().value: + case src_xdr.ScValType.scvI32().value: + case src_xdr.ScValType.scvBytes().value: + return scv.value(); + + // Symbols are limited to [a-zA-Z0-9_]+, so we can safely make ascii strings + // + // Strings, however, are "presented" as strings and we treat them as such + // (in other words, string = bytes with a hint that it's text). If the user + // encoded non-printable bytes in their string value, that's on them. + // + // Note that we assume a utf8 encoding (ascii-compatible). For other + // encodings, you should probably use bytes anyway. If it cannot be decoded, + // the raw bytes are returned. + case src_xdr.ScValType.scvSymbol().value: + case src_xdr.ScValType.scvString().value: + { + var v = scv.value(); // string|Buffer + if (scval_Buffer.isBuffer(v) || ArrayBuffer.isView(v)) { + try { + return new TextDecoder().decode(v); + } catch (e) { + return new Uint8Array(v.buffer); // copy of bytes + } + } + return v; // string already + } + + // these can be converted to bigint + case src_xdr.ScValType.scvTimepoint().value: + case src_xdr.ScValType.scvDuration().value: + return new src_xdr.Uint64(scv.value()).toBigInt(); + case src_xdr.ScValType.scvError().value: + switch (scv.error()["switch"]().value) { + // Distinguish errors from the user contract. + case src_xdr.ScErrorType.sceContract().value: + return { + type: 'contract', + code: scv.error().contractCode() + }; + default: + { + var err = scv.error(); + return { + type: 'system', + code: err.code().value, + value: err.code().name + }; + } + } + + // in the fallthrough case, just return the underlying value directly + default: + return scv.value(); + } +} + +/// Inject a sortable map builder into the xdr module. +src_xdr.scvSortedMap = function (items) { + var sorted = Array.from(items).sort(function (a, b) { + // Both a and b are `ScMapEntry`s, so we need to sort by underlying key. + // + // We couldn't possibly handle every combination of keys since Soroban + // maps don't enforce consistent types, so we do a best-effort and try + // sorting by "number-like" or "string-like." + var nativeA = scValToNative(a.key()); + var nativeB = scValToNative(b.key()); + switch (scval_typeof(nativeA)) { + case 'number': + case 'bigint': + return nativeA < nativeB ? -1 : 1; + default: + return nativeA.toString().localeCompare(nativeB.toString()); + } + }); + return src_xdr.ScVal.scvMap(sorted); +}; +;// ./src/events.js +function events_typeof(o) { "@babel/helpers - typeof"; return events_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, events_typeof(o); } +function events_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function events_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? events_ownKeys(Object(t), !0).forEach(function (r) { events_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : events_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function events_defineProperty(e, r, t) { return (r = events_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function events_toPropertyKey(t) { var i = events_toPrimitive(t, "string"); return "symbol" == events_typeof(i) ? i : i + ""; } +function events_toPrimitive(t, r) { if ("object" != events_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != events_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + +/** + * Converts raw diagnostic or contract events into something with a flatter, + * human-readable, and understandable structure. + * + * @param {xdr.DiagnosticEvent[] | xdr.ContractEvent[]} events either contract + * events or diagnostic events to parse into a friendly format + * + * @returns {SorobanEvent[]} a list of human-readable event structures, where + * each element has the following properties: + * - type: a string of one of 'system', 'contract', 'diagnostic + * - contractId?: optionally, a `C...` encoded strkey + * - topics: a list of {@link scValToNative} invocations on the topics + * - data: similarly, a {@link scValToNative} invocation on the raw event data + */ +function humanizeEvents(events) { + return events.map(function (e) { + // A pseudo-instanceof check for xdr.DiagnosticEvent more reliable + // in mixed SDK environments: + if (e.inSuccessfulContractCall) { + return extractEvent(e.event()); + } + return extractEvent(e); + }); +} +function extractEvent(event) { + return events_objectSpread(events_objectSpread({}, typeof event.contractId === 'function' && event.contractId() != null && { + contractId: StrKey.encodeContract(event.contractId()) + }), {}, { + type: event.type().name, + topics: event.body().value().topics().map(function (t) { + return scValToNative(t); + }), + data: scValToNative(event.body().value().data()) + }); +} +;// ./src/auth.js +/* provided dependency */ var auth_Buffer = __webpack_require__(3626)["A"]; +function auth_typeof(o) { "@babel/helpers - typeof"; return auth_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, auth_typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == auth_typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(auth_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } + + + + + + + + +/** + * @async + * @callback SigningCallback A callback for signing an XDR structure + * representing all of the details necessary to authorize an invocation tree. + * + * @param {xdr.HashIdPreimage} preimage the entire authorization envelope + * whose hash you should sign, so that you can inspect the entire structure + * if necessary (rather than blindly signing a hash) + * + * @returns { + * Promise | + * Promise<{signature: Uint8Array, publicKey: string} + * } the signature of the raw payload (which is the sha256 hash of the preimage + * bytes, so `hash(preimage.toXDR())`) either naked, implying it is signed + * by the key corresponding to the public key in the entry you pass to + * {@link authorizeEntry} (decipherable from its + * `credentials().address().address()`), or alongside an explicit `publicKey`. + */ + +/** + * Actually authorizes an existing authorization entry using the given the + * credentials and expiration details, returning a signed copy. + * + * This "fills out" the authorization entry with a signature, indicating to the + * {@link Operation.invokeHostFunction} its attached to that: + * - a particular identity (i.e. signing {@link Keypair} or other signer) + * - approving the execution of an invocation tree (i.e. a simulation-acquired + * {@link xdr.SorobanAuthorizedInvocation} or otherwise built) + * - on a particular network (uniquely identified by its passphrase, see + * {@link Networks}) + * - until a particular ledger sequence is reached. + * + * This one lets you pass a either a {@link Keypair} (or, more accurately, + * anything with a `sign(Buffer): Buffer` method) or a callback function (see + * {@link SigningCallback}) to handle signing the envelope hash. + * + * @param {xdr.SorobanAuthorizationEntry} entry an unsigned authorization entr + * @param {Keypair | SigningCallback} signer either a {@link Keypair} instance + * or a function which takes a {@link xdr.HashIdPreimageSorobanAuthorization} + * input payload and returns EITHER + * + * (a) an object containing a `signature` of the hash of the raw payload bytes + * as a Buffer-like and a `publicKey` string representing who just + * created this signature, or + * (b) just the naked signature of the hash of the raw payload bytes (where + * the signing key is implied to be the address in the `entry`). + * + * The latter option (b) is JUST for backwards compatibility and will be + * removed in the future. + * @param {number} validUntilLedgerSeq the (exclusive) future ledger sequence + * number until which this authorization entry should be valid (if + * `currentLedgerSeq==validUntil`, this is expired)) + * @param {string} [networkPassphrase] the network passphrase is incorprated + * into the signature (see {@link Networks} for options) + * + * @returns {Promise} a promise for an + * authorization entry that you can pass along to + * {@link Operation.invokeHostFunction} + * + * @note If using the `SigningCallback` variation, the signer is assumed to be + * the entry's credential address unless you use the variant that returns + * the object. + * + * @see authorizeInvocation + * @example + * import { + * SorobanRpc, + * Transaction, + * Networks, + * authorizeEntry + * } from '@stellar/stellar-sdk'; + * + * // Assume signPayloadCallback is a well-formed signing callback. + * // + * // It might, for example, pop up a modal from a browser extension, send the + * // transaction to a third-party service for signing, or just do simple + * // signing via Keypair like it does here: + * function signPayloadCallback(payload) { + * return signer.sign(hash(payload.toXDR()); + * } + * + * function multiPartyAuth( + * server: SorobanRpc.Server, + * // assume this involves multi-party auth + * tx: Transaction, + * ) { + * return server + * .simulateTransaction(tx) + * .then((simResult) => { + * tx.operations[0].auth.map(entry => + * authorizeEntry( + * entry, + * signPayloadCallback, + * currentLedger + 1000, + * Networks.TESTNET); + * )); + * + * return server.prepareTransaction(tx, simResult); + * }) + * .then((preppedTx) => { + * preppedTx.sign(source); + * return server.sendTransaction(preppedTx); + * }); + * } + */ +function authorizeEntry(_x, _x2, _x3) { + return _authorizeEntry.apply(this, arguments); +} + +/** + * This builds an entry from scratch, allowing you to express authorization as a + * function of: + * - a particular identity (i.e. signing {@link Keypair} or other signer) + * - approving the execution of an invocation tree (i.e. a simulation-acquired + * {@link xdr.SorobanAuthorizedInvocation} or otherwise built) + * - on a particular network (uniquely identified by its passphrase, see + * {@link Networks}) + * - until a particular ledger sequence is reached. + * + * This is in contrast to {@link authorizeEntry}, which signs an existing entry. + * + * @param {Keypair | SigningCallback} signer either a {@link Keypair} instance + * (or anything with a `.sign(buf): Buffer-like` method) or a function which + * takes a payload (a {@link xdr.HashIdPreimageSorobanAuthorization} + * instance) input and returns the signature of the hash of the raw payload + * bytes (where the signing key should correspond to the address in the + * `entry`) + * @param {number} validUntilLedgerSeq the (exclusive) future ledger sequence + * number until which this authorization entry should be valid (if + * `currentLedgerSeq==validUntilLedgerSeq`, this is expired)) + * @param {xdr.SorobanAuthorizedInvocation} invocation the invocation tree that + * we're authorizing (likely, this comes from transaction simulation) + * @param {string} [publicKey] the public identity of the signer (when + * providing a {@link Keypair} to `signer`, this can be omitted, as it just + * uses {@link Keypair.publicKey}) + * @param {string} [networkPassphrase] the network passphrase is incorprated + * into the signature (see {@link Networks} for options, default: + * {@link Networks.FUTURENET}) + * + * @returns {Promise} a promise for an + * authorization entry that you can pass along to + * {@link Operation.invokeHostFunction} + * + * @see authorizeEntry + */ +function _authorizeEntry() { + _authorizeEntry = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(entry, signer, validUntilLedgerSeq) { + var networkPassphrase, + clone, + addrAuth, + networkId, + preimage, + payload, + signature, + publicKey, + sigResult, + sigScVal, + _args = arguments; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + networkPassphrase = _args.length > 3 && _args[3] !== undefined ? _args[3] : Networks.FUTURENET; + if (!(entry.credentials()["switch"]().value !== src_xdr.SorobanCredentialsType.sorobanCredentialsAddress().value)) { + _context.next = 3; + break; + } + return _context.abrupt("return", entry); + case 3: + clone = src_xdr.SorobanAuthorizationEntry.fromXDR(entry.toXDR()); + /** @type {xdr.SorobanAddressCredentials} */ + addrAuth = clone.credentials().address(); + addrAuth.signatureExpirationLedger(validUntilLedgerSeq); + networkId = hashing_hash(auth_Buffer.from(networkPassphrase)); + preimage = src_xdr.HashIdPreimage.envelopeTypeSorobanAuthorization(new src_xdr.HashIdPreimageSorobanAuthorization({ + networkId: networkId, + nonce: addrAuth.nonce(), + invocation: clone.rootInvocation(), + signatureExpirationLedger: addrAuth.signatureExpirationLedger() + })); + payload = hashing_hash(preimage.toXDR()); + if (!(typeof signer === 'function')) { + _context.next = 16; + break; + } + _context.next = 12; + return signer(preimage); + case 12: + sigResult = _context.sent; + if (sigResult !== null && sigResult !== void 0 && sigResult.signature) { + signature = auth_Buffer.from(sigResult.signature); + publicKey = sigResult.publicKey; + } else { + // if using the deprecated form, assume it's for the entry + signature = auth_Buffer.from(sigResult); + publicKey = Address.fromScAddress(addrAuth.address()).toString(); + } + _context.next = 18; + break; + case 16: + signature = auth_Buffer.from(signer.sign(payload)); + publicKey = signer.publicKey(); + case 18: + if (Keypair.fromPublicKey(publicKey).verify(payload, signature)) { + _context.next = 20; + break; + } + throw new Error("signature doesn't match payload"); + case 20: + // This structure is defined here: + // https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#stellar-account-signatures + // + // Encoding a contract structure as an ScVal means the map keys are supposed + // to be symbols, hence the forced typing here. + sigScVal = nativeToScVal({ + public_key: StrKey.decodeEd25519PublicKey(publicKey), + signature: signature + }, { + type: { + public_key: ['symbol', null], + signature: ['symbol', null] + } + }); + addrAuth.signature(src_xdr.ScVal.scvVec([sigScVal])); + return _context.abrupt("return", clone); + case 23: + case "end": + return _context.stop(); + } + }, _callee); + })); + return _authorizeEntry.apply(this, arguments); +} +function authorizeInvocation(signer, validUntilLedgerSeq, invocation) { + var publicKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; + var networkPassphrase = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Networks.FUTURENET; + // We use keypairs as a source of randomness for the nonce to avoid mucking + // with any crypto dependencies. Note that this just has to be random and + // unique, not cryptographically secure, so it's fine. + var kp = Keypair.random().rawPublicKey(); + var nonce = new src_xdr.Int64(bytesToInt64(kp)); + var pk = publicKey || signer.publicKey(); + if (!pk) { + throw new Error("authorizeInvocation requires publicKey parameter"); + } + var entry = new src_xdr.SorobanAuthorizationEntry({ + rootInvocation: invocation, + credentials: src_xdr.SorobanCredentials.sorobanCredentialsAddress(new src_xdr.SorobanAddressCredentials({ + address: new Address(pk).toScAddress(), + nonce: nonce, + signatureExpirationLedger: 0, + // replaced + signature: src_xdr.ScVal.scvVec([]) // replaced + })) + }); + return authorizeEntry(entry, signer, validUntilLedgerSeq, networkPassphrase); +} +function bytesToInt64(bytes) { + // eslint-disable-next-line no-bitwise + return bytes.subarray(0, 8).reduce(function (accum, b) { + return accum << 8 | b; + }, 0); +} +;// ./src/invocation.js +function invocation_typeof(o) { "@babel/helpers - typeof"; return invocation_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, invocation_typeof(o); } +function invocation_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function invocation_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? invocation_ownKeys(Object(t), !0).forEach(function (r) { invocation_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : invocation_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function invocation_defineProperty(e, r, t) { return (r = invocation_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function invocation_toPropertyKey(t) { var i = invocation_toPrimitive(t, "string"); return "symbol" == invocation_typeof(i) ? i : i + ""; } +function invocation_toPrimitive(t, r) { if ("object" != invocation_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != invocation_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + +/** + * @typedef CreateInvocation + * + * @prop {'wasm'|'sac'} type a type indicating if this creation was a custom + * contract or a wrapping of an existing Stellar asset + * @prop {string} [token] when `type=='sac'`, the canonical {@link Asset} that + * is being wrapped by this Stellar Asset Contract + * @prop {object} [wasm] when `type=='wasm'`, add'l creation parameters + * + * @prop {string} wasm.hash hex hash of WASM bytecode backing this contract + * @prop {string} wasm.address contract address of this deployment + * @prop {string} wasm.salt hex salt that the user consumed when creating + * this contract (encoded in the resulting address) + * @prop {any[]} [wasm.constructorArgs] a list of natively-represented values + * (see {@link scValToNative}) that are passed to the constructor when + * creating this contract + */ + +/** + * @typedef ExecuteInvocation + * + * @prop {string} source the strkey of the contract (C...) being invoked + * @prop {string} function the name of the function being invoked + * @prop {any[]} args the natively-represented parameters to the function + * invocation (see {@link scValToNative} for rules on how they're + * represented a JS types) + */ + +/** + * @typedef InvocationTree + * @prop {'execute' | 'create'} type the type of invocation occurring, either + * contract creation or host function execution + * @prop {CreateInvocation | ExecuteInvocation} args the parameters to the + * invocation, depending on the type + * @prop {InvocationTree[]} invocations any sub-invocations that (may) occur + * as a result of this invocation (i.e. a tree of call stacks) + */ + +/** + * Turns a raw invocation tree into a human-readable format. + * + * This is designed to make the invocation tree easier to understand in order to + * inform users about the side-effects of their contract calls. This will help + * make informed decisions about whether or not a particular invocation will + * result in what you expect it to. + * + * @param {xdr.SorobanAuthorizedInvocation} root the raw XDR of the invocation, + * likely acquired from transaction simulation. this is either from the + * {@link Operation.invokeHostFunction} itself (the `func` field), or from + * the authorization entries ({@link xdr.SorobanAuthorizationEntry}, the + * `rootInvocation` field) + * + * @returns {InvocationTree} a human-readable version of the invocation tree + * + * @example + * Here, we show a browser modal after simulating an arbitrary transaction, + * `tx`, which we assume has an `Operation.invokeHostFunction` inside of it: + * + * ```typescript + * import { Server, buildInvocationTree } from '@stellar/stellar-sdk'; + * + * const s = new Server("fill in accordingly"); + * + * s.simulateTransaction(tx).then( + * (resp: SorobanRpc.SimulateTransactionResponse) => { + * if (SorobanRpc.isSuccessfulSim(resp) && ) { + * // bold assumption: there's a valid result with an auth entry + * alert( + * "You are authorizing the following invocation:\n" + + * JSON.stringify( + * buildInvocationTree(resp.result!.auth[0].rootInvocation()), + * null, + * 2 + * ) + * ); + * } + * } + * ); + * ``` + */ +function buildInvocationTree(root) { + var fn = root["function"](); + + /** @type {InvocationTree} */ + var output = {}; + + /** @type {xdr.CreateContractArgs|xdr.CreateContractArgsV2|xdr.InvokeContractArgs} */ + var inner = fn.value(); + switch (fn["switch"]().value) { + // sorobanAuthorizedFunctionTypeContractFn + case 0: + output.type = 'execute'; + output.args = { + source: Address.fromScAddress(inner.contractAddress()).toString(), + "function": inner.functionName(), + args: inner.args().map(function (arg) { + return scValToNative(arg); + }) + }; + break; + + // sorobanAuthorizedFunctionTypeCreateContractHostFn + // sorobanAuthorizedFunctionTypeCreateContractV2HostFn + case 1: // fallthrough: just no ctor args in V1 + case 2: + { + var createV2 = fn["switch"]().value === 2; + output.type = 'create'; + output.args = {}; + + // If the executable is a WASM, the preimage MUST be an address. If it's a + // token, the preimage MUST be an asset. This is a cheeky way to check + // that, because wasm=0, token=1 and address=0, asset=1 in the XDR switch + // values. + // + // The first part may not be true in V2, but we'd need to update this code + // anyway so it can still be an error. + var _ref = [inner.executable(), inner.contractIdPreimage()], + exec = _ref[0], + preimage = _ref[1]; + if (!!exec["switch"]().value !== !!preimage["switch"]().value) { + throw new Error("creation function appears invalid: ".concat(JSON.stringify(inner), " (should be wasm+address or token+asset)")); + } + switch (exec["switch"]().value) { + // contractExecutableWasm + case 0: + { + /** @type {xdr.ContractIdPreimageFromAddress} */ + var details = preimage.fromAddress(); + output.args.type = 'wasm'; + output.args.wasm = invocation_objectSpread({ + salt: details.salt().toString('hex'), + hash: exec.wasmHash().toString('hex'), + address: Address.fromScAddress(details.address()).toString() + }, createV2 && { + constructorArgs: inner.constructorArgs().map(function (arg) { + return scValToNative(arg); + }) + }); + break; + } + + // contractExecutableStellarAsset + case 1: + output.args.type = 'sac'; + output.args.asset = Asset.fromOperation(preimage.fromAsset()).toString(); + break; + default: + throw new Error("unknown creation type: ".concat(JSON.stringify(exec))); + } + break; + } + default: + throw new Error("unknown invocation type (".concat(fn["switch"](), "): ").concat(JSON.stringify(fn))); + } + output.invocations = root.subInvocations().map(function (i) { + return buildInvocationTree(i); + }); + return output; +} + +/** + * @callback InvocationWalker + * + * @param {xdr.SorobanAuthorizedInvocation} node the currently explored node + * @param {number} depth the depth of the tree this node is occurring at (the + * root starts at a depth of 1) + * @param {xdr.SorobanAuthorizedInvocation} [parent] this `node`s parent node, + * if any (i.e. this doesn't exist at the root) + * + * @returns {boolean|null|void} returning exactly `false` is a hint to stop + * exploring, other values are ignored + */ + +/** + * Executes a callback function on each node in the tree until stopped. + * + * Nodes are walked in a depth-first order. Returning `false` from the callback + * stops further depth exploration at that node, but it does not stop the walk + * in a "global" view. + * + * @param {xdr.SorobanAuthorizedInvocation} root the tree to explore + * @param {InvocationWalker} callback the callback to execute for each node + * @returns {void} + */ +function walkInvocationTree(root, callback) { + walkHelper(root, 1, callback); +} +function walkHelper(node, depth, callback, parent) { + if (callback(node, depth, parent) === false /* allow void rv */) { + return; + } + node.subInvocations().forEach(function (i) { + return walkHelper(i, depth + 1, callback, node); + }); +} +;// ./src/index.js +/* module decorator */ module = __webpack_require__.hmd(module); +/* eslint-disable import/no-import-module-exports */ + + + + + + + + + + + + + + + + + + + + + + + + + + + +// +// Soroban +// + + + + + + + + + +/* harmony default export */ const src = (module.exports); + +/***/ }), + +/***/ 8002: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./min')} */ +module.exports = Math.min; + + +/***/ }), + +/***/ 8068: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./syntax')} */ +module.exports = SyntaxError; + + +/***/ }), + +/***/ 8075: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var GetIntrinsic = __webpack_require__(453); + +var callBind = __webpack_require__(487); + +var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); + +module.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBind(intrinsic); + } + return intrinsic; +}; + + +/***/ }), + +/***/ 8184: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var callBound = __webpack_require__(6556); +var safeRegexTest = __webpack_require__(9721); +var isFnRegex = safeRegexTest(/^\s*(?:function)?\*/); +var hasToStringTag = __webpack_require__(9092)(); +var getProto = __webpack_require__(3628); + +var toStr = callBound('Object.prototype.toString'); +var fnToStr = callBound('Function.prototype.toString'); + +var getGeneratorFunc = function () { // eslint-disable-line consistent-return + if (!hasToStringTag) { + return false; + } + try { + return Function('return function*() {}')(); + } catch (e) { + } +}; +/** @type {undefined | false | null | GeneratorFunctionConstructor} */ +var GeneratorFunction; + +/** @type {import('.')} */ +module.exports = function isGeneratorFunction(fn) { + if (typeof fn !== 'function') { + return false; + } + if (isFnRegex(fnToStr(fn))) { + return true; + } + if (!hasToStringTag) { + var str = toStr(fn); + return str === '[object GeneratorFunction]'; + } + if (!getProto) { + return false; + } + if (typeof GeneratorFunction === 'undefined') { + var generatorFunc = getGeneratorFunc(); + GeneratorFunction = generatorFunc + // eslint-disable-next-line no-extra-parens + ? /** @type {GeneratorFunctionConstructor} */ (getProto(generatorFunc)) + : false; + } + return getProto(fn) === GeneratorFunction; +}; + + +/***/ }), + +/***/ 8287: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/* provided dependency */ var console = __webpack_require__(6763); +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + + + +const base64 = __webpack_require__(7526) +const ieee754 = __webpack_require__(251) +const customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +const K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + const arr = new Uint8Array(1) + const proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + const buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + const valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + const b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + const length = byteLength(string, encoding) | 0 + let buf = createBuffer(length) + + const actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + const length = array.length < 0 ? 0 : checked(array.length) | 0 + const buf = createBuffer(length) + for (let i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + const copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + let buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + const len = checked(obj.length) | 0 + const buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + let x = a.length + let y = b.length + + for (let i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + let i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + const buffer = Buffer.allocUnsafe(length) + let pos = 0 + for (i = 0; i < list.length; ++i) { + let buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + buf.copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + const len = string.length + const mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + let loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + let loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + const i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + const len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (let i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + const len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (let i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + const len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (let i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + const length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + let str = '' + const max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + let x = thisEnd - thisStart + let y = end - start + const len = Math.min(x, y) + + const thisCopy = this.slice(thisStart, thisEnd) + const targetCopy = target.slice(start, end) + + for (let i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + let indexSize = 1 + let arrLength = arr.length + let valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + let i + if (dir) { + let foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + let found = true + for (let j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + const remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + const strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + let i + for (i = 0; i < length; ++i) { + const parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + const remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + let loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + const res = [] + + let i = start + while (i < end) { + const firstByte = buf[i] + let codePoint = null + let bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + let secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +const MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + const len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + let res = '' + let i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + const len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + let out = '' + for (let i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + const bytes = buf.slice(start, end) + let res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (let i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + const len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + const newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + let val = this[offset + --byteLength] + let mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const lo = first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24 + + const hi = this[++offset] + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + last * 2 ** 24 + + return BigInt(lo) + (BigInt(hi) << BigInt(32)) +}) + +Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const hi = first * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + const lo = this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last + + return (BigInt(hi) << BigInt(32)) + BigInt(lo) +}) + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let i = byteLength + let mul = 1 + let val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = this[offset + 4] + + this[offset + 5] * 2 ** 8 + + this[offset + 6] * 2 ** 16 + + (last << 24) // Overflow + + return (BigInt(val) << BigInt(32)) + + BigInt(first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24) +}) + +Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = (first << 24) + // Overflow + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + return (BigInt(val) << BigInt(32)) + + BigInt(this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last) +}) + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let mul = 1 + let i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let i = byteLength - 1 + let mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function wrtBigUInt64LE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + return offset +} + +function wrtBigUInt64BE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset + 7] = lo + lo = lo >> 8 + buf[offset + 6] = lo + lo = lo >> 8 + buf[offset + 5] = lo + lo = lo >> 8 + buf[offset + 4] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset + 3] = hi + hi = hi >> 8 + buf[offset + 2] = hi + hi = hi >> 8 + buf[offset + 1] = hi + hi = hi >> 8 + buf[offset] = hi + return offset + 8 +} + +Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = 0 + let mul = 1 + let sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = byteLength - 1 + let mul = 1 + let sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + const len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + const code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + let i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + const bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + const len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// CUSTOM ERRORS +// ============= + +// Simplified versions from Node, changed for Buffer-only usage +const errors = {} +function E (sym, getMessage, Base) { + errors[sym] = class NodeError extends Base { + constructor () { + super() + + Object.defineProperty(this, 'message', { + value: getMessage.apply(this, arguments), + writable: true, + configurable: true + }) + + // Add the error code to the name to include it in the stack trace. + this.name = `${this.name} [${sym}]` + // Access the stack to generate the error message including the error code + // from the name. + this.stack // eslint-disable-line no-unused-expressions + // Reset the name to the actual name. + delete this.name + } + + get code () { + return sym + } + + set code (value) { + Object.defineProperty(this, 'code', { + configurable: true, + enumerable: true, + value, + writable: true + }) + } + + toString () { + return `${this.name} [${sym}]: ${this.message}` + } + } +} + +E('ERR_BUFFER_OUT_OF_BOUNDS', + function (name) { + if (name) { + return `${name} is outside of buffer bounds` + } + + return 'Attempt to access memory outside buffer bounds' + }, RangeError) +E('ERR_INVALID_ARG_TYPE', + function (name, actual) { + return `The "${name}" argument must be of type number. Received type ${typeof actual}` + }, TypeError) +E('ERR_OUT_OF_RANGE', + function (str, range, input) { + let msg = `The value of "${str}" is out of range.` + let received = input + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { + received = addNumericalSeparator(String(input)) + } else if (typeof input === 'bigint') { + received = String(input) + if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { + received = addNumericalSeparator(received) + } + received += 'n' + } + msg += ` It must be ${range}. Received ${received}` + return msg + }, RangeError) + +function addNumericalSeparator (val) { + let res = '' + let i = val.length + const start = val[0] === '-' ? 1 : 0 + for (; i >= start + 4; i -= 3) { + res = `_${val.slice(i - 3, i)}${res}` + } + return `${val.slice(0, i)}${res}` +} + +// CHECK FUNCTIONS +// =============== + +function checkBounds (buf, offset, byteLength) { + validateNumber(offset, 'offset') + if (buf[offset] === undefined || buf[offset + byteLength] === undefined) { + boundsError(offset, buf.length - (byteLength + 1)) + } +} + +function checkIntBI (value, min, max, buf, offset, byteLength) { + if (value > max || value < min) { + const n = typeof min === 'bigint' ? 'n' : '' + let range + if (byteLength > 3) { + if (min === 0 || min === BigInt(0)) { + range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}` + } else { + range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + + `${(byteLength + 1) * 8 - 1}${n}` + } + } else { + range = `>= ${min}${n} and <= ${max}${n}` + } + throw new errors.ERR_OUT_OF_RANGE('value', range, value) + } + checkBounds(buf, offset, byteLength) +} + +function validateNumber (value, name) { + if (typeof value !== 'number') { + throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value) + } +} + +function boundsError (value, length, type) { + if (Math.floor(value) !== value) { + validateNumber(value, type) + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value) + } + + if (length < 0) { + throw new errors.ERR_BUFFER_OUT_OF_BOUNDS() + } + + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', + `>= ${type ? 1 : 0} and <= ${length}`, + value) +} + +// HELPER FUNCTIONS +// ================ + +const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + let codePoint + const length = string.length + let leadSurrogate = null + const bytes = [] + + for (let i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + let c, hi, lo + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + let i + for (i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +const hexSliceLookupTable = (function () { + const alphabet = '0123456789abcdef' + const table = new Array(256) + for (let i = 0; i < 16; ++i) { + const i16 = i * 16 + for (let j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +// Return not function with Error if BigInt not supported +function defineBigIntMethod (fn) { + return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn +} + +function BufferBigIntNotDefined () { + throw new Error('BigInt not supported') +} + + +/***/ }), + +/***/ 8403: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +// modified from https://github.com/es-shims/es6-shim +var objectKeys = __webpack_require__(1189); +var hasSymbols = __webpack_require__(1333)(); +var callBound = __webpack_require__(6556); +var $Object = __webpack_require__(9612); +var $push = callBound('Array.prototype.push'); +var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable'); +var originalGetSymbols = hasSymbols ? $Object.getOwnPropertySymbols : null; + +// eslint-disable-next-line no-unused-vars +module.exports = function assign(target, source1) { + if (target == null) { throw new TypeError('target must be an object'); } + var to = $Object(target); // step 1 + if (arguments.length === 1) { + return to; // step 2 + } + for (var s = 1; s < arguments.length; ++s) { + var from = $Object(arguments[s]); // step 3.a.i + + // step 3.a.ii: + var keys = objectKeys(from); + var getSymbols = hasSymbols && ($Object.getOwnPropertySymbols || originalGetSymbols); + if (getSymbols) { + var syms = getSymbols(from); + for (var j = 0; j < syms.length; ++j) { + var key = syms[j]; + if ($propIsEnumerable(from, key)) { + $push(keys, key); + } + } + } + + // step 3.a.iii: + for (var i = 0; i < keys.length; ++i) { + var nextKey = keys[i]; + if ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2 + var propValue = from[nextKey]; // step 3.a.iii.2.a + to[nextKey] = propValue; // step 3.a.iii.2.b + } + } + } + + return to; // step 4 +}; + + +/***/ }), + +/***/ 8452: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var keys = __webpack_require__(1189); +var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; + +var toStr = Object.prototype.toString; +var concat = Array.prototype.concat; +var defineDataProperty = __webpack_require__(41); + +var isFunction = function (fn) { + return typeof fn === 'function' && toStr.call(fn) === '[object Function]'; +}; + +var supportsDescriptors = __webpack_require__(592)(); + +var defineProperty = function (object, name, value, predicate) { + if (name in object) { + if (predicate === true) { + if (object[name] === value) { + return; + } + } else if (!isFunction(predicate) || !predicate()) { + return; + } + } + + if (supportsDescriptors) { + defineDataProperty(object, name, value, true); + } else { + defineDataProperty(object, name, value); + } +}; + +var defineProperties = function (object, map) { + var predicates = arguments.length > 2 ? arguments[2] : {}; + var props = keys(map); + if (hasSymbols) { + props = concat.call(props, Object.getOwnPropertySymbols(map)); + } + for (var i = 0; i < props.length; i += 1) { + defineProperty(object, props[i], map[props[i]], predicates[props[i]]); + } +}; + +defineProperties.supportsDescriptors = !!supportsDescriptors; + +module.exports = defineProperties; + + +/***/ }), + +/***/ 8648: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./Reflect.getPrototypeOf')} */ +module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null; + + +/***/ }), + +/***/ 8875: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var keysShim; +if (!Object.keys) { + // modified from https://github.com/es-shims/es5-shim + var has = Object.prototype.hasOwnProperty; + var toStr = Object.prototype.toString; + var isArgs = __webpack_require__(1093); // eslint-disable-line global-require + var isEnumerable = Object.prototype.propertyIsEnumerable; + var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); + var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); + var dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ]; + var equalsConstructorPrototype = function (o) { + var ctor = o.constructor; + return ctor && ctor.prototype === o; + }; + var excludedKeys = { + $applicationCache: true, + $console: true, + $external: true, + $frame: true, + $frameElement: true, + $frames: true, + $innerHeight: true, + $innerWidth: true, + $onmozfullscreenchange: true, + $onmozfullscreenerror: true, + $outerHeight: true, + $outerWidth: true, + $pageXOffset: true, + $pageYOffset: true, + $parent: true, + $scrollLeft: true, + $scrollTop: true, + $scrollX: true, + $scrollY: true, + $self: true, + $webkitIndexedDB: true, + $webkitStorageInfo: true, + $window: true + }; + var hasAutomationEqualityBug = (function () { + /* global window */ + if (typeof window === 'undefined') { return false; } + for (var k in window) { + try { + if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { + try { + equalsConstructorPrototype(window[k]); + } catch (e) { + return true; + } + } + } catch (e) { + return true; + } + } + return false; + }()); + var equalsConstructorPrototypeIfNotBuggy = function (o) { + /* global window */ + if (typeof window === 'undefined' || !hasAutomationEqualityBug) { + return equalsConstructorPrototype(o); + } + try { + return equalsConstructorPrototype(o); + } catch (e) { + return false; + } + }; + + keysShim = function keys(object) { + var isObject = object !== null && typeof object === 'object'; + var isFunction = toStr.call(object) === '[object Function]'; + var isArguments = isArgs(object); + var isString = isObject && toStr.call(object) === '[object String]'; + var theKeys = []; + + if (!isObject && !isFunction && !isArguments) { + throw new TypeError('Object.keys called on a non-object'); + } + + var skipProto = hasProtoEnumBug && isFunction; + if (isString && object.length > 0 && !has.call(object, 0)) { + for (var i = 0; i < object.length; ++i) { + theKeys.push(String(i)); + } + } + + if (isArguments && object.length > 0) { + for (var j = 0; j < object.length; ++j) { + theKeys.push(String(j)); + } + } else { + for (var name in object) { + if (!(skipProto && name === 'prototype') && has.call(object, name)) { + theKeys.push(String(name)); + } + } + } + + if (hasDontEnumBug) { + var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); + + for (var k = 0; k < dontEnums.length; ++k) { + if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { + theKeys.push(dontEnums[k]); + } + } + } + return theKeys; + }; +} +module.exports = keysShim; + + +/***/ }), + +/***/ 8947: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (true) { + // Node.js. + crypto = __webpack_require__(1281); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})( true && module.exports ? module.exports : (self.nacl = self.nacl || {})); + + +/***/ }), + +/***/ 8968: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./floor')} */ +module.exports = Math.floor; + + +/***/ }), + +/***/ 9032: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +// Currently in sync with Node.js lib/internal/util/types.js +// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9 + + + +var isArgumentsObject = __webpack_require__(7244); +var isGeneratorFunction = __webpack_require__(8184); +var whichTypedArray = __webpack_require__(5767); +var isTypedArray = __webpack_require__(5680); + +function uncurryThis(f) { + return f.call.bind(f); +} + +var BigIntSupported = typeof BigInt !== 'undefined'; +var SymbolSupported = typeof Symbol !== 'undefined'; + +var ObjectToString = uncurryThis(Object.prototype.toString); + +var numberValue = uncurryThis(Number.prototype.valueOf); +var stringValue = uncurryThis(String.prototype.valueOf); +var booleanValue = uncurryThis(Boolean.prototype.valueOf); + +if (BigIntSupported) { + var bigIntValue = uncurryThis(BigInt.prototype.valueOf); +} + +if (SymbolSupported) { + var symbolValue = uncurryThis(Symbol.prototype.valueOf); +} + +function checkBoxedPrimitive(value, prototypeValueOf) { + if (typeof value !== 'object') { + return false; + } + try { + prototypeValueOf(value); + return true; + } catch(e) { + return false; + } +} + +exports.isArgumentsObject = isArgumentsObject; +exports.isGeneratorFunction = isGeneratorFunction; +exports.isTypedArray = isTypedArray; + +// Taken from here and modified for better browser support +// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js +function isPromise(input) { + return ( + ( + typeof Promise !== 'undefined' && + input instanceof Promise + ) || + ( + input !== null && + typeof input === 'object' && + typeof input.then === 'function' && + typeof input.catch === 'function' + ) + ); +} +exports.isPromise = isPromise; + +function isArrayBufferView(value) { + if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { + return ArrayBuffer.isView(value); + } + + return ( + isTypedArray(value) || + isDataView(value) + ); +} +exports.isArrayBufferView = isArrayBufferView; + + +function isUint8Array(value) { + return whichTypedArray(value) === 'Uint8Array'; +} +exports.isUint8Array = isUint8Array; + +function isUint8ClampedArray(value) { + return whichTypedArray(value) === 'Uint8ClampedArray'; +} +exports.isUint8ClampedArray = isUint8ClampedArray; + +function isUint16Array(value) { + return whichTypedArray(value) === 'Uint16Array'; +} +exports.isUint16Array = isUint16Array; + +function isUint32Array(value) { + return whichTypedArray(value) === 'Uint32Array'; +} +exports.isUint32Array = isUint32Array; + +function isInt8Array(value) { + return whichTypedArray(value) === 'Int8Array'; +} +exports.isInt8Array = isInt8Array; + +function isInt16Array(value) { + return whichTypedArray(value) === 'Int16Array'; +} +exports.isInt16Array = isInt16Array; + +function isInt32Array(value) { + return whichTypedArray(value) === 'Int32Array'; +} +exports.isInt32Array = isInt32Array; + +function isFloat32Array(value) { + return whichTypedArray(value) === 'Float32Array'; +} +exports.isFloat32Array = isFloat32Array; + +function isFloat64Array(value) { + return whichTypedArray(value) === 'Float64Array'; +} +exports.isFloat64Array = isFloat64Array; + +function isBigInt64Array(value) { + return whichTypedArray(value) === 'BigInt64Array'; +} +exports.isBigInt64Array = isBigInt64Array; + +function isBigUint64Array(value) { + return whichTypedArray(value) === 'BigUint64Array'; +} +exports.isBigUint64Array = isBigUint64Array; + +function isMapToString(value) { + return ObjectToString(value) === '[object Map]'; +} +isMapToString.working = ( + typeof Map !== 'undefined' && + isMapToString(new Map()) +); + +function isMap(value) { + if (typeof Map === 'undefined') { + return false; + } + + return isMapToString.working + ? isMapToString(value) + : value instanceof Map; +} +exports.isMap = isMap; + +function isSetToString(value) { + return ObjectToString(value) === '[object Set]'; +} +isSetToString.working = ( + typeof Set !== 'undefined' && + isSetToString(new Set()) +); +function isSet(value) { + if (typeof Set === 'undefined') { + return false; + } + + return isSetToString.working + ? isSetToString(value) + : value instanceof Set; +} +exports.isSet = isSet; + +function isWeakMapToString(value) { + return ObjectToString(value) === '[object WeakMap]'; +} +isWeakMapToString.working = ( + typeof WeakMap !== 'undefined' && + isWeakMapToString(new WeakMap()) +); +function isWeakMap(value) { + if (typeof WeakMap === 'undefined') { + return false; + } + + return isWeakMapToString.working + ? isWeakMapToString(value) + : value instanceof WeakMap; +} +exports.isWeakMap = isWeakMap; + +function isWeakSetToString(value) { + return ObjectToString(value) === '[object WeakSet]'; +} +isWeakSetToString.working = ( + typeof WeakSet !== 'undefined' && + isWeakSetToString(new WeakSet()) +); +function isWeakSet(value) { + return isWeakSetToString(value); +} +exports.isWeakSet = isWeakSet; + +function isArrayBufferToString(value) { + return ObjectToString(value) === '[object ArrayBuffer]'; +} +isArrayBufferToString.working = ( + typeof ArrayBuffer !== 'undefined' && + isArrayBufferToString(new ArrayBuffer()) +); +function isArrayBuffer(value) { + if (typeof ArrayBuffer === 'undefined') { + return false; + } + + return isArrayBufferToString.working + ? isArrayBufferToString(value) + : value instanceof ArrayBuffer; +} +exports.isArrayBuffer = isArrayBuffer; + +function isDataViewToString(value) { + return ObjectToString(value) === '[object DataView]'; +} +isDataViewToString.working = ( + typeof ArrayBuffer !== 'undefined' && + typeof DataView !== 'undefined' && + isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1)) +); +function isDataView(value) { + if (typeof DataView === 'undefined') { + return false; + } + + return isDataViewToString.working + ? isDataViewToString(value) + : value instanceof DataView; +} +exports.isDataView = isDataView; + +// Store a copy of SharedArrayBuffer in case it's deleted elsewhere +var SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined; +function isSharedArrayBufferToString(value) { + return ObjectToString(value) === '[object SharedArrayBuffer]'; +} +function isSharedArrayBuffer(value) { + if (typeof SharedArrayBufferCopy === 'undefined') { + return false; + } + + if (typeof isSharedArrayBufferToString.working === 'undefined') { + isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy()); + } + + return isSharedArrayBufferToString.working + ? isSharedArrayBufferToString(value) + : value instanceof SharedArrayBufferCopy; +} +exports.isSharedArrayBuffer = isSharedArrayBuffer; + +function isAsyncFunction(value) { + return ObjectToString(value) === '[object AsyncFunction]'; +} +exports.isAsyncFunction = isAsyncFunction; + +function isMapIterator(value) { + return ObjectToString(value) === '[object Map Iterator]'; +} +exports.isMapIterator = isMapIterator; + +function isSetIterator(value) { + return ObjectToString(value) === '[object Set Iterator]'; +} +exports.isSetIterator = isSetIterator; + +function isGeneratorObject(value) { + return ObjectToString(value) === '[object Generator]'; +} +exports.isGeneratorObject = isGeneratorObject; + +function isWebAssemblyCompiledModule(value) { + return ObjectToString(value) === '[object WebAssembly.Module]'; +} +exports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule; + +function isNumberObject(value) { + return checkBoxedPrimitive(value, numberValue); +} +exports.isNumberObject = isNumberObject; + +function isStringObject(value) { + return checkBoxedPrimitive(value, stringValue); +} +exports.isStringObject = isStringObject; + +function isBooleanObject(value) { + return checkBoxedPrimitive(value, booleanValue); +} +exports.isBooleanObject = isBooleanObject; + +function isBigIntObject(value) { + return BigIntSupported && checkBoxedPrimitive(value, bigIntValue); +} +exports.isBigIntObject = isBigIntObject; + +function isSymbolObject(value) { + return SymbolSupported && checkBoxedPrimitive(value, symbolValue); +} +exports.isSymbolObject = isSymbolObject; + +function isBoxedPrimitive(value) { + return ( + isNumberObject(value) || + isStringObject(value) || + isBooleanObject(value) || + isBigIntObject(value) || + isSymbolObject(value) + ); +} +exports.isBoxedPrimitive = isBoxedPrimitive; + +function isAnyArrayBuffer(value) { + return typeof Uint8Array !== 'undefined' && ( + isArrayBuffer(value) || + isSharedArrayBuffer(value) + ); +} +exports.isAnyArrayBuffer = isAnyArrayBuffer; + +['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) { + Object.defineProperty(exports, method, { + enumerable: false, + value: function() { + throw new Error(method + ' is not supported in userland'); + } + }); +}); + + +/***/ }), + +/***/ 9092: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var hasSymbols = __webpack_require__(1333); + +/** @type {import('.')} */ +module.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; +}; + + +/***/ }), + +/***/ 9133: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var implementation = __webpack_require__(8403); + +var lacksProperEnumerationOrder = function () { + if (!Object.assign) { + return false; + } + /* + * v8, specifically in node 4.x, has a bug with incorrect property enumeration order + * note: this does not detect the bug unless there's 20 characters + */ + var str = 'abcdefghijklmnopqrst'; + var letters = str.split(''); + var map = {}; + for (var i = 0; i < letters.length; ++i) { + map[letters[i]] = letters[i]; + } + var obj = Object.assign({}, map); + var actual = ''; + for (var k in obj) { + actual += k; + } + return str !== actual; +}; + +var assignHasPendingExceptions = function () { + if (!Object.assign || !Object.preventExtensions) { + return false; + } + /* + * Firefox 37 still has "pending exception" logic in its Object.assign implementation, + * which is 72% slower than our shim, and Firefox 40's native implementation. + */ + var thrower = Object.preventExtensions({ 1: 2 }); + try { + Object.assign(thrower, 'xy'); + } catch (e) { + return thrower[1] === 'y'; + } + return false; +}; + +module.exports = function getPolyfill() { + if (!Object.assign) { + return implementation; + } + if (lacksProperEnumerationOrder()) { + return implementation; + } + if (assignHasPendingExceptions()) { + return implementation; + } + return Object.assign; +}; + + +/***/ }), + +/***/ 9209: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var possibleNames = __webpack_require__(6578); + +var g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis; + +/** @type {import('.')} */ +module.exports = function availableTypedArrays() { + var /** @type {ReturnType} */ out = []; + for (var i = 0; i < possibleNames.length; i++) { + if (typeof g[possibleNames[i]] === 'function') { + // @ts-expect-error + out[out.length] = possibleNames[i]; + } + } + return out; +}; + + +/***/ }), + +/***/ 9211: +/***/ ((module) => { + +"use strict"; + + +var numberIsNaN = function (value) { + return value !== value; +}; + +module.exports = function is(a, b) { + if (a === 0 && b === 0) { + return 1 / a === 1 / b; + } + if (a === b) { + return true; + } + if (numberIsNaN(a) && numberIsNaN(b)) { + return true; + } + return false; +}; + + + +/***/ }), + +/***/ 9290: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./range')} */ +module.exports = RangeError; + + +/***/ }), + +/***/ 9353: +/***/ ((module) => { + +"use strict"; + + +/* eslint no-invalid-this: 1 */ + +var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; +var toStr = Object.prototype.toString; +var max = Math.max; +var funcType = '[object Function]'; + +var concatty = function concatty(a, b) { + var arr = []; + + for (var i = 0; i < a.length; i += 1) { + arr[i] = a[i]; + } + for (var j = 0; j < b.length; j += 1) { + arr[j + a.length] = b[j]; + } + + return arr; +}; + +var slicy = function slicy(arrLike, offset) { + var arr = []; + for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { + arr[j] = arrLike[i]; + } + return arr; +}; + +var joiny = function (arr, joiner) { + var str = ''; + for (var i = 0; i < arr.length; i += 1) { + str += arr[i]; + if (i + 1 < arr.length) { + str += joiner; + } + } + return str; +}; + +module.exports = function bind(that) { + var target = this; + if (typeof target !== 'function' || toStr.apply(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slicy(arguments, 1); + + var bound; + var binder = function () { + if (this instanceof bound) { + var result = target.apply( + this, + concatty(args, arguments) + ); + if (Object(result) === result) { + return result; + } + return this; + } + return target.apply( + that, + concatty(args, arguments) + ); + + }; + + var boundLength = max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0; i < boundLength; i++) { + boundArgs[i] = '$' + i; + } + + bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); + + if (target.prototype) { + var Empty = function Empty() {}; + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + + return bound; +}; + + +/***/ }), + +/***/ 9383: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('.')} */ +module.exports = Error; + + +/***/ }), + +/***/ 9394: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var implementation = __webpack_require__(9211); + +module.exports = function getPolyfill() { + return typeof Object.is === 'function' ? Object.is : implementation; +}; + + +/***/ }), + +/***/ 9538: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./ref')} */ +module.exports = ReferenceError; + + +/***/ }), + +/***/ 9597: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Currently in sync with Node.js lib/internal/errors.js +// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f + +/* eslint node-core/documented-errors: "error" */ +/* eslint node-core/alphabetize-errors: "error" */ +/* eslint node-core/prefer-util-format-errors: "error" */ + + + +// The whole point behind this internal module is to allow Node.js to no +// longer be forced to treat every error message change as a semver-major +// change. The NodeError classes here all expose a `code` property whose +// value statically and permanently identifies the error. While the error +// message may change, the code should not. +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +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, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +var codes = {}; + +// Lazy loaded +var assert; +var util; +function createErrorType(code, message, Base) { + if (!Base) { + Base = Error; + } + function getMessage(arg1, arg2, arg3) { + if (typeof message === 'string') { + return message; + } else { + return message(arg1, arg2, arg3); + } + } + var NodeError = /*#__PURE__*/function (_Base) { + _inherits(NodeError, _Base); + var _super = _createSuper(NodeError); + function NodeError(arg1, arg2, arg3) { + var _this; + _classCallCheck(this, NodeError); + _this = _super.call(this, getMessage(arg1, arg2, arg3)); + _this.code = code; + return _this; + } + return _createClass(NodeError); + }(Base); + codes[code] = NodeError; +} + +// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js +function oneOf(expected, thing) { + if (Array.isArray(expected)) { + var len = expected.length; + expected = expected.map(function (i) { + return String(i); + }); + if (len > 2) { + return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; + } else if (len === 2) { + return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); + } else { + return "of ".concat(thing, " ").concat(expected[0]); + } + } else { + return "of ".concat(thing, " ").concat(String(expected)); + } +} + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith +function startsWith(str, search, pos) { + return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; +} + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith +function endsWith(str, search, this_len) { + if (this_len === undefined || this_len > str.length) { + this_len = str.length; + } + return str.substring(this_len - search.length, this_len) === search; +} + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes +function includes(str, search, start) { + if (typeof start !== 'number') { + start = 0; + } + if (start + search.length > str.length) { + return false; + } else { + return str.indexOf(search, start) !== -1; + } +} +createErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The "%s" argument is ambiguous. %s', TypeError); +createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { + if (assert === undefined) assert = __webpack_require__(4148); + assert(typeof name === 'string', "'name' must be a string"); + + // determiner: 'must be' or 'must not be' + var determiner; + if (typeof expected === 'string' && startsWith(expected, 'not ')) { + determiner = 'must not be'; + expected = expected.replace(/^not /, ''); + } else { + determiner = 'must be'; + } + var msg; + if (endsWith(name, ' argument')) { + // For cases like 'first argument' + msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } else { + var type = includes(name, '.') ? 'property' : 'argument'; + msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } + + // TODO(BridgeAR): Improve the output by showing `null` and similar. + msg += ". Received type ".concat(_typeof(actual)); + return msg; +}, TypeError); +createErrorType('ERR_INVALID_ARG_VALUE', function (name, value) { + var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid'; + if (util === undefined) util = __webpack_require__(537); + var inspected = util.inspect(value); + if (inspected.length > 128) { + inspected = "".concat(inspected.slice(0, 128), "..."); + } + return "The argument '".concat(name, "' ").concat(reason, ". Received ").concat(inspected); +}, TypeError, RangeError); +createErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) { + var type; + if (value && value.constructor && value.constructor.name) { + type = "instance of ".concat(value.constructor.name); + } else { + type = "type ".concat(_typeof(value)); + } + return "Expected ".concat(input, " to be returned from the \"").concat(name, "\"") + " function but got ".concat(type, "."); +}, TypeError); +createErrorType('ERR_MISSING_ARGS', function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + if (assert === undefined) assert = __webpack_require__(4148); + assert(args.length > 0, 'At least one arg needs to be specified'); + var msg = 'The '; + var len = args.length; + args = args.map(function (a) { + return "\"".concat(a, "\""); + }); + switch (len) { + case 1: + msg += "".concat(args[0], " argument"); + break; + case 2: + msg += "".concat(args[0], " and ").concat(args[1], " arguments"); + break; + default: + msg += args.slice(0, len - 1).join(', '); + msg += ", and ".concat(args[len - 1], " arguments"); + break; + } + return "".concat(msg, " must be specified"); +}, TypeError); +module.exports.codes = codes; + +/***/ }), + +/***/ 9600: +/***/ ((module) => { + +"use strict"; + + +var fnToStr = Function.prototype.toString; +var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply; +var badArrayLike; +var isCallableMarker; +if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') { + try { + badArrayLike = Object.defineProperty({}, 'length', { + get: function () { + throw isCallableMarker; + } + }); + isCallableMarker = {}; + // eslint-disable-next-line no-throw-literal + reflectApply(function () { throw 42; }, null, badArrayLike); + } catch (_) { + if (_ !== isCallableMarker) { + reflectApply = null; + } + } +} else { + reflectApply = null; +} + +var constructorRegex = /^\s*class\b/; +var isES6ClassFn = function isES6ClassFunction(value) { + try { + var fnStr = fnToStr.call(value); + return constructorRegex.test(fnStr); + } catch (e) { + return false; // not a function + } +}; + +var tryFunctionObject = function tryFunctionToStr(value) { + try { + if (isES6ClassFn(value)) { return false; } + fnToStr.call(value); + return true; + } catch (e) { + return false; + } +}; +var toStr = Object.prototype.toString; +var objectClass = '[object Object]'; +var fnClass = '[object Function]'; +var genClass = '[object GeneratorFunction]'; +var ddaClass = '[object HTMLAllCollection]'; // IE 11 +var ddaClass2 = '[object HTML document.all class]'; +var ddaClass3 = '[object HTMLCollection]'; // IE 9-10 +var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag` + +var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing + +var isDDA = function isDocumentDotAll() { return false; }; +if (typeof document === 'object') { + // Firefox 3 canonicalizes DDA to undefined when it's not accessed directly + var all = document.all; + if (toStr.call(all) === toStr.call(document.all)) { + isDDA = function isDocumentDotAll(value) { + /* globals document: false */ + // in IE 6-8, typeof document.all is "object" and it's truthy + if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) { + try { + var str = toStr.call(value); + return ( + str === ddaClass + || str === ddaClass2 + || str === ddaClass3 // opera 12.16 + || str === objectClass // IE 6-8 + ) && value('') == null; // eslint-disable-line eqeqeq + } catch (e) { /**/ } + } + return false; + }; + } +} + +module.exports = reflectApply + ? function isCallable(value) { + if (isDDA(value)) { return true; } + if (!value) { return false; } + if (typeof value !== 'function' && typeof value !== 'object') { return false; } + try { + reflectApply(value, null, badArrayLike); + } catch (e) { + if (e !== isCallableMarker) { return false; } + } + return !isES6ClassFn(value) && tryFunctionObject(value); + } + : function isCallable(value) { + if (isDDA(value)) { return true; } + if (!value) { return false; } + if (typeof value !== 'function' && typeof value !== 'object') { return false; } + if (hasToStringTag) { return tryFunctionObject(value); } + if (isES6ClassFn(value)) { return false; } + var strClass = toStr.call(value); + if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; } + return tryFunctionObject(value); + }; + + +/***/ }), + +/***/ 9612: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('.')} */ +module.exports = Object; + + +/***/ }), + +/***/ 9675: +/***/ ((module) => { + +"use strict"; + + +/** @type {import('./type')} */ +module.exports = TypeError; + + +/***/ }), + +/***/ 9721: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var callBound = __webpack_require__(6556); +var isRegex = __webpack_require__(4035); + +var $exec = callBound('RegExp.prototype.exec'); +var $TypeError = __webpack_require__(9675); + +/** @type {import('.')} */ +module.exports = function regexTester(regex) { + if (!isRegex(regex)) { + throw new $TypeError('`regex` must be a RegExp'); + } + return function test(s) { + return $exec(regex, s) !== null; + }; +}; + + +/***/ }), + +/***/ 9957: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var call = Function.prototype.call; +var $hasOwn = Object.prototype.hasOwnProperty; +var bind = __webpack_require__(6743); + +/** @type {import('.')} */ +module.exports = bind.call(call, $hasOwn); + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ loaded: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/harmony module decorator */ +/******/ (() => { +/******/ __webpack_require__.hmd = (module) => { +/******/ module = Object.create(module); +/******/ if (!module.children) module.children = []; +/******/ Object.defineProperty(module, 'exports', { +/******/ enumerable: true, +/******/ set: () => { +/******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id); +/******/ } +/******/ }); +/******/ return module; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(7957); +/******/ StellarBase = __webpack_exports__; +/******/ +/******/ })() +; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/dist/stellar-base.min.js b/node_modules/@stellar/stellar-base/dist/stellar-base.min.js new file mode 100644 index 00000000..1191380b --- /dev/null +++ b/node_modules/@stellar/stellar-base/dist/stellar-base.min.js @@ -0,0 +1,2 @@ +/*! For license information please see stellar-base.min.js.LICENSE.txt */ +var StellarBase;(()=>{var e={41:(e,t,r)=>{"use strict";var n=r(655),o=r(8068),i=r(9675),a=r(5795);e.exports=function(e,t,r){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new i("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var s=arguments.length>3?arguments[3]:null,u=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,l=arguments.length>6&&arguments[6],f=!!a&&a(e,t);if(n)n(e,t,{configurable:null===c&&f?f.configurable:!c,enumerable:null===s&&f?f.enumerable:!s,value:r,writable:null===u&&f?f.writable:!u});else{if(!l&&(s||u||c))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=r}}},76:e=>{"use strict";e.exports=Function.prototype.call},251:(e,t)=>{t.read=function(e,t,r,n,o){var i,a,s=8*o-n-1,u=(1<>1,l=-7,f=r?o-1:0,p=r?-1:1,h=e[t+f];for(f+=p,i=h&(1<<-l)-1,h>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=p,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=n;l>0;a=256*a+e[t+f],f+=p,l-=8);if(0===i)i=1-c;else{if(i===u)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,n),i-=c}return(h?-1:1)*a*Math.pow(2,i-n)},t.write=function(e,t,r,n,o,i){var a,s,u,c=8*i-o-1,l=(1<>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:i-1,d=n?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),(t+=a+f>=1?p/u:p*Math.pow(2,1-f))*u>=2&&(a++,u/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*u-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[r+h]=255&s,h+=d,s/=256,o-=8);for(a=a<0;e[r+h]=255&a,h+=d,a/=256,c-=8);e[r+h-d]|=128*y}},392:(e,t,r)=>{var n=r(2861).Buffer;function o(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}o.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=n.from(e,t));for(var r=this._block,o=this._blockSize,i=e.length,a=this._len,s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,o=(r-n)/4294967296;this._block.writeUInt32BE(o,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return e?i.toString(e):i},o.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=o},414:e=>{"use strict";e.exports=Math.round},453:(e,t,r)=>{"use strict";var n,o=r(9612),i=r(9383),a=r(1237),s=r(9290),u=r(9538),c=r(8068),l=r(9675),f=r(5345),p=r(1514),h=r(8968),d=r(6188),y=r(8002),m=r(5880),g=r(414),v=r(3093),b=Function,w=function(e){try{return b('"use strict"; return ('+e+").constructor;")()}catch(e){}},S=r(5795),k=r(655),E=function(){throw new l},A=S?function(){try{return E}catch(e){try{return S(arguments,"callee").get}catch(e){return E}}}():E,T=r(4039)(),O=r(3628),P=r(1064),x=r(8648),I=r(1002),B=r(76),_={},R="undefined"!=typeof Uint8Array&&O?O(Uint8Array):n,C={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":T&&O?O([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":_,"%AsyncGenerator%":_,"%AsyncGeneratorFunction%":_,"%AsyncIteratorPrototype%":_,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":i,"%eval%":eval,"%EvalError%":a,"%Float16Array%":"undefined"==typeof Float16Array?n:Float16Array,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":b,"%GeneratorFunction%":_,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":T&&O?O(O([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&T&&O?O((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":o,"%Object.getOwnPropertyDescriptor%":S,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":s,"%ReferenceError%":u,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&T&&O?O((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":T&&O?O(""[Symbol.iterator]()):n,"%Symbol%":T?Symbol:n,"%SyntaxError%":c,"%ThrowTypeError%":A,"%TypedArray%":R,"%TypeError%":l,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":f,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet,"%Function.prototype.call%":B,"%Function.prototype.apply%":I,"%Object.defineProperty%":k,"%Object.getPrototypeOf%":P,"%Math.abs%":p,"%Math.floor%":h,"%Math.max%":d,"%Math.min%":y,"%Math.pow%":m,"%Math.round%":g,"%Math.sign%":v,"%Reflect.getPrototypeOf%":x};if(O)try{null.error}catch(e){var U=O(O(e));C["%Error.prototype%"]=U}var N=function e(t){var r;if("%AsyncFunction%"===t)r=w("async function () {}");else if("%GeneratorFunction%"===t)r=w("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=w("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&O&&(r=O(o.prototype))}return C[t]=r,r},L={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},M=r(6743),j=r(9957),F=M.call(B,Array.prototype.concat),D=M.call(I,Array.prototype.splice),V=M.call(B,String.prototype.replace),q=M.call(B,String.prototype.slice),K=M.call(B,RegExp.prototype.exec),H=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,z=/\\(\\)?/g,X=function(e,t){var r,n=e;if(j(L,n)&&(n="%"+(r=L[n])[0]+"%"),j(C,n)){var o=C[n];if(o===_&&(o=N(n)),void 0===o&&!t)throw new l("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:o}}throw new c("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new l("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new l('"allowMissing" argument must be a boolean');if(null===K(/^%?[^%]*%?$/,e))throw new c("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(e){var t=q(e,0,1),r=q(e,-1);if("%"===t&&"%"!==r)throw new c("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new c("invalid intrinsic syntax, expected opening `%`");var n=[];return V(e,H,(function(e,t,r,o){n[n.length]=r?V(o,z,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",o=X("%"+n+"%",t),i=o.name,a=o.value,s=!1,u=o.alias;u&&(n=u[0],D(r,F([0,1],u)));for(var f=1,p=!0;f=r.length){var m=S(a,h);a=(p=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:a[h]}else p=j(a,h),a=a[h];p&&!s&&(C[i]=a)}}return a}},487:(e,t,r)=>{"use strict";var n=r(6897),o=r(655),i=r(3126),a=r(2205);e.exports=function(e){var t=i(arguments),r=e.length-(arguments.length-1);return n(t,1+(r>0?r:0),!0)},o?o(e.exports,"apply",{value:a}):e.exports.apply=a},537:(e,t,r)=>{var n=r(5606),o=r(6763),i=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n=o)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),s=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(r)?n.showHidden=r:r&&t._extend(n,r),S(n.showHidden)&&(n.showHidden=!1),S(n.depth)&&(n.depth=2),S(n.colors)&&(n.colors=!1),S(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),h(n,e,n.depth)}function f(e,t){var r=l.styles[t];return r?"\x1b["+l.colors[r][0]+"m"+e+"\x1b["+l.colors[r][1]+"m":e}function p(e,t){return e}function h(e,r,n){if(e.customInspect&&r&&O(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var o=r.inspect(n,e);return w(o)||(o=h(e,o,n)),o}var i=function(e,t){if(S(t))return e.stylize("undefined","undefined");if(w(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(b(t))return e.stylize(""+t,"number");if(g(t))return e.stylize(""+t,"boolean");if(v(t))return e.stylize("null","null")}(e,r);if(i)return i;var a=Object.keys(r),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),T(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return d(r);if(0===a.length){if(O(r)){var u=r.name?": "+r.name:"";return e.stylize("[Function"+u+"]","special")}if(k(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(A(r))return e.stylize(Date.prototype.toString.call(r),"date");if(T(r))return d(r)}var c,l="",f=!1,p=["{","}"];(m(r)&&(f=!0,p=["[","]"]),O(r))&&(l=" [Function"+(r.name?": "+r.name:"")+"]");return k(r)&&(l=" "+RegExp.prototype.toString.call(r)),A(r)&&(l=" "+Date.prototype.toUTCString.call(r)),T(r)&&(l=" "+d(r)),0!==a.length||f&&0!=r.length?n<0?k(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),c=f?function(e,t,r,n,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0);if(n>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(c,l,p)):p[0]+l+p[1]}function d(e){return"["+Error.prototype.toString.call(e)+"]"}function y(e,t,r,n,o,i){var a,s,u;if((u=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=u.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):u.set&&(s=e.stylize("[Setter]","special")),B(n,o)||(a="["+o+"]"),s||(e.seen.indexOf(u.value)<0?(s=v(r)?h(e,u.value,null):h(e,u.value,r-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").slice(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),S(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.slice(1,-1),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function m(e){return Array.isArray(e)}function g(e){return"boolean"==typeof e}function v(e){return null===e}function b(e){return"number"==typeof e}function w(e){return"string"==typeof e}function S(e){return void 0===e}function k(e){return E(e)&&"[object RegExp]"===P(e)}function E(e){return"object"==typeof e&&null!==e}function A(e){return E(e)&&"[object Date]"===P(e)}function T(e){return E(e)&&("[object Error]"===P(e)||e instanceof Error)}function O(e){return"function"==typeof e}function P(e){return Object.prototype.toString.call(e)}function x(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(e=e.toUpperCase(),!s[e])if(u.test(e)){var r=n.pid;s[e]=function(){var n=t.format.apply(t,arguments);o.error("%s %d: %s",e,r,n)}}else s[e]=function(){};return s[e]},t.inspect=l,l.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},l.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.types=r(9032),t.isArray=m,t.isBoolean=g,t.isNull=v,t.isNullOrUndefined=function(e){return null==e},t.isNumber=b,t.isString=w,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=S,t.isRegExp=k,t.types.isRegExp=k,t.isObject=E,t.isDate=A,t.types.isDate=A,t.isError=T,t.types.isNativeError=T,t.isFunction=O,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(1135);var I=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function B(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;o.log("%s - %s",(e=new Date,r=[x(e.getHours()),x(e.getMinutes()),x(e.getSeconds())].join(":"),[e.getDate(),I[e.getMonth()],r].join(" ")),t.format.apply(t,arguments))},t.inherits=r(6698),t._extend=function(e,t){if(!t||!E(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var _="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function R(e,t){if(!e){var r=new Error("Promise was rejected with a falsy value");r.reason=e,e=r}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(_&&e[_]){var t;if("function"!=typeof(t=e[_]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,_,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise((function(e,n){t=e,r=n})),o=[],i=0;i{"use strict";var n=r(655),o=function(){return!!n};o.hasArrayLengthDefineBug=function(){if(!n)return null;try{return 1!==n([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},655:e=>{"use strict";var t=Object.defineProperty||!1;if(t)try{t({},"a",{value:1})}catch(e){t=!1}e.exports=t},1002:e=>{"use strict";e.exports=Function.prototype.apply},1064:(e,t,r)=>{"use strict";var n=r(9612);e.exports=n.getPrototypeOf||null},1093:e=>{"use strict";var t=Object.prototype.toString;e.exports=function(e){var r=t.call(e),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),n}},1135:e=>{e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},1189:(e,t,r)=>{"use strict";var n=Array.prototype.slice,o=r(1093),i=Object.keys,a=i?function(e){return i(e)}:r(8875),s=Object.keys;a.shim=function(){if(Object.keys){var e=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);e||(Object.keys=function(e){return o(e)?s(n.call(e)):s(e)})}else Object.keys=a;return Object.keys||a},e.exports=a},1237:e=>{"use strict";e.exports=EvalError},1281:()=>{},1333:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(var n in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var o=Object.getOwnPropertySymbols(e);if(1!==o.length||o[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(e,t);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},1514:e=>{"use strict";e.exports=Math.abs},2205:(e,t,r)=>{"use strict";var n=r(6743),o=r(1002),i=r(3144);e.exports=function(){return i(n,o,arguments)}},2299:(e,t,r)=>{"use strict";function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,s=[],u=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r10)return!0;for(var t=0;t57)return!0}return 10===e.length&&e>=Math.pow(2,32)}function C(e){return Object.keys(e).filter(R).concat(l(e).filter(Object.prototype.propertyIsEnumerable.bind(e)))}function U(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,o=0,i=Math.min(r,n);o{"use strict";var n=r(8452),o=r(6642);e.exports=function(){var e=o();return n(Number,{isNaN:e},{isNaN:function(){return Number.isNaN!==e}}),e}},2682:(e,t,r)=>{"use strict";var n=r(9600),o=Object.prototype.toString,i=Object.prototype.hasOwnProperty;e.exports=function(e,t,r){if(!n(t))throw new TypeError("iterator must be a function");var a,s;arguments.length>=3&&(a=r),s=e,"[object Array]"===o.call(s)?function(e,t,r){for(var n=0,o=e.length;n{var n=e.exports=function(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};n.sha=r(7816),n.sha1=r(3737),n.sha224=r(6710),n.sha256=r(4107),n.sha384=r(2827),n.sha512=r(2890)},2827:(e,t,r)=>{var n=r(6698),o=r(2890),i=r(392),a=r(2861).Buffer,s=new Array(160);function u(){this.init(),this._w=s,i.call(this,128,112)}n(u,o),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=u},2861:(e,t,r)=>{var n=r(8287),o=n.Buffer;function i(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return o(e,t,r)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=n:(i(n,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,r)},a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=o(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},2890:(e,t,r)=>{var n=r(6698),o=r(392),i=r(2861).Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function u(){this.init(),this._w=s,o.call(this,128,112)}function c(e,t,r){return r^e&(t^r)}function l(e,t,r){return e&t|r&(e|t)}function f(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function p(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function h(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function y(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function g(e,t){return e>>>0>>0?1:0}n(u,o),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,o=0|this._ch,i=0|this._dh,s=0|this._eh,u=0|this._fh,v=0|this._gh,b=0|this._hh,w=0|this._al,S=0|this._bl,k=0|this._cl,E=0|this._dl,A=0|this._el,T=0|this._fl,O=0|this._gl,P=0|this._hl,x=0;x<32;x+=2)t[x]=e.readInt32BE(4*x),t[x+1]=e.readInt32BE(4*x+4);for(;x<160;x+=2){var I=t[x-30],B=t[x-30+1],_=h(I,B),R=d(B,I),C=y(I=t[x-4],B=t[x-4+1]),U=m(B,I),N=t[x-14],L=t[x-14+1],M=t[x-32],j=t[x-32+1],F=R+L|0,D=_+N+g(F,R)|0;D=(D=D+C+g(F=F+U|0,U)|0)+M+g(F=F+j|0,j)|0,t[x]=D,t[x+1]=F}for(var V=0;V<160;V+=2){D=t[V],F=t[V+1];var q=l(r,n,o),K=l(w,S,k),H=f(r,w),z=f(w,r),X=p(s,A),$=p(A,s),G=a[V],W=a[V+1],Y=c(s,u,v),J=c(A,T,O),Z=P+$|0,Q=b+X+g(Z,P)|0;Q=(Q=(Q=Q+Y+g(Z=Z+J|0,J)|0)+G+g(Z=Z+W|0,W)|0)+D+g(Z=Z+F|0,F)|0;var ee=z+K|0,te=H+q+g(ee,z)|0;b=v,P=O,v=u,O=T,u=s,T=A,s=i+Q+g(A=E+Z|0,E)|0,i=o,E=k,o=n,k=S,n=r,S=w,r=Q+te+g(w=Z+ee|0,Z)|0}this._al=this._al+w|0,this._bl=this._bl+S|0,this._cl=this._cl+k|0,this._dl=this._dl+E|0,this._el=this._el+A|0,this._fl=this._fl+T|0,this._gl=this._gl+O|0,this._hl=this._hl+P|0,this._ah=this._ah+r+g(this._al,w)|0,this._bh=this._bh+n+g(this._bl,S)|0,this._ch=this._ch+o+g(this._cl,k)|0,this._dh=this._dh+i+g(this._dl,E)|0,this._eh=this._eh+s+g(this._el,A)|0,this._fh=this._fh+u+g(this._fl,T)|0,this._gh=this._gh+v+g(this._gl,O)|0,this._hh=this._hh+b+g(this._hl,P)|0},u.prototype._hash=function(){var e=i.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=u},3003:e=>{"use strict";e.exports=function(e){return e!=e}},3093:(e,t,r)=>{"use strict";var n=r(4459);e.exports=function(e){return n(e)||0===e?e:e<0?-1:1}},3126:(e,t,r)=>{"use strict";var n=r(6743),o=r(9675),i=r(76),a=r(3144);e.exports=function(e){if(e.length<1||"function"!=typeof e[0])throw new o("a function is required");return a(n,i,e)}},3144:(e,t,r)=>{"use strict";var n=r(6743),o=r(1002),i=r(76),a=r(7119);e.exports=a||n.call(i,o)},3626:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(8287);n.Buffer.alloc(1).subarray(0,1)instanceof n.Buffer||(n.Buffer.prototype.subarray=function(e,t){var r=Uint8Array.prototype.subarray.call(this,e,t);return Object.setPrototypeOf(r,n.Buffer.prototype),r});const o=n.Buffer},3628:(e,t,r)=>{"use strict";var n=r(8648),o=r(1064),i=r(7176);e.exports=n?function(e){return n(e)}:o?function(e){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new TypeError("getProto: not an object");return o(e)}:i?function(e){return i(e)}:null},3737:(e,t,r)=>{var n=r(6698),o=r(392),i=r(2861).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<5|e>>>27}function l(e){return e<<30|e>>>2}function f(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,o),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,p=0;p<16;++p)r[p]=e.readInt32BE(4*p);for(;p<80;++p)r[p]=(t=r[p-3]^r[p-8]^r[p-14]^r[p-16])<<1|t>>>31;for(var h=0;h<80;++h){var d=~~(h/20),y=c(n)+f(d,o,i,s)+u+r[h]+a[d]|0;u=s,s=i,i=l(o),o=n,n=y}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=u},3740:function(e,t,r){var n,o=r(6763);n=()=>(()=>{var e={616:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(287);n.hp.alloc(1).subarray(0,1)instanceof n.hp||(n.hp.prototype.subarray=function(e,t){const r=Uint8Array.prototype.subarray.call(this,e,t);return Object.setPrototypeOf(r,n.hp.prototype),r});const o=n.hp},281:(e,t,r)=>{const n=r(164);e.exports=n},164:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Array:()=>D,Bool:()=>C,Double:()=>_,Enum:()=>H,Float:()=>B,Hyper:()=>O,Int:()=>k,LargeInt:()=>T,Opaque:()=>M,Option:()=>q,Quadruple:()=>R,Reference:()=>z,String:()=>N,Struct:()=>X,Union:()=>G,UnsignedHyper:()=>I,UnsignedInt:()=>x,VarArray:()=>V,VarOpaque:()=>F,Void:()=>K,XdrReader:()=>u,XdrWriter:()=>f,config:()=>ne});class n extends TypeError{constructor(e){super(`XDR Write Error: ${e}`)}}class o extends TypeError{constructor(e){super(`XDR Read Error: ${e}`)}}class i extends TypeError{constructor(e){super(`XDR Type Definition Error: ${e}`)}}class a extends i{constructor(){super("method not implemented, it should be overloaded in the descendant class.")}}var s=r(616).A;class u{constructor(e){if(!s.isBuffer(e)){if(!(e instanceof Array||Array.isArray(e)||ArrayBuffer.isView(e)))throw new o(`source invalid: ${e}`);e=s.from(e)}this._buffer=e,this._length=e.length,this._index=0}_buffer;_length;_index;get eof(){return this._index===this._length}advance(e){const t=this._index;if(this._index+=e,this._length0){for(let e=0;e0){const e=this.alloc(r);this._buffer.fill(0,e,this._index)}}writeInt32BE(e){const t=this.alloc(4);this._buffer.writeInt32BE(e,t)}writeUInt32BE(e){const t=this.alloc(4);this._buffer.writeUInt32BE(e,t)}writeBigInt64BE(e){const t=this.alloc(8);this._buffer.writeBigInt64BE(e,t)}writeBigUInt64BE(e){const t=this.alloc(8);this._buffer.writeBigUInt64BE(e,t)}writeFloatBE(e){const t=this.alloc(4);this._buffer.writeFloatBE(e,t)}writeDoubleBE(e){const t=this.alloc(8);this._buffer.writeDoubleBE(e,t)}static bufferChunkSize=l}var p=r(616).A;class h{toXDR(e="raw"){if(!this.write)return this.constructor.toXDR(this,e);const t=new f;return this.write(this,t),g(t.finalize(),e)}fromXDR(e,t="raw"){if(!this.read)return this.constructor.fromXDR(e,t);const r=new u(v(e,t)),n=this.read(r);return r.ensureInputConsumed(),n}validateXDR(e,t="raw"){try{return this.fromXDR(e,t),!0}catch(e){return!1}}static toXDR(e,t="raw"){const r=new f;return this.write(e,r),g(r.finalize(),t)}static fromXDR(e,t="raw"){const r=new u(v(e,t)),n=this.read(r);return r.ensureInputConsumed(),n}static validateXDR(e,t="raw"){try{return this.fromXDR(e,t),!0}catch(e){return!1}}}class d extends h{static read(e){throw new a}static write(e,t){throw new a}static isValid(e){return!1}}class y extends h{isValid(e){return!1}}class m extends TypeError{constructor(e){super(`Invalid format ${e}, must be one of "raw", "hex", "base64"`)}}function g(e,t){switch(t){case"raw":return e;case"hex":return e.toString("hex");case"base64":return e.toString("base64");default:throw new m(t)}}function v(e,t){switch(t){case"raw":return e;case"hex":return p.from(e,"hex");case"base64":return p.from(e,"base64");default:throw new m(t)}}function b(e,t){return null!=e&&(e instanceof t||w(e,t)&&"function"==typeof e.constructor.read&&"function"==typeof e.constructor.write&&w(e,"XdrType"))}function w(e,t){do{if(e.constructor.name===t)return!0}while(e=Object.getPrototypeOf(e));return!1}const S=2147483647;class k extends d{static read(e){return e.readInt32BE()}static write(e,t){if("number"!=typeof e)throw new n("not a number");if((0|e)!==e)throw new n("invalid i32 value");t.writeInt32BE(e)}static isValid(e){return"number"==typeof e&&(0|e)===e&&e>=-2147483648&&e<=S}}function E(e,t,r){if("bigint"!=typeof e)throw new TypeError("Expected bigint 'value', got "+typeof e);const n=t/r;if(1===n)return[e];if(r<32||r>128||2!==n&&4!==n&&8!==n)throw new TypeError(`invalid bigint (${e}) and slice size (${t} -> ${r}) combination`);const o=BigInt(r),i=new Array(n);for(let t=0;t>=o;return i}function A(e,t){if(t)return[0n,(1n<=i&&o<=a)return o;throw new TypeError(`bigint values [${e}] for ${function(e,t){return`${t?"u":"i"}${e}`}(t,r)} out of range [${i}, ${a}]: ${o}`)}(e,this.size,this.unsigned)}get unsigned(){throw new a}get size(){throw new a}slice(e){return E(this._value,this.size,e)}toString(){return this._value.toString()}toJSON(){return{_value:this._value.toString()}}toBigInt(){return BigInt(this._value)}static read(e){const{size:t}=this.prototype;return 64===t?new this(e.readBigUInt64BE()):new this(...Array.from({length:t/64},(()=>e.readBigUInt64BE())).reverse())}static write(e,t){if(e instanceof this)e=e._value;else if("bigint"!=typeof e||e>this.MAX_VALUE||e>32n)}get size(){return 64}get unsigned(){return!1}static fromBits(e,t){return new this(e,t)}}O.defineIntBoundaries();const P=4294967295;class x extends d{static read(e){return e.readUInt32BE()}static write(e,t){if("number"!=typeof e||!(e>=0&&e<=P)||e%1!=0)throw new n("invalid u32 value");t.writeUInt32BE(e)}static isValid(e){return"number"==typeof e&&e%1==0&&e>=0&&e<=P}}x.MAX_VALUE=P,x.MIN_VALUE=0;class I extends T{constructor(...e){super(e)}get low(){return 0|Number(0xffffffffn&this._value)}get high(){return 0|Number(this._value>>32n)}get size(){return 64}get unsigned(){return!0}static fromBits(e,t){return new this(e,t)}}I.defineIntBoundaries();class B extends d{static read(e){return e.readFloatBE()}static write(e,t){if("number"!=typeof e)throw new n("not a number");t.writeFloatBE(e)}static isValid(e){return"number"==typeof e}}class _ extends d{static read(e){return e.readDoubleBE()}static write(e,t){if("number"!=typeof e)throw new n("not a number");t.writeDoubleBE(e)}static isValid(e){return"number"==typeof e}}class R extends d{static read(){throw new i("quadruple not supported")}static write(){throw new i("quadruple not supported")}static isValid(){return!1}}class C extends d{static read(e){const t=k.read(e);switch(t){case 0:return!1;case 1:return!0;default:throw new o(`got ${t} when trying to read a bool`)}}static write(e,t){const r=e?1:0;k.write(r,t)}static isValid(e){return"boolean"==typeof e}}var U=r(616).A;class N extends y{constructor(e=x.MAX_VALUE){super(),this._maxLength=e}read(e){const t=x.read(e);if(t>this._maxLength)throw new o(`saw ${t} length String, max allowed is ${this._maxLength}`);return e.read(t)}readString(e){return this.read(e).toString("utf8")}write(e,t){const r="string"==typeof e?U.byteLength(e,"utf8"):e.length;if(r>this._maxLength)throw new n(`got ${e.length} bytes, max allowed is ${this._maxLength}`);x.write(r,t),t.write(e,r)}isValid(e){return"string"==typeof e?U.byteLength(e,"utf8")<=this._maxLength:!!(e instanceof Array||U.isBuffer(e))&&e.length<=this._maxLength}}var L=r(616).A;class M extends y{constructor(e){super(),this._length=e}read(e){return e.read(this._length)}write(e,t){const{length:r}=e;if(r!==this._length)throw new n(`got ${e.length} bytes, expected ${this._length}`);t.write(e,r)}isValid(e){return L.isBuffer(e)&&e.length===this._length}}var j=r(616).A;class F extends y{constructor(e=x.MAX_VALUE){super(),this._maxLength=e}read(e){const t=x.read(e);if(t>this._maxLength)throw new o(`saw ${t} length VarOpaque, max allowed is ${this._maxLength}`);return e.read(t)}write(e,t){const{length:r}=e;if(e.length>this._maxLength)throw new n(`got ${e.length} bytes, max allowed is ${this._maxLength}`);x.write(r,t),t.write(e,r)}isValid(e){return j.isBuffer(e)&&e.length<=this._maxLength}}class D extends y{constructor(e,t){super(),this._childType=e,this._length=t}read(e){const t=new r.g.Array(this._length);for(let r=0;rthis._maxLength)throw new o(`saw ${t} length VarArray, max allowed is ${this._maxLength}`);const r=new Array(t);for(let n=0;nthis._maxLength)throw new n(`got array of size ${e.length}, max allowed is ${this._maxLength}`);x.write(e.length,t);for(const r of e)this._childType.write(r,t)}isValid(e){if(!(e instanceof Array)||e.length>this._maxLength)return!1;for(const t of e)if(!this._childType.isValid(t))return!1;return!0}}class q extends d{constructor(e){super(),this._childType=e}read(e){if(C.read(e))return this._childType.read(e)}write(e,t){const r=null!=e;C.write(r,t),r&&this._childType.write(e,t)}isValid(e){return null==e||this._childType.isValid(e)}}class K extends d{static read(){}static write(e){if(void 0!==e)throw new n("trying to write value to a void slot")}static isValid(e){return void 0===e}}class H extends d{constructor(e,t){super(),this.name=e,this.value=t}static read(e){const t=k.read(e),r=this._byValue[t];if(void 0===r)throw new o(`unknown ${this.enumName} member for value ${t}`);return r}static write(e,t){if(!this.isValid(e))throw new n(`${e} has enum name ${e?.enumName}, not ${this.enumName}: ${JSON.stringify(e)}`);k.write(e.value,t)}static isValid(e){return e?.constructor?.enumName===this.enumName||b(e,this)}static members(){return this._members}static values(){return Object.values(this._members)}static fromName(e){const t=this._members[e];if(!t)throw new TypeError(`${e} is not a member of ${this.enumName}`);return t}static fromValue(e){const t=this._byValue[e];if(void 0===t)throw new TypeError(`${e} is not a value of any member of ${this.enumName}`);return t}static create(e,t,r){const n=class extends H{};n.enumName=t,e.results[t]=n,n._members={},n._byValue={};for(const[e,t]of Object.entries(r)){const r=new n(e,t);n._members[e]=r,n._byValue[t]=r,n[e]=()=>r}return n}}class z extends d{resolve(){throw new i('"resolve" method should be implemented in the descendant class')}}class X extends y{constructor(e){super(),this._attributes=e||{}}static read(e){const t={};for(const[r,n]of this._fields)t[r]=n.read(e);return new this(t)}static write(e,t){if(!this.isValid(e))throw new n(`${e} has struct name ${e?.constructor?.structName}, not ${this.structName}: ${JSON.stringify(e)}`);for(const[r,n]of this._fields){const o=e._attributes[r];n.write(o,t)}}static isValid(e){return e?.constructor?.structName===this.structName||b(e,this)}static create(e,t,r){const n=class extends X{};n.structName=t,e.results[t]=n;const o=new Array(r.length);for(let t=0;t{"use strict";t.byteLength=function(e){var t=s(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,i=s(e),a=i[0],u=i[1],c=new o(function(e,t,r){return 3*(t+r)/4-r}(0,a,u)),l=0,f=u>0?a-4:a;for(r=0;r>16&255,c[l++]=t>>8&255,c[l++]=255&t;return 2===u&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,c[l++]=255&t),1===u&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t),c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=16383,s=0,c=n-o;sc?c:s+a));return 1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=i[a],n[i.charCodeAt(a)]=a;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},287:(e,t,r)=>{"use strict";const n=r(526),i=r(251),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.hp=c,t.IS=50;const s=2147483647;function u(e){if(e>s)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return l(e,t,r)}function l(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=u(r);const o=n.write(e,t);return o!==r&&(n=n.slice(0,o)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Y(e,Uint8Array)){const t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Y(e,ArrayBuffer)||e&&Y(e.buffer,ArrayBuffer))return d(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Y(e,SharedArrayBuffer)||e&&Y(e.buffer,SharedArrayBuffer)))return d(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return c.from(n,t,r);const o=function(e){if(c.isBuffer(e)){const t=0|y(e.length),r=u(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||J(e.length)?u(0):h(e):"Buffer"===e.type&&Array.isArray(e.data)?h(e.data):void 0}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function f(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return f(e),u(e<0?0:0|y(e))}function h(e){const t=e.length<0?0:0|y(e.length),r=u(t);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|e}function m(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Y(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(o)return n?-1:$(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return _(this,t,r);case"utf8":case"utf-8":return P(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return B(this,t,r);case"base64":return O(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function v(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function b(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),J(r=+r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:w(e,t,r,n,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):w(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function w(e,t,r,n,o){let i,a=1,s=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){let n=-1;for(i=r;is&&(r=s-u),i=r;i>=0;i--){let r=!0;for(let n=0;no&&(n=o):n=o;const i=t.length;let a;for(n>i/2&&(n=i/2),a=0;a>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function O(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function P(e,t,r){r=Math.min(e.length,r);const n=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+a<=r){let r,n,s,u;switch(a){case 1:t<128&&(i=t);break;case 2:r=e[o+1],128==(192&r)&&(u=(31&t)<<6|63&r,u>127&&(i=u));break;case 3:r=e[o+1],n=e[o+2],128==(192&r)&&128==(192&n)&&(u=(15&t)<<12|(63&r)<<6|63&n,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:r=e[o+1],n=e[o+2],s=e[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(u=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,u>65535&&u<1114112&&(i=u))}}null===i?(i=65533,a=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=a}return function(e){const t=e.length;if(t<=x)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(c.isBuffer(t)||(t=c.from(t)),t.copy(n,o)):Uint8Array.prototype.set.call(n,t,o);else{if(!c.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,o)}o+=t.length}return n},c.byteLength=m,c.prototype._isBuffer=!0,c.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},a&&(c.prototype[a]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,o){if(Y(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(this===e)return 0;let i=(o>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0);const s=Math.min(i,a),u=this.slice(n,o),l=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return S(this,e,t,r);case"utf8":case"utf-8":return k(this,e,t,r);case"ascii":case"latin1":case"binary":return E(this,e,t,r);case"base64":return A(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const x=4096;function I(e,t,r){let n="";r=Math.min(e.length,r);for(let o=t;on)&&(r=n);let o="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function U(e,t,r,n,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function N(e,t,r,n,o){K(t,n,o,e,r,7);let i=Number(t&BigInt(4294967295));e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,r}function L(e,t,r,n,o){K(t,n,o,e,r,7);let i=Number(t&BigInt(4294967295));e[r+7]=i,i>>=8,e[r+6]=i,i>>=8,e[r+5]=i,i>>=8,e[r+4]=i;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=a,a>>=8,e[r+2]=a,a>>=8,e[r+1]=a,a>>=8,e[r]=a,r+8}function M(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(e,t,r,n,o){return t=+t,r>>>=0,o||M(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function F(e,t,r,n,o){return t=+t,r>>>=0,o||M(e,0,r,8),i.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],o=1,i=0;for(;++i>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e+--t],o=1;for(;t>0&&(o*=256);)n+=this[e+--t]*o;return n},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readBigUInt64LE=Q((function(e){H(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],o=1,i=0;for(;++i=o&&(n-=Math.pow(2,8*t)),n},c.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||C(e,t,this.length);let n=t,o=1,i=this[e+--n];for(;n>0&&(o*=256);)i+=this[e+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readBigInt64LE=Q((function(e){H(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||C(e,4,this.length),i.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||C(e,4,this.length),i.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||C(e,8,this.length),i.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||C(e,8,this.length),i.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||U(this,e,t,r,Math.pow(2,8*r)-1,0);let o=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n||U(this,e,t,r,Math.pow(2,8*r)-1,0);let o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigUInt64LE=Q((function(e,t=0){return N(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeBigUInt64BE=Q((function(e,t=0){return L(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);U(this,e,t,r,n-1,-n)}let o=0,i=1,a=0;for(this[t]=255&e;++o>>=0,!n){const n=Math.pow(2,8*r-1);U(this,e,t,r,n-1,-n)}let o=r-1,i=1,a=0;for(this[t+o]=255&e;--o>=0&&(i*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/i|0)-a&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigInt64LE=Q((function(e,t=0){return N(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeBigInt64BE=Q((function(e,t=0){return L(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeFloatLE=function(e,t,r){return j(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return j(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return F(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return F(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function K(e,t,r,n,o,i){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new D.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,r){H(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||z(t,e.length-(r+1))}(n,o,i)}function H(e,t){if("number"!=typeof e)throw new D.ERR_INVALID_ARG_TYPE(t,"number",e)}function z(e,t,r){if(Math.floor(e)!==e)throw H(e,r),new D.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new D.ERR_BUFFER_OUT_OF_BOUNDS;throw new D.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}V("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),V("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),V("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=q(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=q(o)),o+="n"),n+=` It must be ${t}. Received ${o}`,n}),RangeError);const X=/[^+/0-9A-Za-z-_]/g;function $(e,t){let r;t=t||1/0;const n=e.length;let o=null;const i=[];for(let a=0;a55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function G(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(X,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function W(e,t,r,n){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function Y(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}const Z=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)t[n+o]=e[r]+e[o]}return t}();function Q(e){return"undefined"==typeof BigInt?ee:e}function ee(){throw new Error("BigInt not supported")}},251:(e,t)=>{t.read=function(e,t,r,n,o){var i,a,s=8*o-n-1,u=(1<>1,l=-7,f=r?o-1:0,p=r?-1:1,h=e[t+f];for(f+=p,i=h&(1<<-l)-1,h>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=p,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=n;l>0;a=256*a+e[t+f],f+=p,l-=8);if(0===i)i=1-c;else{if(i===u)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,n),i-=c}return(h?-1:1)*a*Math.pow(2,i-n)},t.write=function(e,t,r,n,o,i){var a,s,u,c=8*i-o-1,l=(1<>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:i-1,d=n?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),(t+=a+f>=1?p/u:p*Math.pow(2,1-f))*u>=2&&(a++,u/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*u-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[r+h]=255&s,h+=d,s/=256,o-=8);for(a=a<0;e[r+h]=255&a,h+=d,a/=256,c-=8);e[r+h-d]|=128*y}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}return r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r(281)})(),e.exports=n()},3918:(e,t,r)=>{"use strict";var n=r(5606);function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;te.length)&&(r=e.length),e.substring(r-t.length,r)===t}var w="",S="",k="",E="",A={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"};function T(e){var t=Object.keys(e),r=Object.create(Object.getPrototypeOf(e));return t.forEach((function(t){r[t]=e[t]})),Object.defineProperty(r,"message",{value:e.message}),r}function O(e){return g(e,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}function P(e,t,r){var o="",i="",a=0,s="",u=!1,c=O(e),l=c.split("\n"),f=O(t).split("\n"),p=0,h="";if("strictEqual"===r&&"object"===m(e)&&"object"===m(t)&&null!==e&&null!==t&&(r="strictEqualObject"),1===l.length&&1===f.length&&l[0]!==f[0]){var d=l[0].length+f[0].length;if(d<=10){if(!("object"===m(e)&&null!==e||"object"===m(t)&&null!==t||0===e&&0===t))return"".concat(A[r],"\n\n")+"".concat(l[0]," !== ").concat(f[0],"\n")}else if("strictEqualObject"!==r){if(d<(n.stderr&&n.stderr.isTTY?n.stderr.columns:80)){for(;l[0][p]===f[0][p];)p++;p>2&&(h="\n ".concat(function(e,t){if(t=Math.floor(t),0==e.length||0==t)return"";var r=e.length*t;for(t=Math.floor(Math.log(t)/Math.log(2));t;)e+=e,t--;return e+e.substring(0,r-e.length)}(" ",p),"^"),p=0)}}}for(var y=l[l.length-1],g=f[f.length-1];y===g&&(p++<2?s="\n ".concat(y).concat(s):o=y,l.pop(),f.pop(),0!==l.length&&0!==f.length);)y=l[l.length-1],g=f[f.length-1];var v=Math.max(l.length,f.length);if(0===v){var T=c.split("\n");if(T.length>30)for(T[26]="".concat(w,"...").concat(E);T.length>27;)T.pop();return"".concat(A.notIdentical,"\n\n").concat(T.join("\n"),"\n")}p>3&&(s="\n".concat(w,"...").concat(E).concat(s),u=!0),""!==o&&(s="\n ".concat(o).concat(s),o="");var P=0,x=A[r]+"\n".concat(S,"+ actual").concat(E," ").concat(k,"- expected").concat(E),I=" ".concat(w,"...").concat(E," Lines skipped");for(p=0;p1&&p>2&&(B>4?(i+="\n".concat(w,"...").concat(E),u=!0):B>3&&(i+="\n ".concat(f[p-2]),P++),i+="\n ".concat(f[p-1]),P++),a=p,o+="\n".concat(k,"-").concat(E," ").concat(f[p]),P++;else if(f.length1&&p>2&&(B>4?(i+="\n".concat(w,"...").concat(E),u=!0):B>3&&(i+="\n ".concat(l[p-2]),P++),i+="\n ".concat(l[p-1]),P++),a=p,i+="\n".concat(S,"+").concat(E," ").concat(l[p]),P++;else{var _=f[p],R=l[p],C=R!==_&&(!b(R,",")||R.slice(0,-1)!==_);C&&b(_,",")&&_.slice(0,-1)===R&&(C=!1,R+=","),C?(B>1&&p>2&&(B>4?(i+="\n".concat(w,"...").concat(E),u=!0):B>3&&(i+="\n ".concat(l[p-2]),P++),i+="\n ".concat(l[p-1]),P++),a=p,i+="\n".concat(S,"+").concat(E," ").concat(R),o+="\n".concat(k,"-").concat(E," ").concat(_),P+=2):(i+=o,o="",1!==B&&0!==p||(i+="\n ".concat(R),P++))}if(P>20&&p30)for(h[26]="".concat(w,"...").concat(E);h.length>27;)h.pop();t=1===h.length?p.call(this,"".concat(f," ").concat(h[0])):p.call(this,"".concat(f,"\n\n").concat(h.join("\n"),"\n"))}else{var d=O(a),y="",g=A[o];"notDeepEqual"===o||"notEqual"===o?(d="".concat(A[o],"\n\n").concat(d)).length>1024&&(d="".concat(d.slice(0,1021),"...")):(y="".concat(O(s)),d.length>512&&(d="".concat(d.slice(0,509),"...")),y.length>512&&(y="".concat(y.slice(0,509),"...")),"deepEqual"===o||"equal"===o?d="".concat(g,"\n\n").concat(d,"\n\nshould equal\n\n"):y=" ".concat(o," ").concat(y)),t=p.call(this,"".concat(d).concat(y))}return Error.stackTraceLimit=u,t.generatedMessage=!r,Object.defineProperty(l(t),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),t.code="ERR_ASSERTION",t.actual=a,t.expected=s,t.operator=o,Error.captureStackTrace&&Error.captureStackTrace(l(t),i),t.stack,t.name="AssertionError",c(t)}return a=b,(u=[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:t,value:function(e,t){return g(this,i(i({},t),{},{customInspect:!1,depth:0}))}}])&&s(a.prototype,u),f&&s(a,f),Object.defineProperty(a,"prototype",{writable:!1}),b}(f(Error),g.custom);e.exports=x},4035:(e,t,r)=>{"use strict";var n,o=r(6556),i=r(9092)(),a=r(9957),s=r(5795);if(i){var u=o("RegExp.prototype.exec"),c={},l=function(){throw c},f={toString:l,valueOf:l};"symbol"==typeof Symbol.toPrimitive&&(f[Symbol.toPrimitive]=l),n=function(e){if(!e||"object"!=typeof e)return!1;var t=s(e,"lastIndex");if(!(t&&a(t,"value")))return!1;try{u(e,f)}catch(e){return e===c}}}else{var p=o("Object.prototype.toString");n=function(e){return!(!e||"object"!=typeof e&&"function"!=typeof e)&&"[object RegExp]"===p(e)}}e.exports=n},4039:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,o=r(1333);e.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},4107:(e,t,r)=>{var n=r(6698),o=r(392),i=r(2861).Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e,t,r){return r^e&(t^r)}function l(e,t,r){return e&t|r&(e|t)}function f(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function p(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function h(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(u,o),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,d=0|this._f,y=0|this._g,m=0|this._h,g=0;g<16;++g)r[g]=e.readInt32BE(4*g);for(;g<64;++g)r[g]=0|(((t=r[g-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[g-7]+h(r[g-15])+r[g-16];for(var v=0;v<64;++v){var b=m+p(u)+c(u,d,y)+a[v]+r[v]|0,w=f(n)+l(n,o,i)|0;m=y,y=d,d=u,u=s+b|0,s=i,i=o,o=n,n=b+w|0}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0,this._f=d+this._f|0,this._g=y+this._g|0,this._h=m+this._h|0},u.prototype._hash=function(){var e=i.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=u},4133:(e,t,r)=>{"use strict";var n=r(487),o=r(8452),i=r(3003),a=r(6642),s=r(2464),u=n(a(),Number);o(u,{getPolyfill:a,implementation:i,shim:s}),e.exports=u},4148:(e,t,r)=>{"use strict";var n=r(5606),o=r(6763);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(e,t){for(var r=0;r1?r-1:0),o=1;o1?r-1:0),o=1;o1?r-1:0),o=1;o1?r-1:0),o=1;o{"use strict";e.exports=Number.isNaN||function(e){return e!=e}},5345:e=>{"use strict";e.exports=URIError},5360:(e,t)=>{"use strict";var r=function(e,t){return t||(t={}),e.split("").forEach((function(e,r){e in t||(t[e]=r)})),t},n={alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",charmap:{0:14,1:8}};n.charmap=r(n.alphabet,n.charmap);var o={alphabet:"0123456789ABCDEFGHJKMNPQRSTVWXYZ",charmap:{O:0,I:1,L:1}};o.charmap=r(o.alphabet,o.charmap);var i={alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",charmap:{}};function a(e){if(this.buf=[],this.shift=8,this.carry=0,e){switch(e.type){case"rfc4648":this.charmap=t.rfc4648.charmap;break;case"crockford":this.charmap=t.crockford.charmap;break;case"base32hex":this.charmap=t.base32hex.charmap;break;default:throw new Error("invalid type")}e.charmap&&(this.charmap=e.charmap)}}function s(e){if(this.buf="",this.shift=3,this.carry=0,e){switch(e.type){case"rfc4648":this.alphabet=t.rfc4648.alphabet;break;case"crockford":this.alphabet=t.crockford.alphabet;break;case"base32hex":this.alphabet=t.base32hex.alphabet;break;default:throw new Error("invalid type")}e.alphabet?this.alphabet=e.alphabet:e.lc&&(this.alphabet=this.alphabet.toLowerCase())}}i.charmap=r(i.alphabet,i.charmap),a.prototype.charmap=n.charmap,a.prototype.write=function(e){var t=this.charmap,r=this.buf,n=this.shift,o=this.carry;return e.toUpperCase().split("").forEach((function(e){if("="!=e){var i=255&t[e];(n-=5)>0?o|=i<>-n),o=i<<(n+=8)&255):(r.push(o|i),n=8,o=0)}})),this.shift=n,this.carry=o,this},a.prototype.finalize=function(e){return e&&this.write(e),8!==this.shift&&0!==this.carry&&(this.buf.push(this.carry),this.shift=8,this.carry=0),this.buf},s.prototype.alphabet=n.alphabet,s.prototype.write=function(e){var t,r,n,o=this.shift,i=this.carry;for(n=0;n>o,this.buf+=this.alphabet[31&t],o>5&&(t=r>>(o-=5),this.buf+=this.alphabet[31&t]),i=r<<(o=5-o),o=8-o;return this.shift=o,this.carry=i,this},s.prototype.finalize=function(e){return e&&this.write(e),3!==this.shift&&(this.buf+=this.alphabet[31&this.carry],this.shift=3,this.carry=0),this.buf},t.encode=function(e,t){return new s(t).finalize(e)},t.decode=function(e,t){return new a(t).finalize(e)},t.Decoder=a,t.Encoder=s,t.charmap=r,t.crockford=o,t.rfc4648=n,t.base32hex=i},5606:e=>{var t,r,n=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function a(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var s,u=[],c=!1,l=-1;function f(){c&&s&&(c=!1,s.length?u=s.concat(u):l=-1,u.length&&p())}function p(){if(!c){var e=a(f);c=!0;for(var t=u.length;t;){for(s=u,u=[];++l1)for(var r=1;r{"use strict";var n=r(5767);e.exports=function(e){return!!n(e)}},5767:(e,t,r)=>{"use strict";var n=r(2682),o=r(9209),i=r(487),a=r(6556),s=r(5795),u=r(3628),c=a("Object.prototype.toString"),l=r(9092)(),f="undefined"==typeof globalThis?r.g:globalThis,p=o(),h=a("String.prototype.slice"),d=a("Array.prototype.indexOf",!0)||function(e,t){for(var r=0;r-1?t:"Object"===t&&function(e){var t=!1;return n(y,(function(r,n){if(!t)try{r(e),t=h(n,1)}catch(e){}})),t}(e)}return s?function(e){var t=!1;return n(y,(function(r,n){if(!t)try{"$"+r(e)===n&&(t=h(n,1))}catch(e){}})),t}(e):null}},5795:(e,t,r)=>{"use strict";var n=r(6549);if(n)try{n([],"length")}catch(e){n=null}e.exports=n},5880:e=>{"use strict";e.exports=Math.pow},6188:e=>{"use strict";e.exports=Math.max},6549:e=>{"use strict";e.exports=Object.getOwnPropertyDescriptor},6556:(e,t,r)=>{"use strict";var n=r(453),o=r(3126),i=o([n("%String.prototype.indexOf%")]);e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?o([r]):r}},6576:(e,t,r)=>{"use strict";var n=r(9394),o=r(8452);e.exports=function(){var e=n();return o(Object,{is:e},{is:function(){return Object.is!==e}}),e}},6578:e=>{"use strict";e.exports=["Float16Array","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]},6642:(e,t,r)=>{"use strict";var n=r(3003);e.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:n}},6698:e=>{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},6710:(e,t,r)=>{var n=r(6698),o=r(4107),i=r(392),a=r(2861).Buffer,s=new Array(64);function u(){this.init(),this._w=s,i.call(this,64,56)}n(u,o),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=u},6743:(e,t,r)=>{"use strict";var n=r(9353);e.exports=Function.prototype.bind||n},6763:(e,t,r)=>{var n=r(537),o=r(4148);function i(){return(new Date).getTime()}var a,s=Array.prototype.slice,u={};a=void 0!==r.g&&r.g.console?r.g.console:"undefined"!=typeof window&&window.console?window.console:{};for(var c=[[function(){},"log"],[function(){a.log.apply(a,arguments)},"info"],[function(){a.log.apply(a,arguments)},"warn"],[function(){a.warn.apply(a,arguments)},"error"],[function(e){u[e]=i()},"time"],[function(e){var t=u[e];if(!t)throw new Error("No such label: "+e);delete u[e];var r=i()-t;a.log(e+": "+r+"ms")},"timeEnd"],[function(){var e=new Error;e.name="Trace",e.message=n.format.apply(null,arguments),a.error(e.stack)},"trace"],[function(e){a.log(n.inspect(e)+"\n")},"dir"],[function(e){if(!e){var t=s.call(arguments,1);o.ok(!1,n.format.apply(null,t))}},"assert"]],l=0;l{"use strict";var n=r(453),o=r(41),i=r(592)(),a=r(5795),s=r(9675),u=n("%Math.floor%");e.exports=function(e,t){if("function"!=typeof e)throw new s("`fn` is not a function");if("number"!=typeof t||t<0||t>4294967295||u(t)!==t)throw new s("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],n=!0,c=!0;if("length"in e&&a){var l=a(e,"length");l&&!l.configurable&&(n=!1),l&&!l.writable&&(c=!1)}return(n||c||!r)&&(i?o(e,"length",t,!0,!0):o(e,"length",t)),e}},7119:e=>{"use strict";e.exports="undefined"!=typeof Reflect&&Reflect&&Reflect.apply},7176:(e,t,r)=>{"use strict";var n,o=r(3126),i=r(5795);try{n=[].__proto__===Array.prototype}catch(e){if(!e||"object"!=typeof e||!("code"in e)||"ERR_PROTO_ACCESS"!==e.code)throw e}var a=!!n&&i&&i(Object.prototype,"__proto__"),s=Object,u=s.getPrototypeOf;e.exports=a&&"function"==typeof a.get?o([a.get]):"function"==typeof u&&function(e){return u(null==e?e:s(e))}},7244:(e,t,r)=>{"use strict";var n=r(9092)(),o=r(6556)("Object.prototype.toString"),i=function(e){return!(n&&e&&"object"==typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===o(e)},a=function(e){return!!i(e)||null!==e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==o(e)&&"callee"in e&&"[object Function]"===o(e.callee)},s=function(){return i(arguments)}();i.isLegacyArguments=a,e.exports=s?i:a},7526:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,i=s(e),a=i[0],u=i[1],c=new o(function(e,t,r){return 3*(t+r)/4-r}(0,a,u)),l=0,f=u>0?a-4:a;for(r=0;r>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===u&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,c[l++]=255&t);1===u&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=16383,s=0,c=n-o;sc?c:s+a));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=i[a],n[i.charCodeAt(a)]=a;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},7653:(e,t,r)=>{"use strict";var n=r(8452),o=r(487),i=r(9211),a=r(9394),s=r(6576),u=o(a(),Object);n(u,{getPolyfill:a,implementation:i,shim:s}),e.exports=u},7816:(e,t,r)=>{var n=r(6698),o=r(392),i=r(2861).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<30|e>>>2}function l(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,o),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,f=0;f<16;++f)r[f]=e.readInt32BE(4*f);for(;f<80;++f)r[f]=r[f-3]^r[f-8]^r[f-14]^r[f-16];for(var p=0;p<80;++p){var h=~~(p/20),d=0|((t=n)<<5|t>>>27)+l(h,o,i,s)+u+r[p]+a[h];u=s,s=i,i=c(o),o=n,n=d}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=u},7957:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Account:()=>Ft,Address:()=>Ge,Asset:()=>F,AuthClawbackEnabledFlag:()=>it,AuthImmutableFlag:()=>ot,AuthRequiredFlag:()=>rt,AuthRevocableFlag:()=>nt,BASE_FEE:()=>ar,Claimant:()=>Ie,Contract:()=>wr,FastSigning:()=>f,FeeBumpTransaction:()=>Nt,Hyper:()=>n.Hyper,Int128:()=>Hr,Int256:()=>Zr,Keypair:()=>U,LiquidityPoolAsset:()=>Te,LiquidityPoolFeeV18:()=>q,LiquidityPoolId:()=>Ce,Memo:()=>gt,MemoHash:()=>yt,MemoID:()=>ht,MemoNone:()=>pt,MemoReturn:()=>mt,MemoText:()=>dt,MuxedAccount:()=>Kt,Networks:()=>lr,Operation:()=>at,ScInt:()=>pn,SignerKey:()=>Jt,Soroban:()=>mr,SorobanDataBuilder:()=>$t,StrKey:()=>T,TimeoutInfinite:()=>sr,Transaction:()=>Ot,TransactionBase:()=>G,TransactionBuilder:()=>ur,Uint128:()=>xr,Uint256:()=>Lr,UnsignedHyper:()=>n.UnsignedHyper,XdrLargeInt:()=>nn,authorizeEntry:()=>Bn,authorizeInvocation:()=>Rn,buildInvocationTree:()=>Ln,cereal:()=>a,decodeAddressToMuxedAccount:()=>Ne,default:()=>Fn,encodeMuxedAccount:()=>Me,encodeMuxedAccountToAddress:()=>Le,extractBaseAddress:()=>je,getLiquidityPoolId:()=>K,hash:()=>u,humanizeEvents:()=>An,nativeToScVal:()=>vn,scValToBigInt:()=>hn,scValToNative:()=>bn,sign:()=>p,verify:()=>h,walkInvocationTree:()=>Mn,xdr:()=>i});var n=r(3740),o=n.config((function(e){var t=1024;e.typedef("Value",e.varOpaque()),e.struct("ScpBallot",[["counter",e.lookup("Uint32")],["value",e.lookup("Value")]]),e.enum("ScpStatementType",{scpStPrepare:0,scpStConfirm:1,scpStExternalize:2,scpStNominate:3}),e.struct("ScpNomination",[["quorumSetHash",e.lookup("Hash")],["votes",e.varArray(e.lookup("Value"),2147483647)],["accepted",e.varArray(e.lookup("Value"),2147483647)]]),e.struct("ScpStatementPrepare",[["quorumSetHash",e.lookup("Hash")],["ballot",e.lookup("ScpBallot")],["prepared",e.option(e.lookup("ScpBallot"))],["preparedPrime",e.option(e.lookup("ScpBallot"))],["nC",e.lookup("Uint32")],["nH",e.lookup("Uint32")]]),e.struct("ScpStatementConfirm",[["ballot",e.lookup("ScpBallot")],["nPrepared",e.lookup("Uint32")],["nCommit",e.lookup("Uint32")],["nH",e.lookup("Uint32")],["quorumSetHash",e.lookup("Hash")]]),e.struct("ScpStatementExternalize",[["commit",e.lookup("ScpBallot")],["nH",e.lookup("Uint32")],["commitQuorumSetHash",e.lookup("Hash")]]),e.union("ScpStatementPledges",{switchOn:e.lookup("ScpStatementType"),switchName:"type",switches:[["scpStPrepare","prepare"],["scpStConfirm","confirm"],["scpStExternalize","externalize"],["scpStNominate","nominate"]],arms:{prepare:e.lookup("ScpStatementPrepare"),confirm:e.lookup("ScpStatementConfirm"),externalize:e.lookup("ScpStatementExternalize"),nominate:e.lookup("ScpNomination")}}),e.struct("ScpStatement",[["nodeId",e.lookup("NodeId")],["slotIndex",e.lookup("Uint64")],["pledges",e.lookup("ScpStatementPledges")]]),e.struct("ScpEnvelope",[["statement",e.lookup("ScpStatement")],["signature",e.lookup("Signature")]]),e.struct("ScpQuorumSet",[["threshold",e.lookup("Uint32")],["validators",e.varArray(e.lookup("NodeId"),2147483647)],["innerSets",e.varArray(e.lookup("ScpQuorumSet"),2147483647)]]),e.typedef("Thresholds",e.opaque(4)),e.typedef("String32",e.string(32)),e.typedef("String64",e.string(64)),e.typedef("SequenceNumber",e.lookup("Int64")),e.typedef("DataValue",e.varOpaque(64)),e.typedef("PoolId",e.lookup("Hash")),e.typedef("AssetCode4",e.opaque(4)),e.typedef("AssetCode12",e.opaque(12)),e.enum("AssetType",{assetTypeNative:0,assetTypeCreditAlphanum4:1,assetTypeCreditAlphanum12:2,assetTypePoolShare:3}),e.union("AssetCode",{switchOn:e.lookup("AssetType"),switchName:"type",switches:[["assetTypeCreditAlphanum4","assetCode4"],["assetTypeCreditAlphanum12","assetCode12"]],arms:{assetCode4:e.lookup("AssetCode4"),assetCode12:e.lookup("AssetCode12")}}),e.struct("AlphaNum4",[["assetCode",e.lookup("AssetCode4")],["issuer",e.lookup("AccountId")]]),e.struct("AlphaNum12",[["assetCode",e.lookup("AssetCode12")],["issuer",e.lookup("AccountId")]]),e.union("Asset",{switchOn:e.lookup("AssetType"),switchName:"type",switches:[["assetTypeNative",e.void()],["assetTypeCreditAlphanum4","alphaNum4"],["assetTypeCreditAlphanum12","alphaNum12"]],arms:{alphaNum4:e.lookup("AlphaNum4"),alphaNum12:e.lookup("AlphaNum12")}}),e.struct("Price",[["n",e.lookup("Int32")],["d",e.lookup("Int32")]]),e.struct("Liabilities",[["buying",e.lookup("Int64")],["selling",e.lookup("Int64")]]),e.enum("ThresholdIndices",{thresholdMasterWeight:0,thresholdLow:1,thresholdMed:2,thresholdHigh:3}),e.enum("LedgerEntryType",{account:0,trustline:1,offer:2,data:3,claimableBalance:4,liquidityPool:5,contractData:6,contractCode:7,configSetting:8,ttl:9}),e.struct("Signer",[["key",e.lookup("SignerKey")],["weight",e.lookup("Uint32")]]),e.enum("AccountFlags",{authRequiredFlag:1,authRevocableFlag:2,authImmutableFlag:4,authClawbackEnabledFlag:8}),e.const("MASK_ACCOUNT_FLAGS",7),e.const("MASK_ACCOUNT_FLAGS_V17",15),e.const("MAX_SIGNERS",20),e.typedef("SponsorshipDescriptor",e.option(e.lookup("AccountId"))),e.struct("AccountEntryExtensionV3",[["ext",e.lookup("ExtensionPoint")],["seqLedger",e.lookup("Uint32")],["seqTime",e.lookup("TimePoint")]]),e.union("AccountEntryExtensionV2Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[3,"v3"]],arms:{v3:e.lookup("AccountEntryExtensionV3")}}),e.struct("AccountEntryExtensionV2",[["numSponsored",e.lookup("Uint32")],["numSponsoring",e.lookup("Uint32")],["signerSponsoringIDs",e.varArray(e.lookup("SponsorshipDescriptor"),e.lookup("MAX_SIGNERS"))],["ext",e.lookup("AccountEntryExtensionV2Ext")]]),e.union("AccountEntryExtensionV1Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[2,"v2"]],arms:{v2:e.lookup("AccountEntryExtensionV2")}}),e.struct("AccountEntryExtensionV1",[["liabilities",e.lookup("Liabilities")],["ext",e.lookup("AccountEntryExtensionV1Ext")]]),e.union("AccountEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("AccountEntryExtensionV1")}}),e.struct("AccountEntry",[["accountId",e.lookup("AccountId")],["balance",e.lookup("Int64")],["seqNum",e.lookup("SequenceNumber")],["numSubEntries",e.lookup("Uint32")],["inflationDest",e.option(e.lookup("AccountId"))],["flags",e.lookup("Uint32")],["homeDomain",e.lookup("String32")],["thresholds",e.lookup("Thresholds")],["signers",e.varArray(e.lookup("Signer"),e.lookup("MAX_SIGNERS"))],["ext",e.lookup("AccountEntryExt")]]),e.enum("TrustLineFlags",{authorizedFlag:1,authorizedToMaintainLiabilitiesFlag:2,trustlineClawbackEnabledFlag:4}),e.const("MASK_TRUSTLINE_FLAGS",1),e.const("MASK_TRUSTLINE_FLAGS_V13",3),e.const("MASK_TRUSTLINE_FLAGS_V17",7),e.enum("LiquidityPoolType",{liquidityPoolConstantProduct:0}),e.union("TrustLineAsset",{switchOn:e.lookup("AssetType"),switchName:"type",switches:[["assetTypeNative",e.void()],["assetTypeCreditAlphanum4","alphaNum4"],["assetTypeCreditAlphanum12","alphaNum12"],["assetTypePoolShare","liquidityPoolId"]],arms:{alphaNum4:e.lookup("AlphaNum4"),alphaNum12:e.lookup("AlphaNum12"),liquidityPoolId:e.lookup("PoolId")}}),e.union("TrustLineEntryExtensionV2Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("TrustLineEntryExtensionV2",[["liquidityPoolUseCount",e.lookup("Int32")],["ext",e.lookup("TrustLineEntryExtensionV2Ext")]]),e.union("TrustLineEntryV1Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[2,"v2"]],arms:{v2:e.lookup("TrustLineEntryExtensionV2")}}),e.struct("TrustLineEntryV1",[["liabilities",e.lookup("Liabilities")],["ext",e.lookup("TrustLineEntryV1Ext")]]),e.union("TrustLineEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("TrustLineEntryV1")}}),e.struct("TrustLineEntry",[["accountId",e.lookup("AccountId")],["asset",e.lookup("TrustLineAsset")],["balance",e.lookup("Int64")],["limit",e.lookup("Int64")],["flags",e.lookup("Uint32")],["ext",e.lookup("TrustLineEntryExt")]]),e.enum("OfferEntryFlags",{passiveFlag:1}),e.const("MASK_OFFERENTRY_FLAGS",1),e.union("OfferEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("OfferEntry",[["sellerId",e.lookup("AccountId")],["offerId",e.lookup("Int64")],["selling",e.lookup("Asset")],["buying",e.lookup("Asset")],["amount",e.lookup("Int64")],["price",e.lookup("Price")],["flags",e.lookup("Uint32")],["ext",e.lookup("OfferEntryExt")]]),e.union("DataEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("DataEntry",[["accountId",e.lookup("AccountId")],["dataName",e.lookup("String64")],["dataValue",e.lookup("DataValue")],["ext",e.lookup("DataEntryExt")]]),e.enum("ClaimPredicateType",{claimPredicateUnconditional:0,claimPredicateAnd:1,claimPredicateOr:2,claimPredicateNot:3,claimPredicateBeforeAbsoluteTime:4,claimPredicateBeforeRelativeTime:5}),e.union("ClaimPredicate",{switchOn:e.lookup("ClaimPredicateType"),switchName:"type",switches:[["claimPredicateUnconditional",e.void()],["claimPredicateAnd","andPredicates"],["claimPredicateOr","orPredicates"],["claimPredicateNot","notPredicate"],["claimPredicateBeforeAbsoluteTime","absBefore"],["claimPredicateBeforeRelativeTime","relBefore"]],arms:{andPredicates:e.varArray(e.lookup("ClaimPredicate"),2),orPredicates:e.varArray(e.lookup("ClaimPredicate"),2),notPredicate:e.option(e.lookup("ClaimPredicate")),absBefore:e.lookup("Int64"),relBefore:e.lookup("Int64")}}),e.enum("ClaimantType",{claimantTypeV0:0}),e.struct("ClaimantV0",[["destination",e.lookup("AccountId")],["predicate",e.lookup("ClaimPredicate")]]),e.union("Claimant",{switchOn:e.lookup("ClaimantType"),switchName:"type",switches:[["claimantTypeV0","v0"]],arms:{v0:e.lookup("ClaimantV0")}}),e.enum("ClaimableBalanceIdType",{claimableBalanceIdTypeV0:0}),e.union("ClaimableBalanceId",{switchOn:e.lookup("ClaimableBalanceIdType"),switchName:"type",switches:[["claimableBalanceIdTypeV0","v0"]],arms:{v0:e.lookup("Hash")}}),e.enum("ClaimableBalanceFlags",{claimableBalanceClawbackEnabledFlag:1}),e.const("MASK_CLAIMABLE_BALANCE_FLAGS",1),e.union("ClaimableBalanceEntryExtensionV1Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("ClaimableBalanceEntryExtensionV1",[["ext",e.lookup("ClaimableBalanceEntryExtensionV1Ext")],["flags",e.lookup("Uint32")]]),e.union("ClaimableBalanceEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("ClaimableBalanceEntryExtensionV1")}}),e.struct("ClaimableBalanceEntry",[["balanceId",e.lookup("ClaimableBalanceId")],["claimants",e.varArray(e.lookup("Claimant"),10)],["asset",e.lookup("Asset")],["amount",e.lookup("Int64")],["ext",e.lookup("ClaimableBalanceEntryExt")]]),e.struct("LiquidityPoolConstantProductParameters",[["assetA",e.lookup("Asset")],["assetB",e.lookup("Asset")],["fee",e.lookup("Int32")]]),e.struct("LiquidityPoolEntryConstantProduct",[["params",e.lookup("LiquidityPoolConstantProductParameters")],["reserveA",e.lookup("Int64")],["reserveB",e.lookup("Int64")],["totalPoolShares",e.lookup("Int64")],["poolSharesTrustLineCount",e.lookup("Int64")]]),e.union("LiquidityPoolEntryBody",{switchOn:e.lookup("LiquidityPoolType"),switchName:"type",switches:[["liquidityPoolConstantProduct","constantProduct"]],arms:{constantProduct:e.lookup("LiquidityPoolEntryConstantProduct")}}),e.struct("LiquidityPoolEntry",[["liquidityPoolId",e.lookup("PoolId")],["body",e.lookup("LiquidityPoolEntryBody")]]),e.enum("ContractDataDurability",{temporary:0,persistent:1}),e.struct("ContractDataEntry",[["ext",e.lookup("ExtensionPoint")],["contract",e.lookup("ScAddress")],["key",e.lookup("ScVal")],["durability",e.lookup("ContractDataDurability")],["val",e.lookup("ScVal")]]),e.struct("ContractCodeCostInputs",[["ext",e.lookup("ExtensionPoint")],["nInstructions",e.lookup("Uint32")],["nFunctions",e.lookup("Uint32")],["nGlobals",e.lookup("Uint32")],["nTableEntries",e.lookup("Uint32")],["nTypes",e.lookup("Uint32")],["nDataSegments",e.lookup("Uint32")],["nElemSegments",e.lookup("Uint32")],["nImports",e.lookup("Uint32")],["nExports",e.lookup("Uint32")],["nDataSegmentBytes",e.lookup("Uint32")]]),e.struct("ContractCodeEntryV1",[["ext",e.lookup("ExtensionPoint")],["costInputs",e.lookup("ContractCodeCostInputs")]]),e.union("ContractCodeEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("ContractCodeEntryV1")}}),e.struct("ContractCodeEntry",[["ext",e.lookup("ContractCodeEntryExt")],["hash",e.lookup("Hash")],["code",e.varOpaque()]]),e.struct("TtlEntry",[["keyHash",e.lookup("Hash")],["liveUntilLedgerSeq",e.lookup("Uint32")]]),e.union("LedgerEntryExtensionV1Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("LedgerEntryExtensionV1",[["sponsoringId",e.lookup("SponsorshipDescriptor")],["ext",e.lookup("LedgerEntryExtensionV1Ext")]]),e.union("LedgerEntryData",{switchOn:e.lookup("LedgerEntryType"),switchName:"type",switches:[["account","account"],["trustline","trustLine"],["offer","offer"],["data","data"],["claimableBalance","claimableBalance"],["liquidityPool","liquidityPool"],["contractData","contractData"],["contractCode","contractCode"],["configSetting","configSetting"],["ttl","ttl"]],arms:{account:e.lookup("AccountEntry"),trustLine:e.lookup("TrustLineEntry"),offer:e.lookup("OfferEntry"),data:e.lookup("DataEntry"),claimableBalance:e.lookup("ClaimableBalanceEntry"),liquidityPool:e.lookup("LiquidityPoolEntry"),contractData:e.lookup("ContractDataEntry"),contractCode:e.lookup("ContractCodeEntry"),configSetting:e.lookup("ConfigSettingEntry"),ttl:e.lookup("TtlEntry")}}),e.union("LedgerEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("LedgerEntryExtensionV1")}}),e.struct("LedgerEntry",[["lastModifiedLedgerSeq",e.lookup("Uint32")],["data",e.lookup("LedgerEntryData")],["ext",e.lookup("LedgerEntryExt")]]),e.struct("LedgerKeyAccount",[["accountId",e.lookup("AccountId")]]),e.struct("LedgerKeyTrustLine",[["accountId",e.lookup("AccountId")],["asset",e.lookup("TrustLineAsset")]]),e.struct("LedgerKeyOffer",[["sellerId",e.lookup("AccountId")],["offerId",e.lookup("Int64")]]),e.struct("LedgerKeyData",[["accountId",e.lookup("AccountId")],["dataName",e.lookup("String64")]]),e.struct("LedgerKeyClaimableBalance",[["balanceId",e.lookup("ClaimableBalanceId")]]),e.struct("LedgerKeyLiquidityPool",[["liquidityPoolId",e.lookup("PoolId")]]),e.struct("LedgerKeyContractData",[["contract",e.lookup("ScAddress")],["key",e.lookup("ScVal")],["durability",e.lookup("ContractDataDurability")]]),e.struct("LedgerKeyContractCode",[["hash",e.lookup("Hash")]]),e.struct("LedgerKeyConfigSetting",[["configSettingId",e.lookup("ConfigSettingId")]]),e.struct("LedgerKeyTtl",[["keyHash",e.lookup("Hash")]]),e.union("LedgerKey",{switchOn:e.lookup("LedgerEntryType"),switchName:"type",switches:[["account","account"],["trustline","trustLine"],["offer","offer"],["data","data"],["claimableBalance","claimableBalance"],["liquidityPool","liquidityPool"],["contractData","contractData"],["contractCode","contractCode"],["configSetting","configSetting"],["ttl","ttl"]],arms:{account:e.lookup("LedgerKeyAccount"),trustLine:e.lookup("LedgerKeyTrustLine"),offer:e.lookup("LedgerKeyOffer"),data:e.lookup("LedgerKeyData"),claimableBalance:e.lookup("LedgerKeyClaimableBalance"),liquidityPool:e.lookup("LedgerKeyLiquidityPool"),contractData:e.lookup("LedgerKeyContractData"),contractCode:e.lookup("LedgerKeyContractCode"),configSetting:e.lookup("LedgerKeyConfigSetting"),ttl:e.lookup("LedgerKeyTtl")}}),e.enum("EnvelopeType",{envelopeTypeTxV0:0,envelopeTypeScp:1,envelopeTypeTx:2,envelopeTypeAuth:3,envelopeTypeScpvalue:4,envelopeTypeTxFeeBump:5,envelopeTypeOpId:6,envelopeTypePoolRevokeOpId:7,envelopeTypeContractId:8,envelopeTypeSorobanAuthorization:9}),e.enum("BucketListType",{live:0,hotArchive:1,coldArchive:2}),e.enum("BucketEntryType",{metaentry:-1,liveentry:0,deadentry:1,initentry:2}),e.enum("HotArchiveBucketEntryType",{hotArchiveMetaentry:-1,hotArchiveArchived:0,hotArchiveLive:1,hotArchiveDeleted:2}),e.enum("ColdArchiveBucketEntryType",{coldArchiveMetaentry:-1,coldArchiveArchivedLeaf:0,coldArchiveDeletedLeaf:1,coldArchiveBoundaryLeaf:2,coldArchiveHash:3}),e.union("BucketMetadataExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"bucketListType"]],arms:{bucketListType:e.lookup("BucketListType")}}),e.struct("BucketMetadata",[["ledgerVersion",e.lookup("Uint32")],["ext",e.lookup("BucketMetadataExt")]]),e.union("BucketEntry",{switchOn:e.lookup("BucketEntryType"),switchName:"type",switches:[["liveentry","liveEntry"],["initentry","liveEntry"],["deadentry","deadEntry"],["metaentry","metaEntry"]],arms:{liveEntry:e.lookup("LedgerEntry"),deadEntry:e.lookup("LedgerKey"),metaEntry:e.lookup("BucketMetadata")}}),e.union("HotArchiveBucketEntry",{switchOn:e.lookup("HotArchiveBucketEntryType"),switchName:"type",switches:[["hotArchiveArchived","archivedEntry"],["hotArchiveLive","key"],["hotArchiveDeleted","key"],["hotArchiveMetaentry","metaEntry"]],arms:{archivedEntry:e.lookup("LedgerEntry"),key:e.lookup("LedgerKey"),metaEntry:e.lookup("BucketMetadata")}}),e.struct("ColdArchiveArchivedLeaf",[["index",e.lookup("Uint32")],["archivedEntry",e.lookup("LedgerEntry")]]),e.struct("ColdArchiveDeletedLeaf",[["index",e.lookup("Uint32")],["deletedKey",e.lookup("LedgerKey")]]),e.struct("ColdArchiveBoundaryLeaf",[["index",e.lookup("Uint32")],["isLowerBound",e.bool()]]),e.struct("ColdArchiveHashEntry",[["index",e.lookup("Uint32")],["level",e.lookup("Uint32")],["hash",e.lookup("Hash")]]),e.union("ColdArchiveBucketEntry",{switchOn:e.lookup("ColdArchiveBucketEntryType"),switchName:"type",switches:[["coldArchiveMetaentry","metaEntry"],["coldArchiveArchivedLeaf","archivedLeaf"],["coldArchiveDeletedLeaf","deletedLeaf"],["coldArchiveBoundaryLeaf","boundaryLeaf"],["coldArchiveHash","hashEntry"]],arms:{metaEntry:e.lookup("BucketMetadata"),archivedLeaf:e.lookup("ColdArchiveArchivedLeaf"),deletedLeaf:e.lookup("ColdArchiveDeletedLeaf"),boundaryLeaf:e.lookup("ColdArchiveBoundaryLeaf"),hashEntry:e.lookup("ColdArchiveHashEntry")}}),e.typedef("UpgradeType",e.varOpaque(128)),e.enum("StellarValueType",{stellarValueBasic:0,stellarValueSigned:1}),e.struct("LedgerCloseValueSignature",[["nodeId",e.lookup("NodeId")],["signature",e.lookup("Signature")]]),e.union("StellarValueExt",{switchOn:e.lookup("StellarValueType"),switchName:"v",switches:[["stellarValueBasic",e.void()],["stellarValueSigned","lcValueSignature"]],arms:{lcValueSignature:e.lookup("LedgerCloseValueSignature")}}),e.struct("StellarValue",[["txSetHash",e.lookup("Hash")],["closeTime",e.lookup("TimePoint")],["upgrades",e.varArray(e.lookup("UpgradeType"),6)],["ext",e.lookup("StellarValueExt")]]),e.const("MASK_LEDGER_HEADER_FLAGS",7),e.enum("LedgerHeaderFlags",{disableLiquidityPoolTradingFlag:1,disableLiquidityPoolDepositFlag:2,disableLiquidityPoolWithdrawalFlag:4}),e.union("LedgerHeaderExtensionV1Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("LedgerHeaderExtensionV1",[["flags",e.lookup("Uint32")],["ext",e.lookup("LedgerHeaderExtensionV1Ext")]]),e.union("LedgerHeaderExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("LedgerHeaderExtensionV1")}}),e.struct("LedgerHeader",[["ledgerVersion",e.lookup("Uint32")],["previousLedgerHash",e.lookup("Hash")],["scpValue",e.lookup("StellarValue")],["txSetResultHash",e.lookup("Hash")],["bucketListHash",e.lookup("Hash")],["ledgerSeq",e.lookup("Uint32")],["totalCoins",e.lookup("Int64")],["feePool",e.lookup("Int64")],["inflationSeq",e.lookup("Uint32")],["idPool",e.lookup("Uint64")],["baseFee",e.lookup("Uint32")],["baseReserve",e.lookup("Uint32")],["maxTxSetSize",e.lookup("Uint32")],["skipList",e.array(e.lookup("Hash"),4)],["ext",e.lookup("LedgerHeaderExt")]]),e.enum("LedgerUpgradeType",{ledgerUpgradeVersion:1,ledgerUpgradeBaseFee:2,ledgerUpgradeMaxTxSetSize:3,ledgerUpgradeBaseReserve:4,ledgerUpgradeFlags:5,ledgerUpgradeConfig:6,ledgerUpgradeMaxSorobanTxSetSize:7}),e.struct("ConfigUpgradeSetKey",[["contractId",e.lookup("Hash")],["contentHash",e.lookup("Hash")]]),e.union("LedgerUpgrade",{switchOn:e.lookup("LedgerUpgradeType"),switchName:"type",switches:[["ledgerUpgradeVersion","newLedgerVersion"],["ledgerUpgradeBaseFee","newBaseFee"],["ledgerUpgradeMaxTxSetSize","newMaxTxSetSize"],["ledgerUpgradeBaseReserve","newBaseReserve"],["ledgerUpgradeFlags","newFlags"],["ledgerUpgradeConfig","newConfig"],["ledgerUpgradeMaxSorobanTxSetSize","newMaxSorobanTxSetSize"]],arms:{newLedgerVersion:e.lookup("Uint32"),newBaseFee:e.lookup("Uint32"),newMaxTxSetSize:e.lookup("Uint32"),newBaseReserve:e.lookup("Uint32"),newFlags:e.lookup("Uint32"),newConfig:e.lookup("ConfigUpgradeSetKey"),newMaxSorobanTxSetSize:e.lookup("Uint32")}}),e.struct("ConfigUpgradeSet",[["updatedEntry",e.varArray(e.lookup("ConfigSettingEntry"),2147483647)]]),e.enum("TxSetComponentType",{txsetCompTxsMaybeDiscountedFee:0}),e.struct("TxSetComponentTxsMaybeDiscountedFee",[["baseFee",e.option(e.lookup("Int64"))],["txes",e.varArray(e.lookup("TransactionEnvelope"),2147483647)]]),e.union("TxSetComponent",{switchOn:e.lookup("TxSetComponentType"),switchName:"type",switches:[["txsetCompTxsMaybeDiscountedFee","txsMaybeDiscountedFee"]],arms:{txsMaybeDiscountedFee:e.lookup("TxSetComponentTxsMaybeDiscountedFee")}}),e.union("TransactionPhase",{switchOn:e.int(),switchName:"v",switches:[[0,"v0Components"]],arms:{v0Components:e.varArray(e.lookup("TxSetComponent"),2147483647)}}),e.struct("TransactionSet",[["previousLedgerHash",e.lookup("Hash")],["txes",e.varArray(e.lookup("TransactionEnvelope"),2147483647)]]),e.struct("TransactionSetV1",[["previousLedgerHash",e.lookup("Hash")],["phases",e.varArray(e.lookup("TransactionPhase"),2147483647)]]),e.union("GeneralizedTransactionSet",{switchOn:e.int(),switchName:"v",switches:[[1,"v1TxSet"]],arms:{v1TxSet:e.lookup("TransactionSetV1")}}),e.struct("TransactionResultPair",[["transactionHash",e.lookup("Hash")],["result",e.lookup("TransactionResult")]]),e.struct("TransactionResultSet",[["results",e.varArray(e.lookup("TransactionResultPair"),2147483647)]]),e.union("TransactionHistoryEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"generalizedTxSet"]],arms:{generalizedTxSet:e.lookup("GeneralizedTransactionSet")}}),e.struct("TransactionHistoryEntry",[["ledgerSeq",e.lookup("Uint32")],["txSet",e.lookup("TransactionSet")],["ext",e.lookup("TransactionHistoryEntryExt")]]),e.union("TransactionHistoryResultEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("TransactionHistoryResultEntry",[["ledgerSeq",e.lookup("Uint32")],["txResultSet",e.lookup("TransactionResultSet")],["ext",e.lookup("TransactionHistoryResultEntryExt")]]),e.union("LedgerHeaderHistoryEntryExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("LedgerHeaderHistoryEntry",[["hash",e.lookup("Hash")],["header",e.lookup("LedgerHeader")],["ext",e.lookup("LedgerHeaderHistoryEntryExt")]]),e.struct("LedgerScpMessages",[["ledgerSeq",e.lookup("Uint32")],["messages",e.varArray(e.lookup("ScpEnvelope"),2147483647)]]),e.struct("ScpHistoryEntryV0",[["quorumSets",e.varArray(e.lookup("ScpQuorumSet"),2147483647)],["ledgerMessages",e.lookup("LedgerScpMessages")]]),e.union("ScpHistoryEntry",{switchOn:e.int(),switchName:"v",switches:[[0,"v0"]],arms:{v0:e.lookup("ScpHistoryEntryV0")}}),e.enum("LedgerEntryChangeType",{ledgerEntryCreated:0,ledgerEntryUpdated:1,ledgerEntryRemoved:2,ledgerEntryState:3}),e.union("LedgerEntryChange",{switchOn:e.lookup("LedgerEntryChangeType"),switchName:"type",switches:[["ledgerEntryCreated","created"],["ledgerEntryUpdated","updated"],["ledgerEntryRemoved","removed"],["ledgerEntryState","state"]],arms:{created:e.lookup("LedgerEntry"),updated:e.lookup("LedgerEntry"),removed:e.lookup("LedgerKey"),state:e.lookup("LedgerEntry")}}),e.typedef("LedgerEntryChanges",e.varArray(e.lookup("LedgerEntryChange"),2147483647)),e.struct("OperationMeta",[["changes",e.lookup("LedgerEntryChanges")]]),e.struct("TransactionMetaV1",[["txChanges",e.lookup("LedgerEntryChanges")],["operations",e.varArray(e.lookup("OperationMeta"),2147483647)]]),e.struct("TransactionMetaV2",[["txChangesBefore",e.lookup("LedgerEntryChanges")],["operations",e.varArray(e.lookup("OperationMeta"),2147483647)],["txChangesAfter",e.lookup("LedgerEntryChanges")]]),e.enum("ContractEventType",{system:0,contract:1,diagnostic:2}),e.struct("ContractEventV0",[["topics",e.varArray(e.lookup("ScVal"),2147483647)],["data",e.lookup("ScVal")]]),e.union("ContractEventBody",{switchOn:e.int(),switchName:"v",switches:[[0,"v0"]],arms:{v0:e.lookup("ContractEventV0")}}),e.struct("ContractEvent",[["ext",e.lookup("ExtensionPoint")],["contractId",e.option(e.lookup("Hash"))],["type",e.lookup("ContractEventType")],["body",e.lookup("ContractEventBody")]]),e.struct("DiagnosticEvent",[["inSuccessfulContractCall",e.bool()],["event",e.lookup("ContractEvent")]]),e.typedef("DiagnosticEvents",e.varArray(e.lookup("DiagnosticEvent"),2147483647)),e.struct("SorobanTransactionMetaExtV1",[["ext",e.lookup("ExtensionPoint")],["totalNonRefundableResourceFeeCharged",e.lookup("Int64")],["totalRefundableResourceFeeCharged",e.lookup("Int64")],["rentFeeCharged",e.lookup("Int64")]]),e.union("SorobanTransactionMetaExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("SorobanTransactionMetaExtV1")}}),e.struct("SorobanTransactionMeta",[["ext",e.lookup("SorobanTransactionMetaExt")],["events",e.varArray(e.lookup("ContractEvent"),2147483647)],["returnValue",e.lookup("ScVal")],["diagnosticEvents",e.varArray(e.lookup("DiagnosticEvent"),2147483647)]]),e.struct("TransactionMetaV3",[["ext",e.lookup("ExtensionPoint")],["txChangesBefore",e.lookup("LedgerEntryChanges")],["operations",e.varArray(e.lookup("OperationMeta"),2147483647)],["txChangesAfter",e.lookup("LedgerEntryChanges")],["sorobanMeta",e.option(e.lookup("SorobanTransactionMeta"))]]),e.struct("InvokeHostFunctionSuccessPreImage",[["returnValue",e.lookup("ScVal")],["events",e.varArray(e.lookup("ContractEvent"),2147483647)]]),e.union("TransactionMeta",{switchOn:e.int(),switchName:"v",switches:[[0,"operations"],[1,"v1"],[2,"v2"],[3,"v3"]],arms:{operations:e.varArray(e.lookup("OperationMeta"),2147483647),v1:e.lookup("TransactionMetaV1"),v2:e.lookup("TransactionMetaV2"),v3:e.lookup("TransactionMetaV3")}}),e.struct("TransactionResultMeta",[["result",e.lookup("TransactionResultPair")],["feeProcessing",e.lookup("LedgerEntryChanges")],["txApplyProcessing",e.lookup("TransactionMeta")]]),e.struct("UpgradeEntryMeta",[["upgrade",e.lookup("LedgerUpgrade")],["changes",e.lookup("LedgerEntryChanges")]]),e.struct("LedgerCloseMetaV0",[["ledgerHeader",e.lookup("LedgerHeaderHistoryEntry")],["txSet",e.lookup("TransactionSet")],["txProcessing",e.varArray(e.lookup("TransactionResultMeta"),2147483647)],["upgradesProcessing",e.varArray(e.lookup("UpgradeEntryMeta"),2147483647)],["scpInfo",e.varArray(e.lookup("ScpHistoryEntry"),2147483647)]]),e.struct("LedgerCloseMetaExtV1",[["ext",e.lookup("ExtensionPoint")],["sorobanFeeWrite1Kb",e.lookup("Int64")]]),e.union("LedgerCloseMetaExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"v1"]],arms:{v1:e.lookup("LedgerCloseMetaExtV1")}}),e.struct("LedgerCloseMetaV1",[["ext",e.lookup("LedgerCloseMetaExt")],["ledgerHeader",e.lookup("LedgerHeaderHistoryEntry")],["txSet",e.lookup("GeneralizedTransactionSet")],["txProcessing",e.varArray(e.lookup("TransactionResultMeta"),2147483647)],["upgradesProcessing",e.varArray(e.lookup("UpgradeEntryMeta"),2147483647)],["scpInfo",e.varArray(e.lookup("ScpHistoryEntry"),2147483647)],["totalByteSizeOfBucketList",e.lookup("Uint64")],["evictedTemporaryLedgerKeys",e.varArray(e.lookup("LedgerKey"),2147483647)],["evictedPersistentLedgerEntries",e.varArray(e.lookup("LedgerEntry"),2147483647)]]),e.union("LedgerCloseMeta",{switchOn:e.int(),switchName:"v",switches:[[0,"v0"],[1,"v1"]],arms:{v0:e.lookup("LedgerCloseMetaV0"),v1:e.lookup("LedgerCloseMetaV1")}}),e.enum("ErrorCode",{errMisc:0,errData:1,errConf:2,errAuth:3,errLoad:4}),e.struct("Error",[["code",e.lookup("ErrorCode")],["msg",e.string(100)]]),e.struct("SendMore",[["numMessages",e.lookup("Uint32")]]),e.struct("SendMoreExtended",[["numMessages",e.lookup("Uint32")],["numBytes",e.lookup("Uint32")]]),e.struct("AuthCert",[["pubkey",e.lookup("Curve25519Public")],["expiration",e.lookup("Uint64")],["sig",e.lookup("Signature")]]),e.struct("Hello",[["ledgerVersion",e.lookup("Uint32")],["overlayVersion",e.lookup("Uint32")],["overlayMinVersion",e.lookup("Uint32")],["networkId",e.lookup("Hash")],["versionStr",e.string(100)],["listeningPort",e.int()],["peerId",e.lookup("NodeId")],["cert",e.lookup("AuthCert")],["nonce",e.lookup("Uint256")]]),e.const("AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED",200),e.struct("Auth",[["flags",e.int()]]),e.enum("IpAddrType",{iPv4:0,iPv6:1}),e.union("PeerAddressIp",{switchOn:e.lookup("IpAddrType"),switchName:"type",switches:[["iPv4","ipv4"],["iPv6","ipv6"]],arms:{ipv4:e.opaque(4),ipv6:e.opaque(16)}}),e.struct("PeerAddress",[["ip",e.lookup("PeerAddressIp")],["port",e.lookup("Uint32")],["numFailures",e.lookup("Uint32")]]),e.enum("MessageType",{errorMsg:0,auth:2,dontHave:3,getPeers:4,peers:5,getTxSet:6,txSet:7,generalizedTxSet:17,transaction:8,getScpQuorumset:9,scpQuorumset:10,scpMessage:11,getScpState:12,hello:13,surveyRequest:14,surveyResponse:15,sendMore:16,sendMoreExtended:20,floodAdvert:18,floodDemand:19,timeSlicedSurveyRequest:21,timeSlicedSurveyResponse:22,timeSlicedSurveyStartCollecting:23,timeSlicedSurveyStopCollecting:24}),e.struct("DontHave",[["type",e.lookup("MessageType")],["reqHash",e.lookup("Uint256")]]),e.enum("SurveyMessageCommandType",{surveyTopology:0,timeSlicedSurveyTopology:1}),e.enum("SurveyMessageResponseType",{surveyTopologyResponseV0:0,surveyTopologyResponseV1:1,surveyTopologyResponseV2:2}),e.struct("TimeSlicedSurveyStartCollectingMessage",[["surveyorId",e.lookup("NodeId")],["nonce",e.lookup("Uint32")],["ledgerNum",e.lookup("Uint32")]]),e.struct("SignedTimeSlicedSurveyStartCollectingMessage",[["signature",e.lookup("Signature")],["startCollecting",e.lookup("TimeSlicedSurveyStartCollectingMessage")]]),e.struct("TimeSlicedSurveyStopCollectingMessage",[["surveyorId",e.lookup("NodeId")],["nonce",e.lookup("Uint32")],["ledgerNum",e.lookup("Uint32")]]),e.struct("SignedTimeSlicedSurveyStopCollectingMessage",[["signature",e.lookup("Signature")],["stopCollecting",e.lookup("TimeSlicedSurveyStopCollectingMessage")]]),e.struct("SurveyRequestMessage",[["surveyorPeerId",e.lookup("NodeId")],["surveyedPeerId",e.lookup("NodeId")],["ledgerNum",e.lookup("Uint32")],["encryptionKey",e.lookup("Curve25519Public")],["commandType",e.lookup("SurveyMessageCommandType")]]),e.struct("TimeSlicedSurveyRequestMessage",[["request",e.lookup("SurveyRequestMessage")],["nonce",e.lookup("Uint32")],["inboundPeersIndex",e.lookup("Uint32")],["outboundPeersIndex",e.lookup("Uint32")]]),e.struct("SignedSurveyRequestMessage",[["requestSignature",e.lookup("Signature")],["request",e.lookup("SurveyRequestMessage")]]),e.struct("SignedTimeSlicedSurveyRequestMessage",[["requestSignature",e.lookup("Signature")],["request",e.lookup("TimeSlicedSurveyRequestMessage")]]),e.typedef("EncryptedBody",e.varOpaque(64e3)),e.struct("SurveyResponseMessage",[["surveyorPeerId",e.lookup("NodeId")],["surveyedPeerId",e.lookup("NodeId")],["ledgerNum",e.lookup("Uint32")],["commandType",e.lookup("SurveyMessageCommandType")],["encryptedBody",e.lookup("EncryptedBody")]]),e.struct("TimeSlicedSurveyResponseMessage",[["response",e.lookup("SurveyResponseMessage")],["nonce",e.lookup("Uint32")]]),e.struct("SignedSurveyResponseMessage",[["responseSignature",e.lookup("Signature")],["response",e.lookup("SurveyResponseMessage")]]),e.struct("SignedTimeSlicedSurveyResponseMessage",[["responseSignature",e.lookup("Signature")],["response",e.lookup("TimeSlicedSurveyResponseMessage")]]),e.struct("PeerStats",[["id",e.lookup("NodeId")],["versionStr",e.string(100)],["messagesRead",e.lookup("Uint64")],["messagesWritten",e.lookup("Uint64")],["bytesRead",e.lookup("Uint64")],["bytesWritten",e.lookup("Uint64")],["secondsConnected",e.lookup("Uint64")],["uniqueFloodBytesRecv",e.lookup("Uint64")],["duplicateFloodBytesRecv",e.lookup("Uint64")],["uniqueFetchBytesRecv",e.lookup("Uint64")],["duplicateFetchBytesRecv",e.lookup("Uint64")],["uniqueFloodMessageRecv",e.lookup("Uint64")],["duplicateFloodMessageRecv",e.lookup("Uint64")],["uniqueFetchMessageRecv",e.lookup("Uint64")],["duplicateFetchMessageRecv",e.lookup("Uint64")]]),e.typedef("PeerStatList",e.varArray(e.lookup("PeerStats"),25)),e.struct("TimeSlicedNodeData",[["addedAuthenticatedPeers",e.lookup("Uint32")],["droppedAuthenticatedPeers",e.lookup("Uint32")],["totalInboundPeerCount",e.lookup("Uint32")],["totalOutboundPeerCount",e.lookup("Uint32")],["p75ScpFirstToSelfLatencyMs",e.lookup("Uint32")],["p75ScpSelfToOtherLatencyMs",e.lookup("Uint32")],["lostSyncCount",e.lookup("Uint32")],["isValidator",e.bool()],["maxInboundPeerCount",e.lookup("Uint32")],["maxOutboundPeerCount",e.lookup("Uint32")]]),e.struct("TimeSlicedPeerData",[["peerStats",e.lookup("PeerStats")],["averageLatencyMs",e.lookup("Uint32")]]),e.typedef("TimeSlicedPeerDataList",e.varArray(e.lookup("TimeSlicedPeerData"),25)),e.struct("TopologyResponseBodyV0",[["inboundPeers",e.lookup("PeerStatList")],["outboundPeers",e.lookup("PeerStatList")],["totalInboundPeerCount",e.lookup("Uint32")],["totalOutboundPeerCount",e.lookup("Uint32")]]),e.struct("TopologyResponseBodyV1",[["inboundPeers",e.lookup("PeerStatList")],["outboundPeers",e.lookup("PeerStatList")],["totalInboundPeerCount",e.lookup("Uint32")],["totalOutboundPeerCount",e.lookup("Uint32")],["maxInboundPeerCount",e.lookup("Uint32")],["maxOutboundPeerCount",e.lookup("Uint32")]]),e.struct("TopologyResponseBodyV2",[["inboundPeers",e.lookup("TimeSlicedPeerDataList")],["outboundPeers",e.lookup("TimeSlicedPeerDataList")],["nodeData",e.lookup("TimeSlicedNodeData")]]),e.union("SurveyResponseBody",{switchOn:e.lookup("SurveyMessageResponseType"),switchName:"type",switches:[["surveyTopologyResponseV0","topologyResponseBodyV0"],["surveyTopologyResponseV1","topologyResponseBodyV1"],["surveyTopologyResponseV2","topologyResponseBodyV2"]],arms:{topologyResponseBodyV0:e.lookup("TopologyResponseBodyV0"),topologyResponseBodyV1:e.lookup("TopologyResponseBodyV1"),topologyResponseBodyV2:e.lookup("TopologyResponseBodyV2")}}),e.const("TX_ADVERT_VECTOR_MAX_SIZE",1e3),e.typedef("TxAdvertVector",e.varArray(e.lookup("Hash"),e.lookup("TX_ADVERT_VECTOR_MAX_SIZE"))),e.struct("FloodAdvert",[["txHashes",e.lookup("TxAdvertVector")]]),e.const("TX_DEMAND_VECTOR_MAX_SIZE",1e3),e.typedef("TxDemandVector",e.varArray(e.lookup("Hash"),e.lookup("TX_DEMAND_VECTOR_MAX_SIZE"))),e.struct("FloodDemand",[["txHashes",e.lookup("TxDemandVector")]]),e.union("StellarMessage",{switchOn:e.lookup("MessageType"),switchName:"type",switches:[["errorMsg","error"],["hello","hello"],["auth","auth"],["dontHave","dontHave"],["getPeers",e.void()],["peers","peers"],["getTxSet","txSetHash"],["txSet","txSet"],["generalizedTxSet","generalizedTxSet"],["transaction","transaction"],["surveyRequest","signedSurveyRequestMessage"],["surveyResponse","signedSurveyResponseMessage"],["timeSlicedSurveyRequest","signedTimeSlicedSurveyRequestMessage"],["timeSlicedSurveyResponse","signedTimeSlicedSurveyResponseMessage"],["timeSlicedSurveyStartCollecting","signedTimeSlicedSurveyStartCollectingMessage"],["timeSlicedSurveyStopCollecting","signedTimeSlicedSurveyStopCollectingMessage"],["getScpQuorumset","qSetHash"],["scpQuorumset","qSet"],["scpMessage","envelope"],["getScpState","getScpLedgerSeq"],["sendMore","sendMoreMessage"],["sendMoreExtended","sendMoreExtendedMessage"],["floodAdvert","floodAdvert"],["floodDemand","floodDemand"]],arms:{error:e.lookup("Error"),hello:e.lookup("Hello"),auth:e.lookup("Auth"),dontHave:e.lookup("DontHave"),peers:e.varArray(e.lookup("PeerAddress"),100),txSetHash:e.lookup("Uint256"),txSet:e.lookup("TransactionSet"),generalizedTxSet:e.lookup("GeneralizedTransactionSet"),transaction:e.lookup("TransactionEnvelope"),signedSurveyRequestMessage:e.lookup("SignedSurveyRequestMessage"),signedSurveyResponseMessage:e.lookup("SignedSurveyResponseMessage"),signedTimeSlicedSurveyRequestMessage:e.lookup("SignedTimeSlicedSurveyRequestMessage"),signedTimeSlicedSurveyResponseMessage:e.lookup("SignedTimeSlicedSurveyResponseMessage"),signedTimeSlicedSurveyStartCollectingMessage:e.lookup("SignedTimeSlicedSurveyStartCollectingMessage"),signedTimeSlicedSurveyStopCollectingMessage:e.lookup("SignedTimeSlicedSurveyStopCollectingMessage"),qSetHash:e.lookup("Uint256"),qSet:e.lookup("ScpQuorumSet"),envelope:e.lookup("ScpEnvelope"),getScpLedgerSeq:e.lookup("Uint32"),sendMoreMessage:e.lookup("SendMore"),sendMoreExtendedMessage:e.lookup("SendMoreExtended"),floodAdvert:e.lookup("FloodAdvert"),floodDemand:e.lookup("FloodDemand")}}),e.struct("AuthenticatedMessageV0",[["sequence",e.lookup("Uint64")],["message",e.lookup("StellarMessage")],["mac",e.lookup("HmacSha256Mac")]]),e.union("AuthenticatedMessage",{switchOn:e.lookup("Uint32"),switchName:"v",switches:[[0,"v0"]],arms:{v0:e.lookup("AuthenticatedMessageV0")}}),e.const("MAX_OPS_PER_TX",100),e.union("LiquidityPoolParameters",{switchOn:e.lookup("LiquidityPoolType"),switchName:"type",switches:[["liquidityPoolConstantProduct","constantProduct"]],arms:{constantProduct:e.lookup("LiquidityPoolConstantProductParameters")}}),e.struct("MuxedAccountMed25519",[["id",e.lookup("Uint64")],["ed25519",e.lookup("Uint256")]]),e.union("MuxedAccount",{switchOn:e.lookup("CryptoKeyType"),switchName:"type",switches:[["keyTypeEd25519","ed25519"],["keyTypeMuxedEd25519","med25519"]],arms:{ed25519:e.lookup("Uint256"),med25519:e.lookup("MuxedAccountMed25519")}}),e.struct("DecoratedSignature",[["hint",e.lookup("SignatureHint")],["signature",e.lookup("Signature")]]),e.enum("OperationType",{createAccount:0,payment:1,pathPaymentStrictReceive:2,manageSellOffer:3,createPassiveSellOffer:4,setOptions:5,changeTrust:6,allowTrust:7,accountMerge:8,inflation:9,manageData:10,bumpSequence:11,manageBuyOffer:12,pathPaymentStrictSend:13,createClaimableBalance:14,claimClaimableBalance:15,beginSponsoringFutureReserves:16,endSponsoringFutureReserves:17,revokeSponsorship:18,clawback:19,clawbackClaimableBalance:20,setTrustLineFlags:21,liquidityPoolDeposit:22,liquidityPoolWithdraw:23,invokeHostFunction:24,extendFootprintTtl:25,restoreFootprint:26}),e.struct("CreateAccountOp",[["destination",e.lookup("AccountId")],["startingBalance",e.lookup("Int64")]]),e.struct("PaymentOp",[["destination",e.lookup("MuxedAccount")],["asset",e.lookup("Asset")],["amount",e.lookup("Int64")]]),e.struct("PathPaymentStrictReceiveOp",[["sendAsset",e.lookup("Asset")],["sendMax",e.lookup("Int64")],["destination",e.lookup("MuxedAccount")],["destAsset",e.lookup("Asset")],["destAmount",e.lookup("Int64")],["path",e.varArray(e.lookup("Asset"),5)]]),e.struct("PathPaymentStrictSendOp",[["sendAsset",e.lookup("Asset")],["sendAmount",e.lookup("Int64")],["destination",e.lookup("MuxedAccount")],["destAsset",e.lookup("Asset")],["destMin",e.lookup("Int64")],["path",e.varArray(e.lookup("Asset"),5)]]),e.struct("ManageSellOfferOp",[["selling",e.lookup("Asset")],["buying",e.lookup("Asset")],["amount",e.lookup("Int64")],["price",e.lookup("Price")],["offerId",e.lookup("Int64")]]),e.struct("ManageBuyOfferOp",[["selling",e.lookup("Asset")],["buying",e.lookup("Asset")],["buyAmount",e.lookup("Int64")],["price",e.lookup("Price")],["offerId",e.lookup("Int64")]]),e.struct("CreatePassiveSellOfferOp",[["selling",e.lookup("Asset")],["buying",e.lookup("Asset")],["amount",e.lookup("Int64")],["price",e.lookup("Price")]]),e.struct("SetOptionsOp",[["inflationDest",e.option(e.lookup("AccountId"))],["clearFlags",e.option(e.lookup("Uint32"))],["setFlags",e.option(e.lookup("Uint32"))],["masterWeight",e.option(e.lookup("Uint32"))],["lowThreshold",e.option(e.lookup("Uint32"))],["medThreshold",e.option(e.lookup("Uint32"))],["highThreshold",e.option(e.lookup("Uint32"))],["homeDomain",e.option(e.lookup("String32"))],["signer",e.option(e.lookup("Signer"))]]),e.union("ChangeTrustAsset",{switchOn:e.lookup("AssetType"),switchName:"type",switches:[["assetTypeNative",e.void()],["assetTypeCreditAlphanum4","alphaNum4"],["assetTypeCreditAlphanum12","alphaNum12"],["assetTypePoolShare","liquidityPool"]],arms:{alphaNum4:e.lookup("AlphaNum4"),alphaNum12:e.lookup("AlphaNum12"),liquidityPool:e.lookup("LiquidityPoolParameters")}}),e.struct("ChangeTrustOp",[["line",e.lookup("ChangeTrustAsset")],["limit",e.lookup("Int64")]]),e.struct("AllowTrustOp",[["trustor",e.lookup("AccountId")],["asset",e.lookup("AssetCode")],["authorize",e.lookup("Uint32")]]),e.struct("ManageDataOp",[["dataName",e.lookup("String64")],["dataValue",e.option(e.lookup("DataValue"))]]),e.struct("BumpSequenceOp",[["bumpTo",e.lookup("SequenceNumber")]]),e.struct("CreateClaimableBalanceOp",[["asset",e.lookup("Asset")],["amount",e.lookup("Int64")],["claimants",e.varArray(e.lookup("Claimant"),10)]]),e.struct("ClaimClaimableBalanceOp",[["balanceId",e.lookup("ClaimableBalanceId")]]),e.struct("BeginSponsoringFutureReservesOp",[["sponsoredId",e.lookup("AccountId")]]),e.enum("RevokeSponsorshipType",{revokeSponsorshipLedgerEntry:0,revokeSponsorshipSigner:1}),e.struct("RevokeSponsorshipOpSigner",[["accountId",e.lookup("AccountId")],["signerKey",e.lookup("SignerKey")]]),e.union("RevokeSponsorshipOp",{switchOn:e.lookup("RevokeSponsorshipType"),switchName:"type",switches:[["revokeSponsorshipLedgerEntry","ledgerKey"],["revokeSponsorshipSigner","signer"]],arms:{ledgerKey:e.lookup("LedgerKey"),signer:e.lookup("RevokeSponsorshipOpSigner")}}),e.struct("ClawbackOp",[["asset",e.lookup("Asset")],["from",e.lookup("MuxedAccount")],["amount",e.lookup("Int64")]]),e.struct("ClawbackClaimableBalanceOp",[["balanceId",e.lookup("ClaimableBalanceId")]]),e.struct("SetTrustLineFlagsOp",[["trustor",e.lookup("AccountId")],["asset",e.lookup("Asset")],["clearFlags",e.lookup("Uint32")],["setFlags",e.lookup("Uint32")]]),e.const("LIQUIDITY_POOL_FEE_V18",30),e.struct("LiquidityPoolDepositOp",[["liquidityPoolId",e.lookup("PoolId")],["maxAmountA",e.lookup("Int64")],["maxAmountB",e.lookup("Int64")],["minPrice",e.lookup("Price")],["maxPrice",e.lookup("Price")]]),e.struct("LiquidityPoolWithdrawOp",[["liquidityPoolId",e.lookup("PoolId")],["amount",e.lookup("Int64")],["minAmountA",e.lookup("Int64")],["minAmountB",e.lookup("Int64")]]),e.enum("HostFunctionType",{hostFunctionTypeInvokeContract:0,hostFunctionTypeCreateContract:1,hostFunctionTypeUploadContractWasm:2,hostFunctionTypeCreateContractV2:3}),e.enum("ContractIdPreimageType",{contractIdPreimageFromAddress:0,contractIdPreimageFromAsset:1}),e.struct("ContractIdPreimageFromAddress",[["address",e.lookup("ScAddress")],["salt",e.lookup("Uint256")]]),e.union("ContractIdPreimage",{switchOn:e.lookup("ContractIdPreimageType"),switchName:"type",switches:[["contractIdPreimageFromAddress","fromAddress"],["contractIdPreimageFromAsset","fromAsset"]],arms:{fromAddress:e.lookup("ContractIdPreimageFromAddress"),fromAsset:e.lookup("Asset")}}),e.struct("CreateContractArgs",[["contractIdPreimage",e.lookup("ContractIdPreimage")],["executable",e.lookup("ContractExecutable")]]),e.struct("CreateContractArgsV2",[["contractIdPreimage",e.lookup("ContractIdPreimage")],["executable",e.lookup("ContractExecutable")],["constructorArgs",e.varArray(e.lookup("ScVal"),2147483647)]]),e.struct("InvokeContractArgs",[["contractAddress",e.lookup("ScAddress")],["functionName",e.lookup("ScSymbol")],["args",e.varArray(e.lookup("ScVal"),2147483647)]]),e.union("HostFunction",{switchOn:e.lookup("HostFunctionType"),switchName:"type",switches:[["hostFunctionTypeInvokeContract","invokeContract"],["hostFunctionTypeCreateContract","createContract"],["hostFunctionTypeUploadContractWasm","wasm"],["hostFunctionTypeCreateContractV2","createContractV2"]],arms:{invokeContract:e.lookup("InvokeContractArgs"),createContract:e.lookup("CreateContractArgs"),wasm:e.varOpaque(),createContractV2:e.lookup("CreateContractArgsV2")}}),e.enum("SorobanAuthorizedFunctionType",{sorobanAuthorizedFunctionTypeContractFn:0,sorobanAuthorizedFunctionTypeCreateContractHostFn:1,sorobanAuthorizedFunctionTypeCreateContractV2HostFn:2}),e.union("SorobanAuthorizedFunction",{switchOn:e.lookup("SorobanAuthorizedFunctionType"),switchName:"type",switches:[["sorobanAuthorizedFunctionTypeContractFn","contractFn"],["sorobanAuthorizedFunctionTypeCreateContractHostFn","createContractHostFn"],["sorobanAuthorizedFunctionTypeCreateContractV2HostFn","createContractV2HostFn"]],arms:{contractFn:e.lookup("InvokeContractArgs"),createContractHostFn:e.lookup("CreateContractArgs"),createContractV2HostFn:e.lookup("CreateContractArgsV2")}}),e.struct("SorobanAuthorizedInvocation",[["function",e.lookup("SorobanAuthorizedFunction")],["subInvocations",e.varArray(e.lookup("SorobanAuthorizedInvocation"),2147483647)]]),e.struct("SorobanAddressCredentials",[["address",e.lookup("ScAddress")],["nonce",e.lookup("Int64")],["signatureExpirationLedger",e.lookup("Uint32")],["signature",e.lookup("ScVal")]]),e.enum("SorobanCredentialsType",{sorobanCredentialsSourceAccount:0,sorobanCredentialsAddress:1}),e.union("SorobanCredentials",{switchOn:e.lookup("SorobanCredentialsType"),switchName:"type",switches:[["sorobanCredentialsSourceAccount",e.void()],["sorobanCredentialsAddress","address"]],arms:{address:e.lookup("SorobanAddressCredentials")}}),e.struct("SorobanAuthorizationEntry",[["credentials",e.lookup("SorobanCredentials")],["rootInvocation",e.lookup("SorobanAuthorizedInvocation")]]),e.struct("InvokeHostFunctionOp",[["hostFunction",e.lookup("HostFunction")],["auth",e.varArray(e.lookup("SorobanAuthorizationEntry"),2147483647)]]),e.struct("ExtendFootprintTtlOp",[["ext",e.lookup("ExtensionPoint")],["extendTo",e.lookup("Uint32")]]),e.struct("RestoreFootprintOp",[["ext",e.lookup("ExtensionPoint")]]),e.union("OperationBody",{switchOn:e.lookup("OperationType"),switchName:"type",switches:[["createAccount","createAccountOp"],["payment","paymentOp"],["pathPaymentStrictReceive","pathPaymentStrictReceiveOp"],["manageSellOffer","manageSellOfferOp"],["createPassiveSellOffer","createPassiveSellOfferOp"],["setOptions","setOptionsOp"],["changeTrust","changeTrustOp"],["allowTrust","allowTrustOp"],["accountMerge","destination"],["inflation",e.void()],["manageData","manageDataOp"],["bumpSequence","bumpSequenceOp"],["manageBuyOffer","manageBuyOfferOp"],["pathPaymentStrictSend","pathPaymentStrictSendOp"],["createClaimableBalance","createClaimableBalanceOp"],["claimClaimableBalance","claimClaimableBalanceOp"],["beginSponsoringFutureReserves","beginSponsoringFutureReservesOp"],["endSponsoringFutureReserves",e.void()],["revokeSponsorship","revokeSponsorshipOp"],["clawback","clawbackOp"],["clawbackClaimableBalance","clawbackClaimableBalanceOp"],["setTrustLineFlags","setTrustLineFlagsOp"],["liquidityPoolDeposit","liquidityPoolDepositOp"],["liquidityPoolWithdraw","liquidityPoolWithdrawOp"],["invokeHostFunction","invokeHostFunctionOp"],["extendFootprintTtl","extendFootprintTtlOp"],["restoreFootprint","restoreFootprintOp"]],arms:{createAccountOp:e.lookup("CreateAccountOp"),paymentOp:e.lookup("PaymentOp"),pathPaymentStrictReceiveOp:e.lookup("PathPaymentStrictReceiveOp"),manageSellOfferOp:e.lookup("ManageSellOfferOp"),createPassiveSellOfferOp:e.lookup("CreatePassiveSellOfferOp"),setOptionsOp:e.lookup("SetOptionsOp"),changeTrustOp:e.lookup("ChangeTrustOp"),allowTrustOp:e.lookup("AllowTrustOp"),destination:e.lookup("MuxedAccount"),manageDataOp:e.lookup("ManageDataOp"),bumpSequenceOp:e.lookup("BumpSequenceOp"),manageBuyOfferOp:e.lookup("ManageBuyOfferOp"),pathPaymentStrictSendOp:e.lookup("PathPaymentStrictSendOp"),createClaimableBalanceOp:e.lookup("CreateClaimableBalanceOp"),claimClaimableBalanceOp:e.lookup("ClaimClaimableBalanceOp"),beginSponsoringFutureReservesOp:e.lookup("BeginSponsoringFutureReservesOp"),revokeSponsorshipOp:e.lookup("RevokeSponsorshipOp"),clawbackOp:e.lookup("ClawbackOp"),clawbackClaimableBalanceOp:e.lookup("ClawbackClaimableBalanceOp"),setTrustLineFlagsOp:e.lookup("SetTrustLineFlagsOp"),liquidityPoolDepositOp:e.lookup("LiquidityPoolDepositOp"),liquidityPoolWithdrawOp:e.lookup("LiquidityPoolWithdrawOp"),invokeHostFunctionOp:e.lookup("InvokeHostFunctionOp"),extendFootprintTtlOp:e.lookup("ExtendFootprintTtlOp"),restoreFootprintOp:e.lookup("RestoreFootprintOp")}}),e.struct("Operation",[["sourceAccount",e.option(e.lookup("MuxedAccount"))],["body",e.lookup("OperationBody")]]),e.struct("HashIdPreimageOperationId",[["sourceAccount",e.lookup("AccountId")],["seqNum",e.lookup("SequenceNumber")],["opNum",e.lookup("Uint32")]]),e.struct("HashIdPreimageRevokeId",[["sourceAccount",e.lookup("AccountId")],["seqNum",e.lookup("SequenceNumber")],["opNum",e.lookup("Uint32")],["liquidityPoolId",e.lookup("PoolId")],["asset",e.lookup("Asset")]]),e.struct("HashIdPreimageContractId",[["networkId",e.lookup("Hash")],["contractIdPreimage",e.lookup("ContractIdPreimage")]]),e.struct("HashIdPreimageSorobanAuthorization",[["networkId",e.lookup("Hash")],["nonce",e.lookup("Int64")],["signatureExpirationLedger",e.lookup("Uint32")],["invocation",e.lookup("SorobanAuthorizedInvocation")]]),e.union("HashIdPreimage",{switchOn:e.lookup("EnvelopeType"),switchName:"type",switches:[["envelopeTypeOpId","operationId"],["envelopeTypePoolRevokeOpId","revokeId"],["envelopeTypeContractId","contractId"],["envelopeTypeSorobanAuthorization","sorobanAuthorization"]],arms:{operationId:e.lookup("HashIdPreimageOperationId"),revokeId:e.lookup("HashIdPreimageRevokeId"),contractId:e.lookup("HashIdPreimageContractId"),sorobanAuthorization:e.lookup("HashIdPreimageSorobanAuthorization")}}),e.enum("MemoType",{memoNone:0,memoText:1,memoId:2,memoHash:3,memoReturn:4}),e.union("Memo",{switchOn:e.lookup("MemoType"),switchName:"type",switches:[["memoNone",e.void()],["memoText","text"],["memoId","id"],["memoHash","hash"],["memoReturn","retHash"]],arms:{text:e.string(28),id:e.lookup("Uint64"),hash:e.lookup("Hash"),retHash:e.lookup("Hash")}}),e.struct("TimeBounds",[["minTime",e.lookup("TimePoint")],["maxTime",e.lookup("TimePoint")]]),e.struct("LedgerBounds",[["minLedger",e.lookup("Uint32")],["maxLedger",e.lookup("Uint32")]]),e.struct("PreconditionsV2",[["timeBounds",e.option(e.lookup("TimeBounds"))],["ledgerBounds",e.option(e.lookup("LedgerBounds"))],["minSeqNum",e.option(e.lookup("SequenceNumber"))],["minSeqAge",e.lookup("Duration")],["minSeqLedgerGap",e.lookup("Uint32")],["extraSigners",e.varArray(e.lookup("SignerKey"),2)]]),e.enum("PreconditionType",{precondNone:0,precondTime:1,precondV2:2}),e.union("Preconditions",{switchOn:e.lookup("PreconditionType"),switchName:"type",switches:[["precondNone",e.void()],["precondTime","timeBounds"],["precondV2","v2"]],arms:{timeBounds:e.lookup("TimeBounds"),v2:e.lookup("PreconditionsV2")}}),e.struct("LedgerFootprint",[["readOnly",e.varArray(e.lookup("LedgerKey"),2147483647)],["readWrite",e.varArray(e.lookup("LedgerKey"),2147483647)]]),e.enum("ArchivalProofType",{existence:0,nonexistence:1}),e.struct("ArchivalProofNode",[["index",e.lookup("Uint32")],["hash",e.lookup("Hash")]]),e.typedef("ProofLevel",e.varArray(e.lookup("ArchivalProofNode"),2147483647)),e.struct("NonexistenceProofBody",[["entriesToProve",e.varArray(e.lookup("ColdArchiveBucketEntry"),2147483647)],["proofLevels",e.varArray(e.lookup("ProofLevel"),2147483647)]]),e.struct("ExistenceProofBody",[["keysToProve",e.varArray(e.lookup("LedgerKey"),2147483647)],["lowBoundEntries",e.varArray(e.lookup("ColdArchiveBucketEntry"),2147483647)],["highBoundEntries",e.varArray(e.lookup("ColdArchiveBucketEntry"),2147483647)],["proofLevels",e.varArray(e.lookup("ProofLevel"),2147483647)]]),e.union("ArchivalProofBody",{switchOn:e.lookup("ArchivalProofType"),switchName:"t",switches:[["existence","nonexistenceProof"],["nonexistence","existenceProof"]],arms:{nonexistenceProof:e.lookup("NonexistenceProofBody"),existenceProof:e.lookup("ExistenceProofBody")}}),e.struct("ArchivalProof",[["epoch",e.lookup("Uint32")],["body",e.lookup("ArchivalProofBody")]]),e.struct("SorobanResources",[["footprint",e.lookup("LedgerFootprint")],["instructions",e.lookup("Uint32")],["readBytes",e.lookup("Uint32")],["writeBytes",e.lookup("Uint32")]]),e.struct("SorobanTransactionData",[["ext",e.lookup("ExtensionPoint")],["resources",e.lookup("SorobanResources")],["resourceFee",e.lookup("Int64")]]),e.union("TransactionV0Ext",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("TransactionV0",[["sourceAccountEd25519",e.lookup("Uint256")],["fee",e.lookup("Uint32")],["seqNum",e.lookup("SequenceNumber")],["timeBounds",e.option(e.lookup("TimeBounds"))],["memo",e.lookup("Memo")],["operations",e.varArray(e.lookup("Operation"),e.lookup("MAX_OPS_PER_TX"))],["ext",e.lookup("TransactionV0Ext")]]),e.struct("TransactionV0Envelope",[["tx",e.lookup("TransactionV0")],["signatures",e.varArray(e.lookup("DecoratedSignature"),20)]]),e.union("TransactionExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()],[1,"sorobanData"]],arms:{sorobanData:e.lookup("SorobanTransactionData")}}),e.struct("Transaction",[["sourceAccount",e.lookup("MuxedAccount")],["fee",e.lookup("Uint32")],["seqNum",e.lookup("SequenceNumber")],["cond",e.lookup("Preconditions")],["memo",e.lookup("Memo")],["operations",e.varArray(e.lookup("Operation"),e.lookup("MAX_OPS_PER_TX"))],["ext",e.lookup("TransactionExt")]]),e.struct("TransactionV1Envelope",[["tx",e.lookup("Transaction")],["signatures",e.varArray(e.lookup("DecoratedSignature"),20)]]),e.union("FeeBumpTransactionInnerTx",{switchOn:e.lookup("EnvelopeType"),switchName:"type",switches:[["envelopeTypeTx","v1"]],arms:{v1:e.lookup("TransactionV1Envelope")}}),e.union("FeeBumpTransactionExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("FeeBumpTransaction",[["feeSource",e.lookup("MuxedAccount")],["fee",e.lookup("Int64")],["innerTx",e.lookup("FeeBumpTransactionInnerTx")],["ext",e.lookup("FeeBumpTransactionExt")]]),e.struct("FeeBumpTransactionEnvelope",[["tx",e.lookup("FeeBumpTransaction")],["signatures",e.varArray(e.lookup("DecoratedSignature"),20)]]),e.union("TransactionEnvelope",{switchOn:e.lookup("EnvelopeType"),switchName:"type",switches:[["envelopeTypeTxV0","v0"],["envelopeTypeTx","v1"],["envelopeTypeTxFeeBump","feeBump"]],arms:{v0:e.lookup("TransactionV0Envelope"),v1:e.lookup("TransactionV1Envelope"),feeBump:e.lookup("FeeBumpTransactionEnvelope")}}),e.union("TransactionSignaturePayloadTaggedTransaction",{switchOn:e.lookup("EnvelopeType"),switchName:"type",switches:[["envelopeTypeTx","tx"],["envelopeTypeTxFeeBump","feeBump"]],arms:{tx:e.lookup("Transaction"),feeBump:e.lookup("FeeBumpTransaction")}}),e.struct("TransactionSignaturePayload",[["networkId",e.lookup("Hash")],["taggedTransaction",e.lookup("TransactionSignaturePayloadTaggedTransaction")]]),e.enum("ClaimAtomType",{claimAtomTypeV0:0,claimAtomTypeOrderBook:1,claimAtomTypeLiquidityPool:2}),e.struct("ClaimOfferAtomV0",[["sellerEd25519",e.lookup("Uint256")],["offerId",e.lookup("Int64")],["assetSold",e.lookup("Asset")],["amountSold",e.lookup("Int64")],["assetBought",e.lookup("Asset")],["amountBought",e.lookup("Int64")]]),e.struct("ClaimOfferAtom",[["sellerId",e.lookup("AccountId")],["offerId",e.lookup("Int64")],["assetSold",e.lookup("Asset")],["amountSold",e.lookup("Int64")],["assetBought",e.lookup("Asset")],["amountBought",e.lookup("Int64")]]),e.struct("ClaimLiquidityAtom",[["liquidityPoolId",e.lookup("PoolId")],["assetSold",e.lookup("Asset")],["amountSold",e.lookup("Int64")],["assetBought",e.lookup("Asset")],["amountBought",e.lookup("Int64")]]),e.union("ClaimAtom",{switchOn:e.lookup("ClaimAtomType"),switchName:"type",switches:[["claimAtomTypeV0","v0"],["claimAtomTypeOrderBook","orderBook"],["claimAtomTypeLiquidityPool","liquidityPool"]],arms:{v0:e.lookup("ClaimOfferAtomV0"),orderBook:e.lookup("ClaimOfferAtom"),liquidityPool:e.lookup("ClaimLiquidityAtom")}}),e.enum("CreateAccountResultCode",{createAccountSuccess:0,createAccountMalformed:-1,createAccountUnderfunded:-2,createAccountLowReserve:-3,createAccountAlreadyExist:-4}),e.union("CreateAccountResult",{switchOn:e.lookup("CreateAccountResultCode"),switchName:"code",switches:[["createAccountSuccess",e.void()],["createAccountMalformed",e.void()],["createAccountUnderfunded",e.void()],["createAccountLowReserve",e.void()],["createAccountAlreadyExist",e.void()]],arms:{}}),e.enum("PaymentResultCode",{paymentSuccess:0,paymentMalformed:-1,paymentUnderfunded:-2,paymentSrcNoTrust:-3,paymentSrcNotAuthorized:-4,paymentNoDestination:-5,paymentNoTrust:-6,paymentNotAuthorized:-7,paymentLineFull:-8,paymentNoIssuer:-9}),e.union("PaymentResult",{switchOn:e.lookup("PaymentResultCode"),switchName:"code",switches:[["paymentSuccess",e.void()],["paymentMalformed",e.void()],["paymentUnderfunded",e.void()],["paymentSrcNoTrust",e.void()],["paymentSrcNotAuthorized",e.void()],["paymentNoDestination",e.void()],["paymentNoTrust",e.void()],["paymentNotAuthorized",e.void()],["paymentLineFull",e.void()],["paymentNoIssuer",e.void()]],arms:{}}),e.enum("PathPaymentStrictReceiveResultCode",{pathPaymentStrictReceiveSuccess:0,pathPaymentStrictReceiveMalformed:-1,pathPaymentStrictReceiveUnderfunded:-2,pathPaymentStrictReceiveSrcNoTrust:-3,pathPaymentStrictReceiveSrcNotAuthorized:-4,pathPaymentStrictReceiveNoDestination:-5,pathPaymentStrictReceiveNoTrust:-6,pathPaymentStrictReceiveNotAuthorized:-7,pathPaymentStrictReceiveLineFull:-8,pathPaymentStrictReceiveNoIssuer:-9,pathPaymentStrictReceiveTooFewOffers:-10,pathPaymentStrictReceiveOfferCrossSelf:-11,pathPaymentStrictReceiveOverSendmax:-12}),e.struct("SimplePaymentResult",[["destination",e.lookup("AccountId")],["asset",e.lookup("Asset")],["amount",e.lookup("Int64")]]),e.struct("PathPaymentStrictReceiveResultSuccess",[["offers",e.varArray(e.lookup("ClaimAtom"),2147483647)],["last",e.lookup("SimplePaymentResult")]]),e.union("PathPaymentStrictReceiveResult",{switchOn:e.lookup("PathPaymentStrictReceiveResultCode"),switchName:"code",switches:[["pathPaymentStrictReceiveSuccess","success"],["pathPaymentStrictReceiveMalformed",e.void()],["pathPaymentStrictReceiveUnderfunded",e.void()],["pathPaymentStrictReceiveSrcNoTrust",e.void()],["pathPaymentStrictReceiveSrcNotAuthorized",e.void()],["pathPaymentStrictReceiveNoDestination",e.void()],["pathPaymentStrictReceiveNoTrust",e.void()],["pathPaymentStrictReceiveNotAuthorized",e.void()],["pathPaymentStrictReceiveLineFull",e.void()],["pathPaymentStrictReceiveNoIssuer","noIssuer"],["pathPaymentStrictReceiveTooFewOffers",e.void()],["pathPaymentStrictReceiveOfferCrossSelf",e.void()],["pathPaymentStrictReceiveOverSendmax",e.void()]],arms:{success:e.lookup("PathPaymentStrictReceiveResultSuccess"),noIssuer:e.lookup("Asset")}}),e.enum("PathPaymentStrictSendResultCode",{pathPaymentStrictSendSuccess:0,pathPaymentStrictSendMalformed:-1,pathPaymentStrictSendUnderfunded:-2,pathPaymentStrictSendSrcNoTrust:-3,pathPaymentStrictSendSrcNotAuthorized:-4,pathPaymentStrictSendNoDestination:-5,pathPaymentStrictSendNoTrust:-6,pathPaymentStrictSendNotAuthorized:-7,pathPaymentStrictSendLineFull:-8,pathPaymentStrictSendNoIssuer:-9,pathPaymentStrictSendTooFewOffers:-10,pathPaymentStrictSendOfferCrossSelf:-11,pathPaymentStrictSendUnderDestmin:-12}),e.struct("PathPaymentStrictSendResultSuccess",[["offers",e.varArray(e.lookup("ClaimAtom"),2147483647)],["last",e.lookup("SimplePaymentResult")]]),e.union("PathPaymentStrictSendResult",{switchOn:e.lookup("PathPaymentStrictSendResultCode"),switchName:"code",switches:[["pathPaymentStrictSendSuccess","success"],["pathPaymentStrictSendMalformed",e.void()],["pathPaymentStrictSendUnderfunded",e.void()],["pathPaymentStrictSendSrcNoTrust",e.void()],["pathPaymentStrictSendSrcNotAuthorized",e.void()],["pathPaymentStrictSendNoDestination",e.void()],["pathPaymentStrictSendNoTrust",e.void()],["pathPaymentStrictSendNotAuthorized",e.void()],["pathPaymentStrictSendLineFull",e.void()],["pathPaymentStrictSendNoIssuer","noIssuer"],["pathPaymentStrictSendTooFewOffers",e.void()],["pathPaymentStrictSendOfferCrossSelf",e.void()],["pathPaymentStrictSendUnderDestmin",e.void()]],arms:{success:e.lookup("PathPaymentStrictSendResultSuccess"),noIssuer:e.lookup("Asset")}}),e.enum("ManageSellOfferResultCode",{manageSellOfferSuccess:0,manageSellOfferMalformed:-1,manageSellOfferSellNoTrust:-2,manageSellOfferBuyNoTrust:-3,manageSellOfferSellNotAuthorized:-4,manageSellOfferBuyNotAuthorized:-5,manageSellOfferLineFull:-6,manageSellOfferUnderfunded:-7,manageSellOfferCrossSelf:-8,manageSellOfferSellNoIssuer:-9,manageSellOfferBuyNoIssuer:-10,manageSellOfferNotFound:-11,manageSellOfferLowReserve:-12}),e.enum("ManageOfferEffect",{manageOfferCreated:0,manageOfferUpdated:1,manageOfferDeleted:2}),e.union("ManageOfferSuccessResultOffer",{switchOn:e.lookup("ManageOfferEffect"),switchName:"effect",switches:[["manageOfferCreated","offer"],["manageOfferUpdated","offer"],["manageOfferDeleted",e.void()]],arms:{offer:e.lookup("OfferEntry")}}),e.struct("ManageOfferSuccessResult",[["offersClaimed",e.varArray(e.lookup("ClaimAtom"),2147483647)],["offer",e.lookup("ManageOfferSuccessResultOffer")]]),e.union("ManageSellOfferResult",{switchOn:e.lookup("ManageSellOfferResultCode"),switchName:"code",switches:[["manageSellOfferSuccess","success"],["manageSellOfferMalformed",e.void()],["manageSellOfferSellNoTrust",e.void()],["manageSellOfferBuyNoTrust",e.void()],["manageSellOfferSellNotAuthorized",e.void()],["manageSellOfferBuyNotAuthorized",e.void()],["manageSellOfferLineFull",e.void()],["manageSellOfferUnderfunded",e.void()],["manageSellOfferCrossSelf",e.void()],["manageSellOfferSellNoIssuer",e.void()],["manageSellOfferBuyNoIssuer",e.void()],["manageSellOfferNotFound",e.void()],["manageSellOfferLowReserve",e.void()]],arms:{success:e.lookup("ManageOfferSuccessResult")}}),e.enum("ManageBuyOfferResultCode",{manageBuyOfferSuccess:0,manageBuyOfferMalformed:-1,manageBuyOfferSellNoTrust:-2,manageBuyOfferBuyNoTrust:-3,manageBuyOfferSellNotAuthorized:-4,manageBuyOfferBuyNotAuthorized:-5,manageBuyOfferLineFull:-6,manageBuyOfferUnderfunded:-7,manageBuyOfferCrossSelf:-8,manageBuyOfferSellNoIssuer:-9,manageBuyOfferBuyNoIssuer:-10,manageBuyOfferNotFound:-11,manageBuyOfferLowReserve:-12}),e.union("ManageBuyOfferResult",{switchOn:e.lookup("ManageBuyOfferResultCode"),switchName:"code",switches:[["manageBuyOfferSuccess","success"],["manageBuyOfferMalformed",e.void()],["manageBuyOfferSellNoTrust",e.void()],["manageBuyOfferBuyNoTrust",e.void()],["manageBuyOfferSellNotAuthorized",e.void()],["manageBuyOfferBuyNotAuthorized",e.void()],["manageBuyOfferLineFull",e.void()],["manageBuyOfferUnderfunded",e.void()],["manageBuyOfferCrossSelf",e.void()],["manageBuyOfferSellNoIssuer",e.void()],["manageBuyOfferBuyNoIssuer",e.void()],["manageBuyOfferNotFound",e.void()],["manageBuyOfferLowReserve",e.void()]],arms:{success:e.lookup("ManageOfferSuccessResult")}}),e.enum("SetOptionsResultCode",{setOptionsSuccess:0,setOptionsLowReserve:-1,setOptionsTooManySigners:-2,setOptionsBadFlags:-3,setOptionsInvalidInflation:-4,setOptionsCantChange:-5,setOptionsUnknownFlag:-6,setOptionsThresholdOutOfRange:-7,setOptionsBadSigner:-8,setOptionsInvalidHomeDomain:-9,setOptionsAuthRevocableRequired:-10}),e.union("SetOptionsResult",{switchOn:e.lookup("SetOptionsResultCode"),switchName:"code",switches:[["setOptionsSuccess",e.void()],["setOptionsLowReserve",e.void()],["setOptionsTooManySigners",e.void()],["setOptionsBadFlags",e.void()],["setOptionsInvalidInflation",e.void()],["setOptionsCantChange",e.void()],["setOptionsUnknownFlag",e.void()],["setOptionsThresholdOutOfRange",e.void()],["setOptionsBadSigner",e.void()],["setOptionsInvalidHomeDomain",e.void()],["setOptionsAuthRevocableRequired",e.void()]],arms:{}}),e.enum("ChangeTrustResultCode",{changeTrustSuccess:0,changeTrustMalformed:-1,changeTrustNoIssuer:-2,changeTrustInvalidLimit:-3,changeTrustLowReserve:-4,changeTrustSelfNotAllowed:-5,changeTrustTrustLineMissing:-6,changeTrustCannotDelete:-7,changeTrustNotAuthMaintainLiabilities:-8}),e.union("ChangeTrustResult",{switchOn:e.lookup("ChangeTrustResultCode"),switchName:"code",switches:[["changeTrustSuccess",e.void()],["changeTrustMalformed",e.void()],["changeTrustNoIssuer",e.void()],["changeTrustInvalidLimit",e.void()],["changeTrustLowReserve",e.void()],["changeTrustSelfNotAllowed",e.void()],["changeTrustTrustLineMissing",e.void()],["changeTrustCannotDelete",e.void()],["changeTrustNotAuthMaintainLiabilities",e.void()]],arms:{}}),e.enum("AllowTrustResultCode",{allowTrustSuccess:0,allowTrustMalformed:-1,allowTrustNoTrustLine:-2,allowTrustTrustNotRequired:-3,allowTrustCantRevoke:-4,allowTrustSelfNotAllowed:-5,allowTrustLowReserve:-6}),e.union("AllowTrustResult",{switchOn:e.lookup("AllowTrustResultCode"),switchName:"code",switches:[["allowTrustSuccess",e.void()],["allowTrustMalformed",e.void()],["allowTrustNoTrustLine",e.void()],["allowTrustTrustNotRequired",e.void()],["allowTrustCantRevoke",e.void()],["allowTrustSelfNotAllowed",e.void()],["allowTrustLowReserve",e.void()]],arms:{}}),e.enum("AccountMergeResultCode",{accountMergeSuccess:0,accountMergeMalformed:-1,accountMergeNoAccount:-2,accountMergeImmutableSet:-3,accountMergeHasSubEntries:-4,accountMergeSeqnumTooFar:-5,accountMergeDestFull:-6,accountMergeIsSponsor:-7}),e.union("AccountMergeResult",{switchOn:e.lookup("AccountMergeResultCode"),switchName:"code",switches:[["accountMergeSuccess","sourceAccountBalance"],["accountMergeMalformed",e.void()],["accountMergeNoAccount",e.void()],["accountMergeImmutableSet",e.void()],["accountMergeHasSubEntries",e.void()],["accountMergeSeqnumTooFar",e.void()],["accountMergeDestFull",e.void()],["accountMergeIsSponsor",e.void()]],arms:{sourceAccountBalance:e.lookup("Int64")}}),e.enum("InflationResultCode",{inflationSuccess:0,inflationNotTime:-1}),e.struct("InflationPayout",[["destination",e.lookup("AccountId")],["amount",e.lookup("Int64")]]),e.union("InflationResult",{switchOn:e.lookup("InflationResultCode"),switchName:"code",switches:[["inflationSuccess","payouts"],["inflationNotTime",e.void()]],arms:{payouts:e.varArray(e.lookup("InflationPayout"),2147483647)}}),e.enum("ManageDataResultCode",{manageDataSuccess:0,manageDataNotSupportedYet:-1,manageDataNameNotFound:-2,manageDataLowReserve:-3,manageDataInvalidName:-4}),e.union("ManageDataResult",{switchOn:e.lookup("ManageDataResultCode"),switchName:"code",switches:[["manageDataSuccess",e.void()],["manageDataNotSupportedYet",e.void()],["manageDataNameNotFound",e.void()],["manageDataLowReserve",e.void()],["manageDataInvalidName",e.void()]],arms:{}}),e.enum("BumpSequenceResultCode",{bumpSequenceSuccess:0,bumpSequenceBadSeq:-1}),e.union("BumpSequenceResult",{switchOn:e.lookup("BumpSequenceResultCode"),switchName:"code",switches:[["bumpSequenceSuccess",e.void()],["bumpSequenceBadSeq",e.void()]],arms:{}}),e.enum("CreateClaimableBalanceResultCode",{createClaimableBalanceSuccess:0,createClaimableBalanceMalformed:-1,createClaimableBalanceLowReserve:-2,createClaimableBalanceNoTrust:-3,createClaimableBalanceNotAuthorized:-4,createClaimableBalanceUnderfunded:-5}),e.union("CreateClaimableBalanceResult",{switchOn:e.lookup("CreateClaimableBalanceResultCode"),switchName:"code",switches:[["createClaimableBalanceSuccess","balanceId"],["createClaimableBalanceMalformed",e.void()],["createClaimableBalanceLowReserve",e.void()],["createClaimableBalanceNoTrust",e.void()],["createClaimableBalanceNotAuthorized",e.void()],["createClaimableBalanceUnderfunded",e.void()]],arms:{balanceId:e.lookup("ClaimableBalanceId")}}),e.enum("ClaimClaimableBalanceResultCode",{claimClaimableBalanceSuccess:0,claimClaimableBalanceDoesNotExist:-1,claimClaimableBalanceCannotClaim:-2,claimClaimableBalanceLineFull:-3,claimClaimableBalanceNoTrust:-4,claimClaimableBalanceNotAuthorized:-5}),e.union("ClaimClaimableBalanceResult",{switchOn:e.lookup("ClaimClaimableBalanceResultCode"),switchName:"code",switches:[["claimClaimableBalanceSuccess",e.void()],["claimClaimableBalanceDoesNotExist",e.void()],["claimClaimableBalanceCannotClaim",e.void()],["claimClaimableBalanceLineFull",e.void()],["claimClaimableBalanceNoTrust",e.void()],["claimClaimableBalanceNotAuthorized",e.void()]],arms:{}}),e.enum("BeginSponsoringFutureReservesResultCode",{beginSponsoringFutureReservesSuccess:0,beginSponsoringFutureReservesMalformed:-1,beginSponsoringFutureReservesAlreadySponsored:-2,beginSponsoringFutureReservesRecursive:-3}),e.union("BeginSponsoringFutureReservesResult",{switchOn:e.lookup("BeginSponsoringFutureReservesResultCode"),switchName:"code",switches:[["beginSponsoringFutureReservesSuccess",e.void()],["beginSponsoringFutureReservesMalformed",e.void()],["beginSponsoringFutureReservesAlreadySponsored",e.void()],["beginSponsoringFutureReservesRecursive",e.void()]],arms:{}}),e.enum("EndSponsoringFutureReservesResultCode",{endSponsoringFutureReservesSuccess:0,endSponsoringFutureReservesNotSponsored:-1}),e.union("EndSponsoringFutureReservesResult",{switchOn:e.lookup("EndSponsoringFutureReservesResultCode"),switchName:"code",switches:[["endSponsoringFutureReservesSuccess",e.void()],["endSponsoringFutureReservesNotSponsored",e.void()]],arms:{}}),e.enum("RevokeSponsorshipResultCode",{revokeSponsorshipSuccess:0,revokeSponsorshipDoesNotExist:-1,revokeSponsorshipNotSponsor:-2,revokeSponsorshipLowReserve:-3,revokeSponsorshipOnlyTransferable:-4,revokeSponsorshipMalformed:-5}),e.union("RevokeSponsorshipResult",{switchOn:e.lookup("RevokeSponsorshipResultCode"),switchName:"code",switches:[["revokeSponsorshipSuccess",e.void()],["revokeSponsorshipDoesNotExist",e.void()],["revokeSponsorshipNotSponsor",e.void()],["revokeSponsorshipLowReserve",e.void()],["revokeSponsorshipOnlyTransferable",e.void()],["revokeSponsorshipMalformed",e.void()]],arms:{}}),e.enum("ClawbackResultCode",{clawbackSuccess:0,clawbackMalformed:-1,clawbackNotClawbackEnabled:-2,clawbackNoTrust:-3,clawbackUnderfunded:-4}),e.union("ClawbackResult",{switchOn:e.lookup("ClawbackResultCode"),switchName:"code",switches:[["clawbackSuccess",e.void()],["clawbackMalformed",e.void()],["clawbackNotClawbackEnabled",e.void()],["clawbackNoTrust",e.void()],["clawbackUnderfunded",e.void()]],arms:{}}),e.enum("ClawbackClaimableBalanceResultCode",{clawbackClaimableBalanceSuccess:0,clawbackClaimableBalanceDoesNotExist:-1,clawbackClaimableBalanceNotIssuer:-2,clawbackClaimableBalanceNotClawbackEnabled:-3}),e.union("ClawbackClaimableBalanceResult",{switchOn:e.lookup("ClawbackClaimableBalanceResultCode"),switchName:"code",switches:[["clawbackClaimableBalanceSuccess",e.void()],["clawbackClaimableBalanceDoesNotExist",e.void()],["clawbackClaimableBalanceNotIssuer",e.void()],["clawbackClaimableBalanceNotClawbackEnabled",e.void()]],arms:{}}),e.enum("SetTrustLineFlagsResultCode",{setTrustLineFlagsSuccess:0,setTrustLineFlagsMalformed:-1,setTrustLineFlagsNoTrustLine:-2,setTrustLineFlagsCantRevoke:-3,setTrustLineFlagsInvalidState:-4,setTrustLineFlagsLowReserve:-5}),e.union("SetTrustLineFlagsResult",{switchOn:e.lookup("SetTrustLineFlagsResultCode"),switchName:"code",switches:[["setTrustLineFlagsSuccess",e.void()],["setTrustLineFlagsMalformed",e.void()],["setTrustLineFlagsNoTrustLine",e.void()],["setTrustLineFlagsCantRevoke",e.void()],["setTrustLineFlagsInvalidState",e.void()],["setTrustLineFlagsLowReserve",e.void()]],arms:{}}),e.enum("LiquidityPoolDepositResultCode",{liquidityPoolDepositSuccess:0,liquidityPoolDepositMalformed:-1,liquidityPoolDepositNoTrust:-2,liquidityPoolDepositNotAuthorized:-3,liquidityPoolDepositUnderfunded:-4,liquidityPoolDepositLineFull:-5,liquidityPoolDepositBadPrice:-6,liquidityPoolDepositPoolFull:-7}),e.union("LiquidityPoolDepositResult",{switchOn:e.lookup("LiquidityPoolDepositResultCode"),switchName:"code",switches:[["liquidityPoolDepositSuccess",e.void()],["liquidityPoolDepositMalformed",e.void()],["liquidityPoolDepositNoTrust",e.void()],["liquidityPoolDepositNotAuthorized",e.void()],["liquidityPoolDepositUnderfunded",e.void()],["liquidityPoolDepositLineFull",e.void()],["liquidityPoolDepositBadPrice",e.void()],["liquidityPoolDepositPoolFull",e.void()]],arms:{}}),e.enum("LiquidityPoolWithdrawResultCode",{liquidityPoolWithdrawSuccess:0,liquidityPoolWithdrawMalformed:-1,liquidityPoolWithdrawNoTrust:-2,liquidityPoolWithdrawUnderfunded:-3,liquidityPoolWithdrawLineFull:-4,liquidityPoolWithdrawUnderMinimum:-5}),e.union("LiquidityPoolWithdrawResult",{switchOn:e.lookup("LiquidityPoolWithdrawResultCode"),switchName:"code",switches:[["liquidityPoolWithdrawSuccess",e.void()],["liquidityPoolWithdrawMalformed",e.void()],["liquidityPoolWithdrawNoTrust",e.void()],["liquidityPoolWithdrawUnderfunded",e.void()],["liquidityPoolWithdrawLineFull",e.void()],["liquidityPoolWithdrawUnderMinimum",e.void()]],arms:{}}),e.enum("InvokeHostFunctionResultCode",{invokeHostFunctionSuccess:0,invokeHostFunctionMalformed:-1,invokeHostFunctionTrapped:-2,invokeHostFunctionResourceLimitExceeded:-3,invokeHostFunctionEntryArchived:-4,invokeHostFunctionInsufficientRefundableFee:-5}),e.union("InvokeHostFunctionResult",{switchOn:e.lookup("InvokeHostFunctionResultCode"),switchName:"code",switches:[["invokeHostFunctionSuccess","success"],["invokeHostFunctionMalformed",e.void()],["invokeHostFunctionTrapped",e.void()],["invokeHostFunctionResourceLimitExceeded",e.void()],["invokeHostFunctionEntryArchived",e.void()],["invokeHostFunctionInsufficientRefundableFee",e.void()]],arms:{success:e.lookup("Hash")}}),e.enum("ExtendFootprintTtlResultCode",{extendFootprintTtlSuccess:0,extendFootprintTtlMalformed:-1,extendFootprintTtlResourceLimitExceeded:-2,extendFootprintTtlInsufficientRefundableFee:-3}),e.union("ExtendFootprintTtlResult",{switchOn:e.lookup("ExtendFootprintTtlResultCode"),switchName:"code",switches:[["extendFootprintTtlSuccess",e.void()],["extendFootprintTtlMalformed",e.void()],["extendFootprintTtlResourceLimitExceeded",e.void()],["extendFootprintTtlInsufficientRefundableFee",e.void()]],arms:{}}),e.enum("RestoreFootprintResultCode",{restoreFootprintSuccess:0,restoreFootprintMalformed:-1,restoreFootprintResourceLimitExceeded:-2,restoreFootprintInsufficientRefundableFee:-3}),e.union("RestoreFootprintResult",{switchOn:e.lookup("RestoreFootprintResultCode"),switchName:"code",switches:[["restoreFootprintSuccess",e.void()],["restoreFootprintMalformed",e.void()],["restoreFootprintResourceLimitExceeded",e.void()],["restoreFootprintInsufficientRefundableFee",e.void()]],arms:{}}),e.enum("OperationResultCode",{opInner:0,opBadAuth:-1,opNoAccount:-2,opNotSupported:-3,opTooManySubentries:-4,opExceededWorkLimit:-5,opTooManySponsoring:-6}),e.union("OperationResultTr",{switchOn:e.lookup("OperationType"),switchName:"type",switches:[["createAccount","createAccountResult"],["payment","paymentResult"],["pathPaymentStrictReceive","pathPaymentStrictReceiveResult"],["manageSellOffer","manageSellOfferResult"],["createPassiveSellOffer","createPassiveSellOfferResult"],["setOptions","setOptionsResult"],["changeTrust","changeTrustResult"],["allowTrust","allowTrustResult"],["accountMerge","accountMergeResult"],["inflation","inflationResult"],["manageData","manageDataResult"],["bumpSequence","bumpSeqResult"],["manageBuyOffer","manageBuyOfferResult"],["pathPaymentStrictSend","pathPaymentStrictSendResult"],["createClaimableBalance","createClaimableBalanceResult"],["claimClaimableBalance","claimClaimableBalanceResult"],["beginSponsoringFutureReserves","beginSponsoringFutureReservesResult"],["endSponsoringFutureReserves","endSponsoringFutureReservesResult"],["revokeSponsorship","revokeSponsorshipResult"],["clawback","clawbackResult"],["clawbackClaimableBalance","clawbackClaimableBalanceResult"],["setTrustLineFlags","setTrustLineFlagsResult"],["liquidityPoolDeposit","liquidityPoolDepositResult"],["liquidityPoolWithdraw","liquidityPoolWithdrawResult"],["invokeHostFunction","invokeHostFunctionResult"],["extendFootprintTtl","extendFootprintTtlResult"],["restoreFootprint","restoreFootprintResult"]],arms:{createAccountResult:e.lookup("CreateAccountResult"),paymentResult:e.lookup("PaymentResult"),pathPaymentStrictReceiveResult:e.lookup("PathPaymentStrictReceiveResult"),manageSellOfferResult:e.lookup("ManageSellOfferResult"),createPassiveSellOfferResult:e.lookup("ManageSellOfferResult"),setOptionsResult:e.lookup("SetOptionsResult"),changeTrustResult:e.lookup("ChangeTrustResult"),allowTrustResult:e.lookup("AllowTrustResult"),accountMergeResult:e.lookup("AccountMergeResult"),inflationResult:e.lookup("InflationResult"),manageDataResult:e.lookup("ManageDataResult"),bumpSeqResult:e.lookup("BumpSequenceResult"),manageBuyOfferResult:e.lookup("ManageBuyOfferResult"),pathPaymentStrictSendResult:e.lookup("PathPaymentStrictSendResult"),createClaimableBalanceResult:e.lookup("CreateClaimableBalanceResult"),claimClaimableBalanceResult:e.lookup("ClaimClaimableBalanceResult"),beginSponsoringFutureReservesResult:e.lookup("BeginSponsoringFutureReservesResult"),endSponsoringFutureReservesResult:e.lookup("EndSponsoringFutureReservesResult"),revokeSponsorshipResult:e.lookup("RevokeSponsorshipResult"),clawbackResult:e.lookup("ClawbackResult"),clawbackClaimableBalanceResult:e.lookup("ClawbackClaimableBalanceResult"),setTrustLineFlagsResult:e.lookup("SetTrustLineFlagsResult"),liquidityPoolDepositResult:e.lookup("LiquidityPoolDepositResult"),liquidityPoolWithdrawResult:e.lookup("LiquidityPoolWithdrawResult"),invokeHostFunctionResult:e.lookup("InvokeHostFunctionResult"),extendFootprintTtlResult:e.lookup("ExtendFootprintTtlResult"),restoreFootprintResult:e.lookup("RestoreFootprintResult")}}),e.union("OperationResult",{switchOn:e.lookup("OperationResultCode"),switchName:"code",switches:[["opInner","tr"],["opBadAuth",e.void()],["opNoAccount",e.void()],["opNotSupported",e.void()],["opTooManySubentries",e.void()],["opExceededWorkLimit",e.void()],["opTooManySponsoring",e.void()]],arms:{tr:e.lookup("OperationResultTr")}}),e.enum("TransactionResultCode",{txFeeBumpInnerSuccess:1,txSuccess:0,txFailed:-1,txTooEarly:-2,txTooLate:-3,txMissingOperation:-4,txBadSeq:-5,txBadAuth:-6,txInsufficientBalance:-7,txNoAccount:-8,txInsufficientFee:-9,txBadAuthExtra:-10,txInternalError:-11,txNotSupported:-12,txFeeBumpInnerFailed:-13,txBadSponsorship:-14,txBadMinSeqAgeOrGap:-15,txMalformed:-16,txSorobanInvalid:-17}),e.union("InnerTransactionResultResult",{switchOn:e.lookup("TransactionResultCode"),switchName:"code",switches:[["txSuccess","results"],["txFailed","results"],["txTooEarly",e.void()],["txTooLate",e.void()],["txMissingOperation",e.void()],["txBadSeq",e.void()],["txBadAuth",e.void()],["txInsufficientBalance",e.void()],["txNoAccount",e.void()],["txInsufficientFee",e.void()],["txBadAuthExtra",e.void()],["txInternalError",e.void()],["txNotSupported",e.void()],["txBadSponsorship",e.void()],["txBadMinSeqAgeOrGap",e.void()],["txMalformed",e.void()],["txSorobanInvalid",e.void()]],arms:{results:e.varArray(e.lookup("OperationResult"),2147483647)}}),e.union("InnerTransactionResultExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("InnerTransactionResult",[["feeCharged",e.lookup("Int64")],["result",e.lookup("InnerTransactionResultResult")],["ext",e.lookup("InnerTransactionResultExt")]]),e.struct("InnerTransactionResultPair",[["transactionHash",e.lookup("Hash")],["result",e.lookup("InnerTransactionResult")]]),e.union("TransactionResultResult",{switchOn:e.lookup("TransactionResultCode"),switchName:"code",switches:[["txFeeBumpInnerSuccess","innerResultPair"],["txFeeBumpInnerFailed","innerResultPair"],["txSuccess","results"],["txFailed","results"],["txTooEarly",e.void()],["txTooLate",e.void()],["txMissingOperation",e.void()],["txBadSeq",e.void()],["txBadAuth",e.void()],["txInsufficientBalance",e.void()],["txNoAccount",e.void()],["txInsufficientFee",e.void()],["txBadAuthExtra",e.void()],["txInternalError",e.void()],["txNotSupported",e.void()],["txBadSponsorship",e.void()],["txBadMinSeqAgeOrGap",e.void()],["txMalformed",e.void()],["txSorobanInvalid",e.void()]],arms:{innerResultPair:e.lookup("InnerTransactionResultPair"),results:e.varArray(e.lookup("OperationResult"),2147483647)}}),e.union("TransactionResultExt",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.struct("TransactionResult",[["feeCharged",e.lookup("Int64")],["result",e.lookup("TransactionResultResult")],["ext",e.lookup("TransactionResultExt")]]),e.typedef("Hash",e.opaque(32)),e.typedef("Uint256",e.opaque(32)),e.typedef("Uint32",e.uint()),e.typedef("Int32",e.int()),e.typedef("Uint64",e.uhyper()),e.typedef("Int64",e.hyper()),e.typedef("TimePoint",e.lookup("Uint64")),e.typedef("Duration",e.lookup("Uint64")),e.union("ExtensionPoint",{switchOn:e.int(),switchName:"v",switches:[[0,e.void()]],arms:{}}),e.enum("CryptoKeyType",{keyTypeEd25519:0,keyTypePreAuthTx:1,keyTypeHashX:2,keyTypeEd25519SignedPayload:3,keyTypeMuxedEd25519:256}),e.enum("PublicKeyType",{publicKeyTypeEd25519:0}),e.enum("SignerKeyType",{signerKeyTypeEd25519:0,signerKeyTypePreAuthTx:1,signerKeyTypeHashX:2,signerKeyTypeEd25519SignedPayload:3}),e.union("PublicKey",{switchOn:e.lookup("PublicKeyType"),switchName:"type",switches:[["publicKeyTypeEd25519","ed25519"]],arms:{ed25519:e.lookup("Uint256")}}),e.struct("SignerKeyEd25519SignedPayload",[["ed25519",e.lookup("Uint256")],["payload",e.varOpaque(64)]]),e.union("SignerKey",{switchOn:e.lookup("SignerKeyType"),switchName:"type",switches:[["signerKeyTypeEd25519","ed25519"],["signerKeyTypePreAuthTx","preAuthTx"],["signerKeyTypeHashX","hashX"],["signerKeyTypeEd25519SignedPayload","ed25519SignedPayload"]],arms:{ed25519:e.lookup("Uint256"),preAuthTx:e.lookup("Uint256"),hashX:e.lookup("Uint256"),ed25519SignedPayload:e.lookup("SignerKeyEd25519SignedPayload")}}),e.typedef("Signature",e.varOpaque(64)),e.typedef("SignatureHint",e.opaque(4)),e.typedef("NodeId",e.lookup("PublicKey")),e.typedef("AccountId",e.lookup("PublicKey")),e.struct("Curve25519Secret",[["key",e.opaque(32)]]),e.struct("Curve25519Public",[["key",e.opaque(32)]]),e.struct("HmacSha256Key",[["key",e.opaque(32)]]),e.struct("HmacSha256Mac",[["mac",e.opaque(32)]]),e.struct("ShortHashSeed",[["seed",e.opaque(16)]]),e.enum("BinaryFuseFilterType",{binaryFuseFilter8Bit:0,binaryFuseFilter16Bit:1,binaryFuseFilter32Bit:2}),e.struct("SerializedBinaryFuseFilter",[["type",e.lookup("BinaryFuseFilterType")],["inputHashSeed",e.lookup("ShortHashSeed")],["filterSeed",e.lookup("ShortHashSeed")],["segmentLength",e.lookup("Uint32")],["segementLengthMask",e.lookup("Uint32")],["segmentCount",e.lookup("Uint32")],["segmentCountLength",e.lookup("Uint32")],["fingerprintLength",e.lookup("Uint32")],["fingerprints",e.varOpaque()]]),e.enum("ScValType",{scvBool:0,scvVoid:1,scvError:2,scvU32:3,scvI32:4,scvU64:5,scvI64:6,scvTimepoint:7,scvDuration:8,scvU128:9,scvI128:10,scvU256:11,scvI256:12,scvBytes:13,scvString:14,scvSymbol:15,scvVec:16,scvMap:17,scvAddress:18,scvContractInstance:19,scvLedgerKeyContractInstance:20,scvLedgerKeyNonce:21}),e.enum("ScErrorType",{sceContract:0,sceWasmVm:1,sceContext:2,sceStorage:3,sceObject:4,sceCrypto:5,sceEvents:6,sceBudget:7,sceValue:8,sceAuth:9}),e.enum("ScErrorCode",{scecArithDomain:0,scecIndexBounds:1,scecInvalidInput:2,scecMissingValue:3,scecExistingValue:4,scecExceededLimit:5,scecInvalidAction:6,scecInternalError:7,scecUnexpectedType:8,scecUnexpectedSize:9}),e.union("ScError",{switchOn:e.lookup("ScErrorType"),switchName:"type",switches:[["sceContract","contractCode"],["sceWasmVm","code"],["sceContext","code"],["sceStorage","code"],["sceObject","code"],["sceCrypto","code"],["sceEvents","code"],["sceBudget","code"],["sceValue","code"],["sceAuth","code"]],arms:{contractCode:e.lookup("Uint32"),code:e.lookup("ScErrorCode")}}),e.struct("UInt128Parts",[["hi",e.lookup("Uint64")],["lo",e.lookup("Uint64")]]),e.struct("Int128Parts",[["hi",e.lookup("Int64")],["lo",e.lookup("Uint64")]]),e.struct("UInt256Parts",[["hiHi",e.lookup("Uint64")],["hiLo",e.lookup("Uint64")],["loHi",e.lookup("Uint64")],["loLo",e.lookup("Uint64")]]),e.struct("Int256Parts",[["hiHi",e.lookup("Int64")],["hiLo",e.lookup("Uint64")],["loHi",e.lookup("Uint64")],["loLo",e.lookup("Uint64")]]),e.enum("ContractExecutableType",{contractExecutableWasm:0,contractExecutableStellarAsset:1}),e.union("ContractExecutable",{switchOn:e.lookup("ContractExecutableType"),switchName:"type",switches:[["contractExecutableWasm","wasmHash"],["contractExecutableStellarAsset",e.void()]],arms:{wasmHash:e.lookup("Hash")}}),e.enum("ScAddressType",{scAddressTypeAccount:0,scAddressTypeContract:1}),e.union("ScAddress",{switchOn:e.lookup("ScAddressType"),switchName:"type",switches:[["scAddressTypeAccount","accountId"],["scAddressTypeContract","contractId"]],arms:{accountId:e.lookup("AccountId"),contractId:e.lookup("Hash")}}),e.const("SCSYMBOL_LIMIT",32),e.typedef("ScVec",e.varArray(e.lookup("ScVal"),2147483647)),e.typedef("ScMap",e.varArray(e.lookup("ScMapEntry"),2147483647)),e.typedef("ScBytes",e.varOpaque()),e.typedef("ScString",e.string()),e.typedef("ScSymbol",e.string(32)),e.struct("ScNonceKey",[["nonce",e.lookup("Int64")]]),e.struct("ScContractInstance",[["executable",e.lookup("ContractExecutable")],["storage",e.option(e.lookup("ScMap"))]]),e.union("ScVal",{switchOn:e.lookup("ScValType"),switchName:"type",switches:[["scvBool","b"],["scvVoid",e.void()],["scvError","error"],["scvU32","u32"],["scvI32","i32"],["scvU64","u64"],["scvI64","i64"],["scvTimepoint","timepoint"],["scvDuration","duration"],["scvU128","u128"],["scvI128","i128"],["scvU256","u256"],["scvI256","i256"],["scvBytes","bytes"],["scvString","str"],["scvSymbol","sym"],["scvVec","vec"],["scvMap","map"],["scvAddress","address"],["scvLedgerKeyContractInstance",e.void()],["scvLedgerKeyNonce","nonceKey"],["scvContractInstance","instance"]],arms:{b:e.bool(),error:e.lookup("ScError"),u32:e.lookup("Uint32"),i32:e.lookup("Int32"),u64:e.lookup("Uint64"),i64:e.lookup("Int64"),timepoint:e.lookup("TimePoint"),duration:e.lookup("Duration"),u128:e.lookup("UInt128Parts"),i128:e.lookup("Int128Parts"),u256:e.lookup("UInt256Parts"),i256:e.lookup("Int256Parts"),bytes:e.lookup("ScBytes"),str:e.lookup("ScString"),sym:e.lookup("ScSymbol"),vec:e.option(e.lookup("ScVec")),map:e.option(e.lookup("ScMap")),address:e.lookup("ScAddress"),nonceKey:e.lookup("ScNonceKey"),instance:e.lookup("ScContractInstance")}}),e.struct("ScMapEntry",[["key",e.lookup("ScVal")],["val",e.lookup("ScVal")]]),e.enum("ScEnvMetaKind",{scEnvMetaKindInterfaceVersion:0}),e.struct("ScEnvMetaEntryInterfaceVersion",[["protocol",e.lookup("Uint32")],["preRelease",e.lookup("Uint32")]]),e.union("ScEnvMetaEntry",{switchOn:e.lookup("ScEnvMetaKind"),switchName:"kind",switches:[["scEnvMetaKindInterfaceVersion","interfaceVersion"]],arms:{interfaceVersion:e.lookup("ScEnvMetaEntryInterfaceVersion")}}),e.struct("ScMetaV0",[["key",e.string()],["val",e.string()]]),e.enum("ScMetaKind",{scMetaV0:0}),e.union("ScMetaEntry",{switchOn:e.lookup("ScMetaKind"),switchName:"kind",switches:[["scMetaV0","v0"]],arms:{v0:e.lookup("ScMetaV0")}}),e.const("SC_SPEC_DOC_LIMIT",1024),e.enum("ScSpecType",{scSpecTypeVal:0,scSpecTypeBool:1,scSpecTypeVoid:2,scSpecTypeError:3,scSpecTypeU32:4,scSpecTypeI32:5,scSpecTypeU64:6,scSpecTypeI64:7,scSpecTypeTimepoint:8,scSpecTypeDuration:9,scSpecTypeU128:10,scSpecTypeI128:11,scSpecTypeU256:12,scSpecTypeI256:13,scSpecTypeBytes:14,scSpecTypeString:16,scSpecTypeSymbol:17,scSpecTypeAddress:19,scSpecTypeOption:1e3,scSpecTypeResult:1001,scSpecTypeVec:1002,scSpecTypeMap:1004,scSpecTypeTuple:1005,scSpecTypeBytesN:1006,scSpecTypeUdt:2e3}),e.struct("ScSpecTypeOption",[["valueType",e.lookup("ScSpecTypeDef")]]),e.struct("ScSpecTypeResult",[["okType",e.lookup("ScSpecTypeDef")],["errorType",e.lookup("ScSpecTypeDef")]]),e.struct("ScSpecTypeVec",[["elementType",e.lookup("ScSpecTypeDef")]]),e.struct("ScSpecTypeMap",[["keyType",e.lookup("ScSpecTypeDef")],["valueType",e.lookup("ScSpecTypeDef")]]),e.struct("ScSpecTypeTuple",[["valueTypes",e.varArray(e.lookup("ScSpecTypeDef"),12)]]),e.struct("ScSpecTypeBytesN",[["n",e.lookup("Uint32")]]),e.struct("ScSpecTypeUdt",[["name",e.string(60)]]),e.union("ScSpecTypeDef",{switchOn:e.lookup("ScSpecType"),switchName:"type",switches:[["scSpecTypeVal",e.void()],["scSpecTypeBool",e.void()],["scSpecTypeVoid",e.void()],["scSpecTypeError",e.void()],["scSpecTypeU32",e.void()],["scSpecTypeI32",e.void()],["scSpecTypeU64",e.void()],["scSpecTypeI64",e.void()],["scSpecTypeTimepoint",e.void()],["scSpecTypeDuration",e.void()],["scSpecTypeU128",e.void()],["scSpecTypeI128",e.void()],["scSpecTypeU256",e.void()],["scSpecTypeI256",e.void()],["scSpecTypeBytes",e.void()],["scSpecTypeString",e.void()],["scSpecTypeSymbol",e.void()],["scSpecTypeAddress",e.void()],["scSpecTypeOption","option"],["scSpecTypeResult","result"],["scSpecTypeVec","vec"],["scSpecTypeMap","map"],["scSpecTypeTuple","tuple"],["scSpecTypeBytesN","bytesN"],["scSpecTypeUdt","udt"]],arms:{option:e.lookup("ScSpecTypeOption"),result:e.lookup("ScSpecTypeResult"),vec:e.lookup("ScSpecTypeVec"),map:e.lookup("ScSpecTypeMap"),tuple:e.lookup("ScSpecTypeTuple"),bytesN:e.lookup("ScSpecTypeBytesN"),udt:e.lookup("ScSpecTypeUdt")}}),e.struct("ScSpecUdtStructFieldV0",[["doc",e.string(t)],["name",e.string(30)],["type",e.lookup("ScSpecTypeDef")]]),e.struct("ScSpecUdtStructV0",[["doc",e.string(t)],["lib",e.string(80)],["name",e.string(60)],["fields",e.varArray(e.lookup("ScSpecUdtStructFieldV0"),40)]]),e.struct("ScSpecUdtUnionCaseVoidV0",[["doc",e.string(t)],["name",e.string(60)]]),e.struct("ScSpecUdtUnionCaseTupleV0",[["doc",e.string(t)],["name",e.string(60)],["type",e.varArray(e.lookup("ScSpecTypeDef"),12)]]),e.enum("ScSpecUdtUnionCaseV0Kind",{scSpecUdtUnionCaseVoidV0:0,scSpecUdtUnionCaseTupleV0:1}),e.union("ScSpecUdtUnionCaseV0",{switchOn:e.lookup("ScSpecUdtUnionCaseV0Kind"),switchName:"kind",switches:[["scSpecUdtUnionCaseVoidV0","voidCase"],["scSpecUdtUnionCaseTupleV0","tupleCase"]],arms:{voidCase:e.lookup("ScSpecUdtUnionCaseVoidV0"),tupleCase:e.lookup("ScSpecUdtUnionCaseTupleV0")}}),e.struct("ScSpecUdtUnionV0",[["doc",e.string(t)],["lib",e.string(80)],["name",e.string(60)],["cases",e.varArray(e.lookup("ScSpecUdtUnionCaseV0"),50)]]),e.struct("ScSpecUdtEnumCaseV0",[["doc",e.string(t)],["name",e.string(60)],["value",e.lookup("Uint32")]]),e.struct("ScSpecUdtEnumV0",[["doc",e.string(t)],["lib",e.string(80)],["name",e.string(60)],["cases",e.varArray(e.lookup("ScSpecUdtEnumCaseV0"),50)]]),e.struct("ScSpecUdtErrorEnumCaseV0",[["doc",e.string(t)],["name",e.string(60)],["value",e.lookup("Uint32")]]),e.struct("ScSpecUdtErrorEnumV0",[["doc",e.string(t)],["lib",e.string(80)],["name",e.string(60)],["cases",e.varArray(e.lookup("ScSpecUdtErrorEnumCaseV0"),50)]]),e.struct("ScSpecFunctionInputV0",[["doc",e.string(t)],["name",e.string(30)],["type",e.lookup("ScSpecTypeDef")]]),e.struct("ScSpecFunctionV0",[["doc",e.string(t)],["name",e.lookup("ScSymbol")],["inputs",e.varArray(e.lookup("ScSpecFunctionInputV0"),10)],["outputs",e.varArray(e.lookup("ScSpecTypeDef"),1)]]),e.enum("ScSpecEntryKind",{scSpecEntryFunctionV0:0,scSpecEntryUdtStructV0:1,scSpecEntryUdtUnionV0:2,scSpecEntryUdtEnumV0:3,scSpecEntryUdtErrorEnumV0:4}),e.union("ScSpecEntry",{switchOn:e.lookup("ScSpecEntryKind"),switchName:"kind",switches:[["scSpecEntryFunctionV0","functionV0"],["scSpecEntryUdtStructV0","udtStructV0"],["scSpecEntryUdtUnionV0","udtUnionV0"],["scSpecEntryUdtEnumV0","udtEnumV0"],["scSpecEntryUdtErrorEnumV0","udtErrorEnumV0"]],arms:{functionV0:e.lookup("ScSpecFunctionV0"),udtStructV0:e.lookup("ScSpecUdtStructV0"),udtUnionV0:e.lookup("ScSpecUdtUnionV0"),udtEnumV0:e.lookup("ScSpecUdtEnumV0"),udtErrorEnumV0:e.lookup("ScSpecUdtErrorEnumV0")}}),e.struct("ConfigSettingContractExecutionLanesV0",[["ledgerMaxTxCount",e.lookup("Uint32")]]),e.struct("ConfigSettingContractComputeV0",[["ledgerMaxInstructions",e.lookup("Int64")],["txMaxInstructions",e.lookup("Int64")],["feeRatePerInstructionsIncrement",e.lookup("Int64")],["txMemoryLimit",e.lookup("Uint32")]]),e.struct("ConfigSettingContractLedgerCostV0",[["ledgerMaxReadLedgerEntries",e.lookup("Uint32")],["ledgerMaxReadBytes",e.lookup("Uint32")],["ledgerMaxWriteLedgerEntries",e.lookup("Uint32")],["ledgerMaxWriteBytes",e.lookup("Uint32")],["txMaxReadLedgerEntries",e.lookup("Uint32")],["txMaxReadBytes",e.lookup("Uint32")],["txMaxWriteLedgerEntries",e.lookup("Uint32")],["txMaxWriteBytes",e.lookup("Uint32")],["feeReadLedgerEntry",e.lookup("Int64")],["feeWriteLedgerEntry",e.lookup("Int64")],["feeRead1Kb",e.lookup("Int64")],["bucketListTargetSizeBytes",e.lookup("Int64")],["writeFee1KbBucketListLow",e.lookup("Int64")],["writeFee1KbBucketListHigh",e.lookup("Int64")],["bucketListWriteFeeGrowthFactor",e.lookup("Uint32")]]),e.struct("ConfigSettingContractHistoricalDataV0",[["feeHistorical1Kb",e.lookup("Int64")]]),e.struct("ConfigSettingContractEventsV0",[["txMaxContractEventsSizeBytes",e.lookup("Uint32")],["feeContractEvents1Kb",e.lookup("Int64")]]),e.struct("ConfigSettingContractBandwidthV0",[["ledgerMaxTxsSizeBytes",e.lookup("Uint32")],["txMaxSizeBytes",e.lookup("Uint32")],["feeTxSize1Kb",e.lookup("Int64")]]),e.enum("ContractCostType",{wasmInsnExec:0,memAlloc:1,memCpy:2,memCmp:3,dispatchHostFunction:4,visitObject:5,valSer:6,valDeser:7,computeSha256Hash:8,computeEd25519PubKey:9,verifyEd25519Sig:10,vmInstantiation:11,vmCachedInstantiation:12,invokeVmFunction:13,computeKeccak256Hash:14,decodeEcdsaCurve256Sig:15,recoverEcdsaSecp256k1Key:16,int256AddSub:17,int256Mul:18,int256Div:19,int256Pow:20,int256Shift:21,chaCha20DrawBytes:22,parseWasmInstructions:23,parseWasmFunctions:24,parseWasmGlobals:25,parseWasmTableEntries:26,parseWasmTypes:27,parseWasmDataSegments:28,parseWasmElemSegments:29,parseWasmImports:30,parseWasmExports:31,parseWasmDataSegmentBytes:32,instantiateWasmInstructions:33,instantiateWasmFunctions:34,instantiateWasmGlobals:35,instantiateWasmTableEntries:36,instantiateWasmTypes:37,instantiateWasmDataSegments:38,instantiateWasmElemSegments:39,instantiateWasmImports:40,instantiateWasmExports:41,instantiateWasmDataSegmentBytes:42,sec1DecodePointUncompressed:43,verifyEcdsaSecp256r1Sig:44,bls12381EncodeFp:45,bls12381DecodeFp:46,bls12381G1CheckPointOnCurve:47,bls12381G1CheckPointInSubgroup:48,bls12381G2CheckPointOnCurve:49,bls12381G2CheckPointInSubgroup:50,bls12381G1ProjectiveToAffine:51,bls12381G2ProjectiveToAffine:52,bls12381G1Add:53,bls12381G1Mul:54,bls12381G1Msm:55,bls12381MapFpToG1:56,bls12381HashToG1:57,bls12381G2Add:58,bls12381G2Mul:59,bls12381G2Msm:60,bls12381MapFp2ToG2:61,bls12381HashToG2:62,bls12381Pairing:63,bls12381FrFromU256:64,bls12381FrToU256:65,bls12381FrAddSub:66,bls12381FrMul:67,bls12381FrPow:68,bls12381FrInv:69}),e.struct("ContractCostParamEntry",[["ext",e.lookup("ExtensionPoint")],["constTerm",e.lookup("Int64")],["linearTerm",e.lookup("Int64")]]),e.struct("StateArchivalSettings",[["maxEntryTtl",e.lookup("Uint32")],["minTemporaryTtl",e.lookup("Uint32")],["minPersistentTtl",e.lookup("Uint32")],["persistentRentRateDenominator",e.lookup("Int64")],["tempRentRateDenominator",e.lookup("Int64")],["maxEntriesToArchive",e.lookup("Uint32")],["bucketListSizeWindowSampleSize",e.lookup("Uint32")],["bucketListWindowSamplePeriod",e.lookup("Uint32")],["evictionScanSize",e.lookup("Uint32")],["startingEvictionScanLevel",e.lookup("Uint32")]]),e.struct("EvictionIterator",[["bucketListLevel",e.lookup("Uint32")],["isCurrBucket",e.bool()],["bucketFileOffset",e.lookup("Uint64")]]),e.const("CONTRACT_COST_COUNT_LIMIT",1024),e.typedef("ContractCostParams",e.varArray(e.lookup("ContractCostParamEntry"),e.lookup("CONTRACT_COST_COUNT_LIMIT"))),e.enum("ConfigSettingId",{configSettingContractMaxSizeBytes:0,configSettingContractComputeV0:1,configSettingContractLedgerCostV0:2,configSettingContractHistoricalDataV0:3,configSettingContractEventsV0:4,configSettingContractBandwidthV0:5,configSettingContractCostParamsCpuInstructions:6,configSettingContractCostParamsMemoryBytes:7,configSettingContractDataKeySizeBytes:8,configSettingContractDataEntrySizeBytes:9,configSettingStateArchival:10,configSettingContractExecutionLanes:11,configSettingBucketlistSizeWindow:12,configSettingEvictionIterator:13}),e.union("ConfigSettingEntry",{switchOn:e.lookup("ConfigSettingId"),switchName:"configSettingId",switches:[["configSettingContractMaxSizeBytes","contractMaxSizeBytes"],["configSettingContractComputeV0","contractCompute"],["configSettingContractLedgerCostV0","contractLedgerCost"],["configSettingContractHistoricalDataV0","contractHistoricalData"],["configSettingContractEventsV0","contractEvents"],["configSettingContractBandwidthV0","contractBandwidth"],["configSettingContractCostParamsCpuInstructions","contractCostParamsCpuInsns"],["configSettingContractCostParamsMemoryBytes","contractCostParamsMemBytes"],["configSettingContractDataKeySizeBytes","contractDataKeySizeBytes"],["configSettingContractDataEntrySizeBytes","contractDataEntrySizeBytes"],["configSettingStateArchival","stateArchivalSettings"],["configSettingContractExecutionLanes","contractExecutionLanes"],["configSettingBucketlistSizeWindow","bucketListSizeWindow"],["configSettingEvictionIterator","evictionIterator"]],arms:{contractMaxSizeBytes:e.lookup("Uint32"),contractCompute:e.lookup("ConfigSettingContractComputeV0"),contractLedgerCost:e.lookup("ConfigSettingContractLedgerCostV0"),contractHistoricalData:e.lookup("ConfigSettingContractHistoricalDataV0"),contractEvents:e.lookup("ConfigSettingContractEventsV0"),contractBandwidth:e.lookup("ConfigSettingContractBandwidthV0"),contractCostParamsCpuInsns:e.lookup("ContractCostParams"),contractCostParamsMemBytes:e.lookup("ContractCostParams"),contractDataKeySizeBytes:e.lookup("Uint32"),contractDataEntrySizeBytes:e.lookup("Uint32"),stateArchivalSettings:e.lookup("StateArchivalSettings"),contractExecutionLanes:e.lookup("ConfigSettingContractExecutionLanesV0"),bucketListSizeWindow:e.varArray(e.lookup("Uint64"),2147483647),evictionIterator:e.lookup("EvictionIterator")}})}));const i=o;const a={XdrWriter:n.XdrWriter,XdrReader:n.XdrReader};var s=r(2802);function u(e){var t=new s.sha256;return t.update(e,"utf8"),t.digest()}var c=r(3626).A,l={},f="undefined"==typeof window?function(){var e;try{e=r(Object(function(){var e=new Error("Cannot find module 'sodium-native'");throw e.code="MODULE_NOT_FOUND",e}()))}catch(e){return d()}return Object.keys(e).length?(l.generate=function(t){var r=c.alloc(e.crypto_sign_PUBLICKEYBYTES),n=c.alloc(e.crypto_sign_SECRETKEYBYTES);return e.crypto_sign_seed_keypair(r,n,t),r},l.sign=function(t,r){t=c.from(t);var n=c.alloc(e.crypto_sign_BYTES);return e.crypto_sign_detached(n,t,r),n},l.verify=function(t,r,n){t=c.from(t);try{return e.crypto_sign_verify_detached(r,t,n)}catch(e){return!1}},!0):d()}():d();function p(e,t){return l.sign(e,t)}function h(e,t,r){return l.verify(e,t,r)}function d(){var e=r(8947);return l.generate=function(t){var r=new Uint8Array(t),n=e.sign.keyPair.fromSeed(r);return c.from(n.publicKey)},l.sign=function(t,r){t=c.from(t),t=new Uint8Array(t.toJSON().data),r=new Uint8Array(r.toJSON().data);var n=e.sign.detached(t,r);return c.from(n)},l.verify=function(t,r,n){return t=c.from(t),t=new Uint8Array(t.toJSON().data),r=new Uint8Array(r.toJSON().data),n=new Uint8Array(n.toJSON().data),e.sign.detached.verify(t,r,n)},!1}var y=function(e,t){for(var r="number"==typeof e,n=String(e);n.endsWith(t);)n=n.slice(0,-1);return r?Number(n):n},m=r(8947),g=r.n(m),v=r(5360);var b=r(3626).A;function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function S(e,t){for(var r=0;r165)return!1;break;default:return!1}var r="";try{r=P(e,t)}catch(e){return!1}switch(e){case"ed25519PublicKey":case"ed25519SecretSeed":case"preAuthTx":case"sha256Hash":case"contract":return 32===r.length;case"med25519PublicKey":return 40===r.length;case"signedPayload":return r.length>=40&&r.length<=100;default:return!1}}function P(e,t){if("string"!=typeof t)throw new TypeError("encoded argument must be of type String");var r=v.decode(t),n=r[0],o=r.slice(0,-2),i=o.slice(1),a=r.slice(-2);if(t!==v.encode(r))throw new Error("invalid encoded string");var s=E[e];if(void 0===s)throw new Error("".concat(e," is not a valid version byte name. ")+"Expected one of ".concat(Object.keys(E).join(", ")));if(n!==s)throw new Error("invalid version byte. expected ".concat(s,", got ").concat(n));if(!function(e,t){if(e.length!==t.length)return!1;if(0===e.length)return!0;for(var r=0;r>8^e[n]],r&=65535}var o=new Uint8Array(2);return o[0]=255&r,o[1]=r>>8&255,o}var B=r(3626).A;function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function R(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:i.Asset;if(this.isNative())return r.assetTypeNative();this.code.length<=4?(e=i.AlphaNum4,t="assetTypeCreditAlphanum4"):(e=i.AlphaNum12,t="assetTypeCreditAlphanum12");var n=this.code.length<=4?4:12;return new r(t,new e({assetCode:this.code.padEnd(n,"\0"),issuer:U.fromPublicKey(this.issuer).xdrAccountId()}))}},{key:"getCode",value:function(){if(void 0!==this.code)return String(this.code)}},{key:"getIssuer",value:function(){if(void 0!==this.issuer)return String(this.issuer)}},{key:"getAssetType",value:function(){switch(this.getRawAssetType().value){case i.AssetType.assetTypeNative().value:return"native";case i.AssetType.assetTypeCreditAlphanum4().value:return"credit_alphanum4";case i.AssetType.assetTypeCreditAlphanum12().value:return"credit_alphanum12";default:return"unknown"}}},{key:"getRawAssetType",value:function(){return this.isNative()?i.AssetType.assetTypeNative():this.code.length<=4?i.AssetType.assetTypeCreditAlphanum4():i.AssetType.assetTypeCreditAlphanum12()}},{key:"isNative",value:function(){return!this.issuer}},{key:"equals",value:function(e){return this.code===e.getCode()&&this.issuer===e.getIssuer()}},{key:"toString",value:function(){return this.isNative()?"native":"".concat(this.getCode(),":").concat(this.getIssuer())}}],n=[{key:"native",value:function(){return new e("XLM")}},{key:"fromOperation",value:function(e){var t,r;switch(e.switch()){case i.AssetType.assetTypeNative():return this.native();case i.AssetType.assetTypeCreditAlphanum4():t=e.alphaNum4();case i.AssetType.assetTypeCreditAlphanum12():return t=t||e.alphaNum12(),r=T.encodeEd25519PublicKey(t.issuer().ed25519()),new this(y(t.assetCode(),"\0"),r);default:throw new Error("Invalid asset type: ".concat(e.switch().name))}}},{key:"compare",value:function(t,r){if(!(t&&t instanceof e))throw new Error("assetA is invalid");if(!(r&&r instanceof e))throw new Error("assetB is invalid");if(t.equals(r))return 0;var n=t.getRawAssetType().value,o=r.getRawAssetType().value;if(n!==o)return n1&&void 0!==arguments[1]?arguments[1]:{};if("constant_product"!==e)throw new Error("liquidityPoolType is invalid");var r=t.assetA,n=t.assetB,o=t.fee;if(!(r&&r instanceof F))throw new Error("assetA is invalid");if(!(n&&n instanceof F))throw new Error("assetB is invalid");if(!o||o!==q)throw new Error("fee is invalid");if(-1!==F.compare(r,n))throw new Error("Assets are not in lexicographic order");var a=i.LiquidityPoolType.liquidityPoolConstantProduct().toXDR(),s=new i.LiquidityPoolConstantProductParameters({assetA:r.toXDRObject(),assetB:n.toXDRObject(),fee:o}).toXDR();return u(V.concat([a,s]))}var H=r(3626).A;function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function X(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!n||"string"!=typeof n)throw new Error("Invalid signature");if(!r||"string"!=typeof r)throw new Error("Invalid publicKey");var o=H.from(n,"base64");try{t=(e=U.fromPublicKey(r)).signatureHint()}catch(e){throw new Error("Invalid publicKey")}if(!e.verify(this.hash(),o))throw new Error("Invalid signature");this.signatures.push(new i.DecoratedSignature({hint:t,signature:o}))}},{key:"addDecoratedSignature",value:function(e){this.signatures.push(e)}},{key:"signHashX",value:function(e){if("string"==typeof e&&(e=H.from(e,"hex")),e.length>64)throw new Error("preimage cannnot be longer than 64 bytes");var t=e,r=u(e),n=r.slice(r.length-4);this.signatures.push(new i.DecoratedSignature({hint:n,signature:t}))}},{key:"hash",value:function(){return u(this.signatureBase())}},{key:"signatureBase",value:function(){throw new Error("Implement in subclass")}},{key:"toEnvelope",value:function(){throw new Error("Implement in subclass")}},{key:"toXDR",value:function(){return this.toEnvelope().toXDR().toString("base64")}}],t&&X(e.prototype,t),r&&X(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}(),W=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Y=Math.ceil,J=Math.floor,Z="[BigNumber Error] ",Q=Z+"Number primitive has more than 15 significant digits: ",ee=1e14,te=14,re=9007199254740991,ne=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],oe=1e7,ie=1e9;function ae(e){var t=0|e;return e>0||e===t?t:t-1}function se(e){for(var t,r,n=1,o=e.length,i=e[0]+"";nc^r?1:-1;for(s=(u=o.length)<(c=i.length)?u:c,a=0;ai[a]^r?1:-1;return u==c?0:u>c^r?1:-1}function ce(e,t,r,n){if(er||e!==J(e))throw Error(Z+(n||"Argument")+("number"==typeof e?er?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function le(e){var t=e.c.length-1;return ae(e.e/te)==t&&e.c[t]%2!=0}function fe(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function pe(e,t,r){var n,o;if(t<0){for(o=r+".";++t;o+=r);e=o+e}else if(++t>(n=e.length)){for(o=r,t-=n;--t;o+=r);e+=o}else tb?p.c=p.e=null:e.e=10;u/=10,s++);return void(s>b?p.c=p.e=null:(p.e=s,p.c=[e]))}f=String(e)}else{if(!W.test(f=String(e)))return o(p,f,c);p.s=45==f.charCodeAt(0)?(f=f.slice(1),-1):1}(s=f.indexOf("."))>-1&&(f=f.replace(".","")),(u=f.search(/e/i))>0?(s<0&&(s=u),s+=+f.slice(u+1),f=f.substring(0,u)):s<0&&(s=f.length)}else{if(ce(t,2,A.length,"Base"),10==t&&T)return B(p=new O(e),d+p.e+1,y);if(f=String(e),c="number"==typeof e){if(0*e!=0)return o(p,f,c,t);if(p.s=1/e<0?(f=f.slice(1),-1):1,O.DEBUG&&f.replace(/^0\.0*|\./,"").length>15)throw Error(Q+e)}else p.s=45===f.charCodeAt(0)?(f=f.slice(1),-1):1;for(r=A.slice(0,t),s=u=0,l=f.length;us){s=l;continue}}else if(!a&&(f==f.toUpperCase()&&(f=f.toLowerCase())||f==f.toLowerCase()&&(f=f.toUpperCase()))){a=!0,u=-1,s=0;continue}return o(p,String(e),c,t)}c=!1,(s=(f=n(f,t,10,p.s)).indexOf("."))>-1?f=f.replace(".",""):s=f.length}for(u=0;48===f.charCodeAt(u);u++);for(l=f.length;48===f.charCodeAt(--l););if(f=f.slice(u,++l)){if(l-=u,c&&O.DEBUG&&l>15&&(e>re||e!==J(e)))throw Error(Q+p.s*e);if((s=s-u-1)>b)p.c=p.e=null;else if(s=g)?fe(u,a):pe(u,a,"0");else if(i=(e=B(new O(e),t,r)).e,s=(u=se(e.c)).length,1==n||2==n&&(t<=i||i<=m)){for(;ss){if(--t>0)for(u+=".";t--;u+="0");}else if((t+=i-s)>0)for(i+1==s&&(u+=".");t--;u+="0");return e.s<0&&o?"-"+u:u}function x(e,t){for(var r,n,o=1,i=new O(e[0]);o=10;o/=10,n++);return(r=n+r*te-1)>b?e.c=e.e=null:r=10;s/=10,o++);if((i=t-o)<0)i+=te,a=t,u=f[c=0],l=J(u/p[o-a-1]%10);else if((c=Y((i+1)/te))>=f.length){if(!n)break e;for(;f.length<=c;f.push(0));u=l=0,o=1,a=(i%=te)-te+1}else{for(u=s=f[c],o=1;s>=10;s/=10,o++);l=(a=(i%=te)-te+o)<0?0:J(u/p[o-a-1]%10)}if(n=n||t<0||null!=f[c+1]||(a<0?u:u%p[o-a-1]),n=r<4?(l||n)&&(0==r||r==(e.s<0?3:2)):l>5||5==l&&(4==r||n||6==r&&(i>0?a>0?u/p[o-a]:0:f[c-1])%10&1||r==(e.s<0?8:7)),t<1||!f[0])return f.length=0,n?(t-=e.e+1,f[0]=p[(te-t%te)%te],e.e=-t||0):f[0]=e.e=0,e;if(0==i?(f.length=c,s=1,c--):(f.length=c+1,s=p[te-i],f[c]=a>0?J(u/p[o-a]%p[a])*s:0),n)for(;;){if(0==c){for(i=1,a=f[0];a>=10;a/=10,i++);for(a=f[0]+=s,s=1;a>=10;a/=10,s++);i!=s&&(e.e++,f[0]==ee&&(f[0]=1));break}if(f[c]+=s,f[c]!=ee)break;f[c--]=0,s=1}for(i=f.length;0===f[--i];f.pop());}e.e>b?e.c=e.e=null:e.e=g?fe(t,r):pe(t,r,"0"),e.s<0?"-"+t:t)}return O.clone=e,O.ROUND_UP=0,O.ROUND_DOWN=1,O.ROUND_CEIL=2,O.ROUND_FLOOR=3,O.ROUND_HALF_UP=4,O.ROUND_HALF_DOWN=5,O.ROUND_HALF_EVEN=6,O.ROUND_HALF_CEIL=7,O.ROUND_HALF_FLOOR=8,O.EUCLID=9,O.config=O.set=function(e){var t,r;if(null!=e){if("object"!=typeof e)throw Error(Z+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(ce(r=e[t],0,ie,t),d=r),e.hasOwnProperty(t="ROUNDING_MODE")&&(ce(r=e[t],0,8,t),y=r),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((r=e[t])&&r.pop?(ce(r[0],-ie,0,t),ce(r[1],0,ie,t),m=r[0],g=r[1]):(ce(r,-ie,ie,t),m=-(g=r<0?-r:r))),e.hasOwnProperty(t="RANGE"))if((r=e[t])&&r.pop)ce(r[0],-ie,-1,t),ce(r[1],1,ie,t),v=r[0],b=r[1];else{if(ce(r,-ie,ie,t),!r)throw Error(Z+t+" cannot be zero: "+r);v=-(b=r<0?-r:r)}if(e.hasOwnProperty(t="CRYPTO")){if((r=e[t])!==!!r)throw Error(Z+t+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw w=!r,Error(Z+"crypto unavailable");w=r}else w=r}if(e.hasOwnProperty(t="MODULO_MODE")&&(ce(r=e[t],0,9,t),S=r),e.hasOwnProperty(t="POW_PRECISION")&&(ce(r=e[t],0,ie,t),k=r),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(r=e[t]))throw Error(Z+t+" not an object: "+r);E=r}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(r=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(r))throw Error(Z+t+" invalid: "+r);T="0123456789"==r.slice(0,10),A=r}}return{DECIMAL_PLACES:d,ROUNDING_MODE:y,EXPONENTIAL_AT:[m,g],RANGE:[v,b],CRYPTO:w,MODULO_MODE:S,POW_PRECISION:k,FORMAT:E,ALPHABET:A}},O.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!O.DEBUG)return!0;var t,r,n=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===i||-1===i)&&o>=-ie&&o<=ie&&o===J(o)){if(0===n[0]){if(0===o&&1===n.length)return!0;break e}if((t=(o+1)%te)<1&&(t+=te),String(n[0]).length==t){for(t=0;t=ee||r!==J(r))break e;if(0!==r)return!0}}}else if(null===n&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(Z+"Invalid BigNumber: "+e)},O.maximum=O.max=function(){return x(arguments,-1)},O.minimum=O.min=function(){return x(arguments,1)},O.random=(i=9007199254740992,a=Math.random()*i&2097151?function(){return J(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,r,n,o,i,s=0,u=[],c=new O(h);if(null==e?e=d:ce(e,0,ie),o=Y(e/te),w)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(u.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw w=!1,Error(Z+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(t,s):(u.push(i%1e14),s+=7);s=o/7}if(!w)for(;s=10;i/=10,s++);sr-1&&(null==a[o+1]&&(a[o+1]=0),a[o+1]+=a[o]/r|0,a[o]%=r)}return a.reverse()}return function(n,o,i,a,s){var u,c,l,f,p,h,m,g,v=n.indexOf("."),b=d,w=y;for(v>=0&&(f=k,k=0,n=n.replace(".",""),h=(g=new O(o)).pow(n.length-v),k=f,g.c=t(pe(se(h.c),h.e,"0"),10,i,e),g.e=g.c.length),l=f=(m=t(n,o,i,s?(u=A,e):(u=e,A))).length;0==m[--f];m.pop());if(!m[0])return u.charAt(0);if(v<0?--l:(h.c=m,h.e=l,h.s=a,m=(h=r(h,g,b,w,i)).c,p=h.r,l=h.e),v=m[c=l+b+1],f=i/2,p=p||c<0||null!=m[c+1],p=w<4?(null!=v||p)&&(0==w||w==(h.s<0?3:2)):v>f||v==f&&(4==w||p||6==w&&1&m[c-1]||w==(h.s<0?8:7)),c<1||!m[0])n=p?pe(u.charAt(1),-b,u.charAt(0)):u.charAt(0);else{if(m.length=c,p)for(--i;++m[--c]>i;)m[c]=0,c||(++l,m=[1].concat(m));for(f=m.length;!m[--f];);for(v=0,n="";v<=f;n+=u.charAt(m[v++]));n=pe(n,l,u.charAt(0))}return n}}(),r=function(){function e(e,t,r){var n,o,i,a,s=0,u=e.length,c=t%oe,l=t/oe|0;for(e=e.slice();u--;)s=((o=c*(i=e[u]%oe)+(n=l*i+(a=e[u]/oe|0)*c)%oe*oe+s)/r|0)+(n/oe|0)+l*a,e[u]=o%r;return s&&(e=[s].concat(e)),e}function t(e,t,r,n){var o,i;if(r!=n)i=r>n?1:-1;else for(o=i=0;ot[o]?1:-1;break}return i}function r(e,t,r,n){for(var o=0;r--;)e[r]-=o,o=e[r]1;e.splice(0,1));}return function(n,o,i,a,s){var u,c,l,f,p,h,d,y,m,g,v,b,w,S,k,E,A,T=n.s==o.s?1:-1,P=n.c,x=o.c;if(!(P&&P[0]&&x&&x[0]))return new O(n.s&&o.s&&(P?!x||P[0]!=x[0]:x)?P&&0==P[0]||!x?0*T:T/0:NaN);for(m=(y=new O(T)).c=[],T=i+(c=n.e-o.e)+1,s||(s=ee,c=ae(n.e/te)-ae(o.e/te),T=T/te|0),l=0;x[l]==(P[l]||0);l++);if(x[l]>(P[l]||0)&&c--,T<0)m.push(1),f=!0;else{for(S=P.length,E=x.length,l=0,T+=2,(p=J(s/(x[0]+1)))>1&&(x=e(x,p,s),P=e(P,p,s),E=x.length,S=P.length),w=E,v=(g=P.slice(0,E)).length;v=s/2&&k++;do{if(p=0,(u=t(x,g,E,v))<0){if(b=g[0],E!=v&&(b=b*s+(g[1]||0)),(p=J(b/k))>1)for(p>=s&&(p=s-1),d=(h=e(x,p,s)).length,v=g.length;1==t(h,g,d,v);)p--,r(h,E=10;T/=10,l++);B(y,i+(y.e=l+c*te-1)+1,a,f)}else y.e=c,y.r=+f;return y}}(),s=/^(-?)0([xbo])(?=\w[\w.]*$)/i,u=/^([^.]+)\.$/,c=/^\.([^.]+)$/,l=/^-?(Infinity|NaN)$/,f=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,r,n){var o,i=r?t:t.replace(f,"");if(l.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!r&&(i=i.replace(s,(function(e,t,r){return o="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=o?e:t})),n&&(o=n,i=i.replace(u,"$1").replace(c,"0.$1")),t!=i))return new O(i,o);if(O.DEBUG)throw Error(Z+"Not a"+(n?" base "+n:"")+" number: "+t);e.s=null}e.c=e.e=null},p.absoluteValue=p.abs=function(){var e=new O(this);return e.s<0&&(e.s=1),e},p.comparedTo=function(e,t){return ue(this,new O(e,t))},p.decimalPlaces=p.dp=function(e,t){var r,n,o,i=this;if(null!=e)return ce(e,0,ie),null==t?t=y:ce(t,0,8),B(new O(i),e+i.e+1,t);if(!(r=i.c))return null;if(n=((o=r.length-1)-ae(this.e/te))*te,o=r[o])for(;o%10==0;o/=10,n--);return n<0&&(n=0),n},p.dividedBy=p.div=function(e,t){return r(this,new O(e,t),d,y)},p.dividedToIntegerBy=p.idiv=function(e,t){return r(this,new O(e,t),0,1)},p.exponentiatedBy=p.pow=function(e,t){var r,n,o,i,a,s,u,c,l=this;if((e=new O(e)).c&&!e.isInteger())throw Error(Z+"Exponent not an integer: "+_(e));if(null!=t&&(t=new O(t)),a=e.e>14,!l.c||!l.c[0]||1==l.c[0]&&!l.e&&1==l.c.length||!e.c||!e.c[0])return c=new O(Math.pow(+_(l),a?e.s*(2-le(e)):+_(e))),t?c.mod(t):c;if(s=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new O(NaN);(n=!s&&l.isInteger()&&t.isInteger())&&(l=l.mod(t))}else{if(e.e>9&&(l.e>0||l.e<-1||(0==l.e?l.c[0]>1||a&&l.c[1]>=24e7:l.c[0]<8e13||a&&l.c[0]<=9999975e7)))return i=l.s<0&&le(e)?-0:0,l.e>-1&&(i=1/i),new O(s?1/i:i);k&&(i=Y(k/te+2))}for(a?(r=new O(.5),s&&(e.s=1),u=le(e)):u=(o=Math.abs(+_(e)))%2,c=new O(h);;){if(u){if(!(c=c.times(l)).c)break;i?c.c.length>i&&(c.c.length=i):n&&(c=c.mod(t))}if(o){if(0===(o=J(o/2)))break;u=o%2}else if(B(e=e.times(r),e.e+1,1),e.e>14)u=le(e);else{if(0===(o=+_(e)))break;u=o%2}l=l.times(l),i?l.c&&l.c.length>i&&(l.c.length=i):n&&(l=l.mod(t))}return n?c:(s&&(c=h.div(c)),t?c.mod(t):i?B(c,k,y,undefined):c)},p.integerValue=function(e){var t=new O(this);return null==e?e=y:ce(e,0,8),B(t,t.e+1,e)},p.isEqualTo=p.eq=function(e,t){return 0===ue(this,new O(e,t))},p.isFinite=function(){return!!this.c},p.isGreaterThan=p.gt=function(e,t){return ue(this,new O(e,t))>0},p.isGreaterThanOrEqualTo=p.gte=function(e,t){return 1===(t=ue(this,new O(e,t)))||0===t},p.isInteger=function(){return!!this.c&&ae(this.e/te)>this.c.length-2},p.isLessThan=p.lt=function(e,t){return ue(this,new O(e,t))<0},p.isLessThanOrEqualTo=p.lte=function(e,t){return-1===(t=ue(this,new O(e,t)))||0===t},p.isNaN=function(){return!this.s},p.isNegative=function(){return this.s<0},p.isPositive=function(){return this.s>0},p.isZero=function(){return!!this.c&&0==this.c[0]},p.minus=function(e,t){var r,n,o,i,a=this,s=a.s;if(t=(e=new O(e,t)).s,!s||!t)return new O(NaN);if(s!=t)return e.s=-t,a.plus(e);var u=a.e/te,c=e.e/te,l=a.c,f=e.c;if(!u||!c){if(!l||!f)return l?(e.s=-t,e):new O(f?a:NaN);if(!l[0]||!f[0])return f[0]?(e.s=-t,e):new O(l[0]?a:3==y?-0:0)}if(u=ae(u),c=ae(c),l=l.slice(),s=u-c){for((i=s<0)?(s=-s,o=l):(c=u,o=f),o.reverse(),t=s;t--;o.push(0));o.reverse()}else for(n=(i=(s=l.length)<(t=f.length))?s:t,s=t=0;t0)for(;t--;l[r++]=0);for(t=ee-1;n>s;){if(l[--n]=0;){for(r=0,p=b[o]%m,h=b[o]/m|0,i=o+(a=u);i>o;)r=((c=p*(c=v[--a]%m)+(s=h*c+(l=v[a]/m|0)*p)%m*m+d[i]+r)/y|0)+(s/m|0)+h*l,d[i--]=c%y;d[i]=r}return r?++n:d.splice(0,1),I(e,d,n)},p.negated=function(){var e=new O(this);return e.s=-e.s||null,e},p.plus=function(e,t){var r,n=this,o=n.s;if(t=(e=new O(e,t)).s,!o||!t)return new O(NaN);if(o!=t)return e.s=-t,n.minus(e);var i=n.e/te,a=e.e/te,s=n.c,u=e.c;if(!i||!a){if(!s||!u)return new O(o/0);if(!s[0]||!u[0])return u[0]?e:new O(s[0]?n:0*o)}if(i=ae(i),a=ae(a),s=s.slice(),o=i-a){for(o>0?(a=i,r=u):(o=-o,r=s),r.reverse();o--;r.push(0));r.reverse()}for((o=s.length)-(t=u.length)<0&&(r=u,u=s,s=r,t=o),o=0;t;)o=(s[--t]=s[t]+u[t]+o)/ee|0,s[t]=ee===s[t]?0:s[t]%ee;return o&&(s=[o].concat(s),++a),I(e,s,a)},p.precision=p.sd=function(e,t){var r,n,o,i=this;if(null!=e&&e!==!!e)return ce(e,1,ie),null==t?t=y:ce(t,0,8),B(new O(i),e,t);if(!(r=i.c))return null;if(n=(o=r.length-1)*te+1,o=r[o]){for(;o%10==0;o/=10,n--);for(o=r[0];o>=10;o/=10,n++);}return e&&i.e+1>n&&(n=i.e+1),n},p.shiftedBy=function(e){return ce(e,-9007199254740991,re),this.times("1e"+e)},p.squareRoot=p.sqrt=function(){var e,t,n,o,i,a=this,s=a.c,u=a.s,c=a.e,l=d+4,f=new O("0.5");if(1!==u||!s||!s[0])return new O(!u||u<0&&(!s||s[0])?NaN:s?a:1/0);if(0==(u=Math.sqrt(+_(a)))||u==1/0?(((t=se(s)).length+c)%2==0&&(t+="0"),u=Math.sqrt(+t),c=ae((c+1)/2)-(c<0||c%2),n=new O(t=u==1/0?"5e"+c:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+c)):n=new O(u+""),n.c[0])for((u=(c=n.e)+l)<3&&(u=0);;)if(i=n,n=f.times(i.plus(r(a,i,l,1))),se(i.c).slice(0,u)===(t=se(n.c)).slice(0,u)){if(n.e0&&d>0){for(i=d%s||s,l=h.substr(0,i);i0&&(l+=c+h.slice(i)),p&&(l="-"+l)}n=f?l+(r.decimalSeparator||"")+((u=+r.fractionGroupSize)?f.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):f):l}return(r.prefix||"")+n+(r.suffix||"")},p.toFraction=function(e){var t,n,o,i,a,s,u,c,l,f,p,d,m=this,g=m.c;if(null!=e&&(!(u=new O(e)).isInteger()&&(u.c||1!==u.s)||u.lt(h)))throw Error(Z+"Argument "+(u.isInteger()?"out of range: ":"not an integer: ")+_(u));if(!g)return new O(m);for(t=new O(h),l=n=new O(h),o=c=new O(h),d=se(g),a=t.e=d.length-m.e-1,t.c[0]=ne[(s=a%te)<0?te+s:s],e=!e||u.comparedTo(t)>0?a>0?t:l:u,s=b,b=1/0,u=new O(d),c.c[0]=0;f=r(u,t,0,1),1!=(i=n.plus(f.times(o))).comparedTo(e);)n=o,o=i,l=c.plus(f.times(i=l)),c=i,t=u.minus(f.times(i=t)),u=i;return i=r(e.minus(n),o,0,1),c=c.plus(i.times(l)),n=n.plus(i.times(o)),c.s=l.s=m.s,p=r(l,o,a*=2,y).minus(m).abs().comparedTo(r(c,n,a,y).minus(m).abs())<1?[l,o]:[c,n],b=s,p},p.toNumber=function(){return+_(this)},p.toPrecision=function(e,t){return null!=e&&ce(e,1,ie),P(this,e,t,2)},p.toString=function(e){var t,r=this,o=r.s,i=r.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=m||i>=g?fe(se(r.c),i):pe(se(r.c),i,"0"):10===e&&T?t=pe(se((r=B(new O(r),d+i+1,y)).c),r.e,"0"):(ce(e,2,A.length,"Base"),t=n(pe(se(r.c),i,"0"),10,e,o,!0)),o<0&&r.c[0]&&(t="-"+t)),t},p.valueOf=p.toJSON=function(){return _(this)},p._isBigNumber=!0,p[Symbol.toStringTag]="BigNumber",p[Symbol.for("nodejs.util.inspect.custom")]=p.valueOf,null!=t&&O.set(t),O}();var de=he.clone();de.DEBUG=!0;const ye=de;function me(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,s=[],u=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ge(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ge(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ge(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0&&e<=255)return!0;throw new Error("".concat(t," value must be between 0 and 255"))}var Ke=r(3626).A;function He(e){return He="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},He(e)}function ze(e){return ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ze(e)}function Xe(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof e)return!1;try{t=new ye(e)}catch(e){return!1}return!(!r&&t.isZero()||t.isNegative()||t.times(tt).gt(new ye("9223372036854775807").toString())||t.decimalPlaces()>7||t.isNaN()||!t.isFinite())}},{key:"constructAmountRequirementsError",value:function(e){return"".concat(e," argument must be of type String, represent a positive number and have at most 7 digits after the decimal")}},{key:"_checkUnsignedIntValue",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(void 0!==t)switch("string"==typeof t&&(t=parseFloat(t)),!0){case"number"!=typeof t||!Number.isFinite(t)||t%1!=0:throw new Error("".concat(e," value is invalid"));case t<0:throw new Error("".concat(e," value must be unsigned"));case!r||r&&r(t,e):return t;default:throw new Error("".concat(e," value is invalid"))}}},{key:"_toXDRAmount",value:function(e){var t=new ye(e).times(tt);return n.Hyper.fromString(t.toString())}},{key:"_fromXDRAmount",value:function(e){return new ye(e).div(tt).toFixed(7)}},{key:"_fromXDRPrice",value:function(e){return new ye(e.n()).div(new ye(e.d())).toString()}},{key:"_toXDRPrice",value:function(e){var t;if(e.n&&e.d)t=new i.Price(e);else{var r=function(e){for(var t,r,n=new ye(e),o=[[new ye(0),new ye(1)],[new ye(1),new ye(0)]],i=2;!n.gt(ve);){t=n.integerValue(ye.ROUND_FLOOR),r=n.minus(t);var a=t.times(o[i-1][0]).plus(o[i-2][0]),s=t.times(o[i-1][1]).plus(o[i-2][1]);if(a.gt(ve)||s.gt(ve))break;if(o.push([a,s]),r.eq(0))break;n=new ye(1).div(r),i+=1}var u=me(o[o.length-1],2),c=u[0],l=u[1];if(c.isZero()||l.isZero())throw new Error("Couldn't find approximation");return[c.toNumber(),l.toNumber()]}(e);t=new i.Price({n:parseInt(r[0],10),d:parseInt(r[1],10)})}if(t.n()<0||t.d()<0)throw new Error("price must be positive");return t}}],(t=null)&&Qe(e.prototype,t),r&&Qe(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}();function st(e){return T.encodeEd25519PublicKey(e.ed25519())}at.accountMerge=function(e){var t={};try{t.body=i.OperationBody.accountMerge(Ne(e.destination))}catch(e){throw new Error("destination is invalid")}return this.setSourceAccount(t,e),new i.Operation(t)},at.allowTrust=function(e){if(!T.isValidEd25519PublicKey(e.trustor))throw new Error("trustor is invalid");var t={};if(t.trustor=U.fromPublicKey(e.trustor).xdrAccountId(),e.assetCode.length<=4){var r=e.assetCode.padEnd(4,"\0");t.asset=i.AssetCode.assetTypeCreditAlphanum4(r)}else{if(!(e.assetCode.length<=12))throw new Error("Asset code must be 12 characters at max.");var n=e.assetCode.padEnd(12,"\0");t.asset=i.AssetCode.assetTypeCreditAlphanum12(n)}"boolean"==typeof e.authorize?e.authorize?t.authorize=i.TrustLineFlags.authorizedFlag().value:t.authorize=0:t.authorize=e.authorize;var o=new i.AllowTrustOp(t),a={};return a.body=i.OperationBody.allowTrust(o),this.setSourceAccount(a,e),new i.Operation(a)},at.bumpSequence=function(e){var t={};if("string"!=typeof e.bumpTo)throw new Error("bumpTo must be a string");try{new ye(e.bumpTo)}catch(e){throw new Error("bumpTo must be a stringified number")}t.bumpTo=n.Hyper.fromString(e.bumpTo);var r=new i.BumpSequenceOp(t),o={};return o.body=i.OperationBody.bumpSequence(r),this.setSourceAccount(o,e),new i.Operation(o)},at.changeTrust=function(e){var t={};if(e.asset instanceof F)t.line=e.asset.toChangeTrustXDRObject();else{if(!(e.asset instanceof Te))throw new TypeError("asset must be Asset or LiquidityPoolAsset");t.line=e.asset.toXDRObject()}if(void 0!==e.limit&&!this.isValidAmount(e.limit,!0))throw new TypeError(this.constructAmountRequirementsError("limit"));e.limit?t.limit=this._toXDRAmount(e.limit):t.limit=n.Hyper.fromString(new ye("9223372036854775807").toString()),e.source&&(t.source=e.source.masterKeypair);var r=new i.ChangeTrustOp(t),o={};return o.body=i.OperationBody.changeTrust(r),this.setSourceAccount(o,e),new i.Operation(o)},at.createAccount=function(e){if(!T.isValidEd25519PublicKey(e.destination))throw new Error("destination is invalid");if(!this.isValidAmount(e.startingBalance,!0))throw new TypeError(this.constructAmountRequirementsError("startingBalance"));var t={};t.destination=U.fromPublicKey(e.destination).xdrAccountId(),t.startingBalance=this._toXDRAmount(e.startingBalance);var r=new i.CreateAccountOp(t),n={};return n.body=i.OperationBody.createAccount(r),this.setSourceAccount(n,e),new i.Operation(n)},at.createClaimableBalance=function(e){if(!(e.asset instanceof F))throw new Error("must provide an asset for create claimable balance operation");if(!this.isValidAmount(e.amount))throw new TypeError(this.constructAmountRequirementsError("amount"));if(!Array.isArray(e.claimants)||0===e.claimants.length)throw new Error("must provide at least one claimant");var t={};t.asset=e.asset.toXDRObject(),t.amount=this._toXDRAmount(e.amount),t.claimants=Object.values(e.claimants).map((function(e){return e.toXDRObject()}));var r=new i.CreateClaimableBalanceOp(t),n={};return n.body=i.OperationBody.createClaimableBalance(r),this.setSourceAccount(n,e),new i.Operation(n)},at.claimClaimableBalance=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Fe(e.balanceId);var t={};t.balanceId=i.ClaimableBalanceId.fromXDR(e.balanceId,"hex");var r=new i.ClaimClaimableBalanceOp(t),n={};return n.body=i.OperationBody.claimClaimableBalance(r),this.setSourceAccount(n,e),new i.Operation(n)},at.clawbackClaimableBalance=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Fe(e.balanceId);var t={balanceId:i.ClaimableBalanceId.fromXDR(e.balanceId,"hex")},r={body:i.OperationBody.clawbackClaimableBalance(new i.ClawbackClaimableBalanceOp(t))};return this.setSourceAccount(r,e),new i.Operation(r)},at.createPassiveSellOffer=function(e){var t={};if(t.selling=e.selling.toXDRObject(),t.buying=e.buying.toXDRObject(),!this.isValidAmount(e.amount))throw new TypeError(this.constructAmountRequirementsError("amount"));if(t.amount=this._toXDRAmount(e.amount),void 0===e.price)throw new TypeError("price argument is required");t.price=this._toXDRPrice(e.price);var r=new i.CreatePassiveSellOfferOp(t),n={};return n.body=i.OperationBody.createPassiveSellOffer(r),this.setSourceAccount(n,e),new i.Operation(n)},at.inflation=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={};return t.body=i.OperationBody.inflation(),this.setSourceAccount(t,e),new i.Operation(t)},at.manageData=function(e){var t={};if(!("string"==typeof e.name&&e.name.length<=64))throw new Error("name must be a string, up to 64 characters");if(t.dataName=e.name,"string"!=typeof e.value&&!De.isBuffer(e.value)&&null!==e.value)throw new Error("value must be a string, Buffer or null");if("string"==typeof e.value?t.dataValue=De.from(e.value):t.dataValue=e.value,null!==t.dataValue&&t.dataValue.length>64)throw new Error("value cannot be longer that 64 bytes");var r=new i.ManageDataOp(t),n={};return n.body=i.OperationBody.manageData(r),this.setSourceAccount(n,e),new i.Operation(n)},at.manageSellOffer=function(e){var t={};if(t.selling=e.selling.toXDRObject(),t.buying=e.buying.toXDRObject(),!this.isValidAmount(e.amount,!0))throw new TypeError(this.constructAmountRequirementsError("amount"));if(t.amount=this._toXDRAmount(e.amount),void 0===e.price)throw new TypeError("price argument is required");t.price=this._toXDRPrice(e.price),void 0!==e.offerId?e.offerId=e.offerId.toString():e.offerId="0",t.offerId=n.Hyper.fromString(e.offerId);var r=new i.ManageSellOfferOp(t),o={};return o.body=i.OperationBody.manageSellOffer(r),this.setSourceAccount(o,e),new i.Operation(o)},at.manageBuyOffer=function(e){var t={};if(t.selling=e.selling.toXDRObject(),t.buying=e.buying.toXDRObject(),!this.isValidAmount(e.buyAmount,!0))throw new TypeError(this.constructAmountRequirementsError("buyAmount"));if(t.buyAmount=this._toXDRAmount(e.buyAmount),void 0===e.price)throw new TypeError("price argument is required");t.price=this._toXDRPrice(e.price),void 0!==e.offerId?e.offerId=e.offerId.toString():e.offerId="0",t.offerId=n.Hyper.fromString(e.offerId);var r=new i.ManageBuyOfferOp(t),o={};return o.body=i.OperationBody.manageBuyOffer(r),this.setSourceAccount(o,e),new i.Operation(o)},at.pathPaymentStrictReceive=function(e){switch(!0){case!e.sendAsset:throw new Error("Must specify a send asset");case!this.isValidAmount(e.sendMax):throw new TypeError(this.constructAmountRequirementsError("sendMax"));case!e.destAsset:throw new Error("Must provide a destAsset for a payment operation");case!this.isValidAmount(e.destAmount):throw new TypeError(this.constructAmountRequirementsError("destAmount"))}var t={};t.sendAsset=e.sendAsset.toXDRObject(),t.sendMax=this._toXDRAmount(e.sendMax);try{t.destination=Ne(e.destination)}catch(e){throw new Error("destination is invalid")}t.destAsset=e.destAsset.toXDRObject(),t.destAmount=this._toXDRAmount(e.destAmount);var r=e.path?e.path:[];t.path=r.map((function(e){return e.toXDRObject()}));var n=new i.PathPaymentStrictReceiveOp(t),o={};return o.body=i.OperationBody.pathPaymentStrictReceive(n),this.setSourceAccount(o,e),new i.Operation(o)},at.pathPaymentStrictSend=function(e){switch(!0){case!e.sendAsset:throw new Error("Must specify a send asset");case!this.isValidAmount(e.sendAmount):throw new TypeError(this.constructAmountRequirementsError("sendAmount"));case!e.destAsset:throw new Error("Must provide a destAsset for a payment operation");case!this.isValidAmount(e.destMin):throw new TypeError(this.constructAmountRequirementsError("destMin"))}var t={};t.sendAsset=e.sendAsset.toXDRObject(),t.sendAmount=this._toXDRAmount(e.sendAmount);try{t.destination=Ne(e.destination)}catch(e){throw new Error("destination is invalid")}t.destAsset=e.destAsset.toXDRObject(),t.destMin=this._toXDRAmount(e.destMin);var r=e.path?e.path:[];t.path=r.map((function(e){return e.toXDRObject()}));var n=new i.PathPaymentStrictSendOp(t),o={};return o.body=i.OperationBody.pathPaymentStrictSend(n),this.setSourceAccount(o,e),new i.Operation(o)},at.payment=function(e){if(!e.asset)throw new Error("Must provide an asset for a payment operation");if(!this.isValidAmount(e.amount))throw new TypeError(this.constructAmountRequirementsError("amount"));var t={};try{t.destination=Ne(e.destination)}catch(e){throw new Error("destination is invalid")}t.asset=e.asset.toXDRObject(),t.amount=this._toXDRAmount(e.amount);var r=new i.PaymentOp(t),n={};return n.body=i.OperationBody.payment(r),this.setSourceAccount(n,e),new i.Operation(n)},at.setOptions=function(e){var t={};if(e.inflationDest){if(!T.isValidEd25519PublicKey(e.inflationDest))throw new Error("inflationDest is invalid");t.inflationDest=U.fromPublicKey(e.inflationDest).xdrAccountId()}if(t.clearFlags=this._checkUnsignedIntValue("clearFlags",e.clearFlags),t.setFlags=this._checkUnsignedIntValue("setFlags",e.setFlags),t.masterWeight=this._checkUnsignedIntValue("masterWeight",e.masterWeight,qe),t.lowThreshold=this._checkUnsignedIntValue("lowThreshold",e.lowThreshold,qe),t.medThreshold=this._checkUnsignedIntValue("medThreshold",e.medThreshold,qe),t.highThreshold=this._checkUnsignedIntValue("highThreshold",e.highThreshold,qe),void 0!==e.homeDomain&&"string"!=typeof e.homeDomain)throw new TypeError("homeDomain argument must be of type String");if(t.homeDomain=e.homeDomain,e.signer){var r,n=this._checkUnsignedIntValue("signer.weight",e.signer.weight,qe),o=0;if(e.signer.ed25519PublicKey){if(!T.isValidEd25519PublicKey(e.signer.ed25519PublicKey))throw new Error("signer.ed25519PublicKey is invalid.");var a=T.decodeEd25519PublicKey(e.signer.ed25519PublicKey);r=new i.SignerKey.signerKeyTypeEd25519(a),o+=1}if(e.signer.preAuthTx){if("string"==typeof e.signer.preAuthTx&&(e.signer.preAuthTx=Ve.from(e.signer.preAuthTx,"hex")),!Ve.isBuffer(e.signer.preAuthTx)||32!==e.signer.preAuthTx.length)throw new Error("signer.preAuthTx must be 32 bytes Buffer.");r=new i.SignerKey.signerKeyTypePreAuthTx(e.signer.preAuthTx),o+=1}if(e.signer.sha256Hash){if("string"==typeof e.signer.sha256Hash&&(e.signer.sha256Hash=Ve.from(e.signer.sha256Hash,"hex")),!Ve.isBuffer(e.signer.sha256Hash)||32!==e.signer.sha256Hash.length)throw new Error("signer.sha256Hash must be 32 bytes Buffer.");r=new i.SignerKey.signerKeyTypeHashX(e.signer.sha256Hash),o+=1}if(e.signer.ed25519SignedPayload){if(!T.isValidSignedPayload(e.signer.ed25519SignedPayload))throw new Error("signer.ed25519SignedPayload is invalid.");var s=T.decodeSignedPayload(e.signer.ed25519SignedPayload),u=i.SignerKeyEd25519SignedPayload.fromXDR(s);r=i.SignerKey.signerKeyTypeEd25519SignedPayload(u),o+=1}if(1!==o)throw new Error("Signer object must contain exactly one of signer.ed25519PublicKey, signer.sha256Hash, signer.preAuthTx.");t.signer=new i.Signer({key:r,weight:n})}var c=new i.SetOptionsOp(t),l={};return l.body=i.OperationBody.setOptions(c),this.setSourceAccount(l,e),new i.Operation(l)},at.beginSponsoringFutureReserves=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!T.isValidEd25519PublicKey(e.sponsoredId))throw new Error("sponsoredId is invalid");var t=new i.BeginSponsoringFutureReservesOp({sponsoredId:U.fromPublicKey(e.sponsoredId).xdrAccountId()}),r={};return r.body=i.OperationBody.beginSponsoringFutureReserves(t),this.setSourceAccount(r,e),new i.Operation(r)},at.endSponsoringFutureReserves=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={};return t.body=i.OperationBody.endSponsoringFutureReserves(),this.setSourceAccount(t,e),new i.Operation(t)},at.revokeAccountSponsorship=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!T.isValidEd25519PublicKey(e.account))throw new Error("account is invalid");var t=i.LedgerKey.account(new i.LedgerKeyAccount({accountId:U.fromPublicKey(e.account).xdrAccountId()})),r=i.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(t),n={};return n.body=i.OperationBody.revokeSponsorship(r),this.setSourceAccount(n,e),new i.Operation(n)},at.revokeTrustlineSponsorship=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!T.isValidEd25519PublicKey(t.account))throw new Error("account is invalid");if(t.asset instanceof F)e=t.asset.toTrustLineXDRObject();else{if(!(t.asset instanceof Ce))throw new TypeError("asset must be an Asset or LiquidityPoolId");e=t.asset.toXDRObject()}var r=i.LedgerKey.trustline(new i.LedgerKeyTrustLine({accountId:U.fromPublicKey(t.account).xdrAccountId(),asset:e})),n=i.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(r),o={};return o.body=i.OperationBody.revokeSponsorship(n),this.setSourceAccount(o,t),new i.Operation(o)},at.revokeOfferSponsorship=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!T.isValidEd25519PublicKey(e.seller))throw new Error("seller is invalid");if("string"!=typeof e.offerId)throw new Error("offerId is invalid");var t=i.LedgerKey.offer(new i.LedgerKeyOffer({sellerId:U.fromPublicKey(e.seller).xdrAccountId(),offerId:i.Int64.fromString(e.offerId)})),r=i.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(t),n={};return n.body=i.OperationBody.revokeSponsorship(r),this.setSourceAccount(n,e),new i.Operation(n)},at.revokeDataSponsorship=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!T.isValidEd25519PublicKey(e.account))throw new Error("account is invalid");if("string"!=typeof e.name||e.name.length>64)throw new Error("name must be a string, up to 64 characters");var t=i.LedgerKey.data(new i.LedgerKeyData({accountId:U.fromPublicKey(e.account).xdrAccountId(),dataName:e.name})),r=i.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(t),n={};return n.body=i.OperationBody.revokeSponsorship(r),this.setSourceAccount(n,e),new i.Operation(n)},at.revokeClaimableBalanceSponsorship=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("string"!=typeof e.balanceId)throw new Error("balanceId is invalid");var t=i.LedgerKey.claimableBalance(new i.LedgerKeyClaimableBalance({balanceId:i.ClaimableBalanceId.fromXDR(e.balanceId,"hex")})),r=i.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(t),n={};return n.body=i.OperationBody.revokeSponsorship(r),this.setSourceAccount(n,e),new i.Operation(n)},at.revokeLiquidityPoolSponsorship=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("string"!=typeof e.liquidityPoolId)throw new Error("liquidityPoolId is invalid");var t=i.LedgerKey.liquidityPool(new i.LedgerKeyLiquidityPool({liquidityPoolId:i.PoolId.fromXDR(e.liquidityPoolId,"hex")})),r=i.RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(t),n={body:i.OperationBody.revokeSponsorship(r)};return this.setSourceAccount(n,e),new i.Operation(n)},at.revokeSignerSponsorship=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!T.isValidEd25519PublicKey(t.account))throw new Error("account is invalid");if(t.signer.ed25519PublicKey){if(!T.isValidEd25519PublicKey(t.signer.ed25519PublicKey))throw new Error("signer.ed25519PublicKey is invalid.");var r=T.decodeEd25519PublicKey(t.signer.ed25519PublicKey);e=new i.SignerKey.signerKeyTypeEd25519(r)}else if(t.signer.preAuthTx){var n;if(n="string"==typeof t.signer.preAuthTx?Ke.from(t.signer.preAuthTx,"hex"):t.signer.preAuthTx,!Ke.isBuffer(n)||32!==n.length)throw new Error("signer.preAuthTx must be 32 bytes Buffer.");e=new i.SignerKey.signerKeyTypePreAuthTx(n)}else{if(!t.signer.sha256Hash)throw new Error("signer is invalid");var o;if(o="string"==typeof t.signer.sha256Hash?Ke.from(t.signer.sha256Hash,"hex"):t.signer.sha256Hash,!Ke.isBuffer(o)||32!==o.length)throw new Error("signer.sha256Hash must be 32 bytes Buffer.");e=new i.SignerKey.signerKeyTypeHashX(o)}var a=new i.RevokeSponsorshipOpSigner({accountId:U.fromPublicKey(t.account).xdrAccountId(),signerKey:e}),s=i.RevokeSponsorshipOp.revokeSponsorshipSigner(a),u={};return u.body=i.OperationBody.revokeSponsorship(s),this.setSourceAccount(u,t),new i.Operation(u)},at.clawback=function(e){var t={};if(!this.isValidAmount(e.amount))throw new TypeError(this.constructAmountRequirementsError("amount"));t.amount=this._toXDRAmount(e.amount),t.asset=e.asset.toXDRObject();try{t.from=Ne(e.from)}catch(e){throw new Error("from address is invalid")}var r={body:i.OperationBody.clawback(new i.ClawbackOp(t))};return this.setSourceAccount(r,e),new i.Operation(r)},at.setTrustLineFlags=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={};if("object"!==He(e.flags)||0===Object.keys(e.flags).length)throw new Error("opts.flags must be a map of boolean flags to modify");var r={authorized:i.TrustLineFlags.authorizedFlag(),authorizedToMaintainLiabilities:i.TrustLineFlags.authorizedToMaintainLiabilitiesFlag(),clawbackEnabled:i.TrustLineFlags.trustlineClawbackEnabledFlag()},n=0,o=0;Object.keys(e.flags).forEach((function(t){if(!Object.prototype.hasOwnProperty.call(r,t))throw new Error("unsupported flag name specified: ".concat(t));var i=e.flags[t],a=r[t].value;!0===i?o|=a:!1===i&&(n|=a)})),t.trustor=U.fromPublicKey(e.trustor).xdrAccountId(),t.asset=e.asset.toXDRObject(),t.clearFlags=n,t.setFlags=o;var a={body:i.OperationBody.setTrustLineFlags(new i.SetTrustLineFlagsOp(t))};return this.setSourceAccount(a,e),new i.Operation(a)},at.liquidityPoolDeposit=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.liquidityPoolId,r=e.maxAmountA,n=e.maxAmountB,o=e.minPrice,a=e.maxPrice,s={};if(!t)throw new TypeError("liquidityPoolId argument is required");if(s.liquidityPoolId=i.PoolId.fromXDR(t,"hex"),!this.isValidAmount(r,!0))throw new TypeError(this.constructAmountRequirementsError("maxAmountA"));if(s.maxAmountA=this._toXDRAmount(r),!this.isValidAmount(n,!0))throw new TypeError(this.constructAmountRequirementsError("maxAmountB"));if(s.maxAmountB=this._toXDRAmount(n),void 0===o)throw new TypeError("minPrice argument is required");if(s.minPrice=this._toXDRPrice(o),void 0===a)throw new TypeError("maxPrice argument is required");s.maxPrice=this._toXDRPrice(a);var u=new i.LiquidityPoolDepositOp(s),c={body:i.OperationBody.liquidityPoolDeposit(u)};return this.setSourceAccount(c,e),new i.Operation(c)},at.liquidityPoolWithdraw=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={};if(!e.liquidityPoolId)throw new TypeError("liquidityPoolId argument is required");if(t.liquidityPoolId=i.PoolId.fromXDR(e.liquidityPoolId,"hex"),!this.isValidAmount(e.amount))throw new TypeError(this.constructAmountRequirementsError("amount"));if(t.amount=this._toXDRAmount(e.amount),!this.isValidAmount(e.minAmountA,!0))throw new TypeError(this.constructAmountRequirementsError("minAmountA"));if(t.minAmountA=this._toXDRAmount(e.minAmountA),!this.isValidAmount(e.minAmountB,!0))throw new TypeError(this.constructAmountRequirementsError("minAmountB"));t.minAmountB=this._toXDRAmount(e.minAmountB);var r=new i.LiquidityPoolWithdrawOp(t),n={body:i.OperationBody.liquidityPoolWithdraw(r)};return this.setSourceAccount(n,e),new i.Operation(n)},at.invokeHostFunction=function(e){if(!e.func)throw new TypeError("host function invocation ('func') required (got ".concat(JSON.stringify(e),")"));var t=new i.InvokeHostFunctionOp({hostFunction:e.func,auth:e.auth||[]}),r={body:i.OperationBody.invokeHostFunction(t)};return this.setSourceAccount(r,e),new i.Operation(r)},at.extendFootprintTtl=function(e){var t;if((null!==(t=e.extendTo)&&void 0!==t?t:-1)<=0)throw new RangeError("extendTo has to be positive");var r=new i.ExtendFootprintTtlOp({ext:new i.ExtensionPoint(0),extendTo:e.extendTo}),n={body:i.OperationBody.extendFootprintTtl(r)};return this.setSourceAccount(n,e),new i.Operation(n)},at.restoreFootprint=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new i.RestoreFootprintOp({ext:new i.ExtensionPoint(0)}),r={body:i.OperationBody.restoreFootprint(t)};return this.setSourceAccount(r,null!=e?e:{}),new i.Operation(r)},at.createStellarAssetContract=function(e){var t=e.asset;if("string"==typeof t){var r=Ye(t.split(":"),2),n=r[0],o=r[1];t=new F(n,o)}if(!(t instanceof F))throw new TypeError("expected Asset in 'opts.asset', got ".concat(t));return this.invokeHostFunction({source:e.source,auth:e.auth,func:i.HostFunction.hostFunctionTypeCreateContract(new i.CreateContractArgs({executable:i.ContractExecutable.contractExecutableStellarAsset(),contractIdPreimage:i.ContractIdPreimage.contractIdPreimageFromAsset(t.toXDRObject())}))})},at.invokeContractFunction=function(e){var t=new Ge(e.contract);if("contract"!==t._type)throw new TypeError("expected contract strkey instance, got ".concat(t));return this.invokeHostFunction({source:e.source,auth:e.auth,func:i.HostFunction.hostFunctionTypeInvokeContract(new i.InvokeContractArgs({contractAddress:t.toScAddress(),functionName:e.function,args:e.args}))})},at.createCustomContract=function(e){var t,r=We.from(e.salt||U.random().xdrPublicKey().value());if(!e.wasmHash||32!==e.wasmHash.length)throw new TypeError("expected hash(contract WASM) in 'opts.wasmHash', got ".concat(e.wasmHash));if(32!==r.length)throw new TypeError("expected 32-byte salt in 'opts.salt', got ".concat(e.wasmHash));return this.invokeHostFunction({source:e.source,auth:e.auth,func:i.HostFunction.hostFunctionTypeCreateContractV2(new i.CreateContractArgsV2({executable:i.ContractExecutable.contractExecutableWasm(We.from(e.wasmHash)),contractIdPreimage:i.ContractIdPreimage.contractIdPreimageFromAddress(new i.ContractIdPreimageFromAddress({address:e.address.toScAddress(),salt:r})),constructorArgs:null!==(t=e.constructorArgs)&&void 0!==t?t:[]}))})},at.uploadContractWasm=function(e){return this.invokeHostFunction({source:e.source,auth:e.auth,func:i.HostFunction.hostFunctionTypeUploadContractWasm(We.from(e.wasm))})};var ut=r(3626).A;function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function lt(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:null;switch(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._type=t,this._value=r,this._type){case pt:break;case ht:e._validateIdValue(r);break;case dt:e._validateTextValue(r);break;case yt:case mt:e._validateHashValue(r),"string"==typeof r&&(this._value=ut.from(r,"hex"));break;default:throw new Error("Invalid memo type")}}return t=e,o=[{key:"_validateIdValue",value:function(e){var t,r=new Error("Expects a int64 as a string. Got ".concat(e));if("string"!=typeof e)throw r;try{t=new ye(e)}catch(e){throw r}if(!t.isFinite())throw r;if(t.isNaN())throw r}},{key:"_validateTextValue",value:function(e){if(!i.Memo.armTypeForArm("text").isValid(e))throw new Error("Expects string, array or buffer, max 28 bytes")}},{key:"_validateHashValue",value:function(e){var t,r=new Error("Expects a 32 byte hash value or hex encoded string. Got ".concat(e));if(null==e)throw r;if("string"==typeof e){if(!/^[0-9A-Fa-f]{64}$/g.test(e))throw r;t=ut.from(e,"hex")}else{if(!ut.isBuffer(e))throw r;t=ut.from(e)}if(!t.length||32!==t.length)throw r}},{key:"none",value:function(){return new e(pt)}},{key:"text",value:function(t){return new e(dt,t)}},{key:"id",value:function(t){return new e(ht,t)}},{key:"hash",value:function(t){return new e(yt,t)}},{key:"return",value:function(t){return new e(mt,t)}},{key:"fromXDRObject",value:function(t){switch(t.arm()){case"id":return e.id(t.value().toString());case"text":return e.text(t.value());case"hash":return e.hash(t.value());case"retHash":return e.return(t.value())}if(void 0===t.value())return e.none();throw new Error("Unknown type")}}],(r=[{key:"type",get:function(){return this._type},set:function(e){throw new Error("Memo is immutable")}},{key:"value",get:function(){switch(this._type){case pt:return null;case ht:case dt:return this._value;case yt:case mt:return ut.from(this._value);default:throw new Error("Invalid memo type")}},set:function(e){throw new Error("Memo is immutable")}},{key:"toXDRObject",value:function(){switch(this._type){case pt:return i.Memo.memoNone();case ht:return i.Memo.memoId(n.UnsignedHyper.fromString(this._value));case dt:return i.Memo.memoText(this._value);case yt:return i.Memo.memoHash(this._value);case mt:return i.Memo.memoReturn(this._value);default:return null}}}])&<(t.prototype,r),o&<(t,o),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,o}(),vt=r(3626).A;function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}function wt(e,t){for(var r=0;r=this.operations.length)throw new RangeError("invalid operation index");var t=this.operations[e];try{t=at.createClaimableBalance(t)}catch(e){throw new TypeError("expected createClaimableBalance, got ".concat(t.type,": ").concat(e))}var r=T.decodeEd25519PublicKey(je(this.source)),n=u(i.HashIdPreimage.envelopeTypeOpId(new i.HashIdPreimageOperationId({sourceAccount:i.AccountId.publicKeyTypeEd25519(r),seqNum:i.SequenceNumber.fromString(this.sequence),opNum:e})).toXDR("raw"));return i.ClaimableBalanceId.claimableBalanceIdTypeV0(n).toXDR("hex")}}])&&wt(r.prototype,n),o&&wt(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(G),Pt=r(3626).A;function xt(e){return xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xt(e)}function It(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&void 0!==arguments[1]?arguments[1]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw new Error("must specify source account for the transaction");if(void 0===r.fee)throw new Error("must specify fee for the transaction (in stroops)");this.source=t,this.operations=[],this.baseFee=r.fee,this.timebounds=r.timebounds?rr({},r.timebounds):null,this.ledgerbounds=r.ledgerbounds?rr({},r.ledgerbounds):null,this.minAccountSequence=r.minAccountSequence||null,this.minAccountSequenceAge=r.minAccountSequenceAge||null,this.minAccountSequenceLedgerGap=r.minAccountSequenceLedgerGap||null,this.extraSigners=r.extraSigners?Qt(r.extraSigners):null,this.memo=r.memo||gt.none(),this.networkPassphrase=r.networkPassphrase||null,this.sorobanData=r.sorobanData?new $t(r.sorobanData).build():null}return t=e,o=[{key:"cloneFrom",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(t instanceof Ot))throw new TypeError("expected a 'Transaction', got: ".concat(t));var n,o=(BigInt(t.sequence)-1n).toString();if(T.isValidMed25519PublicKey(t.source))n=Kt.fromAddress(t.source,o);else{if(!T.isValidEd25519PublicKey(t.source))throw new TypeError("unsupported tx source account: ".concat(t.source));n=new Ft(t.source,o)}var i=new e(n,rr({fee:(parseInt(t.fee,10)/t.operations.length||ar).toString(),memo:t.memo,networkPassphrase:t.networkPassphrase,timebounds:t.timeBounds,ledgerbounds:t.ledgerBounds,minAccountSequence:t.minAccountSequence,minAccountSequenceAge:t.minAccountSequenceAge,minAccountSequenceLedgerGap:t.minAccountSequenceLedgerGap,extraSigners:t.extraSigners},r));return t._tx.operations().forEach((function(e){return i.addOperation(e)})),i}},{key:"buildFeeBumpTransaction",value:function(e,t,r,n){var o=r.operations.length,a=new ye(r.fee).div(o),s=new ye(t);if(s.lt(a))throw new Error("Invalid baseFee, it should be at least ".concat(a," stroops."));var u=new ye(ar);if(s.lt(u))throw new Error("Invalid baseFee, it should be at least ".concat(u," stroops."));var c,l=r.toEnvelope();if(l.switch()===i.EnvelopeType.envelopeTypeTxV0()){var f=l.v0().tx(),p=new i.Transaction({sourceAccount:new i.MuxedAccount.keyTypeEd25519(f.sourceAccountEd25519()),fee:f.fee(),seqNum:f.seqNum(),cond:i.Preconditions.precondTime(f.timeBounds()),memo:f.memo(),operations:f.operations(),ext:new i.TransactionExt(0)});l=new i.TransactionEnvelope.envelopeTypeTx(new i.TransactionV1Envelope({tx:p,signatures:l.v0().signatures()}))}c="string"==typeof e?Ne(e):e.xdrMuxedAccount();var h=new i.FeeBumpTransaction({feeSource:c,fee:i.Int64.fromString(s.times(o+1).toString()),innerTx:i.FeeBumpTransactionInnerTx.envelopeTypeTx(l.v1()),ext:new i.FeeBumpTransactionExt(0)}),d=new i.FeeBumpTransactionEnvelope({tx:h,signatures:[]}),y=new i.TransactionEnvelope.envelopeTypeTxFeeBump(d);return new Nt(y,n)}},{key:"fromXDR",value:function(e,t){return"string"==typeof e&&(e=i.TransactionEnvelope.fromXDR(e,"base64")),e.switch()===i.EnvelopeType.envelopeTypeTxFeeBump()?new Nt(e,t):new Ot(e,t)}}],(r=[{key:"addOperation",value:function(e){return this.operations.push(e),this}},{key:"addOperationAt",value:function(e,t){return this.operations.splice(t,0,e),this}},{key:"clearOperations",value:function(){return this.operations=[],this}},{key:"clearOperationAt",value:function(e){return this.operations.splice(e,1),this}},{key:"addMemo",value:function(e){return this.memo=e,this}},{key:"setTimeout",value:function(e){if(null!==this.timebounds&&this.timebounds.maxTime>0)throw new Error("TimeBounds.max_time has been already set - setting timeout would overwrite it.");if(e<0)throw new Error("timeout cannot be negative");if(e>0){var t=Math.floor(Date.now()/1e3)+e;null===this.timebounds?this.timebounds={minTime:0,maxTime:t}:this.timebounds={minTime:this.timebounds.minTime,maxTime:t}}else this.timebounds={minTime:0,maxTime:0};return this}},{key:"setTimebounds",value:function(e,t){if("number"==typeof e&&(e=new Date(1e3*e)),"number"==typeof t&&(t=new Date(1e3*t)),null!==this.timebounds)throw new Error("TimeBounds has been already set - setting timebounds would overwrite it.");var r=Math.floor(e.valueOf()/1e3),n=Math.floor(t.valueOf()/1e3);if(r<0)throw new Error("min_time cannot be negative");if(n<0)throw new Error("max_time cannot be negative");if(n>0&&r>n)throw new Error("min_time cannot be greater than max_time");return this.timebounds={minTime:r,maxTime:n},this}},{key:"setLedgerbounds",value:function(e,t){if(null!==this.ledgerbounds)throw new Error("LedgerBounds has been already set - setting ledgerbounds would overwrite it.");if(e<0)throw new Error("min_ledger cannot be negative");if(t<0)throw new Error("max_ledger cannot be negative");if(t>0&&e>t)throw new Error("min_ledger cannot be greater than max_ledger");return this.ledgerbounds={minLedger:e,maxLedger:t},this}},{key:"setMinAccountSequence",value:function(e){if(null!==this.minAccountSequence)throw new Error("min_account_sequence has been already set - setting min_account_sequence would overwrite it.");return this.minAccountSequence=e,this}},{key:"setMinAccountSequenceAge",value:function(e){if("number"!=typeof e)throw new Error("min_account_sequence_age must be a number");if(null!==this.minAccountSequenceAge)throw new Error("min_account_sequence_age has been already set - setting min_account_sequence_age would overwrite it.");if(e<0)throw new Error("min_account_sequence_age cannot be negative");return this.minAccountSequenceAge=e,this}},{key:"setMinAccountSequenceLedgerGap",value:function(e){if(null!==this.minAccountSequenceLedgerGap)throw new Error("min_account_sequence_ledger_gap has been already set - setting min_account_sequence_ledger_gap would overwrite it.");if(e<0)throw new Error("min_account_sequence_ledger_gap cannot be negative");return this.minAccountSequenceLedgerGap=e,this}},{key:"setExtraSigners",value:function(e){if(!Array.isArray(e))throw new Error("extra_signers must be an array of strings.");if(null!==this.extraSigners)throw new Error("extra_signers has been already set - setting extra_signers would overwrite it.");if(e.length>2)throw new Error("extra_signers cannot be longer than 2 elements.");return this.extraSigners=Qt(e),this}},{key:"setNetworkPassphrase",value:function(e){return this.networkPassphrase=e,this}},{key:"setSorobanData",value:function(e){return this.sorobanData=new $t(e).build(),this}},{key:"build",value:function(){var e=new ye(this.source.sequenceNumber()).plus(1),t={fee:new ye(this.baseFee).times(this.operations.length).toNumber(),seqNum:i.SequenceNumber.fromString(e.toString()),memo:this.memo?this.memo.toXDRObject():null};if(null===this.timebounds||void 0===this.timebounds.minTime||void 0===this.timebounds.maxTime)throw new Error("TimeBounds has to be set or you must call setTimeout(TimeoutInfinite).");cr(this.timebounds.minTime)&&(this.timebounds.minTime=this.timebounds.minTime.getTime()/1e3),cr(this.timebounds.maxTime)&&(this.timebounds.maxTime=this.timebounds.maxTime.getTime()/1e3),this.timebounds.minTime=n.UnsignedHyper.fromString(this.timebounds.minTime.toString()),this.timebounds.maxTime=n.UnsignedHyper.fromString(this.timebounds.maxTime.toString());var r=new i.TimeBounds(this.timebounds);if(this.hasV2Preconditions()){var o=null;null!==this.ledgerbounds&&(o=new i.LedgerBounds(this.ledgerbounds));var a=this.minAccountSequence||"0";a=i.SequenceNumber.fromString(a);var s=n.UnsignedHyper.fromString(null!==this.minAccountSequenceAge?this.minAccountSequenceAge.toString():"0"),u=this.minAccountSequenceLedgerGap||0,c=null!==this.extraSigners?this.extraSigners.map(Jt.decodeAddress):[];t.cond=i.Preconditions.precondV2(new i.PreconditionsV2({timeBounds:r,ledgerBounds:o,minSeqNum:a,minSeqAge:s,minSeqLedgerGap:u,extraSigners:c}))}else t.cond=i.Preconditions.precondTime(r);t.sourceAccount=Ne(this.source.accountId()),this.sorobanData?t.ext=new i.TransactionExt(1,this.sorobanData):t.ext=new i.TransactionExt(0,i.Void);var l=new i.Transaction(t);l.operations(this.operations);var f=new i.TransactionEnvelope.envelopeTypeTx(new i.TransactionV1Envelope({tx:l})),p=new Ot(f,this.networkPassphrase);return this.source.incrementSequenceNumber(),p}},{key:"hasV2Preconditions",value:function(){return null!==this.ledgerbounds||null!==this.minAccountSequence||null!==this.minAccountSequenceAge||null!==this.minAccountSequenceLedgerGap||null!==this.extraSigners&&this.extraSigners.length>0}}])&&or(t.prototype,r),o&&or(t,o),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,o}();function cr(e){return e instanceof Date&&!isNaN(e)}var lr={PUBLIC:"Public Global Stellar Network ; September 2015",TESTNET:"Test SDF Network ; September 2015",FUTURENET:"Test SDF Future Network ; October 2022",SANDBOX:"Local Sandbox Stellar Network ; September 2022",STANDALONE:"Standalone Network ; February 2017"};function fr(e){return fr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fr(e)}function pr(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return hr(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?hr(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function hr(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&(r=t>r.length?["0",r.toString().padStart(t,"0")].join("."):[r.slice(0,-t),r.slice(-t)].join(".")),r.replace(/(\.\d*?)0+$/,"$1")}},{key:"parseTokenAmount",value:function(e,t){var r,n=pr(e.split(".").slice()),o=n[0],i=n[1];if(n.slice(2).length)throw new Error("Invalid decimal value: ".concat(e));return BigInt(o+(null!==(r=null==i?void 0:i.padEnd(t,"0"))&&void 0!==r?r:"0".repeat(t))).toString()}}],(t=null)&&dr(e.prototype,t),r&&dr(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}();function gr(e){return gr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gr(e)}function vr(e,t){for(var r=0;r1?t-1:0),n=1;nNumber.MAX_SAFE_INTEGER||e>64n),r=BigInt.asUintN(64,e);return i.ScVal.scvI128(new i.Int128Parts({hi:new i.Int64(t),lo:new i.Uint64(r)}))}},{key:"toU128",value:function(){this._sizeCheck(128);var e=this.int.toBigInt();return i.ScVal.scvU128(new i.UInt128Parts({hi:new i.Uint64(BigInt.asUintN(64,e>>64n)),lo:new i.Uint64(BigInt.asUintN(64,e))}))}},{key:"toI256",value:function(){var e=this.int.toBigInt(),t=BigInt.asIntN(64,e>>192n),r=BigInt.asUintN(64,e>>128n),n=BigInt.asUintN(64,e>>64n),o=BigInt.asUintN(64,e);return i.ScVal.scvI256(new i.Int256Parts({hiHi:new i.Int64(t),hiLo:new i.Uint64(r),loHi:new i.Uint64(n),loLo:new i.Uint64(o)}))}},{key:"toU256",value:function(){var e=this.int.toBigInt(),t=BigInt.asUintN(64,e>>192n),r=BigInt.asUintN(64,e>>128n),n=BigInt.asUintN(64,e>>64n),o=BigInt.asUintN(64,e);return i.ScVal.scvU256(new i.UInt256Parts({hiHi:new i.Uint64(t),hiLo:new i.Uint64(r),loHi:new i.Uint64(n),loLo:new i.Uint64(o)}))}},{key:"toScVal",value:function(){switch(this.type){case"i64":return this.toI64();case"i128":return this.toI128();case"i256":return this.toI256();case"u64":return this.toU64();case"u128":return this.toU128();case"u256":return this.toU256();default:throw TypeError("invalid type: ".concat(this.type))}}},{key:"valueOf",value:function(){return this.int.valueOf()}},{key:"toString",value:function(){return this.int.toString()}},{key:"toJSON",value:function(){return{value:this.toBigInt().toString(),type:this.type}}},{key:"_sizeCheck",value:function(e){if(this.int.size>e)throw RangeError("value too large for ".concat(e," bits (").concat(this.type,")"))}}])&&en(e.prototype,t),r&&en(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}();function on(e){return on="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},on(e)}function an(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&void 0!==arguments[1]?arguments[1]:{};switch(gn(e)){case"object":var r,n,o;if(null===e)return i.ScVal.scvVoid();if(e instanceof i.ScVal)return e;if(e instanceof Ge)return e.toScVal();if(e instanceof U)return vn(e.publicKey(),{type:"address"});if(e instanceof wr)return e.address().toScVal();if(e instanceof Uint8Array||dn.isBuffer(e)){var a,s=Uint8Array.from(e);switch(null!==(a=null==t?void 0:t.type)&&void 0!==a?a:"bytes"){case"bytes":return i.ScVal.scvBytes(s);case"symbol":return i.ScVal.scvSymbol(s);case"string":return i.ScVal.scvString(s);default:throw new TypeError("invalid type (".concat(t.type,") specified for bytes-like value"))}}if(Array.isArray(e))return i.ScVal.scvVec(e.map((function(e){return vn(e,t)})));if("Object"!==(null!==(r=null===(n=e.constructor)||void 0===n?void 0:n.name)&&void 0!==r?r:""))throw new TypeError("cannot interpret ".concat(null===(o=e.constructor)||void 0===o?void 0:o.name," value as ScVal (").concat(JSON.stringify(e),")"));return i.ScVal.scvMap(Object.entries(e).sort((function(e,t){var r=yn(e,1)[0],n=yn(t,1)[0];return r.localeCompare(n)})).map((function(e){var r,n,o=yn(e,2),a=o[0],s=o[1],u=yn(null!==(r=(null!==(n=null==t?void 0:t.type)&&void 0!==n?n:{})[a])&&void 0!==r?r:[null,null],2),c=u[0],l=u[1],f=c?{type:c}:{},p=l?{type:l}:{};return new i.ScMapEntry({key:vn(a,f),val:vn(s,p)})})));case"number":case"bigint":switch(null==t?void 0:t.type){case"u32":return i.ScVal.scvU32(e);case"i32":return i.ScVal.scvI32(e)}return new pn(e,{type:null==t?void 0:t.type}).toScVal();case"string":var u,c=null!==(u=null==t?void 0:t.type)&&void 0!==u?u:"string";switch(c){case"string":return i.ScVal.scvString(e);case"symbol":return i.ScVal.scvSymbol(e);case"address":return new Ge(e).toScVal();case"u32":return i.ScVal.scvU32(parseInt(e,10));case"i32":return i.ScVal.scvI32(parseInt(e,10));default:if(nn.isType(c))return new nn(c,e).toScVal();throw new TypeError("invalid type (".concat(t.type,") specified for string value"))}case"boolean":return i.ScVal.scvBool(e);case"undefined":return i.ScVal.scvVoid();case"function":return vn(e());default:throw new TypeError("failed to convert typeof ".concat(gn(e)," (").concat(e,")"))}}function bn(e){var t,r;switch(e.switch().value){case i.ScValType.scvVoid().value:return null;case i.ScValType.scvU64().value:case i.ScValType.scvI64().value:return e.value().toBigInt();case i.ScValType.scvU128().value:case i.ScValType.scvI128().value:case i.ScValType.scvU256().value:case i.ScValType.scvI256().value:return hn(e);case i.ScValType.scvVec().value:return(null!==(t=e.vec())&&void 0!==t?t:[]).map(bn);case i.ScValType.scvAddress().value:return Ge.fromScVal(e).toString();case i.ScValType.scvMap().value:return Object.fromEntries((null!==(r=e.map())&&void 0!==r?r:[]).map((function(e){return[bn(e.key()),bn(e.val())]})));case i.ScValType.scvBool().value:case i.ScValType.scvU32().value:case i.ScValType.scvI32().value:case i.ScValType.scvBytes().value:return e.value();case i.ScValType.scvSymbol().value:case i.ScValType.scvString().value:var n=e.value();if(dn.isBuffer(n)||ArrayBuffer.isView(n))try{return(new TextDecoder).decode(n)}catch(e){return new Uint8Array(n.buffer)}return n;case i.ScValType.scvTimepoint().value:case i.ScValType.scvDuration().value:return new i.Uint64(e.value()).toBigInt();case i.ScValType.scvError().value:if(e.error().switch().value===i.ScErrorType.sceContract().value)return{type:"contract",code:e.error().contractCode()};var o=e.error();return{type:"system",code:o.code().value,value:o.code().name};default:return e.value()}}function wn(e){return wn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wn(e)}function Sn(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function kn(e){for(var t=1;t=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),c=n.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),I(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;I(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:_(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),m}},t}function In(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function Bn(e,t,r){return _n.apply(this,arguments)}function _n(){var e;return e=xn().mark((function e(t,r,n){var o,a,s,c,l,f,p,h,d,y,m=arguments;return xn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=m.length>3&&void 0!==m[3]?m[3]:lr.FUTURENET,t.credentials().switch().value===i.SorobanCredentialsType.sorobanCredentialsAddress().value){e.next=3;break}return e.abrupt("return",t);case 3:if(a=i.SorobanAuthorizationEntry.fromXDR(t.toXDR()),(s=a.credentials().address()).signatureExpirationLedger(n),c=u(On.from(o)),l=i.HashIdPreimage.envelopeTypeSorobanAuthorization(new i.HashIdPreimageSorobanAuthorization({networkId:c,nonce:s.nonce(),invocation:a.rootInvocation(),signatureExpirationLedger:s.signatureExpirationLedger()})),f=u(l.toXDR()),"function"!=typeof r){e.next=16;break}return e.next=12,r(l);case 12:null!=(d=e.sent)&&d.signature?(p=On.from(d.signature),h=d.publicKey):(p=On.from(d),h=Ge.fromScAddress(s.address()).toString()),e.next=18;break;case 16:p=On.from(r.sign(f)),h=r.publicKey();case 18:if(U.fromPublicKey(h).verify(f,p)){e.next=20;break}throw new Error("signature doesn't match payload");case 20:return y=vn({public_key:T.decodeEd25519PublicKey(h),signature:p},{type:{public_key:["symbol",null],signature:["symbol",null]}}),s.signature(i.ScVal.scvVec([y])),e.abrupt("return",a);case 23:case"end":return e.stop()}}),e)})),_n=function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){In(i,n,o,a,s,"next",e)}function s(e){In(i,n,o,a,s,"throw",e)}a(void 0)}))},_n.apply(this,arguments)}function Rn(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:lr.FUTURENET,a=U.random().rawPublicKey(),s=new i.Int64(a.subarray(0,8).reduce((function(e,t){return e<<8|t}),0)),u=n||e.publicKey();if(!u)throw new Error("authorizeInvocation requires publicKey parameter");return Bn(new i.SorobanAuthorizationEntry({rootInvocation:r,credentials:i.SorobanCredentials.sorobanCredentialsAddress(new i.SorobanAddressCredentials({address:new Ge(u).toScAddress(),nonce:s,signatureExpirationLedger:0,signature:i.ScVal.scvVec([])}))}),e,t,o)}function Cn(e){return Cn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cn(e)}function Un(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Nn(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=Cn(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Cn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Cn(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ln(e){var t=e.function(),r={},n=t.value();switch(t.switch().value){case 0:r.type="execute",r.args={source:Ge.fromScAddress(n.contractAddress()).toString(),function:n.functionName(),args:n.args().map((function(e){return bn(e)}))};break;case 1:case 2:var o=2===t.switch().value;r.type="create",r.args={};var i=[n.executable(),n.contractIdPreimage()],a=i[0],s=i[1];if(!!a.switch().value!=!!s.switch().value)throw new Error("creation function appears invalid: ".concat(JSON.stringify(n)," (should be wasm+address or token+asset)"));switch(a.switch().value){case 0:var u=s.fromAddress();r.args.type="wasm",r.args.wasm=function(e){for(var t=1;t{"use strict";e.exports=Math.min},8068:e=>{"use strict";e.exports=SyntaxError},8075:(e,t,r)=>{"use strict";var n=r(453),o=r(487),i=o(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?o(r):r}},8184:(e,t,r)=>{"use strict";var n,o=r(6556),i=r(9721)(/^\s*(?:function)?\*/),a=r(9092)(),s=r(3628),u=o("Object.prototype.toString"),c=o("Function.prototype.toString");e.exports=function(e){if("function"!=typeof e)return!1;if(i(c(e)))return!0;if(!a)return"[object GeneratorFunction]"===u(e);if(!s)return!1;if(void 0===n){var t=function(){if(!a)return!1;try{return Function("return function*() {}")()}catch(e){}}();n=!!t&&s(t)}return s(e)===n}},8287:(e,t,r)=>{"use strict";var n=r(6763);const o=r(7526),i=r(251),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50;const s=2147483647;function u(e){if(e>s)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return l(e,t,r)}function l(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=u(r);const o=n.write(e,t);o!==r&&(n=n.slice(0,o));return n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Y(e,Uint8Array)){const t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Y(e,ArrayBuffer)||e&&Y(e.buffer,ArrayBuffer))return d(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Y(e,SharedArrayBuffer)||e&&Y(e.buffer,SharedArrayBuffer)))return d(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return c.from(n,t,r);const o=function(e){if(c.isBuffer(e)){const t=0|y(e.length),r=u(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||J(e.length)?u(0):h(e);if("Buffer"===e.type&&Array.isArray(e.data))return h(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function f(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return f(e),u(e<0?0:0|y(e))}function h(e){const t=e.length<0?0:0|y(e.length),r=u(t);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|e}function m(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Y(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(o)return n?-1:$(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return _(this,t,r);case"utf8":case"utf-8":return P(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return B(this,t,r);case"base64":return O(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function v(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function b(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),J(r=+r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:w(e,t,r,n,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):w(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function w(e,t,r,n,o){let i,a=1,s=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){let n=-1;for(i=r;is&&(r=s-u),i=r;i>=0;i--){let r=!0;for(let n=0;no&&(n=o):n=o;const i=t.length;let a;for(n>i/2&&(n=i/2),a=0;a>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function O(e,t,r){return 0===t&&r===e.length?o.fromByteArray(e):o.fromByteArray(e.slice(t,r))}function P(e,t,r){r=Math.min(e.length,r);const n=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+a<=r){let r,n,s,u;switch(a){case 1:t<128&&(i=t);break;case 2:r=e[o+1],128==(192&r)&&(u=(31&t)<<6|63&r,u>127&&(i=u));break;case 3:r=e[o+1],n=e[o+2],128==(192&r)&&128==(192&n)&&(u=(15&t)<<12|(63&r)<<6|63&n,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:r=e[o+1],n=e[o+2],s=e[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(u=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,u>65535&&u<1114112&&(i=u))}}null===i?(i=65533,a=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=a}return function(e){const t=e.length;if(t<=x)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(c.isBuffer(t)||(t=c.from(t)),t.copy(n,o)):Uint8Array.prototype.set.call(n,t,o);else{if(!c.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,o)}o+=t.length}return n},c.byteLength=m,c.prototype._isBuffer=!0,c.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},a&&(c.prototype[a]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,o){if(Y(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(this===e)return 0;let i=(o>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0);const s=Math.min(i,a),u=this.slice(n,o),l=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return S(this,e,t,r);case"utf8":case"utf-8":return k(this,e,t,r);case"ascii":case"latin1":case"binary":return E(this,e,t,r);case"base64":return A(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const x=4096;function I(e,t,r){let n="";r=Math.min(e.length,r);for(let o=t;on)&&(r=n);let o="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function U(e,t,r,n,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function N(e,t,r,n,o){K(t,n,o,e,r,7);let i=Number(t&BigInt(4294967295));e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,r}function L(e,t,r,n,o){K(t,n,o,e,r,7);let i=Number(t&BigInt(4294967295));e[r+7]=i,i>>=8,e[r+6]=i,i>>=8,e[r+5]=i,i>>=8,e[r+4]=i;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=a,a>>=8,e[r+2]=a,a>>=8,e[r+1]=a,a>>=8,e[r]=a,r+8}function M(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(e,t,r,n,o){return t=+t,r>>>=0,o||M(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function F(e,t,r,n,o){return t=+t,r>>>=0,o||M(e,0,r,8),i.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],o=1,i=0;for(;++i>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e+--t],o=1;for(;t>0&&(o*=256);)n+=this[e+--t]*o;return n},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readBigUInt64LE=Q((function(e){H(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],o=1,i=0;for(;++i=o&&(n-=Math.pow(2,8*t)),n},c.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||C(e,t,this.length);let n=t,o=1,i=this[e+--n];for(;n>0&&(o*=256);)i+=this[e+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readBigInt64LE=Q((function(e){H(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||z(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||C(e,4,this.length),i.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||C(e,4,this.length),i.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||C(e,8,this.length),i.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||C(e,8,this.length),i.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){U(this,e,t,r,Math.pow(2,8*r)-1,0)}let o=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,!n){U(this,e,t,r,Math.pow(2,8*r)-1,0)}let o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigUInt64LE=Q((function(e,t=0){return N(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeBigUInt64BE=Q((function(e,t=0){return L(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);U(this,e,t,r,n-1,-n)}let o=0,i=1,a=0;for(this[t]=255&e;++o>>=0,!n){const n=Math.pow(2,8*r-1);U(this,e,t,r,n-1,-n)}let o=r-1,i=1,a=0;for(this[t+o]=255&e;--o>=0&&(i*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/i|0)-a&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||U(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigInt64LE=Q((function(e,t=0){return N(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeBigInt64BE=Q((function(e,t=0){return L(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeFloatLE=function(e,t,r){return j(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return j(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return F(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return F(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function K(e,t,r,n,o,i){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new D.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,r){H(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||z(t,e.length-(r+1))}(n,o,i)}function H(e,t){if("number"!=typeof e)throw new D.ERR_INVALID_ARG_TYPE(t,"number",e)}function z(e,t,r){if(Math.floor(e)!==e)throw H(e,r),new D.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new D.ERR_BUFFER_OUT_OF_BOUNDS;throw new D.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}V("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),V("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),V("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=q(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=q(o)),o+="n"),n+=` It must be ${t}. Received ${o}`,n}),RangeError);const X=/[^+/0-9A-Za-z-_]/g;function $(e,t){let r;t=t||1/0;const n=e.length;let o=null;const i=[];for(let a=0;a55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function G(e){return o.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(X,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function W(e,t,r,n){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function Y(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}const Z=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)t[n+o]=e[r]+e[o]}return t}();function Q(e){return"undefined"==typeof BigInt?ee:e}function ee(){throw new Error("BigInt not supported")}},8403:(e,t,r)=>{"use strict";var n=r(1189),o=r(1333)(),i=r(6556),a=r(9612),s=i("Array.prototype.push"),u=i("Object.prototype.propertyIsEnumerable"),c=o?a.getOwnPropertySymbols:null;e.exports=function(e,t){if(null==e)throw new TypeError("target must be an object");var r=a(e);if(1===arguments.length)return r;for(var i=1;i{"use strict";var n=r(1189),o="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),i=Object.prototype.toString,a=Array.prototype.concat,s=r(41),u=r(592)(),c=function(e,t,r,n){if(t in e)if(!0===n){if(e[t]===r)return}else if("function"!=typeof(o=n)||"[object Function]"!==i.call(o)||!n())return;var o;u?s(e,t,r,!0):s(e,t,r)},l=function(e,t){var r=arguments.length>2?arguments[2]:{},i=n(t);o&&(i=a.call(i,Object.getOwnPropertySymbols(t)));for(var s=0;s{"use strict";e.exports="undefined"!=typeof Reflect&&Reflect.getPrototypeOf||null},8875:(e,t,r)=>{"use strict";var n;if(!Object.keys){var o=Object.prototype.hasOwnProperty,i=Object.prototype.toString,a=r(1093),s=Object.prototype.propertyIsEnumerable,u=!s.call({toString:null},"toString"),c=s.call((function(){}),"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],f=function(e){var t=e.constructor;return t&&t.prototype===e},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!p["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{f(window[e])}catch(e){return!0}}catch(e){return!0}return!1}();n=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===i.call(e),n=a(e),s=t&&"[object String]"===i.call(e),p=[];if(!t&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var d=c&&r;if(s&&e.length>0&&!o.call(e,0))for(var y=0;y0)for(var m=0;m{!function(e){"use strict";var t=function(e){var t,r=new Float64Array(16);if(e)for(t=0;t>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r,e[t+4]=n>>24&255,e[t+5]=n>>16&255,e[t+6]=n>>8&255,e[t+7]=255&n}function y(e,t,r,n,o){var i,a=0;for(i=0;i>>8)-1}function m(e,t,r,n){return y(e,t,r,n,16)}function g(e,t,r,n){return y(e,t,r,n,32)}function v(e,t,r,n){!function(e,t,r,n){for(var o,i=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,u=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,c=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,p=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,h=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,y=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,m=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,g=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,b=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,S=i,k=a,E=s,A=u,T=c,O=l,P=f,x=p,I=h,B=d,_=y,R=m,C=g,U=v,N=b,L=w,M=0;M<20;M+=2)S^=(o=(C^=(o=(I^=(o=(T^=(o=S+C|0)<<7|o>>>25)+S|0)<<9|o>>>23)+T|0)<<13|o>>>19)+I|0)<<18|o>>>14,O^=(o=(k^=(o=(U^=(o=(B^=(o=O+k|0)<<7|o>>>25)+O|0)<<9|o>>>23)+B|0)<<13|o>>>19)+U|0)<<18|o>>>14,_^=(o=(P^=(o=(E^=(o=(N^=(o=_+P|0)<<7|o>>>25)+_|0)<<9|o>>>23)+N|0)<<13|o>>>19)+E|0)<<18|o>>>14,L^=(o=(R^=(o=(x^=(o=(A^=(o=L+R|0)<<7|o>>>25)+L|0)<<9|o>>>23)+A|0)<<13|o>>>19)+x|0)<<18|o>>>14,S^=(o=(A^=(o=(E^=(o=(k^=(o=S+A|0)<<7|o>>>25)+S|0)<<9|o>>>23)+k|0)<<13|o>>>19)+E|0)<<18|o>>>14,O^=(o=(T^=(o=(x^=(o=(P^=(o=O+T|0)<<7|o>>>25)+O|0)<<9|o>>>23)+P|0)<<13|o>>>19)+x|0)<<18|o>>>14,_^=(o=(B^=(o=(I^=(o=(R^=(o=_+B|0)<<7|o>>>25)+_|0)<<9|o>>>23)+R|0)<<13|o>>>19)+I|0)<<18|o>>>14,L^=(o=(N^=(o=(U^=(o=(C^=(o=L+N|0)<<7|o>>>25)+L|0)<<9|o>>>23)+C|0)<<13|o>>>19)+U|0)<<18|o>>>14;S=S+i|0,k=k+a|0,E=E+s|0,A=A+u|0,T=T+c|0,O=O+l|0,P=P+f|0,x=x+p|0,I=I+h|0,B=B+d|0,_=_+y|0,R=R+m|0,C=C+g|0,U=U+v|0,N=N+b|0,L=L+w|0,e[0]=S>>>0&255,e[1]=S>>>8&255,e[2]=S>>>16&255,e[3]=S>>>24&255,e[4]=k>>>0&255,e[5]=k>>>8&255,e[6]=k>>>16&255,e[7]=k>>>24&255,e[8]=E>>>0&255,e[9]=E>>>8&255,e[10]=E>>>16&255,e[11]=E>>>24&255,e[12]=A>>>0&255,e[13]=A>>>8&255,e[14]=A>>>16&255,e[15]=A>>>24&255,e[16]=T>>>0&255,e[17]=T>>>8&255,e[18]=T>>>16&255,e[19]=T>>>24&255,e[20]=O>>>0&255,e[21]=O>>>8&255,e[22]=O>>>16&255,e[23]=O>>>24&255,e[24]=P>>>0&255,e[25]=P>>>8&255,e[26]=P>>>16&255,e[27]=P>>>24&255,e[28]=x>>>0&255,e[29]=x>>>8&255,e[30]=x>>>16&255,e[31]=x>>>24&255,e[32]=I>>>0&255,e[33]=I>>>8&255,e[34]=I>>>16&255,e[35]=I>>>24&255,e[36]=B>>>0&255,e[37]=B>>>8&255,e[38]=B>>>16&255,e[39]=B>>>24&255,e[40]=_>>>0&255,e[41]=_>>>8&255,e[42]=_>>>16&255,e[43]=_>>>24&255,e[44]=R>>>0&255,e[45]=R>>>8&255,e[46]=R>>>16&255,e[47]=R>>>24&255,e[48]=C>>>0&255,e[49]=C>>>8&255,e[50]=C>>>16&255,e[51]=C>>>24&255,e[52]=U>>>0&255,e[53]=U>>>8&255,e[54]=U>>>16&255,e[55]=U>>>24&255,e[56]=N>>>0&255,e[57]=N>>>8&255,e[58]=N>>>16&255,e[59]=N>>>24&255,e[60]=L>>>0&255,e[61]=L>>>8&255,e[62]=L>>>16&255,e[63]=L>>>24&255}(e,t,r,n)}function b(e,t,r,n){!function(e,t,r,n){for(var o,i=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,u=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,c=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,p=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,h=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,y=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,m=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,g=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,b=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,S=0;S<20;S+=2)i^=(o=(g^=(o=(h^=(o=(c^=(o=i+g|0)<<7|o>>>25)+i|0)<<9|o>>>23)+c|0)<<13|o>>>19)+h|0)<<18|o>>>14,l^=(o=(a^=(o=(v^=(o=(d^=(o=l+a|0)<<7|o>>>25)+l|0)<<9|o>>>23)+d|0)<<13|o>>>19)+v|0)<<18|o>>>14,y^=(o=(f^=(o=(s^=(o=(b^=(o=y+f|0)<<7|o>>>25)+y|0)<<9|o>>>23)+b|0)<<13|o>>>19)+s|0)<<18|o>>>14,w^=(o=(m^=(o=(p^=(o=(u^=(o=w+m|0)<<7|o>>>25)+w|0)<<9|o>>>23)+u|0)<<13|o>>>19)+p|0)<<18|o>>>14,i^=(o=(u^=(o=(s^=(o=(a^=(o=i+u|0)<<7|o>>>25)+i|0)<<9|o>>>23)+a|0)<<13|o>>>19)+s|0)<<18|o>>>14,l^=(o=(c^=(o=(p^=(o=(f^=(o=l+c|0)<<7|o>>>25)+l|0)<<9|o>>>23)+f|0)<<13|o>>>19)+p|0)<<18|o>>>14,y^=(o=(d^=(o=(h^=(o=(m^=(o=y+d|0)<<7|o>>>25)+y|0)<<9|o>>>23)+m|0)<<13|o>>>19)+h|0)<<18|o>>>14,w^=(o=(b^=(o=(v^=(o=(g^=(o=w+b|0)<<7|o>>>25)+w|0)<<9|o>>>23)+g|0)<<13|o>>>19)+v|0)<<18|o>>>14;e[0]=i>>>0&255,e[1]=i>>>8&255,e[2]=i>>>16&255,e[3]=i>>>24&255,e[4]=l>>>0&255,e[5]=l>>>8&255,e[6]=l>>>16&255,e[7]=l>>>24&255,e[8]=y>>>0&255,e[9]=y>>>8&255,e[10]=y>>>16&255,e[11]=y>>>24&255,e[12]=w>>>0&255,e[13]=w>>>8&255,e[14]=w>>>16&255,e[15]=w>>>24&255,e[16]=f>>>0&255,e[17]=f>>>8&255,e[18]=f>>>16&255,e[19]=f>>>24&255,e[20]=p>>>0&255,e[21]=p>>>8&255,e[22]=p>>>16&255,e[23]=p>>>24&255,e[24]=h>>>0&255,e[25]=h>>>8&255,e[26]=h>>>16&255,e[27]=h>>>24&255,e[28]=d>>>0&255,e[29]=d>>>8&255,e[30]=d>>>16&255,e[31]=d>>>24&255}(e,t,r,n)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function S(e,t,r,n,o,i,a){var s,u,c=new Uint8Array(16),l=new Uint8Array(64);for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;o>=64;){for(v(l,c,a,w),u=0;u<64;u++)e[t+u]=r[n+u]^l[u];for(s=1,u=8;u<16;u++)s=s+(255&c[u])|0,c[u]=255&s,s>>>=8;o-=64,t+=64,n+=64}if(o>0)for(v(l,c,a,w),u=0;u=64;){for(v(u,s,o,w),a=0;a<64;a++)e[t+a]=u[a];for(i=1,a=8;a<16;a++)i=i+(255&s[a])|0,s[a]=255&i,i>>>=8;r-=64,t+=64}if(r>0)for(v(u,s,o,w),a=0;a>>13|r<<3),n=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(r>>>10|n<<6),o=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(n>>>7|o<<9),i=255&e[8]|(255&e[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,a=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(i>>>14|a<<2),s=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(a>>>11|s<<5),u=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(s>>>8|u<<8),this.r[9]=u>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function O(e,t,r,n,o,i){var a=new T(i);return a.update(r,n,o),a.finish(e,t),0}function P(e,t,r,n,o,i){var a=new Uint8Array(16);return O(a,0,r,n,o,i),m(e,t,a,0)}function x(e,t,r,n,o){var i;if(r<32)return-1;for(A(e,0,t,0,r,n,o),O(e,16,e,32,r-32,e),i=0;i<16;i++)e[i]=0;return 0}function I(e,t,r,n,o){var i,a=new Uint8Array(32);if(r<32)return-1;if(E(a,0,32,n,o),0!==P(t,16,t,32,r-32,a))return-1;for(A(e,0,t,0,r,n,o),i=0;i<32;i++)e[i]=0;return 0}function B(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function _(e){var t,r,n=1;for(t=0;t<16;t++)r=e[t]+n+65535,n=Math.floor(r/65536),e[t]=r-65536*n;e[0]+=n-1+37*(n-1)}function R(e,t,r){for(var n,o=~(r-1),i=0;i<16;i++)n=o&(e[i]^t[i]),e[i]^=n,t[i]^=n}function C(e,r){var n,o,i,a=t(),s=t();for(n=0;n<16;n++)s[n]=r[n];for(_(s),_(s),_(s),o=0;o<2;o++){for(a[0]=s[0]-65517,n=1;n<15;n++)a[n]=s[n]-65535-(a[n-1]>>16&1),a[n-1]&=65535;a[15]=s[15]-32767-(a[14]>>16&1),i=a[15]>>16&1,a[14]&=65535,R(s,a,1-i)}for(n=0;n<16;n++)e[2*n]=255&s[n],e[2*n+1]=s[n]>>8}function U(e,t){var r=new Uint8Array(32),n=new Uint8Array(32);return C(r,e),C(n,t),g(r,0,n,0)}function N(e){var t=new Uint8Array(32);return C(t,e),1&t[0]}function L(e,t){var r;for(r=0;r<16;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function M(e,t,r){for(var n=0;n<16;n++)e[n]=t[n]+r[n]}function j(e,t,r){for(var n=0;n<16;n++)e[n]=t[n]-r[n]}function F(e,t,r){var n,o,i=0,a=0,s=0,u=0,c=0,l=0,f=0,p=0,h=0,d=0,y=0,m=0,g=0,v=0,b=0,w=0,S=0,k=0,E=0,A=0,T=0,O=0,P=0,x=0,I=0,B=0,_=0,R=0,C=0,U=0,N=0,L=r[0],M=r[1],j=r[2],F=r[3],D=r[4],V=r[5],q=r[6],K=r[7],H=r[8],z=r[9],X=r[10],$=r[11],G=r[12],W=r[13],Y=r[14],J=r[15];i+=(n=t[0])*L,a+=n*M,s+=n*j,u+=n*F,c+=n*D,l+=n*V,f+=n*q,p+=n*K,h+=n*H,d+=n*z,y+=n*X,m+=n*$,g+=n*G,v+=n*W,b+=n*Y,w+=n*J,a+=(n=t[1])*L,s+=n*M,u+=n*j,c+=n*F,l+=n*D,f+=n*V,p+=n*q,h+=n*K,d+=n*H,y+=n*z,m+=n*X,g+=n*$,v+=n*G,b+=n*W,w+=n*Y,S+=n*J,s+=(n=t[2])*L,u+=n*M,c+=n*j,l+=n*F,f+=n*D,p+=n*V,h+=n*q,d+=n*K,y+=n*H,m+=n*z,g+=n*X,v+=n*$,b+=n*G,w+=n*W,S+=n*Y,k+=n*J,u+=(n=t[3])*L,c+=n*M,l+=n*j,f+=n*F,p+=n*D,h+=n*V,d+=n*q,y+=n*K,m+=n*H,g+=n*z,v+=n*X,b+=n*$,w+=n*G,S+=n*W,k+=n*Y,E+=n*J,c+=(n=t[4])*L,l+=n*M,f+=n*j,p+=n*F,h+=n*D,d+=n*V,y+=n*q,m+=n*K,g+=n*H,v+=n*z,b+=n*X,w+=n*$,S+=n*G,k+=n*W,E+=n*Y,A+=n*J,l+=(n=t[5])*L,f+=n*M,p+=n*j,h+=n*F,d+=n*D,y+=n*V,m+=n*q,g+=n*K,v+=n*H,b+=n*z,w+=n*X,S+=n*$,k+=n*G,E+=n*W,A+=n*Y,T+=n*J,f+=(n=t[6])*L,p+=n*M,h+=n*j,d+=n*F,y+=n*D,m+=n*V,g+=n*q,v+=n*K,b+=n*H,w+=n*z,S+=n*X,k+=n*$,E+=n*G,A+=n*W,T+=n*Y,O+=n*J,p+=(n=t[7])*L,h+=n*M,d+=n*j,y+=n*F,m+=n*D,g+=n*V,v+=n*q,b+=n*K,w+=n*H,S+=n*z,k+=n*X,E+=n*$,A+=n*G,T+=n*W,O+=n*Y,P+=n*J,h+=(n=t[8])*L,d+=n*M,y+=n*j,m+=n*F,g+=n*D,v+=n*V,b+=n*q,w+=n*K,S+=n*H,k+=n*z,E+=n*X,A+=n*$,T+=n*G,O+=n*W,P+=n*Y,x+=n*J,d+=(n=t[9])*L,y+=n*M,m+=n*j,g+=n*F,v+=n*D,b+=n*V,w+=n*q,S+=n*K,k+=n*H,E+=n*z,A+=n*X,T+=n*$,O+=n*G,P+=n*W,x+=n*Y,I+=n*J,y+=(n=t[10])*L,m+=n*M,g+=n*j,v+=n*F,b+=n*D,w+=n*V,S+=n*q,k+=n*K,E+=n*H,A+=n*z,T+=n*X,O+=n*$,P+=n*G,x+=n*W,I+=n*Y,B+=n*J,m+=(n=t[11])*L,g+=n*M,v+=n*j,b+=n*F,w+=n*D,S+=n*V,k+=n*q,E+=n*K,A+=n*H,T+=n*z,O+=n*X,P+=n*$,x+=n*G,I+=n*W,B+=n*Y,_+=n*J,g+=(n=t[12])*L,v+=n*M,b+=n*j,w+=n*F,S+=n*D,k+=n*V,E+=n*q,A+=n*K,T+=n*H,O+=n*z,P+=n*X,x+=n*$,I+=n*G,B+=n*W,_+=n*Y,R+=n*J,v+=(n=t[13])*L,b+=n*M,w+=n*j,S+=n*F,k+=n*D,E+=n*V,A+=n*q,T+=n*K,O+=n*H,P+=n*z,x+=n*X,I+=n*$,B+=n*G,_+=n*W,R+=n*Y,C+=n*J,b+=(n=t[14])*L,w+=n*M,S+=n*j,k+=n*F,E+=n*D,A+=n*V,T+=n*q,O+=n*K,P+=n*H,x+=n*z,I+=n*X,B+=n*$,_+=n*G,R+=n*W,C+=n*Y,U+=n*J,w+=(n=t[15])*L,a+=38*(k+=n*j),s+=38*(E+=n*F),u+=38*(A+=n*D),c+=38*(T+=n*V),l+=38*(O+=n*q),f+=38*(P+=n*K),p+=38*(x+=n*H),h+=38*(I+=n*z),d+=38*(B+=n*X),y+=38*(_+=n*$),m+=38*(R+=n*G),g+=38*(C+=n*W),v+=38*(U+=n*Y),b+=38*(N+=n*J),i=(n=(i+=38*(S+=n*M))+(o=1)+65535)-65536*(o=Math.floor(n/65536)),a=(n=a+o+65535)-65536*(o=Math.floor(n/65536)),s=(n=s+o+65535)-65536*(o=Math.floor(n/65536)),u=(n=u+o+65535)-65536*(o=Math.floor(n/65536)),c=(n=c+o+65535)-65536*(o=Math.floor(n/65536)),l=(n=l+o+65535)-65536*(o=Math.floor(n/65536)),f=(n=f+o+65535)-65536*(o=Math.floor(n/65536)),p=(n=p+o+65535)-65536*(o=Math.floor(n/65536)),h=(n=h+o+65535)-65536*(o=Math.floor(n/65536)),d=(n=d+o+65535)-65536*(o=Math.floor(n/65536)),y=(n=y+o+65535)-65536*(o=Math.floor(n/65536)),m=(n=m+o+65535)-65536*(o=Math.floor(n/65536)),g=(n=g+o+65535)-65536*(o=Math.floor(n/65536)),v=(n=v+o+65535)-65536*(o=Math.floor(n/65536)),b=(n=b+o+65535)-65536*(o=Math.floor(n/65536)),w=(n=w+o+65535)-65536*(o=Math.floor(n/65536)),i=(n=(i+=o-1+37*(o-1))+(o=1)+65535)-65536*(o=Math.floor(n/65536)),a=(n=a+o+65535)-65536*(o=Math.floor(n/65536)),s=(n=s+o+65535)-65536*(o=Math.floor(n/65536)),u=(n=u+o+65535)-65536*(o=Math.floor(n/65536)),c=(n=c+o+65535)-65536*(o=Math.floor(n/65536)),l=(n=l+o+65535)-65536*(o=Math.floor(n/65536)),f=(n=f+o+65535)-65536*(o=Math.floor(n/65536)),p=(n=p+o+65535)-65536*(o=Math.floor(n/65536)),h=(n=h+o+65535)-65536*(o=Math.floor(n/65536)),d=(n=d+o+65535)-65536*(o=Math.floor(n/65536)),y=(n=y+o+65535)-65536*(o=Math.floor(n/65536)),m=(n=m+o+65535)-65536*(o=Math.floor(n/65536)),g=(n=g+o+65535)-65536*(o=Math.floor(n/65536)),v=(n=v+o+65535)-65536*(o=Math.floor(n/65536)),b=(n=b+o+65535)-65536*(o=Math.floor(n/65536)),w=(n=w+o+65535)-65536*(o=Math.floor(n/65536)),i+=o-1+37*(o-1),e[0]=i,e[1]=a,e[2]=s,e[3]=u,e[4]=c,e[5]=l,e[6]=f,e[7]=p,e[8]=h,e[9]=d,e[10]=y,e[11]=m,e[12]=g,e[13]=v,e[14]=b,e[15]=w}function D(e,t){F(e,t,t)}function V(e,r){var n,o=t();for(n=0;n<16;n++)o[n]=r[n];for(n=253;n>=0;n--)D(o,o),2!==n&&4!==n&&F(o,o,r);for(n=0;n<16;n++)e[n]=o[n]}function q(e,r){var n,o=t();for(n=0;n<16;n++)o[n]=r[n];for(n=250;n>=0;n--)D(o,o),1!==n&&F(o,o,r);for(n=0;n<16;n++)e[n]=o[n]}function K(e,r,n){var o,i,a=new Uint8Array(32),s=new Float64Array(80),c=t(),l=t(),f=t(),p=t(),h=t(),d=t();for(i=0;i<31;i++)a[i]=r[i];for(a[31]=127&r[31]|64,a[0]&=248,L(s,n),i=0;i<16;i++)l[i]=s[i],p[i]=c[i]=f[i]=0;for(c[0]=p[0]=1,i=254;i>=0;--i)R(c,l,o=a[i>>>3]>>>(7&i)&1),R(f,p,o),M(h,c,f),j(c,c,f),M(f,l,p),j(l,l,p),D(p,h),D(d,c),F(c,f,c),F(f,l,h),M(h,c,f),j(c,c,f),D(l,c),j(f,p,d),F(c,f,u),M(c,c,p),F(f,f,c),F(c,p,d),F(p,l,s),D(l,h),R(c,l,o),R(f,p,o);for(i=0;i<16;i++)s[i+16]=c[i],s[i+32]=f[i],s[i+48]=l[i],s[i+64]=p[i];var y=s.subarray(32),m=s.subarray(16);return V(y,y),F(m,m,y),C(e,m),0}function H(e,t){return K(e,t,i)}function z(e,t){return n(t,32),H(e,t)}function X(e,t,r){var n=new Uint8Array(32);return K(n,r,t),b(e,o,n,w)}T.prototype.blocks=function(e,t,r){for(var n,o,i,a,s,u,c,l,f,p,h,d,y,m,g,v,b,w,S,k=this.fin?0:2048,E=this.h[0],A=this.h[1],T=this.h[2],O=this.h[3],P=this.h[4],x=this.h[5],I=this.h[6],B=this.h[7],_=this.h[8],R=this.h[9],C=this.r[0],U=this.r[1],N=this.r[2],L=this.r[3],M=this.r[4],j=this.r[5],F=this.r[6],D=this.r[7],V=this.r[8],q=this.r[9];r>=16;)p=f=0,p+=(E+=8191&(n=255&e[t+0]|(255&e[t+1])<<8))*C,p+=(A+=8191&(n>>>13|(o=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*q),p+=(T+=8191&(o>>>10|(i=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*V),p+=(O+=8191&(i>>>7|(a=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*D),f=(p+=(P+=8191&(a>>>4|(s=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*F))>>>13,p&=8191,p+=(x+=s>>>1&8191)*(5*j),p+=(I+=8191&(s>>>14|(u=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*M),p+=(B+=8191&(u>>>11|(c=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*L),p+=(_+=8191&(c>>>8|(l=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*N),h=f+=(p+=(R+=l>>>5|k)*(5*U))>>>13,h+=E*U,h+=A*C,h+=T*(5*q),h+=O*(5*V),f=(h+=P*(5*D))>>>13,h&=8191,h+=x*(5*F),h+=I*(5*j),h+=B*(5*M),h+=_*(5*L),f+=(h+=R*(5*N))>>>13,h&=8191,d=f,d+=E*N,d+=A*U,d+=T*C,d+=O*(5*q),f=(d+=P*(5*V))>>>13,d&=8191,d+=x*(5*D),d+=I*(5*F),d+=B*(5*j),d+=_*(5*M),y=f+=(d+=R*(5*L))>>>13,y+=E*L,y+=A*N,y+=T*U,y+=O*C,f=(y+=P*(5*q))>>>13,y&=8191,y+=x*(5*V),y+=I*(5*D),y+=B*(5*F),y+=_*(5*j),m=f+=(y+=R*(5*M))>>>13,m+=E*M,m+=A*L,m+=T*N,m+=O*U,f=(m+=P*C)>>>13,m&=8191,m+=x*(5*q),m+=I*(5*V),m+=B*(5*D),m+=_*(5*F),g=f+=(m+=R*(5*j))>>>13,g+=E*j,g+=A*M,g+=T*L,g+=O*N,f=(g+=P*U)>>>13,g&=8191,g+=x*C,g+=I*(5*q),g+=B*(5*V),g+=_*(5*D),v=f+=(g+=R*(5*F))>>>13,v+=E*F,v+=A*j,v+=T*M,v+=O*L,f=(v+=P*N)>>>13,v&=8191,v+=x*U,v+=I*C,v+=B*(5*q),v+=_*(5*V),b=f+=(v+=R*(5*D))>>>13,b+=E*D,b+=A*F,b+=T*j,b+=O*M,f=(b+=P*L)>>>13,b&=8191,b+=x*N,b+=I*U,b+=B*C,b+=_*(5*q),w=f+=(b+=R*(5*V))>>>13,w+=E*V,w+=A*D,w+=T*F,w+=O*j,f=(w+=P*M)>>>13,w&=8191,w+=x*L,w+=I*N,w+=B*U,w+=_*C,S=f+=(w+=R*(5*q))>>>13,S+=E*q,S+=A*V,S+=T*D,S+=O*F,f=(S+=P*j)>>>13,S&=8191,S+=x*M,S+=I*L,S+=B*N,S+=_*U,E=p=8191&(f=(f=((f+=(S+=R*C)>>>13)<<2)+f|0)+(p&=8191)|0),A=h+=f>>>=13,T=d&=8191,O=y&=8191,P=m&=8191,x=g&=8191,I=v&=8191,B=b&=8191,_=w&=8191,R=S&=8191,t+=16,r-=16;this.h[0]=E,this.h[1]=A,this.h[2]=T,this.h[3]=O,this.h[4]=P,this.h[5]=x,this.h[6]=I,this.h[7]=B,this.h[8]=_,this.h[9]=R},T.prototype.finish=function(e,t){var r,n,o,i,a=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=r,r=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,a[0]=this.h[0]+5,r=a[0]>>>13,a[0]&=8191,i=1;i<10;i++)a[i]=this.h[i]+r,r=a[i]>>>13,a[i]&=8191;for(a[9]-=8192,n=(1^r)-1,i=0;i<10;i++)a[i]&=n;for(n=~n,i=0;i<10;i++)this.h[i]=this.h[i]&n|a[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},T.prototype.update=function(e,t,r){var n,o;if(this.leftover){for((o=16-this.leftover)>r&&(o=r),n=0;n=16&&(o=r-r%16,this.blocks(e,t,o),t+=o,r-=o),r){for(n=0;n=128;){for(k=0;k<16;k++)E=8*k+G,B[k]=r[E+0]<<24|r[E+1]<<16|r[E+2]<<8|r[E+3],_[k]=r[E+4]<<24|r[E+5]<<16|r[E+6]<<8|r[E+7];for(k=0;k<80;k++)if(o=R,i=C,a=U,s=N,u=L,c=M,l=j,F,p=D,h=V,d=q,y=K,m=H,g=z,v=X,$,O=65535&(T=$),P=T>>>16,x=65535&(A=F),I=A>>>16,O+=65535&(T=(H>>>14|L<<18)^(H>>>18|L<<14)^(L>>>9|H<<23)),P+=T>>>16,x+=65535&(A=(L>>>14|H<<18)^(L>>>18|H<<14)^(H>>>9|L<<23)),I+=A>>>16,O+=65535&(T=H&z^~H&X),P+=T>>>16,x+=65535&(A=L&M^~L&j),I+=A>>>16,O+=65535&(T=W[2*k+1]),P+=T>>>16,x+=65535&(A=W[2*k]),I+=A>>>16,A=B[k%16],P+=(T=_[k%16])>>>16,x+=65535&A,I+=A>>>16,x+=(P+=(O+=65535&T)>>>16)>>>16,O=65535&(T=S=65535&O|P<<16),P=T>>>16,x=65535&(A=w=65535&x|(I+=x>>>16)<<16),I=A>>>16,O+=65535&(T=(D>>>28|R<<4)^(R>>>2|D<<30)^(R>>>7|D<<25)),P+=T>>>16,x+=65535&(A=(R>>>28|D<<4)^(D>>>2|R<<30)^(D>>>7|R<<25)),I+=A>>>16,P+=(T=D&V^D&q^V&q)>>>16,x+=65535&(A=R&C^R&U^C&U),I+=A>>>16,f=65535&(x+=(P+=(O+=65535&T)>>>16)>>>16)|(I+=x>>>16)<<16,b=65535&O|P<<16,O=65535&(T=y),P=T>>>16,x=65535&(A=s),I=A>>>16,P+=(T=S)>>>16,x+=65535&(A=w),I+=A>>>16,C=o,U=i,N=a,L=s=65535&(x+=(P+=(O+=65535&T)>>>16)>>>16)|(I+=x>>>16)<<16,M=u,j=c,F=l,R=f,V=p,q=h,K=d,H=y=65535&O|P<<16,z=m,X=g,$=v,D=b,k%16==15)for(E=0;E<16;E++)A=B[E],O=65535&(T=_[E]),P=T>>>16,x=65535&A,I=A>>>16,A=B[(E+9)%16],O+=65535&(T=_[(E+9)%16]),P+=T>>>16,x+=65535&A,I+=A>>>16,w=B[(E+1)%16],O+=65535&(T=((S=_[(E+1)%16])>>>1|w<<31)^(S>>>8|w<<24)^(S>>>7|w<<25)),P+=T>>>16,x+=65535&(A=(w>>>1|S<<31)^(w>>>8|S<<24)^w>>>7),I+=A>>>16,w=B[(E+14)%16],P+=(T=((S=_[(E+14)%16])>>>19|w<<13)^(w>>>29|S<<3)^(S>>>6|w<<26))>>>16,x+=65535&(A=(w>>>19|S<<13)^(S>>>29|w<<3)^w>>>6),I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,B[E]=65535&x|I<<16,_[E]=65535&O|P<<16;O=65535&(T=D),P=T>>>16,x=65535&(A=R),I=A>>>16,A=e[0],P+=(T=t[0])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[0]=R=65535&x|I<<16,t[0]=D=65535&O|P<<16,O=65535&(T=V),P=T>>>16,x=65535&(A=C),I=A>>>16,A=e[1],P+=(T=t[1])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[1]=C=65535&x|I<<16,t[1]=V=65535&O|P<<16,O=65535&(T=q),P=T>>>16,x=65535&(A=U),I=A>>>16,A=e[2],P+=(T=t[2])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[2]=U=65535&x|I<<16,t[2]=q=65535&O|P<<16,O=65535&(T=K),P=T>>>16,x=65535&(A=N),I=A>>>16,A=e[3],P+=(T=t[3])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[3]=N=65535&x|I<<16,t[3]=K=65535&O|P<<16,O=65535&(T=H),P=T>>>16,x=65535&(A=L),I=A>>>16,A=e[4],P+=(T=t[4])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[4]=L=65535&x|I<<16,t[4]=H=65535&O|P<<16,O=65535&(T=z),P=T>>>16,x=65535&(A=M),I=A>>>16,A=e[5],P+=(T=t[5])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[5]=M=65535&x|I<<16,t[5]=z=65535&O|P<<16,O=65535&(T=X),P=T>>>16,x=65535&(A=j),I=A>>>16,A=e[6],P+=(T=t[6])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[6]=j=65535&x|I<<16,t[6]=X=65535&O|P<<16,O=65535&(T=$),P=T>>>16,x=65535&(A=F),I=A>>>16,A=e[7],P+=(T=t[7])>>>16,x+=65535&A,I+=A>>>16,I+=(x+=(P+=(O+=65535&T)>>>16)>>>16)>>>16,e[7]=F=65535&x|I<<16,t[7]=$=65535&O|P<<16,G+=128,n-=128}return n}function J(e,t,r){var n,o=new Int32Array(8),i=new Int32Array(8),a=new Uint8Array(256),s=r;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,Y(o,i,t,r),r%=128,n=0;n=0;--o)Q(e,t,n=r[o/8|0]>>(7&o)&1),Z(t,e),Z(e,e),Q(e,t,n)}function re(e,r){var n=[t(),t(),t(),t()];B(n[0],f),B(n[1],p),B(n[2],s),F(n[3],f,p),te(e,n,r)}function ne(e,r,o){var i,a=new Uint8Array(64),s=[t(),t(),t(),t()];for(o||n(r,32),J(a,r,32),a[0]&=248,a[31]&=127,a[31]|=64,re(s,a),ee(e,s),i=0;i<32;i++)r[i+32]=e[i];return 0}var oe=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function ie(e,t){var r,n,o,i;for(n=63;n>=32;--n){for(r=0,o=n-32,i=n-12;o>4)*oe[o],r=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=r*oe[o];for(n=0;n<32;n++)t[n+1]+=t[n]>>8,e[n]=255&t[n]}function ae(e){var t,r=new Float64Array(64);for(t=0;t<64;t++)r[t]=e[t];for(t=0;t<64;t++)e[t]=0;ie(e,r)}function se(e,r,n,o){var i,a,s=new Uint8Array(64),u=new Uint8Array(64),c=new Uint8Array(64),l=new Float64Array(64),f=[t(),t(),t(),t()];J(s,o,32),s[0]&=248,s[31]&=127,s[31]|=64;var p=n+64;for(i=0;i>7&&j(e[0],a,e[0]),F(e[3],e[0],e[1]),0)}(p,o))return-1;for(i=0;i=0},e.sign.keyPair=function(){var e=new Uint8Array(fe),t=new Uint8Array(pe);return ne(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(de(e),e.length!==pe)throw new Error("bad secret key size");for(var t=new Uint8Array(fe),r=0;r{"use strict";e.exports=Math.floor},9032:(e,t,r)=>{"use strict";var n=r(7244),o=r(8184),i=r(5767),a=r(5680);function s(e){return e.call.bind(e)}var u="undefined"!=typeof BigInt,c="undefined"!=typeof Symbol,l=s(Object.prototype.toString),f=s(Number.prototype.valueOf),p=s(String.prototype.valueOf),h=s(Boolean.prototype.valueOf);if(u)var d=s(BigInt.prototype.valueOf);if(c)var y=s(Symbol.prototype.valueOf);function m(e,t){if("object"!=typeof e)return!1;try{return t(e),!0}catch(e){return!1}}function g(e){return"[object Map]"===l(e)}function v(e){return"[object Set]"===l(e)}function b(e){return"[object WeakMap]"===l(e)}function w(e){return"[object WeakSet]"===l(e)}function S(e){return"[object ArrayBuffer]"===l(e)}function k(e){return"undefined"!=typeof ArrayBuffer&&(S.working?S(e):e instanceof ArrayBuffer)}function E(e){return"[object DataView]"===l(e)}function A(e){return"undefined"!=typeof DataView&&(E.working?E(e):e instanceof DataView)}t.isArgumentsObject=n,t.isGeneratorFunction=o,t.isTypedArray=a,t.isPromise=function(e){return"undefined"!=typeof Promise&&e instanceof Promise||null!==e&&"object"==typeof e&&"function"==typeof e.then&&"function"==typeof e.catch},t.isArrayBufferView=function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):a(e)||A(e)},t.isUint8Array=function(e){return"Uint8Array"===i(e)},t.isUint8ClampedArray=function(e){return"Uint8ClampedArray"===i(e)},t.isUint16Array=function(e){return"Uint16Array"===i(e)},t.isUint32Array=function(e){return"Uint32Array"===i(e)},t.isInt8Array=function(e){return"Int8Array"===i(e)},t.isInt16Array=function(e){return"Int16Array"===i(e)},t.isInt32Array=function(e){return"Int32Array"===i(e)},t.isFloat32Array=function(e){return"Float32Array"===i(e)},t.isFloat64Array=function(e){return"Float64Array"===i(e)},t.isBigInt64Array=function(e){return"BigInt64Array"===i(e)},t.isBigUint64Array=function(e){return"BigUint64Array"===i(e)},g.working="undefined"!=typeof Map&&g(new Map),t.isMap=function(e){return"undefined"!=typeof Map&&(g.working?g(e):e instanceof Map)},v.working="undefined"!=typeof Set&&v(new Set),t.isSet=function(e){return"undefined"!=typeof Set&&(v.working?v(e):e instanceof Set)},b.working="undefined"!=typeof WeakMap&&b(new WeakMap),t.isWeakMap=function(e){return"undefined"!=typeof WeakMap&&(b.working?b(e):e instanceof WeakMap)},w.working="undefined"!=typeof WeakSet&&w(new WeakSet),t.isWeakSet=function(e){return w(e)},S.working="undefined"!=typeof ArrayBuffer&&S(new ArrayBuffer),t.isArrayBuffer=k,E.working="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView&&E(new DataView(new ArrayBuffer(1),0,1)),t.isDataView=A;var T="undefined"!=typeof SharedArrayBuffer?SharedArrayBuffer:void 0;function O(e){return"[object SharedArrayBuffer]"===l(e)}function P(e){return void 0!==T&&(void 0===O.working&&(O.working=O(new T)),O.working?O(e):e instanceof T)}function x(e){return m(e,f)}function I(e){return m(e,p)}function B(e){return m(e,h)}function _(e){return u&&m(e,d)}function R(e){return c&&m(e,y)}t.isSharedArrayBuffer=P,t.isAsyncFunction=function(e){return"[object AsyncFunction]"===l(e)},t.isMapIterator=function(e){return"[object Map Iterator]"===l(e)},t.isSetIterator=function(e){return"[object Set Iterator]"===l(e)},t.isGeneratorObject=function(e){return"[object Generator]"===l(e)},t.isWebAssemblyCompiledModule=function(e){return"[object WebAssembly.Module]"===l(e)},t.isNumberObject=x,t.isStringObject=I,t.isBooleanObject=B,t.isBigIntObject=_,t.isSymbolObject=R,t.isBoxedPrimitive=function(e){return x(e)||I(e)||B(e)||_(e)||R(e)},t.isAnyArrayBuffer=function(e){return"undefined"!=typeof Uint8Array&&(k(e)||P(e))},["isProxy","isExternal","isModuleNamespaceObject"].forEach((function(e){Object.defineProperty(t,e,{enumerable:!1,value:function(){throw new Error(e+" is not supported in userland")}})}))},9092:(e,t,r)=>{"use strict";var n=r(1333);e.exports=function(){return n()&&!!Symbol.toStringTag}},9133:(e,t,r)=>{"use strict";var n=r(8403);e.exports=function(){return Object.assign?function(){if(!Object.assign)return!1;for(var e="abcdefghijklmnopqrst",t=e.split(""),r={},n=0;n{"use strict";var n=r(6578),o="undefined"==typeof globalThis?r.g:globalThis;e.exports=function(){for(var e=[],t=0;t{"use strict";var t=function(e){return e!=e};e.exports=function(e,r){return 0===e&&0===r?1/e==1/r:e===r||!(!t(e)||!t(r))}},9290:e=>{"use strict";e.exports=RangeError},9353:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";e.exports=Error},9394:(e,t,r)=>{"use strict";var n=r(9211);e.exports=function(){return"function"==typeof Object.is?Object.is:n}},9538:e=>{"use strict";e.exports=ReferenceError},9597:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;r2?"one of ".concat(t," ").concat(e.slice(0,r-1).join(", "),", or ")+e[r-1]:2===r?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}f("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError),f("ERR_INVALID_ARG_TYPE",(function(e,t,o){var i,a,s,c;if(void 0===u&&(u=r(4148)),u("string"==typeof e,"'name' must be a string"),"string"==typeof t&&(a="not ",t.substr(!s||s<0?0:+s,a.length)===a)?(i="must not be",t=t.replace(/^not /,"")):i="must be",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e," argument"))c="The ".concat(e," ").concat(i," ").concat(p(t,"type"));else{var l=function(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,".")?"property":"argument";c='The "'.concat(e,'" ').concat(l," ").concat(i," ").concat(p(t,"type"))}return c+=". Received type ".concat(n(o))}),TypeError),f("ERR_INVALID_ARG_VALUE",(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"is invalid";void 0===c&&(c=r(537));var o=c.inspect(t);return o.length>128&&(o="".concat(o.slice(0,128),"...")),"The argument '".concat(e,"' ").concat(n,". Received ").concat(o)}),TypeError,RangeError),f("ERR_INVALID_RETURN_VALUE",(function(e,t,r){var o;return o=r&&r.constructor&&r.constructor.name?"instance of ".concat(r.constructor.name):"type ".concat(n(r)),"Expected ".concat(e,' to be returned from the "').concat(t,'"')+" function but got ".concat(o,".")}),TypeError),f("ERR_MISSING_ARGS",(function(){for(var e=arguments.length,t=new Array(e),n=0;n0,"At least one arg needs to be specified");var o="The ",i=t.length;switch(t=t.map((function(e){return'"'.concat(e,'"')})),i){case 1:o+="".concat(t[0]," argument");break;case 2:o+="".concat(t[0]," and ").concat(t[1]," arguments");break;default:o+=t.slice(0,i-1).join(", "),o+=", and ".concat(t[i-1]," arguments")}return"".concat(o," must be specified")}),TypeError),e.exports.codes=l},9600:e=>{"use strict";var t,r,n=Function.prototype.toString,o="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof o&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw r}}),r={},o((function(){throw 42}),null,t)}catch(e){e!==r&&(o=null)}else o=null;var i=/^\s*class\b/,a=function(e){try{var t=n.call(e);return i.test(t)}catch(e){return!1}},s=function(e){try{return!a(e)&&(n.call(e),!0)}catch(e){return!1}},u=Object.prototype.toString,c="function"==typeof Symbol&&!!Symbol.toStringTag,l=!(0 in[,]),f=function(){return!1};if("object"==typeof document){var p=document.all;u.call(p)===u.call(document.all)&&(f=function(e){if((l||!e)&&(void 0===e||"object"==typeof e))try{var t=u.call(e);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==e("")}catch(e){}return!1})}e.exports=o?function(e){if(f(e))return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;try{o(e,null,t)}catch(e){if(e!==r)return!1}return!a(e)&&s(e)}:function(e){if(f(e))return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if(c)return s(e);if(a(e))return!1;var t=u.call(e);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&s(e)}},9612:e=>{"use strict";e.exports=Object},9675:e=>{"use strict";e.exports=TypeError},9721:(e,t,r)=>{"use strict";var n=r(6556),o=r(4035),i=n("RegExp.prototype.exec"),a=r(9675);e.exports=function(e){if(!o(e))throw new a("`regex` must be a RegExp");return function(t){return null!==i(e,t)}}},9957:(e,t,r)=>{"use strict";var n=Function.prototype.call,o=Object.prototype.hasOwnProperty,i=r(6743);e.exports=i.call(n,o)}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n=r(7957);StellarBase=n})(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/account.js b/node_modules/@stellar/stellar-base/lib/account.js new file mode 100644 index 00000000..8846ac27 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/account.js @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Account = void 0; +var _bignumber = _interopRequireDefault(require("./util/bignumber")); +var _strkey = require("./strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Create a new Account object. + * + * `Account` represents a single account in the Stellar network and its sequence + * number. Account tracks the sequence number as it is used by {@link + * TransactionBuilder}. See + * [Accounts](https://developers.stellar.org/docs/glossary/accounts/) for + * more information about how accounts work in Stellar. + * + * @constructor + * + * @param {string} accountId - ID of the account (ex. + * `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`). If you + * provide a muxed account address, this will throw; use {@link + * MuxedAccount} instead. + * @param {string} sequence - current sequence number of the account + */ +var Account = exports.Account = /*#__PURE__*/function () { + function Account(accountId, sequence) { + _classCallCheck(this, Account); + if (_strkey.StrKey.isValidMed25519PublicKey(accountId)) { + throw new Error('accountId is an M-address; use MuxedAccount instead'); + } + if (!_strkey.StrKey.isValidEd25519PublicKey(accountId)) { + throw new Error('accountId is invalid'); + } + if (!(typeof sequence === 'string')) { + throw new Error('sequence must be of type string'); + } + this._accountId = accountId; + this.sequence = new _bignumber["default"](sequence); + } + + /** + * Returns Stellar account ID, ex. + * `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`. + * @returns {string} + */ + return _createClass(Account, [{ + key: "accountId", + value: function accountId() { + return this._accountId; + } + + /** + * @returns {string} sequence number for the account as a string + */ + }, { + key: "sequenceNumber", + value: function sequenceNumber() { + return this.sequence.toString(); + } + + /** + * Increments sequence number in this object by one. + * @returns {void} + */ + }, { + key: "incrementSequenceNumber", + value: function incrementSequenceNumber() { + this.sequence = this.sequence.plus(1); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/address.js b/node_modules/@stellar/stellar-base/lib/address.js new file mode 100644 index 00000000..e4a36c0b --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/address.js @@ -0,0 +1,168 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Address = void 0; +var _strkey = require("./strkey"); +var _xdr = _interopRequireDefault(require("./xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Create a new Address object. + * + * `Address` represents a single address in the Stellar network. An address can + * represent an account or a contract. + * + * @constructor + * + * @param {string} address - ID of the account (ex. + * `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`). If you + * provide a muxed account address, this will throw; use {@link + * MuxedAccount} instead. + */ +var Address = exports.Address = /*#__PURE__*/function () { + function Address(address) { + _classCallCheck(this, Address); + if (_strkey.StrKey.isValidEd25519PublicKey(address)) { + this._type = 'account'; + this._key = _strkey.StrKey.decodeEd25519PublicKey(address); + } else if (_strkey.StrKey.isValidContract(address)) { + this._type = 'contract'; + this._key = _strkey.StrKey.decodeContract(address); + } else { + throw new Error("Unsupported address type: ".concat(address)); + } + } + + /** + * Parses a string and returns an Address object. + * + * @param {string} address - The address to parse. ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA` + * @returns {Address} + */ + return _createClass(Address, [{ + key: "toString", + value: + /** + * Serialize an address to string. + * + * @returns {string} + */ + function toString() { + switch (this._type) { + case 'account': + return _strkey.StrKey.encodeEd25519PublicKey(this._key); + case 'contract': + return _strkey.StrKey.encodeContract(this._key); + default: + throw new Error('Unsupported address type'); + } + } + + /** + * Convert this Address to an xdr.ScVal type. + * + * @returns {xdr.ScVal} + */ + }, { + key: "toScVal", + value: function toScVal() { + return _xdr["default"].ScVal.scvAddress(this.toScAddress()); + } + + /** + * Convert this Address to an xdr.ScAddress type. + * + * @returns {xdr.ScAddress} + */ + }, { + key: "toScAddress", + value: function toScAddress() { + switch (this._type) { + case 'account': + return _xdr["default"].ScAddress.scAddressTypeAccount(_xdr["default"].PublicKey.publicKeyTypeEd25519(this._key)); + case 'contract': + return _xdr["default"].ScAddress.scAddressTypeContract(this._key); + default: + throw new Error('Unsupported address type'); + } + } + + /** + * Return the raw public key bytes for this address. + * + * @returns {Buffer} + */ + }, { + key: "toBuffer", + value: function toBuffer() { + return this._key; + } + }], [{ + key: "fromString", + value: function fromString(address) { + return new Address(address); + } + + /** + * Creates a new account Address object from a buffer of raw bytes. + * + * @param {Buffer} buffer - The bytes of an address to parse. + * @returns {Address} + */ + }, { + key: "account", + value: function account(buffer) { + return new Address(_strkey.StrKey.encodeEd25519PublicKey(buffer)); + } + + /** + * Creates a new contract Address object from a buffer of raw bytes. + * + * @param {Buffer} buffer - The bytes of an address to parse. + * @returns {Address} + */ + }, { + key: "contract", + value: function contract(buffer) { + return new Address(_strkey.StrKey.encodeContract(buffer)); + } + + /** + * Convert this from an xdr.ScVal type + * + * @param {xdr.ScVal} scVal - The xdr.ScVal type to parse + * @returns {Address} + */ + }, { + key: "fromScVal", + value: function fromScVal(scVal) { + return Address.fromScAddress(scVal.address()); + } + + /** + * Convert this from an xdr.ScAddress type + * + * @param {xdr.ScAddress} scAddress - The xdr.ScAddress type to parse + * @returns {Address} + */ + }, { + key: "fromScAddress", + value: function fromScAddress(scAddress) { + switch (scAddress["switch"]().value) { + case _xdr["default"].ScAddressType.scAddressTypeAccount().value: + return Address.account(scAddress.accountId().ed25519()); + case _xdr["default"].ScAddressType.scAddressTypeContract().value: + return Address.contract(scAddress.contractId()); + default: + throw new Error('Unsupported address type'); + } + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/asset.js b/node_modules/@stellar/stellar-base/lib/asset.js new file mode 100644 index 00000000..e4aa22f6 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/asset.js @@ -0,0 +1,322 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Asset = void 0; +var _util = require("./util/util"); +var _xdr = _interopRequireDefault(require("./xdr")); +var _keypair = require("./keypair"); +var _strkey = require("./strkey"); +var _hashing = require("./hashing"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Asset class represents an asset, either the native asset (`XLM`) + * or an asset code / issuer account ID pair. + * + * An asset code describes an asset code and issuer pair. In the case of the native + * asset XLM, the issuer will be null. + * + * @constructor + * @param {string} code - The asset code. + * @param {string} issuer - The account ID of the issuer. + */ +var Asset = exports.Asset = /*#__PURE__*/function () { + function Asset(code, issuer) { + _classCallCheck(this, Asset); + if (!/^[a-zA-Z0-9]{1,12}$/.test(code)) { + throw new Error('Asset code is invalid (maximum alphanumeric, 12 characters at max)'); + } + if (String(code).toLowerCase() !== 'xlm' && !issuer) { + throw new Error('Issuer cannot be null'); + } + if (issuer && !_strkey.StrKey.isValidEd25519PublicKey(issuer)) { + throw new Error('Issuer is invalid'); + } + if (String(code).toLowerCase() === 'xlm') { + // transform all xLM, Xlm, etc. variants -> XLM + this.code = 'XLM'; + } else { + this.code = code; + } + this.issuer = issuer; + } + + /** + * Returns an asset object for the native asset. + * @Return {Asset} + */ + return _createClass(Asset, [{ + key: "toXDRObject", + value: + /** + * Returns the xdr.Asset object for this asset. + * @returns {xdr.Asset} XDR asset object + */ + function toXDRObject() { + return this._toXDRObject(_xdr["default"].Asset); + } + + /** + * Returns the xdr.ChangeTrustAsset object for this asset. + * @returns {xdr.ChangeTrustAsset} XDR asset object + */ + }, { + key: "toChangeTrustXDRObject", + value: function toChangeTrustXDRObject() { + return this._toXDRObject(_xdr["default"].ChangeTrustAsset); + } + + /** + * Returns the xdr.TrustLineAsset object for this asset. + * @returns {xdr.TrustLineAsset} XDR asset object + */ + }, { + key: "toTrustLineXDRObject", + value: function toTrustLineXDRObject() { + return this._toXDRObject(_xdr["default"].TrustLineAsset); + } + + /** + * Returns the would-be contract ID (`C...` format) for this asset on a given + * network. + * + * @param {string} networkPassphrase indicates which network the contract + * ID should refer to, since every network will have a unique ID for the + * same contract (see {@link Networks} for options) + * + * @returns {string} the strkey-encoded (`C...`) contract ID for this asset + * + * @warning This makes no guarantee that this contract actually *exists*. + */ + }, { + key: "contractId", + value: function contractId(networkPassphrase) { + var networkId = (0, _hashing.hash)(Buffer.from(networkPassphrase)); + var preimage = _xdr["default"].HashIdPreimage.envelopeTypeContractId(new _xdr["default"].HashIdPreimageContractId({ + networkId: networkId, + contractIdPreimage: _xdr["default"].ContractIdPreimage.contractIdPreimageFromAsset(this.toXDRObject()) + })); + return _strkey.StrKey.encodeContract((0, _hashing.hash)(preimage.toXDR())); + } + + /** + * Returns the xdr object for this asset. + * @param {xdr.Asset | xdr.ChangeTrustAsset} xdrAsset - The asset xdr object. + * @returns {xdr.Asset | xdr.ChangeTrustAsset | xdr.TrustLineAsset} XDR Asset object + */ + }, { + key: "_toXDRObject", + value: function _toXDRObject() { + var xdrAsset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _xdr["default"].Asset; + if (this.isNative()) { + return xdrAsset.assetTypeNative(); + } + var xdrType; + var xdrTypeString; + if (this.code.length <= 4) { + xdrType = _xdr["default"].AlphaNum4; + xdrTypeString = 'assetTypeCreditAlphanum4'; + } else { + xdrType = _xdr["default"].AlphaNum12; + xdrTypeString = 'assetTypeCreditAlphanum12'; + } + + // pad code with null bytes if necessary + var padLength = this.code.length <= 4 ? 4 : 12; + var paddedCode = this.code.padEnd(padLength, '\0'); + + // eslint-disable-next-line new-cap + var assetType = new xdrType({ + assetCode: paddedCode, + issuer: _keypair.Keypair.fromPublicKey(this.issuer).xdrAccountId() + }); + return new xdrAsset(xdrTypeString, assetType); + } + + /** + * @returns {string} Asset code + */ + }, { + key: "getCode", + value: function getCode() { + if (this.code === undefined) { + return undefined; + } + return String(this.code); + } + + /** + * @returns {string} Asset issuer + */ + }, { + key: "getIssuer", + value: function getIssuer() { + if (this.issuer === undefined) { + return undefined; + } + return String(this.issuer); + } + + /** + * @see [Assets concept](https://developers.stellar.org/docs/glossary/assets/) + * @returns {string} Asset type. Can be one of following types: + * + * - `native`, + * - `credit_alphanum4`, + * - `credit_alphanum12`, or + * - `unknown` as the error case (which should never occur) + */ + }, { + key: "getAssetType", + value: function getAssetType() { + switch (this.getRawAssetType().value) { + case _xdr["default"].AssetType.assetTypeNative().value: + return 'native'; + case _xdr["default"].AssetType.assetTypeCreditAlphanum4().value: + return 'credit_alphanum4'; + case _xdr["default"].AssetType.assetTypeCreditAlphanum12().value: + return 'credit_alphanum12'; + default: + return 'unknown'; + } + } + + /** + * @returns {xdr.AssetType} the raw XDR representation of the asset type + */ + }, { + key: "getRawAssetType", + value: function getRawAssetType() { + if (this.isNative()) { + return _xdr["default"].AssetType.assetTypeNative(); + } + if (this.code.length <= 4) { + return _xdr["default"].AssetType.assetTypeCreditAlphanum4(); + } + return _xdr["default"].AssetType.assetTypeCreditAlphanum12(); + } + + /** + * @returns {boolean} true if this asset object is the native asset. + */ + }, { + key: "isNative", + value: function isNative() { + return !this.issuer; + } + + /** + * @param {Asset} asset Asset to compare + * @returns {boolean} true if this asset equals the given asset. + */ + }, { + key: "equals", + value: function equals(asset) { + return this.code === asset.getCode() && this.issuer === asset.getIssuer(); + } + }, { + key: "toString", + value: function toString() { + if (this.isNative()) { + return 'native'; + } + return "".concat(this.getCode(), ":").concat(this.getIssuer()); + } + + /** + * Compares two assets according to the criteria: + * + * 1. First compare the type (native < alphanum4 < alphanum12). + * 2. If the types are equal, compare the assets codes. + * 3. If the asset codes are equal, compare the issuers. + * + * @param {Asset} assetA - the first asset + * @param {Asset} assetB - the second asset + * @returns {number} `-1` if assetA < assetB, `0` if assetA == assetB, `1` if assetA > assetB. + * + * @static + * @memberof Asset + */ + }], [{ + key: "native", + value: function _native() { + return new Asset('XLM'); + } + + /** + * Returns an asset object from its XDR object representation. + * @param {xdr.Asset} assetXdr - The asset xdr object. + * @returns {Asset} + */ + }, { + key: "fromOperation", + value: function fromOperation(assetXdr) { + var anum; + var code; + var issuer; + switch (assetXdr["switch"]()) { + case _xdr["default"].AssetType.assetTypeNative(): + return this["native"](); + case _xdr["default"].AssetType.assetTypeCreditAlphanum4(): + anum = assetXdr.alphaNum4(); + /* falls through */ + case _xdr["default"].AssetType.assetTypeCreditAlphanum12(): + anum = anum || assetXdr.alphaNum12(); + issuer = _strkey.StrKey.encodeEd25519PublicKey(anum.issuer().ed25519()); + code = (0, _util.trimEnd)(anum.assetCode(), '\0'); + return new this(code, issuer); + default: + throw new Error("Invalid asset type: ".concat(assetXdr["switch"]().name)); + } + } + }, { + key: "compare", + value: function compare(assetA, assetB) { + if (!assetA || !(assetA instanceof Asset)) { + throw new Error('assetA is invalid'); + } + if (!assetB || !(assetB instanceof Asset)) { + throw new Error('assetB is invalid'); + } + if (assetA.equals(assetB)) { + return 0; + } + + // Compare asset types. + var xdrAtype = assetA.getRawAssetType().value; + var xdrBtype = assetB.getRawAssetType().value; + if (xdrAtype !== xdrBtype) { + return xdrAtype < xdrBtype ? -1 : 1; + } + + // Compare asset codes. + var result = asciiCompare(assetA.getCode(), assetB.getCode()); + if (result !== 0) { + return result; + } + + // Compare asset issuers. + return asciiCompare(assetA.getIssuer(), assetB.getIssuer()); + } + }]); +}(); +/** + * Compares two ASCII strings in lexographic order with uppercase precedence. + * + * @param {string} a - the first string to compare + * @param {string} b - the second + * @returns {number} like all `compare()`s: + * -1 if `a < b`, 0 if `a == b`, and 1 if `a > b` + * + * @warning No type-checks are done on the parameters + */ +function asciiCompare(a, b) { + return Buffer.compare(Buffer.from(a, 'ascii'), Buffer.from(b, 'ascii')); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/auth.js b/node_modules/@stellar/stellar-base/lib/auth.js new file mode 100644 index 00000000..889e444c --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/auth.js @@ -0,0 +1,279 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.authorizeEntry = authorizeEntry; +exports.authorizeInvocation = authorizeInvocation; +var _xdr = _interopRequireDefault(require("./xdr")); +var _keypair = require("./keypair"); +var _strkey = require("./strkey"); +var _network = require("./network"); +var _hashing = require("./hashing"); +var _address = require("./address"); +var _scval = require("./scval"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +/** + * @async + * @callback SigningCallback A callback for signing an XDR structure + * representing all of the details necessary to authorize an invocation tree. + * + * @param {xdr.HashIdPreimage} preimage the entire authorization envelope + * whose hash you should sign, so that you can inspect the entire structure + * if necessary (rather than blindly signing a hash) + * + * @returns { + * Promise | + * Promise<{signature: Uint8Array, publicKey: string} + * } the signature of the raw payload (which is the sha256 hash of the preimage + * bytes, so `hash(preimage.toXDR())`) either naked, implying it is signed + * by the key corresponding to the public key in the entry you pass to + * {@link authorizeEntry} (decipherable from its + * `credentials().address().address()`), or alongside an explicit `publicKey`. + */ +/** + * Actually authorizes an existing authorization entry using the given the + * credentials and expiration details, returning a signed copy. + * + * This "fills out" the authorization entry with a signature, indicating to the + * {@link Operation.invokeHostFunction} its attached to that: + * - a particular identity (i.e. signing {@link Keypair} or other signer) + * - approving the execution of an invocation tree (i.e. a simulation-acquired + * {@link xdr.SorobanAuthorizedInvocation} or otherwise built) + * - on a particular network (uniquely identified by its passphrase, see + * {@link Networks}) + * - until a particular ledger sequence is reached. + * + * This one lets you pass a either a {@link Keypair} (or, more accurately, + * anything with a `sign(Buffer): Buffer` method) or a callback function (see + * {@link SigningCallback}) to handle signing the envelope hash. + * + * @param {xdr.SorobanAuthorizationEntry} entry an unsigned authorization entr + * @param {Keypair | SigningCallback} signer either a {@link Keypair} instance + * or a function which takes a {@link xdr.HashIdPreimageSorobanAuthorization} + * input payload and returns EITHER + * + * (a) an object containing a `signature` of the hash of the raw payload bytes + * as a Buffer-like and a `publicKey` string representing who just + * created this signature, or + * (b) just the naked signature of the hash of the raw payload bytes (where + * the signing key is implied to be the address in the `entry`). + * + * The latter option (b) is JUST for backwards compatibility and will be + * removed in the future. + * @param {number} validUntilLedgerSeq the (exclusive) future ledger sequence + * number until which this authorization entry should be valid (if + * `currentLedgerSeq==validUntil`, this is expired)) + * @param {string} [networkPassphrase] the network passphrase is incorprated + * into the signature (see {@link Networks} for options) + * + * @returns {Promise} a promise for an + * authorization entry that you can pass along to + * {@link Operation.invokeHostFunction} + * + * @note If using the `SigningCallback` variation, the signer is assumed to be + * the entry's credential address unless you use the variant that returns + * the object. + * + * @see authorizeInvocation + * @example + * import { + * SorobanRpc, + * Transaction, + * Networks, + * authorizeEntry + * } from '@stellar/stellar-sdk'; + * + * // Assume signPayloadCallback is a well-formed signing callback. + * // + * // It might, for example, pop up a modal from a browser extension, send the + * // transaction to a third-party service for signing, or just do simple + * // signing via Keypair like it does here: + * function signPayloadCallback(payload) { + * return signer.sign(hash(payload.toXDR()); + * } + * + * function multiPartyAuth( + * server: SorobanRpc.Server, + * // assume this involves multi-party auth + * tx: Transaction, + * ) { + * return server + * .simulateTransaction(tx) + * .then((simResult) => { + * tx.operations[0].auth.map(entry => + * authorizeEntry( + * entry, + * signPayloadCallback, + * currentLedger + 1000, + * Networks.TESTNET); + * )); + * + * return server.prepareTransaction(tx, simResult); + * }) + * .then((preppedTx) => { + * preppedTx.sign(source); + * return server.sendTransaction(preppedTx); + * }); + * } + */ +function authorizeEntry(_x, _x2, _x3) { + return _authorizeEntry.apply(this, arguments); +} +/** + * This builds an entry from scratch, allowing you to express authorization as a + * function of: + * - a particular identity (i.e. signing {@link Keypair} or other signer) + * - approving the execution of an invocation tree (i.e. a simulation-acquired + * {@link xdr.SorobanAuthorizedInvocation} or otherwise built) + * - on a particular network (uniquely identified by its passphrase, see + * {@link Networks}) + * - until a particular ledger sequence is reached. + * + * This is in contrast to {@link authorizeEntry}, which signs an existing entry. + * + * @param {Keypair | SigningCallback} signer either a {@link Keypair} instance + * (or anything with a `.sign(buf): Buffer-like` method) or a function which + * takes a payload (a {@link xdr.HashIdPreimageSorobanAuthorization} + * instance) input and returns the signature of the hash of the raw payload + * bytes (where the signing key should correspond to the address in the + * `entry`) + * @param {number} validUntilLedgerSeq the (exclusive) future ledger sequence + * number until which this authorization entry should be valid (if + * `currentLedgerSeq==validUntilLedgerSeq`, this is expired)) + * @param {xdr.SorobanAuthorizedInvocation} invocation the invocation tree that + * we're authorizing (likely, this comes from transaction simulation) + * @param {string} [publicKey] the public identity of the signer (when + * providing a {@link Keypair} to `signer`, this can be omitted, as it just + * uses {@link Keypair.publicKey}) + * @param {string} [networkPassphrase] the network passphrase is incorprated + * into the signature (see {@link Networks} for options, default: + * {@link Networks.FUTURENET}) + * + * @returns {Promise} a promise for an + * authorization entry that you can pass along to + * {@link Operation.invokeHostFunction} + * + * @see authorizeEntry + */ +function _authorizeEntry() { + _authorizeEntry = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(entry, signer, validUntilLedgerSeq) { + var networkPassphrase, + clone, + addrAuth, + networkId, + preimage, + payload, + signature, + publicKey, + sigResult, + sigScVal, + _args = arguments; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + networkPassphrase = _args.length > 3 && _args[3] !== undefined ? _args[3] : _network.Networks.FUTURENET; + if (!(entry.credentials()["switch"]().value !== _xdr["default"].SorobanCredentialsType.sorobanCredentialsAddress().value)) { + _context.next = 3; + break; + } + return _context.abrupt("return", entry); + case 3: + clone = _xdr["default"].SorobanAuthorizationEntry.fromXDR(entry.toXDR()); + /** @type {xdr.SorobanAddressCredentials} */ + addrAuth = clone.credentials().address(); + addrAuth.signatureExpirationLedger(validUntilLedgerSeq); + networkId = (0, _hashing.hash)(Buffer.from(networkPassphrase)); + preimage = _xdr["default"].HashIdPreimage.envelopeTypeSorobanAuthorization(new _xdr["default"].HashIdPreimageSorobanAuthorization({ + networkId: networkId, + nonce: addrAuth.nonce(), + invocation: clone.rootInvocation(), + signatureExpirationLedger: addrAuth.signatureExpirationLedger() + })); + payload = (0, _hashing.hash)(preimage.toXDR()); + if (!(typeof signer === 'function')) { + _context.next = 16; + break; + } + _context.next = 12; + return signer(preimage); + case 12: + sigResult = _context.sent; + if (sigResult !== null && sigResult !== void 0 && sigResult.signature) { + signature = Buffer.from(sigResult.signature); + publicKey = sigResult.publicKey; + } else { + // if using the deprecated form, assume it's for the entry + signature = Buffer.from(sigResult); + publicKey = _address.Address.fromScAddress(addrAuth.address()).toString(); + } + _context.next = 18; + break; + case 16: + signature = Buffer.from(signer.sign(payload)); + publicKey = signer.publicKey(); + case 18: + if (_keypair.Keypair.fromPublicKey(publicKey).verify(payload, signature)) { + _context.next = 20; + break; + } + throw new Error("signature doesn't match payload"); + case 20: + // This structure is defined here: + // https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#stellar-account-signatures + // + // Encoding a contract structure as an ScVal means the map keys are supposed + // to be symbols, hence the forced typing here. + sigScVal = (0, _scval.nativeToScVal)({ + public_key: _strkey.StrKey.decodeEd25519PublicKey(publicKey), + signature: signature + }, { + type: { + public_key: ['symbol', null], + signature: ['symbol', null] + } + }); + addrAuth.signature(_xdr["default"].ScVal.scvVec([sigScVal])); + return _context.abrupt("return", clone); + case 23: + case "end": + return _context.stop(); + } + }, _callee); + })); + return _authorizeEntry.apply(this, arguments); +} +function authorizeInvocation(signer, validUntilLedgerSeq, invocation) { + var publicKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; + var networkPassphrase = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _network.Networks.FUTURENET; + // We use keypairs as a source of randomness for the nonce to avoid mucking + // with any crypto dependencies. Note that this just has to be random and + // unique, not cryptographically secure, so it's fine. + var kp = _keypair.Keypair.random().rawPublicKey(); + var nonce = new _xdr["default"].Int64(bytesToInt64(kp)); + var pk = publicKey || signer.publicKey(); + if (!pk) { + throw new Error("authorizeInvocation requires publicKey parameter"); + } + var entry = new _xdr["default"].SorobanAuthorizationEntry({ + rootInvocation: invocation, + credentials: _xdr["default"].SorobanCredentials.sorobanCredentialsAddress(new _xdr["default"].SorobanAddressCredentials({ + address: new _address.Address(pk).toScAddress(), + nonce: nonce, + signatureExpirationLedger: 0, + // replaced + signature: _xdr["default"].ScVal.scvVec([]) // replaced + })) + }); + return authorizeEntry(entry, signer, validUntilLedgerSeq, networkPassphrase); +} +function bytesToInt64(bytes) { + // eslint-disable-next-line no-bitwise + return bytes.subarray(0, 8).reduce(function (accum, b) { + return accum << 8 | b; + }, 0); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/claimant.js b/node_modules/@stellar/stellar-base/lib/claimant.js new file mode 100644 index 00000000..0584d95d --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/claimant.js @@ -0,0 +1,192 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Claimant = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _keypair = require("./keypair"); +var _strkey = require("./strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Claimant class represents an xdr.Claimant + * + * The claim predicate is optional, it defaults to unconditional if none is specified. + * + * @constructor + * @param {string} destination - The destination account ID. + * @param {xdr.ClaimPredicate} [predicate] - The claim predicate. + */ +var Claimant = exports.Claimant = /*#__PURE__*/function () { + function Claimant(destination, predicate) { + _classCallCheck(this, Claimant); + if (destination && !_strkey.StrKey.isValidEd25519PublicKey(destination)) { + throw new Error('Destination is invalid'); + } + this._destination = destination; + if (!predicate) { + this._predicate = _xdr["default"].ClaimPredicate.claimPredicateUnconditional(); + } else if (predicate instanceof _xdr["default"].ClaimPredicate) { + this._predicate = predicate; + } else { + throw new Error('Predicate should be an xdr.ClaimPredicate'); + } + } + + /** + * Returns an unconditional claim predicate + * @Return {xdr.ClaimPredicate} + */ + return _createClass(Claimant, [{ + key: "toXDRObject", + value: + /** + * Returns the xdr object for this claimant. + * @returns {xdr.Claimant} XDR Claimant object + */ + function toXDRObject() { + var claimant = new _xdr["default"].ClaimantV0({ + destination: _keypair.Keypair.fromPublicKey(this._destination).xdrAccountId(), + predicate: this._predicate + }); + return _xdr["default"].Claimant.claimantTypeV0(claimant); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "destination", + get: function get() { + return this._destination; + }, + set: function set(value) { + throw new Error('Claimant is immutable'); + } + + /** + * @type {xdr.ClaimPredicate} + * @readonly + */ + }, { + key: "predicate", + get: function get() { + return this._predicate; + }, + set: function set(value) { + throw new Error('Claimant is immutable'); + } + }], [{ + key: "predicateUnconditional", + value: function predicateUnconditional() { + return _xdr["default"].ClaimPredicate.claimPredicateUnconditional(); + } + + /** + * Returns an `and` claim predicate + * @param {xdr.ClaimPredicate} left an xdr.ClaimPredicate + * @param {xdr.ClaimPredicate} right an xdr.ClaimPredicate + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateAnd", + value: function predicateAnd(left, right) { + if (!(left instanceof _xdr["default"].ClaimPredicate)) { + throw new Error('left Predicate should be an xdr.ClaimPredicate'); + } + if (!(right instanceof _xdr["default"].ClaimPredicate)) { + throw new Error('right Predicate should be an xdr.ClaimPredicate'); + } + return _xdr["default"].ClaimPredicate.claimPredicateAnd([left, right]); + } + + /** + * Returns an `or` claim predicate + * @param {xdr.ClaimPredicate} left an xdr.ClaimPredicate + * @param {xdr.ClaimPredicate} right an xdr.ClaimPredicate + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateOr", + value: function predicateOr(left, right) { + if (!(left instanceof _xdr["default"].ClaimPredicate)) { + throw new Error('left Predicate should be an xdr.ClaimPredicate'); + } + if (!(right instanceof _xdr["default"].ClaimPredicate)) { + throw new Error('right Predicate should be an xdr.ClaimPredicate'); + } + return _xdr["default"].ClaimPredicate.claimPredicateOr([left, right]); + } + + /** + * Returns a `not` claim predicate + * @param {xdr.ClaimPredicate} predicate an xdr.ClaimPredicate + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateNot", + value: function predicateNot(predicate) { + if (!(predicate instanceof _xdr["default"].ClaimPredicate)) { + throw new Error('right Predicate should be an xdr.ClaimPredicate'); + } + return _xdr["default"].ClaimPredicate.claimPredicateNot(predicate); + } + + /** + * Returns a `BeforeAbsoluteTime` claim predicate + * + * This predicate will be fulfilled if the closing time of the ledger that + * includes the CreateClaimableBalance operation is less than this (absolute) + * Unix timestamp (expressed in seconds). + * + * @param {string} absBefore Unix epoch (in seconds) as a string + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateBeforeAbsoluteTime", + value: function predicateBeforeAbsoluteTime(absBefore) { + return _xdr["default"].ClaimPredicate.claimPredicateBeforeAbsoluteTime(_xdr["default"].Int64.fromString(absBefore)); + } + + /** + * Returns a `BeforeRelativeTime` claim predicate + * + * This predicate will be fulfilled if the closing time of the ledger that + * includes the CreateClaimableBalance operation plus this relative time delta + * (in seconds) is less than the current time. + * + * @param {strings} seconds seconds since closeTime of the ledger in which the ClaimableBalanceEntry was created (as string) + * @Return {xdr.ClaimPredicate} + */ + }, { + key: "predicateBeforeRelativeTime", + value: function predicateBeforeRelativeTime(seconds) { + return _xdr["default"].ClaimPredicate.claimPredicateBeforeRelativeTime(_xdr["default"].Int64.fromString(seconds)); + } + + /** + * Returns a claimant object from its XDR object representation. + * @param {xdr.Claimant} claimantXdr - The claimant xdr object. + * @returns {Claimant} + */ + }, { + key: "fromXDR", + value: function fromXDR(claimantXdr) { + var value; + switch (claimantXdr["switch"]()) { + case _xdr["default"].ClaimantType.claimantTypeV0(): + value = claimantXdr.v0(); + return new this(_strkey.StrKey.encodeEd25519PublicKey(value.destination().ed25519()), value.predicate()); + default: + throw new Error("Invalid claimant type: ".concat(claimantXdr["switch"]().name)); + } + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/contract.js b/node_modules/@stellar/stellar-base/lib/contract.js new file mode 100644 index 00000000..cf8df59b --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/contract.js @@ -0,0 +1,112 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Contract = void 0; +var _address = require("./address"); +var _operation = require("./operation"); +var _xdr = _interopRequireDefault(require("./xdr")); +var _strkey = require("./strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Create a new Contract object. + * + * `Contract` represents a single contract in the Stellar network, embodying the + * interface of the contract. See + * [Contracts](https://soroban.stellar.org/docs/learn/interacting-with-contracts) + * for more information about how contracts work in Stellar. + * + * @constructor + * + * @param {string} contractId - ID of the contract (ex. + * `CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE`). + */ +var Contract = exports.Contract = /*#__PURE__*/function () { + function Contract(contractId) { + _classCallCheck(this, Contract); + try { + // First, try it as a strkey + this._id = _strkey.StrKey.decodeContract(contractId); + } catch (_) { + throw new Error("Invalid contract ID: ".concat(contractId)); + } + } + + /** + * Returns Stellar contract ID as a strkey, ex. + * `CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE`. + * @returns {string} + */ + return _createClass(Contract, [{ + key: "contractId", + value: function contractId() { + return _strkey.StrKey.encodeContract(this._id); + } + + /** @returns {string} the ID as a strkey (C...) */ + }, { + key: "toString", + value: function toString() { + return this.contractId(); + } + + /** @returns {Address} the wrapped address of this contract */ + }, { + key: "address", + value: function address() { + return _address.Address.contract(this._id); + } + + /** + * Returns an operation that will invoke this contract call. + * + * @param {string} method name of the method to call + * @param {...xdr.ScVal} params arguments to pass to the function call + * + * @returns {xdr.Operation} an InvokeHostFunctionOp operation to call the + * contract with the given method and parameters + * + * @see Operation.invokeHostFunction + * @see Operation.invokeContractFunction + * @see Operation.createCustomContract + * @see Operation.createStellarAssetContract + * @see Operation.uploadContractWasm + */ + }, { + key: "call", + value: function call(method) { + for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + params[_key - 1] = arguments[_key]; + } + return _operation.Operation.invokeContractFunction({ + contract: this.address().toString(), + "function": method, + args: params + }); + } + + /** + * Returns the read-only footprint entries necessary for any invocations to + * this contract, for convenience when manually adding it to your + * transaction's overall footprint or doing bump/restore operations. + * + * @returns {xdr.LedgerKey} the ledger key for the deployed contract instance + */ + }, { + key: "getFootprint", + value: function getFootprint() { + return _xdr["default"].LedgerKey.contractData(new _xdr["default"].LedgerKeyContractData({ + contract: this.address().toScAddress(), + key: _xdr["default"].ScVal.scvLedgerKeyContractInstance(), + durability: _xdr["default"].ContractDataDurability.persistent() + })); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/events.js b/node_modules/@stellar/stellar-base/lib/events.js new file mode 100644 index 00000000..5ae40635 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/events.js @@ -0,0 +1,49 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.humanizeEvents = humanizeEvents; +var _strkey = require("./strkey"); +var _scval = require("./scval"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Converts raw diagnostic or contract events into something with a flatter, + * human-readable, and understandable structure. + * + * @param {xdr.DiagnosticEvent[] | xdr.ContractEvent[]} events either contract + * events or diagnostic events to parse into a friendly format + * + * @returns {SorobanEvent[]} a list of human-readable event structures, where + * each element has the following properties: + * - type: a string of one of 'system', 'contract', 'diagnostic + * - contractId?: optionally, a `C...` encoded strkey + * - topics: a list of {@link scValToNative} invocations on the topics + * - data: similarly, a {@link scValToNative} invocation on the raw event data + */ +function humanizeEvents(events) { + return events.map(function (e) { + // A pseudo-instanceof check for xdr.DiagnosticEvent more reliable + // in mixed SDK environments: + if (e.inSuccessfulContractCall) { + return extractEvent(e.event()); + } + return extractEvent(e); + }); +} +function extractEvent(event) { + return _objectSpread(_objectSpread({}, typeof event.contractId === 'function' && event.contractId() != null && { + contractId: _strkey.StrKey.encodeContract(event.contractId()) + }), {}, { + type: event.type().name, + topics: event.body().value().topics().map(function (t) { + return (0, _scval.scValToNative)(t); + }), + data: (0, _scval.scValToNative)(event.body().value().data()) + }); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/fee_bump_transaction.js b/node_modules/@stellar/stellar-base/lib/fee_bump_transaction.js new file mode 100644 index 00000000..640c23fb --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/fee_bump_transaction.js @@ -0,0 +1,132 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FeeBumpTransaction = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _hashing = require("./hashing"); +var _transaction = require("./transaction"); +var _transaction_base = require("./transaction_base"); +var _decode_encode_muxed_account = require("./util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Use {@link TransactionBuilder.buildFeeBumpTransaction} to build a + * FeeBumpTransaction object. If you have an object or base64-encoded string of + * the transaction envelope XDR use {@link TransactionBuilder.fromXDR}. + * + * Once a {@link FeeBumpTransaction} has been created, its attributes and operations + * should not be changed. You should only add signatures (using {@link FeeBumpTransaction#sign}) before + * submitting to the network or forwarding on to additional signers. + * + * @param {string|xdr.TransactionEnvelope} envelope - transaction envelope + * object or base64 encoded string. + * @param {string} networkPassphrase - passphrase of the target Stellar network + * (e.g. "Public Global Stellar Network ; September 2015"). + * + * @extends TransactionBase + */ +var FeeBumpTransaction = exports.FeeBumpTransaction = /*#__PURE__*/function (_TransactionBase) { + function FeeBumpTransaction(envelope, networkPassphrase) { + var _this; + _classCallCheck(this, FeeBumpTransaction); + if (typeof envelope === 'string') { + var buffer = Buffer.from(envelope, 'base64'); + envelope = _xdr["default"].TransactionEnvelope.fromXDR(buffer); + } + var envelopeType = envelope["switch"](); + if (envelopeType !== _xdr["default"].EnvelopeType.envelopeTypeTxFeeBump()) { + throw new Error("Invalid TransactionEnvelope: expected an envelopeTypeTxFeeBump but received an ".concat(envelopeType.name, ".")); + } + var txEnvelope = envelope.value(); + var tx = txEnvelope.tx(); + var fee = tx.fee().toString(); + // clone signatures + var signatures = (txEnvelope.signatures() || []).slice(); + _this = _callSuper(this, FeeBumpTransaction, [tx, signatures, fee, networkPassphrase]); + var innerTxEnvelope = _xdr["default"].TransactionEnvelope.envelopeTypeTx(tx.innerTx().v1()); + _this._feeSource = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(_this.tx.feeSource()); + _this._innerTransaction = new _transaction.Transaction(innerTxEnvelope, networkPassphrase); + return _this; + } + + /** + * @type {Transaction} + * @readonly + */ + _inherits(FeeBumpTransaction, _TransactionBase); + return _createClass(FeeBumpTransaction, [{ + key: "innerTransaction", + get: function get() { + return this._innerTransaction; + } + + /** + * @type {Operation[]} + * @readonly + */ + }, { + key: "operations", + get: function get() { + return this._innerTransaction.operations; + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "feeSource", + get: function get() { + return this._feeSource; + } + + /** + * Returns the "signature base" of this transaction, which is the value + * that, when hashed, should be signed to create a signature that + * validators on the Stellar Network will accept. + * + * It is composed of a 4 prefix bytes followed by the xdr-encoded form + * of this transaction. + * @returns {Buffer} + */ + }, { + key: "signatureBase", + value: function signatureBase() { + var taggedTransaction = new _xdr["default"].TransactionSignaturePayloadTaggedTransaction.envelopeTypeTxFeeBump(this.tx); + var txSignature = new _xdr["default"].TransactionSignaturePayload({ + networkId: _xdr["default"].Hash.fromXDR((0, _hashing.hash)(this.networkPassphrase)), + taggedTransaction: taggedTransaction + }); + return txSignature.toXDR(); + } + + /** + * To envelope returns a xdr.TransactionEnvelope which can be submitted to the network. + * @returns {xdr.TransactionEnvelope} + */ + }, { + key: "toEnvelope", + value: function toEnvelope() { + var envelope = new _xdr["default"].FeeBumpTransactionEnvelope({ + tx: _xdr["default"].FeeBumpTransaction.fromXDR(this.tx.toXDR()), + // make a copy of the tx + signatures: this.signatures.slice() // make a copy of the signatures + }); + return new _xdr["default"].TransactionEnvelope.envelopeTypeTxFeeBump(envelope); + } + }]); +}(_transaction_base.TransactionBase); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/generated/curr_generated.js b/node_modules/@stellar/stellar-base/lib/generated/curr_generated.js new file mode 100644 index 00000000..7c299ed7 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/generated/curr_generated.js @@ -0,0 +1,9166 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var XDR = _interopRequireWildcard(require("@stellar/js-xdr")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } +// Automatically generated by xdrgen on 2024-09-12T11:09:00-08:00 +// DO NOT EDIT or your changes may be overwritten + +/* jshint maxstatements:2147483647 */ +/* jshint esnext:true */ + +var types = XDR.config(function (xdr) { + // Workaround for https://github.com/stellar/xdrgen/issues/152 + // + // The "correct" way would be to replace bare instances of each constant with + // xdr.lookup("..."), but that's more error-prone. + var SCSYMBOL_LIMIT = 32; + var SC_SPEC_DOC_LIMIT = 1024; + + // === xdr source ============================================================ + // + // typedef opaque Value<>; + // + // =========================================================================== + xdr.typedef("Value", xdr.varOpaque()); + + // === xdr source ============================================================ + // + // struct SCPBallot + // { + // uint32 counter; // n + // Value value; // x + // }; + // + // =========================================================================== + xdr.struct("ScpBallot", [["counter", xdr.lookup("Uint32")], ["value", xdr.lookup("Value")]]); + + // === xdr source ============================================================ + // + // enum SCPStatementType + // { + // SCP_ST_PREPARE = 0, + // SCP_ST_CONFIRM = 1, + // SCP_ST_EXTERNALIZE = 2, + // SCP_ST_NOMINATE = 3 + // }; + // + // =========================================================================== + xdr["enum"]("ScpStatementType", { + scpStPrepare: 0, + scpStConfirm: 1, + scpStExternalize: 2, + scpStNominate: 3 + }); + + // === xdr source ============================================================ + // + // struct SCPNomination + // { + // Hash quorumSetHash; // D + // Value votes<>; // X + // Value accepted<>; // Y + // }; + // + // =========================================================================== + xdr.struct("ScpNomination", [["quorumSetHash", xdr.lookup("Hash")], ["votes", xdr.varArray(xdr.lookup("Value"), 2147483647)], ["accepted", xdr.varArray(xdr.lookup("Value"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } + // + // =========================================================================== + xdr.struct("ScpStatementPrepare", [["quorumSetHash", xdr.lookup("Hash")], ["ballot", xdr.lookup("ScpBallot")], ["prepared", xdr.option(xdr.lookup("ScpBallot"))], ["preparedPrime", xdr.option(xdr.lookup("ScpBallot"))], ["nC", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } + // + // =========================================================================== + xdr.struct("ScpStatementConfirm", [["ballot", xdr.lookup("ScpBallot")], ["nPrepared", xdr.lookup("Uint32")], ["nCommit", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")], ["quorumSetHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } + // + // =========================================================================== + xdr.struct("ScpStatementExternalize", [["commit", xdr.lookup("ScpBallot")], ["nH", xdr.lookup("Uint32")], ["commitQuorumSetHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union switch (SCPStatementType type) + // { + // case SCP_ST_PREPARE: + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } prepare; + // case SCP_ST_CONFIRM: + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } confirm; + // case SCP_ST_EXTERNALIZE: + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } externalize; + // case SCP_ST_NOMINATE: + // SCPNomination nominate; + // } + // + // =========================================================================== + xdr.union("ScpStatementPledges", { + switchOn: xdr.lookup("ScpStatementType"), + switchName: "type", + switches: [["scpStPrepare", "prepare"], ["scpStConfirm", "confirm"], ["scpStExternalize", "externalize"], ["scpStNominate", "nominate"]], + arms: { + prepare: xdr.lookup("ScpStatementPrepare"), + confirm: xdr.lookup("ScpStatementConfirm"), + externalize: xdr.lookup("ScpStatementExternalize"), + nominate: xdr.lookup("ScpNomination") + } + }); + + // === xdr source ============================================================ + // + // struct SCPStatement + // { + // NodeID nodeID; // v + // uint64 slotIndex; // i + // + // union switch (SCPStatementType type) + // { + // case SCP_ST_PREPARE: + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } prepare; + // case SCP_ST_CONFIRM: + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } confirm; + // case SCP_ST_EXTERNALIZE: + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } externalize; + // case SCP_ST_NOMINATE: + // SCPNomination nominate; + // } + // pledges; + // }; + // + // =========================================================================== + xdr.struct("ScpStatement", [["nodeId", xdr.lookup("NodeId")], ["slotIndex", xdr.lookup("Uint64")], ["pledges", xdr.lookup("ScpStatementPledges")]]); + + // === xdr source ============================================================ + // + // struct SCPEnvelope + // { + // SCPStatement statement; + // Signature signature; + // }; + // + // =========================================================================== + xdr.struct("ScpEnvelope", [["statement", xdr.lookup("ScpStatement")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // struct SCPQuorumSet + // { + // uint32 threshold; + // NodeID validators<>; + // SCPQuorumSet innerSets<>; + // }; + // + // =========================================================================== + xdr.struct("ScpQuorumSet", [["threshold", xdr.lookup("Uint32")], ["validators", xdr.varArray(xdr.lookup("NodeId"), 2147483647)], ["innerSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)]]); + + // === xdr source ============================================================ + // + // typedef opaque Thresholds[4]; + // + // =========================================================================== + xdr.typedef("Thresholds", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef string string32<32>; + // + // =========================================================================== + xdr.typedef("String32", xdr.string(32)); + + // === xdr source ============================================================ + // + // typedef string string64<64>; + // + // =========================================================================== + xdr.typedef("String64", xdr.string(64)); + + // === xdr source ============================================================ + // + // typedef int64 SequenceNumber; + // + // =========================================================================== + xdr.typedef("SequenceNumber", xdr.lookup("Int64")); + + // === xdr source ============================================================ + // + // typedef opaque DataValue<64>; + // + // =========================================================================== + xdr.typedef("DataValue", xdr.varOpaque(64)); + + // === xdr source ============================================================ + // + // typedef Hash PoolID; + // + // =========================================================================== + xdr.typedef("PoolId", xdr.lookup("Hash")); + + // === xdr source ============================================================ + // + // typedef opaque AssetCode4[4]; + // + // =========================================================================== + xdr.typedef("AssetCode4", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef opaque AssetCode12[12]; + // + // =========================================================================== + xdr.typedef("AssetCode12", xdr.opaque(12)); + + // === xdr source ============================================================ + // + // enum AssetType + // { + // ASSET_TYPE_NATIVE = 0, + // ASSET_TYPE_CREDIT_ALPHANUM4 = 1, + // ASSET_TYPE_CREDIT_ALPHANUM12 = 2, + // ASSET_TYPE_POOL_SHARE = 3 + // }; + // + // =========================================================================== + xdr["enum"]("AssetType", { + assetTypeNative: 0, + assetTypeCreditAlphanum4: 1, + assetTypeCreditAlphanum12: 2, + assetTypePoolShare: 3 + }); + + // === xdr source ============================================================ + // + // union AssetCode switch (AssetType type) + // { + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AssetCode4 assetCode4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AssetCode12 assetCode12; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("AssetCode", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeCreditAlphanum4", "assetCode4"], ["assetTypeCreditAlphanum12", "assetCode12"]], + arms: { + assetCode4: xdr.lookup("AssetCode4"), + assetCode12: xdr.lookup("AssetCode12") + } + }); + + // === xdr source ============================================================ + // + // struct AlphaNum4 + // { + // AssetCode4 assetCode; + // AccountID issuer; + // }; + // + // =========================================================================== + xdr.struct("AlphaNum4", [["assetCode", xdr.lookup("AssetCode4")], ["issuer", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // struct AlphaNum12 + // { + // AssetCode12 assetCode; + // AccountID issuer; + // }; + // + // =========================================================================== + xdr.struct("AlphaNum12", [["assetCode", xdr.lookup("AssetCode12")], ["issuer", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // union Asset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("Asset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12") + } + }); + + // === xdr source ============================================================ + // + // struct Price + // { + // int32 n; // numerator + // int32 d; // denominator + // }; + // + // =========================================================================== + xdr.struct("Price", [["n", xdr.lookup("Int32")], ["d", xdr.lookup("Int32")]]); + + // === xdr source ============================================================ + // + // struct Liabilities + // { + // int64 buying; + // int64 selling; + // }; + // + // =========================================================================== + xdr.struct("Liabilities", [["buying", xdr.lookup("Int64")], ["selling", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum ThresholdIndexes + // { + // THRESHOLD_MASTER_WEIGHT = 0, + // THRESHOLD_LOW = 1, + // THRESHOLD_MED = 2, + // THRESHOLD_HIGH = 3 + // }; + // + // =========================================================================== + xdr["enum"]("ThresholdIndices", { + thresholdMasterWeight: 0, + thresholdLow: 1, + thresholdMed: 2, + thresholdHigh: 3 + }); + + // === xdr source ============================================================ + // + // enum LedgerEntryType + // { + // ACCOUNT = 0, + // TRUSTLINE = 1, + // OFFER = 2, + // DATA = 3, + // CLAIMABLE_BALANCE = 4, + // LIQUIDITY_POOL = 5, + // CONTRACT_DATA = 6, + // CONTRACT_CODE = 7, + // CONFIG_SETTING = 8, + // TTL = 9 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerEntryType", { + account: 0, + trustline: 1, + offer: 2, + data: 3, + claimableBalance: 4, + liquidityPool: 5, + contractData: 6, + contractCode: 7, + configSetting: 8, + ttl: 9 + }); + + // === xdr source ============================================================ + // + // struct Signer + // { + // SignerKey key; + // uint32 weight; // really only need 1 byte + // }; + // + // =========================================================================== + xdr.struct("Signer", [["key", xdr.lookup("SignerKey")], ["weight", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // enum AccountFlags + // { // masks for each flag + // + // // Flags set on issuer accounts + // // TrustLines are created with authorized set to "false" requiring + // // the issuer to set it for each TrustLine + // AUTH_REQUIRED_FLAG = 0x1, + // // If set, the authorized flag in TrustLines can be cleared + // // otherwise, authorization cannot be revoked + // AUTH_REVOCABLE_FLAG = 0x2, + // // Once set, causes all AUTH_* flags to be read-only + // AUTH_IMMUTABLE_FLAG = 0x4, + // // Trustlines are created with clawback enabled set to "true", + // // and claimable balances created from those trustlines are created + // // with clawback enabled set to "true" + // AUTH_CLAWBACK_ENABLED_FLAG = 0x8 + // }; + // + // =========================================================================== + xdr["enum"]("AccountFlags", { + authRequiredFlag: 1, + authRevocableFlag: 2, + authImmutableFlag: 4, + authClawbackEnabledFlag: 8 + }); + + // === xdr source ============================================================ + // + // const MASK_ACCOUNT_FLAGS = 0x7; + // + // =========================================================================== + xdr["const"]("MASK_ACCOUNT_FLAGS", 0x7); + + // === xdr source ============================================================ + // + // const MASK_ACCOUNT_FLAGS_V17 = 0xF; + // + // =========================================================================== + xdr["const"]("MASK_ACCOUNT_FLAGS_V17", 0xF); + + // === xdr source ============================================================ + // + // const MAX_SIGNERS = 20; + // + // =========================================================================== + xdr["const"]("MAX_SIGNERS", 20); + + // === xdr source ============================================================ + // + // typedef AccountID* SponsorshipDescriptor; + // + // =========================================================================== + xdr.typedef("SponsorshipDescriptor", xdr.option(xdr.lookup("AccountId"))); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV3 + // { + // // We can use this to add more fields, or because it is first, to + // // change AccountEntryExtensionV3 into a union. + // ExtensionPoint ext; + // + // // Ledger number at which `seqNum` took on its present value. + // uint32 seqLedger; + // + // // Time at which `seqNum` took on its present value. + // TimePoint seqTime; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV3", [["ext", xdr.lookup("ExtensionPoint")], ["seqLedger", xdr.lookup("Uint32")], ["seqTime", xdr.lookup("TimePoint")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 3: + // AccountEntryExtensionV3 v3; + // } + // + // =========================================================================== + xdr.union("AccountEntryExtensionV2Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [3, "v3"]], + arms: { + v3: xdr.lookup("AccountEntryExtensionV3") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV2 + // { + // uint32 numSponsored; + // uint32 numSponsoring; + // SponsorshipDescriptor signerSponsoringIDs; + // + // union switch (int v) + // { + // case 0: + // void; + // case 3: + // AccountEntryExtensionV3 v3; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV2", [["numSponsored", xdr.lookup("Uint32")], ["numSponsoring", xdr.lookup("Uint32")], ["signerSponsoringIDs", xdr.varArray(xdr.lookup("SponsorshipDescriptor"), xdr.lookup("MAX_SIGNERS"))], ["ext", xdr.lookup("AccountEntryExtensionV2Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // AccountEntryExtensionV2 v2; + // } + // + // =========================================================================== + xdr.union("AccountEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [2, "v2"]], + arms: { + v2: xdr.lookup("AccountEntryExtensionV2") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV1 + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // AccountEntryExtensionV2 v2; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("AccountEntryExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // AccountEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("AccountEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("AccountEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntry + // { + // AccountID accountID; // master public key for this account + // int64 balance; // in stroops + // SequenceNumber seqNum; // last sequence number used for this account + // uint32 numSubEntries; // number of sub-entries this account has + // // drives the reserve + // AccountID* inflationDest; // Account to vote for during inflation + // uint32 flags; // see AccountFlags + // + // string32 homeDomain; // can be used for reverse federation and memo lookup + // + // // fields used for signatures + // // thresholds stores unsigned bytes: [weight of master|low|medium|high] + // Thresholds thresholds; + // + // Signer signers; // possible signers for this account + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // AccountEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntry", [["accountId", xdr.lookup("AccountId")], ["balance", xdr.lookup("Int64")], ["seqNum", xdr.lookup("SequenceNumber")], ["numSubEntries", xdr.lookup("Uint32")], ["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["flags", xdr.lookup("Uint32")], ["homeDomain", xdr.lookup("String32")], ["thresholds", xdr.lookup("Thresholds")], ["signers", xdr.varArray(xdr.lookup("Signer"), xdr.lookup("MAX_SIGNERS"))], ["ext", xdr.lookup("AccountEntryExt")]]); + + // === xdr source ============================================================ + // + // enum TrustLineFlags + // { + // // issuer has authorized account to perform transactions with its credit + // AUTHORIZED_FLAG = 1, + // // issuer has authorized account to maintain and reduce liabilities for its + // // credit + // AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG = 2, + // // issuer has specified that it may clawback its credit, and that claimable + // // balances created with its credit may also be clawed back + // TRUSTLINE_CLAWBACK_ENABLED_FLAG = 4 + // }; + // + // =========================================================================== + xdr["enum"]("TrustLineFlags", { + authorizedFlag: 1, + authorizedToMaintainLiabilitiesFlag: 2, + trustlineClawbackEnabledFlag: 4 + }); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS = 1; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS", 1); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS_V13 = 3; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS_V13", 3); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS_V17 = 7; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS_V17", 7); + + // === xdr source ============================================================ + // + // enum LiquidityPoolType + // { + // LIQUIDITY_POOL_CONSTANT_PRODUCT = 0 + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolType", { + liquidityPoolConstantProduct: 0 + }); + + // === xdr source ============================================================ + // + // union TrustLineAsset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // case ASSET_TYPE_POOL_SHARE: + // PoolID liquidityPoolID; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("TrustLineAsset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"], ["assetTypePoolShare", "liquidityPoolId"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12"), + liquidityPoolId: xdr.lookup("PoolId") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryExtensionV2Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TrustLineEntryExtensionV2 + // { + // int32 liquidityPoolUseCount; + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TrustLineEntryExtensionV2", [["liquidityPoolUseCount", xdr.lookup("Int32")], ["ext", xdr.lookup("TrustLineEntryExtensionV2Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [2, "v2"]], + arms: { + v2: xdr.lookup("TrustLineEntryExtensionV2") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } + // + // =========================================================================== + xdr.struct("TrustLineEntryV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("TrustLineEntryV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } v1; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("TrustLineEntryV1") + } + }); + + // === xdr source ============================================================ + // + // struct TrustLineEntry + // { + // AccountID accountID; // account this trustline belongs to + // TrustLineAsset asset; // type of asset (with issuer) + // int64 balance; // how much of this asset the user has. + // // Asset defines the unit for this; + // + // int64 limit; // balance cannot be above this + // uint32 flags; // see TrustLineFlags + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TrustLineEntry", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("TrustLineAsset")], ["balance", xdr.lookup("Int64")], ["limit", xdr.lookup("Int64")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("TrustLineEntryExt")]]); + + // === xdr source ============================================================ + // + // enum OfferEntryFlags + // { + // // an offer with this flag will not act on and take a reverse offer of equal + // // price + // PASSIVE_FLAG = 1 + // }; + // + // =========================================================================== + xdr["enum"]("OfferEntryFlags", { + passiveFlag: 1 + }); + + // === xdr source ============================================================ + // + // const MASK_OFFERENTRY_FLAGS = 1; + // + // =========================================================================== + xdr["const"]("MASK_OFFERENTRY_FLAGS", 1); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("OfferEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct OfferEntry + // { + // AccountID sellerID; + // int64 offerID; + // Asset selling; // A + // Asset buying; // B + // int64 amount; // amount of A + // + // /* price for this offer: + // price of A in terms of B + // price=AmountB/AmountA=priceNumerator/priceDenominator + // price is after fees + // */ + // Price price; + // uint32 flags; // see OfferEntryFlags + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("OfferEntry", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")], ["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("OfferEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("DataEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct DataEntry + // { + // AccountID accountID; // account this data belongs to + // string64 dataName; + // DataValue dataValue; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("DataEntry", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")], ["dataValue", xdr.lookup("DataValue")], ["ext", xdr.lookup("DataEntryExt")]]); + + // === xdr source ============================================================ + // + // enum ClaimPredicateType + // { + // CLAIM_PREDICATE_UNCONDITIONAL = 0, + // CLAIM_PREDICATE_AND = 1, + // CLAIM_PREDICATE_OR = 2, + // CLAIM_PREDICATE_NOT = 3, + // CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME = 4, + // CLAIM_PREDICATE_BEFORE_RELATIVE_TIME = 5 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimPredicateType", { + claimPredicateUnconditional: 0, + claimPredicateAnd: 1, + claimPredicateOr: 2, + claimPredicateNot: 3, + claimPredicateBeforeAbsoluteTime: 4, + claimPredicateBeforeRelativeTime: 5 + }); + + // === xdr source ============================================================ + // + // union ClaimPredicate switch (ClaimPredicateType type) + // { + // case CLAIM_PREDICATE_UNCONDITIONAL: + // void; + // case CLAIM_PREDICATE_AND: + // ClaimPredicate andPredicates<2>; + // case CLAIM_PREDICATE_OR: + // ClaimPredicate orPredicates<2>; + // case CLAIM_PREDICATE_NOT: + // ClaimPredicate* notPredicate; + // case CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME: + // int64 absBefore; // Predicate will be true if closeTime < absBefore + // case CLAIM_PREDICATE_BEFORE_RELATIVE_TIME: + // int64 relBefore; // Seconds since closeTime of the ledger in which the + // // ClaimableBalanceEntry was created + // }; + // + // =========================================================================== + xdr.union("ClaimPredicate", { + switchOn: xdr.lookup("ClaimPredicateType"), + switchName: "type", + switches: [["claimPredicateUnconditional", xdr["void"]()], ["claimPredicateAnd", "andPredicates"], ["claimPredicateOr", "orPredicates"], ["claimPredicateNot", "notPredicate"], ["claimPredicateBeforeAbsoluteTime", "absBefore"], ["claimPredicateBeforeRelativeTime", "relBefore"]], + arms: { + andPredicates: xdr.varArray(xdr.lookup("ClaimPredicate"), 2), + orPredicates: xdr.varArray(xdr.lookup("ClaimPredicate"), 2), + notPredicate: xdr.option(xdr.lookup("ClaimPredicate")), + absBefore: xdr.lookup("Int64"), + relBefore: xdr.lookup("Int64") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimantType + // { + // CLAIMANT_TYPE_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimantType", { + claimantTypeV0: 0 + }); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID destination; // The account that can use this condition + // ClaimPredicate predicate; // Claimable if predicate is true + // } + // + // =========================================================================== + xdr.struct("ClaimantV0", [["destination", xdr.lookup("AccountId")], ["predicate", xdr.lookup("ClaimPredicate")]]); + + // === xdr source ============================================================ + // + // union Claimant switch (ClaimantType type) + // { + // case CLAIMANT_TYPE_V0: + // struct + // { + // AccountID destination; // The account that can use this condition + // ClaimPredicate predicate; // Claimable if predicate is true + // } v0; + // }; + // + // =========================================================================== + xdr.union("Claimant", { + switchOn: xdr.lookup("ClaimantType"), + switchName: "type", + switches: [["claimantTypeV0", "v0"]], + arms: { + v0: xdr.lookup("ClaimantV0") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimableBalanceIDType + // { + // CLAIMABLE_BALANCE_ID_TYPE_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimableBalanceIdType", { + claimableBalanceIdTypeV0: 0 + }); + + // === xdr source ============================================================ + // + // union ClaimableBalanceID switch (ClaimableBalanceIDType type) + // { + // case CLAIMABLE_BALANCE_ID_TYPE_V0: + // Hash v0; + // }; + // + // =========================================================================== + xdr.union("ClaimableBalanceId", { + switchOn: xdr.lookup("ClaimableBalanceIdType"), + switchName: "type", + switches: [["claimableBalanceIdTypeV0", "v0"]], + arms: { + v0: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimableBalanceFlags + // { + // // If set, the issuer account of the asset held by the claimable balance may + // // clawback the claimable balance + // CLAIMABLE_BALANCE_CLAWBACK_ENABLED_FLAG = 0x1 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimableBalanceFlags", { + claimableBalanceClawbackEnabledFlag: 1 + }); + + // === xdr source ============================================================ + // + // const MASK_CLAIMABLE_BALANCE_FLAGS = 0x1; + // + // =========================================================================== + xdr["const"]("MASK_CLAIMABLE_BALANCE_FLAGS", 0x1); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("ClaimableBalanceEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct ClaimableBalanceEntryExtensionV1 + // { + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // + // uint32 flags; // see ClaimableBalanceFlags + // }; + // + // =========================================================================== + xdr.struct("ClaimableBalanceEntryExtensionV1", [["ext", xdr.lookup("ClaimableBalanceEntryExtensionV1Ext")], ["flags", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ClaimableBalanceEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("ClaimableBalanceEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("ClaimableBalanceEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct ClaimableBalanceEntry + // { + // // Unique identifier for this ClaimableBalanceEntry + // ClaimableBalanceID balanceID; + // + // // List of claimants with associated predicate + // Claimant claimants<10>; + // + // // Any asset including native + // Asset asset; + // + // // Amount of asset + // int64 amount; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ClaimableBalanceEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("ClaimableBalanceEntry", [["balanceId", xdr.lookup("ClaimableBalanceId")], ["claimants", xdr.varArray(xdr.lookup("Claimant"), 10)], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["ext", xdr.lookup("ClaimableBalanceEntryExt")]]); + + // === xdr source ============================================================ + // + // struct LiquidityPoolConstantProductParameters + // { + // Asset assetA; // assetA < assetB + // Asset assetB; + // int32 fee; // Fee is in basis points, so the actual rate is (fee/100)% + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolConstantProductParameters", [["assetA", xdr.lookup("Asset")], ["assetB", xdr.lookup("Asset")], ["fee", xdr.lookup("Int32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } + // + // =========================================================================== + xdr.struct("LiquidityPoolEntryConstantProduct", [["params", xdr.lookup("LiquidityPoolConstantProductParameters")], ["reserveA", xdr.lookup("Int64")], ["reserveB", xdr.lookup("Int64")], ["totalPoolShares", xdr.lookup("Int64")], ["poolSharesTrustLineCount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } constantProduct; + // } + // + // =========================================================================== + xdr.union("LiquidityPoolEntryBody", { + switchOn: xdr.lookup("LiquidityPoolType"), + switchName: "type", + switches: [["liquidityPoolConstantProduct", "constantProduct"]], + arms: { + constantProduct: xdr.lookup("LiquidityPoolEntryConstantProduct") + } + }); + + // === xdr source ============================================================ + // + // struct LiquidityPoolEntry + // { + // PoolID liquidityPoolID; + // + // union switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } constantProduct; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolEntry", [["liquidityPoolId", xdr.lookup("PoolId")], ["body", xdr.lookup("LiquidityPoolEntryBody")]]); + + // === xdr source ============================================================ + // + // enum ContractDataDurability { + // TEMPORARY = 0, + // PERSISTENT = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractDataDurability", { + temporary: 0, + persistent: 1 + }); + + // === xdr source ============================================================ + // + // struct ContractDataEntry { + // ExtensionPoint ext; + // + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // SCVal val; + // }; + // + // =========================================================================== + xdr.struct("ContractDataEntry", [["ext", xdr.lookup("ExtensionPoint")], ["contract", xdr.lookup("ScAddress")], ["key", xdr.lookup("ScVal")], ["durability", xdr.lookup("ContractDataDurability")], ["val", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // struct ContractCodeCostInputs { + // ExtensionPoint ext; + // uint32 nInstructions; + // uint32 nFunctions; + // uint32 nGlobals; + // uint32 nTableEntries; + // uint32 nTypes; + // uint32 nDataSegments; + // uint32 nElemSegments; + // uint32 nImports; + // uint32 nExports; + // uint32 nDataSegmentBytes; + // }; + // + // =========================================================================== + xdr.struct("ContractCodeCostInputs", [["ext", xdr.lookup("ExtensionPoint")], ["nInstructions", xdr.lookup("Uint32")], ["nFunctions", xdr.lookup("Uint32")], ["nGlobals", xdr.lookup("Uint32")], ["nTableEntries", xdr.lookup("Uint32")], ["nTypes", xdr.lookup("Uint32")], ["nDataSegments", xdr.lookup("Uint32")], ["nElemSegments", xdr.lookup("Uint32")], ["nImports", xdr.lookup("Uint32")], ["nExports", xdr.lookup("Uint32")], ["nDataSegmentBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } + // + // =========================================================================== + xdr.struct("ContractCodeEntryV1", [["ext", xdr.lookup("ExtensionPoint")], ["costInputs", xdr.lookup("ContractCodeCostInputs")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } v1; + // } + // + // =========================================================================== + xdr.union("ContractCodeEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("ContractCodeEntryV1") + } + }); + + // === xdr source ============================================================ + // + // struct ContractCodeEntry { + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } v1; + // } ext; + // + // Hash hash; + // opaque code<>; + // }; + // + // =========================================================================== + xdr.struct("ContractCodeEntry", [["ext", xdr.lookup("ContractCodeEntryExt")], ["hash", xdr.lookup("Hash")], ["code", xdr.varOpaque()]]); + + // === xdr source ============================================================ + // + // struct TTLEntry { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // uint32 liveUntilLedgerSeq; + // }; + // + // =========================================================================== + xdr.struct("TtlEntry", [["keyHash", xdr.lookup("Hash")], ["liveUntilLedgerSeq", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerEntryExtensionV1 + // { + // SponsorshipDescriptor sponsoringID; + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerEntryExtensionV1", [["sponsoringId", xdr.lookup("SponsorshipDescriptor")], ["ext", xdr.lookup("LedgerEntryExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (LedgerEntryType type) + // { + // case ACCOUNT: + // AccountEntry account; + // case TRUSTLINE: + // TrustLineEntry trustLine; + // case OFFER: + // OfferEntry offer; + // case DATA: + // DataEntry data; + // case CLAIMABLE_BALANCE: + // ClaimableBalanceEntry claimableBalance; + // case LIQUIDITY_POOL: + // LiquidityPoolEntry liquidityPool; + // case CONTRACT_DATA: + // ContractDataEntry contractData; + // case CONTRACT_CODE: + // ContractCodeEntry contractCode; + // case CONFIG_SETTING: + // ConfigSettingEntry configSetting; + // case TTL: + // TTLEntry ttl; + // } + // + // =========================================================================== + xdr.union("LedgerEntryData", { + switchOn: xdr.lookup("LedgerEntryType"), + switchName: "type", + switches: [["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["data", "data"], ["claimableBalance", "claimableBalance"], ["liquidityPool", "liquidityPool"], ["contractData", "contractData"], ["contractCode", "contractCode"], ["configSetting", "configSetting"], ["ttl", "ttl"]], + arms: { + account: xdr.lookup("AccountEntry"), + trustLine: xdr.lookup("TrustLineEntry"), + offer: xdr.lookup("OfferEntry"), + data: xdr.lookup("DataEntry"), + claimableBalance: xdr.lookup("ClaimableBalanceEntry"), + liquidityPool: xdr.lookup("LiquidityPoolEntry"), + contractData: xdr.lookup("ContractDataEntry"), + contractCode: xdr.lookup("ContractCodeEntry"), + configSetting: xdr.lookup("ConfigSettingEntry"), + ttl: xdr.lookup("TtlEntry") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("LedgerEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerEntry + // { + // uint32 lastModifiedLedgerSeq; // ledger the LedgerEntry was last changed + // + // union switch (LedgerEntryType type) + // { + // case ACCOUNT: + // AccountEntry account; + // case TRUSTLINE: + // TrustLineEntry trustLine; + // case OFFER: + // OfferEntry offer; + // case DATA: + // DataEntry data; + // case CLAIMABLE_BALANCE: + // ClaimableBalanceEntry claimableBalance; + // case LIQUIDITY_POOL: + // LiquidityPoolEntry liquidityPool; + // case CONTRACT_DATA: + // ContractDataEntry contractData; + // case CONTRACT_CODE: + // ContractCodeEntry contractCode; + // case CONFIG_SETTING: + // ConfigSettingEntry configSetting; + // case TTL: + // TTLEntry ttl; + // } + // data; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerEntry", [["lastModifiedLedgerSeq", xdr.lookup("Uint32")], ["data", xdr.lookup("LedgerEntryData")], ["ext", xdr.lookup("LedgerEntryExt")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyAccount", [["accountId", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // TrustLineAsset asset; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyTrustLine", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("TrustLineAsset")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sellerID; + // int64 offerID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyOffer", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // string64 dataName; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyData", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimableBalanceID balanceID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyClaimableBalance", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // PoolID liquidityPoolID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyLiquidityPool", [["liquidityPoolId", xdr.lookup("PoolId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyContractData", [["contract", xdr.lookup("ScAddress")], ["key", xdr.lookup("ScVal")], ["durability", xdr.lookup("ContractDataDurability")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash hash; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyContractCode", [["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ConfigSettingID configSettingID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyConfigSetting", [["configSettingId", xdr.lookup("ConfigSettingId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyTtl", [["keyHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union LedgerKey switch (LedgerEntryType type) + // { + // case ACCOUNT: + // struct + // { + // AccountID accountID; + // } account; + // + // case TRUSTLINE: + // struct + // { + // AccountID accountID; + // TrustLineAsset asset; + // } trustLine; + // + // case OFFER: + // struct + // { + // AccountID sellerID; + // int64 offerID; + // } offer; + // + // case DATA: + // struct + // { + // AccountID accountID; + // string64 dataName; + // } data; + // + // case CLAIMABLE_BALANCE: + // struct + // { + // ClaimableBalanceID balanceID; + // } claimableBalance; + // + // case LIQUIDITY_POOL: + // struct + // { + // PoolID liquidityPoolID; + // } liquidityPool; + // case CONTRACT_DATA: + // struct + // { + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // } contractData; + // case CONTRACT_CODE: + // struct + // { + // Hash hash; + // } contractCode; + // case CONFIG_SETTING: + // struct + // { + // ConfigSettingID configSettingID; + // } configSetting; + // case TTL: + // struct + // { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // } ttl; + // }; + // + // =========================================================================== + xdr.union("LedgerKey", { + switchOn: xdr.lookup("LedgerEntryType"), + switchName: "type", + switches: [["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["data", "data"], ["claimableBalance", "claimableBalance"], ["liquidityPool", "liquidityPool"], ["contractData", "contractData"], ["contractCode", "contractCode"], ["configSetting", "configSetting"], ["ttl", "ttl"]], + arms: { + account: xdr.lookup("LedgerKeyAccount"), + trustLine: xdr.lookup("LedgerKeyTrustLine"), + offer: xdr.lookup("LedgerKeyOffer"), + data: xdr.lookup("LedgerKeyData"), + claimableBalance: xdr.lookup("LedgerKeyClaimableBalance"), + liquidityPool: xdr.lookup("LedgerKeyLiquidityPool"), + contractData: xdr.lookup("LedgerKeyContractData"), + contractCode: xdr.lookup("LedgerKeyContractCode"), + configSetting: xdr.lookup("LedgerKeyConfigSetting"), + ttl: xdr.lookup("LedgerKeyTtl") + } + }); + + // === xdr source ============================================================ + // + // enum EnvelopeType + // { + // ENVELOPE_TYPE_TX_V0 = 0, + // ENVELOPE_TYPE_SCP = 1, + // ENVELOPE_TYPE_TX = 2, + // ENVELOPE_TYPE_AUTH = 3, + // ENVELOPE_TYPE_SCPVALUE = 4, + // ENVELOPE_TYPE_TX_FEE_BUMP = 5, + // ENVELOPE_TYPE_OP_ID = 6, + // ENVELOPE_TYPE_POOL_REVOKE_OP_ID = 7, + // ENVELOPE_TYPE_CONTRACT_ID = 8, + // ENVELOPE_TYPE_SOROBAN_AUTHORIZATION = 9 + // }; + // + // =========================================================================== + xdr["enum"]("EnvelopeType", { + envelopeTypeTxV0: 0, + envelopeTypeScp: 1, + envelopeTypeTx: 2, + envelopeTypeAuth: 3, + envelopeTypeScpvalue: 4, + envelopeTypeTxFeeBump: 5, + envelopeTypeOpId: 6, + envelopeTypePoolRevokeOpId: 7, + envelopeTypeContractId: 8, + envelopeTypeSorobanAuthorization: 9 + }); + + // === xdr source ============================================================ + // + // enum BucketListType + // { + // LIVE = 0, + // HOT_ARCHIVE = 1, + // COLD_ARCHIVE = 2 + // }; + // + // =========================================================================== + xdr["enum"]("BucketListType", { + live: 0, + hotArchive: 1, + coldArchive: 2 + }); + + // === xdr source ============================================================ + // + // enum BucketEntryType + // { + // METAENTRY = + // -1, // At-and-after protocol 11: bucket metadata, should come first. + // LIVEENTRY = 0, // Before protocol 11: created-or-updated; + // // At-and-after protocol 11: only updated. + // DEADENTRY = 1, + // INITENTRY = 2 // At-and-after protocol 11: only created. + // }; + // + // =========================================================================== + xdr["enum"]("BucketEntryType", { + metaentry: -1, + liveentry: 0, + deadentry: 1, + initentry: 2 + }); + + // === xdr source ============================================================ + // + // enum HotArchiveBucketEntryType + // { + // HOT_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first. + // HOT_ARCHIVE_ARCHIVED = 0, // Entry is Archived + // HOT_ARCHIVE_LIVE = 1, // Entry was previously HOT_ARCHIVE_ARCHIVED, or HOT_ARCHIVE_DELETED, but + // // has been added back to the live BucketList. + // // Does not need to be persisted. + // HOT_ARCHIVE_DELETED = 2 // Entry deleted (Note: must be persisted in archive) + // }; + // + // =========================================================================== + xdr["enum"]("HotArchiveBucketEntryType", { + hotArchiveMetaentry: -1, + hotArchiveArchived: 0, + hotArchiveLive: 1, + hotArchiveDeleted: 2 + }); + + // === xdr source ============================================================ + // + // enum ColdArchiveBucketEntryType + // { + // COLD_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first. + // COLD_ARCHIVE_ARCHIVED_LEAF = 0, // Full LedgerEntry that was archived during the epoch + // COLD_ARCHIVE_DELETED_LEAF = 1, // LedgerKey that was deleted during the epoch + // COLD_ARCHIVE_BOUNDARY_LEAF = 2, // Dummy leaf representing low/high bound + // COLD_ARCHIVE_HASH = 3 // Intermediary Merkle hash entry + // }; + // + // =========================================================================== + xdr["enum"]("ColdArchiveBucketEntryType", { + coldArchiveMetaentry: -1, + coldArchiveArchivedLeaf: 0, + coldArchiveDeletedLeaf: 1, + coldArchiveBoundaryLeaf: 2, + coldArchiveHash: 3 + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // BucketListType bucketListType; + // } + // + // =========================================================================== + xdr.union("BucketMetadataExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "bucketListType"]], + arms: { + bucketListType: xdr.lookup("BucketListType") + } + }); + + // === xdr source ============================================================ + // + // struct BucketMetadata + // { + // // Indicates the protocol version used to create / merge this bucket. + // uint32 ledgerVersion; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // BucketListType bucketListType; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("BucketMetadata", [["ledgerVersion", xdr.lookup("Uint32")], ["ext", xdr.lookup("BucketMetadataExt")]]); + + // === xdr source ============================================================ + // + // union BucketEntry switch (BucketEntryType type) + // { + // case LIVEENTRY: + // case INITENTRY: + // LedgerEntry liveEntry; + // + // case DEADENTRY: + // LedgerKey deadEntry; + // case METAENTRY: + // BucketMetadata metaEntry; + // }; + // + // =========================================================================== + xdr.union("BucketEntry", { + switchOn: xdr.lookup("BucketEntryType"), + switchName: "type", + switches: [["liveentry", "liveEntry"], ["initentry", "liveEntry"], ["deadentry", "deadEntry"], ["metaentry", "metaEntry"]], + arms: { + liveEntry: xdr.lookup("LedgerEntry"), + deadEntry: xdr.lookup("LedgerKey"), + metaEntry: xdr.lookup("BucketMetadata") + } + }); + + // === xdr source ============================================================ + // + // union HotArchiveBucketEntry switch (HotArchiveBucketEntryType type) + // { + // case HOT_ARCHIVE_ARCHIVED: + // LedgerEntry archivedEntry; + // + // case HOT_ARCHIVE_LIVE: + // case HOT_ARCHIVE_DELETED: + // LedgerKey key; + // case HOT_ARCHIVE_METAENTRY: + // BucketMetadata metaEntry; + // }; + // + // =========================================================================== + xdr.union("HotArchiveBucketEntry", { + switchOn: xdr.lookup("HotArchiveBucketEntryType"), + switchName: "type", + switches: [["hotArchiveArchived", "archivedEntry"], ["hotArchiveLive", "key"], ["hotArchiveDeleted", "key"], ["hotArchiveMetaentry", "metaEntry"]], + arms: { + archivedEntry: xdr.lookup("LedgerEntry"), + key: xdr.lookup("LedgerKey"), + metaEntry: xdr.lookup("BucketMetadata") + } + }); + + // === xdr source ============================================================ + // + // struct ColdArchiveArchivedLeaf + // { + // uint32 index; + // LedgerEntry archivedEntry; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveArchivedLeaf", [["index", xdr.lookup("Uint32")], ["archivedEntry", xdr.lookup("LedgerEntry")]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveDeletedLeaf + // { + // uint32 index; + // LedgerKey deletedKey; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveDeletedLeaf", [["index", xdr.lookup("Uint32")], ["deletedKey", xdr.lookup("LedgerKey")]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveBoundaryLeaf + // { + // uint32 index; + // bool isLowerBound; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveBoundaryLeaf", [["index", xdr.lookup("Uint32")], ["isLowerBound", xdr.bool()]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveHashEntry + // { + // uint32 index; + // uint32 level; + // Hash hash; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveHashEntry", [["index", xdr.lookup("Uint32")], ["level", xdr.lookup("Uint32")], ["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union ColdArchiveBucketEntry switch (ColdArchiveBucketEntryType type) + // { + // case COLD_ARCHIVE_METAENTRY: + // BucketMetadata metaEntry; + // case COLD_ARCHIVE_ARCHIVED_LEAF: + // ColdArchiveArchivedLeaf archivedLeaf; + // case COLD_ARCHIVE_DELETED_LEAF: + // ColdArchiveDeletedLeaf deletedLeaf; + // case COLD_ARCHIVE_BOUNDARY_LEAF: + // ColdArchiveBoundaryLeaf boundaryLeaf; + // case COLD_ARCHIVE_HASH: + // ColdArchiveHashEntry hashEntry; + // }; + // + // =========================================================================== + xdr.union("ColdArchiveBucketEntry", { + switchOn: xdr.lookup("ColdArchiveBucketEntryType"), + switchName: "type", + switches: [["coldArchiveMetaentry", "metaEntry"], ["coldArchiveArchivedLeaf", "archivedLeaf"], ["coldArchiveDeletedLeaf", "deletedLeaf"], ["coldArchiveBoundaryLeaf", "boundaryLeaf"], ["coldArchiveHash", "hashEntry"]], + arms: { + metaEntry: xdr.lookup("BucketMetadata"), + archivedLeaf: xdr.lookup("ColdArchiveArchivedLeaf"), + deletedLeaf: xdr.lookup("ColdArchiveDeletedLeaf"), + boundaryLeaf: xdr.lookup("ColdArchiveBoundaryLeaf"), + hashEntry: xdr.lookup("ColdArchiveHashEntry") + } + }); + + // === xdr source ============================================================ + // + // typedef opaque UpgradeType<128>; + // + // =========================================================================== + xdr.typedef("UpgradeType", xdr.varOpaque(128)); + + // === xdr source ============================================================ + // + // enum StellarValueType + // { + // STELLAR_VALUE_BASIC = 0, + // STELLAR_VALUE_SIGNED = 1 + // }; + // + // =========================================================================== + xdr["enum"]("StellarValueType", { + stellarValueBasic: 0, + stellarValueSigned: 1 + }); + + // === xdr source ============================================================ + // + // struct LedgerCloseValueSignature + // { + // NodeID nodeID; // which node introduced the value + // Signature signature; // nodeID's signature + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseValueSignature", [["nodeId", xdr.lookup("NodeId")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // union switch (StellarValueType v) + // { + // case STELLAR_VALUE_BASIC: + // void; + // case STELLAR_VALUE_SIGNED: + // LedgerCloseValueSignature lcValueSignature; + // } + // + // =========================================================================== + xdr.union("StellarValueExt", { + switchOn: xdr.lookup("StellarValueType"), + switchName: "v", + switches: [["stellarValueBasic", xdr["void"]()], ["stellarValueSigned", "lcValueSignature"]], + arms: { + lcValueSignature: xdr.lookup("LedgerCloseValueSignature") + } + }); + + // === xdr source ============================================================ + // + // struct StellarValue + // { + // Hash txSetHash; // transaction set to apply to previous ledger + // TimePoint closeTime; // network close time + // + // // upgrades to apply to the previous ledger (usually empty) + // // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop + // // unknown steps during consensus if needed. + // // see notes below on 'LedgerUpgrade' for more detail + // // max size is dictated by number of upgrade types (+ room for future) + // UpgradeType upgrades<6>; + // + // // reserved for future use + // union switch (StellarValueType v) + // { + // case STELLAR_VALUE_BASIC: + // void; + // case STELLAR_VALUE_SIGNED: + // LedgerCloseValueSignature lcValueSignature; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("StellarValue", [["txSetHash", xdr.lookup("Hash")], ["closeTime", xdr.lookup("TimePoint")], ["upgrades", xdr.varArray(xdr.lookup("UpgradeType"), 6)], ["ext", xdr.lookup("StellarValueExt")]]); + + // === xdr source ============================================================ + // + // const MASK_LEDGER_HEADER_FLAGS = 0x7; + // + // =========================================================================== + xdr["const"]("MASK_LEDGER_HEADER_FLAGS", 0x7); + + // === xdr source ============================================================ + // + // enum LedgerHeaderFlags + // { + // DISABLE_LIQUIDITY_POOL_TRADING_FLAG = 0x1, + // DISABLE_LIQUIDITY_POOL_DEPOSIT_FLAG = 0x2, + // DISABLE_LIQUIDITY_POOL_WITHDRAWAL_FLAG = 0x4 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerHeaderFlags", { + disableLiquidityPoolTradingFlag: 1, + disableLiquidityPoolDepositFlag: 2, + disableLiquidityPoolWithdrawalFlag: 4 + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerHeaderExtensionV1 + // { + // uint32 flags; // LedgerHeaderFlags + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeaderExtensionV1", [["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("LedgerHeaderExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerHeaderExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerHeaderExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerHeader + // { + // uint32 ledgerVersion; // the protocol version of the ledger + // Hash previousLedgerHash; // hash of the previous ledger header + // StellarValue scpValue; // what consensus agreed to + // Hash txSetResultHash; // the TransactionResultSet that led to this ledger + // Hash bucketListHash; // hash of the ledger state + // + // uint32 ledgerSeq; // sequence number of this ledger + // + // int64 totalCoins; // total number of stroops in existence. + // // 10,000,000 stroops in 1 XLM + // + // int64 feePool; // fees burned since last inflation run + // uint32 inflationSeq; // inflation sequence number + // + // uint64 idPool; // last used global ID, used for generating objects + // + // uint32 baseFee; // base fee per operation in stroops + // uint32 baseReserve; // account base reserve in stroops + // + // uint32 maxTxSetSize; // maximum size a transaction set can be + // + // Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back + // // in time without walking the chain back ledger by ledger + // // each slot contains the oldest ledger that is mod of + // // either 50 5000 50000 or 500000 depending on index + // // skipList[0] mod(50), skipList[1] mod(5000), etc + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerHeaderExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeader", [["ledgerVersion", xdr.lookup("Uint32")], ["previousLedgerHash", xdr.lookup("Hash")], ["scpValue", xdr.lookup("StellarValue")], ["txSetResultHash", xdr.lookup("Hash")], ["bucketListHash", xdr.lookup("Hash")], ["ledgerSeq", xdr.lookup("Uint32")], ["totalCoins", xdr.lookup("Int64")], ["feePool", xdr.lookup("Int64")], ["inflationSeq", xdr.lookup("Uint32")], ["idPool", xdr.lookup("Uint64")], ["baseFee", xdr.lookup("Uint32")], ["baseReserve", xdr.lookup("Uint32")], ["maxTxSetSize", xdr.lookup("Uint32")], ["skipList", xdr.array(xdr.lookup("Hash"), 4)], ["ext", xdr.lookup("LedgerHeaderExt")]]); + + // === xdr source ============================================================ + // + // enum LedgerUpgradeType + // { + // LEDGER_UPGRADE_VERSION = 1, + // LEDGER_UPGRADE_BASE_FEE = 2, + // LEDGER_UPGRADE_MAX_TX_SET_SIZE = 3, + // LEDGER_UPGRADE_BASE_RESERVE = 4, + // LEDGER_UPGRADE_FLAGS = 5, + // LEDGER_UPGRADE_CONFIG = 6, + // LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE = 7 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerUpgradeType", { + ledgerUpgradeVersion: 1, + ledgerUpgradeBaseFee: 2, + ledgerUpgradeMaxTxSetSize: 3, + ledgerUpgradeBaseReserve: 4, + ledgerUpgradeFlags: 5, + ledgerUpgradeConfig: 6, + ledgerUpgradeMaxSorobanTxSetSize: 7 + }); + + // === xdr source ============================================================ + // + // struct ConfigUpgradeSetKey { + // Hash contractID; + // Hash contentHash; + // }; + // + // =========================================================================== + xdr.struct("ConfigUpgradeSetKey", [["contractId", xdr.lookup("Hash")], ["contentHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union LedgerUpgrade switch (LedgerUpgradeType type) + // { + // case LEDGER_UPGRADE_VERSION: + // uint32 newLedgerVersion; // update ledgerVersion + // case LEDGER_UPGRADE_BASE_FEE: + // uint32 newBaseFee; // update baseFee + // case LEDGER_UPGRADE_MAX_TX_SET_SIZE: + // uint32 newMaxTxSetSize; // update maxTxSetSize + // case LEDGER_UPGRADE_BASE_RESERVE: + // uint32 newBaseReserve; // update baseReserve + // case LEDGER_UPGRADE_FLAGS: + // uint32 newFlags; // update flags + // case LEDGER_UPGRADE_CONFIG: + // // Update arbitrary `ConfigSetting` entries identified by the key. + // ConfigUpgradeSetKey newConfig; + // case LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE: + // // Update ConfigSettingContractExecutionLanesV0.ledgerMaxTxCount without + // // using `LEDGER_UPGRADE_CONFIG`. + // uint32 newMaxSorobanTxSetSize; + // }; + // + // =========================================================================== + xdr.union("LedgerUpgrade", { + switchOn: xdr.lookup("LedgerUpgradeType"), + switchName: "type", + switches: [["ledgerUpgradeVersion", "newLedgerVersion"], ["ledgerUpgradeBaseFee", "newBaseFee"], ["ledgerUpgradeMaxTxSetSize", "newMaxTxSetSize"], ["ledgerUpgradeBaseReserve", "newBaseReserve"], ["ledgerUpgradeFlags", "newFlags"], ["ledgerUpgradeConfig", "newConfig"], ["ledgerUpgradeMaxSorobanTxSetSize", "newMaxSorobanTxSetSize"]], + arms: { + newLedgerVersion: xdr.lookup("Uint32"), + newBaseFee: xdr.lookup("Uint32"), + newMaxTxSetSize: xdr.lookup("Uint32"), + newBaseReserve: xdr.lookup("Uint32"), + newFlags: xdr.lookup("Uint32"), + newConfig: xdr.lookup("ConfigUpgradeSetKey"), + newMaxSorobanTxSetSize: xdr.lookup("Uint32") + } + }); + + // === xdr source ============================================================ + // + // struct ConfigUpgradeSet { + // ConfigSettingEntry updatedEntry<>; + // }; + // + // =========================================================================== + xdr.struct("ConfigUpgradeSet", [["updatedEntry", xdr.varArray(xdr.lookup("ConfigSettingEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // enum TxSetComponentType + // { + // // txs with effective fee <= bid derived from a base fee (if any). + // // If base fee is not specified, no discount is applied. + // TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE = 0 + // }; + // + // =========================================================================== + xdr["enum"]("TxSetComponentType", { + txsetCompTxsMaybeDiscountedFee: 0 + }); + + // === xdr source ============================================================ + // + // struct + // { + // int64* baseFee; + // TransactionEnvelope txs<>; + // } + // + // =========================================================================== + xdr.struct("TxSetComponentTxsMaybeDiscountedFee", [["baseFee", xdr.option(xdr.lookup("Int64"))], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union TxSetComponent switch (TxSetComponentType type) + // { + // case TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE: + // struct + // { + // int64* baseFee; + // TransactionEnvelope txs<>; + // } txsMaybeDiscountedFee; + // }; + // + // =========================================================================== + xdr.union("TxSetComponent", { + switchOn: xdr.lookup("TxSetComponentType"), + switchName: "type", + switches: [["txsetCompTxsMaybeDiscountedFee", "txsMaybeDiscountedFee"]], + arms: { + txsMaybeDiscountedFee: xdr.lookup("TxSetComponentTxsMaybeDiscountedFee") + } + }); + + // === xdr source ============================================================ + // + // union TransactionPhase switch (int v) + // { + // case 0: + // TxSetComponent v0Components<>; + // }; + // + // =========================================================================== + xdr.union("TransactionPhase", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0Components"]], + arms: { + v0Components: xdr.varArray(xdr.lookup("TxSetComponent"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // struct TransactionSet + // { + // Hash previousLedgerHash; + // TransactionEnvelope txs<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionSet", [["previousLedgerHash", xdr.lookup("Hash")], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionSetV1 + // { + // Hash previousLedgerHash; + // TransactionPhase phases<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionSetV1", [["previousLedgerHash", xdr.lookup("Hash")], ["phases", xdr.varArray(xdr.lookup("TransactionPhase"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union GeneralizedTransactionSet switch (int v) + // { + // // We consider the legacy TransactionSet to be v0. + // case 1: + // TransactionSetV1 v1TxSet; + // }; + // + // =========================================================================== + xdr.union("GeneralizedTransactionSet", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[1, "v1TxSet"]], + arms: { + v1TxSet: xdr.lookup("TransactionSetV1") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionResultPair + // { + // Hash transactionHash; + // TransactionResult result; // result for the transaction + // }; + // + // =========================================================================== + xdr.struct("TransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("TransactionResult")]]); + + // === xdr source ============================================================ + // + // struct TransactionResultSet + // { + // TransactionResultPair results<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionResultSet", [["results", xdr.varArray(xdr.lookup("TransactionResultPair"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // GeneralizedTransactionSet generalizedTxSet; + // } + // + // =========================================================================== + xdr.union("TransactionHistoryEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "generalizedTxSet"]], + arms: { + generalizedTxSet: xdr.lookup("GeneralizedTransactionSet") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionHistoryEntry + // { + // uint32 ledgerSeq; + // TransactionSet txSet; + // + // // when v != 0, txSet must be empty + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // GeneralizedTransactionSet generalizedTxSet; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionHistoryEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txSet", xdr.lookup("TransactionSet")], ["ext", xdr.lookup("TransactionHistoryEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionHistoryResultEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionHistoryResultEntry + // { + // uint32 ledgerSeq; + // TransactionResultSet txResultSet; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionHistoryResultEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txResultSet", xdr.lookup("TransactionResultSet")], ["ext", xdr.lookup("TransactionHistoryResultEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderHistoryEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerHeaderHistoryEntry + // { + // Hash hash; + // LedgerHeader header; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeaderHistoryEntry", [["hash", xdr.lookup("Hash")], ["header", xdr.lookup("LedgerHeader")], ["ext", xdr.lookup("LedgerHeaderHistoryEntryExt")]]); + + // === xdr source ============================================================ + // + // struct LedgerSCPMessages + // { + // uint32 ledgerSeq; + // SCPEnvelope messages<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerScpMessages", [["ledgerSeq", xdr.lookup("Uint32")], ["messages", xdr.varArray(xdr.lookup("ScpEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct SCPHistoryEntryV0 + // { + // SCPQuorumSet quorumSets<>; // additional quorum sets used by ledgerMessages + // LedgerSCPMessages ledgerMessages; + // }; + // + // =========================================================================== + xdr.struct("ScpHistoryEntryV0", [["quorumSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)], ["ledgerMessages", xdr.lookup("LedgerScpMessages")]]); + + // === xdr source ============================================================ + // + // union SCPHistoryEntry switch (int v) + // { + // case 0: + // SCPHistoryEntryV0 v0; + // }; + // + // =========================================================================== + xdr.union("ScpHistoryEntry", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("ScpHistoryEntryV0") + } + }); + + // === xdr source ============================================================ + // + // enum LedgerEntryChangeType + // { + // LEDGER_ENTRY_CREATED = 0, // entry was added to the ledger + // LEDGER_ENTRY_UPDATED = 1, // entry was modified in the ledger + // LEDGER_ENTRY_REMOVED = 2, // entry was removed from the ledger + // LEDGER_ENTRY_STATE = 3 // value of the entry + // }; + // + // =========================================================================== + xdr["enum"]("LedgerEntryChangeType", { + ledgerEntryCreated: 0, + ledgerEntryUpdated: 1, + ledgerEntryRemoved: 2, + ledgerEntryState: 3 + }); + + // === xdr source ============================================================ + // + // union LedgerEntryChange switch (LedgerEntryChangeType type) + // { + // case LEDGER_ENTRY_CREATED: + // LedgerEntry created; + // case LEDGER_ENTRY_UPDATED: + // LedgerEntry updated; + // case LEDGER_ENTRY_REMOVED: + // LedgerKey removed; + // case LEDGER_ENTRY_STATE: + // LedgerEntry state; + // }; + // + // =========================================================================== + xdr.union("LedgerEntryChange", { + switchOn: xdr.lookup("LedgerEntryChangeType"), + switchName: "type", + switches: [["ledgerEntryCreated", "created"], ["ledgerEntryUpdated", "updated"], ["ledgerEntryRemoved", "removed"], ["ledgerEntryState", "state"]], + arms: { + created: xdr.lookup("LedgerEntry"), + updated: xdr.lookup("LedgerEntry"), + removed: xdr.lookup("LedgerKey"), + state: xdr.lookup("LedgerEntry") + } + }); + + // === xdr source ============================================================ + // + // typedef LedgerEntryChange LedgerEntryChanges<>; + // + // =========================================================================== + xdr.typedef("LedgerEntryChanges", xdr.varArray(xdr.lookup("LedgerEntryChange"), 2147483647)); + + // === xdr source ============================================================ + // + // struct OperationMeta + // { + // LedgerEntryChanges changes; + // }; + // + // =========================================================================== + xdr.struct("OperationMeta", [["changes", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV1 + // { + // LedgerEntryChanges txChanges; // tx level changes if any + // OperationMeta operations<>; // meta for each operation + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV1", [["txChanges", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV2 + // { + // LedgerEntryChanges txChangesBefore; // tx level changes before operations + // // are applied if any + // OperationMeta operations<>; // meta for each operation + // LedgerEntryChanges txChangesAfter; // tx level changes after operations are + // // applied if any + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV2", [["txChangesBefore", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)], ["txChangesAfter", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // enum ContractEventType + // { + // SYSTEM = 0, + // CONTRACT = 1, + // DIAGNOSTIC = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ContractEventType", { + system: 0, + contract: 1, + diagnostic: 2 + }); + + // === xdr source ============================================================ + // + // struct + // { + // SCVal topics<>; + // SCVal data; + // } + // + // =========================================================================== + xdr.struct("ContractEventV0", [["topics", xdr.varArray(xdr.lookup("ScVal"), 2147483647)], ["data", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // struct + // { + // SCVal topics<>; + // SCVal data; + // } v0; + // } + // + // =========================================================================== + xdr.union("ContractEventBody", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("ContractEventV0") + } + }); + + // === xdr source ============================================================ + // + // struct ContractEvent + // { + // // We can use this to add more fields, or because it + // // is first, to change ContractEvent into a union. + // ExtensionPoint ext; + // + // Hash* contractID; + // ContractEventType type; + // + // union switch (int v) + // { + // case 0: + // struct + // { + // SCVal topics<>; + // SCVal data; + // } v0; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("ContractEvent", [["ext", xdr.lookup("ExtensionPoint")], ["contractId", xdr.option(xdr.lookup("Hash"))], ["type", xdr.lookup("ContractEventType")], ["body", xdr.lookup("ContractEventBody")]]); + + // === xdr source ============================================================ + // + // struct DiagnosticEvent + // { + // bool inSuccessfulContractCall; + // ContractEvent event; + // }; + // + // =========================================================================== + xdr.struct("DiagnosticEvent", [["inSuccessfulContractCall", xdr.bool()], ["event", xdr.lookup("ContractEvent")]]); + + // === xdr source ============================================================ + // + // typedef DiagnosticEvent DiagnosticEvents<>; + // + // =========================================================================== + xdr.typedef("DiagnosticEvents", xdr.varArray(xdr.lookup("DiagnosticEvent"), 2147483647)); + + // === xdr source ============================================================ + // + // struct SorobanTransactionMetaExtV1 + // { + // ExtensionPoint ext; + // + // // The following are the components of the overall Soroban resource fee + // // charged for the transaction. + // // The following relation holds: + // // `resourceFeeCharged = totalNonRefundableResourceFeeCharged + totalRefundableResourceFeeCharged` + // // where `resourceFeeCharged` is the overall fee charged for the + // // transaction. Also, `resourceFeeCharged` <= `sorobanData.resourceFee` + // // i.e.we never charge more than the declared resource fee. + // // The inclusion fee for charged the Soroban transaction can be found using + // // the following equation: + // // `result.feeCharged = resourceFeeCharged + inclusionFeeCharged`. + // + // // Total amount (in stroops) that has been charged for non-refundable + // // Soroban resources. + // // Non-refundable resources are charged based on the usage declared in + // // the transaction envelope (such as `instructions`, `readBytes` etc.) and + // // is charged regardless of the success of the transaction. + // int64 totalNonRefundableResourceFeeCharged; + // // Total amount (in stroops) that has been charged for refundable + // // Soroban resource fees. + // // Currently this comprises the rent fee (`rentFeeCharged`) and the + // // fee for the events and return value. + // // Refundable resources are charged based on the actual resources usage. + // // Since currently refundable resources are only used for the successful + // // transactions, this will be `0` for failed transactions. + // int64 totalRefundableResourceFeeCharged; + // // Amount (in stroops) that has been charged for rent. + // // This is a part of `totalNonRefundableResourceFeeCharged`. + // int64 rentFeeCharged; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionMetaExtV1", [["ext", xdr.lookup("ExtensionPoint")], ["totalNonRefundableResourceFeeCharged", xdr.lookup("Int64")], ["totalRefundableResourceFeeCharged", xdr.lookup("Int64")], ["rentFeeCharged", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union SorobanTransactionMetaExt switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionMetaExtV1 v1; + // }; + // + // =========================================================================== + xdr.union("SorobanTransactionMetaExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("SorobanTransactionMetaExtV1") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanTransactionMeta + // { + // SorobanTransactionMetaExt ext; + // + // ContractEvent events<>; // custom events populated by the + // // contracts themselves. + // SCVal returnValue; // return value of the host fn invocation + // + // // Diagnostics events that are not hashed. + // // This will contain all contract and diagnostic events. Even ones + // // that were emitted in a failed contract call. + // DiagnosticEvent diagnosticEvents<>; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionMeta", [["ext", xdr.lookup("SorobanTransactionMetaExt")], ["events", xdr.varArray(xdr.lookup("ContractEvent"), 2147483647)], ["returnValue", xdr.lookup("ScVal")], ["diagnosticEvents", xdr.varArray(xdr.lookup("DiagnosticEvent"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV3 + // { + // ExtensionPoint ext; + // + // LedgerEntryChanges txChangesBefore; // tx level changes before operations + // // are applied if any + // OperationMeta operations<>; // meta for each operation + // LedgerEntryChanges txChangesAfter; // tx level changes after operations are + // // applied if any + // SorobanTransactionMeta* sorobanMeta; // Soroban-specific meta (only for + // // Soroban transactions). + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV3", [["ext", xdr.lookup("ExtensionPoint")], ["txChangesBefore", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)], ["txChangesAfter", xdr.lookup("LedgerEntryChanges")], ["sorobanMeta", xdr.option(xdr.lookup("SorobanTransactionMeta"))]]); + + // === xdr source ============================================================ + // + // struct InvokeHostFunctionSuccessPreImage + // { + // SCVal returnValue; + // ContractEvent events<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeHostFunctionSuccessPreImage", [["returnValue", xdr.lookup("ScVal")], ["events", xdr.varArray(xdr.lookup("ContractEvent"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union TransactionMeta switch (int v) + // { + // case 0: + // OperationMeta operations<>; + // case 1: + // TransactionMetaV1 v1; + // case 2: + // TransactionMetaV2 v2; + // case 3: + // TransactionMetaV3 v3; + // }; + // + // =========================================================================== + xdr.union("TransactionMeta", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "operations"], [1, "v1"], [2, "v2"], [3, "v3"]], + arms: { + operations: xdr.varArray(xdr.lookup("OperationMeta"), 2147483647), + v1: xdr.lookup("TransactionMetaV1"), + v2: xdr.lookup("TransactionMetaV2"), + v3: xdr.lookup("TransactionMetaV3") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionResultMeta + // { + // TransactionResultPair result; + // LedgerEntryChanges feeProcessing; + // TransactionMeta txApplyProcessing; + // }; + // + // =========================================================================== + xdr.struct("TransactionResultMeta", [["result", xdr.lookup("TransactionResultPair")], ["feeProcessing", xdr.lookup("LedgerEntryChanges")], ["txApplyProcessing", xdr.lookup("TransactionMeta")]]); + + // === xdr source ============================================================ + // + // struct UpgradeEntryMeta + // { + // LedgerUpgrade upgrade; + // LedgerEntryChanges changes; + // }; + // + // =========================================================================== + xdr.struct("UpgradeEntryMeta", [["upgrade", xdr.lookup("LedgerUpgrade")], ["changes", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaV0 + // { + // LedgerHeaderHistoryEntry ledgerHeader; + // // NB: txSet is sorted in "Hash order" + // TransactionSet txSet; + // + // // NB: transactions are sorted in apply order here + // // fees for all transactions are processed first + // // followed by applying transactions + // TransactionResultMeta txProcessing<>; + // + // // upgrades are applied last + // UpgradeEntryMeta upgradesProcessing<>; + // + // // other misc information attached to the ledger close + // SCPHistoryEntry scpInfo<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaV0", [["ledgerHeader", xdr.lookup("LedgerHeaderHistoryEntry")], ["txSet", xdr.lookup("TransactionSet")], ["txProcessing", xdr.varArray(xdr.lookup("TransactionResultMeta"), 2147483647)], ["upgradesProcessing", xdr.varArray(xdr.lookup("UpgradeEntryMeta"), 2147483647)], ["scpInfo", xdr.varArray(xdr.lookup("ScpHistoryEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaExtV1 + // { + // ExtensionPoint ext; + // int64 sorobanFeeWrite1KB; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaExtV1", [["ext", xdr.lookup("ExtensionPoint")], ["sorobanFeeWrite1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union LedgerCloseMetaExt switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerCloseMetaExtV1 v1; + // }; + // + // =========================================================================== + xdr.union("LedgerCloseMetaExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerCloseMetaExtV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaV1 + // { + // LedgerCloseMetaExt ext; + // + // LedgerHeaderHistoryEntry ledgerHeader; + // + // GeneralizedTransactionSet txSet; + // + // // NB: transactions are sorted in apply order here + // // fees for all transactions are processed first + // // followed by applying transactions + // TransactionResultMeta txProcessing<>; + // + // // upgrades are applied last + // UpgradeEntryMeta upgradesProcessing<>; + // + // // other misc information attached to the ledger close + // SCPHistoryEntry scpInfo<>; + // + // // Size in bytes of BucketList, to support downstream + // // systems calculating storage fees correctly. + // uint64 totalByteSizeOfBucketList; + // + // // Temp keys that are being evicted at this ledger. + // LedgerKey evictedTemporaryLedgerKeys<>; + // + // // Archived restorable ledger entries that are being + // // evicted at this ledger. + // LedgerEntry evictedPersistentLedgerEntries<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaV1", [["ext", xdr.lookup("LedgerCloseMetaExt")], ["ledgerHeader", xdr.lookup("LedgerHeaderHistoryEntry")], ["txSet", xdr.lookup("GeneralizedTransactionSet")], ["txProcessing", xdr.varArray(xdr.lookup("TransactionResultMeta"), 2147483647)], ["upgradesProcessing", xdr.varArray(xdr.lookup("UpgradeEntryMeta"), 2147483647)], ["scpInfo", xdr.varArray(xdr.lookup("ScpHistoryEntry"), 2147483647)], ["totalByteSizeOfBucketList", xdr.lookup("Uint64")], ["evictedTemporaryLedgerKeys", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["evictedPersistentLedgerEntries", xdr.varArray(xdr.lookup("LedgerEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union LedgerCloseMeta switch (int v) + // { + // case 0: + // LedgerCloseMetaV0 v0; + // case 1: + // LedgerCloseMetaV1 v1; + // }; + // + // =========================================================================== + xdr.union("LedgerCloseMeta", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"], [1, "v1"]], + arms: { + v0: xdr.lookup("LedgerCloseMetaV0"), + v1: xdr.lookup("LedgerCloseMetaV1") + } + }); + + // === xdr source ============================================================ + // + // enum ErrorCode + // { + // ERR_MISC = 0, // Unspecific error + // ERR_DATA = 1, // Malformed data + // ERR_CONF = 2, // Misconfiguration error + // ERR_AUTH = 3, // Authentication failure + // ERR_LOAD = 4 // System overloaded + // }; + // + // =========================================================================== + xdr["enum"]("ErrorCode", { + errMisc: 0, + errData: 1, + errConf: 2, + errAuth: 3, + errLoad: 4 + }); + + // === xdr source ============================================================ + // + // struct Error + // { + // ErrorCode code; + // string msg<100>; + // }; + // + // =========================================================================== + xdr.struct("Error", [["code", xdr.lookup("ErrorCode")], ["msg", xdr.string(100)]]); + + // === xdr source ============================================================ + // + // struct SendMore + // { + // uint32 numMessages; + // }; + // + // =========================================================================== + xdr.struct("SendMore", [["numMessages", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SendMoreExtended + // { + // uint32 numMessages; + // uint32 numBytes; + // }; + // + // =========================================================================== + xdr.struct("SendMoreExtended", [["numMessages", xdr.lookup("Uint32")], ["numBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct AuthCert + // { + // Curve25519Public pubkey; + // uint64 expiration; + // Signature sig; + // }; + // + // =========================================================================== + xdr.struct("AuthCert", [["pubkey", xdr.lookup("Curve25519Public")], ["expiration", xdr.lookup("Uint64")], ["sig", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // struct Hello + // { + // uint32 ledgerVersion; + // uint32 overlayVersion; + // uint32 overlayMinVersion; + // Hash networkID; + // string versionStr<100>; + // int listeningPort; + // NodeID peerID; + // AuthCert cert; + // uint256 nonce; + // }; + // + // =========================================================================== + xdr.struct("Hello", [["ledgerVersion", xdr.lookup("Uint32")], ["overlayVersion", xdr.lookup("Uint32")], ["overlayMinVersion", xdr.lookup("Uint32")], ["networkId", xdr.lookup("Hash")], ["versionStr", xdr.string(100)], ["listeningPort", xdr["int"]()], ["peerId", xdr.lookup("NodeId")], ["cert", xdr.lookup("AuthCert")], ["nonce", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // const AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED = 200; + // + // =========================================================================== + xdr["const"]("AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED", 200); + + // === xdr source ============================================================ + // + // struct Auth + // { + // int flags; + // }; + // + // =========================================================================== + xdr.struct("Auth", [["flags", xdr["int"]()]]); + + // === xdr source ============================================================ + // + // enum IPAddrType + // { + // IPv4 = 0, + // IPv6 = 1 + // }; + // + // =========================================================================== + xdr["enum"]("IpAddrType", { + iPv4: 0, + iPv6: 1 + }); + + // === xdr source ============================================================ + // + // union switch (IPAddrType type) + // { + // case IPv4: + // opaque ipv4[4]; + // case IPv6: + // opaque ipv6[16]; + // } + // + // =========================================================================== + xdr.union("PeerAddressIp", { + switchOn: xdr.lookup("IpAddrType"), + switchName: "type", + switches: [["iPv4", "ipv4"], ["iPv6", "ipv6"]], + arms: { + ipv4: xdr.opaque(4), + ipv6: xdr.opaque(16) + } + }); + + // === xdr source ============================================================ + // + // struct PeerAddress + // { + // union switch (IPAddrType type) + // { + // case IPv4: + // opaque ipv4[4]; + // case IPv6: + // opaque ipv6[16]; + // } + // ip; + // uint32 port; + // uint32 numFailures; + // }; + // + // =========================================================================== + xdr.struct("PeerAddress", [["ip", xdr.lookup("PeerAddressIp")], ["port", xdr.lookup("Uint32")], ["numFailures", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // enum MessageType + // { + // ERROR_MSG = 0, + // AUTH = 2, + // DONT_HAVE = 3, + // + // GET_PEERS = 4, // gets a list of peers this guy knows about + // PEERS = 5, + // + // GET_TX_SET = 6, // gets a particular txset by hash + // TX_SET = 7, + // GENERALIZED_TX_SET = 17, + // + // TRANSACTION = 8, // pass on a tx you have heard about + // + // // SCP + // GET_SCP_QUORUMSET = 9, + // SCP_QUORUMSET = 10, + // SCP_MESSAGE = 11, + // GET_SCP_STATE = 12, + // + // // new messages + // HELLO = 13, + // + // SURVEY_REQUEST = 14, + // SURVEY_RESPONSE = 15, + // + // SEND_MORE = 16, + // SEND_MORE_EXTENDED = 20, + // + // FLOOD_ADVERT = 18, + // FLOOD_DEMAND = 19, + // + // TIME_SLICED_SURVEY_REQUEST = 21, + // TIME_SLICED_SURVEY_RESPONSE = 22, + // TIME_SLICED_SURVEY_START_COLLECTING = 23, + // TIME_SLICED_SURVEY_STOP_COLLECTING = 24 + // }; + // + // =========================================================================== + xdr["enum"]("MessageType", { + errorMsg: 0, + auth: 2, + dontHave: 3, + getPeers: 4, + peers: 5, + getTxSet: 6, + txSet: 7, + generalizedTxSet: 17, + transaction: 8, + getScpQuorumset: 9, + scpQuorumset: 10, + scpMessage: 11, + getScpState: 12, + hello: 13, + surveyRequest: 14, + surveyResponse: 15, + sendMore: 16, + sendMoreExtended: 20, + floodAdvert: 18, + floodDemand: 19, + timeSlicedSurveyRequest: 21, + timeSlicedSurveyResponse: 22, + timeSlicedSurveyStartCollecting: 23, + timeSlicedSurveyStopCollecting: 24 + }); + + // === xdr source ============================================================ + // + // struct DontHave + // { + // MessageType type; + // uint256 reqHash; + // }; + // + // =========================================================================== + xdr.struct("DontHave", [["type", xdr.lookup("MessageType")], ["reqHash", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // enum SurveyMessageCommandType + // { + // SURVEY_TOPOLOGY = 0, + // TIME_SLICED_SURVEY_TOPOLOGY = 1 + // }; + // + // =========================================================================== + xdr["enum"]("SurveyMessageCommandType", { + surveyTopology: 0, + timeSlicedSurveyTopology: 1 + }); + + // === xdr source ============================================================ + // + // enum SurveyMessageResponseType + // { + // SURVEY_TOPOLOGY_RESPONSE_V0 = 0, + // SURVEY_TOPOLOGY_RESPONSE_V1 = 1, + // SURVEY_TOPOLOGY_RESPONSE_V2 = 2 + // }; + // + // =========================================================================== + xdr["enum"]("SurveyMessageResponseType", { + surveyTopologyResponseV0: 0, + surveyTopologyResponseV1: 1, + surveyTopologyResponseV2: 2 + }); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyStartCollectingMessage + // { + // NodeID surveyorID; + // uint32 nonce; + // uint32 ledgerNum; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyStartCollectingMessage", [["surveyorId", xdr.lookup("NodeId")], ["nonce", xdr.lookup("Uint32")], ["ledgerNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyStartCollectingMessage + // { + // Signature signature; + // TimeSlicedSurveyStartCollectingMessage startCollecting; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyStartCollectingMessage", [["signature", xdr.lookup("Signature")], ["startCollecting", xdr.lookup("TimeSlicedSurveyStartCollectingMessage")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyStopCollectingMessage + // { + // NodeID surveyorID; + // uint32 nonce; + // uint32 ledgerNum; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyStopCollectingMessage", [["surveyorId", xdr.lookup("NodeId")], ["nonce", xdr.lookup("Uint32")], ["ledgerNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyStopCollectingMessage + // { + // Signature signature; + // TimeSlicedSurveyStopCollectingMessage stopCollecting; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyStopCollectingMessage", [["signature", xdr.lookup("Signature")], ["stopCollecting", xdr.lookup("TimeSlicedSurveyStopCollectingMessage")]]); + + // === xdr source ============================================================ + // + // struct SurveyRequestMessage + // { + // NodeID surveyorPeerID; + // NodeID surveyedPeerID; + // uint32 ledgerNum; + // Curve25519Public encryptionKey; + // SurveyMessageCommandType commandType; + // }; + // + // =========================================================================== + xdr.struct("SurveyRequestMessage", [["surveyorPeerId", xdr.lookup("NodeId")], ["surveyedPeerId", xdr.lookup("NodeId")], ["ledgerNum", xdr.lookup("Uint32")], ["encryptionKey", xdr.lookup("Curve25519Public")], ["commandType", xdr.lookup("SurveyMessageCommandType")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyRequestMessage + // { + // SurveyRequestMessage request; + // uint32 nonce; + // uint32 inboundPeersIndex; + // uint32 outboundPeersIndex; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyRequestMessage", [["request", xdr.lookup("SurveyRequestMessage")], ["nonce", xdr.lookup("Uint32")], ["inboundPeersIndex", xdr.lookup("Uint32")], ["outboundPeersIndex", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedSurveyRequestMessage + // { + // Signature requestSignature; + // SurveyRequestMessage request; + // }; + // + // =========================================================================== + xdr.struct("SignedSurveyRequestMessage", [["requestSignature", xdr.lookup("Signature")], ["request", xdr.lookup("SurveyRequestMessage")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyRequestMessage + // { + // Signature requestSignature; + // TimeSlicedSurveyRequestMessage request; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyRequestMessage", [["requestSignature", xdr.lookup("Signature")], ["request", xdr.lookup("TimeSlicedSurveyRequestMessage")]]); + + // === xdr source ============================================================ + // + // typedef opaque EncryptedBody<64000>; + // + // =========================================================================== + xdr.typedef("EncryptedBody", xdr.varOpaque(64000)); + + // === xdr source ============================================================ + // + // struct SurveyResponseMessage + // { + // NodeID surveyorPeerID; + // NodeID surveyedPeerID; + // uint32 ledgerNum; + // SurveyMessageCommandType commandType; + // EncryptedBody encryptedBody; + // }; + // + // =========================================================================== + xdr.struct("SurveyResponseMessage", [["surveyorPeerId", xdr.lookup("NodeId")], ["surveyedPeerId", xdr.lookup("NodeId")], ["ledgerNum", xdr.lookup("Uint32")], ["commandType", xdr.lookup("SurveyMessageCommandType")], ["encryptedBody", xdr.lookup("EncryptedBody")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyResponseMessage + // { + // SurveyResponseMessage response; + // uint32 nonce; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyResponseMessage", [["response", xdr.lookup("SurveyResponseMessage")], ["nonce", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedSurveyResponseMessage + // { + // Signature responseSignature; + // SurveyResponseMessage response; + // }; + // + // =========================================================================== + xdr.struct("SignedSurveyResponseMessage", [["responseSignature", xdr.lookup("Signature")], ["response", xdr.lookup("SurveyResponseMessage")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyResponseMessage + // { + // Signature responseSignature; + // TimeSlicedSurveyResponseMessage response; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyResponseMessage", [["responseSignature", xdr.lookup("Signature")], ["response", xdr.lookup("TimeSlicedSurveyResponseMessage")]]); + + // === xdr source ============================================================ + // + // struct PeerStats + // { + // NodeID id; + // string versionStr<100>; + // uint64 messagesRead; + // uint64 messagesWritten; + // uint64 bytesRead; + // uint64 bytesWritten; + // uint64 secondsConnected; + // + // uint64 uniqueFloodBytesRecv; + // uint64 duplicateFloodBytesRecv; + // uint64 uniqueFetchBytesRecv; + // uint64 duplicateFetchBytesRecv; + // + // uint64 uniqueFloodMessageRecv; + // uint64 duplicateFloodMessageRecv; + // uint64 uniqueFetchMessageRecv; + // uint64 duplicateFetchMessageRecv; + // }; + // + // =========================================================================== + xdr.struct("PeerStats", [["id", xdr.lookup("NodeId")], ["versionStr", xdr.string(100)], ["messagesRead", xdr.lookup("Uint64")], ["messagesWritten", xdr.lookup("Uint64")], ["bytesRead", xdr.lookup("Uint64")], ["bytesWritten", xdr.lookup("Uint64")], ["secondsConnected", xdr.lookup("Uint64")], ["uniqueFloodBytesRecv", xdr.lookup("Uint64")], ["duplicateFloodBytesRecv", xdr.lookup("Uint64")], ["uniqueFetchBytesRecv", xdr.lookup("Uint64")], ["duplicateFetchBytesRecv", xdr.lookup("Uint64")], ["uniqueFloodMessageRecv", xdr.lookup("Uint64")], ["duplicateFloodMessageRecv", xdr.lookup("Uint64")], ["uniqueFetchMessageRecv", xdr.lookup("Uint64")], ["duplicateFetchMessageRecv", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // typedef PeerStats PeerStatList<25>; + // + // =========================================================================== + xdr.typedef("PeerStatList", xdr.varArray(xdr.lookup("PeerStats"), 25)); + + // === xdr source ============================================================ + // + // struct TimeSlicedNodeData + // { + // uint32 addedAuthenticatedPeers; + // uint32 droppedAuthenticatedPeers; + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // + // // SCP stats + // uint32 p75SCPFirstToSelfLatencyMs; + // uint32 p75SCPSelfToOtherLatencyMs; + // + // // How many times the node lost sync in the time slice + // uint32 lostSyncCount; + // + // // Config data + // bool isValidator; + // uint32 maxInboundPeerCount; + // uint32 maxOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedNodeData", [["addedAuthenticatedPeers", xdr.lookup("Uint32")], ["droppedAuthenticatedPeers", xdr.lookup("Uint32")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")], ["p75ScpFirstToSelfLatencyMs", xdr.lookup("Uint32")], ["p75ScpSelfToOtherLatencyMs", xdr.lookup("Uint32")], ["lostSyncCount", xdr.lookup("Uint32")], ["isValidator", xdr.bool()], ["maxInboundPeerCount", xdr.lookup("Uint32")], ["maxOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedPeerData + // { + // PeerStats peerStats; + // uint32 averageLatencyMs; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedPeerData", [["peerStats", xdr.lookup("PeerStats")], ["averageLatencyMs", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // typedef TimeSlicedPeerData TimeSlicedPeerDataList<25>; + // + // =========================================================================== + xdr.typedef("TimeSlicedPeerDataList", xdr.varArray(xdr.lookup("TimeSlicedPeerData"), 25)); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV0 + // { + // PeerStatList inboundPeers; + // PeerStatList outboundPeers; + // + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV0", [["inboundPeers", xdr.lookup("PeerStatList")], ["outboundPeers", xdr.lookup("PeerStatList")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV1 + // { + // PeerStatList inboundPeers; + // PeerStatList outboundPeers; + // + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // + // uint32 maxInboundPeerCount; + // uint32 maxOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV1", [["inboundPeers", xdr.lookup("PeerStatList")], ["outboundPeers", xdr.lookup("PeerStatList")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")], ["maxInboundPeerCount", xdr.lookup("Uint32")], ["maxOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV2 + // { + // TimeSlicedPeerDataList inboundPeers; + // TimeSlicedPeerDataList outboundPeers; + // TimeSlicedNodeData nodeData; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV2", [["inboundPeers", xdr.lookup("TimeSlicedPeerDataList")], ["outboundPeers", xdr.lookup("TimeSlicedPeerDataList")], ["nodeData", xdr.lookup("TimeSlicedNodeData")]]); + + // === xdr source ============================================================ + // + // union SurveyResponseBody switch (SurveyMessageResponseType type) + // { + // case SURVEY_TOPOLOGY_RESPONSE_V0: + // TopologyResponseBodyV0 topologyResponseBodyV0; + // case SURVEY_TOPOLOGY_RESPONSE_V1: + // TopologyResponseBodyV1 topologyResponseBodyV1; + // case SURVEY_TOPOLOGY_RESPONSE_V2: + // TopologyResponseBodyV2 topologyResponseBodyV2; + // }; + // + // =========================================================================== + xdr.union("SurveyResponseBody", { + switchOn: xdr.lookup("SurveyMessageResponseType"), + switchName: "type", + switches: [["surveyTopologyResponseV0", "topologyResponseBodyV0"], ["surveyTopologyResponseV1", "topologyResponseBodyV1"], ["surveyTopologyResponseV2", "topologyResponseBodyV2"]], + arms: { + topologyResponseBodyV0: xdr.lookup("TopologyResponseBodyV0"), + topologyResponseBodyV1: xdr.lookup("TopologyResponseBodyV1"), + topologyResponseBodyV2: xdr.lookup("TopologyResponseBodyV2") + } + }); + + // === xdr source ============================================================ + // + // const TX_ADVERT_VECTOR_MAX_SIZE = 1000; + // + // =========================================================================== + xdr["const"]("TX_ADVERT_VECTOR_MAX_SIZE", 1000); + + // === xdr source ============================================================ + // + // typedef Hash TxAdvertVector; + // + // =========================================================================== + xdr.typedef("TxAdvertVector", xdr.varArray(xdr.lookup("Hash"), xdr.lookup("TX_ADVERT_VECTOR_MAX_SIZE"))); + + // === xdr source ============================================================ + // + // struct FloodAdvert + // { + // TxAdvertVector txHashes; + // }; + // + // =========================================================================== + xdr.struct("FloodAdvert", [["txHashes", xdr.lookup("TxAdvertVector")]]); + + // === xdr source ============================================================ + // + // const TX_DEMAND_VECTOR_MAX_SIZE = 1000; + // + // =========================================================================== + xdr["const"]("TX_DEMAND_VECTOR_MAX_SIZE", 1000); + + // === xdr source ============================================================ + // + // typedef Hash TxDemandVector; + // + // =========================================================================== + xdr.typedef("TxDemandVector", xdr.varArray(xdr.lookup("Hash"), xdr.lookup("TX_DEMAND_VECTOR_MAX_SIZE"))); + + // === xdr source ============================================================ + // + // struct FloodDemand + // { + // TxDemandVector txHashes; + // }; + // + // =========================================================================== + xdr.struct("FloodDemand", [["txHashes", xdr.lookup("TxDemandVector")]]); + + // === xdr source ============================================================ + // + // union StellarMessage switch (MessageType type) + // { + // case ERROR_MSG: + // Error error; + // case HELLO: + // Hello hello; + // case AUTH: + // Auth auth; + // case DONT_HAVE: + // DontHave dontHave; + // case GET_PEERS: + // void; + // case PEERS: + // PeerAddress peers<100>; + // + // case GET_TX_SET: + // uint256 txSetHash; + // case TX_SET: + // TransactionSet txSet; + // case GENERALIZED_TX_SET: + // GeneralizedTransactionSet generalizedTxSet; + // + // case TRANSACTION: + // TransactionEnvelope transaction; + // + // case SURVEY_REQUEST: + // SignedSurveyRequestMessage signedSurveyRequestMessage; + // + // case SURVEY_RESPONSE: + // SignedSurveyResponseMessage signedSurveyResponseMessage; + // + // case TIME_SLICED_SURVEY_REQUEST: + // SignedTimeSlicedSurveyRequestMessage signedTimeSlicedSurveyRequestMessage; + // + // case TIME_SLICED_SURVEY_RESPONSE: + // SignedTimeSlicedSurveyResponseMessage signedTimeSlicedSurveyResponseMessage; + // + // case TIME_SLICED_SURVEY_START_COLLECTING: + // SignedTimeSlicedSurveyStartCollectingMessage + // signedTimeSlicedSurveyStartCollectingMessage; + // + // case TIME_SLICED_SURVEY_STOP_COLLECTING: + // SignedTimeSlicedSurveyStopCollectingMessage + // signedTimeSlicedSurveyStopCollectingMessage; + // + // // SCP + // case GET_SCP_QUORUMSET: + // uint256 qSetHash; + // case SCP_QUORUMSET: + // SCPQuorumSet qSet; + // case SCP_MESSAGE: + // SCPEnvelope envelope; + // case GET_SCP_STATE: + // uint32 getSCPLedgerSeq; // ledger seq requested ; if 0, requests the latest + // case SEND_MORE: + // SendMore sendMoreMessage; + // case SEND_MORE_EXTENDED: + // SendMoreExtended sendMoreExtendedMessage; + // // Pull mode + // case FLOOD_ADVERT: + // FloodAdvert floodAdvert; + // case FLOOD_DEMAND: + // FloodDemand floodDemand; + // }; + // + // =========================================================================== + xdr.union("StellarMessage", { + switchOn: xdr.lookup("MessageType"), + switchName: "type", + switches: [["errorMsg", "error"], ["hello", "hello"], ["auth", "auth"], ["dontHave", "dontHave"], ["getPeers", xdr["void"]()], ["peers", "peers"], ["getTxSet", "txSetHash"], ["txSet", "txSet"], ["generalizedTxSet", "generalizedTxSet"], ["transaction", "transaction"], ["surveyRequest", "signedSurveyRequestMessage"], ["surveyResponse", "signedSurveyResponseMessage"], ["timeSlicedSurveyRequest", "signedTimeSlicedSurveyRequestMessage"], ["timeSlicedSurveyResponse", "signedTimeSlicedSurveyResponseMessage"], ["timeSlicedSurveyStartCollecting", "signedTimeSlicedSurveyStartCollectingMessage"], ["timeSlicedSurveyStopCollecting", "signedTimeSlicedSurveyStopCollectingMessage"], ["getScpQuorumset", "qSetHash"], ["scpQuorumset", "qSet"], ["scpMessage", "envelope"], ["getScpState", "getScpLedgerSeq"], ["sendMore", "sendMoreMessage"], ["sendMoreExtended", "sendMoreExtendedMessage"], ["floodAdvert", "floodAdvert"], ["floodDemand", "floodDemand"]], + arms: { + error: xdr.lookup("Error"), + hello: xdr.lookup("Hello"), + auth: xdr.lookup("Auth"), + dontHave: xdr.lookup("DontHave"), + peers: xdr.varArray(xdr.lookup("PeerAddress"), 100), + txSetHash: xdr.lookup("Uint256"), + txSet: xdr.lookup("TransactionSet"), + generalizedTxSet: xdr.lookup("GeneralizedTransactionSet"), + transaction: xdr.lookup("TransactionEnvelope"), + signedSurveyRequestMessage: xdr.lookup("SignedSurveyRequestMessage"), + signedSurveyResponseMessage: xdr.lookup("SignedSurveyResponseMessage"), + signedTimeSlicedSurveyRequestMessage: xdr.lookup("SignedTimeSlicedSurveyRequestMessage"), + signedTimeSlicedSurveyResponseMessage: xdr.lookup("SignedTimeSlicedSurveyResponseMessage"), + signedTimeSlicedSurveyStartCollectingMessage: xdr.lookup("SignedTimeSlicedSurveyStartCollectingMessage"), + signedTimeSlicedSurveyStopCollectingMessage: xdr.lookup("SignedTimeSlicedSurveyStopCollectingMessage"), + qSetHash: xdr.lookup("Uint256"), + qSet: xdr.lookup("ScpQuorumSet"), + envelope: xdr.lookup("ScpEnvelope"), + getScpLedgerSeq: xdr.lookup("Uint32"), + sendMoreMessage: xdr.lookup("SendMore"), + sendMoreExtendedMessage: xdr.lookup("SendMoreExtended"), + floodAdvert: xdr.lookup("FloodAdvert"), + floodDemand: xdr.lookup("FloodDemand") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // uint64 sequence; + // StellarMessage message; + // HmacSha256Mac mac; + // } + // + // =========================================================================== + xdr.struct("AuthenticatedMessageV0", [["sequence", xdr.lookup("Uint64")], ["message", xdr.lookup("StellarMessage")], ["mac", xdr.lookup("HmacSha256Mac")]]); + + // === xdr source ============================================================ + // + // union AuthenticatedMessage switch (uint32 v) + // { + // case 0: + // struct + // { + // uint64 sequence; + // StellarMessage message; + // HmacSha256Mac mac; + // } v0; + // }; + // + // =========================================================================== + xdr.union("AuthenticatedMessage", { + switchOn: xdr.lookup("Uint32"), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("AuthenticatedMessageV0") + } + }); + + // === xdr source ============================================================ + // + // const MAX_OPS_PER_TX = 100; + // + // =========================================================================== + xdr["const"]("MAX_OPS_PER_TX", 100); + + // === xdr source ============================================================ + // + // union LiquidityPoolParameters switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // LiquidityPoolConstantProductParameters constantProduct; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolParameters", { + switchOn: xdr.lookup("LiquidityPoolType"), + switchName: "type", + switches: [["liquidityPoolConstantProduct", "constantProduct"]], + arms: { + constantProduct: xdr.lookup("LiquidityPoolConstantProductParameters") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // uint64 id; + // uint256 ed25519; + // } + // + // =========================================================================== + xdr.struct("MuxedAccountMed25519", [["id", xdr.lookup("Uint64")], ["ed25519", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // union MuxedAccount switch (CryptoKeyType type) + // { + // case KEY_TYPE_ED25519: + // uint256 ed25519; + // case KEY_TYPE_MUXED_ED25519: + // struct + // { + // uint64 id; + // uint256 ed25519; + // } med25519; + // }; + // + // =========================================================================== + xdr.union("MuxedAccount", { + switchOn: xdr.lookup("CryptoKeyType"), + switchName: "type", + switches: [["keyTypeEd25519", "ed25519"], ["keyTypeMuxedEd25519", "med25519"]], + arms: { + ed25519: xdr.lookup("Uint256"), + med25519: xdr.lookup("MuxedAccountMed25519") + } + }); + + // === xdr source ============================================================ + // + // struct DecoratedSignature + // { + // SignatureHint hint; // last 4 bytes of the public key, used as a hint + // Signature signature; // actual signature + // }; + // + // =========================================================================== + xdr.struct("DecoratedSignature", [["hint", xdr.lookup("SignatureHint")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // enum OperationType + // { + // CREATE_ACCOUNT = 0, + // PAYMENT = 1, + // PATH_PAYMENT_STRICT_RECEIVE = 2, + // MANAGE_SELL_OFFER = 3, + // CREATE_PASSIVE_SELL_OFFER = 4, + // SET_OPTIONS = 5, + // CHANGE_TRUST = 6, + // ALLOW_TRUST = 7, + // ACCOUNT_MERGE = 8, + // INFLATION = 9, + // MANAGE_DATA = 10, + // BUMP_SEQUENCE = 11, + // MANAGE_BUY_OFFER = 12, + // PATH_PAYMENT_STRICT_SEND = 13, + // CREATE_CLAIMABLE_BALANCE = 14, + // CLAIM_CLAIMABLE_BALANCE = 15, + // BEGIN_SPONSORING_FUTURE_RESERVES = 16, + // END_SPONSORING_FUTURE_RESERVES = 17, + // REVOKE_SPONSORSHIP = 18, + // CLAWBACK = 19, + // CLAWBACK_CLAIMABLE_BALANCE = 20, + // SET_TRUST_LINE_FLAGS = 21, + // LIQUIDITY_POOL_DEPOSIT = 22, + // LIQUIDITY_POOL_WITHDRAW = 23, + // INVOKE_HOST_FUNCTION = 24, + // EXTEND_FOOTPRINT_TTL = 25, + // RESTORE_FOOTPRINT = 26 + // }; + // + // =========================================================================== + xdr["enum"]("OperationType", { + createAccount: 0, + payment: 1, + pathPaymentStrictReceive: 2, + manageSellOffer: 3, + createPassiveSellOffer: 4, + setOptions: 5, + changeTrust: 6, + allowTrust: 7, + accountMerge: 8, + inflation: 9, + manageData: 10, + bumpSequence: 11, + manageBuyOffer: 12, + pathPaymentStrictSend: 13, + createClaimableBalance: 14, + claimClaimableBalance: 15, + beginSponsoringFutureReserves: 16, + endSponsoringFutureReserves: 17, + revokeSponsorship: 18, + clawback: 19, + clawbackClaimableBalance: 20, + setTrustLineFlags: 21, + liquidityPoolDeposit: 22, + liquidityPoolWithdraw: 23, + invokeHostFunction: 24, + extendFootprintTtl: 25, + restoreFootprint: 26 + }); + + // === xdr source ============================================================ + // + // struct CreateAccountOp + // { + // AccountID destination; // account to create + // int64 startingBalance; // amount they end up with + // }; + // + // =========================================================================== + xdr.struct("CreateAccountOp", [["destination", xdr.lookup("AccountId")], ["startingBalance", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct PaymentOp + // { + // MuxedAccount destination; // recipient of the payment + // Asset asset; // what they end up with + // int64 amount; // amount they end up with + // }; + // + // =========================================================================== + xdr.struct("PaymentOp", [["destination", xdr.lookup("MuxedAccount")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct PathPaymentStrictReceiveOp + // { + // Asset sendAsset; // asset we pay with + // int64 sendMax; // the maximum amount of sendAsset to + // // send (excluding fees). + // // The operation will fail if can't be met + // + // MuxedAccount destination; // recipient of the payment + // Asset destAsset; // what they end up with + // int64 destAmount; // amount they end up with + // + // Asset path<5>; // additional hops it must go through to get there + // }; + // + // =========================================================================== + xdr.struct("PathPaymentStrictReceiveOp", [["sendAsset", xdr.lookup("Asset")], ["sendMax", xdr.lookup("Int64")], ["destination", xdr.lookup("MuxedAccount")], ["destAsset", xdr.lookup("Asset")], ["destAmount", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]); + + // === xdr source ============================================================ + // + // struct PathPaymentStrictSendOp + // { + // Asset sendAsset; // asset we pay with + // int64 sendAmount; // amount of sendAsset to send (excluding fees) + // + // MuxedAccount destination; // recipient of the payment + // Asset destAsset; // what they end up with + // int64 destMin; // the minimum amount of dest asset to + // // be received + // // The operation will fail if it can't be met + // + // Asset path<5>; // additional hops it must go through to get there + // }; + // + // =========================================================================== + xdr.struct("PathPaymentStrictSendOp", [["sendAsset", xdr.lookup("Asset")], ["sendAmount", xdr.lookup("Int64")], ["destination", xdr.lookup("MuxedAccount")], ["destAsset", xdr.lookup("Asset")], ["destMin", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]); + + // === xdr source ============================================================ + // + // struct ManageSellOfferOp + // { + // Asset selling; + // Asset buying; + // int64 amount; // amount being sold. if set to 0, delete the offer + // Price price; // price of thing being sold in terms of what you are buying + // + // // 0=create a new offer, otherwise edit an existing offer + // int64 offerID; + // }; + // + // =========================================================================== + xdr.struct("ManageSellOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ManageBuyOfferOp + // { + // Asset selling; + // Asset buying; + // int64 buyAmount; // amount being bought. if set to 0, delete the offer + // Price price; // price of thing being bought in terms of what you are + // // selling + // + // // 0=create a new offer, otherwise edit an existing offer + // int64 offerID; + // }; + // + // =========================================================================== + xdr.struct("ManageBuyOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["buyAmount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct CreatePassiveSellOfferOp + // { + // Asset selling; // A + // Asset buying; // B + // int64 amount; // amount taker gets + // Price price; // cost of A in terms of B + // }; + // + // =========================================================================== + xdr.struct("CreatePassiveSellOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")]]); + + // === xdr source ============================================================ + // + // struct SetOptionsOp + // { + // AccountID* inflationDest; // sets the inflation destination + // + // uint32* clearFlags; // which flags to clear + // uint32* setFlags; // which flags to set + // + // // account threshold manipulation + // uint32* masterWeight; // weight of the master account + // uint32* lowThreshold; + // uint32* medThreshold; + // uint32* highThreshold; + // + // string32* homeDomain; // sets the home domain + // + // // Add, update or remove a signer for the account + // // signer is deleted if the weight is 0 + // Signer* signer; + // }; + // + // =========================================================================== + xdr.struct("SetOptionsOp", [["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["clearFlags", xdr.option(xdr.lookup("Uint32"))], ["setFlags", xdr.option(xdr.lookup("Uint32"))], ["masterWeight", xdr.option(xdr.lookup("Uint32"))], ["lowThreshold", xdr.option(xdr.lookup("Uint32"))], ["medThreshold", xdr.option(xdr.lookup("Uint32"))], ["highThreshold", xdr.option(xdr.lookup("Uint32"))], ["homeDomain", xdr.option(xdr.lookup("String32"))], ["signer", xdr.option(xdr.lookup("Signer"))]]); + + // === xdr source ============================================================ + // + // union ChangeTrustAsset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // case ASSET_TYPE_POOL_SHARE: + // LiquidityPoolParameters liquidityPool; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("ChangeTrustAsset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"], ["assetTypePoolShare", "liquidityPool"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12"), + liquidityPool: xdr.lookup("LiquidityPoolParameters") + } + }); + + // === xdr source ============================================================ + // + // struct ChangeTrustOp + // { + // ChangeTrustAsset line; + // + // // if limit is set to 0, deletes the trust line + // int64 limit; + // }; + // + // =========================================================================== + xdr.struct("ChangeTrustOp", [["line", xdr.lookup("ChangeTrustAsset")], ["limit", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct AllowTrustOp + // { + // AccountID trustor; + // AssetCode asset; + // + // // One of 0, AUTHORIZED_FLAG, or AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG + // uint32 authorize; + // }; + // + // =========================================================================== + xdr.struct("AllowTrustOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("AssetCode")], ["authorize", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ManageDataOp + // { + // string64 dataName; + // DataValue* dataValue; // set to null to clear + // }; + // + // =========================================================================== + xdr.struct("ManageDataOp", [["dataName", xdr.lookup("String64")], ["dataValue", xdr.option(xdr.lookup("DataValue"))]]); + + // === xdr source ============================================================ + // + // struct BumpSequenceOp + // { + // SequenceNumber bumpTo; + // }; + // + // =========================================================================== + xdr.struct("BumpSequenceOp", [["bumpTo", xdr.lookup("SequenceNumber")]]); + + // === xdr source ============================================================ + // + // struct CreateClaimableBalanceOp + // { + // Asset asset; + // int64 amount; + // Claimant claimants<10>; + // }; + // + // =========================================================================== + xdr.struct("CreateClaimableBalanceOp", [["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["claimants", xdr.varArray(xdr.lookup("Claimant"), 10)]]); + + // === xdr source ============================================================ + // + // struct ClaimClaimableBalanceOp + // { + // ClaimableBalanceID balanceID; + // }; + // + // =========================================================================== + xdr.struct("ClaimClaimableBalanceOp", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct BeginSponsoringFutureReservesOp + // { + // AccountID sponsoredID; + // }; + // + // =========================================================================== + xdr.struct("BeginSponsoringFutureReservesOp", [["sponsoredId", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // enum RevokeSponsorshipType + // { + // REVOKE_SPONSORSHIP_LEDGER_ENTRY = 0, + // REVOKE_SPONSORSHIP_SIGNER = 1 + // }; + // + // =========================================================================== + xdr["enum"]("RevokeSponsorshipType", { + revokeSponsorshipLedgerEntry: 0, + revokeSponsorshipSigner: 1 + }); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // SignerKey signerKey; + // } + // + // =========================================================================== + xdr.struct("RevokeSponsorshipOpSigner", [["accountId", xdr.lookup("AccountId")], ["signerKey", xdr.lookup("SignerKey")]]); + + // === xdr source ============================================================ + // + // union RevokeSponsorshipOp switch (RevokeSponsorshipType type) + // { + // case REVOKE_SPONSORSHIP_LEDGER_ENTRY: + // LedgerKey ledgerKey; + // case REVOKE_SPONSORSHIP_SIGNER: + // struct + // { + // AccountID accountID; + // SignerKey signerKey; + // } signer; + // }; + // + // =========================================================================== + xdr.union("RevokeSponsorshipOp", { + switchOn: xdr.lookup("RevokeSponsorshipType"), + switchName: "type", + switches: [["revokeSponsorshipLedgerEntry", "ledgerKey"], ["revokeSponsorshipSigner", "signer"]], + arms: { + ledgerKey: xdr.lookup("LedgerKey"), + signer: xdr.lookup("RevokeSponsorshipOpSigner") + } + }); + + // === xdr source ============================================================ + // + // struct ClawbackOp + // { + // Asset asset; + // MuxedAccount from; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("ClawbackOp", [["asset", xdr.lookup("Asset")], ["from", xdr.lookup("MuxedAccount")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClawbackClaimableBalanceOp + // { + // ClaimableBalanceID balanceID; + // }; + // + // =========================================================================== + xdr.struct("ClawbackClaimableBalanceOp", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct SetTrustLineFlagsOp + // { + // AccountID trustor; + // Asset asset; + // + // uint32 clearFlags; // which flags to clear + // uint32 setFlags; // which flags to set + // }; + // + // =========================================================================== + xdr.struct("SetTrustLineFlagsOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["clearFlags", xdr.lookup("Uint32")], ["setFlags", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // const LIQUIDITY_POOL_FEE_V18 = 30; + // + // =========================================================================== + xdr["const"]("LIQUIDITY_POOL_FEE_V18", 30); + + // === xdr source ============================================================ + // + // struct LiquidityPoolDepositOp + // { + // PoolID liquidityPoolID; + // int64 maxAmountA; // maximum amount of first asset to deposit + // int64 maxAmountB; // maximum amount of second asset to deposit + // Price minPrice; // minimum depositA/depositB + // Price maxPrice; // maximum depositA/depositB + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolDepositOp", [["liquidityPoolId", xdr.lookup("PoolId")], ["maxAmountA", xdr.lookup("Int64")], ["maxAmountB", xdr.lookup("Int64")], ["minPrice", xdr.lookup("Price")], ["maxPrice", xdr.lookup("Price")]]); + + // === xdr source ============================================================ + // + // struct LiquidityPoolWithdrawOp + // { + // PoolID liquidityPoolID; + // int64 amount; // amount of pool shares to withdraw + // int64 minAmountA; // minimum amount of first asset to withdraw + // int64 minAmountB; // minimum amount of second asset to withdraw + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolWithdrawOp", [["liquidityPoolId", xdr.lookup("PoolId")], ["amount", xdr.lookup("Int64")], ["minAmountA", xdr.lookup("Int64")], ["minAmountB", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum HostFunctionType + // { + // HOST_FUNCTION_TYPE_INVOKE_CONTRACT = 0, + // HOST_FUNCTION_TYPE_CREATE_CONTRACT = 1, + // HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM = 2, + // HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2 = 3 + // }; + // + // =========================================================================== + xdr["enum"]("HostFunctionType", { + hostFunctionTypeInvokeContract: 0, + hostFunctionTypeCreateContract: 1, + hostFunctionTypeUploadContractWasm: 2, + hostFunctionTypeCreateContractV2: 3 + }); + + // === xdr source ============================================================ + // + // enum ContractIDPreimageType + // { + // CONTRACT_ID_PREIMAGE_FROM_ADDRESS = 0, + // CONTRACT_ID_PREIMAGE_FROM_ASSET = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractIdPreimageType", { + contractIdPreimageFromAddress: 0, + contractIdPreimageFromAsset: 1 + }); + + // === xdr source ============================================================ + // + // struct + // { + // SCAddress address; + // uint256 salt; + // } + // + // =========================================================================== + xdr.struct("ContractIdPreimageFromAddress", [["address", xdr.lookup("ScAddress")], ["salt", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // union ContractIDPreimage switch (ContractIDPreimageType type) + // { + // case CONTRACT_ID_PREIMAGE_FROM_ADDRESS: + // struct + // { + // SCAddress address; + // uint256 salt; + // } fromAddress; + // case CONTRACT_ID_PREIMAGE_FROM_ASSET: + // Asset fromAsset; + // }; + // + // =========================================================================== + xdr.union("ContractIdPreimage", { + switchOn: xdr.lookup("ContractIdPreimageType"), + switchName: "type", + switches: [["contractIdPreimageFromAddress", "fromAddress"], ["contractIdPreimageFromAsset", "fromAsset"]], + arms: { + fromAddress: xdr.lookup("ContractIdPreimageFromAddress"), + fromAsset: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // struct CreateContractArgs + // { + // ContractIDPreimage contractIDPreimage; + // ContractExecutable executable; + // }; + // + // =========================================================================== + xdr.struct("CreateContractArgs", [["contractIdPreimage", xdr.lookup("ContractIdPreimage")], ["executable", xdr.lookup("ContractExecutable")]]); + + // === xdr source ============================================================ + // + // struct CreateContractArgsV2 + // { + // ContractIDPreimage contractIDPreimage; + // ContractExecutable executable; + // // Arguments of the contract's constructor. + // SCVal constructorArgs<>; + // }; + // + // =========================================================================== + xdr.struct("CreateContractArgsV2", [["contractIdPreimage", xdr.lookup("ContractIdPreimage")], ["executable", xdr.lookup("ContractExecutable")], ["constructorArgs", xdr.varArray(xdr.lookup("ScVal"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct InvokeContractArgs { + // SCAddress contractAddress; + // SCSymbol functionName; + // SCVal args<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeContractArgs", [["contractAddress", xdr.lookup("ScAddress")], ["functionName", xdr.lookup("ScSymbol")], ["args", xdr.varArray(xdr.lookup("ScVal"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union HostFunction switch (HostFunctionType type) + // { + // case HOST_FUNCTION_TYPE_INVOKE_CONTRACT: + // InvokeContractArgs invokeContract; + // case HOST_FUNCTION_TYPE_CREATE_CONTRACT: + // CreateContractArgs createContract; + // case HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM: + // opaque wasm<>; + // case HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2: + // CreateContractArgsV2 createContractV2; + // }; + // + // =========================================================================== + xdr.union("HostFunction", { + switchOn: xdr.lookup("HostFunctionType"), + switchName: "type", + switches: [["hostFunctionTypeInvokeContract", "invokeContract"], ["hostFunctionTypeCreateContract", "createContract"], ["hostFunctionTypeUploadContractWasm", "wasm"], ["hostFunctionTypeCreateContractV2", "createContractV2"]], + arms: { + invokeContract: xdr.lookup("InvokeContractArgs"), + createContract: xdr.lookup("CreateContractArgs"), + wasm: xdr.varOpaque(), + createContractV2: xdr.lookup("CreateContractArgsV2") + } + }); + + // === xdr source ============================================================ + // + // enum SorobanAuthorizedFunctionType + // { + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN = 0, + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN = 1, + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN = 2 + // }; + // + // =========================================================================== + xdr["enum"]("SorobanAuthorizedFunctionType", { + sorobanAuthorizedFunctionTypeContractFn: 0, + sorobanAuthorizedFunctionTypeCreateContractHostFn: 1, + sorobanAuthorizedFunctionTypeCreateContractV2HostFn: 2 + }); + + // === xdr source ============================================================ + // + // union SorobanAuthorizedFunction switch (SorobanAuthorizedFunctionType type) + // { + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN: + // InvokeContractArgs contractFn; + // // This variant of auth payload for creating new contract instances + // // doesn't allow specifying the constructor arguments, creating contracts + // // with constructors that take arguments is only possible by authorizing + // // `SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN` + // // (protocol 22+). + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN: + // CreateContractArgs createContractHostFn; + // // This variant of auth payload for creating new contract instances + // // is only accepted in and after protocol 22. It allows authorizing the + // // contract constructor arguments. + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN: + // CreateContractArgsV2 createContractV2HostFn; + // }; + // + // =========================================================================== + xdr.union("SorobanAuthorizedFunction", { + switchOn: xdr.lookup("SorobanAuthorizedFunctionType"), + switchName: "type", + switches: [["sorobanAuthorizedFunctionTypeContractFn", "contractFn"], ["sorobanAuthorizedFunctionTypeCreateContractHostFn", "createContractHostFn"], ["sorobanAuthorizedFunctionTypeCreateContractV2HostFn", "createContractV2HostFn"]], + arms: { + contractFn: xdr.lookup("InvokeContractArgs"), + createContractHostFn: xdr.lookup("CreateContractArgs"), + createContractV2HostFn: xdr.lookup("CreateContractArgsV2") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanAuthorizedInvocation + // { + // SorobanAuthorizedFunction function; + // SorobanAuthorizedInvocation subInvocations<>; + // }; + // + // =========================================================================== + xdr.struct("SorobanAuthorizedInvocation", [["function", xdr.lookup("SorobanAuthorizedFunction")], ["subInvocations", xdr.varArray(xdr.lookup("SorobanAuthorizedInvocation"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct SorobanAddressCredentials + // { + // SCAddress address; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SCVal signature; + // }; + // + // =========================================================================== + xdr.struct("SorobanAddressCredentials", [["address", xdr.lookup("ScAddress")], ["nonce", xdr.lookup("Int64")], ["signatureExpirationLedger", xdr.lookup("Uint32")], ["signature", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // enum SorobanCredentialsType + // { + // SOROBAN_CREDENTIALS_SOURCE_ACCOUNT = 0, + // SOROBAN_CREDENTIALS_ADDRESS = 1 + // }; + // + // =========================================================================== + xdr["enum"]("SorobanCredentialsType", { + sorobanCredentialsSourceAccount: 0, + sorobanCredentialsAddress: 1 + }); + + // === xdr source ============================================================ + // + // union SorobanCredentials switch (SorobanCredentialsType type) + // { + // case SOROBAN_CREDENTIALS_SOURCE_ACCOUNT: + // void; + // case SOROBAN_CREDENTIALS_ADDRESS: + // SorobanAddressCredentials address; + // }; + // + // =========================================================================== + xdr.union("SorobanCredentials", { + switchOn: xdr.lookup("SorobanCredentialsType"), + switchName: "type", + switches: [["sorobanCredentialsSourceAccount", xdr["void"]()], ["sorobanCredentialsAddress", "address"]], + arms: { + address: xdr.lookup("SorobanAddressCredentials") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanAuthorizationEntry + // { + // SorobanCredentials credentials; + // SorobanAuthorizedInvocation rootInvocation; + // }; + // + // =========================================================================== + xdr.struct("SorobanAuthorizationEntry", [["credentials", xdr.lookup("SorobanCredentials")], ["rootInvocation", xdr.lookup("SorobanAuthorizedInvocation")]]); + + // === xdr source ============================================================ + // + // struct InvokeHostFunctionOp + // { + // // Host function to invoke. + // HostFunction hostFunction; + // // Per-address authorizations for this host function. + // SorobanAuthorizationEntry auth<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeHostFunctionOp", [["hostFunction", xdr.lookup("HostFunction")], ["auth", xdr.varArray(xdr.lookup("SorobanAuthorizationEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct ExtendFootprintTTLOp + // { + // ExtensionPoint ext; + // uint32 extendTo; + // }; + // + // =========================================================================== + xdr.struct("ExtendFootprintTtlOp", [["ext", xdr.lookup("ExtensionPoint")], ["extendTo", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct RestoreFootprintOp + // { + // ExtensionPoint ext; + // }; + // + // =========================================================================== + xdr.struct("RestoreFootprintOp", [["ext", xdr.lookup("ExtensionPoint")]]); + + // === xdr source ============================================================ + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountOp createAccountOp; + // case PAYMENT: + // PaymentOp paymentOp; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp; + // case MANAGE_SELL_OFFER: + // ManageSellOfferOp manageSellOfferOp; + // case CREATE_PASSIVE_SELL_OFFER: + // CreatePassiveSellOfferOp createPassiveSellOfferOp; + // case SET_OPTIONS: + // SetOptionsOp setOptionsOp; + // case CHANGE_TRUST: + // ChangeTrustOp changeTrustOp; + // case ALLOW_TRUST: + // AllowTrustOp allowTrustOp; + // case ACCOUNT_MERGE: + // MuxedAccount destination; + // case INFLATION: + // void; + // case MANAGE_DATA: + // ManageDataOp manageDataOp; + // case BUMP_SEQUENCE: + // BumpSequenceOp bumpSequenceOp; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferOp manageBuyOfferOp; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendOp pathPaymentStrictSendOp; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceOp createClaimableBalanceOp; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceOp claimClaimableBalanceOp; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp; + // case END_SPONSORING_FUTURE_RESERVES: + // void; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipOp revokeSponsorshipOp; + // case CLAWBACK: + // ClawbackOp clawbackOp; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceOp clawbackClaimableBalanceOp; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsOp setTrustLineFlagsOp; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositOp liquidityPoolDepositOp; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawOp liquidityPoolWithdrawOp; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionOp invokeHostFunctionOp; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLOp extendFootprintTTLOp; + // case RESTORE_FOOTPRINT: + // RestoreFootprintOp restoreFootprintOp; + // } + // + // =========================================================================== + xdr.union("OperationBody", { + switchOn: xdr.lookup("OperationType"), + switchName: "type", + switches: [["createAccount", "createAccountOp"], ["payment", "paymentOp"], ["pathPaymentStrictReceive", "pathPaymentStrictReceiveOp"], ["manageSellOffer", "manageSellOfferOp"], ["createPassiveSellOffer", "createPassiveSellOfferOp"], ["setOptions", "setOptionsOp"], ["changeTrust", "changeTrustOp"], ["allowTrust", "allowTrustOp"], ["accountMerge", "destination"], ["inflation", xdr["void"]()], ["manageData", "manageDataOp"], ["bumpSequence", "bumpSequenceOp"], ["manageBuyOffer", "manageBuyOfferOp"], ["pathPaymentStrictSend", "pathPaymentStrictSendOp"], ["createClaimableBalance", "createClaimableBalanceOp"], ["claimClaimableBalance", "claimClaimableBalanceOp"], ["beginSponsoringFutureReserves", "beginSponsoringFutureReservesOp"], ["endSponsoringFutureReserves", xdr["void"]()], ["revokeSponsorship", "revokeSponsorshipOp"], ["clawback", "clawbackOp"], ["clawbackClaimableBalance", "clawbackClaimableBalanceOp"], ["setTrustLineFlags", "setTrustLineFlagsOp"], ["liquidityPoolDeposit", "liquidityPoolDepositOp"], ["liquidityPoolWithdraw", "liquidityPoolWithdrawOp"], ["invokeHostFunction", "invokeHostFunctionOp"], ["extendFootprintTtl", "extendFootprintTtlOp"], ["restoreFootprint", "restoreFootprintOp"]], + arms: { + createAccountOp: xdr.lookup("CreateAccountOp"), + paymentOp: xdr.lookup("PaymentOp"), + pathPaymentStrictReceiveOp: xdr.lookup("PathPaymentStrictReceiveOp"), + manageSellOfferOp: xdr.lookup("ManageSellOfferOp"), + createPassiveSellOfferOp: xdr.lookup("CreatePassiveSellOfferOp"), + setOptionsOp: xdr.lookup("SetOptionsOp"), + changeTrustOp: xdr.lookup("ChangeTrustOp"), + allowTrustOp: xdr.lookup("AllowTrustOp"), + destination: xdr.lookup("MuxedAccount"), + manageDataOp: xdr.lookup("ManageDataOp"), + bumpSequenceOp: xdr.lookup("BumpSequenceOp"), + manageBuyOfferOp: xdr.lookup("ManageBuyOfferOp"), + pathPaymentStrictSendOp: xdr.lookup("PathPaymentStrictSendOp"), + createClaimableBalanceOp: xdr.lookup("CreateClaimableBalanceOp"), + claimClaimableBalanceOp: xdr.lookup("ClaimClaimableBalanceOp"), + beginSponsoringFutureReservesOp: xdr.lookup("BeginSponsoringFutureReservesOp"), + revokeSponsorshipOp: xdr.lookup("RevokeSponsorshipOp"), + clawbackOp: xdr.lookup("ClawbackOp"), + clawbackClaimableBalanceOp: xdr.lookup("ClawbackClaimableBalanceOp"), + setTrustLineFlagsOp: xdr.lookup("SetTrustLineFlagsOp"), + liquidityPoolDepositOp: xdr.lookup("LiquidityPoolDepositOp"), + liquidityPoolWithdrawOp: xdr.lookup("LiquidityPoolWithdrawOp"), + invokeHostFunctionOp: xdr.lookup("InvokeHostFunctionOp"), + extendFootprintTtlOp: xdr.lookup("ExtendFootprintTtlOp"), + restoreFootprintOp: xdr.lookup("RestoreFootprintOp") + } + }); + + // === xdr source ============================================================ + // + // struct Operation + // { + // // sourceAccount is the account used to run the operation + // // if not set, the runtime defaults to "sourceAccount" specified at + // // the transaction level + // MuxedAccount* sourceAccount; + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountOp createAccountOp; + // case PAYMENT: + // PaymentOp paymentOp; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp; + // case MANAGE_SELL_OFFER: + // ManageSellOfferOp manageSellOfferOp; + // case CREATE_PASSIVE_SELL_OFFER: + // CreatePassiveSellOfferOp createPassiveSellOfferOp; + // case SET_OPTIONS: + // SetOptionsOp setOptionsOp; + // case CHANGE_TRUST: + // ChangeTrustOp changeTrustOp; + // case ALLOW_TRUST: + // AllowTrustOp allowTrustOp; + // case ACCOUNT_MERGE: + // MuxedAccount destination; + // case INFLATION: + // void; + // case MANAGE_DATA: + // ManageDataOp manageDataOp; + // case BUMP_SEQUENCE: + // BumpSequenceOp bumpSequenceOp; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferOp manageBuyOfferOp; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendOp pathPaymentStrictSendOp; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceOp createClaimableBalanceOp; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceOp claimClaimableBalanceOp; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp; + // case END_SPONSORING_FUTURE_RESERVES: + // void; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipOp revokeSponsorshipOp; + // case CLAWBACK: + // ClawbackOp clawbackOp; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceOp clawbackClaimableBalanceOp; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsOp setTrustLineFlagsOp; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositOp liquidityPoolDepositOp; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawOp liquidityPoolWithdrawOp; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionOp invokeHostFunctionOp; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLOp extendFootprintTTLOp; + // case RESTORE_FOOTPRINT: + // RestoreFootprintOp restoreFootprintOp; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("Operation", [["sourceAccount", xdr.option(xdr.lookup("MuxedAccount"))], ["body", xdr.lookup("OperationBody")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageOperationId", [["sourceAccount", xdr.lookup("AccountId")], ["seqNum", xdr.lookup("SequenceNumber")], ["opNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // PoolID liquidityPoolID; + // Asset asset; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageRevokeId", [["sourceAccount", xdr.lookup("AccountId")], ["seqNum", xdr.lookup("SequenceNumber")], ["opNum", xdr.lookup("Uint32")], ["liquidityPoolId", xdr.lookup("PoolId")], ["asset", xdr.lookup("Asset")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash networkID; + // ContractIDPreimage contractIDPreimage; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageContractId", [["networkId", xdr.lookup("Hash")], ["contractIdPreimage", xdr.lookup("ContractIdPreimage")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash networkID; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SorobanAuthorizedInvocation invocation; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageSorobanAuthorization", [["networkId", xdr.lookup("Hash")], ["nonce", xdr.lookup("Int64")], ["signatureExpirationLedger", xdr.lookup("Uint32")], ["invocation", xdr.lookup("SorobanAuthorizedInvocation")]]); + + // === xdr source ============================================================ + // + // union HashIDPreimage switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_OP_ID: + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // } operationID; + // case ENVELOPE_TYPE_POOL_REVOKE_OP_ID: + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // PoolID liquidityPoolID; + // Asset asset; + // } revokeID; + // case ENVELOPE_TYPE_CONTRACT_ID: + // struct + // { + // Hash networkID; + // ContractIDPreimage contractIDPreimage; + // } contractID; + // case ENVELOPE_TYPE_SOROBAN_AUTHORIZATION: + // struct + // { + // Hash networkID; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SorobanAuthorizedInvocation invocation; + // } sorobanAuthorization; + // }; + // + // =========================================================================== + xdr.union("HashIdPreimage", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeOpId", "operationId"], ["envelopeTypePoolRevokeOpId", "revokeId"], ["envelopeTypeContractId", "contractId"], ["envelopeTypeSorobanAuthorization", "sorobanAuthorization"]], + arms: { + operationId: xdr.lookup("HashIdPreimageOperationId"), + revokeId: xdr.lookup("HashIdPreimageRevokeId"), + contractId: xdr.lookup("HashIdPreimageContractId"), + sorobanAuthorization: xdr.lookup("HashIdPreimageSorobanAuthorization") + } + }); + + // === xdr source ============================================================ + // + // enum MemoType + // { + // MEMO_NONE = 0, + // MEMO_TEXT = 1, + // MEMO_ID = 2, + // MEMO_HASH = 3, + // MEMO_RETURN = 4 + // }; + // + // =========================================================================== + xdr["enum"]("MemoType", { + memoNone: 0, + memoText: 1, + memoId: 2, + memoHash: 3, + memoReturn: 4 + }); + + // === xdr source ============================================================ + // + // union Memo switch (MemoType type) + // { + // case MEMO_NONE: + // void; + // case MEMO_TEXT: + // string text<28>; + // case MEMO_ID: + // uint64 id; + // case MEMO_HASH: + // Hash hash; // the hash of what to pull from the content server + // case MEMO_RETURN: + // Hash retHash; // the hash of the tx you are rejecting + // }; + // + // =========================================================================== + xdr.union("Memo", { + switchOn: xdr.lookup("MemoType"), + switchName: "type", + switches: [["memoNone", xdr["void"]()], ["memoText", "text"], ["memoId", "id"], ["memoHash", "hash"], ["memoReturn", "retHash"]], + arms: { + text: xdr.string(28), + id: xdr.lookup("Uint64"), + hash: xdr.lookup("Hash"), + retHash: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // struct TimeBounds + // { + // TimePoint minTime; + // TimePoint maxTime; // 0 here means no maxTime + // }; + // + // =========================================================================== + xdr.struct("TimeBounds", [["minTime", xdr.lookup("TimePoint")], ["maxTime", xdr.lookup("TimePoint")]]); + + // === xdr source ============================================================ + // + // struct LedgerBounds + // { + // uint32 minLedger; + // uint32 maxLedger; // 0 here means no maxLedger + // }; + // + // =========================================================================== + xdr.struct("LedgerBounds", [["minLedger", xdr.lookup("Uint32")], ["maxLedger", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct PreconditionsV2 + // { + // TimeBounds* timeBounds; + // + // // Transaction only valid for ledger numbers n such that + // // minLedger <= n < maxLedger (if maxLedger == 0, then + // // only minLedger is checked) + // LedgerBounds* ledgerBounds; + // + // // If NULL, only valid when sourceAccount's sequence number + // // is seqNum - 1. Otherwise, valid when sourceAccount's + // // sequence number n satisfies minSeqNum <= n < tx.seqNum. + // // Note that after execution the account's sequence number + // // is always raised to tx.seqNum, and a transaction is not + // // valid if tx.seqNum is too high to ensure replay protection. + // SequenceNumber* minSeqNum; + // + // // For the transaction to be valid, the current ledger time must + // // be at least minSeqAge greater than sourceAccount's seqTime. + // Duration minSeqAge; + // + // // For the transaction to be valid, the current ledger number + // // must be at least minSeqLedgerGap greater than sourceAccount's + // // seqLedger. + // uint32 minSeqLedgerGap; + // + // // For the transaction to be valid, there must be a signature + // // corresponding to every Signer in this array, even if the + // // signature is not otherwise required by the sourceAccount or + // // operations. + // SignerKey extraSigners<2>; + // }; + // + // =========================================================================== + xdr.struct("PreconditionsV2", [["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["ledgerBounds", xdr.option(xdr.lookup("LedgerBounds"))], ["minSeqNum", xdr.option(xdr.lookup("SequenceNumber"))], ["minSeqAge", xdr.lookup("Duration")], ["minSeqLedgerGap", xdr.lookup("Uint32")], ["extraSigners", xdr.varArray(xdr.lookup("SignerKey"), 2)]]); + + // === xdr source ============================================================ + // + // enum PreconditionType + // { + // PRECOND_NONE = 0, + // PRECOND_TIME = 1, + // PRECOND_V2 = 2 + // }; + // + // =========================================================================== + xdr["enum"]("PreconditionType", { + precondNone: 0, + precondTime: 1, + precondV2: 2 + }); + + // === xdr source ============================================================ + // + // union Preconditions switch (PreconditionType type) + // { + // case PRECOND_NONE: + // void; + // case PRECOND_TIME: + // TimeBounds timeBounds; + // case PRECOND_V2: + // PreconditionsV2 v2; + // }; + // + // =========================================================================== + xdr.union("Preconditions", { + switchOn: xdr.lookup("PreconditionType"), + switchName: "type", + switches: [["precondNone", xdr["void"]()], ["precondTime", "timeBounds"], ["precondV2", "v2"]], + arms: { + timeBounds: xdr.lookup("TimeBounds"), + v2: xdr.lookup("PreconditionsV2") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerFootprint + // { + // LedgerKey readOnly<>; + // LedgerKey readWrite<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerFootprint", [["readOnly", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["readWrite", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)]]); + + // === xdr source ============================================================ + // + // enum ArchivalProofType + // { + // EXISTENCE = 0, + // NONEXISTENCE = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ArchivalProofType", { + existence: 0, + nonexistence: 1 + }); + + // === xdr source ============================================================ + // + // struct ArchivalProofNode + // { + // uint32 index; + // Hash hash; + // }; + // + // =========================================================================== + xdr.struct("ArchivalProofNode", [["index", xdr.lookup("Uint32")], ["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // typedef ArchivalProofNode ProofLevel<>; + // + // =========================================================================== + xdr.typedef("ProofLevel", xdr.varArray(xdr.lookup("ArchivalProofNode"), 2147483647)); + + // === xdr source ============================================================ + // + // struct NonexistenceProofBody + // { + // ColdArchiveBucketEntry entriesToProve<>; + // + // // Vector of vectors, where proofLevels[level] + // // contains all HashNodes that correspond with that level + // ProofLevel proofLevels<>; + // }; + // + // =========================================================================== + xdr.struct("NonexistenceProofBody", [["entriesToProve", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["proofLevels", xdr.varArray(xdr.lookup("ProofLevel"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct ExistenceProofBody + // { + // LedgerKey keysToProve<>; + // + // // Bounds for each key being proved, where bound[n] + // // corresponds to keysToProve[n] + // ColdArchiveBucketEntry lowBoundEntries<>; + // ColdArchiveBucketEntry highBoundEntries<>; + // + // // Vector of vectors, where proofLevels[level] + // // contains all HashNodes that correspond with that level + // ProofLevel proofLevels<>; + // }; + // + // =========================================================================== + xdr.struct("ExistenceProofBody", [["keysToProve", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["lowBoundEntries", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["highBoundEntries", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["proofLevels", xdr.varArray(xdr.lookup("ProofLevel"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union switch (ArchivalProofType t) + // { + // case EXISTENCE: + // NonexistenceProofBody nonexistenceProof; + // case NONEXISTENCE: + // ExistenceProofBody existenceProof; + // } + // + // =========================================================================== + xdr.union("ArchivalProofBody", { + switchOn: xdr.lookup("ArchivalProofType"), + switchName: "t", + switches: [["existence", "nonexistenceProof"], ["nonexistence", "existenceProof"]], + arms: { + nonexistenceProof: xdr.lookup("NonexistenceProofBody"), + existenceProof: xdr.lookup("ExistenceProofBody") + } + }); + + // === xdr source ============================================================ + // + // struct ArchivalProof + // { + // uint32 epoch; // AST Subtree for this proof + // + // union switch (ArchivalProofType t) + // { + // case EXISTENCE: + // NonexistenceProofBody nonexistenceProof; + // case NONEXISTENCE: + // ExistenceProofBody existenceProof; + // } body; + // }; + // + // =========================================================================== + xdr.struct("ArchivalProof", [["epoch", xdr.lookup("Uint32")], ["body", xdr.lookup("ArchivalProofBody")]]); + + // === xdr source ============================================================ + // + // struct SorobanResources + // { + // // The ledger footprint of the transaction. + // LedgerFootprint footprint; + // // The maximum number of instructions this transaction can use + // uint32 instructions; + // + // // The maximum number of bytes this transaction can read from ledger + // uint32 readBytes; + // // The maximum number of bytes this transaction can write to ledger + // uint32 writeBytes; + // }; + // + // =========================================================================== + xdr.struct("SorobanResources", [["footprint", xdr.lookup("LedgerFootprint")], ["instructions", xdr.lookup("Uint32")], ["readBytes", xdr.lookup("Uint32")], ["writeBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SorobanTransactionData + // { + // ExtensionPoint ext; + // SorobanResources resources; + // // Amount of the transaction `fee` allocated to the Soroban resource fees. + // // The fraction of `resourceFee` corresponding to `resources` specified + // // above is *not* refundable (i.e. fees for instructions, ledger I/O), as + // // well as fees for the transaction size. + // // The remaining part of the fee is refundable and the charged value is + // // based on the actual consumption of refundable resources (events, ledger + // // rent bumps). + // // The `inclusionFee` used for prioritization of the transaction is defined + // // as `tx.fee - resourceFee`. + // int64 resourceFee; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionData", [["ext", xdr.lookup("ExtensionPoint")], ["resources", xdr.lookup("SorobanResources")], ["resourceFee", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionV0Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionV0 + // { + // uint256 sourceAccountEd25519; + // uint32 fee; + // SequenceNumber seqNum; + // TimeBounds* timeBounds; + // Memo memo; + // Operation operations; + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionV0", [["sourceAccountEd25519", xdr.lookup("Uint256")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), xdr.lookup("MAX_OPS_PER_TX"))], ["ext", xdr.lookup("TransactionV0Ext")]]); + + // === xdr source ============================================================ + // + // struct TransactionV0Envelope + // { + // TransactionV0 tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("TransactionV0Envelope", [["tx", xdr.lookup("TransactionV0")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionData sorobanData; + // } + // + // =========================================================================== + xdr.union("TransactionExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "sorobanData"]], + arms: { + sorobanData: xdr.lookup("SorobanTransactionData") + } + }); + + // === xdr source ============================================================ + // + // struct Transaction + // { + // // account used to run the transaction + // MuxedAccount sourceAccount; + // + // // the fee the sourceAccount will pay + // uint32 fee; + // + // // sequence number to consume in the account + // SequenceNumber seqNum; + // + // // validity conditions + // Preconditions cond; + // + // Memo memo; + // + // Operation operations; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionData sorobanData; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("Transaction", [["sourceAccount", xdr.lookup("MuxedAccount")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["cond", xdr.lookup("Preconditions")], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), xdr.lookup("MAX_OPS_PER_TX"))], ["ext", xdr.lookup("TransactionExt")]]); + + // === xdr source ============================================================ + // + // struct TransactionV1Envelope + // { + // Transaction tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("TransactionV1Envelope", [["tx", xdr.lookup("Transaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // } + // + // =========================================================================== + xdr.union("FeeBumpTransactionInnerTx", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTx", "v1"]], + arms: { + v1: xdr.lookup("TransactionV1Envelope") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("FeeBumpTransactionExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct FeeBumpTransaction + // { + // MuxedAccount feeSource; + // int64 fee; + // union switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // } + // innerTx; + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("FeeBumpTransaction", [["feeSource", xdr.lookup("MuxedAccount")], ["fee", xdr.lookup("Int64")], ["innerTx", xdr.lookup("FeeBumpTransactionInnerTx")], ["ext", xdr.lookup("FeeBumpTransactionExt")]]); + + // === xdr source ============================================================ + // + // struct FeeBumpTransactionEnvelope + // { + // FeeBumpTransaction tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("FeeBumpTransactionEnvelope", [["tx", xdr.lookup("FeeBumpTransaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union TransactionEnvelope switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX_V0: + // TransactionV0Envelope v0; + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransactionEnvelope feeBump; + // }; + // + // =========================================================================== + xdr.union("TransactionEnvelope", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTxV0", "v0"], ["envelopeTypeTx", "v1"], ["envelopeTypeTxFeeBump", "feeBump"]], + arms: { + v0: xdr.lookup("TransactionV0Envelope"), + v1: xdr.lookup("TransactionV1Envelope"), + feeBump: xdr.lookup("FeeBumpTransactionEnvelope") + } + }); + + // === xdr source ============================================================ + // + // union switch (EnvelopeType type) + // { + // // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // case ENVELOPE_TYPE_TX: + // Transaction tx; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransaction feeBump; + // } + // + // =========================================================================== + xdr.union("TransactionSignaturePayloadTaggedTransaction", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTx", "tx"], ["envelopeTypeTxFeeBump", "feeBump"]], + arms: { + tx: xdr.lookup("Transaction"), + feeBump: xdr.lookup("FeeBumpTransaction") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionSignaturePayload + // { + // Hash networkId; + // union switch (EnvelopeType type) + // { + // // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // case ENVELOPE_TYPE_TX: + // Transaction tx; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransaction feeBump; + // } + // taggedTransaction; + // }; + // + // =========================================================================== + xdr.struct("TransactionSignaturePayload", [["networkId", xdr.lookup("Hash")], ["taggedTransaction", xdr.lookup("TransactionSignaturePayloadTaggedTransaction")]]); + + // === xdr source ============================================================ + // + // enum ClaimAtomType + // { + // CLAIM_ATOM_TYPE_V0 = 0, + // CLAIM_ATOM_TYPE_ORDER_BOOK = 1, + // CLAIM_ATOM_TYPE_LIQUIDITY_POOL = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimAtomType", { + claimAtomTypeV0: 0, + claimAtomTypeOrderBook: 1, + claimAtomTypeLiquidityPool: 2 + }); + + // === xdr source ============================================================ + // + // struct ClaimOfferAtomV0 + // { + // // emitted to identify the offer + // uint256 sellerEd25519; // Account that owns the offer + // int64 offerID; + // + // // amount and asset taken from the owner + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the owner + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimOfferAtomV0", [["sellerEd25519", xdr.lookup("Uint256")], ["offerId", xdr.lookup("Int64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClaimOfferAtom + // { + // // emitted to identify the offer + // AccountID sellerID; // Account that owns the offer + // int64 offerID; + // + // // amount and asset taken from the owner + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the owner + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimOfferAtom", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClaimLiquidityAtom + // { + // PoolID liquidityPoolID; + // + // // amount and asset taken from the pool + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the pool + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimLiquidityAtom", [["liquidityPoolId", xdr.lookup("PoolId")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union ClaimAtom switch (ClaimAtomType type) + // { + // case CLAIM_ATOM_TYPE_V0: + // ClaimOfferAtomV0 v0; + // case CLAIM_ATOM_TYPE_ORDER_BOOK: + // ClaimOfferAtom orderBook; + // case CLAIM_ATOM_TYPE_LIQUIDITY_POOL: + // ClaimLiquidityAtom liquidityPool; + // }; + // + // =========================================================================== + xdr.union("ClaimAtom", { + switchOn: xdr.lookup("ClaimAtomType"), + switchName: "type", + switches: [["claimAtomTypeV0", "v0"], ["claimAtomTypeOrderBook", "orderBook"], ["claimAtomTypeLiquidityPool", "liquidityPool"]], + arms: { + v0: xdr.lookup("ClaimOfferAtomV0"), + orderBook: xdr.lookup("ClaimOfferAtom"), + liquidityPool: xdr.lookup("ClaimLiquidityAtom") + } + }); + + // === xdr source ============================================================ + // + // enum CreateAccountResultCode + // { + // // codes considered as "success" for the operation + // CREATE_ACCOUNT_SUCCESS = 0, // account was created + // + // // codes considered as "failure" for the operation + // CREATE_ACCOUNT_MALFORMED = -1, // invalid destination + // CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account + // CREATE_ACCOUNT_LOW_RESERVE = + // -3, // would create an account below the min reserve + // CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists + // }; + // + // =========================================================================== + xdr["enum"]("CreateAccountResultCode", { + createAccountSuccess: 0, + createAccountMalformed: -1, + createAccountUnderfunded: -2, + createAccountLowReserve: -3, + createAccountAlreadyExist: -4 + }); + + // === xdr source ============================================================ + // + // union CreateAccountResult switch (CreateAccountResultCode code) + // { + // case CREATE_ACCOUNT_SUCCESS: + // void; + // case CREATE_ACCOUNT_MALFORMED: + // case CREATE_ACCOUNT_UNDERFUNDED: + // case CREATE_ACCOUNT_LOW_RESERVE: + // case CREATE_ACCOUNT_ALREADY_EXIST: + // void; + // }; + // + // =========================================================================== + xdr.union("CreateAccountResult", { + switchOn: xdr.lookup("CreateAccountResultCode"), + switchName: "code", + switches: [["createAccountSuccess", xdr["void"]()], ["createAccountMalformed", xdr["void"]()], ["createAccountUnderfunded", xdr["void"]()], ["createAccountLowReserve", xdr["void"]()], ["createAccountAlreadyExist", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum PaymentResultCode + // { + // // codes considered as "success" for the operation + // PAYMENT_SUCCESS = 0, // payment successfully completed + // + // // codes considered as "failure" for the operation + // PAYMENT_MALFORMED = -1, // bad input + // PAYMENT_UNDERFUNDED = -2, // not enough funds in source account + // PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account + // PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer + // PAYMENT_NO_DESTINATION = -5, // destination account does not exist + // PAYMENT_NO_TRUST = -6, // destination missing a trust line for asset + // PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset + // PAYMENT_LINE_FULL = -8, // destination would go above their limit + // PAYMENT_NO_ISSUER = -9 // missing issuer on asset + // }; + // + // =========================================================================== + xdr["enum"]("PaymentResultCode", { + paymentSuccess: 0, + paymentMalformed: -1, + paymentUnderfunded: -2, + paymentSrcNoTrust: -3, + paymentSrcNotAuthorized: -4, + paymentNoDestination: -5, + paymentNoTrust: -6, + paymentNotAuthorized: -7, + paymentLineFull: -8, + paymentNoIssuer: -9 + }); + + // === xdr source ============================================================ + // + // union PaymentResult switch (PaymentResultCode code) + // { + // case PAYMENT_SUCCESS: + // void; + // case PAYMENT_MALFORMED: + // case PAYMENT_UNDERFUNDED: + // case PAYMENT_SRC_NO_TRUST: + // case PAYMENT_SRC_NOT_AUTHORIZED: + // case PAYMENT_NO_DESTINATION: + // case PAYMENT_NO_TRUST: + // case PAYMENT_NOT_AUTHORIZED: + // case PAYMENT_LINE_FULL: + // case PAYMENT_NO_ISSUER: + // void; + // }; + // + // =========================================================================== + xdr.union("PaymentResult", { + switchOn: xdr.lookup("PaymentResultCode"), + switchName: "code", + switches: [["paymentSuccess", xdr["void"]()], ["paymentMalformed", xdr["void"]()], ["paymentUnderfunded", xdr["void"]()], ["paymentSrcNoTrust", xdr["void"]()], ["paymentSrcNotAuthorized", xdr["void"]()], ["paymentNoDestination", xdr["void"]()], ["paymentNoTrust", xdr["void"]()], ["paymentNotAuthorized", xdr["void"]()], ["paymentLineFull", xdr["void"]()], ["paymentNoIssuer", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum PathPaymentStrictReceiveResultCode + // { + // // codes considered as "success" for the operation + // PATH_PAYMENT_STRICT_RECEIVE_SUCCESS = 0, // success + // + // // codes considered as "failure" for the operation + // PATH_PAYMENT_STRICT_RECEIVE_MALFORMED = -1, // bad input + // PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED = + // -2, // not enough funds in source account + // PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST = + // -3, // no trust line on source account + // PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED = + // -4, // source not authorized to transfer + // PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION = + // -5, // destination account does not exist + // PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST = + // -6, // dest missing a trust line for asset + // PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED = + // -7, // dest not authorized to hold asset + // PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL = + // -8, // dest would go above their limit + // PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER = -9, // missing issuer on one asset + // PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS = + // -10, // not enough offers to satisfy path + // PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF = + // -11, // would cross one of its own offers + // PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX = -12 // could not satisfy sendmax + // }; + // + // =========================================================================== + xdr["enum"]("PathPaymentStrictReceiveResultCode", { + pathPaymentStrictReceiveSuccess: 0, + pathPaymentStrictReceiveMalformed: -1, + pathPaymentStrictReceiveUnderfunded: -2, + pathPaymentStrictReceiveSrcNoTrust: -3, + pathPaymentStrictReceiveSrcNotAuthorized: -4, + pathPaymentStrictReceiveNoDestination: -5, + pathPaymentStrictReceiveNoTrust: -6, + pathPaymentStrictReceiveNotAuthorized: -7, + pathPaymentStrictReceiveLineFull: -8, + pathPaymentStrictReceiveNoIssuer: -9, + pathPaymentStrictReceiveTooFewOffers: -10, + pathPaymentStrictReceiveOfferCrossSelf: -11, + pathPaymentStrictReceiveOverSendmax: -12 + }); + + // === xdr source ============================================================ + // + // struct SimplePaymentResult + // { + // AccountID destination; + // Asset asset; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("SimplePaymentResult", [["destination", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } + // + // =========================================================================== + xdr.struct("PathPaymentStrictReceiveResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]); + + // === xdr source ============================================================ + // + // union PathPaymentStrictReceiveResult switch ( + // PathPaymentStrictReceiveResultCode code) + // { + // case PATH_PAYMENT_STRICT_RECEIVE_SUCCESS: + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } success; + // case PATH_PAYMENT_STRICT_RECEIVE_MALFORMED: + // case PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED: + // case PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST: + // case PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION: + // case PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST: + // case PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL: + // void; + // case PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER: + // Asset noIssuer; // the asset that caused the error + // case PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS: + // case PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF: + // case PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX: + // void; + // }; + // + // =========================================================================== + xdr.union("PathPaymentStrictReceiveResult", { + switchOn: xdr.lookup("PathPaymentStrictReceiveResultCode"), + switchName: "code", + switches: [["pathPaymentStrictReceiveSuccess", "success"], ["pathPaymentStrictReceiveMalformed", xdr["void"]()], ["pathPaymentStrictReceiveUnderfunded", xdr["void"]()], ["pathPaymentStrictReceiveSrcNoTrust", xdr["void"]()], ["pathPaymentStrictReceiveSrcNotAuthorized", xdr["void"]()], ["pathPaymentStrictReceiveNoDestination", xdr["void"]()], ["pathPaymentStrictReceiveNoTrust", xdr["void"]()], ["pathPaymentStrictReceiveNotAuthorized", xdr["void"]()], ["pathPaymentStrictReceiveLineFull", xdr["void"]()], ["pathPaymentStrictReceiveNoIssuer", "noIssuer"], ["pathPaymentStrictReceiveTooFewOffers", xdr["void"]()], ["pathPaymentStrictReceiveOfferCrossSelf", xdr["void"]()], ["pathPaymentStrictReceiveOverSendmax", xdr["void"]()]], + arms: { + success: xdr.lookup("PathPaymentStrictReceiveResultSuccess"), + noIssuer: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // enum PathPaymentStrictSendResultCode + // { + // // codes considered as "success" for the operation + // PATH_PAYMENT_STRICT_SEND_SUCCESS = 0, // success + // + // // codes considered as "failure" for the operation + // PATH_PAYMENT_STRICT_SEND_MALFORMED = -1, // bad input + // PATH_PAYMENT_STRICT_SEND_UNDERFUNDED = + // -2, // not enough funds in source account + // PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST = + // -3, // no trust line on source account + // PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED = + // -4, // source not authorized to transfer + // PATH_PAYMENT_STRICT_SEND_NO_DESTINATION = + // -5, // destination account does not exist + // PATH_PAYMENT_STRICT_SEND_NO_TRUST = + // -6, // dest missing a trust line for asset + // PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED = + // -7, // dest not authorized to hold asset + // PATH_PAYMENT_STRICT_SEND_LINE_FULL = -8, // dest would go above their limit + // PATH_PAYMENT_STRICT_SEND_NO_ISSUER = -9, // missing issuer on one asset + // PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS = + // -10, // not enough offers to satisfy path + // PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF = + // -11, // would cross one of its own offers + // PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN = -12 // could not satisfy destMin + // }; + // + // =========================================================================== + xdr["enum"]("PathPaymentStrictSendResultCode", { + pathPaymentStrictSendSuccess: 0, + pathPaymentStrictSendMalformed: -1, + pathPaymentStrictSendUnderfunded: -2, + pathPaymentStrictSendSrcNoTrust: -3, + pathPaymentStrictSendSrcNotAuthorized: -4, + pathPaymentStrictSendNoDestination: -5, + pathPaymentStrictSendNoTrust: -6, + pathPaymentStrictSendNotAuthorized: -7, + pathPaymentStrictSendLineFull: -8, + pathPaymentStrictSendNoIssuer: -9, + pathPaymentStrictSendTooFewOffers: -10, + pathPaymentStrictSendOfferCrossSelf: -11, + pathPaymentStrictSendUnderDestmin: -12 + }); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } + // + // =========================================================================== + xdr.struct("PathPaymentStrictSendResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]); + + // === xdr source ============================================================ + // + // union PathPaymentStrictSendResult switch (PathPaymentStrictSendResultCode code) + // { + // case PATH_PAYMENT_STRICT_SEND_SUCCESS: + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } success; + // case PATH_PAYMENT_STRICT_SEND_MALFORMED: + // case PATH_PAYMENT_STRICT_SEND_UNDERFUNDED: + // case PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST: + // case PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_SEND_NO_DESTINATION: + // case PATH_PAYMENT_STRICT_SEND_NO_TRUST: + // case PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_SEND_LINE_FULL: + // void; + // case PATH_PAYMENT_STRICT_SEND_NO_ISSUER: + // Asset noIssuer; // the asset that caused the error + // case PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS: + // case PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF: + // case PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN: + // void; + // }; + // + // =========================================================================== + xdr.union("PathPaymentStrictSendResult", { + switchOn: xdr.lookup("PathPaymentStrictSendResultCode"), + switchName: "code", + switches: [["pathPaymentStrictSendSuccess", "success"], ["pathPaymentStrictSendMalformed", xdr["void"]()], ["pathPaymentStrictSendUnderfunded", xdr["void"]()], ["pathPaymentStrictSendSrcNoTrust", xdr["void"]()], ["pathPaymentStrictSendSrcNotAuthorized", xdr["void"]()], ["pathPaymentStrictSendNoDestination", xdr["void"]()], ["pathPaymentStrictSendNoTrust", xdr["void"]()], ["pathPaymentStrictSendNotAuthorized", xdr["void"]()], ["pathPaymentStrictSendLineFull", xdr["void"]()], ["pathPaymentStrictSendNoIssuer", "noIssuer"], ["pathPaymentStrictSendTooFewOffers", xdr["void"]()], ["pathPaymentStrictSendOfferCrossSelf", xdr["void"]()], ["pathPaymentStrictSendUnderDestmin", xdr["void"]()]], + arms: { + success: xdr.lookup("PathPaymentStrictSendResultSuccess"), + noIssuer: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // enum ManageSellOfferResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_SELL_OFFER_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // MANAGE_SELL_OFFER_MALFORMED = -1, // generated offer would be invalid + // MANAGE_SELL_OFFER_SELL_NO_TRUST = + // -2, // no trust line for what we're selling + // MANAGE_SELL_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying + // MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell + // MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy + // MANAGE_SELL_OFFER_LINE_FULL = -6, // can't receive more of what it's buying + // MANAGE_SELL_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell + // MANAGE_SELL_OFFER_CROSS_SELF = + // -8, // would cross an offer from the same user + // MANAGE_SELL_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling + // MANAGE_SELL_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying + // + // // update errors + // MANAGE_SELL_OFFER_NOT_FOUND = + // -11, // offerID does not match an existing offer + // + // MANAGE_SELL_OFFER_LOW_RESERVE = + // -12 // not enough funds to create a new Offer + // }; + // + // =========================================================================== + xdr["enum"]("ManageSellOfferResultCode", { + manageSellOfferSuccess: 0, + manageSellOfferMalformed: -1, + manageSellOfferSellNoTrust: -2, + manageSellOfferBuyNoTrust: -3, + manageSellOfferSellNotAuthorized: -4, + manageSellOfferBuyNotAuthorized: -5, + manageSellOfferLineFull: -6, + manageSellOfferUnderfunded: -7, + manageSellOfferCrossSelf: -8, + manageSellOfferSellNoIssuer: -9, + manageSellOfferBuyNoIssuer: -10, + manageSellOfferNotFound: -11, + manageSellOfferLowReserve: -12 + }); + + // === xdr source ============================================================ + // + // enum ManageOfferEffect + // { + // MANAGE_OFFER_CREATED = 0, + // MANAGE_OFFER_UPDATED = 1, + // MANAGE_OFFER_DELETED = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ManageOfferEffect", { + manageOfferCreated: 0, + manageOfferUpdated: 1, + manageOfferDeleted: 2 + }); + + // === xdr source ============================================================ + // + // union switch (ManageOfferEffect effect) + // { + // case MANAGE_OFFER_CREATED: + // case MANAGE_OFFER_UPDATED: + // OfferEntry offer; + // case MANAGE_OFFER_DELETED: + // void; + // } + // + // =========================================================================== + xdr.union("ManageOfferSuccessResultOffer", { + switchOn: xdr.lookup("ManageOfferEffect"), + switchName: "effect", + switches: [["manageOfferCreated", "offer"], ["manageOfferUpdated", "offer"], ["manageOfferDeleted", xdr["void"]()]], + arms: { + offer: xdr.lookup("OfferEntry") + } + }); + + // === xdr source ============================================================ + // + // struct ManageOfferSuccessResult + // { + // // offers that got claimed while creating this offer + // ClaimAtom offersClaimed<>; + // + // union switch (ManageOfferEffect effect) + // { + // case MANAGE_OFFER_CREATED: + // case MANAGE_OFFER_UPDATED: + // OfferEntry offer; + // case MANAGE_OFFER_DELETED: + // void; + // } + // offer; + // }; + // + // =========================================================================== + xdr.struct("ManageOfferSuccessResult", [["offersClaimed", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["offer", xdr.lookup("ManageOfferSuccessResultOffer")]]); + + // === xdr source ============================================================ + // + // union ManageSellOfferResult switch (ManageSellOfferResultCode code) + // { + // case MANAGE_SELL_OFFER_SUCCESS: + // ManageOfferSuccessResult success; + // case MANAGE_SELL_OFFER_MALFORMED: + // case MANAGE_SELL_OFFER_SELL_NO_TRUST: + // case MANAGE_SELL_OFFER_BUY_NO_TRUST: + // case MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED: + // case MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED: + // case MANAGE_SELL_OFFER_LINE_FULL: + // case MANAGE_SELL_OFFER_UNDERFUNDED: + // case MANAGE_SELL_OFFER_CROSS_SELF: + // case MANAGE_SELL_OFFER_SELL_NO_ISSUER: + // case MANAGE_SELL_OFFER_BUY_NO_ISSUER: + // case MANAGE_SELL_OFFER_NOT_FOUND: + // case MANAGE_SELL_OFFER_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageSellOfferResult", { + switchOn: xdr.lookup("ManageSellOfferResultCode"), + switchName: "code", + switches: [["manageSellOfferSuccess", "success"], ["manageSellOfferMalformed", xdr["void"]()], ["manageSellOfferSellNoTrust", xdr["void"]()], ["manageSellOfferBuyNoTrust", xdr["void"]()], ["manageSellOfferSellNotAuthorized", xdr["void"]()], ["manageSellOfferBuyNotAuthorized", xdr["void"]()], ["manageSellOfferLineFull", xdr["void"]()], ["manageSellOfferUnderfunded", xdr["void"]()], ["manageSellOfferCrossSelf", xdr["void"]()], ["manageSellOfferSellNoIssuer", xdr["void"]()], ["manageSellOfferBuyNoIssuer", xdr["void"]()], ["manageSellOfferNotFound", xdr["void"]()], ["manageSellOfferLowReserve", xdr["void"]()]], + arms: { + success: xdr.lookup("ManageOfferSuccessResult") + } + }); + + // === xdr source ============================================================ + // + // enum ManageBuyOfferResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_BUY_OFFER_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // MANAGE_BUY_OFFER_MALFORMED = -1, // generated offer would be invalid + // MANAGE_BUY_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling + // MANAGE_BUY_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying + // MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell + // MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy + // MANAGE_BUY_OFFER_LINE_FULL = -6, // can't receive more of what it's buying + // MANAGE_BUY_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell + // MANAGE_BUY_OFFER_CROSS_SELF = -8, // would cross an offer from the same user + // MANAGE_BUY_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling + // MANAGE_BUY_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying + // + // // update errors + // MANAGE_BUY_OFFER_NOT_FOUND = + // -11, // offerID does not match an existing offer + // + // MANAGE_BUY_OFFER_LOW_RESERVE = -12 // not enough funds to create a new Offer + // }; + // + // =========================================================================== + xdr["enum"]("ManageBuyOfferResultCode", { + manageBuyOfferSuccess: 0, + manageBuyOfferMalformed: -1, + manageBuyOfferSellNoTrust: -2, + manageBuyOfferBuyNoTrust: -3, + manageBuyOfferSellNotAuthorized: -4, + manageBuyOfferBuyNotAuthorized: -5, + manageBuyOfferLineFull: -6, + manageBuyOfferUnderfunded: -7, + manageBuyOfferCrossSelf: -8, + manageBuyOfferSellNoIssuer: -9, + manageBuyOfferBuyNoIssuer: -10, + manageBuyOfferNotFound: -11, + manageBuyOfferLowReserve: -12 + }); + + // === xdr source ============================================================ + // + // union ManageBuyOfferResult switch (ManageBuyOfferResultCode code) + // { + // case MANAGE_BUY_OFFER_SUCCESS: + // ManageOfferSuccessResult success; + // case MANAGE_BUY_OFFER_MALFORMED: + // case MANAGE_BUY_OFFER_SELL_NO_TRUST: + // case MANAGE_BUY_OFFER_BUY_NO_TRUST: + // case MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED: + // case MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED: + // case MANAGE_BUY_OFFER_LINE_FULL: + // case MANAGE_BUY_OFFER_UNDERFUNDED: + // case MANAGE_BUY_OFFER_CROSS_SELF: + // case MANAGE_BUY_OFFER_SELL_NO_ISSUER: + // case MANAGE_BUY_OFFER_BUY_NO_ISSUER: + // case MANAGE_BUY_OFFER_NOT_FOUND: + // case MANAGE_BUY_OFFER_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageBuyOfferResult", { + switchOn: xdr.lookup("ManageBuyOfferResultCode"), + switchName: "code", + switches: [["manageBuyOfferSuccess", "success"], ["manageBuyOfferMalformed", xdr["void"]()], ["manageBuyOfferSellNoTrust", xdr["void"]()], ["manageBuyOfferBuyNoTrust", xdr["void"]()], ["manageBuyOfferSellNotAuthorized", xdr["void"]()], ["manageBuyOfferBuyNotAuthorized", xdr["void"]()], ["manageBuyOfferLineFull", xdr["void"]()], ["manageBuyOfferUnderfunded", xdr["void"]()], ["manageBuyOfferCrossSelf", xdr["void"]()], ["manageBuyOfferSellNoIssuer", xdr["void"]()], ["manageBuyOfferBuyNoIssuer", xdr["void"]()], ["manageBuyOfferNotFound", xdr["void"]()], ["manageBuyOfferLowReserve", xdr["void"]()]], + arms: { + success: xdr.lookup("ManageOfferSuccessResult") + } + }); + + // === xdr source ============================================================ + // + // enum SetOptionsResultCode + // { + // // codes considered as "success" for the operation + // SET_OPTIONS_SUCCESS = 0, + // // codes considered as "failure" for the operation + // SET_OPTIONS_LOW_RESERVE = -1, // not enough funds to add a signer + // SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached + // SET_OPTIONS_BAD_FLAGS = -3, // invalid combination of clear/set flags + // SET_OPTIONS_INVALID_INFLATION = -4, // inflation account does not exist + // SET_OPTIONS_CANT_CHANGE = -5, // can no longer change this option + // SET_OPTIONS_UNKNOWN_FLAG = -6, // can't set an unknown flag + // SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold + // SET_OPTIONS_BAD_SIGNER = -8, // signer cannot be masterkey + // SET_OPTIONS_INVALID_HOME_DOMAIN = -9, // malformed home domain + // SET_OPTIONS_AUTH_REVOCABLE_REQUIRED = + // -10 // auth revocable is required for clawback + // }; + // + // =========================================================================== + xdr["enum"]("SetOptionsResultCode", { + setOptionsSuccess: 0, + setOptionsLowReserve: -1, + setOptionsTooManySigners: -2, + setOptionsBadFlags: -3, + setOptionsInvalidInflation: -4, + setOptionsCantChange: -5, + setOptionsUnknownFlag: -6, + setOptionsThresholdOutOfRange: -7, + setOptionsBadSigner: -8, + setOptionsInvalidHomeDomain: -9, + setOptionsAuthRevocableRequired: -10 + }); + + // === xdr source ============================================================ + // + // union SetOptionsResult switch (SetOptionsResultCode code) + // { + // case SET_OPTIONS_SUCCESS: + // void; + // case SET_OPTIONS_LOW_RESERVE: + // case SET_OPTIONS_TOO_MANY_SIGNERS: + // case SET_OPTIONS_BAD_FLAGS: + // case SET_OPTIONS_INVALID_INFLATION: + // case SET_OPTIONS_CANT_CHANGE: + // case SET_OPTIONS_UNKNOWN_FLAG: + // case SET_OPTIONS_THRESHOLD_OUT_OF_RANGE: + // case SET_OPTIONS_BAD_SIGNER: + // case SET_OPTIONS_INVALID_HOME_DOMAIN: + // case SET_OPTIONS_AUTH_REVOCABLE_REQUIRED: + // void; + // }; + // + // =========================================================================== + xdr.union("SetOptionsResult", { + switchOn: xdr.lookup("SetOptionsResultCode"), + switchName: "code", + switches: [["setOptionsSuccess", xdr["void"]()], ["setOptionsLowReserve", xdr["void"]()], ["setOptionsTooManySigners", xdr["void"]()], ["setOptionsBadFlags", xdr["void"]()], ["setOptionsInvalidInflation", xdr["void"]()], ["setOptionsCantChange", xdr["void"]()], ["setOptionsUnknownFlag", xdr["void"]()], ["setOptionsThresholdOutOfRange", xdr["void"]()], ["setOptionsBadSigner", xdr["void"]()], ["setOptionsInvalidHomeDomain", xdr["void"]()], ["setOptionsAuthRevocableRequired", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ChangeTrustResultCode + // { + // // codes considered as "success" for the operation + // CHANGE_TRUST_SUCCESS = 0, + // // codes considered as "failure" for the operation + // CHANGE_TRUST_MALFORMED = -1, // bad input + // CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer + // CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance + // // cannot create with a limit of 0 + // CHANGE_TRUST_LOW_RESERVE = + // -4, // not enough funds to create a new trust line, + // CHANGE_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed + // CHANGE_TRUST_TRUST_LINE_MISSING = -6, // Asset trustline is missing for pool + // CHANGE_TRUST_CANNOT_DELETE = + // -7, // Asset trustline is still referenced in a pool + // CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES = + // -8 // Asset trustline is deauthorized + // }; + // + // =========================================================================== + xdr["enum"]("ChangeTrustResultCode", { + changeTrustSuccess: 0, + changeTrustMalformed: -1, + changeTrustNoIssuer: -2, + changeTrustInvalidLimit: -3, + changeTrustLowReserve: -4, + changeTrustSelfNotAllowed: -5, + changeTrustTrustLineMissing: -6, + changeTrustCannotDelete: -7, + changeTrustNotAuthMaintainLiabilities: -8 + }); + + // === xdr source ============================================================ + // + // union ChangeTrustResult switch (ChangeTrustResultCode code) + // { + // case CHANGE_TRUST_SUCCESS: + // void; + // case CHANGE_TRUST_MALFORMED: + // case CHANGE_TRUST_NO_ISSUER: + // case CHANGE_TRUST_INVALID_LIMIT: + // case CHANGE_TRUST_LOW_RESERVE: + // case CHANGE_TRUST_SELF_NOT_ALLOWED: + // case CHANGE_TRUST_TRUST_LINE_MISSING: + // case CHANGE_TRUST_CANNOT_DELETE: + // case CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES: + // void; + // }; + // + // =========================================================================== + xdr.union("ChangeTrustResult", { + switchOn: xdr.lookup("ChangeTrustResultCode"), + switchName: "code", + switches: [["changeTrustSuccess", xdr["void"]()], ["changeTrustMalformed", xdr["void"]()], ["changeTrustNoIssuer", xdr["void"]()], ["changeTrustInvalidLimit", xdr["void"]()], ["changeTrustLowReserve", xdr["void"]()], ["changeTrustSelfNotAllowed", xdr["void"]()], ["changeTrustTrustLineMissing", xdr["void"]()], ["changeTrustCannotDelete", xdr["void"]()], ["changeTrustNotAuthMaintainLiabilities", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum AllowTrustResultCode + // { + // // codes considered as "success" for the operation + // ALLOW_TRUST_SUCCESS = 0, + // // codes considered as "failure" for the operation + // ALLOW_TRUST_MALFORMED = -1, // asset is not ASSET_TYPE_ALPHANUM + // ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline + // // source account does not require trust + // ALLOW_TRUST_TRUST_NOT_REQUIRED = -3, + // ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust, + // ALLOW_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed + // ALLOW_TRUST_LOW_RESERVE = -6 // claimable balances can't be created + // // on revoke due to low reserves + // }; + // + // =========================================================================== + xdr["enum"]("AllowTrustResultCode", { + allowTrustSuccess: 0, + allowTrustMalformed: -1, + allowTrustNoTrustLine: -2, + allowTrustTrustNotRequired: -3, + allowTrustCantRevoke: -4, + allowTrustSelfNotAllowed: -5, + allowTrustLowReserve: -6 + }); + + // === xdr source ============================================================ + // + // union AllowTrustResult switch (AllowTrustResultCode code) + // { + // case ALLOW_TRUST_SUCCESS: + // void; + // case ALLOW_TRUST_MALFORMED: + // case ALLOW_TRUST_NO_TRUST_LINE: + // case ALLOW_TRUST_TRUST_NOT_REQUIRED: + // case ALLOW_TRUST_CANT_REVOKE: + // case ALLOW_TRUST_SELF_NOT_ALLOWED: + // case ALLOW_TRUST_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("AllowTrustResult", { + switchOn: xdr.lookup("AllowTrustResultCode"), + switchName: "code", + switches: [["allowTrustSuccess", xdr["void"]()], ["allowTrustMalformed", xdr["void"]()], ["allowTrustNoTrustLine", xdr["void"]()], ["allowTrustTrustNotRequired", xdr["void"]()], ["allowTrustCantRevoke", xdr["void"]()], ["allowTrustSelfNotAllowed", xdr["void"]()], ["allowTrustLowReserve", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum AccountMergeResultCode + // { + // // codes considered as "success" for the operation + // ACCOUNT_MERGE_SUCCESS = 0, + // // codes considered as "failure" for the operation + // ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself + // ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist + // ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set + // ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers + // ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5, // sequence number is over max allowed + // ACCOUNT_MERGE_DEST_FULL = -6, // can't add source balance to + // // destination balance + // ACCOUNT_MERGE_IS_SPONSOR = -7 // can't merge account that is a sponsor + // }; + // + // =========================================================================== + xdr["enum"]("AccountMergeResultCode", { + accountMergeSuccess: 0, + accountMergeMalformed: -1, + accountMergeNoAccount: -2, + accountMergeImmutableSet: -3, + accountMergeHasSubEntries: -4, + accountMergeSeqnumTooFar: -5, + accountMergeDestFull: -6, + accountMergeIsSponsor: -7 + }); + + // === xdr source ============================================================ + // + // union AccountMergeResult switch (AccountMergeResultCode code) + // { + // case ACCOUNT_MERGE_SUCCESS: + // int64 sourceAccountBalance; // how much got transferred from source account + // case ACCOUNT_MERGE_MALFORMED: + // case ACCOUNT_MERGE_NO_ACCOUNT: + // case ACCOUNT_MERGE_IMMUTABLE_SET: + // case ACCOUNT_MERGE_HAS_SUB_ENTRIES: + // case ACCOUNT_MERGE_SEQNUM_TOO_FAR: + // case ACCOUNT_MERGE_DEST_FULL: + // case ACCOUNT_MERGE_IS_SPONSOR: + // void; + // }; + // + // =========================================================================== + xdr.union("AccountMergeResult", { + switchOn: xdr.lookup("AccountMergeResultCode"), + switchName: "code", + switches: [["accountMergeSuccess", "sourceAccountBalance"], ["accountMergeMalformed", xdr["void"]()], ["accountMergeNoAccount", xdr["void"]()], ["accountMergeImmutableSet", xdr["void"]()], ["accountMergeHasSubEntries", xdr["void"]()], ["accountMergeSeqnumTooFar", xdr["void"]()], ["accountMergeDestFull", xdr["void"]()], ["accountMergeIsSponsor", xdr["void"]()]], + arms: { + sourceAccountBalance: xdr.lookup("Int64") + } + }); + + // === xdr source ============================================================ + // + // enum InflationResultCode + // { + // // codes considered as "success" for the operation + // INFLATION_SUCCESS = 0, + // // codes considered as "failure" for the operation + // INFLATION_NOT_TIME = -1 + // }; + // + // =========================================================================== + xdr["enum"]("InflationResultCode", { + inflationSuccess: 0, + inflationNotTime: -1 + }); + + // === xdr source ============================================================ + // + // struct InflationPayout // or use PaymentResultAtom to limit types? + // { + // AccountID destination; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("InflationPayout", [["destination", xdr.lookup("AccountId")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union InflationResult switch (InflationResultCode code) + // { + // case INFLATION_SUCCESS: + // InflationPayout payouts<>; + // case INFLATION_NOT_TIME: + // void; + // }; + // + // =========================================================================== + xdr.union("InflationResult", { + switchOn: xdr.lookup("InflationResultCode"), + switchName: "code", + switches: [["inflationSuccess", "payouts"], ["inflationNotTime", xdr["void"]()]], + arms: { + payouts: xdr.varArray(xdr.lookup("InflationPayout"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // enum ManageDataResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_DATA_SUCCESS = 0, + // // codes considered as "failure" for the operation + // MANAGE_DATA_NOT_SUPPORTED_YET = + // -1, // The network hasn't moved to this protocol change yet + // MANAGE_DATA_NAME_NOT_FOUND = + // -2, // Trying to remove a Data Entry that isn't there + // MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry + // MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string + // }; + // + // =========================================================================== + xdr["enum"]("ManageDataResultCode", { + manageDataSuccess: 0, + manageDataNotSupportedYet: -1, + manageDataNameNotFound: -2, + manageDataLowReserve: -3, + manageDataInvalidName: -4 + }); + + // === xdr source ============================================================ + // + // union ManageDataResult switch (ManageDataResultCode code) + // { + // case MANAGE_DATA_SUCCESS: + // void; + // case MANAGE_DATA_NOT_SUPPORTED_YET: + // case MANAGE_DATA_NAME_NOT_FOUND: + // case MANAGE_DATA_LOW_RESERVE: + // case MANAGE_DATA_INVALID_NAME: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageDataResult", { + switchOn: xdr.lookup("ManageDataResultCode"), + switchName: "code", + switches: [["manageDataSuccess", xdr["void"]()], ["manageDataNotSupportedYet", xdr["void"]()], ["manageDataNameNotFound", xdr["void"]()], ["manageDataLowReserve", xdr["void"]()], ["manageDataInvalidName", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum BumpSequenceResultCode + // { + // // codes considered as "success" for the operation + // BUMP_SEQUENCE_SUCCESS = 0, + // // codes considered as "failure" for the operation + // BUMP_SEQUENCE_BAD_SEQ = -1 // `bumpTo` is not within bounds + // }; + // + // =========================================================================== + xdr["enum"]("BumpSequenceResultCode", { + bumpSequenceSuccess: 0, + bumpSequenceBadSeq: -1 + }); + + // === xdr source ============================================================ + // + // union BumpSequenceResult switch (BumpSequenceResultCode code) + // { + // case BUMP_SEQUENCE_SUCCESS: + // void; + // case BUMP_SEQUENCE_BAD_SEQ: + // void; + // }; + // + // =========================================================================== + xdr.union("BumpSequenceResult", { + switchOn: xdr.lookup("BumpSequenceResultCode"), + switchName: "code", + switches: [["bumpSequenceSuccess", xdr["void"]()], ["bumpSequenceBadSeq", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum CreateClaimableBalanceResultCode + // { + // CREATE_CLAIMABLE_BALANCE_SUCCESS = 0, + // CREATE_CLAIMABLE_BALANCE_MALFORMED = -1, + // CREATE_CLAIMABLE_BALANCE_LOW_RESERVE = -2, + // CREATE_CLAIMABLE_BALANCE_NO_TRUST = -3, + // CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -4, + // CREATE_CLAIMABLE_BALANCE_UNDERFUNDED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("CreateClaimableBalanceResultCode", { + createClaimableBalanceSuccess: 0, + createClaimableBalanceMalformed: -1, + createClaimableBalanceLowReserve: -2, + createClaimableBalanceNoTrust: -3, + createClaimableBalanceNotAuthorized: -4, + createClaimableBalanceUnderfunded: -5 + }); + + // === xdr source ============================================================ + // + // union CreateClaimableBalanceResult switch ( + // CreateClaimableBalanceResultCode code) + // { + // case CREATE_CLAIMABLE_BALANCE_SUCCESS: + // ClaimableBalanceID balanceID; + // case CREATE_CLAIMABLE_BALANCE_MALFORMED: + // case CREATE_CLAIMABLE_BALANCE_LOW_RESERVE: + // case CREATE_CLAIMABLE_BALANCE_NO_TRUST: + // case CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED: + // case CREATE_CLAIMABLE_BALANCE_UNDERFUNDED: + // void; + // }; + // + // =========================================================================== + xdr.union("CreateClaimableBalanceResult", { + switchOn: xdr.lookup("CreateClaimableBalanceResultCode"), + switchName: "code", + switches: [["createClaimableBalanceSuccess", "balanceId"], ["createClaimableBalanceMalformed", xdr["void"]()], ["createClaimableBalanceLowReserve", xdr["void"]()], ["createClaimableBalanceNoTrust", xdr["void"]()], ["createClaimableBalanceNotAuthorized", xdr["void"]()], ["createClaimableBalanceUnderfunded", xdr["void"]()]], + arms: { + balanceId: xdr.lookup("ClaimableBalanceId") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimClaimableBalanceResultCode + // { + // CLAIM_CLAIMABLE_BALANCE_SUCCESS = 0, + // CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1, + // CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM = -2, + // CLAIM_CLAIMABLE_BALANCE_LINE_FULL = -3, + // CLAIM_CLAIMABLE_BALANCE_NO_TRUST = -4, + // CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimClaimableBalanceResultCode", { + claimClaimableBalanceSuccess: 0, + claimClaimableBalanceDoesNotExist: -1, + claimClaimableBalanceCannotClaim: -2, + claimClaimableBalanceLineFull: -3, + claimClaimableBalanceNoTrust: -4, + claimClaimableBalanceNotAuthorized: -5 + }); + + // === xdr source ============================================================ + // + // union ClaimClaimableBalanceResult switch (ClaimClaimableBalanceResultCode code) + // { + // case CLAIM_CLAIMABLE_BALANCE_SUCCESS: + // void; + // case CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST: + // case CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM: + // case CLAIM_CLAIMABLE_BALANCE_LINE_FULL: + // case CLAIM_CLAIMABLE_BALANCE_NO_TRUST: + // case CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClaimClaimableBalanceResult", { + switchOn: xdr.lookup("ClaimClaimableBalanceResultCode"), + switchName: "code", + switches: [["claimClaimableBalanceSuccess", xdr["void"]()], ["claimClaimableBalanceDoesNotExist", xdr["void"]()], ["claimClaimableBalanceCannotClaim", xdr["void"]()], ["claimClaimableBalanceLineFull", xdr["void"]()], ["claimClaimableBalanceNoTrust", xdr["void"]()], ["claimClaimableBalanceNotAuthorized", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum BeginSponsoringFutureReservesResultCode + // { + // // codes considered as "success" for the operation + // BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED = -1, + // BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED = -2, + // BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("BeginSponsoringFutureReservesResultCode", { + beginSponsoringFutureReservesSuccess: 0, + beginSponsoringFutureReservesMalformed: -1, + beginSponsoringFutureReservesAlreadySponsored: -2, + beginSponsoringFutureReservesRecursive: -3 + }); + + // === xdr source ============================================================ + // + // union BeginSponsoringFutureReservesResult switch ( + // BeginSponsoringFutureReservesResultCode code) + // { + // case BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS: + // void; + // case BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED: + // case BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED: + // case BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE: + // void; + // }; + // + // =========================================================================== + xdr.union("BeginSponsoringFutureReservesResult", { + switchOn: xdr.lookup("BeginSponsoringFutureReservesResultCode"), + switchName: "code", + switches: [["beginSponsoringFutureReservesSuccess", xdr["void"]()], ["beginSponsoringFutureReservesMalformed", xdr["void"]()], ["beginSponsoringFutureReservesAlreadySponsored", xdr["void"]()], ["beginSponsoringFutureReservesRecursive", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum EndSponsoringFutureReservesResultCode + // { + // // codes considered as "success" for the operation + // END_SPONSORING_FUTURE_RESERVES_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED = -1 + // }; + // + // =========================================================================== + xdr["enum"]("EndSponsoringFutureReservesResultCode", { + endSponsoringFutureReservesSuccess: 0, + endSponsoringFutureReservesNotSponsored: -1 + }); + + // === xdr source ============================================================ + // + // union EndSponsoringFutureReservesResult switch ( + // EndSponsoringFutureReservesResultCode code) + // { + // case END_SPONSORING_FUTURE_RESERVES_SUCCESS: + // void; + // case END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED: + // void; + // }; + // + // =========================================================================== + xdr.union("EndSponsoringFutureReservesResult", { + switchOn: xdr.lookup("EndSponsoringFutureReservesResultCode"), + switchName: "code", + switches: [["endSponsoringFutureReservesSuccess", xdr["void"]()], ["endSponsoringFutureReservesNotSponsored", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum RevokeSponsorshipResultCode + // { + // // codes considered as "success" for the operation + // REVOKE_SPONSORSHIP_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // REVOKE_SPONSORSHIP_DOES_NOT_EXIST = -1, + // REVOKE_SPONSORSHIP_NOT_SPONSOR = -2, + // REVOKE_SPONSORSHIP_LOW_RESERVE = -3, + // REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE = -4, + // REVOKE_SPONSORSHIP_MALFORMED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("RevokeSponsorshipResultCode", { + revokeSponsorshipSuccess: 0, + revokeSponsorshipDoesNotExist: -1, + revokeSponsorshipNotSponsor: -2, + revokeSponsorshipLowReserve: -3, + revokeSponsorshipOnlyTransferable: -4, + revokeSponsorshipMalformed: -5 + }); + + // === xdr source ============================================================ + // + // union RevokeSponsorshipResult switch (RevokeSponsorshipResultCode code) + // { + // case REVOKE_SPONSORSHIP_SUCCESS: + // void; + // case REVOKE_SPONSORSHIP_DOES_NOT_EXIST: + // case REVOKE_SPONSORSHIP_NOT_SPONSOR: + // case REVOKE_SPONSORSHIP_LOW_RESERVE: + // case REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE: + // case REVOKE_SPONSORSHIP_MALFORMED: + // void; + // }; + // + // =========================================================================== + xdr.union("RevokeSponsorshipResult", { + switchOn: xdr.lookup("RevokeSponsorshipResultCode"), + switchName: "code", + switches: [["revokeSponsorshipSuccess", xdr["void"]()], ["revokeSponsorshipDoesNotExist", xdr["void"]()], ["revokeSponsorshipNotSponsor", xdr["void"]()], ["revokeSponsorshipLowReserve", xdr["void"]()], ["revokeSponsorshipOnlyTransferable", xdr["void"]()], ["revokeSponsorshipMalformed", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ClawbackResultCode + // { + // // codes considered as "success" for the operation + // CLAWBACK_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // CLAWBACK_MALFORMED = -1, + // CLAWBACK_NOT_CLAWBACK_ENABLED = -2, + // CLAWBACK_NO_TRUST = -3, + // CLAWBACK_UNDERFUNDED = -4 + // }; + // + // =========================================================================== + xdr["enum"]("ClawbackResultCode", { + clawbackSuccess: 0, + clawbackMalformed: -1, + clawbackNotClawbackEnabled: -2, + clawbackNoTrust: -3, + clawbackUnderfunded: -4 + }); + + // === xdr source ============================================================ + // + // union ClawbackResult switch (ClawbackResultCode code) + // { + // case CLAWBACK_SUCCESS: + // void; + // case CLAWBACK_MALFORMED: + // case CLAWBACK_NOT_CLAWBACK_ENABLED: + // case CLAWBACK_NO_TRUST: + // case CLAWBACK_UNDERFUNDED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClawbackResult", { + switchOn: xdr.lookup("ClawbackResultCode"), + switchName: "code", + switches: [["clawbackSuccess", xdr["void"]()], ["clawbackMalformed", xdr["void"]()], ["clawbackNotClawbackEnabled", xdr["void"]()], ["clawbackNoTrust", xdr["void"]()], ["clawbackUnderfunded", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ClawbackClaimableBalanceResultCode + // { + // // codes considered as "success" for the operation + // CLAWBACK_CLAIMABLE_BALANCE_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1, + // CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER = -2, + // CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED = -3 + // }; + // + // =========================================================================== + xdr["enum"]("ClawbackClaimableBalanceResultCode", { + clawbackClaimableBalanceSuccess: 0, + clawbackClaimableBalanceDoesNotExist: -1, + clawbackClaimableBalanceNotIssuer: -2, + clawbackClaimableBalanceNotClawbackEnabled: -3 + }); + + // === xdr source ============================================================ + // + // union ClawbackClaimableBalanceResult switch ( + // ClawbackClaimableBalanceResultCode code) + // { + // case CLAWBACK_CLAIMABLE_BALANCE_SUCCESS: + // void; + // case CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST: + // case CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER: + // case CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClawbackClaimableBalanceResult", { + switchOn: xdr.lookup("ClawbackClaimableBalanceResultCode"), + switchName: "code", + switches: [["clawbackClaimableBalanceSuccess", xdr["void"]()], ["clawbackClaimableBalanceDoesNotExist", xdr["void"]()], ["clawbackClaimableBalanceNotIssuer", xdr["void"]()], ["clawbackClaimableBalanceNotClawbackEnabled", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum SetTrustLineFlagsResultCode + // { + // // codes considered as "success" for the operation + // SET_TRUST_LINE_FLAGS_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // SET_TRUST_LINE_FLAGS_MALFORMED = -1, + // SET_TRUST_LINE_FLAGS_NO_TRUST_LINE = -2, + // SET_TRUST_LINE_FLAGS_CANT_REVOKE = -3, + // SET_TRUST_LINE_FLAGS_INVALID_STATE = -4, + // SET_TRUST_LINE_FLAGS_LOW_RESERVE = -5 // claimable balances can't be created + // // on revoke due to low reserves + // }; + // + // =========================================================================== + xdr["enum"]("SetTrustLineFlagsResultCode", { + setTrustLineFlagsSuccess: 0, + setTrustLineFlagsMalformed: -1, + setTrustLineFlagsNoTrustLine: -2, + setTrustLineFlagsCantRevoke: -3, + setTrustLineFlagsInvalidState: -4, + setTrustLineFlagsLowReserve: -5 + }); + + // === xdr source ============================================================ + // + // union SetTrustLineFlagsResult switch (SetTrustLineFlagsResultCode code) + // { + // case SET_TRUST_LINE_FLAGS_SUCCESS: + // void; + // case SET_TRUST_LINE_FLAGS_MALFORMED: + // case SET_TRUST_LINE_FLAGS_NO_TRUST_LINE: + // case SET_TRUST_LINE_FLAGS_CANT_REVOKE: + // case SET_TRUST_LINE_FLAGS_INVALID_STATE: + // case SET_TRUST_LINE_FLAGS_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("SetTrustLineFlagsResult", { + switchOn: xdr.lookup("SetTrustLineFlagsResultCode"), + switchName: "code", + switches: [["setTrustLineFlagsSuccess", xdr["void"]()], ["setTrustLineFlagsMalformed", xdr["void"]()], ["setTrustLineFlagsNoTrustLine", xdr["void"]()], ["setTrustLineFlagsCantRevoke", xdr["void"]()], ["setTrustLineFlagsInvalidState", xdr["void"]()], ["setTrustLineFlagsLowReserve", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum LiquidityPoolDepositResultCode + // { + // // codes considered as "success" for the operation + // LIQUIDITY_POOL_DEPOSIT_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // LIQUIDITY_POOL_DEPOSIT_MALFORMED = -1, // bad input + // LIQUIDITY_POOL_DEPOSIT_NO_TRUST = -2, // no trust line for one of the + // // assets + // LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED = -3, // not authorized for one of the + // // assets + // LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED = -4, // not enough balance for one of + // // the assets + // LIQUIDITY_POOL_DEPOSIT_LINE_FULL = -5, // pool share trust line doesn't + // // have sufficient limit + // LIQUIDITY_POOL_DEPOSIT_BAD_PRICE = -6, // deposit price outside bounds + // LIQUIDITY_POOL_DEPOSIT_POOL_FULL = -7 // pool reserves are full + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolDepositResultCode", { + liquidityPoolDepositSuccess: 0, + liquidityPoolDepositMalformed: -1, + liquidityPoolDepositNoTrust: -2, + liquidityPoolDepositNotAuthorized: -3, + liquidityPoolDepositUnderfunded: -4, + liquidityPoolDepositLineFull: -5, + liquidityPoolDepositBadPrice: -6, + liquidityPoolDepositPoolFull: -7 + }); + + // === xdr source ============================================================ + // + // union LiquidityPoolDepositResult switch (LiquidityPoolDepositResultCode code) + // { + // case LIQUIDITY_POOL_DEPOSIT_SUCCESS: + // void; + // case LIQUIDITY_POOL_DEPOSIT_MALFORMED: + // case LIQUIDITY_POOL_DEPOSIT_NO_TRUST: + // case LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED: + // case LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED: + // case LIQUIDITY_POOL_DEPOSIT_LINE_FULL: + // case LIQUIDITY_POOL_DEPOSIT_BAD_PRICE: + // case LIQUIDITY_POOL_DEPOSIT_POOL_FULL: + // void; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolDepositResult", { + switchOn: xdr.lookup("LiquidityPoolDepositResultCode"), + switchName: "code", + switches: [["liquidityPoolDepositSuccess", xdr["void"]()], ["liquidityPoolDepositMalformed", xdr["void"]()], ["liquidityPoolDepositNoTrust", xdr["void"]()], ["liquidityPoolDepositNotAuthorized", xdr["void"]()], ["liquidityPoolDepositUnderfunded", xdr["void"]()], ["liquidityPoolDepositLineFull", xdr["void"]()], ["liquidityPoolDepositBadPrice", xdr["void"]()], ["liquidityPoolDepositPoolFull", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum LiquidityPoolWithdrawResultCode + // { + // // codes considered as "success" for the operation + // LIQUIDITY_POOL_WITHDRAW_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // LIQUIDITY_POOL_WITHDRAW_MALFORMED = -1, // bad input + // LIQUIDITY_POOL_WITHDRAW_NO_TRUST = -2, // no trust line for one of the + // // assets + // LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED = -3, // not enough balance of the + // // pool share + // LIQUIDITY_POOL_WITHDRAW_LINE_FULL = -4, // would go above limit for one + // // of the assets + // LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM = -5 // didn't withdraw enough + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolWithdrawResultCode", { + liquidityPoolWithdrawSuccess: 0, + liquidityPoolWithdrawMalformed: -1, + liquidityPoolWithdrawNoTrust: -2, + liquidityPoolWithdrawUnderfunded: -3, + liquidityPoolWithdrawLineFull: -4, + liquidityPoolWithdrawUnderMinimum: -5 + }); + + // === xdr source ============================================================ + // + // union LiquidityPoolWithdrawResult switch (LiquidityPoolWithdrawResultCode code) + // { + // case LIQUIDITY_POOL_WITHDRAW_SUCCESS: + // void; + // case LIQUIDITY_POOL_WITHDRAW_MALFORMED: + // case LIQUIDITY_POOL_WITHDRAW_NO_TRUST: + // case LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED: + // case LIQUIDITY_POOL_WITHDRAW_LINE_FULL: + // case LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM: + // void; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolWithdrawResult", { + switchOn: xdr.lookup("LiquidityPoolWithdrawResultCode"), + switchName: "code", + switches: [["liquidityPoolWithdrawSuccess", xdr["void"]()], ["liquidityPoolWithdrawMalformed", xdr["void"]()], ["liquidityPoolWithdrawNoTrust", xdr["void"]()], ["liquidityPoolWithdrawUnderfunded", xdr["void"]()], ["liquidityPoolWithdrawLineFull", xdr["void"]()], ["liquidityPoolWithdrawUnderMinimum", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum InvokeHostFunctionResultCode + // { + // // codes considered as "success" for the operation + // INVOKE_HOST_FUNCTION_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // INVOKE_HOST_FUNCTION_MALFORMED = -1, + // INVOKE_HOST_FUNCTION_TRAPPED = -2, + // INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3, + // INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4, + // INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5 + // }; + // + // =========================================================================== + xdr["enum"]("InvokeHostFunctionResultCode", { + invokeHostFunctionSuccess: 0, + invokeHostFunctionMalformed: -1, + invokeHostFunctionTrapped: -2, + invokeHostFunctionResourceLimitExceeded: -3, + invokeHostFunctionEntryArchived: -4, + invokeHostFunctionInsufficientRefundableFee: -5 + }); + + // === xdr source ============================================================ + // + // union InvokeHostFunctionResult switch (InvokeHostFunctionResultCode code) + // { + // case INVOKE_HOST_FUNCTION_SUCCESS: + // Hash success; // sha256(InvokeHostFunctionSuccessPreImage) + // case INVOKE_HOST_FUNCTION_MALFORMED: + // case INVOKE_HOST_FUNCTION_TRAPPED: + // case INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED: + // case INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED: + // case INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("InvokeHostFunctionResult", { + switchOn: xdr.lookup("InvokeHostFunctionResultCode"), + switchName: "code", + switches: [["invokeHostFunctionSuccess", "success"], ["invokeHostFunctionMalformed", xdr["void"]()], ["invokeHostFunctionTrapped", xdr["void"]()], ["invokeHostFunctionResourceLimitExceeded", xdr["void"]()], ["invokeHostFunctionEntryArchived", xdr["void"]()], ["invokeHostFunctionInsufficientRefundableFee", xdr["void"]()]], + arms: { + success: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum ExtendFootprintTTLResultCode + // { + // // codes considered as "success" for the operation + // EXTEND_FOOTPRINT_TTL_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // EXTEND_FOOTPRINT_TTL_MALFORMED = -1, + // EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2, + // EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("ExtendFootprintTtlResultCode", { + extendFootprintTtlSuccess: 0, + extendFootprintTtlMalformed: -1, + extendFootprintTtlResourceLimitExceeded: -2, + extendFootprintTtlInsufficientRefundableFee: -3 + }); + + // === xdr source ============================================================ + // + // union ExtendFootprintTTLResult switch (ExtendFootprintTTLResultCode code) + // { + // case EXTEND_FOOTPRINT_TTL_SUCCESS: + // void; + // case EXTEND_FOOTPRINT_TTL_MALFORMED: + // case EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED: + // case EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("ExtendFootprintTtlResult", { + switchOn: xdr.lookup("ExtendFootprintTtlResultCode"), + switchName: "code", + switches: [["extendFootprintTtlSuccess", xdr["void"]()], ["extendFootprintTtlMalformed", xdr["void"]()], ["extendFootprintTtlResourceLimitExceeded", xdr["void"]()], ["extendFootprintTtlInsufficientRefundableFee", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum RestoreFootprintResultCode + // { + // // codes considered as "success" for the operation + // RESTORE_FOOTPRINT_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // RESTORE_FOOTPRINT_MALFORMED = -1, + // RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED = -2, + // RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("RestoreFootprintResultCode", { + restoreFootprintSuccess: 0, + restoreFootprintMalformed: -1, + restoreFootprintResourceLimitExceeded: -2, + restoreFootprintInsufficientRefundableFee: -3 + }); + + // === xdr source ============================================================ + // + // union RestoreFootprintResult switch (RestoreFootprintResultCode code) + // { + // case RESTORE_FOOTPRINT_SUCCESS: + // void; + // case RESTORE_FOOTPRINT_MALFORMED: + // case RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED: + // case RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("RestoreFootprintResult", { + switchOn: xdr.lookup("RestoreFootprintResultCode"), + switchName: "code", + switches: [["restoreFootprintSuccess", xdr["void"]()], ["restoreFootprintMalformed", xdr["void"]()], ["restoreFootprintResourceLimitExceeded", xdr["void"]()], ["restoreFootprintInsufficientRefundableFee", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum OperationResultCode + // { + // opINNER = 0, // inner object result is valid + // + // opBAD_AUTH = -1, // too few valid signatures / wrong network + // opNO_ACCOUNT = -2, // source account was not found + // opNOT_SUPPORTED = -3, // operation not supported at this time + // opTOO_MANY_SUBENTRIES = -4, // max number of subentries already reached + // opEXCEEDED_WORK_LIMIT = -5, // operation did too much work + // opTOO_MANY_SPONSORING = -6 // account is sponsoring too many entries + // }; + // + // =========================================================================== + xdr["enum"]("OperationResultCode", { + opInner: 0, + opBadAuth: -1, + opNoAccount: -2, + opNotSupported: -3, + opTooManySubentries: -4, + opExceededWorkLimit: -5, + opTooManySponsoring: -6 + }); + + // === xdr source ============================================================ + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountResult createAccountResult; + // case PAYMENT: + // PaymentResult paymentResult; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult; + // case MANAGE_SELL_OFFER: + // ManageSellOfferResult manageSellOfferResult; + // case CREATE_PASSIVE_SELL_OFFER: + // ManageSellOfferResult createPassiveSellOfferResult; + // case SET_OPTIONS: + // SetOptionsResult setOptionsResult; + // case CHANGE_TRUST: + // ChangeTrustResult changeTrustResult; + // case ALLOW_TRUST: + // AllowTrustResult allowTrustResult; + // case ACCOUNT_MERGE: + // AccountMergeResult accountMergeResult; + // case INFLATION: + // InflationResult inflationResult; + // case MANAGE_DATA: + // ManageDataResult manageDataResult; + // case BUMP_SEQUENCE: + // BumpSequenceResult bumpSeqResult; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferResult manageBuyOfferResult; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendResult pathPaymentStrictSendResult; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceResult createClaimableBalanceResult; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceResult claimClaimableBalanceResult; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult; + // case END_SPONSORING_FUTURE_RESERVES: + // EndSponsoringFutureReservesResult endSponsoringFutureReservesResult; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipResult revokeSponsorshipResult; + // case CLAWBACK: + // ClawbackResult clawbackResult; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceResult clawbackClaimableBalanceResult; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsResult setTrustLineFlagsResult; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositResult liquidityPoolDepositResult; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawResult liquidityPoolWithdrawResult; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionResult invokeHostFunctionResult; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLResult extendFootprintTTLResult; + // case RESTORE_FOOTPRINT: + // RestoreFootprintResult restoreFootprintResult; + // } + // + // =========================================================================== + xdr.union("OperationResultTr", { + switchOn: xdr.lookup("OperationType"), + switchName: "type", + switches: [["createAccount", "createAccountResult"], ["payment", "paymentResult"], ["pathPaymentStrictReceive", "pathPaymentStrictReceiveResult"], ["manageSellOffer", "manageSellOfferResult"], ["createPassiveSellOffer", "createPassiveSellOfferResult"], ["setOptions", "setOptionsResult"], ["changeTrust", "changeTrustResult"], ["allowTrust", "allowTrustResult"], ["accountMerge", "accountMergeResult"], ["inflation", "inflationResult"], ["manageData", "manageDataResult"], ["bumpSequence", "bumpSeqResult"], ["manageBuyOffer", "manageBuyOfferResult"], ["pathPaymentStrictSend", "pathPaymentStrictSendResult"], ["createClaimableBalance", "createClaimableBalanceResult"], ["claimClaimableBalance", "claimClaimableBalanceResult"], ["beginSponsoringFutureReserves", "beginSponsoringFutureReservesResult"], ["endSponsoringFutureReserves", "endSponsoringFutureReservesResult"], ["revokeSponsorship", "revokeSponsorshipResult"], ["clawback", "clawbackResult"], ["clawbackClaimableBalance", "clawbackClaimableBalanceResult"], ["setTrustLineFlags", "setTrustLineFlagsResult"], ["liquidityPoolDeposit", "liquidityPoolDepositResult"], ["liquidityPoolWithdraw", "liquidityPoolWithdrawResult"], ["invokeHostFunction", "invokeHostFunctionResult"], ["extendFootprintTtl", "extendFootprintTtlResult"], ["restoreFootprint", "restoreFootprintResult"]], + arms: { + createAccountResult: xdr.lookup("CreateAccountResult"), + paymentResult: xdr.lookup("PaymentResult"), + pathPaymentStrictReceiveResult: xdr.lookup("PathPaymentStrictReceiveResult"), + manageSellOfferResult: xdr.lookup("ManageSellOfferResult"), + createPassiveSellOfferResult: xdr.lookup("ManageSellOfferResult"), + setOptionsResult: xdr.lookup("SetOptionsResult"), + changeTrustResult: xdr.lookup("ChangeTrustResult"), + allowTrustResult: xdr.lookup("AllowTrustResult"), + accountMergeResult: xdr.lookup("AccountMergeResult"), + inflationResult: xdr.lookup("InflationResult"), + manageDataResult: xdr.lookup("ManageDataResult"), + bumpSeqResult: xdr.lookup("BumpSequenceResult"), + manageBuyOfferResult: xdr.lookup("ManageBuyOfferResult"), + pathPaymentStrictSendResult: xdr.lookup("PathPaymentStrictSendResult"), + createClaimableBalanceResult: xdr.lookup("CreateClaimableBalanceResult"), + claimClaimableBalanceResult: xdr.lookup("ClaimClaimableBalanceResult"), + beginSponsoringFutureReservesResult: xdr.lookup("BeginSponsoringFutureReservesResult"), + endSponsoringFutureReservesResult: xdr.lookup("EndSponsoringFutureReservesResult"), + revokeSponsorshipResult: xdr.lookup("RevokeSponsorshipResult"), + clawbackResult: xdr.lookup("ClawbackResult"), + clawbackClaimableBalanceResult: xdr.lookup("ClawbackClaimableBalanceResult"), + setTrustLineFlagsResult: xdr.lookup("SetTrustLineFlagsResult"), + liquidityPoolDepositResult: xdr.lookup("LiquidityPoolDepositResult"), + liquidityPoolWithdrawResult: xdr.lookup("LiquidityPoolWithdrawResult"), + invokeHostFunctionResult: xdr.lookup("InvokeHostFunctionResult"), + extendFootprintTtlResult: xdr.lookup("ExtendFootprintTtlResult"), + restoreFootprintResult: xdr.lookup("RestoreFootprintResult") + } + }); + + // === xdr source ============================================================ + // + // union OperationResult switch (OperationResultCode code) + // { + // case opINNER: + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountResult createAccountResult; + // case PAYMENT: + // PaymentResult paymentResult; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult; + // case MANAGE_SELL_OFFER: + // ManageSellOfferResult manageSellOfferResult; + // case CREATE_PASSIVE_SELL_OFFER: + // ManageSellOfferResult createPassiveSellOfferResult; + // case SET_OPTIONS: + // SetOptionsResult setOptionsResult; + // case CHANGE_TRUST: + // ChangeTrustResult changeTrustResult; + // case ALLOW_TRUST: + // AllowTrustResult allowTrustResult; + // case ACCOUNT_MERGE: + // AccountMergeResult accountMergeResult; + // case INFLATION: + // InflationResult inflationResult; + // case MANAGE_DATA: + // ManageDataResult manageDataResult; + // case BUMP_SEQUENCE: + // BumpSequenceResult bumpSeqResult; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferResult manageBuyOfferResult; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendResult pathPaymentStrictSendResult; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceResult createClaimableBalanceResult; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceResult claimClaimableBalanceResult; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult; + // case END_SPONSORING_FUTURE_RESERVES: + // EndSponsoringFutureReservesResult endSponsoringFutureReservesResult; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipResult revokeSponsorshipResult; + // case CLAWBACK: + // ClawbackResult clawbackResult; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceResult clawbackClaimableBalanceResult; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsResult setTrustLineFlagsResult; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositResult liquidityPoolDepositResult; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawResult liquidityPoolWithdrawResult; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionResult invokeHostFunctionResult; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLResult extendFootprintTTLResult; + // case RESTORE_FOOTPRINT: + // RestoreFootprintResult restoreFootprintResult; + // } + // tr; + // case opBAD_AUTH: + // case opNO_ACCOUNT: + // case opNOT_SUPPORTED: + // case opTOO_MANY_SUBENTRIES: + // case opEXCEEDED_WORK_LIMIT: + // case opTOO_MANY_SPONSORING: + // void; + // }; + // + // =========================================================================== + xdr.union("OperationResult", { + switchOn: xdr.lookup("OperationResultCode"), + switchName: "code", + switches: [["opInner", "tr"], ["opBadAuth", xdr["void"]()], ["opNoAccount", xdr["void"]()], ["opNotSupported", xdr["void"]()], ["opTooManySubentries", xdr["void"]()], ["opExceededWorkLimit", xdr["void"]()], ["opTooManySponsoring", xdr["void"]()]], + arms: { + tr: xdr.lookup("OperationResultTr") + } + }); + + // === xdr source ============================================================ + // + // enum TransactionResultCode + // { + // txFEE_BUMP_INNER_SUCCESS = 1, // fee bump inner transaction succeeded + // txSUCCESS = 0, // all operations succeeded + // + // txFAILED = -1, // one of the operations failed (none were applied) + // + // txTOO_EARLY = -2, // ledger closeTime before minTime + // txTOO_LATE = -3, // ledger closeTime after maxTime + // txMISSING_OPERATION = -4, // no operation was specified + // txBAD_SEQ = -5, // sequence number does not match source account + // + // txBAD_AUTH = -6, // too few valid signatures / wrong network + // txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve + // txNO_ACCOUNT = -8, // source account not found + // txINSUFFICIENT_FEE = -9, // fee is too small + // txBAD_AUTH_EXTRA = -10, // unused signatures attached to transaction + // txINTERNAL_ERROR = -11, // an unknown error occurred + // + // txNOT_SUPPORTED = -12, // transaction type not supported + // txFEE_BUMP_INNER_FAILED = -13, // fee bump inner transaction failed + // txBAD_SPONSORSHIP = -14, // sponsorship not confirmed + // txBAD_MIN_SEQ_AGE_OR_GAP = -15, // minSeqAge or minSeqLedgerGap conditions not met + // txMALFORMED = -16, // precondition is invalid + // txSOROBAN_INVALID = -17 // soroban-specific preconditions were not met + // }; + // + // =========================================================================== + xdr["enum"]("TransactionResultCode", { + txFeeBumpInnerSuccess: 1, + txSuccess: 0, + txFailed: -1, + txTooEarly: -2, + txTooLate: -3, + txMissingOperation: -4, + txBadSeq: -5, + txBadAuth: -6, + txInsufficientBalance: -7, + txNoAccount: -8, + txInsufficientFee: -9, + txBadAuthExtra: -10, + txInternalError: -11, + txNotSupported: -12, + txFeeBumpInnerFailed: -13, + txBadSponsorship: -14, + txBadMinSeqAgeOrGap: -15, + txMalformed: -16, + txSorobanInvalid: -17 + }); + + // === xdr source ============================================================ + // + // union switch (TransactionResultCode code) + // { + // // txFEE_BUMP_INNER_SUCCESS is not included + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // txFEE_BUMP_INNER_FAILED is not included + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // + // =========================================================================== + xdr.union("InnerTransactionResultResult", { + switchOn: xdr.lookup("TransactionResultCode"), + switchName: "code", + switches: [["txSuccess", "results"], ["txFailed", "results"], ["txTooEarly", xdr["void"]()], ["txTooLate", xdr["void"]()], ["txMissingOperation", xdr["void"]()], ["txBadSeq", xdr["void"]()], ["txBadAuth", xdr["void"]()], ["txInsufficientBalance", xdr["void"]()], ["txNoAccount", xdr["void"]()], ["txInsufficientFee", xdr["void"]()], ["txBadAuthExtra", xdr["void"]()], ["txInternalError", xdr["void"]()], ["txNotSupported", xdr["void"]()], ["txBadSponsorship", xdr["void"]()], ["txBadMinSeqAgeOrGap", xdr["void"]()], ["txMalformed", xdr["void"]()], ["txSorobanInvalid", xdr["void"]()]], + arms: { + results: xdr.varArray(xdr.lookup("OperationResult"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("InnerTransactionResultExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct InnerTransactionResult + // { + // // Always 0. Here for binary compatibility. + // int64 feeCharged; + // + // union switch (TransactionResultCode code) + // { + // // txFEE_BUMP_INNER_SUCCESS is not included + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // txFEE_BUMP_INNER_FAILED is not included + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // result; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("InnerTransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("InnerTransactionResultResult")], ["ext", xdr.lookup("InnerTransactionResultExt")]]); + + // === xdr source ============================================================ + // + // struct InnerTransactionResultPair + // { + // Hash transactionHash; // hash of the inner transaction + // InnerTransactionResult result; // result for the inner transaction + // }; + // + // =========================================================================== + xdr.struct("InnerTransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("InnerTransactionResult")]]); + + // === xdr source ============================================================ + // + // union switch (TransactionResultCode code) + // { + // case txFEE_BUMP_INNER_SUCCESS: + // case txFEE_BUMP_INNER_FAILED: + // InnerTransactionResultPair innerResultPair; + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // case txFEE_BUMP_INNER_FAILED: handled above + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionResultResult", { + switchOn: xdr.lookup("TransactionResultCode"), + switchName: "code", + switches: [["txFeeBumpInnerSuccess", "innerResultPair"], ["txFeeBumpInnerFailed", "innerResultPair"], ["txSuccess", "results"], ["txFailed", "results"], ["txTooEarly", xdr["void"]()], ["txTooLate", xdr["void"]()], ["txMissingOperation", xdr["void"]()], ["txBadSeq", xdr["void"]()], ["txBadAuth", xdr["void"]()], ["txInsufficientBalance", xdr["void"]()], ["txNoAccount", xdr["void"]()], ["txInsufficientFee", xdr["void"]()], ["txBadAuthExtra", xdr["void"]()], ["txInternalError", xdr["void"]()], ["txNotSupported", xdr["void"]()], ["txBadSponsorship", xdr["void"]()], ["txBadMinSeqAgeOrGap", xdr["void"]()], ["txMalformed", xdr["void"]()], ["txSorobanInvalid", xdr["void"]()]], + arms: { + innerResultPair: xdr.lookup("InnerTransactionResultPair"), + results: xdr.varArray(xdr.lookup("OperationResult"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionResultExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionResult + // { + // int64 feeCharged; // actual fee charged for the transaction + // + // union switch (TransactionResultCode code) + // { + // case txFEE_BUMP_INNER_SUCCESS: + // case txFEE_BUMP_INNER_FAILED: + // InnerTransactionResultPair innerResultPair; + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // case txFEE_BUMP_INNER_FAILED: handled above + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // result; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("TransactionResultResult")], ["ext", xdr.lookup("TransactionResultExt")]]); + + // === xdr source ============================================================ + // + // typedef opaque Hash[32]; + // + // =========================================================================== + xdr.typedef("Hash", xdr.opaque(32)); + + // === xdr source ============================================================ + // + // typedef opaque uint256[32]; + // + // =========================================================================== + xdr.typedef("Uint256", xdr.opaque(32)); + + // === xdr source ============================================================ + // + // typedef unsigned int uint32; + // + // =========================================================================== + xdr.typedef("Uint32", xdr.uint()); + + // === xdr source ============================================================ + // + // typedef int int32; + // + // =========================================================================== + xdr.typedef("Int32", xdr["int"]()); + + // === xdr source ============================================================ + // + // typedef unsigned hyper uint64; + // + // =========================================================================== + xdr.typedef("Uint64", xdr.uhyper()); + + // === xdr source ============================================================ + // + // typedef hyper int64; + // + // =========================================================================== + xdr.typedef("Int64", xdr.hyper()); + + // === xdr source ============================================================ + // + // typedef uint64 TimePoint; + // + // =========================================================================== + xdr.typedef("TimePoint", xdr.lookup("Uint64")); + + // === xdr source ============================================================ + // + // typedef uint64 Duration; + // + // =========================================================================== + xdr.typedef("Duration", xdr.lookup("Uint64")); + + // === xdr source ============================================================ + // + // union ExtensionPoint switch (int v) + // { + // case 0: + // void; + // }; + // + // =========================================================================== + xdr.union("ExtensionPoint", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum CryptoKeyType + // { + // KEY_TYPE_ED25519 = 0, + // KEY_TYPE_PRE_AUTH_TX = 1, + // KEY_TYPE_HASH_X = 2, + // KEY_TYPE_ED25519_SIGNED_PAYLOAD = 3, + // // MUXED enum values for supported type are derived from the enum values + // // above by ORing them with 0x100 + // KEY_TYPE_MUXED_ED25519 = 0x100 + // }; + // + // =========================================================================== + xdr["enum"]("CryptoKeyType", { + keyTypeEd25519: 0, + keyTypePreAuthTx: 1, + keyTypeHashX: 2, + keyTypeEd25519SignedPayload: 3, + keyTypeMuxedEd25519: 256 + }); + + // === xdr source ============================================================ + // + // enum PublicKeyType + // { + // PUBLIC_KEY_TYPE_ED25519 = KEY_TYPE_ED25519 + // }; + // + // =========================================================================== + xdr["enum"]("PublicKeyType", { + publicKeyTypeEd25519: 0 + }); + + // === xdr source ============================================================ + // + // enum SignerKeyType + // { + // SIGNER_KEY_TYPE_ED25519 = KEY_TYPE_ED25519, + // SIGNER_KEY_TYPE_PRE_AUTH_TX = KEY_TYPE_PRE_AUTH_TX, + // SIGNER_KEY_TYPE_HASH_X = KEY_TYPE_HASH_X, + // SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD = KEY_TYPE_ED25519_SIGNED_PAYLOAD + // }; + // + // =========================================================================== + xdr["enum"]("SignerKeyType", { + signerKeyTypeEd25519: 0, + signerKeyTypePreAuthTx: 1, + signerKeyTypeHashX: 2, + signerKeyTypeEd25519SignedPayload: 3 + }); + + // === xdr source ============================================================ + // + // union PublicKey switch (PublicKeyType type) + // { + // case PUBLIC_KEY_TYPE_ED25519: + // uint256 ed25519; + // }; + // + // =========================================================================== + xdr.union("PublicKey", { + switchOn: xdr.lookup("PublicKeyType"), + switchName: "type", + switches: [["publicKeyTypeEd25519", "ed25519"]], + arms: { + ed25519: xdr.lookup("Uint256") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // /* Public key that must sign the payload. */ + // uint256 ed25519; + // /* Payload to be raw signed by ed25519. */ + // opaque payload<64>; + // } + // + // =========================================================================== + xdr.struct("SignerKeyEd25519SignedPayload", [["ed25519", xdr.lookup("Uint256")], ["payload", xdr.varOpaque(64)]]); + + // === xdr source ============================================================ + // + // union SignerKey switch (SignerKeyType type) + // { + // case SIGNER_KEY_TYPE_ED25519: + // uint256 ed25519; + // case SIGNER_KEY_TYPE_PRE_AUTH_TX: + // /* SHA-256 Hash of TransactionSignaturePayload structure */ + // uint256 preAuthTx; + // case SIGNER_KEY_TYPE_HASH_X: + // /* Hash of random 256 bit preimage X */ + // uint256 hashX; + // case SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD: + // struct + // { + // /* Public key that must sign the payload. */ + // uint256 ed25519; + // /* Payload to be raw signed by ed25519. */ + // opaque payload<64>; + // } ed25519SignedPayload; + // }; + // + // =========================================================================== + xdr.union("SignerKey", { + switchOn: xdr.lookup("SignerKeyType"), + switchName: "type", + switches: [["signerKeyTypeEd25519", "ed25519"], ["signerKeyTypePreAuthTx", "preAuthTx"], ["signerKeyTypeHashX", "hashX"], ["signerKeyTypeEd25519SignedPayload", "ed25519SignedPayload"]], + arms: { + ed25519: xdr.lookup("Uint256"), + preAuthTx: xdr.lookup("Uint256"), + hashX: xdr.lookup("Uint256"), + ed25519SignedPayload: xdr.lookup("SignerKeyEd25519SignedPayload") + } + }); + + // === xdr source ============================================================ + // + // typedef opaque Signature<64>; + // + // =========================================================================== + xdr.typedef("Signature", xdr.varOpaque(64)); + + // === xdr source ============================================================ + // + // typedef opaque SignatureHint[4]; + // + // =========================================================================== + xdr.typedef("SignatureHint", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef PublicKey NodeID; + // + // =========================================================================== + xdr.typedef("NodeId", xdr.lookup("PublicKey")); + + // === xdr source ============================================================ + // + // typedef PublicKey AccountID; + // + // =========================================================================== + xdr.typedef("AccountId", xdr.lookup("PublicKey")); + + // === xdr source ============================================================ + // + // struct Curve25519Secret + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("Curve25519Secret", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct Curve25519Public + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("Curve25519Public", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct HmacSha256Key + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("HmacSha256Key", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct HmacSha256Mac + // { + // opaque mac[32]; + // }; + // + // =========================================================================== + xdr.struct("HmacSha256Mac", [["mac", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct ShortHashSeed + // { + // opaque seed[16]; + // }; + // + // =========================================================================== + xdr.struct("ShortHashSeed", [["seed", xdr.opaque(16)]]); + + // === xdr source ============================================================ + // + // enum BinaryFuseFilterType + // { + // BINARY_FUSE_FILTER_8_BIT = 0, + // BINARY_FUSE_FILTER_16_BIT = 1, + // BINARY_FUSE_FILTER_32_BIT = 2 + // }; + // + // =========================================================================== + xdr["enum"]("BinaryFuseFilterType", { + binaryFuseFilter8Bit: 0, + binaryFuseFilter16Bit: 1, + binaryFuseFilter32Bit: 2 + }); + + // === xdr source ============================================================ + // + // struct SerializedBinaryFuseFilter + // { + // BinaryFuseFilterType type; + // + // // Seed used to hash input to filter + // ShortHashSeed inputHashSeed; + // + // // Seed used for internal filter hash operations + // ShortHashSeed filterSeed; + // uint32 segmentLength; + // uint32 segementLengthMask; + // uint32 segmentCount; + // uint32 segmentCountLength; + // uint32 fingerprintLength; // Length in terms of element count, not bytes + // + // // Array of uint8_t, uint16_t, or uint32_t depending on filter type + // opaque fingerprints<>; + // }; + // + // =========================================================================== + xdr.struct("SerializedBinaryFuseFilter", [["type", xdr.lookup("BinaryFuseFilterType")], ["inputHashSeed", xdr.lookup("ShortHashSeed")], ["filterSeed", xdr.lookup("ShortHashSeed")], ["segmentLength", xdr.lookup("Uint32")], ["segementLengthMask", xdr.lookup("Uint32")], ["segmentCount", xdr.lookup("Uint32")], ["segmentCountLength", xdr.lookup("Uint32")], ["fingerprintLength", xdr.lookup("Uint32")], ["fingerprints", xdr.varOpaque()]]); + + // === xdr source ============================================================ + // + // enum SCValType + // { + // SCV_BOOL = 0, + // SCV_VOID = 1, + // SCV_ERROR = 2, + // + // // 32 bits is the smallest type in WASM or XDR; no need for u8/u16. + // SCV_U32 = 3, + // SCV_I32 = 4, + // + // // 64 bits is naturally supported by both WASM and XDR also. + // SCV_U64 = 5, + // SCV_I64 = 6, + // + // // Time-related u64 subtypes with their own functions and formatting. + // SCV_TIMEPOINT = 7, + // SCV_DURATION = 8, + // + // // 128 bits is naturally supported by Rust and we use it for Soroban + // // fixed-point arithmetic prices / balances / similar "quantities". These + // // are represented in XDR as a pair of 2 u64s. + // SCV_U128 = 9, + // SCV_I128 = 10, + // + // // 256 bits is the size of sha256 output, ed25519 keys, and the EVM machine + // // word, so for interop use we include this even though it requires a small + // // amount of Rust guest and/or host library code. + // SCV_U256 = 11, + // SCV_I256 = 12, + // + // // Bytes come in 3 flavors, 2 of which have meaningfully different + // // formatting and validity-checking / domain-restriction. + // SCV_BYTES = 13, + // SCV_STRING = 14, + // SCV_SYMBOL = 15, + // + // // Vecs and maps are just polymorphic containers of other ScVals. + // SCV_VEC = 16, + // SCV_MAP = 17, + // + // // Address is the universal identifier for contracts and classic + // // accounts. + // SCV_ADDRESS = 18, + // + // // The following are the internal SCVal variants that are not + // // exposed to the contracts. + // SCV_CONTRACT_INSTANCE = 19, + // + // // SCV_LEDGER_KEY_CONTRACT_INSTANCE and SCV_LEDGER_KEY_NONCE are unique + // // symbolic SCVals used as the key for ledger entries for a contract's + // // instance and an address' nonce, respectively. + // SCV_LEDGER_KEY_CONTRACT_INSTANCE = 20, + // SCV_LEDGER_KEY_NONCE = 21 + // }; + // + // =========================================================================== + xdr["enum"]("ScValType", { + scvBool: 0, + scvVoid: 1, + scvError: 2, + scvU32: 3, + scvI32: 4, + scvU64: 5, + scvI64: 6, + scvTimepoint: 7, + scvDuration: 8, + scvU128: 9, + scvI128: 10, + scvU256: 11, + scvI256: 12, + scvBytes: 13, + scvString: 14, + scvSymbol: 15, + scvVec: 16, + scvMap: 17, + scvAddress: 18, + scvContractInstance: 19, + scvLedgerKeyContractInstance: 20, + scvLedgerKeyNonce: 21 + }); + + // === xdr source ============================================================ + // + // enum SCErrorType + // { + // SCE_CONTRACT = 0, // Contract-specific, user-defined codes. + // SCE_WASM_VM = 1, // Errors while interpreting WASM bytecode. + // SCE_CONTEXT = 2, // Errors in the contract's host context. + // SCE_STORAGE = 3, // Errors accessing host storage. + // SCE_OBJECT = 4, // Errors working with host objects. + // SCE_CRYPTO = 5, // Errors in cryptographic operations. + // SCE_EVENTS = 6, // Errors while emitting events. + // SCE_BUDGET = 7, // Errors relating to budget limits. + // SCE_VALUE = 8, // Errors working with host values or SCVals. + // SCE_AUTH = 9 // Errors from the authentication subsystem. + // }; + // + // =========================================================================== + xdr["enum"]("ScErrorType", { + sceContract: 0, + sceWasmVm: 1, + sceContext: 2, + sceStorage: 3, + sceObject: 4, + sceCrypto: 5, + sceEvents: 6, + sceBudget: 7, + sceValue: 8, + sceAuth: 9 + }); + + // === xdr source ============================================================ + // + // enum SCErrorCode + // { + // SCEC_ARITH_DOMAIN = 0, // Some arithmetic was undefined (overflow, divide-by-zero). + // SCEC_INDEX_BOUNDS = 1, // Something was indexed beyond its bounds. + // SCEC_INVALID_INPUT = 2, // User provided some otherwise-bad data. + // SCEC_MISSING_VALUE = 3, // Some value was required but not provided. + // SCEC_EXISTING_VALUE = 4, // Some value was provided where not allowed. + // SCEC_EXCEEDED_LIMIT = 5, // Some arbitrary limit -- gas or otherwise -- was hit. + // SCEC_INVALID_ACTION = 6, // Data was valid but action requested was not. + // SCEC_INTERNAL_ERROR = 7, // The host detected an error in its own logic. + // SCEC_UNEXPECTED_TYPE = 8, // Some type wasn't as expected. + // SCEC_UNEXPECTED_SIZE = 9 // Something's size wasn't as expected. + // }; + // + // =========================================================================== + xdr["enum"]("ScErrorCode", { + scecArithDomain: 0, + scecIndexBounds: 1, + scecInvalidInput: 2, + scecMissingValue: 3, + scecExistingValue: 4, + scecExceededLimit: 5, + scecInvalidAction: 6, + scecInternalError: 7, + scecUnexpectedType: 8, + scecUnexpectedSize: 9 + }); + + // === xdr source ============================================================ + // + // union SCError switch (SCErrorType type) + // { + // case SCE_CONTRACT: + // uint32 contractCode; + // case SCE_WASM_VM: + // case SCE_CONTEXT: + // case SCE_STORAGE: + // case SCE_OBJECT: + // case SCE_CRYPTO: + // case SCE_EVENTS: + // case SCE_BUDGET: + // case SCE_VALUE: + // case SCE_AUTH: + // SCErrorCode code; + // }; + // + // =========================================================================== + xdr.union("ScError", { + switchOn: xdr.lookup("ScErrorType"), + switchName: "type", + switches: [["sceContract", "contractCode"], ["sceWasmVm", "code"], ["sceContext", "code"], ["sceStorage", "code"], ["sceObject", "code"], ["sceCrypto", "code"], ["sceEvents", "code"], ["sceBudget", "code"], ["sceValue", "code"], ["sceAuth", "code"]], + arms: { + contractCode: xdr.lookup("Uint32"), + code: xdr.lookup("ScErrorCode") + } + }); + + // === xdr source ============================================================ + // + // struct UInt128Parts { + // uint64 hi; + // uint64 lo; + // }; + // + // =========================================================================== + xdr.struct("UInt128Parts", [["hi", xdr.lookup("Uint64")], ["lo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct Int128Parts { + // int64 hi; + // uint64 lo; + // }; + // + // =========================================================================== + xdr.struct("Int128Parts", [["hi", xdr.lookup("Int64")], ["lo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct UInt256Parts { + // uint64 hi_hi; + // uint64 hi_lo; + // uint64 lo_hi; + // uint64 lo_lo; + // }; + // + // =========================================================================== + xdr.struct("UInt256Parts", [["hiHi", xdr.lookup("Uint64")], ["hiLo", xdr.lookup("Uint64")], ["loHi", xdr.lookup("Uint64")], ["loLo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct Int256Parts { + // int64 hi_hi; + // uint64 hi_lo; + // uint64 lo_hi; + // uint64 lo_lo; + // }; + // + // =========================================================================== + xdr.struct("Int256Parts", [["hiHi", xdr.lookup("Int64")], ["hiLo", xdr.lookup("Uint64")], ["loHi", xdr.lookup("Uint64")], ["loLo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // enum ContractExecutableType + // { + // CONTRACT_EXECUTABLE_WASM = 0, + // CONTRACT_EXECUTABLE_STELLAR_ASSET = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractExecutableType", { + contractExecutableWasm: 0, + contractExecutableStellarAsset: 1 + }); + + // === xdr source ============================================================ + // + // union ContractExecutable switch (ContractExecutableType type) + // { + // case CONTRACT_EXECUTABLE_WASM: + // Hash wasm_hash; + // case CONTRACT_EXECUTABLE_STELLAR_ASSET: + // void; + // }; + // + // =========================================================================== + xdr.union("ContractExecutable", { + switchOn: xdr.lookup("ContractExecutableType"), + switchName: "type", + switches: [["contractExecutableWasm", "wasmHash"], ["contractExecutableStellarAsset", xdr["void"]()]], + arms: { + wasmHash: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum SCAddressType + // { + // SC_ADDRESS_TYPE_ACCOUNT = 0, + // SC_ADDRESS_TYPE_CONTRACT = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ScAddressType", { + scAddressTypeAccount: 0, + scAddressTypeContract: 1 + }); + + // === xdr source ============================================================ + // + // union SCAddress switch (SCAddressType type) + // { + // case SC_ADDRESS_TYPE_ACCOUNT: + // AccountID accountId; + // case SC_ADDRESS_TYPE_CONTRACT: + // Hash contractId; + // }; + // + // =========================================================================== + xdr.union("ScAddress", { + switchOn: xdr.lookup("ScAddressType"), + switchName: "type", + switches: [["scAddressTypeAccount", "accountId"], ["scAddressTypeContract", "contractId"]], + arms: { + accountId: xdr.lookup("AccountId"), + contractId: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // const SCSYMBOL_LIMIT = 32; + // + // =========================================================================== + xdr["const"]("SCSYMBOL_LIMIT", 32); + + // === xdr source ============================================================ + // + // typedef SCVal SCVec<>; + // + // =========================================================================== + xdr.typedef("ScVec", xdr.varArray(xdr.lookup("ScVal"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef SCMapEntry SCMap<>; + // + // =========================================================================== + xdr.typedef("ScMap", xdr.varArray(xdr.lookup("ScMapEntry"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef opaque SCBytes<>; + // + // =========================================================================== + xdr.typedef("ScBytes", xdr.varOpaque()); + + // === xdr source ============================================================ + // + // typedef string SCString<>; + // + // =========================================================================== + xdr.typedef("ScString", xdr.string()); + + // === xdr source ============================================================ + // + // typedef string SCSymbol; + // + // =========================================================================== + xdr.typedef("ScSymbol", xdr.string(SCSYMBOL_LIMIT)); + + // === xdr source ============================================================ + // + // struct SCNonceKey { + // int64 nonce; + // }; + // + // =========================================================================== + xdr.struct("ScNonceKey", [["nonce", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct SCContractInstance { + // ContractExecutable executable; + // SCMap* storage; + // }; + // + // =========================================================================== + xdr.struct("ScContractInstance", [["executable", xdr.lookup("ContractExecutable")], ["storage", xdr.option(xdr.lookup("ScMap"))]]); + + // === xdr source ============================================================ + // + // union SCVal switch (SCValType type) + // { + // + // case SCV_BOOL: + // bool b; + // case SCV_VOID: + // void; + // case SCV_ERROR: + // SCError error; + // + // case SCV_U32: + // uint32 u32; + // case SCV_I32: + // int32 i32; + // + // case SCV_U64: + // uint64 u64; + // case SCV_I64: + // int64 i64; + // case SCV_TIMEPOINT: + // TimePoint timepoint; + // case SCV_DURATION: + // Duration duration; + // + // case SCV_U128: + // UInt128Parts u128; + // case SCV_I128: + // Int128Parts i128; + // + // case SCV_U256: + // UInt256Parts u256; + // case SCV_I256: + // Int256Parts i256; + // + // case SCV_BYTES: + // SCBytes bytes; + // case SCV_STRING: + // SCString str; + // case SCV_SYMBOL: + // SCSymbol sym; + // + // // Vec and Map are recursive so need to live + // // behind an option, due to xdrpp limitations. + // case SCV_VEC: + // SCVec *vec; + // case SCV_MAP: + // SCMap *map; + // + // case SCV_ADDRESS: + // SCAddress address; + // + // // Special SCVals reserved for system-constructed contract-data + // // ledger keys, not generally usable elsewhere. + // case SCV_LEDGER_KEY_CONTRACT_INSTANCE: + // void; + // case SCV_LEDGER_KEY_NONCE: + // SCNonceKey nonce_key; + // + // case SCV_CONTRACT_INSTANCE: + // SCContractInstance instance; + // }; + // + // =========================================================================== + xdr.union("ScVal", { + switchOn: xdr.lookup("ScValType"), + switchName: "type", + switches: [["scvBool", "b"], ["scvVoid", xdr["void"]()], ["scvError", "error"], ["scvU32", "u32"], ["scvI32", "i32"], ["scvU64", "u64"], ["scvI64", "i64"], ["scvTimepoint", "timepoint"], ["scvDuration", "duration"], ["scvU128", "u128"], ["scvI128", "i128"], ["scvU256", "u256"], ["scvI256", "i256"], ["scvBytes", "bytes"], ["scvString", "str"], ["scvSymbol", "sym"], ["scvVec", "vec"], ["scvMap", "map"], ["scvAddress", "address"], ["scvLedgerKeyContractInstance", xdr["void"]()], ["scvLedgerKeyNonce", "nonceKey"], ["scvContractInstance", "instance"]], + arms: { + b: xdr.bool(), + error: xdr.lookup("ScError"), + u32: xdr.lookup("Uint32"), + i32: xdr.lookup("Int32"), + u64: xdr.lookup("Uint64"), + i64: xdr.lookup("Int64"), + timepoint: xdr.lookup("TimePoint"), + duration: xdr.lookup("Duration"), + u128: xdr.lookup("UInt128Parts"), + i128: xdr.lookup("Int128Parts"), + u256: xdr.lookup("UInt256Parts"), + i256: xdr.lookup("Int256Parts"), + bytes: xdr.lookup("ScBytes"), + str: xdr.lookup("ScString"), + sym: xdr.lookup("ScSymbol"), + vec: xdr.option(xdr.lookup("ScVec")), + map: xdr.option(xdr.lookup("ScMap")), + address: xdr.lookup("ScAddress"), + nonceKey: xdr.lookup("ScNonceKey"), + instance: xdr.lookup("ScContractInstance") + } + }); + + // === xdr source ============================================================ + // + // struct SCMapEntry + // { + // SCVal key; + // SCVal val; + // }; + // + // =========================================================================== + xdr.struct("ScMapEntry", [["key", xdr.lookup("ScVal")], ["val", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // enum SCEnvMetaKind + // { + // SC_ENV_META_KIND_INTERFACE_VERSION = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ScEnvMetaKind", { + scEnvMetaKindInterfaceVersion: 0 + }); + + // === xdr source ============================================================ + // + // struct { + // uint32 protocol; + // uint32 preRelease; + // } + // + // =========================================================================== + xdr.struct("ScEnvMetaEntryInterfaceVersion", [["protocol", xdr.lookup("Uint32")], ["preRelease", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union SCEnvMetaEntry switch (SCEnvMetaKind kind) + // { + // case SC_ENV_META_KIND_INTERFACE_VERSION: + // struct { + // uint32 protocol; + // uint32 preRelease; + // } interfaceVersion; + // }; + // + // =========================================================================== + xdr.union("ScEnvMetaEntry", { + switchOn: xdr.lookup("ScEnvMetaKind"), + switchName: "kind", + switches: [["scEnvMetaKindInterfaceVersion", "interfaceVersion"]], + arms: { + interfaceVersion: xdr.lookup("ScEnvMetaEntryInterfaceVersion") + } + }); + + // === xdr source ============================================================ + // + // struct SCMetaV0 + // { + // string key<>; + // string val<>; + // }; + // + // =========================================================================== + xdr.struct("ScMetaV0", [["key", xdr.string()], ["val", xdr.string()]]); + + // === xdr source ============================================================ + // + // enum SCMetaKind + // { + // SC_META_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ScMetaKind", { + scMetaV0: 0 + }); + + // === xdr source ============================================================ + // + // union SCMetaEntry switch (SCMetaKind kind) + // { + // case SC_META_V0: + // SCMetaV0 v0; + // }; + // + // =========================================================================== + xdr.union("ScMetaEntry", { + switchOn: xdr.lookup("ScMetaKind"), + switchName: "kind", + switches: [["scMetaV0", "v0"]], + arms: { + v0: xdr.lookup("ScMetaV0") + } + }); + + // === xdr source ============================================================ + // + // const SC_SPEC_DOC_LIMIT = 1024; + // + // =========================================================================== + xdr["const"]("SC_SPEC_DOC_LIMIT", 1024); + + // === xdr source ============================================================ + // + // enum SCSpecType + // { + // SC_SPEC_TYPE_VAL = 0, + // + // // Types with no parameters. + // SC_SPEC_TYPE_BOOL = 1, + // SC_SPEC_TYPE_VOID = 2, + // SC_SPEC_TYPE_ERROR = 3, + // SC_SPEC_TYPE_U32 = 4, + // SC_SPEC_TYPE_I32 = 5, + // SC_SPEC_TYPE_U64 = 6, + // SC_SPEC_TYPE_I64 = 7, + // SC_SPEC_TYPE_TIMEPOINT = 8, + // SC_SPEC_TYPE_DURATION = 9, + // SC_SPEC_TYPE_U128 = 10, + // SC_SPEC_TYPE_I128 = 11, + // SC_SPEC_TYPE_U256 = 12, + // SC_SPEC_TYPE_I256 = 13, + // SC_SPEC_TYPE_BYTES = 14, + // SC_SPEC_TYPE_STRING = 16, + // SC_SPEC_TYPE_SYMBOL = 17, + // SC_SPEC_TYPE_ADDRESS = 19, + // + // // Types with parameters. + // SC_SPEC_TYPE_OPTION = 1000, + // SC_SPEC_TYPE_RESULT = 1001, + // SC_SPEC_TYPE_VEC = 1002, + // SC_SPEC_TYPE_MAP = 1004, + // SC_SPEC_TYPE_TUPLE = 1005, + // SC_SPEC_TYPE_BYTES_N = 1006, + // + // // User defined types. + // SC_SPEC_TYPE_UDT = 2000 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecType", { + scSpecTypeVal: 0, + scSpecTypeBool: 1, + scSpecTypeVoid: 2, + scSpecTypeError: 3, + scSpecTypeU32: 4, + scSpecTypeI32: 5, + scSpecTypeU64: 6, + scSpecTypeI64: 7, + scSpecTypeTimepoint: 8, + scSpecTypeDuration: 9, + scSpecTypeU128: 10, + scSpecTypeI128: 11, + scSpecTypeU256: 12, + scSpecTypeI256: 13, + scSpecTypeBytes: 14, + scSpecTypeString: 16, + scSpecTypeSymbol: 17, + scSpecTypeAddress: 19, + scSpecTypeOption: 1000, + scSpecTypeResult: 1001, + scSpecTypeVec: 1002, + scSpecTypeMap: 1004, + scSpecTypeTuple: 1005, + scSpecTypeBytesN: 1006, + scSpecTypeUdt: 2000 + }); + + // === xdr source ============================================================ + // + // struct SCSpecTypeOption + // { + // SCSpecTypeDef valueType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeOption", [["valueType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeResult + // { + // SCSpecTypeDef okType; + // SCSpecTypeDef errorType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeResult", [["okType", xdr.lookup("ScSpecTypeDef")], ["errorType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeVec + // { + // SCSpecTypeDef elementType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeVec", [["elementType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeMap + // { + // SCSpecTypeDef keyType; + // SCSpecTypeDef valueType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeMap", [["keyType", xdr.lookup("ScSpecTypeDef")], ["valueType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeTuple + // { + // SCSpecTypeDef valueTypes<12>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeTuple", [["valueTypes", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 12)]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeBytesN + // { + // uint32 n; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeBytesN", [["n", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeUDT + // { + // string name<60>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeUdt", [["name", xdr.string(60)]]); + + // === xdr source ============================================================ + // + // union SCSpecTypeDef switch (SCSpecType type) + // { + // case SC_SPEC_TYPE_VAL: + // case SC_SPEC_TYPE_BOOL: + // case SC_SPEC_TYPE_VOID: + // case SC_SPEC_TYPE_ERROR: + // case SC_SPEC_TYPE_U32: + // case SC_SPEC_TYPE_I32: + // case SC_SPEC_TYPE_U64: + // case SC_SPEC_TYPE_I64: + // case SC_SPEC_TYPE_TIMEPOINT: + // case SC_SPEC_TYPE_DURATION: + // case SC_SPEC_TYPE_U128: + // case SC_SPEC_TYPE_I128: + // case SC_SPEC_TYPE_U256: + // case SC_SPEC_TYPE_I256: + // case SC_SPEC_TYPE_BYTES: + // case SC_SPEC_TYPE_STRING: + // case SC_SPEC_TYPE_SYMBOL: + // case SC_SPEC_TYPE_ADDRESS: + // void; + // case SC_SPEC_TYPE_OPTION: + // SCSpecTypeOption option; + // case SC_SPEC_TYPE_RESULT: + // SCSpecTypeResult result; + // case SC_SPEC_TYPE_VEC: + // SCSpecTypeVec vec; + // case SC_SPEC_TYPE_MAP: + // SCSpecTypeMap map; + // case SC_SPEC_TYPE_TUPLE: + // SCSpecTypeTuple tuple; + // case SC_SPEC_TYPE_BYTES_N: + // SCSpecTypeBytesN bytesN; + // case SC_SPEC_TYPE_UDT: + // SCSpecTypeUDT udt; + // }; + // + // =========================================================================== + xdr.union("ScSpecTypeDef", { + switchOn: xdr.lookup("ScSpecType"), + switchName: "type", + switches: [["scSpecTypeVal", xdr["void"]()], ["scSpecTypeBool", xdr["void"]()], ["scSpecTypeVoid", xdr["void"]()], ["scSpecTypeError", xdr["void"]()], ["scSpecTypeU32", xdr["void"]()], ["scSpecTypeI32", xdr["void"]()], ["scSpecTypeU64", xdr["void"]()], ["scSpecTypeI64", xdr["void"]()], ["scSpecTypeTimepoint", xdr["void"]()], ["scSpecTypeDuration", xdr["void"]()], ["scSpecTypeU128", xdr["void"]()], ["scSpecTypeI128", xdr["void"]()], ["scSpecTypeU256", xdr["void"]()], ["scSpecTypeI256", xdr["void"]()], ["scSpecTypeBytes", xdr["void"]()], ["scSpecTypeString", xdr["void"]()], ["scSpecTypeSymbol", xdr["void"]()], ["scSpecTypeAddress", xdr["void"]()], ["scSpecTypeOption", "option"], ["scSpecTypeResult", "result"], ["scSpecTypeVec", "vec"], ["scSpecTypeMap", "map"], ["scSpecTypeTuple", "tuple"], ["scSpecTypeBytesN", "bytesN"], ["scSpecTypeUdt", "udt"]], + arms: { + option: xdr.lookup("ScSpecTypeOption"), + result: xdr.lookup("ScSpecTypeResult"), + vec: xdr.lookup("ScSpecTypeVec"), + map: xdr.lookup("ScSpecTypeMap"), + tuple: xdr.lookup("ScSpecTypeTuple"), + bytesN: xdr.lookup("ScSpecTypeBytesN"), + udt: xdr.lookup("ScSpecTypeUdt") + } + }); + + // === xdr source ============================================================ + // + // struct SCSpecUDTStructFieldV0 + // { + // string doc; + // string name<30>; + // SCSpecTypeDef type; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtStructFieldV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(30)], ["type", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTStructV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTStructFieldV0 fields<40>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtStructV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["fields", xdr.varArray(xdr.lookup("ScSpecUdtStructFieldV0"), 40)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionCaseVoidV0 + // { + // string doc; + // string name<60>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionCaseVoidV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionCaseTupleV0 + // { + // string doc; + // string name<60>; + // SCSpecTypeDef type<12>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionCaseTupleV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["type", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 12)]]); + + // === xdr source ============================================================ + // + // enum SCSpecUDTUnionCaseV0Kind + // { + // SC_SPEC_UDT_UNION_CASE_VOID_V0 = 0, + // SC_SPEC_UDT_UNION_CASE_TUPLE_V0 = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecUdtUnionCaseV0Kind", { + scSpecUdtUnionCaseVoidV0: 0, + scSpecUdtUnionCaseTupleV0: 1 + }); + + // === xdr source ============================================================ + // + // union SCSpecUDTUnionCaseV0 switch (SCSpecUDTUnionCaseV0Kind kind) + // { + // case SC_SPEC_UDT_UNION_CASE_VOID_V0: + // SCSpecUDTUnionCaseVoidV0 voidCase; + // case SC_SPEC_UDT_UNION_CASE_TUPLE_V0: + // SCSpecUDTUnionCaseTupleV0 tupleCase; + // }; + // + // =========================================================================== + xdr.union("ScSpecUdtUnionCaseV0", { + switchOn: xdr.lookup("ScSpecUdtUnionCaseV0Kind"), + switchName: "kind", + switches: [["scSpecUdtUnionCaseVoidV0", "voidCase"], ["scSpecUdtUnionCaseTupleV0", "tupleCase"]], + arms: { + voidCase: xdr.lookup("ScSpecUdtUnionCaseVoidV0"), + tupleCase: xdr.lookup("ScSpecUdtUnionCaseTupleV0") + } + }); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTUnionCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtUnionCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTEnumCaseV0 + // { + // string doc; + // string name<60>; + // uint32 value; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtEnumCaseV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["value", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTEnumV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTEnumCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtEnumV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtEnumCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTErrorEnumCaseV0 + // { + // string doc; + // string name<60>; + // uint32 value; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtErrorEnumCaseV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["value", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTErrorEnumV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTErrorEnumCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtErrorEnumV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtErrorEnumCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecFunctionInputV0 + // { + // string doc; + // string name<30>; + // SCSpecTypeDef type; + // }; + // + // =========================================================================== + xdr.struct("ScSpecFunctionInputV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(30)], ["type", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecFunctionV0 + // { + // string doc; + // SCSymbol name; + // SCSpecFunctionInputV0 inputs<10>; + // SCSpecTypeDef outputs<1>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecFunctionV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.lookup("ScSymbol")], ["inputs", xdr.varArray(xdr.lookup("ScSpecFunctionInputV0"), 10)], ["outputs", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 1)]]); + + // === xdr source ============================================================ + // + // enum SCSpecEntryKind + // { + // SC_SPEC_ENTRY_FUNCTION_V0 = 0, + // SC_SPEC_ENTRY_UDT_STRUCT_V0 = 1, + // SC_SPEC_ENTRY_UDT_UNION_V0 = 2, + // SC_SPEC_ENTRY_UDT_ENUM_V0 = 3, + // SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0 = 4 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecEntryKind", { + scSpecEntryFunctionV0: 0, + scSpecEntryUdtStructV0: 1, + scSpecEntryUdtUnionV0: 2, + scSpecEntryUdtEnumV0: 3, + scSpecEntryUdtErrorEnumV0: 4 + }); + + // === xdr source ============================================================ + // + // union SCSpecEntry switch (SCSpecEntryKind kind) + // { + // case SC_SPEC_ENTRY_FUNCTION_V0: + // SCSpecFunctionV0 functionV0; + // case SC_SPEC_ENTRY_UDT_STRUCT_V0: + // SCSpecUDTStructV0 udtStructV0; + // case SC_SPEC_ENTRY_UDT_UNION_V0: + // SCSpecUDTUnionV0 udtUnionV0; + // case SC_SPEC_ENTRY_UDT_ENUM_V0: + // SCSpecUDTEnumV0 udtEnumV0; + // case SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0: + // SCSpecUDTErrorEnumV0 udtErrorEnumV0; + // }; + // + // =========================================================================== + xdr.union("ScSpecEntry", { + switchOn: xdr.lookup("ScSpecEntryKind"), + switchName: "kind", + switches: [["scSpecEntryFunctionV0", "functionV0"], ["scSpecEntryUdtStructV0", "udtStructV0"], ["scSpecEntryUdtUnionV0", "udtUnionV0"], ["scSpecEntryUdtEnumV0", "udtEnumV0"], ["scSpecEntryUdtErrorEnumV0", "udtErrorEnumV0"]], + arms: { + functionV0: xdr.lookup("ScSpecFunctionV0"), + udtStructV0: xdr.lookup("ScSpecUdtStructV0"), + udtUnionV0: xdr.lookup("ScSpecUdtUnionV0"), + udtEnumV0: xdr.lookup("ScSpecUdtEnumV0"), + udtErrorEnumV0: xdr.lookup("ScSpecUdtErrorEnumV0") + } + }); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractExecutionLanesV0 + // { + // // maximum number of Soroban transactions per ledger + // uint32 ledgerMaxTxCount; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractExecutionLanesV0", [["ledgerMaxTxCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractComputeV0 + // { + // // Maximum instructions per ledger + // int64 ledgerMaxInstructions; + // // Maximum instructions per transaction + // int64 txMaxInstructions; + // // Cost of 10000 instructions + // int64 feeRatePerInstructionsIncrement; + // + // // Memory limit per transaction. Unlike instructions, there is no fee + // // for memory, just the limit. + // uint32 txMemoryLimit; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractComputeV0", [["ledgerMaxInstructions", xdr.lookup("Int64")], ["txMaxInstructions", xdr.lookup("Int64")], ["feeRatePerInstructionsIncrement", xdr.lookup("Int64")], ["txMemoryLimit", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractLedgerCostV0 + // { + // // Maximum number of ledger entry read operations per ledger + // uint32 ledgerMaxReadLedgerEntries; + // // Maximum number of bytes that can be read per ledger + // uint32 ledgerMaxReadBytes; + // // Maximum number of ledger entry write operations per ledger + // uint32 ledgerMaxWriteLedgerEntries; + // // Maximum number of bytes that can be written per ledger + // uint32 ledgerMaxWriteBytes; + // + // // Maximum number of ledger entry read operations per transaction + // uint32 txMaxReadLedgerEntries; + // // Maximum number of bytes that can be read per transaction + // uint32 txMaxReadBytes; + // // Maximum number of ledger entry write operations per transaction + // uint32 txMaxWriteLedgerEntries; + // // Maximum number of bytes that can be written per transaction + // uint32 txMaxWriteBytes; + // + // int64 feeReadLedgerEntry; // Fee per ledger entry read + // int64 feeWriteLedgerEntry; // Fee per ledger entry write + // + // int64 feeRead1KB; // Fee for reading 1KB + // + // // The following parameters determine the write fee per 1KB. + // // Write fee grows linearly until bucket list reaches this size + // int64 bucketListTargetSizeBytes; + // // Fee per 1KB write when the bucket list is empty + // int64 writeFee1KBBucketListLow; + // // Fee per 1KB write when the bucket list has reached `bucketListTargetSizeBytes` + // int64 writeFee1KBBucketListHigh; + // // Write fee multiplier for any additional data past the first `bucketListTargetSizeBytes` + // uint32 bucketListWriteFeeGrowthFactor; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractLedgerCostV0", [["ledgerMaxReadLedgerEntries", xdr.lookup("Uint32")], ["ledgerMaxReadBytes", xdr.lookup("Uint32")], ["ledgerMaxWriteLedgerEntries", xdr.lookup("Uint32")], ["ledgerMaxWriteBytes", xdr.lookup("Uint32")], ["txMaxReadLedgerEntries", xdr.lookup("Uint32")], ["txMaxReadBytes", xdr.lookup("Uint32")], ["txMaxWriteLedgerEntries", xdr.lookup("Uint32")], ["txMaxWriteBytes", xdr.lookup("Uint32")], ["feeReadLedgerEntry", xdr.lookup("Int64")], ["feeWriteLedgerEntry", xdr.lookup("Int64")], ["feeRead1Kb", xdr.lookup("Int64")], ["bucketListTargetSizeBytes", xdr.lookup("Int64")], ["writeFee1KbBucketListLow", xdr.lookup("Int64")], ["writeFee1KbBucketListHigh", xdr.lookup("Int64")], ["bucketListWriteFeeGrowthFactor", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractHistoricalDataV0 + // { + // int64 feeHistorical1KB; // Fee for storing 1KB in archives + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractHistoricalDataV0", [["feeHistorical1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractEventsV0 + // { + // // Maximum size of events that a contract call can emit. + // uint32 txMaxContractEventsSizeBytes; + // // Fee for generating 1KB of contract events. + // int64 feeContractEvents1KB; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractEventsV0", [["txMaxContractEventsSizeBytes", xdr.lookup("Uint32")], ["feeContractEvents1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractBandwidthV0 + // { + // // Maximum sum of all transaction sizes in the ledger in bytes + // uint32 ledgerMaxTxsSizeBytes; + // // Maximum size in bytes for a transaction + // uint32 txMaxSizeBytes; + // + // // Fee for 1 KB of transaction size + // int64 feeTxSize1KB; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractBandwidthV0", [["ledgerMaxTxsSizeBytes", xdr.lookup("Uint32")], ["txMaxSizeBytes", xdr.lookup("Uint32")], ["feeTxSize1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum ContractCostType { + // // Cost of running 1 wasm instruction + // WasmInsnExec = 0, + // // Cost of allocating a slice of memory (in bytes) + // MemAlloc = 1, + // // Cost of copying a slice of bytes into a pre-allocated memory + // MemCpy = 2, + // // Cost of comparing two slices of memory + // MemCmp = 3, + // // Cost of a host function dispatch, not including the actual work done by + // // the function nor the cost of VM invocation machinary + // DispatchHostFunction = 4, + // // Cost of visiting a host object from the host object storage. Exists to + // // make sure some baseline cost coverage, i.e. repeatly visiting objects + // // by the guest will always incur some charges. + // VisitObject = 5, + // // Cost of serializing an xdr object to bytes + // ValSer = 6, + // // Cost of deserializing an xdr object from bytes + // ValDeser = 7, + // // Cost of computing the sha256 hash from bytes + // ComputeSha256Hash = 8, + // // Cost of computing the ed25519 pubkey from bytes + // ComputeEd25519PubKey = 9, + // // Cost of verifying ed25519 signature of a payload. + // VerifyEd25519Sig = 10, + // // Cost of instantiation a VM from wasm bytes code. + // VmInstantiation = 11, + // // Cost of instantiation a VM from a cached state. + // VmCachedInstantiation = 12, + // // Cost of invoking a function on the VM. If the function is a host function, + // // additional cost will be covered by `DispatchHostFunction`. + // InvokeVmFunction = 13, + // // Cost of computing a keccak256 hash from bytes. + // ComputeKeccak256Hash = 14, + // // Cost of decoding an ECDSA signature computed from a 256-bit prime modulus + // // curve (e.g. secp256k1 and secp256r1) + // DecodeEcdsaCurve256Sig = 15, + // // Cost of recovering an ECDSA secp256k1 key from a signature. + // RecoverEcdsaSecp256k1Key = 16, + // // Cost of int256 addition (`+`) and subtraction (`-`) operations + // Int256AddSub = 17, + // // Cost of int256 multiplication (`*`) operation + // Int256Mul = 18, + // // Cost of int256 division (`/`) operation + // Int256Div = 19, + // // Cost of int256 power (`exp`) operation + // Int256Pow = 20, + // // Cost of int256 shift (`shl`, `shr`) operation + // Int256Shift = 21, + // // Cost of drawing random bytes using a ChaCha20 PRNG + // ChaCha20DrawBytes = 22, + // + // // Cost of parsing wasm bytes that only encode instructions. + // ParseWasmInstructions = 23, + // // Cost of parsing a known number of wasm functions. + // ParseWasmFunctions = 24, + // // Cost of parsing a known number of wasm globals. + // ParseWasmGlobals = 25, + // // Cost of parsing a known number of wasm table entries. + // ParseWasmTableEntries = 26, + // // Cost of parsing a known number of wasm types. + // ParseWasmTypes = 27, + // // Cost of parsing a known number of wasm data segments. + // ParseWasmDataSegments = 28, + // // Cost of parsing a known number of wasm element segments. + // ParseWasmElemSegments = 29, + // // Cost of parsing a known number of wasm imports. + // ParseWasmImports = 30, + // // Cost of parsing a known number of wasm exports. + // ParseWasmExports = 31, + // // Cost of parsing a known number of data segment bytes. + // ParseWasmDataSegmentBytes = 32, + // + // // Cost of instantiating wasm bytes that only encode instructions. + // InstantiateWasmInstructions = 33, + // // Cost of instantiating a known number of wasm functions. + // InstantiateWasmFunctions = 34, + // // Cost of instantiating a known number of wasm globals. + // InstantiateWasmGlobals = 35, + // // Cost of instantiating a known number of wasm table entries. + // InstantiateWasmTableEntries = 36, + // // Cost of instantiating a known number of wasm types. + // InstantiateWasmTypes = 37, + // // Cost of instantiating a known number of wasm data segments. + // InstantiateWasmDataSegments = 38, + // // Cost of instantiating a known number of wasm element segments. + // InstantiateWasmElemSegments = 39, + // // Cost of instantiating a known number of wasm imports. + // InstantiateWasmImports = 40, + // // Cost of instantiating a known number of wasm exports. + // InstantiateWasmExports = 41, + // // Cost of instantiating a known number of data segment bytes. + // InstantiateWasmDataSegmentBytes = 42, + // + // // Cost of decoding a bytes array representing an uncompressed SEC-1 encoded + // // point on a 256-bit elliptic curve + // Sec1DecodePointUncompressed = 43, + // // Cost of verifying an ECDSA Secp256r1 signature + // VerifyEcdsaSecp256r1Sig = 44, + // + // // Cost of encoding a BLS12-381 Fp (base field element) + // Bls12381EncodeFp = 45, + // // Cost of decoding a BLS12-381 Fp (base field element) + // Bls12381DecodeFp = 46, + // // Cost of checking a G1 point lies on the curve + // Bls12381G1CheckPointOnCurve = 47, + // // Cost of checking a G1 point belongs to the correct subgroup + // Bls12381G1CheckPointInSubgroup = 48, + // // Cost of checking a G2 point lies on the curve + // Bls12381G2CheckPointOnCurve = 49, + // // Cost of checking a G2 point belongs to the correct subgroup + // Bls12381G2CheckPointInSubgroup = 50, + // // Cost of converting a BLS12-381 G1 point from projective to affine coordinates + // Bls12381G1ProjectiveToAffine = 51, + // // Cost of converting a BLS12-381 G2 point from projective to affine coordinates + // Bls12381G2ProjectiveToAffine = 52, + // // Cost of performing BLS12-381 G1 point addition + // Bls12381G1Add = 53, + // // Cost of performing BLS12-381 G1 scalar multiplication + // Bls12381G1Mul = 54, + // // Cost of performing BLS12-381 G1 multi-scalar multiplication (MSM) + // Bls12381G1Msm = 55, + // // Cost of mapping a BLS12-381 Fp field element to a G1 point + // Bls12381MapFpToG1 = 56, + // // Cost of hashing to a BLS12-381 G1 point + // Bls12381HashToG1 = 57, + // // Cost of performing BLS12-381 G2 point addition + // Bls12381G2Add = 58, + // // Cost of performing BLS12-381 G2 scalar multiplication + // Bls12381G2Mul = 59, + // // Cost of performing BLS12-381 G2 multi-scalar multiplication (MSM) + // Bls12381G2Msm = 60, + // // Cost of mapping a BLS12-381 Fp2 field element to a G2 point + // Bls12381MapFp2ToG2 = 61, + // // Cost of hashing to a BLS12-381 G2 point + // Bls12381HashToG2 = 62, + // // Cost of performing BLS12-381 pairing operation + // Bls12381Pairing = 63, + // // Cost of converting a BLS12-381 scalar element from U256 + // Bls12381FrFromU256 = 64, + // // Cost of converting a BLS12-381 scalar element to U256 + // Bls12381FrToU256 = 65, + // // Cost of performing BLS12-381 scalar element addition/subtraction + // Bls12381FrAddSub = 66, + // // Cost of performing BLS12-381 scalar element multiplication + // Bls12381FrMul = 67, + // // Cost of performing BLS12-381 scalar element exponentiation + // Bls12381FrPow = 68, + // // Cost of performing BLS12-381 scalar element inversion + // Bls12381FrInv = 69 + // }; + // + // =========================================================================== + xdr["enum"]("ContractCostType", { + wasmInsnExec: 0, + memAlloc: 1, + memCpy: 2, + memCmp: 3, + dispatchHostFunction: 4, + visitObject: 5, + valSer: 6, + valDeser: 7, + computeSha256Hash: 8, + computeEd25519PubKey: 9, + verifyEd25519Sig: 10, + vmInstantiation: 11, + vmCachedInstantiation: 12, + invokeVmFunction: 13, + computeKeccak256Hash: 14, + decodeEcdsaCurve256Sig: 15, + recoverEcdsaSecp256k1Key: 16, + int256AddSub: 17, + int256Mul: 18, + int256Div: 19, + int256Pow: 20, + int256Shift: 21, + chaCha20DrawBytes: 22, + parseWasmInstructions: 23, + parseWasmFunctions: 24, + parseWasmGlobals: 25, + parseWasmTableEntries: 26, + parseWasmTypes: 27, + parseWasmDataSegments: 28, + parseWasmElemSegments: 29, + parseWasmImports: 30, + parseWasmExports: 31, + parseWasmDataSegmentBytes: 32, + instantiateWasmInstructions: 33, + instantiateWasmFunctions: 34, + instantiateWasmGlobals: 35, + instantiateWasmTableEntries: 36, + instantiateWasmTypes: 37, + instantiateWasmDataSegments: 38, + instantiateWasmElemSegments: 39, + instantiateWasmImports: 40, + instantiateWasmExports: 41, + instantiateWasmDataSegmentBytes: 42, + sec1DecodePointUncompressed: 43, + verifyEcdsaSecp256r1Sig: 44, + bls12381EncodeFp: 45, + bls12381DecodeFp: 46, + bls12381G1CheckPointOnCurve: 47, + bls12381G1CheckPointInSubgroup: 48, + bls12381G2CheckPointOnCurve: 49, + bls12381G2CheckPointInSubgroup: 50, + bls12381G1ProjectiveToAffine: 51, + bls12381G2ProjectiveToAffine: 52, + bls12381G1Add: 53, + bls12381G1Mul: 54, + bls12381G1Msm: 55, + bls12381MapFpToG1: 56, + bls12381HashToG1: 57, + bls12381G2Add: 58, + bls12381G2Mul: 59, + bls12381G2Msm: 60, + bls12381MapFp2ToG2: 61, + bls12381HashToG2: 62, + bls12381Pairing: 63, + bls12381FrFromU256: 64, + bls12381FrToU256: 65, + bls12381FrAddSub: 66, + bls12381FrMul: 67, + bls12381FrPow: 68, + bls12381FrInv: 69 + }); + + // === xdr source ============================================================ + // + // struct ContractCostParamEntry { + // // use `ext` to add more terms (e.g. higher order polynomials) in the future + // ExtensionPoint ext; + // + // int64 constTerm; + // int64 linearTerm; + // }; + // + // =========================================================================== + xdr.struct("ContractCostParamEntry", [["ext", xdr.lookup("ExtensionPoint")], ["constTerm", xdr.lookup("Int64")], ["linearTerm", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct StateArchivalSettings { + // uint32 maxEntryTTL; + // uint32 minTemporaryTTL; + // uint32 minPersistentTTL; + // + // // rent_fee = wfee_rate_average / rent_rate_denominator_for_type + // int64 persistentRentRateDenominator; + // int64 tempRentRateDenominator; + // + // // max number of entries that emit archival meta in a single ledger + // uint32 maxEntriesToArchive; + // + // // Number of snapshots to use when calculating average BucketList size + // uint32 bucketListSizeWindowSampleSize; + // + // // How often to sample the BucketList size for the average, in ledgers + // uint32 bucketListWindowSamplePeriod; + // + // // Maximum number of bytes that we scan for eviction per ledger + // uint32 evictionScanSize; + // + // // Lowest BucketList level to be scanned to evict entries + // uint32 startingEvictionScanLevel; + // }; + // + // =========================================================================== + xdr.struct("StateArchivalSettings", [["maxEntryTtl", xdr.lookup("Uint32")], ["minTemporaryTtl", xdr.lookup("Uint32")], ["minPersistentTtl", xdr.lookup("Uint32")], ["persistentRentRateDenominator", xdr.lookup("Int64")], ["tempRentRateDenominator", xdr.lookup("Int64")], ["maxEntriesToArchive", xdr.lookup("Uint32")], ["bucketListSizeWindowSampleSize", xdr.lookup("Uint32")], ["bucketListWindowSamplePeriod", xdr.lookup("Uint32")], ["evictionScanSize", xdr.lookup("Uint32")], ["startingEvictionScanLevel", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct EvictionIterator { + // uint32 bucketListLevel; + // bool isCurrBucket; + // uint64 bucketFileOffset; + // }; + // + // =========================================================================== + xdr.struct("EvictionIterator", [["bucketListLevel", xdr.lookup("Uint32")], ["isCurrBucket", xdr.bool()], ["bucketFileOffset", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // const CONTRACT_COST_COUNT_LIMIT = 1024; + // + // =========================================================================== + xdr["const"]("CONTRACT_COST_COUNT_LIMIT", 1024); + + // === xdr source ============================================================ + // + // typedef ContractCostParamEntry ContractCostParams; + // + // =========================================================================== + xdr.typedef("ContractCostParams", xdr.varArray(xdr.lookup("ContractCostParamEntry"), xdr.lookup("CONTRACT_COST_COUNT_LIMIT"))); + + // === xdr source ============================================================ + // + // enum ConfigSettingID + // { + // CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES = 0, + // CONFIG_SETTING_CONTRACT_COMPUTE_V0 = 1, + // CONFIG_SETTING_CONTRACT_LEDGER_COST_V0 = 2, + // CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0 = 3, + // CONFIG_SETTING_CONTRACT_EVENTS_V0 = 4, + // CONFIG_SETTING_CONTRACT_BANDWIDTH_V0 = 5, + // CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS = 6, + // CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7, + // CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8, + // CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9, + // CONFIG_SETTING_STATE_ARCHIVAL = 10, + // CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11, + // CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW = 12, + // CONFIG_SETTING_EVICTION_ITERATOR = 13 + // }; + // + // =========================================================================== + xdr["enum"]("ConfigSettingId", { + configSettingContractMaxSizeBytes: 0, + configSettingContractComputeV0: 1, + configSettingContractLedgerCostV0: 2, + configSettingContractHistoricalDataV0: 3, + configSettingContractEventsV0: 4, + configSettingContractBandwidthV0: 5, + configSettingContractCostParamsCpuInstructions: 6, + configSettingContractCostParamsMemoryBytes: 7, + configSettingContractDataKeySizeBytes: 8, + configSettingContractDataEntrySizeBytes: 9, + configSettingStateArchival: 10, + configSettingContractExecutionLanes: 11, + configSettingBucketlistSizeWindow: 12, + configSettingEvictionIterator: 13 + }); + + // === xdr source ============================================================ + // + // union ConfigSettingEntry switch (ConfigSettingID configSettingID) + // { + // case CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES: + // uint32 contractMaxSizeBytes; + // case CONFIG_SETTING_CONTRACT_COMPUTE_V0: + // ConfigSettingContractComputeV0 contractCompute; + // case CONFIG_SETTING_CONTRACT_LEDGER_COST_V0: + // ConfigSettingContractLedgerCostV0 contractLedgerCost; + // case CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0: + // ConfigSettingContractHistoricalDataV0 contractHistoricalData; + // case CONFIG_SETTING_CONTRACT_EVENTS_V0: + // ConfigSettingContractEventsV0 contractEvents; + // case CONFIG_SETTING_CONTRACT_BANDWIDTH_V0: + // ConfigSettingContractBandwidthV0 contractBandwidth; + // case CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS: + // ContractCostParams contractCostParamsCpuInsns; + // case CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES: + // ContractCostParams contractCostParamsMemBytes; + // case CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES: + // uint32 contractDataKeySizeBytes; + // case CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES: + // uint32 contractDataEntrySizeBytes; + // case CONFIG_SETTING_STATE_ARCHIVAL: + // StateArchivalSettings stateArchivalSettings; + // case CONFIG_SETTING_CONTRACT_EXECUTION_LANES: + // ConfigSettingContractExecutionLanesV0 contractExecutionLanes; + // case CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW: + // uint64 bucketListSizeWindow<>; + // case CONFIG_SETTING_EVICTION_ITERATOR: + // EvictionIterator evictionIterator; + // }; + // + // =========================================================================== + xdr.union("ConfigSettingEntry", { + switchOn: xdr.lookup("ConfigSettingId"), + switchName: "configSettingId", + switches: [["configSettingContractMaxSizeBytes", "contractMaxSizeBytes"], ["configSettingContractComputeV0", "contractCompute"], ["configSettingContractLedgerCostV0", "contractLedgerCost"], ["configSettingContractHistoricalDataV0", "contractHistoricalData"], ["configSettingContractEventsV0", "contractEvents"], ["configSettingContractBandwidthV0", "contractBandwidth"], ["configSettingContractCostParamsCpuInstructions", "contractCostParamsCpuInsns"], ["configSettingContractCostParamsMemoryBytes", "contractCostParamsMemBytes"], ["configSettingContractDataKeySizeBytes", "contractDataKeySizeBytes"], ["configSettingContractDataEntrySizeBytes", "contractDataEntrySizeBytes"], ["configSettingStateArchival", "stateArchivalSettings"], ["configSettingContractExecutionLanes", "contractExecutionLanes"], ["configSettingBucketlistSizeWindow", "bucketListSizeWindow"], ["configSettingEvictionIterator", "evictionIterator"]], + arms: { + contractMaxSizeBytes: xdr.lookup("Uint32"), + contractCompute: xdr.lookup("ConfigSettingContractComputeV0"), + contractLedgerCost: xdr.lookup("ConfigSettingContractLedgerCostV0"), + contractHistoricalData: xdr.lookup("ConfigSettingContractHistoricalDataV0"), + contractEvents: xdr.lookup("ConfigSettingContractEventsV0"), + contractBandwidth: xdr.lookup("ConfigSettingContractBandwidthV0"), + contractCostParamsCpuInsns: xdr.lookup("ContractCostParams"), + contractCostParamsMemBytes: xdr.lookup("ContractCostParams"), + contractDataKeySizeBytes: xdr.lookup("Uint32"), + contractDataEntrySizeBytes: xdr.lookup("Uint32"), + stateArchivalSettings: xdr.lookup("StateArchivalSettings"), + contractExecutionLanes: xdr.lookup("ConfigSettingContractExecutionLanesV0"), + bucketListSizeWindow: xdr.varArray(xdr.lookup("Uint64"), 2147483647), + evictionIterator: xdr.lookup("EvictionIterator") + } + }); +}); +var _default = exports["default"] = types; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/generated/next_generated.js b/node_modules/@stellar/stellar-base/lib/generated/next_generated.js new file mode 100644 index 00000000..868dc863 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/generated/next_generated.js @@ -0,0 +1,9227 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var XDR = _interopRequireWildcard(require("@stellar/js-xdr")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } +// Automatically generated by xdrgen on 2024-09-12T11:09:00-08:00 +// DO NOT EDIT or your changes may be overwritten + +/* jshint maxstatements:2147483647 */ +/* jshint esnext:true */ + +var types = XDR.config(function (xdr) { + // Workaround for https://github.com/stellar/xdrgen/issues/152 + // + // The "correct" way would be to replace bare instances of each constant with + // xdr.lookup("..."), but that's more error-prone. + var SCSYMBOL_LIMIT = 32; + var SC_SPEC_DOC_LIMIT = 1024; + + // === xdr source ============================================================ + // + // struct SCPBallot + // { + // uint32 counter; // n + // Value value; // x + // }; + // + // =========================================================================== + xdr.struct("ScpBallot", [["counter", xdr.lookup("Uint32")], ["value", xdr.lookup("Value")]]); + + // === xdr source ============================================================ + // + // enum SCPStatementType + // { + // SCP_ST_PREPARE = 0, + // SCP_ST_CONFIRM = 1, + // SCP_ST_EXTERNALIZE = 2, + // SCP_ST_NOMINATE = 3 + // }; + // + // =========================================================================== + xdr["enum"]("ScpStatementType", { + scpStPrepare: 0, + scpStConfirm: 1, + scpStExternalize: 2, + scpStNominate: 3 + }); + + // === xdr source ============================================================ + // + // struct SCPNomination + // { + // Hash quorumSetHash; // D + // Value votes<>; // X + // Value accepted<>; // Y + // }; + // + // =========================================================================== + xdr.struct("ScpNomination", [["quorumSetHash", xdr.lookup("Hash")], ["votes", xdr.varArray(xdr.lookup("Value"), 2147483647)], ["accepted", xdr.varArray(xdr.lookup("Value"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } + // + // =========================================================================== + xdr.struct("ScpStatementPrepare", [["quorumSetHash", xdr.lookup("Hash")], ["ballot", xdr.lookup("ScpBallot")], ["prepared", xdr.option(xdr.lookup("ScpBallot"))], ["preparedPrime", xdr.option(xdr.lookup("ScpBallot"))], ["nC", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } + // + // =========================================================================== + xdr.struct("ScpStatementConfirm", [["ballot", xdr.lookup("ScpBallot")], ["nPrepared", xdr.lookup("Uint32")], ["nCommit", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")], ["quorumSetHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } + // + // =========================================================================== + xdr.struct("ScpStatementExternalize", [["commit", xdr.lookup("ScpBallot")], ["nH", xdr.lookup("Uint32")], ["commitQuorumSetHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union switch (SCPStatementType type) + // { + // case SCP_ST_PREPARE: + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } prepare; + // case SCP_ST_CONFIRM: + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } confirm; + // case SCP_ST_EXTERNALIZE: + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } externalize; + // case SCP_ST_NOMINATE: + // SCPNomination nominate; + // } + // + // =========================================================================== + xdr.union("ScpStatementPledges", { + switchOn: xdr.lookup("ScpStatementType"), + switchName: "type", + switches: [["scpStPrepare", "prepare"], ["scpStConfirm", "confirm"], ["scpStExternalize", "externalize"], ["scpStNominate", "nominate"]], + arms: { + prepare: xdr.lookup("ScpStatementPrepare"), + confirm: xdr.lookup("ScpStatementConfirm"), + externalize: xdr.lookup("ScpStatementExternalize"), + nominate: xdr.lookup("ScpNomination") + } + }); + + // === xdr source ============================================================ + // + // struct SCPStatement + // { + // NodeID nodeID; // v + // uint64 slotIndex; // i + // + // union switch (SCPStatementType type) + // { + // case SCP_ST_PREPARE: + // struct + // { + // Hash quorumSetHash; // D + // SCPBallot ballot; // b + // SCPBallot* prepared; // p + // SCPBallot* preparedPrime; // p' + // uint32 nC; // c.n + // uint32 nH; // h.n + // } prepare; + // case SCP_ST_CONFIRM: + // struct + // { + // SCPBallot ballot; // b + // uint32 nPrepared; // p.n + // uint32 nCommit; // c.n + // uint32 nH; // h.n + // Hash quorumSetHash; // D + // } confirm; + // case SCP_ST_EXTERNALIZE: + // struct + // { + // SCPBallot commit; // c + // uint32 nH; // h.n + // Hash commitQuorumSetHash; // D used before EXTERNALIZE + // } externalize; + // case SCP_ST_NOMINATE: + // SCPNomination nominate; + // } + // pledges; + // }; + // + // =========================================================================== + xdr.struct("ScpStatement", [["nodeId", xdr.lookup("NodeId")], ["slotIndex", xdr.lookup("Uint64")], ["pledges", xdr.lookup("ScpStatementPledges")]]); + + // === xdr source ============================================================ + // + // struct SCPEnvelope + // { + // SCPStatement statement; + // Signature signature; + // }; + // + // =========================================================================== + xdr.struct("ScpEnvelope", [["statement", xdr.lookup("ScpStatement")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // struct SCPQuorumSet + // { + // uint32 threshold; + // NodeID validators<>; + // SCPQuorumSet innerSets<>; + // }; + // + // =========================================================================== + xdr.struct("ScpQuorumSet", [["threshold", xdr.lookup("Uint32")], ["validators", xdr.varArray(xdr.lookup("NodeId"), 2147483647)], ["innerSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)]]); + + // === xdr source ============================================================ + // + // typedef opaque Thresholds[4]; + // + // =========================================================================== + xdr.typedef("Thresholds", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef string string32<32>; + // + // =========================================================================== + xdr.typedef("String32", xdr.string(32)); + + // === xdr source ============================================================ + // + // typedef string string64<64>; + // + // =========================================================================== + xdr.typedef("String64", xdr.string(64)); + + // === xdr source ============================================================ + // + // typedef int64 SequenceNumber; + // + // =========================================================================== + xdr.typedef("SequenceNumber", xdr.lookup("Int64")); + + // === xdr source ============================================================ + // + // typedef opaque DataValue<64>; + // + // =========================================================================== + xdr.typedef("DataValue", xdr.varOpaque(64)); + + // === xdr source ============================================================ + // + // typedef Hash PoolID; + // + // =========================================================================== + xdr.typedef("PoolId", xdr.lookup("Hash")); + + // === xdr source ============================================================ + // + // typedef opaque AssetCode4[4]; + // + // =========================================================================== + xdr.typedef("AssetCode4", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef opaque AssetCode12[12]; + // + // =========================================================================== + xdr.typedef("AssetCode12", xdr.opaque(12)); + + // === xdr source ============================================================ + // + // enum AssetType + // { + // ASSET_TYPE_NATIVE = 0, + // ASSET_TYPE_CREDIT_ALPHANUM4 = 1, + // ASSET_TYPE_CREDIT_ALPHANUM12 = 2, + // ASSET_TYPE_POOL_SHARE = 3 + // }; + // + // =========================================================================== + xdr["enum"]("AssetType", { + assetTypeNative: 0, + assetTypeCreditAlphanum4: 1, + assetTypeCreditAlphanum12: 2, + assetTypePoolShare: 3 + }); + + // === xdr source ============================================================ + // + // union AssetCode switch (AssetType type) + // { + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AssetCode4 assetCode4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AssetCode12 assetCode12; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("AssetCode", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeCreditAlphanum4", "assetCode4"], ["assetTypeCreditAlphanum12", "assetCode12"]], + arms: { + assetCode4: xdr.lookup("AssetCode4"), + assetCode12: xdr.lookup("AssetCode12") + } + }); + + // === xdr source ============================================================ + // + // struct AlphaNum4 + // { + // AssetCode4 assetCode; + // AccountID issuer; + // }; + // + // =========================================================================== + xdr.struct("AlphaNum4", [["assetCode", xdr.lookup("AssetCode4")], ["issuer", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // struct AlphaNum12 + // { + // AssetCode12 assetCode; + // AccountID issuer; + // }; + // + // =========================================================================== + xdr.struct("AlphaNum12", [["assetCode", xdr.lookup("AssetCode12")], ["issuer", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // union Asset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("Asset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12") + } + }); + + // === xdr source ============================================================ + // + // struct Price + // { + // int32 n; // numerator + // int32 d; // denominator + // }; + // + // =========================================================================== + xdr.struct("Price", [["n", xdr.lookup("Int32")], ["d", xdr.lookup("Int32")]]); + + // === xdr source ============================================================ + // + // struct Liabilities + // { + // int64 buying; + // int64 selling; + // }; + // + // =========================================================================== + xdr.struct("Liabilities", [["buying", xdr.lookup("Int64")], ["selling", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum ThresholdIndexes + // { + // THRESHOLD_MASTER_WEIGHT = 0, + // THRESHOLD_LOW = 1, + // THRESHOLD_MED = 2, + // THRESHOLD_HIGH = 3 + // }; + // + // =========================================================================== + xdr["enum"]("ThresholdIndices", { + thresholdMasterWeight: 0, + thresholdLow: 1, + thresholdMed: 2, + thresholdHigh: 3 + }); + + // === xdr source ============================================================ + // + // enum LedgerEntryType + // { + // ACCOUNT = 0, + // TRUSTLINE = 1, + // OFFER = 2, + // DATA = 3, + // CLAIMABLE_BALANCE = 4, + // LIQUIDITY_POOL = 5, + // CONTRACT_DATA = 6, + // CONTRACT_CODE = 7, + // CONFIG_SETTING = 8, + // TTL = 9 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerEntryType", { + account: 0, + trustline: 1, + offer: 2, + data: 3, + claimableBalance: 4, + liquidityPool: 5, + contractData: 6, + contractCode: 7, + configSetting: 8, + ttl: 9 + }); + + // === xdr source ============================================================ + // + // struct Signer + // { + // SignerKey key; + // uint32 weight; // really only need 1 byte + // }; + // + // =========================================================================== + xdr.struct("Signer", [["key", xdr.lookup("SignerKey")], ["weight", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // enum AccountFlags + // { // masks for each flag + // + // // Flags set on issuer accounts + // // TrustLines are created with authorized set to "false" requiring + // // the issuer to set it for each TrustLine + // AUTH_REQUIRED_FLAG = 0x1, + // // If set, the authorized flag in TrustLines can be cleared + // // otherwise, authorization cannot be revoked + // AUTH_REVOCABLE_FLAG = 0x2, + // // Once set, causes all AUTH_* flags to be read-only + // AUTH_IMMUTABLE_FLAG = 0x4, + // // Trustlines are created with clawback enabled set to "true", + // // and claimable balances created from those trustlines are created + // // with clawback enabled set to "true" + // AUTH_CLAWBACK_ENABLED_FLAG = 0x8 + // }; + // + // =========================================================================== + xdr["enum"]("AccountFlags", { + authRequiredFlag: 1, + authRevocableFlag: 2, + authImmutableFlag: 4, + authClawbackEnabledFlag: 8 + }); + + // === xdr source ============================================================ + // + // const MASK_ACCOUNT_FLAGS = 0x7; + // + // =========================================================================== + xdr["const"]("MASK_ACCOUNT_FLAGS", 0x7); + + // === xdr source ============================================================ + // + // const MASK_ACCOUNT_FLAGS_V17 = 0xF; + // + // =========================================================================== + xdr["const"]("MASK_ACCOUNT_FLAGS_V17", 0xF); + + // === xdr source ============================================================ + // + // const MAX_SIGNERS = 20; + // + // =========================================================================== + xdr["const"]("MAX_SIGNERS", 20); + + // === xdr source ============================================================ + // + // typedef AccountID* SponsorshipDescriptor; + // + // =========================================================================== + xdr.typedef("SponsorshipDescriptor", xdr.option(xdr.lookup("AccountId"))); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV3 + // { + // // We can use this to add more fields, or because it is first, to + // // change AccountEntryExtensionV3 into a union. + // ExtensionPoint ext; + // + // // Ledger number at which `seqNum` took on its present value. + // uint32 seqLedger; + // + // // Time at which `seqNum` took on its present value. + // TimePoint seqTime; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV3", [["ext", xdr.lookup("ExtensionPoint")], ["seqLedger", xdr.lookup("Uint32")], ["seqTime", xdr.lookup("TimePoint")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 3: + // AccountEntryExtensionV3 v3; + // } + // + // =========================================================================== + xdr.union("AccountEntryExtensionV2Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [3, "v3"]], + arms: { + v3: xdr.lookup("AccountEntryExtensionV3") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV2 + // { + // uint32 numSponsored; + // uint32 numSponsoring; + // SponsorshipDescriptor signerSponsoringIDs; + // + // union switch (int v) + // { + // case 0: + // void; + // case 3: + // AccountEntryExtensionV3 v3; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV2", [["numSponsored", xdr.lookup("Uint32")], ["numSponsoring", xdr.lookup("Uint32")], ["signerSponsoringIDs", xdr.varArray(xdr.lookup("SponsorshipDescriptor"), xdr.lookup("MAX_SIGNERS"))], ["ext", xdr.lookup("AccountEntryExtensionV2Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // AccountEntryExtensionV2 v2; + // } + // + // =========================================================================== + xdr.union("AccountEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [2, "v2"]], + arms: { + v2: xdr.lookup("AccountEntryExtensionV2") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntryExtensionV1 + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // AccountEntryExtensionV2 v2; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntryExtensionV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("AccountEntryExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // AccountEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("AccountEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("AccountEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct AccountEntry + // { + // AccountID accountID; // master public key for this account + // int64 balance; // in stroops + // SequenceNumber seqNum; // last sequence number used for this account + // uint32 numSubEntries; // number of sub-entries this account has + // // drives the reserve + // AccountID* inflationDest; // Account to vote for during inflation + // uint32 flags; // see AccountFlags + // + // string32 homeDomain; // can be used for reverse federation and memo lookup + // + // // fields used for signatures + // // thresholds stores unsigned bytes: [weight of master|low|medium|high] + // Thresholds thresholds; + // + // Signer signers; // possible signers for this account + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // AccountEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("AccountEntry", [["accountId", xdr.lookup("AccountId")], ["balance", xdr.lookup("Int64")], ["seqNum", xdr.lookup("SequenceNumber")], ["numSubEntries", xdr.lookup("Uint32")], ["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["flags", xdr.lookup("Uint32")], ["homeDomain", xdr.lookup("String32")], ["thresholds", xdr.lookup("Thresholds")], ["signers", xdr.varArray(xdr.lookup("Signer"), xdr.lookup("MAX_SIGNERS"))], ["ext", xdr.lookup("AccountEntryExt")]]); + + // === xdr source ============================================================ + // + // enum TrustLineFlags + // { + // // issuer has authorized account to perform transactions with its credit + // AUTHORIZED_FLAG = 1, + // // issuer has authorized account to maintain and reduce liabilities for its + // // credit + // AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG = 2, + // // issuer has specified that it may clawback its credit, and that claimable + // // balances created with its credit may also be clawed back + // TRUSTLINE_CLAWBACK_ENABLED_FLAG = 4 + // }; + // + // =========================================================================== + xdr["enum"]("TrustLineFlags", { + authorizedFlag: 1, + authorizedToMaintainLiabilitiesFlag: 2, + trustlineClawbackEnabledFlag: 4 + }); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS = 1; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS", 1); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS_V13 = 3; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS_V13", 3); + + // === xdr source ============================================================ + // + // const MASK_TRUSTLINE_FLAGS_V17 = 7; + // + // =========================================================================== + xdr["const"]("MASK_TRUSTLINE_FLAGS_V17", 7); + + // === xdr source ============================================================ + // + // enum LiquidityPoolType + // { + // LIQUIDITY_POOL_CONSTANT_PRODUCT = 0 + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolType", { + liquidityPoolConstantProduct: 0 + }); + + // === xdr source ============================================================ + // + // union TrustLineAsset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // case ASSET_TYPE_POOL_SHARE: + // PoolID liquidityPoolID; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("TrustLineAsset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"], ["assetTypePoolShare", "liquidityPoolId"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12"), + liquidityPoolId: xdr.lookup("PoolId") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryExtensionV2Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TrustLineEntryExtensionV2 + // { + // int32 liquidityPoolUseCount; + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TrustLineEntryExtensionV2", [["liquidityPoolUseCount", xdr.lookup("Int32")], ["ext", xdr.lookup("TrustLineEntryExtensionV2Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [2, "v2"]], + arms: { + v2: xdr.lookup("TrustLineEntryExtensionV2") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } + // + // =========================================================================== + xdr.struct("TrustLineEntryV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("TrustLineEntryV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } v1; + // } + // + // =========================================================================== + xdr.union("TrustLineEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("TrustLineEntryV1") + } + }); + + // === xdr source ============================================================ + // + // struct TrustLineEntry + // { + // AccountID accountID; // account this trustline belongs to + // TrustLineAsset asset; // type of asset (with issuer) + // int64 balance; // how much of this asset the user has. + // // Asset defines the unit for this; + // + // int64 limit; // balance cannot be above this + // uint32 flags; // see TrustLineFlags + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // Liabilities liabilities; + // + // union switch (int v) + // { + // case 0: + // void; + // case 2: + // TrustLineEntryExtensionV2 v2; + // } + // ext; + // } v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TrustLineEntry", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("TrustLineAsset")], ["balance", xdr.lookup("Int64")], ["limit", xdr.lookup("Int64")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("TrustLineEntryExt")]]); + + // === xdr source ============================================================ + // + // enum OfferEntryFlags + // { + // // an offer with this flag will not act on and take a reverse offer of equal + // // price + // PASSIVE_FLAG = 1 + // }; + // + // =========================================================================== + xdr["enum"]("OfferEntryFlags", { + passiveFlag: 1 + }); + + // === xdr source ============================================================ + // + // const MASK_OFFERENTRY_FLAGS = 1; + // + // =========================================================================== + xdr["const"]("MASK_OFFERENTRY_FLAGS", 1); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("OfferEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct OfferEntry + // { + // AccountID sellerID; + // int64 offerID; + // Asset selling; // A + // Asset buying; // B + // int64 amount; // amount of A + // + // /* price for this offer: + // price of A in terms of B + // price=AmountB/AmountA=priceNumerator/priceDenominator + // price is after fees + // */ + // Price price; + // uint32 flags; // see OfferEntryFlags + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("OfferEntry", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")], ["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("OfferEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("DataEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct DataEntry + // { + // AccountID accountID; // account this data belongs to + // string64 dataName; + // DataValue dataValue; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("DataEntry", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")], ["dataValue", xdr.lookup("DataValue")], ["ext", xdr.lookup("DataEntryExt")]]); + + // === xdr source ============================================================ + // + // enum ClaimPredicateType + // { + // CLAIM_PREDICATE_UNCONDITIONAL = 0, + // CLAIM_PREDICATE_AND = 1, + // CLAIM_PREDICATE_OR = 2, + // CLAIM_PREDICATE_NOT = 3, + // CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME = 4, + // CLAIM_PREDICATE_BEFORE_RELATIVE_TIME = 5 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimPredicateType", { + claimPredicateUnconditional: 0, + claimPredicateAnd: 1, + claimPredicateOr: 2, + claimPredicateNot: 3, + claimPredicateBeforeAbsoluteTime: 4, + claimPredicateBeforeRelativeTime: 5 + }); + + // === xdr source ============================================================ + // + // union ClaimPredicate switch (ClaimPredicateType type) + // { + // case CLAIM_PREDICATE_UNCONDITIONAL: + // void; + // case CLAIM_PREDICATE_AND: + // ClaimPredicate andPredicates<2>; + // case CLAIM_PREDICATE_OR: + // ClaimPredicate orPredicates<2>; + // case CLAIM_PREDICATE_NOT: + // ClaimPredicate* notPredicate; + // case CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME: + // int64 absBefore; // Predicate will be true if closeTime < absBefore + // case CLAIM_PREDICATE_BEFORE_RELATIVE_TIME: + // int64 relBefore; // Seconds since closeTime of the ledger in which the + // // ClaimableBalanceEntry was created + // }; + // + // =========================================================================== + xdr.union("ClaimPredicate", { + switchOn: xdr.lookup("ClaimPredicateType"), + switchName: "type", + switches: [["claimPredicateUnconditional", xdr["void"]()], ["claimPredicateAnd", "andPredicates"], ["claimPredicateOr", "orPredicates"], ["claimPredicateNot", "notPredicate"], ["claimPredicateBeforeAbsoluteTime", "absBefore"], ["claimPredicateBeforeRelativeTime", "relBefore"]], + arms: { + andPredicates: xdr.varArray(xdr.lookup("ClaimPredicate"), 2), + orPredicates: xdr.varArray(xdr.lookup("ClaimPredicate"), 2), + notPredicate: xdr.option(xdr.lookup("ClaimPredicate")), + absBefore: xdr.lookup("Int64"), + relBefore: xdr.lookup("Int64") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimantType + // { + // CLAIMANT_TYPE_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimantType", { + claimantTypeV0: 0 + }); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID destination; // The account that can use this condition + // ClaimPredicate predicate; // Claimable if predicate is true + // } + // + // =========================================================================== + xdr.struct("ClaimantV0", [["destination", xdr.lookup("AccountId")], ["predicate", xdr.lookup("ClaimPredicate")]]); + + // === xdr source ============================================================ + // + // union Claimant switch (ClaimantType type) + // { + // case CLAIMANT_TYPE_V0: + // struct + // { + // AccountID destination; // The account that can use this condition + // ClaimPredicate predicate; // Claimable if predicate is true + // } v0; + // }; + // + // =========================================================================== + xdr.union("Claimant", { + switchOn: xdr.lookup("ClaimantType"), + switchName: "type", + switches: [["claimantTypeV0", "v0"]], + arms: { + v0: xdr.lookup("ClaimantV0") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimableBalanceIDType + // { + // CLAIMABLE_BALANCE_ID_TYPE_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimableBalanceIdType", { + claimableBalanceIdTypeV0: 0 + }); + + // === xdr source ============================================================ + // + // union ClaimableBalanceID switch (ClaimableBalanceIDType type) + // { + // case CLAIMABLE_BALANCE_ID_TYPE_V0: + // Hash v0; + // }; + // + // =========================================================================== + xdr.union("ClaimableBalanceId", { + switchOn: xdr.lookup("ClaimableBalanceIdType"), + switchName: "type", + switches: [["claimableBalanceIdTypeV0", "v0"]], + arms: { + v0: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimableBalanceFlags + // { + // // If set, the issuer account of the asset held by the claimable balance may + // // clawback the claimable balance + // CLAIMABLE_BALANCE_CLAWBACK_ENABLED_FLAG = 0x1 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimableBalanceFlags", { + claimableBalanceClawbackEnabledFlag: 1 + }); + + // === xdr source ============================================================ + // + // const MASK_CLAIMABLE_BALANCE_FLAGS = 0x1; + // + // =========================================================================== + xdr["const"]("MASK_CLAIMABLE_BALANCE_FLAGS", 0x1); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("ClaimableBalanceEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct ClaimableBalanceEntryExtensionV1 + // { + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // + // uint32 flags; // see ClaimableBalanceFlags + // }; + // + // =========================================================================== + xdr.struct("ClaimableBalanceEntryExtensionV1", [["ext", xdr.lookup("ClaimableBalanceEntryExtensionV1Ext")], ["flags", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ClaimableBalanceEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("ClaimableBalanceEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("ClaimableBalanceEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct ClaimableBalanceEntry + // { + // // Unique identifier for this ClaimableBalanceEntry + // ClaimableBalanceID balanceID; + // + // // List of claimants with associated predicate + // Claimant claimants<10>; + // + // // Any asset including native + // Asset asset; + // + // // Amount of asset + // int64 amount; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ClaimableBalanceEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("ClaimableBalanceEntry", [["balanceId", xdr.lookup("ClaimableBalanceId")], ["claimants", xdr.varArray(xdr.lookup("Claimant"), 10)], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["ext", xdr.lookup("ClaimableBalanceEntryExt")]]); + + // === xdr source ============================================================ + // + // struct LiquidityPoolConstantProductParameters + // { + // Asset assetA; // assetA < assetB + // Asset assetB; + // int32 fee; // Fee is in basis points, so the actual rate is (fee/100)% + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolConstantProductParameters", [["assetA", xdr.lookup("Asset")], ["assetB", xdr.lookup("Asset")], ["fee", xdr.lookup("Int32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } + // + // =========================================================================== + xdr.struct("LiquidityPoolEntryConstantProduct", [["params", xdr.lookup("LiquidityPoolConstantProductParameters")], ["reserveA", xdr.lookup("Int64")], ["reserveB", xdr.lookup("Int64")], ["totalPoolShares", xdr.lookup("Int64")], ["poolSharesTrustLineCount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } constantProduct; + // } + // + // =========================================================================== + xdr.union("LiquidityPoolEntryBody", { + switchOn: xdr.lookup("LiquidityPoolType"), + switchName: "type", + switches: [["liquidityPoolConstantProduct", "constantProduct"]], + arms: { + constantProduct: xdr.lookup("LiquidityPoolEntryConstantProduct") + } + }); + + // === xdr source ============================================================ + // + // struct LiquidityPoolEntry + // { + // PoolID liquidityPoolID; + // + // union switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // struct + // { + // LiquidityPoolConstantProductParameters params; + // + // int64 reserveA; // amount of A in the pool + // int64 reserveB; // amount of B in the pool + // int64 totalPoolShares; // total number of pool shares issued + // int64 poolSharesTrustLineCount; // number of trust lines for the + // // associated pool shares + // } constantProduct; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolEntry", [["liquidityPoolId", xdr.lookup("PoolId")], ["body", xdr.lookup("LiquidityPoolEntryBody")]]); + + // === xdr source ============================================================ + // + // enum ContractDataDurability { + // TEMPORARY = 0, + // PERSISTENT = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractDataDurability", { + temporary: 0, + persistent: 1 + }); + + // === xdr source ============================================================ + // + // struct ContractDataEntry { + // ExtensionPoint ext; + // + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // SCVal val; + // }; + // + // =========================================================================== + xdr.struct("ContractDataEntry", [["ext", xdr.lookup("ExtensionPoint")], ["contract", xdr.lookup("ScAddress")], ["key", xdr.lookup("ScVal")], ["durability", xdr.lookup("ContractDataDurability")], ["val", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // struct ContractCodeCostInputs { + // ExtensionPoint ext; + // uint32 nInstructions; + // uint32 nFunctions; + // uint32 nGlobals; + // uint32 nTableEntries; + // uint32 nTypes; + // uint32 nDataSegments; + // uint32 nElemSegments; + // uint32 nImports; + // uint32 nExports; + // uint32 nDataSegmentBytes; + // }; + // + // =========================================================================== + xdr.struct("ContractCodeCostInputs", [["ext", xdr.lookup("ExtensionPoint")], ["nInstructions", xdr.lookup("Uint32")], ["nFunctions", xdr.lookup("Uint32")], ["nGlobals", xdr.lookup("Uint32")], ["nTableEntries", xdr.lookup("Uint32")], ["nTypes", xdr.lookup("Uint32")], ["nDataSegments", xdr.lookup("Uint32")], ["nElemSegments", xdr.lookup("Uint32")], ["nImports", xdr.lookup("Uint32")], ["nExports", xdr.lookup("Uint32")], ["nDataSegmentBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } + // + // =========================================================================== + xdr.struct("ContractCodeEntryV1", [["ext", xdr.lookup("ExtensionPoint")], ["costInputs", xdr.lookup("ContractCodeCostInputs")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } v1; + // } + // + // =========================================================================== + xdr.union("ContractCodeEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("ContractCodeEntryV1") + } + }); + + // === xdr source ============================================================ + // + // struct ContractCodeEntry { + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // struct + // { + // ExtensionPoint ext; + // ContractCodeCostInputs costInputs; + // } v1; + // } ext; + // + // Hash hash; + // opaque code<>; + // }; + // + // =========================================================================== + xdr.struct("ContractCodeEntry", [["ext", xdr.lookup("ContractCodeEntryExt")], ["hash", xdr.lookup("Hash")], ["code", xdr.varOpaque()]]); + + // === xdr source ============================================================ + // + // struct TTLEntry { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // uint32 liveUntilLedgerSeq; + // }; + // + // =========================================================================== + xdr.struct("TtlEntry", [["keyHash", xdr.lookup("Hash")], ["liveUntilLedgerSeq", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerEntryExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerEntryExtensionV1 + // { + // SponsorshipDescriptor sponsoringID; + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerEntryExtensionV1", [["sponsoringId", xdr.lookup("SponsorshipDescriptor")], ["ext", xdr.lookup("LedgerEntryExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (LedgerEntryType type) + // { + // case ACCOUNT: + // AccountEntry account; + // case TRUSTLINE: + // TrustLineEntry trustLine; + // case OFFER: + // OfferEntry offer; + // case DATA: + // DataEntry data; + // case CLAIMABLE_BALANCE: + // ClaimableBalanceEntry claimableBalance; + // case LIQUIDITY_POOL: + // LiquidityPoolEntry liquidityPool; + // case CONTRACT_DATA: + // ContractDataEntry contractData; + // case CONTRACT_CODE: + // ContractCodeEntry contractCode; + // case CONFIG_SETTING: + // ConfigSettingEntry configSetting; + // case TTL: + // TTLEntry ttl; + // } + // + // =========================================================================== + xdr.union("LedgerEntryData", { + switchOn: xdr.lookup("LedgerEntryType"), + switchName: "type", + switches: [["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["data", "data"], ["claimableBalance", "claimableBalance"], ["liquidityPool", "liquidityPool"], ["contractData", "contractData"], ["contractCode", "contractCode"], ["configSetting", "configSetting"], ["ttl", "ttl"]], + arms: { + account: xdr.lookup("AccountEntry"), + trustLine: xdr.lookup("TrustLineEntry"), + offer: xdr.lookup("OfferEntry"), + data: xdr.lookup("DataEntry"), + claimableBalance: xdr.lookup("ClaimableBalanceEntry"), + liquidityPool: xdr.lookup("LiquidityPoolEntry"), + contractData: xdr.lookup("ContractDataEntry"), + contractCode: xdr.lookup("ContractCodeEntry"), + configSetting: xdr.lookup("ConfigSettingEntry"), + ttl: xdr.lookup("TtlEntry") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerEntryExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("LedgerEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerEntryExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerEntry + // { + // uint32 lastModifiedLedgerSeq; // ledger the LedgerEntry was last changed + // + // union switch (LedgerEntryType type) + // { + // case ACCOUNT: + // AccountEntry account; + // case TRUSTLINE: + // TrustLineEntry trustLine; + // case OFFER: + // OfferEntry offer; + // case DATA: + // DataEntry data; + // case CLAIMABLE_BALANCE: + // ClaimableBalanceEntry claimableBalance; + // case LIQUIDITY_POOL: + // LiquidityPoolEntry liquidityPool; + // case CONTRACT_DATA: + // ContractDataEntry contractData; + // case CONTRACT_CODE: + // ContractCodeEntry contractCode; + // case CONFIG_SETTING: + // ConfigSettingEntry configSetting; + // case TTL: + // TTLEntry ttl; + // } + // data; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerEntryExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerEntry", [["lastModifiedLedgerSeq", xdr.lookup("Uint32")], ["data", xdr.lookup("LedgerEntryData")], ["ext", xdr.lookup("LedgerEntryExt")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyAccount", [["accountId", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // TrustLineAsset asset; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyTrustLine", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("TrustLineAsset")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sellerID; + // int64 offerID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyOffer", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // string64 dataName; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyData", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimableBalanceID balanceID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyClaimableBalance", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // PoolID liquidityPoolID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyLiquidityPool", [["liquidityPoolId", xdr.lookup("PoolId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyContractData", [["contract", xdr.lookup("ScAddress")], ["key", xdr.lookup("ScVal")], ["durability", xdr.lookup("ContractDataDurability")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash hash; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyContractCode", [["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ConfigSettingID configSettingID; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyConfigSetting", [["configSettingId", xdr.lookup("ConfigSettingId")]]); + + // === xdr source ============================================================ + // + // struct + // { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // } + // + // =========================================================================== + xdr.struct("LedgerKeyTtl", [["keyHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union LedgerKey switch (LedgerEntryType type) + // { + // case ACCOUNT: + // struct + // { + // AccountID accountID; + // } account; + // + // case TRUSTLINE: + // struct + // { + // AccountID accountID; + // TrustLineAsset asset; + // } trustLine; + // + // case OFFER: + // struct + // { + // AccountID sellerID; + // int64 offerID; + // } offer; + // + // case DATA: + // struct + // { + // AccountID accountID; + // string64 dataName; + // } data; + // + // case CLAIMABLE_BALANCE: + // struct + // { + // ClaimableBalanceID balanceID; + // } claimableBalance; + // + // case LIQUIDITY_POOL: + // struct + // { + // PoolID liquidityPoolID; + // } liquidityPool; + // case CONTRACT_DATA: + // struct + // { + // SCAddress contract; + // SCVal key; + // ContractDataDurability durability; + // } contractData; + // case CONTRACT_CODE: + // struct + // { + // Hash hash; + // } contractCode; + // case CONFIG_SETTING: + // struct + // { + // ConfigSettingID configSettingID; + // } configSetting; + // case TTL: + // struct + // { + // // Hash of the LedgerKey that is associated with this TTLEntry + // Hash keyHash; + // } ttl; + // }; + // + // =========================================================================== + xdr.union("LedgerKey", { + switchOn: xdr.lookup("LedgerEntryType"), + switchName: "type", + switches: [["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["data", "data"], ["claimableBalance", "claimableBalance"], ["liquidityPool", "liquidityPool"], ["contractData", "contractData"], ["contractCode", "contractCode"], ["configSetting", "configSetting"], ["ttl", "ttl"]], + arms: { + account: xdr.lookup("LedgerKeyAccount"), + trustLine: xdr.lookup("LedgerKeyTrustLine"), + offer: xdr.lookup("LedgerKeyOffer"), + data: xdr.lookup("LedgerKeyData"), + claimableBalance: xdr.lookup("LedgerKeyClaimableBalance"), + liquidityPool: xdr.lookup("LedgerKeyLiquidityPool"), + contractData: xdr.lookup("LedgerKeyContractData"), + contractCode: xdr.lookup("LedgerKeyContractCode"), + configSetting: xdr.lookup("LedgerKeyConfigSetting"), + ttl: xdr.lookup("LedgerKeyTtl") + } + }); + + // === xdr source ============================================================ + // + // enum EnvelopeType + // { + // ENVELOPE_TYPE_TX_V0 = 0, + // ENVELOPE_TYPE_SCP = 1, + // ENVELOPE_TYPE_TX = 2, + // ENVELOPE_TYPE_AUTH = 3, + // ENVELOPE_TYPE_SCPVALUE = 4, + // ENVELOPE_TYPE_TX_FEE_BUMP = 5, + // ENVELOPE_TYPE_OP_ID = 6, + // ENVELOPE_TYPE_POOL_REVOKE_OP_ID = 7, + // ENVELOPE_TYPE_CONTRACT_ID = 8, + // ENVELOPE_TYPE_SOROBAN_AUTHORIZATION = 9 + // }; + // + // =========================================================================== + xdr["enum"]("EnvelopeType", { + envelopeTypeTxV0: 0, + envelopeTypeScp: 1, + envelopeTypeTx: 2, + envelopeTypeAuth: 3, + envelopeTypeScpvalue: 4, + envelopeTypeTxFeeBump: 5, + envelopeTypeOpId: 6, + envelopeTypePoolRevokeOpId: 7, + envelopeTypeContractId: 8, + envelopeTypeSorobanAuthorization: 9 + }); + + // === xdr source ============================================================ + // + // enum BucketListType + // { + // LIVE = 0, + // HOT_ARCHIVE = 1, + // COLD_ARCHIVE = 2 + // }; + // + // =========================================================================== + xdr["enum"]("BucketListType", { + live: 0, + hotArchive: 1, + coldArchive: 2 + }); + + // === xdr source ============================================================ + // + // enum BucketEntryType + // { + // METAENTRY = + // -1, // At-and-after protocol 11: bucket metadata, should come first. + // LIVEENTRY = 0, // Before protocol 11: created-or-updated; + // // At-and-after protocol 11: only updated. + // DEADENTRY = 1, + // INITENTRY = 2 // At-and-after protocol 11: only created. + // }; + // + // =========================================================================== + xdr["enum"]("BucketEntryType", { + metaentry: -1, + liveentry: 0, + deadentry: 1, + initentry: 2 + }); + + // === xdr source ============================================================ + // + // enum HotArchiveBucketEntryType + // { + // HOT_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first. + // HOT_ARCHIVE_ARCHIVED = 0, // Entry is Archived + // HOT_ARCHIVE_LIVE = 1, // Entry was previously HOT_ARCHIVE_ARCHIVED, or HOT_ARCHIVE_DELETED, but + // // has been added back to the live BucketList. + // // Does not need to be persisted. + // HOT_ARCHIVE_DELETED = 2 // Entry deleted (Note: must be persisted in archive) + // }; + // + // =========================================================================== + xdr["enum"]("HotArchiveBucketEntryType", { + hotArchiveMetaentry: -1, + hotArchiveArchived: 0, + hotArchiveLive: 1, + hotArchiveDeleted: 2 + }); + + // === xdr source ============================================================ + // + // enum ColdArchiveBucketEntryType + // { + // COLD_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first. + // COLD_ARCHIVE_ARCHIVED_LEAF = 0, // Full LedgerEntry that was archived during the epoch + // COLD_ARCHIVE_DELETED_LEAF = 1, // LedgerKey that was deleted during the epoch + // COLD_ARCHIVE_BOUNDARY_LEAF = 2, // Dummy leaf representing low/high bound + // COLD_ARCHIVE_HASH = 3 // Intermediary Merkle hash entry + // }; + // + // =========================================================================== + xdr["enum"]("ColdArchiveBucketEntryType", { + coldArchiveMetaentry: -1, + coldArchiveArchivedLeaf: 0, + coldArchiveDeletedLeaf: 1, + coldArchiveBoundaryLeaf: 2, + coldArchiveHash: 3 + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // BucketListType bucketListType; + // } + // + // =========================================================================== + xdr.union("BucketMetadataExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "bucketListType"]], + arms: { + bucketListType: xdr.lookup("BucketListType") + } + }); + + // === xdr source ============================================================ + // + // struct BucketMetadata + // { + // // Indicates the protocol version used to create / merge this bucket. + // uint32 ledgerVersion; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // BucketListType bucketListType; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("BucketMetadata", [["ledgerVersion", xdr.lookup("Uint32")], ["ext", xdr.lookup("BucketMetadataExt")]]); + + // === xdr source ============================================================ + // + // union BucketEntry switch (BucketEntryType type) + // { + // case LIVEENTRY: + // case INITENTRY: + // LedgerEntry liveEntry; + // + // case DEADENTRY: + // LedgerKey deadEntry; + // case METAENTRY: + // BucketMetadata metaEntry; + // }; + // + // =========================================================================== + xdr.union("BucketEntry", { + switchOn: xdr.lookup("BucketEntryType"), + switchName: "type", + switches: [["liveentry", "liveEntry"], ["initentry", "liveEntry"], ["deadentry", "deadEntry"], ["metaentry", "metaEntry"]], + arms: { + liveEntry: xdr.lookup("LedgerEntry"), + deadEntry: xdr.lookup("LedgerKey"), + metaEntry: xdr.lookup("BucketMetadata") + } + }); + + // === xdr source ============================================================ + // + // union HotArchiveBucketEntry switch (HotArchiveBucketEntryType type) + // { + // case HOT_ARCHIVE_ARCHIVED: + // LedgerEntry archivedEntry; + // + // case HOT_ARCHIVE_LIVE: + // case HOT_ARCHIVE_DELETED: + // LedgerKey key; + // case HOT_ARCHIVE_METAENTRY: + // BucketMetadata metaEntry; + // }; + // + // =========================================================================== + xdr.union("HotArchiveBucketEntry", { + switchOn: xdr.lookup("HotArchiveBucketEntryType"), + switchName: "type", + switches: [["hotArchiveArchived", "archivedEntry"], ["hotArchiveLive", "key"], ["hotArchiveDeleted", "key"], ["hotArchiveMetaentry", "metaEntry"]], + arms: { + archivedEntry: xdr.lookup("LedgerEntry"), + key: xdr.lookup("LedgerKey"), + metaEntry: xdr.lookup("BucketMetadata") + } + }); + + // === xdr source ============================================================ + // + // struct ColdArchiveArchivedLeaf + // { + // uint32 index; + // LedgerEntry archivedEntry; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveArchivedLeaf", [["index", xdr.lookup("Uint32")], ["archivedEntry", xdr.lookup("LedgerEntry")]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveDeletedLeaf + // { + // uint32 index; + // LedgerKey deletedKey; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveDeletedLeaf", [["index", xdr.lookup("Uint32")], ["deletedKey", xdr.lookup("LedgerKey")]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveBoundaryLeaf + // { + // uint32 index; + // bool isLowerBound; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveBoundaryLeaf", [["index", xdr.lookup("Uint32")], ["isLowerBound", xdr.bool()]]); + + // === xdr source ============================================================ + // + // struct ColdArchiveHashEntry + // { + // uint32 index; + // uint32 level; + // Hash hash; + // }; + // + // =========================================================================== + xdr.struct("ColdArchiveHashEntry", [["index", xdr.lookup("Uint32")], ["level", xdr.lookup("Uint32")], ["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union ColdArchiveBucketEntry switch (ColdArchiveBucketEntryType type) + // { + // case COLD_ARCHIVE_METAENTRY: + // BucketMetadata metaEntry; + // case COLD_ARCHIVE_ARCHIVED_LEAF: + // ColdArchiveArchivedLeaf archivedLeaf; + // case COLD_ARCHIVE_DELETED_LEAF: + // ColdArchiveDeletedLeaf deletedLeaf; + // case COLD_ARCHIVE_BOUNDARY_LEAF: + // ColdArchiveBoundaryLeaf boundaryLeaf; + // case COLD_ARCHIVE_HASH: + // ColdArchiveHashEntry hashEntry; + // }; + // + // =========================================================================== + xdr.union("ColdArchiveBucketEntry", { + switchOn: xdr.lookup("ColdArchiveBucketEntryType"), + switchName: "type", + switches: [["coldArchiveMetaentry", "metaEntry"], ["coldArchiveArchivedLeaf", "archivedLeaf"], ["coldArchiveDeletedLeaf", "deletedLeaf"], ["coldArchiveBoundaryLeaf", "boundaryLeaf"], ["coldArchiveHash", "hashEntry"]], + arms: { + metaEntry: xdr.lookup("BucketMetadata"), + archivedLeaf: xdr.lookup("ColdArchiveArchivedLeaf"), + deletedLeaf: xdr.lookup("ColdArchiveDeletedLeaf"), + boundaryLeaf: xdr.lookup("ColdArchiveBoundaryLeaf"), + hashEntry: xdr.lookup("ColdArchiveHashEntry") + } + }); + + // === xdr source ============================================================ + // + // typedef opaque UpgradeType<128>; + // + // =========================================================================== + xdr.typedef("UpgradeType", xdr.varOpaque(128)); + + // === xdr source ============================================================ + // + // enum StellarValueType + // { + // STELLAR_VALUE_BASIC = 0, + // STELLAR_VALUE_SIGNED = 1 + // }; + // + // =========================================================================== + xdr["enum"]("StellarValueType", { + stellarValueBasic: 0, + stellarValueSigned: 1 + }); + + // === xdr source ============================================================ + // + // struct LedgerCloseValueSignature + // { + // NodeID nodeID; // which node introduced the value + // Signature signature; // nodeID's signature + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseValueSignature", [["nodeId", xdr.lookup("NodeId")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // union switch (StellarValueType v) + // { + // case STELLAR_VALUE_BASIC: + // void; + // case STELLAR_VALUE_SIGNED: + // LedgerCloseValueSignature lcValueSignature; + // } + // + // =========================================================================== + xdr.union("StellarValueExt", { + switchOn: xdr.lookup("StellarValueType"), + switchName: "v", + switches: [["stellarValueBasic", xdr["void"]()], ["stellarValueSigned", "lcValueSignature"]], + arms: { + lcValueSignature: xdr.lookup("LedgerCloseValueSignature") + } + }); + + // === xdr source ============================================================ + // + // struct StellarValue + // { + // Hash txSetHash; // transaction set to apply to previous ledger + // TimePoint closeTime; // network close time + // + // // upgrades to apply to the previous ledger (usually empty) + // // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop + // // unknown steps during consensus if needed. + // // see notes below on 'LedgerUpgrade' for more detail + // // max size is dictated by number of upgrade types (+ room for future) + // UpgradeType upgrades<6>; + // + // // reserved for future use + // union switch (StellarValueType v) + // { + // case STELLAR_VALUE_BASIC: + // void; + // case STELLAR_VALUE_SIGNED: + // LedgerCloseValueSignature lcValueSignature; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("StellarValue", [["txSetHash", xdr.lookup("Hash")], ["closeTime", xdr.lookup("TimePoint")], ["upgrades", xdr.varArray(xdr.lookup("UpgradeType"), 6)], ["ext", xdr.lookup("StellarValueExt")]]); + + // === xdr source ============================================================ + // + // const MASK_LEDGER_HEADER_FLAGS = 0x7; + // + // =========================================================================== + xdr["const"]("MASK_LEDGER_HEADER_FLAGS", 0x7); + + // === xdr source ============================================================ + // + // enum LedgerHeaderFlags + // { + // DISABLE_LIQUIDITY_POOL_TRADING_FLAG = 0x1, + // DISABLE_LIQUIDITY_POOL_DEPOSIT_FLAG = 0x2, + // DISABLE_LIQUIDITY_POOL_WITHDRAWAL_FLAG = 0x4 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerHeaderFlags", { + disableLiquidityPoolTradingFlag: 1, + disableLiquidityPoolDepositFlag: 2, + disableLiquidityPoolWithdrawalFlag: 4 + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderExtensionV1Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerHeaderExtensionV1 + // { + // uint32 flags; // LedgerHeaderFlags + // + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeaderExtensionV1", [["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("LedgerHeaderExtensionV1Ext")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerHeaderExtensionV1 v1; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerHeaderExtensionV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerHeader + // { + // uint32 ledgerVersion; // the protocol version of the ledger + // Hash previousLedgerHash; // hash of the previous ledger header + // StellarValue scpValue; // what consensus agreed to + // Hash txSetResultHash; // the TransactionResultSet that led to this ledger + // Hash bucketListHash; // hash of the ledger state + // + // uint32 ledgerSeq; // sequence number of this ledger + // + // int64 totalCoins; // total number of stroops in existence. + // // 10,000,000 stroops in 1 XLM + // + // int64 feePool; // fees burned since last inflation run + // uint32 inflationSeq; // inflation sequence number + // + // uint64 idPool; // last used global ID, used for generating objects + // + // uint32 baseFee; // base fee per operation in stroops + // uint32 baseReserve; // account base reserve in stroops + // + // uint32 maxTxSetSize; // maximum size a transaction set can be + // + // Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back + // // in time without walking the chain back ledger by ledger + // // each slot contains the oldest ledger that is mod of + // // either 50 5000 50000 or 500000 depending on index + // // skipList[0] mod(50), skipList[1] mod(5000), etc + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerHeaderExtensionV1 v1; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeader", [["ledgerVersion", xdr.lookup("Uint32")], ["previousLedgerHash", xdr.lookup("Hash")], ["scpValue", xdr.lookup("StellarValue")], ["txSetResultHash", xdr.lookup("Hash")], ["bucketListHash", xdr.lookup("Hash")], ["ledgerSeq", xdr.lookup("Uint32")], ["totalCoins", xdr.lookup("Int64")], ["feePool", xdr.lookup("Int64")], ["inflationSeq", xdr.lookup("Uint32")], ["idPool", xdr.lookup("Uint64")], ["baseFee", xdr.lookup("Uint32")], ["baseReserve", xdr.lookup("Uint32")], ["maxTxSetSize", xdr.lookup("Uint32")], ["skipList", xdr.array(xdr.lookup("Hash"), 4)], ["ext", xdr.lookup("LedgerHeaderExt")]]); + + // === xdr source ============================================================ + // + // enum LedgerUpgradeType + // { + // LEDGER_UPGRADE_VERSION = 1, + // LEDGER_UPGRADE_BASE_FEE = 2, + // LEDGER_UPGRADE_MAX_TX_SET_SIZE = 3, + // LEDGER_UPGRADE_BASE_RESERVE = 4, + // LEDGER_UPGRADE_FLAGS = 5, + // LEDGER_UPGRADE_CONFIG = 6, + // LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE = 7 + // }; + // + // =========================================================================== + xdr["enum"]("LedgerUpgradeType", { + ledgerUpgradeVersion: 1, + ledgerUpgradeBaseFee: 2, + ledgerUpgradeMaxTxSetSize: 3, + ledgerUpgradeBaseReserve: 4, + ledgerUpgradeFlags: 5, + ledgerUpgradeConfig: 6, + ledgerUpgradeMaxSorobanTxSetSize: 7 + }); + + // === xdr source ============================================================ + // + // struct ConfigUpgradeSetKey { + // Hash contractID; + // Hash contentHash; + // }; + // + // =========================================================================== + xdr.struct("ConfigUpgradeSetKey", [["contractId", xdr.lookup("Hash")], ["contentHash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // union LedgerUpgrade switch (LedgerUpgradeType type) + // { + // case LEDGER_UPGRADE_VERSION: + // uint32 newLedgerVersion; // update ledgerVersion + // case LEDGER_UPGRADE_BASE_FEE: + // uint32 newBaseFee; // update baseFee + // case LEDGER_UPGRADE_MAX_TX_SET_SIZE: + // uint32 newMaxTxSetSize; // update maxTxSetSize + // case LEDGER_UPGRADE_BASE_RESERVE: + // uint32 newBaseReserve; // update baseReserve + // case LEDGER_UPGRADE_FLAGS: + // uint32 newFlags; // update flags + // case LEDGER_UPGRADE_CONFIG: + // // Update arbitrary `ConfigSetting` entries identified by the key. + // ConfigUpgradeSetKey newConfig; + // case LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE: + // // Update ConfigSettingContractExecutionLanesV0.ledgerMaxTxCount without + // // using `LEDGER_UPGRADE_CONFIG`. + // uint32 newMaxSorobanTxSetSize; + // }; + // + // =========================================================================== + xdr.union("LedgerUpgrade", { + switchOn: xdr.lookup("LedgerUpgradeType"), + switchName: "type", + switches: [["ledgerUpgradeVersion", "newLedgerVersion"], ["ledgerUpgradeBaseFee", "newBaseFee"], ["ledgerUpgradeMaxTxSetSize", "newMaxTxSetSize"], ["ledgerUpgradeBaseReserve", "newBaseReserve"], ["ledgerUpgradeFlags", "newFlags"], ["ledgerUpgradeConfig", "newConfig"], ["ledgerUpgradeMaxSorobanTxSetSize", "newMaxSorobanTxSetSize"]], + arms: { + newLedgerVersion: xdr.lookup("Uint32"), + newBaseFee: xdr.lookup("Uint32"), + newMaxTxSetSize: xdr.lookup("Uint32"), + newBaseReserve: xdr.lookup("Uint32"), + newFlags: xdr.lookup("Uint32"), + newConfig: xdr.lookup("ConfigUpgradeSetKey"), + newMaxSorobanTxSetSize: xdr.lookup("Uint32") + } + }); + + // === xdr source ============================================================ + // + // struct ConfigUpgradeSet { + // ConfigSettingEntry updatedEntry<>; + // }; + // + // =========================================================================== + xdr.struct("ConfigUpgradeSet", [["updatedEntry", xdr.varArray(xdr.lookup("ConfigSettingEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // enum TxSetComponentType + // { + // // txs with effective fee <= bid derived from a base fee (if any). + // // If base fee is not specified, no discount is applied. + // TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE = 0 + // }; + // + // =========================================================================== + xdr["enum"]("TxSetComponentType", { + txsetCompTxsMaybeDiscountedFee: 0 + }); + + // === xdr source ============================================================ + // + // typedef TransactionEnvelope TxExecutionThread<>; + // + // =========================================================================== + xdr.typedef("TxExecutionThread", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef TxExecutionThread ParallelTxExecutionStage<>; + // + // =========================================================================== + xdr.typedef("ParallelTxExecutionStage", xdr.varArray(xdr.lookup("TxExecutionThread"), 2147483647)); + + // === xdr source ============================================================ + // + // struct ParallelTxsComponent + // { + // int64* baseFee; + // ParallelTxExecutionStage executionStages<>; + // }; + // + // =========================================================================== + xdr.struct("ParallelTxsComponent", [["baseFee", xdr.option(xdr.lookup("Int64"))], ["executionStages", xdr.varArray(xdr.lookup("ParallelTxExecutionStage"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct + // { + // int64* baseFee; + // TransactionEnvelope txs<>; + // } + // + // =========================================================================== + xdr.struct("TxSetComponentTxsMaybeDiscountedFee", [["baseFee", xdr.option(xdr.lookup("Int64"))], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union TxSetComponent switch (TxSetComponentType type) + // { + // case TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE: + // struct + // { + // int64* baseFee; + // TransactionEnvelope txs<>; + // } txsMaybeDiscountedFee; + // }; + // + // =========================================================================== + xdr.union("TxSetComponent", { + switchOn: xdr.lookup("TxSetComponentType"), + switchName: "type", + switches: [["txsetCompTxsMaybeDiscountedFee", "txsMaybeDiscountedFee"]], + arms: { + txsMaybeDiscountedFee: xdr.lookup("TxSetComponentTxsMaybeDiscountedFee") + } + }); + + // === xdr source ============================================================ + // + // union TransactionPhase switch (int v) + // { + // case 0: + // TxSetComponent v0Components<>; + // case 1: + // ParallelTxsComponent parallelTxsComponent; + // }; + // + // =========================================================================== + xdr.union("TransactionPhase", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0Components"], [1, "parallelTxsComponent"]], + arms: { + v0Components: xdr.varArray(xdr.lookup("TxSetComponent"), 2147483647), + parallelTxsComponent: xdr.lookup("ParallelTxsComponent") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionSet + // { + // Hash previousLedgerHash; + // TransactionEnvelope txs<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionSet", [["previousLedgerHash", xdr.lookup("Hash")], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionSetV1 + // { + // Hash previousLedgerHash; + // TransactionPhase phases<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionSetV1", [["previousLedgerHash", xdr.lookup("Hash")], ["phases", xdr.varArray(xdr.lookup("TransactionPhase"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union GeneralizedTransactionSet switch (int v) + // { + // // We consider the legacy TransactionSet to be v0. + // case 1: + // TransactionSetV1 v1TxSet; + // }; + // + // =========================================================================== + xdr.union("GeneralizedTransactionSet", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[1, "v1TxSet"]], + arms: { + v1TxSet: xdr.lookup("TransactionSetV1") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionResultPair + // { + // Hash transactionHash; + // TransactionResult result; // result for the transaction + // }; + // + // =========================================================================== + xdr.struct("TransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("TransactionResult")]]); + + // === xdr source ============================================================ + // + // struct TransactionResultSet + // { + // TransactionResultPair results<>; + // }; + // + // =========================================================================== + xdr.struct("TransactionResultSet", [["results", xdr.varArray(xdr.lookup("TransactionResultPair"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // GeneralizedTransactionSet generalizedTxSet; + // } + // + // =========================================================================== + xdr.union("TransactionHistoryEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "generalizedTxSet"]], + arms: { + generalizedTxSet: xdr.lookup("GeneralizedTransactionSet") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionHistoryEntry + // { + // uint32 ledgerSeq; + // TransactionSet txSet; + // + // // when v != 0, txSet must be empty + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // GeneralizedTransactionSet generalizedTxSet; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionHistoryEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txSet", xdr.lookup("TransactionSet")], ["ext", xdr.lookup("TransactionHistoryEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionHistoryResultEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionHistoryResultEntry + // { + // uint32 ledgerSeq; + // TransactionResultSet txResultSet; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionHistoryResultEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txResultSet", xdr.lookup("TransactionResultSet")], ["ext", xdr.lookup("TransactionHistoryResultEntryExt")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("LedgerHeaderHistoryEntryExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct LedgerHeaderHistoryEntry + // { + // Hash hash; + // LedgerHeader header; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("LedgerHeaderHistoryEntry", [["hash", xdr.lookup("Hash")], ["header", xdr.lookup("LedgerHeader")], ["ext", xdr.lookup("LedgerHeaderHistoryEntryExt")]]); + + // === xdr source ============================================================ + // + // struct LedgerSCPMessages + // { + // uint32 ledgerSeq; + // SCPEnvelope messages<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerScpMessages", [["ledgerSeq", xdr.lookup("Uint32")], ["messages", xdr.varArray(xdr.lookup("ScpEnvelope"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct SCPHistoryEntryV0 + // { + // SCPQuorumSet quorumSets<>; // additional quorum sets used by ledgerMessages + // LedgerSCPMessages ledgerMessages; + // }; + // + // =========================================================================== + xdr.struct("ScpHistoryEntryV0", [["quorumSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)], ["ledgerMessages", xdr.lookup("LedgerScpMessages")]]); + + // === xdr source ============================================================ + // + // union SCPHistoryEntry switch (int v) + // { + // case 0: + // SCPHistoryEntryV0 v0; + // }; + // + // =========================================================================== + xdr.union("ScpHistoryEntry", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("ScpHistoryEntryV0") + } + }); + + // === xdr source ============================================================ + // + // enum LedgerEntryChangeType + // { + // LEDGER_ENTRY_CREATED = 0, // entry was added to the ledger + // LEDGER_ENTRY_UPDATED = 1, // entry was modified in the ledger + // LEDGER_ENTRY_REMOVED = 2, // entry was removed from the ledger + // LEDGER_ENTRY_STATE = 3 // value of the entry + // }; + // + // =========================================================================== + xdr["enum"]("LedgerEntryChangeType", { + ledgerEntryCreated: 0, + ledgerEntryUpdated: 1, + ledgerEntryRemoved: 2, + ledgerEntryState: 3 + }); + + // === xdr source ============================================================ + // + // union LedgerEntryChange switch (LedgerEntryChangeType type) + // { + // case LEDGER_ENTRY_CREATED: + // LedgerEntry created; + // case LEDGER_ENTRY_UPDATED: + // LedgerEntry updated; + // case LEDGER_ENTRY_REMOVED: + // LedgerKey removed; + // case LEDGER_ENTRY_STATE: + // LedgerEntry state; + // }; + // + // =========================================================================== + xdr.union("LedgerEntryChange", { + switchOn: xdr.lookup("LedgerEntryChangeType"), + switchName: "type", + switches: [["ledgerEntryCreated", "created"], ["ledgerEntryUpdated", "updated"], ["ledgerEntryRemoved", "removed"], ["ledgerEntryState", "state"]], + arms: { + created: xdr.lookup("LedgerEntry"), + updated: xdr.lookup("LedgerEntry"), + removed: xdr.lookup("LedgerKey"), + state: xdr.lookup("LedgerEntry") + } + }); + + // === xdr source ============================================================ + // + // typedef LedgerEntryChange LedgerEntryChanges<>; + // + // =========================================================================== + xdr.typedef("LedgerEntryChanges", xdr.varArray(xdr.lookup("LedgerEntryChange"), 2147483647)); + + // === xdr source ============================================================ + // + // struct OperationMeta + // { + // LedgerEntryChanges changes; + // }; + // + // =========================================================================== + xdr.struct("OperationMeta", [["changes", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV1 + // { + // LedgerEntryChanges txChanges; // tx level changes if any + // OperationMeta operations<>; // meta for each operation + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV1", [["txChanges", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV2 + // { + // LedgerEntryChanges txChangesBefore; // tx level changes before operations + // // are applied if any + // OperationMeta operations<>; // meta for each operation + // LedgerEntryChanges txChangesAfter; // tx level changes after operations are + // // applied if any + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV2", [["txChangesBefore", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)], ["txChangesAfter", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // enum ContractEventType + // { + // SYSTEM = 0, + // CONTRACT = 1, + // DIAGNOSTIC = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ContractEventType", { + system: 0, + contract: 1, + diagnostic: 2 + }); + + // === xdr source ============================================================ + // + // struct + // { + // SCVal topics<>; + // SCVal data; + // } + // + // =========================================================================== + xdr.struct("ContractEventV0", [["topics", xdr.varArray(xdr.lookup("ScVal"), 2147483647)], ["data", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // struct + // { + // SCVal topics<>; + // SCVal data; + // } v0; + // } + // + // =========================================================================== + xdr.union("ContractEventBody", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("ContractEventV0") + } + }); + + // === xdr source ============================================================ + // + // struct ContractEvent + // { + // // We can use this to add more fields, or because it + // // is first, to change ContractEvent into a union. + // ExtensionPoint ext; + // + // Hash* contractID; + // ContractEventType type; + // + // union switch (int v) + // { + // case 0: + // struct + // { + // SCVal topics<>; + // SCVal data; + // } v0; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("ContractEvent", [["ext", xdr.lookup("ExtensionPoint")], ["contractId", xdr.option(xdr.lookup("Hash"))], ["type", xdr.lookup("ContractEventType")], ["body", xdr.lookup("ContractEventBody")]]); + + // === xdr source ============================================================ + // + // struct DiagnosticEvent + // { + // bool inSuccessfulContractCall; + // ContractEvent event; + // }; + // + // =========================================================================== + xdr.struct("DiagnosticEvent", [["inSuccessfulContractCall", xdr.bool()], ["event", xdr.lookup("ContractEvent")]]); + + // === xdr source ============================================================ + // + // struct SorobanTransactionMetaExtV1 + // { + // ExtensionPoint ext; + // + // // The following are the components of the overall Soroban resource fee + // // charged for the transaction. + // // The following relation holds: + // // `resourceFeeCharged = totalNonRefundableResourceFeeCharged + totalRefundableResourceFeeCharged` + // // where `resourceFeeCharged` is the overall fee charged for the + // // transaction. Also, `resourceFeeCharged` <= `sorobanData.resourceFee` + // // i.e.we never charge more than the declared resource fee. + // // The inclusion fee for charged the Soroban transaction can be found using + // // the following equation: + // // `result.feeCharged = resourceFeeCharged + inclusionFeeCharged`. + // + // // Total amount (in stroops) that has been charged for non-refundable + // // Soroban resources. + // // Non-refundable resources are charged based on the usage declared in + // // the transaction envelope (such as `instructions`, `readBytes` etc.) and + // // is charged regardless of the success of the transaction. + // int64 totalNonRefundableResourceFeeCharged; + // // Total amount (in stroops) that has been charged for refundable + // // Soroban resource fees. + // // Currently this comprises the rent fee (`rentFeeCharged`) and the + // // fee for the events and return value. + // // Refundable resources are charged based on the actual resources usage. + // // Since currently refundable resources are only used for the successful + // // transactions, this will be `0` for failed transactions. + // int64 totalRefundableResourceFeeCharged; + // // Amount (in stroops) that has been charged for rent. + // // This is a part of `totalNonRefundableResourceFeeCharged`. + // int64 rentFeeCharged; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionMetaExtV1", [["ext", xdr.lookup("ExtensionPoint")], ["totalNonRefundableResourceFeeCharged", xdr.lookup("Int64")], ["totalRefundableResourceFeeCharged", xdr.lookup("Int64")], ["rentFeeCharged", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union SorobanTransactionMetaExt switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionMetaExtV1 v1; + // }; + // + // =========================================================================== + xdr.union("SorobanTransactionMetaExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("SorobanTransactionMetaExtV1") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanTransactionMeta + // { + // SorobanTransactionMetaExt ext; + // + // ContractEvent events<>; // custom events populated by the + // // contracts themselves. + // SCVal returnValue; // return value of the host fn invocation + // + // // Diagnostics events that are not hashed. + // // This will contain all contract and diagnostic events. Even ones + // // that were emitted in a failed contract call. + // DiagnosticEvent diagnosticEvents<>; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionMeta", [["ext", xdr.lookup("SorobanTransactionMetaExt")], ["events", xdr.varArray(xdr.lookup("ContractEvent"), 2147483647)], ["returnValue", xdr.lookup("ScVal")], ["diagnosticEvents", xdr.varArray(xdr.lookup("DiagnosticEvent"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct TransactionMetaV3 + // { + // ExtensionPoint ext; + // + // LedgerEntryChanges txChangesBefore; // tx level changes before operations + // // are applied if any + // OperationMeta operations<>; // meta for each operation + // LedgerEntryChanges txChangesAfter; // tx level changes after operations are + // // applied if any + // SorobanTransactionMeta* sorobanMeta; // Soroban-specific meta (only for + // // Soroban transactions). + // }; + // + // =========================================================================== + xdr.struct("TransactionMetaV3", [["ext", xdr.lookup("ExtensionPoint")], ["txChangesBefore", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)], ["txChangesAfter", xdr.lookup("LedgerEntryChanges")], ["sorobanMeta", xdr.option(xdr.lookup("SorobanTransactionMeta"))]]); + + // === xdr source ============================================================ + // + // struct InvokeHostFunctionSuccessPreImage + // { + // SCVal returnValue; + // ContractEvent events<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeHostFunctionSuccessPreImage", [["returnValue", xdr.lookup("ScVal")], ["events", xdr.varArray(xdr.lookup("ContractEvent"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union TransactionMeta switch (int v) + // { + // case 0: + // OperationMeta operations<>; + // case 1: + // TransactionMetaV1 v1; + // case 2: + // TransactionMetaV2 v2; + // case 3: + // TransactionMetaV3 v3; + // }; + // + // =========================================================================== + xdr.union("TransactionMeta", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "operations"], [1, "v1"], [2, "v2"], [3, "v3"]], + arms: { + operations: xdr.varArray(xdr.lookup("OperationMeta"), 2147483647), + v1: xdr.lookup("TransactionMetaV1"), + v2: xdr.lookup("TransactionMetaV2"), + v3: xdr.lookup("TransactionMetaV3") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionResultMeta + // { + // TransactionResultPair result; + // LedgerEntryChanges feeProcessing; + // TransactionMeta txApplyProcessing; + // }; + // + // =========================================================================== + xdr.struct("TransactionResultMeta", [["result", xdr.lookup("TransactionResultPair")], ["feeProcessing", xdr.lookup("LedgerEntryChanges")], ["txApplyProcessing", xdr.lookup("TransactionMeta")]]); + + // === xdr source ============================================================ + // + // struct UpgradeEntryMeta + // { + // LedgerUpgrade upgrade; + // LedgerEntryChanges changes; + // }; + // + // =========================================================================== + xdr.struct("UpgradeEntryMeta", [["upgrade", xdr.lookup("LedgerUpgrade")], ["changes", xdr.lookup("LedgerEntryChanges")]]); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaV0 + // { + // LedgerHeaderHistoryEntry ledgerHeader; + // // NB: txSet is sorted in "Hash order" + // TransactionSet txSet; + // + // // NB: transactions are sorted in apply order here + // // fees for all transactions are processed first + // // followed by applying transactions + // TransactionResultMeta txProcessing<>; + // + // // upgrades are applied last + // UpgradeEntryMeta upgradesProcessing<>; + // + // // other misc information attached to the ledger close + // SCPHistoryEntry scpInfo<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaV0", [["ledgerHeader", xdr.lookup("LedgerHeaderHistoryEntry")], ["txSet", xdr.lookup("TransactionSet")], ["txProcessing", xdr.varArray(xdr.lookup("TransactionResultMeta"), 2147483647)], ["upgradesProcessing", xdr.varArray(xdr.lookup("UpgradeEntryMeta"), 2147483647)], ["scpInfo", xdr.varArray(xdr.lookup("ScpHistoryEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaExtV1 + // { + // ExtensionPoint ext; + // int64 sorobanFeeWrite1KB; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaExtV1", [["ext", xdr.lookup("ExtensionPoint")], ["sorobanFeeWrite1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union LedgerCloseMetaExt switch (int v) + // { + // case 0: + // void; + // case 1: + // LedgerCloseMetaExtV1 v1; + // }; + // + // =========================================================================== + xdr.union("LedgerCloseMetaExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "v1"]], + arms: { + v1: xdr.lookup("LedgerCloseMetaExtV1") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerCloseMetaV1 + // { + // LedgerCloseMetaExt ext; + // + // LedgerHeaderHistoryEntry ledgerHeader; + // + // GeneralizedTransactionSet txSet; + // + // // NB: transactions are sorted in apply order here + // // fees for all transactions are processed first + // // followed by applying transactions + // TransactionResultMeta txProcessing<>; + // + // // upgrades are applied last + // UpgradeEntryMeta upgradesProcessing<>; + // + // // other misc information attached to the ledger close + // SCPHistoryEntry scpInfo<>; + // + // // Size in bytes of BucketList, to support downstream + // // systems calculating storage fees correctly. + // uint64 totalByteSizeOfBucketList; + // + // // Temp keys that are being evicted at this ledger. + // LedgerKey evictedTemporaryLedgerKeys<>; + // + // // Archived restorable ledger entries that are being + // // evicted at this ledger. + // LedgerEntry evictedPersistentLedgerEntries<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerCloseMetaV1", [["ext", xdr.lookup("LedgerCloseMetaExt")], ["ledgerHeader", xdr.lookup("LedgerHeaderHistoryEntry")], ["txSet", xdr.lookup("GeneralizedTransactionSet")], ["txProcessing", xdr.varArray(xdr.lookup("TransactionResultMeta"), 2147483647)], ["upgradesProcessing", xdr.varArray(xdr.lookup("UpgradeEntryMeta"), 2147483647)], ["scpInfo", xdr.varArray(xdr.lookup("ScpHistoryEntry"), 2147483647)], ["totalByteSizeOfBucketList", xdr.lookup("Uint64")], ["evictedTemporaryLedgerKeys", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["evictedPersistentLedgerEntries", xdr.varArray(xdr.lookup("LedgerEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union LedgerCloseMeta switch (int v) + // { + // case 0: + // LedgerCloseMetaV0 v0; + // case 1: + // LedgerCloseMetaV1 v1; + // }; + // + // =========================================================================== + xdr.union("LedgerCloseMeta", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, "v0"], [1, "v1"]], + arms: { + v0: xdr.lookup("LedgerCloseMetaV0"), + v1: xdr.lookup("LedgerCloseMetaV1") + } + }); + + // === xdr source ============================================================ + // + // enum ErrorCode + // { + // ERR_MISC = 0, // Unspecific error + // ERR_DATA = 1, // Malformed data + // ERR_CONF = 2, // Misconfiguration error + // ERR_AUTH = 3, // Authentication failure + // ERR_LOAD = 4 // System overloaded + // }; + // + // =========================================================================== + xdr["enum"]("ErrorCode", { + errMisc: 0, + errData: 1, + errConf: 2, + errAuth: 3, + errLoad: 4 + }); + + // === xdr source ============================================================ + // + // struct Error + // { + // ErrorCode code; + // string msg<100>; + // }; + // + // =========================================================================== + xdr.struct("Error", [["code", xdr.lookup("ErrorCode")], ["msg", xdr.string(100)]]); + + // === xdr source ============================================================ + // + // struct SendMore + // { + // uint32 numMessages; + // }; + // + // =========================================================================== + xdr.struct("SendMore", [["numMessages", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SendMoreExtended + // { + // uint32 numMessages; + // uint32 numBytes; + // }; + // + // =========================================================================== + xdr.struct("SendMoreExtended", [["numMessages", xdr.lookup("Uint32")], ["numBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct AuthCert + // { + // Curve25519Public pubkey; + // uint64 expiration; + // Signature sig; + // }; + // + // =========================================================================== + xdr.struct("AuthCert", [["pubkey", xdr.lookup("Curve25519Public")], ["expiration", xdr.lookup("Uint64")], ["sig", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // struct Hello + // { + // uint32 ledgerVersion; + // uint32 overlayVersion; + // uint32 overlayMinVersion; + // Hash networkID; + // string versionStr<100>; + // int listeningPort; + // NodeID peerID; + // AuthCert cert; + // uint256 nonce; + // }; + // + // =========================================================================== + xdr.struct("Hello", [["ledgerVersion", xdr.lookup("Uint32")], ["overlayVersion", xdr.lookup("Uint32")], ["overlayMinVersion", xdr.lookup("Uint32")], ["networkId", xdr.lookup("Hash")], ["versionStr", xdr.string(100)], ["listeningPort", xdr["int"]()], ["peerId", xdr.lookup("NodeId")], ["cert", xdr.lookup("AuthCert")], ["nonce", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // const AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED = 200; + // + // =========================================================================== + xdr["const"]("AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED", 200); + + // === xdr source ============================================================ + // + // struct Auth + // { + // int flags; + // }; + // + // =========================================================================== + xdr.struct("Auth", [["flags", xdr["int"]()]]); + + // === xdr source ============================================================ + // + // enum IPAddrType + // { + // IPv4 = 0, + // IPv6 = 1 + // }; + // + // =========================================================================== + xdr["enum"]("IpAddrType", { + iPv4: 0, + iPv6: 1 + }); + + // === xdr source ============================================================ + // + // union switch (IPAddrType type) + // { + // case IPv4: + // opaque ipv4[4]; + // case IPv6: + // opaque ipv6[16]; + // } + // + // =========================================================================== + xdr.union("PeerAddressIp", { + switchOn: xdr.lookup("IpAddrType"), + switchName: "type", + switches: [["iPv4", "ipv4"], ["iPv6", "ipv6"]], + arms: { + ipv4: xdr.opaque(4), + ipv6: xdr.opaque(16) + } + }); + + // === xdr source ============================================================ + // + // struct PeerAddress + // { + // union switch (IPAddrType type) + // { + // case IPv4: + // opaque ipv4[4]; + // case IPv6: + // opaque ipv6[16]; + // } + // ip; + // uint32 port; + // uint32 numFailures; + // }; + // + // =========================================================================== + xdr.struct("PeerAddress", [["ip", xdr.lookup("PeerAddressIp")], ["port", xdr.lookup("Uint32")], ["numFailures", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // enum MessageType + // { + // ERROR_MSG = 0, + // AUTH = 2, + // DONT_HAVE = 3, + // + // GET_PEERS = 4, // gets a list of peers this guy knows about + // PEERS = 5, + // + // GET_TX_SET = 6, // gets a particular txset by hash + // TX_SET = 7, + // GENERALIZED_TX_SET = 17, + // + // TRANSACTION = 8, // pass on a tx you have heard about + // + // // SCP + // GET_SCP_QUORUMSET = 9, + // SCP_QUORUMSET = 10, + // SCP_MESSAGE = 11, + // GET_SCP_STATE = 12, + // + // // new messages + // HELLO = 13, + // + // SURVEY_REQUEST = 14, + // SURVEY_RESPONSE = 15, + // + // SEND_MORE = 16, + // SEND_MORE_EXTENDED = 20, + // + // FLOOD_ADVERT = 18, + // FLOOD_DEMAND = 19, + // + // TIME_SLICED_SURVEY_REQUEST = 21, + // TIME_SLICED_SURVEY_RESPONSE = 22, + // TIME_SLICED_SURVEY_START_COLLECTING = 23, + // TIME_SLICED_SURVEY_STOP_COLLECTING = 24 + // }; + // + // =========================================================================== + xdr["enum"]("MessageType", { + errorMsg: 0, + auth: 2, + dontHave: 3, + getPeers: 4, + peers: 5, + getTxSet: 6, + txSet: 7, + generalizedTxSet: 17, + transaction: 8, + getScpQuorumset: 9, + scpQuorumset: 10, + scpMessage: 11, + getScpState: 12, + hello: 13, + surveyRequest: 14, + surveyResponse: 15, + sendMore: 16, + sendMoreExtended: 20, + floodAdvert: 18, + floodDemand: 19, + timeSlicedSurveyRequest: 21, + timeSlicedSurveyResponse: 22, + timeSlicedSurveyStartCollecting: 23, + timeSlicedSurveyStopCollecting: 24 + }); + + // === xdr source ============================================================ + // + // struct DontHave + // { + // MessageType type; + // uint256 reqHash; + // }; + // + // =========================================================================== + xdr.struct("DontHave", [["type", xdr.lookup("MessageType")], ["reqHash", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // enum SurveyMessageCommandType + // { + // SURVEY_TOPOLOGY = 0, + // TIME_SLICED_SURVEY_TOPOLOGY = 1 + // }; + // + // =========================================================================== + xdr["enum"]("SurveyMessageCommandType", { + surveyTopology: 0, + timeSlicedSurveyTopology: 1 + }); + + // === xdr source ============================================================ + // + // enum SurveyMessageResponseType + // { + // SURVEY_TOPOLOGY_RESPONSE_V0 = 0, + // SURVEY_TOPOLOGY_RESPONSE_V1 = 1, + // SURVEY_TOPOLOGY_RESPONSE_V2 = 2 + // }; + // + // =========================================================================== + xdr["enum"]("SurveyMessageResponseType", { + surveyTopologyResponseV0: 0, + surveyTopologyResponseV1: 1, + surveyTopologyResponseV2: 2 + }); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyStartCollectingMessage + // { + // NodeID surveyorID; + // uint32 nonce; + // uint32 ledgerNum; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyStartCollectingMessage", [["surveyorId", xdr.lookup("NodeId")], ["nonce", xdr.lookup("Uint32")], ["ledgerNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyStartCollectingMessage + // { + // Signature signature; + // TimeSlicedSurveyStartCollectingMessage startCollecting; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyStartCollectingMessage", [["signature", xdr.lookup("Signature")], ["startCollecting", xdr.lookup("TimeSlicedSurveyStartCollectingMessage")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyStopCollectingMessage + // { + // NodeID surveyorID; + // uint32 nonce; + // uint32 ledgerNum; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyStopCollectingMessage", [["surveyorId", xdr.lookup("NodeId")], ["nonce", xdr.lookup("Uint32")], ["ledgerNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyStopCollectingMessage + // { + // Signature signature; + // TimeSlicedSurveyStopCollectingMessage stopCollecting; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyStopCollectingMessage", [["signature", xdr.lookup("Signature")], ["stopCollecting", xdr.lookup("TimeSlicedSurveyStopCollectingMessage")]]); + + // === xdr source ============================================================ + // + // struct SurveyRequestMessage + // { + // NodeID surveyorPeerID; + // NodeID surveyedPeerID; + // uint32 ledgerNum; + // Curve25519Public encryptionKey; + // SurveyMessageCommandType commandType; + // }; + // + // =========================================================================== + xdr.struct("SurveyRequestMessage", [["surveyorPeerId", xdr.lookup("NodeId")], ["surveyedPeerId", xdr.lookup("NodeId")], ["ledgerNum", xdr.lookup("Uint32")], ["encryptionKey", xdr.lookup("Curve25519Public")], ["commandType", xdr.lookup("SurveyMessageCommandType")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyRequestMessage + // { + // SurveyRequestMessage request; + // uint32 nonce; + // uint32 inboundPeersIndex; + // uint32 outboundPeersIndex; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyRequestMessage", [["request", xdr.lookup("SurveyRequestMessage")], ["nonce", xdr.lookup("Uint32")], ["inboundPeersIndex", xdr.lookup("Uint32")], ["outboundPeersIndex", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedSurveyRequestMessage + // { + // Signature requestSignature; + // SurveyRequestMessage request; + // }; + // + // =========================================================================== + xdr.struct("SignedSurveyRequestMessage", [["requestSignature", xdr.lookup("Signature")], ["request", xdr.lookup("SurveyRequestMessage")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyRequestMessage + // { + // Signature requestSignature; + // TimeSlicedSurveyRequestMessage request; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyRequestMessage", [["requestSignature", xdr.lookup("Signature")], ["request", xdr.lookup("TimeSlicedSurveyRequestMessage")]]); + + // === xdr source ============================================================ + // + // typedef opaque EncryptedBody<64000>; + // + // =========================================================================== + xdr.typedef("EncryptedBody", xdr.varOpaque(64000)); + + // === xdr source ============================================================ + // + // struct SurveyResponseMessage + // { + // NodeID surveyorPeerID; + // NodeID surveyedPeerID; + // uint32 ledgerNum; + // SurveyMessageCommandType commandType; + // EncryptedBody encryptedBody; + // }; + // + // =========================================================================== + xdr.struct("SurveyResponseMessage", [["surveyorPeerId", xdr.lookup("NodeId")], ["surveyedPeerId", xdr.lookup("NodeId")], ["ledgerNum", xdr.lookup("Uint32")], ["commandType", xdr.lookup("SurveyMessageCommandType")], ["encryptedBody", xdr.lookup("EncryptedBody")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedSurveyResponseMessage + // { + // SurveyResponseMessage response; + // uint32 nonce; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedSurveyResponseMessage", [["response", xdr.lookup("SurveyResponseMessage")], ["nonce", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SignedSurveyResponseMessage + // { + // Signature responseSignature; + // SurveyResponseMessage response; + // }; + // + // =========================================================================== + xdr.struct("SignedSurveyResponseMessage", [["responseSignature", xdr.lookup("Signature")], ["response", xdr.lookup("SurveyResponseMessage")]]); + + // === xdr source ============================================================ + // + // struct SignedTimeSlicedSurveyResponseMessage + // { + // Signature responseSignature; + // TimeSlicedSurveyResponseMessage response; + // }; + // + // =========================================================================== + xdr.struct("SignedTimeSlicedSurveyResponseMessage", [["responseSignature", xdr.lookup("Signature")], ["response", xdr.lookup("TimeSlicedSurveyResponseMessage")]]); + + // === xdr source ============================================================ + // + // struct PeerStats + // { + // NodeID id; + // string versionStr<100>; + // uint64 messagesRead; + // uint64 messagesWritten; + // uint64 bytesRead; + // uint64 bytesWritten; + // uint64 secondsConnected; + // + // uint64 uniqueFloodBytesRecv; + // uint64 duplicateFloodBytesRecv; + // uint64 uniqueFetchBytesRecv; + // uint64 duplicateFetchBytesRecv; + // + // uint64 uniqueFloodMessageRecv; + // uint64 duplicateFloodMessageRecv; + // uint64 uniqueFetchMessageRecv; + // uint64 duplicateFetchMessageRecv; + // }; + // + // =========================================================================== + xdr.struct("PeerStats", [["id", xdr.lookup("NodeId")], ["versionStr", xdr.string(100)], ["messagesRead", xdr.lookup("Uint64")], ["messagesWritten", xdr.lookup("Uint64")], ["bytesRead", xdr.lookup("Uint64")], ["bytesWritten", xdr.lookup("Uint64")], ["secondsConnected", xdr.lookup("Uint64")], ["uniqueFloodBytesRecv", xdr.lookup("Uint64")], ["duplicateFloodBytesRecv", xdr.lookup("Uint64")], ["uniqueFetchBytesRecv", xdr.lookup("Uint64")], ["duplicateFetchBytesRecv", xdr.lookup("Uint64")], ["uniqueFloodMessageRecv", xdr.lookup("Uint64")], ["duplicateFloodMessageRecv", xdr.lookup("Uint64")], ["uniqueFetchMessageRecv", xdr.lookup("Uint64")], ["duplicateFetchMessageRecv", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // typedef PeerStats PeerStatList<25>; + // + // =========================================================================== + xdr.typedef("PeerStatList", xdr.varArray(xdr.lookup("PeerStats"), 25)); + + // === xdr source ============================================================ + // + // struct TimeSlicedNodeData + // { + // uint32 addedAuthenticatedPeers; + // uint32 droppedAuthenticatedPeers; + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // + // // SCP stats + // uint32 p75SCPFirstToSelfLatencyMs; + // uint32 p75SCPSelfToOtherLatencyMs; + // + // // How many times the node lost sync in the time slice + // uint32 lostSyncCount; + // + // // Config data + // bool isValidator; + // uint32 maxInboundPeerCount; + // uint32 maxOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedNodeData", [["addedAuthenticatedPeers", xdr.lookup("Uint32")], ["droppedAuthenticatedPeers", xdr.lookup("Uint32")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")], ["p75ScpFirstToSelfLatencyMs", xdr.lookup("Uint32")], ["p75ScpSelfToOtherLatencyMs", xdr.lookup("Uint32")], ["lostSyncCount", xdr.lookup("Uint32")], ["isValidator", xdr.bool()], ["maxInboundPeerCount", xdr.lookup("Uint32")], ["maxOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TimeSlicedPeerData + // { + // PeerStats peerStats; + // uint32 averageLatencyMs; + // }; + // + // =========================================================================== + xdr.struct("TimeSlicedPeerData", [["peerStats", xdr.lookup("PeerStats")], ["averageLatencyMs", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // typedef TimeSlicedPeerData TimeSlicedPeerDataList<25>; + // + // =========================================================================== + xdr.typedef("TimeSlicedPeerDataList", xdr.varArray(xdr.lookup("TimeSlicedPeerData"), 25)); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV0 + // { + // PeerStatList inboundPeers; + // PeerStatList outboundPeers; + // + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV0", [["inboundPeers", xdr.lookup("PeerStatList")], ["outboundPeers", xdr.lookup("PeerStatList")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV1 + // { + // PeerStatList inboundPeers; + // PeerStatList outboundPeers; + // + // uint32 totalInboundPeerCount; + // uint32 totalOutboundPeerCount; + // + // uint32 maxInboundPeerCount; + // uint32 maxOutboundPeerCount; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV1", [["inboundPeers", xdr.lookup("PeerStatList")], ["outboundPeers", xdr.lookup("PeerStatList")], ["totalInboundPeerCount", xdr.lookup("Uint32")], ["totalOutboundPeerCount", xdr.lookup("Uint32")], ["maxInboundPeerCount", xdr.lookup("Uint32")], ["maxOutboundPeerCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct TopologyResponseBodyV2 + // { + // TimeSlicedPeerDataList inboundPeers; + // TimeSlicedPeerDataList outboundPeers; + // TimeSlicedNodeData nodeData; + // }; + // + // =========================================================================== + xdr.struct("TopologyResponseBodyV2", [["inboundPeers", xdr.lookup("TimeSlicedPeerDataList")], ["outboundPeers", xdr.lookup("TimeSlicedPeerDataList")], ["nodeData", xdr.lookup("TimeSlicedNodeData")]]); + + // === xdr source ============================================================ + // + // union SurveyResponseBody switch (SurveyMessageResponseType type) + // { + // case SURVEY_TOPOLOGY_RESPONSE_V0: + // TopologyResponseBodyV0 topologyResponseBodyV0; + // case SURVEY_TOPOLOGY_RESPONSE_V1: + // TopologyResponseBodyV1 topologyResponseBodyV1; + // case SURVEY_TOPOLOGY_RESPONSE_V2: + // TopologyResponseBodyV2 topologyResponseBodyV2; + // }; + // + // =========================================================================== + xdr.union("SurveyResponseBody", { + switchOn: xdr.lookup("SurveyMessageResponseType"), + switchName: "type", + switches: [["surveyTopologyResponseV0", "topologyResponseBodyV0"], ["surveyTopologyResponseV1", "topologyResponseBodyV1"], ["surveyTopologyResponseV2", "topologyResponseBodyV2"]], + arms: { + topologyResponseBodyV0: xdr.lookup("TopologyResponseBodyV0"), + topologyResponseBodyV1: xdr.lookup("TopologyResponseBodyV1"), + topologyResponseBodyV2: xdr.lookup("TopologyResponseBodyV2") + } + }); + + // === xdr source ============================================================ + // + // const TX_ADVERT_VECTOR_MAX_SIZE = 1000; + // + // =========================================================================== + xdr["const"]("TX_ADVERT_VECTOR_MAX_SIZE", 1000); + + // === xdr source ============================================================ + // + // typedef Hash TxAdvertVector; + // + // =========================================================================== + xdr.typedef("TxAdvertVector", xdr.varArray(xdr.lookup("Hash"), xdr.lookup("TX_ADVERT_VECTOR_MAX_SIZE"))); + + // === xdr source ============================================================ + // + // struct FloodAdvert + // { + // TxAdvertVector txHashes; + // }; + // + // =========================================================================== + xdr.struct("FloodAdvert", [["txHashes", xdr.lookup("TxAdvertVector")]]); + + // === xdr source ============================================================ + // + // const TX_DEMAND_VECTOR_MAX_SIZE = 1000; + // + // =========================================================================== + xdr["const"]("TX_DEMAND_VECTOR_MAX_SIZE", 1000); + + // === xdr source ============================================================ + // + // typedef Hash TxDemandVector; + // + // =========================================================================== + xdr.typedef("TxDemandVector", xdr.varArray(xdr.lookup("Hash"), xdr.lookup("TX_DEMAND_VECTOR_MAX_SIZE"))); + + // === xdr source ============================================================ + // + // struct FloodDemand + // { + // TxDemandVector txHashes; + // }; + // + // =========================================================================== + xdr.struct("FloodDemand", [["txHashes", xdr.lookup("TxDemandVector")]]); + + // === xdr source ============================================================ + // + // union StellarMessage switch (MessageType type) + // { + // case ERROR_MSG: + // Error error; + // case HELLO: + // Hello hello; + // case AUTH: + // Auth auth; + // case DONT_HAVE: + // DontHave dontHave; + // case GET_PEERS: + // void; + // case PEERS: + // PeerAddress peers<100>; + // + // case GET_TX_SET: + // uint256 txSetHash; + // case TX_SET: + // TransactionSet txSet; + // case GENERALIZED_TX_SET: + // GeneralizedTransactionSet generalizedTxSet; + // + // case TRANSACTION: + // TransactionEnvelope transaction; + // + // case SURVEY_REQUEST: + // SignedSurveyRequestMessage signedSurveyRequestMessage; + // + // case SURVEY_RESPONSE: + // SignedSurveyResponseMessage signedSurveyResponseMessage; + // + // case TIME_SLICED_SURVEY_REQUEST: + // SignedTimeSlicedSurveyRequestMessage signedTimeSlicedSurveyRequestMessage; + // + // case TIME_SLICED_SURVEY_RESPONSE: + // SignedTimeSlicedSurveyResponseMessage signedTimeSlicedSurveyResponseMessage; + // + // case TIME_SLICED_SURVEY_START_COLLECTING: + // SignedTimeSlicedSurveyStartCollectingMessage + // signedTimeSlicedSurveyStartCollectingMessage; + // + // case TIME_SLICED_SURVEY_STOP_COLLECTING: + // SignedTimeSlicedSurveyStopCollectingMessage + // signedTimeSlicedSurveyStopCollectingMessage; + // + // // SCP + // case GET_SCP_QUORUMSET: + // uint256 qSetHash; + // case SCP_QUORUMSET: + // SCPQuorumSet qSet; + // case SCP_MESSAGE: + // SCPEnvelope envelope; + // case GET_SCP_STATE: + // uint32 getSCPLedgerSeq; // ledger seq requested ; if 0, requests the latest + // case SEND_MORE: + // SendMore sendMoreMessage; + // case SEND_MORE_EXTENDED: + // SendMoreExtended sendMoreExtendedMessage; + // // Pull mode + // case FLOOD_ADVERT: + // FloodAdvert floodAdvert; + // case FLOOD_DEMAND: + // FloodDemand floodDemand; + // }; + // + // =========================================================================== + xdr.union("StellarMessage", { + switchOn: xdr.lookup("MessageType"), + switchName: "type", + switches: [["errorMsg", "error"], ["hello", "hello"], ["auth", "auth"], ["dontHave", "dontHave"], ["getPeers", xdr["void"]()], ["peers", "peers"], ["getTxSet", "txSetHash"], ["txSet", "txSet"], ["generalizedTxSet", "generalizedTxSet"], ["transaction", "transaction"], ["surveyRequest", "signedSurveyRequestMessage"], ["surveyResponse", "signedSurveyResponseMessage"], ["timeSlicedSurveyRequest", "signedTimeSlicedSurveyRequestMessage"], ["timeSlicedSurveyResponse", "signedTimeSlicedSurveyResponseMessage"], ["timeSlicedSurveyStartCollecting", "signedTimeSlicedSurveyStartCollectingMessage"], ["timeSlicedSurveyStopCollecting", "signedTimeSlicedSurveyStopCollectingMessage"], ["getScpQuorumset", "qSetHash"], ["scpQuorumset", "qSet"], ["scpMessage", "envelope"], ["getScpState", "getScpLedgerSeq"], ["sendMore", "sendMoreMessage"], ["sendMoreExtended", "sendMoreExtendedMessage"], ["floodAdvert", "floodAdvert"], ["floodDemand", "floodDemand"]], + arms: { + error: xdr.lookup("Error"), + hello: xdr.lookup("Hello"), + auth: xdr.lookup("Auth"), + dontHave: xdr.lookup("DontHave"), + peers: xdr.varArray(xdr.lookup("PeerAddress"), 100), + txSetHash: xdr.lookup("Uint256"), + txSet: xdr.lookup("TransactionSet"), + generalizedTxSet: xdr.lookup("GeneralizedTransactionSet"), + transaction: xdr.lookup("TransactionEnvelope"), + signedSurveyRequestMessage: xdr.lookup("SignedSurveyRequestMessage"), + signedSurveyResponseMessage: xdr.lookup("SignedSurveyResponseMessage"), + signedTimeSlicedSurveyRequestMessage: xdr.lookup("SignedTimeSlicedSurveyRequestMessage"), + signedTimeSlicedSurveyResponseMessage: xdr.lookup("SignedTimeSlicedSurveyResponseMessage"), + signedTimeSlicedSurveyStartCollectingMessage: xdr.lookup("SignedTimeSlicedSurveyStartCollectingMessage"), + signedTimeSlicedSurveyStopCollectingMessage: xdr.lookup("SignedTimeSlicedSurveyStopCollectingMessage"), + qSetHash: xdr.lookup("Uint256"), + qSet: xdr.lookup("ScpQuorumSet"), + envelope: xdr.lookup("ScpEnvelope"), + getScpLedgerSeq: xdr.lookup("Uint32"), + sendMoreMessage: xdr.lookup("SendMore"), + sendMoreExtendedMessage: xdr.lookup("SendMoreExtended"), + floodAdvert: xdr.lookup("FloodAdvert"), + floodDemand: xdr.lookup("FloodDemand") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // uint64 sequence; + // StellarMessage message; + // HmacSha256Mac mac; + // } + // + // =========================================================================== + xdr.struct("AuthenticatedMessageV0", [["sequence", xdr.lookup("Uint64")], ["message", xdr.lookup("StellarMessage")], ["mac", xdr.lookup("HmacSha256Mac")]]); + + // === xdr source ============================================================ + // + // union AuthenticatedMessage switch (uint32 v) + // { + // case 0: + // struct + // { + // uint64 sequence; + // StellarMessage message; + // HmacSha256Mac mac; + // } v0; + // }; + // + // =========================================================================== + xdr.union("AuthenticatedMessage", { + switchOn: xdr.lookup("Uint32"), + switchName: "v", + switches: [[0, "v0"]], + arms: { + v0: xdr.lookup("AuthenticatedMessageV0") + } + }); + + // === xdr source ============================================================ + // + // const MAX_OPS_PER_TX = 100; + // + // =========================================================================== + xdr["const"]("MAX_OPS_PER_TX", 100); + + // === xdr source ============================================================ + // + // union LiquidityPoolParameters switch (LiquidityPoolType type) + // { + // case LIQUIDITY_POOL_CONSTANT_PRODUCT: + // LiquidityPoolConstantProductParameters constantProduct; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolParameters", { + switchOn: xdr.lookup("LiquidityPoolType"), + switchName: "type", + switches: [["liquidityPoolConstantProduct", "constantProduct"]], + arms: { + constantProduct: xdr.lookup("LiquidityPoolConstantProductParameters") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // uint64 id; + // uint256 ed25519; + // } + // + // =========================================================================== + xdr.struct("MuxedAccountMed25519", [["id", xdr.lookup("Uint64")], ["ed25519", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // union MuxedAccount switch (CryptoKeyType type) + // { + // case KEY_TYPE_ED25519: + // uint256 ed25519; + // case KEY_TYPE_MUXED_ED25519: + // struct + // { + // uint64 id; + // uint256 ed25519; + // } med25519; + // }; + // + // =========================================================================== + xdr.union("MuxedAccount", { + switchOn: xdr.lookup("CryptoKeyType"), + switchName: "type", + switches: [["keyTypeEd25519", "ed25519"], ["keyTypeMuxedEd25519", "med25519"]], + arms: { + ed25519: xdr.lookup("Uint256"), + med25519: xdr.lookup("MuxedAccountMed25519") + } + }); + + // === xdr source ============================================================ + // + // struct DecoratedSignature + // { + // SignatureHint hint; // last 4 bytes of the public key, used as a hint + // Signature signature; // actual signature + // }; + // + // =========================================================================== + xdr.struct("DecoratedSignature", [["hint", xdr.lookup("SignatureHint")], ["signature", xdr.lookup("Signature")]]); + + // === xdr source ============================================================ + // + // enum OperationType + // { + // CREATE_ACCOUNT = 0, + // PAYMENT = 1, + // PATH_PAYMENT_STRICT_RECEIVE = 2, + // MANAGE_SELL_OFFER = 3, + // CREATE_PASSIVE_SELL_OFFER = 4, + // SET_OPTIONS = 5, + // CHANGE_TRUST = 6, + // ALLOW_TRUST = 7, + // ACCOUNT_MERGE = 8, + // INFLATION = 9, + // MANAGE_DATA = 10, + // BUMP_SEQUENCE = 11, + // MANAGE_BUY_OFFER = 12, + // PATH_PAYMENT_STRICT_SEND = 13, + // CREATE_CLAIMABLE_BALANCE = 14, + // CLAIM_CLAIMABLE_BALANCE = 15, + // BEGIN_SPONSORING_FUTURE_RESERVES = 16, + // END_SPONSORING_FUTURE_RESERVES = 17, + // REVOKE_SPONSORSHIP = 18, + // CLAWBACK = 19, + // CLAWBACK_CLAIMABLE_BALANCE = 20, + // SET_TRUST_LINE_FLAGS = 21, + // LIQUIDITY_POOL_DEPOSIT = 22, + // LIQUIDITY_POOL_WITHDRAW = 23, + // INVOKE_HOST_FUNCTION = 24, + // EXTEND_FOOTPRINT_TTL = 25, + // RESTORE_FOOTPRINT = 26 + // }; + // + // =========================================================================== + xdr["enum"]("OperationType", { + createAccount: 0, + payment: 1, + pathPaymentStrictReceive: 2, + manageSellOffer: 3, + createPassiveSellOffer: 4, + setOptions: 5, + changeTrust: 6, + allowTrust: 7, + accountMerge: 8, + inflation: 9, + manageData: 10, + bumpSequence: 11, + manageBuyOffer: 12, + pathPaymentStrictSend: 13, + createClaimableBalance: 14, + claimClaimableBalance: 15, + beginSponsoringFutureReserves: 16, + endSponsoringFutureReserves: 17, + revokeSponsorship: 18, + clawback: 19, + clawbackClaimableBalance: 20, + setTrustLineFlags: 21, + liquidityPoolDeposit: 22, + liquidityPoolWithdraw: 23, + invokeHostFunction: 24, + extendFootprintTtl: 25, + restoreFootprint: 26 + }); + + // === xdr source ============================================================ + // + // struct CreateAccountOp + // { + // AccountID destination; // account to create + // int64 startingBalance; // amount they end up with + // }; + // + // =========================================================================== + xdr.struct("CreateAccountOp", [["destination", xdr.lookup("AccountId")], ["startingBalance", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct PaymentOp + // { + // MuxedAccount destination; // recipient of the payment + // Asset asset; // what they end up with + // int64 amount; // amount they end up with + // }; + // + // =========================================================================== + xdr.struct("PaymentOp", [["destination", xdr.lookup("MuxedAccount")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct PathPaymentStrictReceiveOp + // { + // Asset sendAsset; // asset we pay with + // int64 sendMax; // the maximum amount of sendAsset to + // // send (excluding fees). + // // The operation will fail if can't be met + // + // MuxedAccount destination; // recipient of the payment + // Asset destAsset; // what they end up with + // int64 destAmount; // amount they end up with + // + // Asset path<5>; // additional hops it must go through to get there + // }; + // + // =========================================================================== + xdr.struct("PathPaymentStrictReceiveOp", [["sendAsset", xdr.lookup("Asset")], ["sendMax", xdr.lookup("Int64")], ["destination", xdr.lookup("MuxedAccount")], ["destAsset", xdr.lookup("Asset")], ["destAmount", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]); + + // === xdr source ============================================================ + // + // struct PathPaymentStrictSendOp + // { + // Asset sendAsset; // asset we pay with + // int64 sendAmount; // amount of sendAsset to send (excluding fees) + // + // MuxedAccount destination; // recipient of the payment + // Asset destAsset; // what they end up with + // int64 destMin; // the minimum amount of dest asset to + // // be received + // // The operation will fail if it can't be met + // + // Asset path<5>; // additional hops it must go through to get there + // }; + // + // =========================================================================== + xdr.struct("PathPaymentStrictSendOp", [["sendAsset", xdr.lookup("Asset")], ["sendAmount", xdr.lookup("Int64")], ["destination", xdr.lookup("MuxedAccount")], ["destAsset", xdr.lookup("Asset")], ["destMin", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]); + + // === xdr source ============================================================ + // + // struct ManageSellOfferOp + // { + // Asset selling; + // Asset buying; + // int64 amount; // amount being sold. if set to 0, delete the offer + // Price price; // price of thing being sold in terms of what you are buying + // + // // 0=create a new offer, otherwise edit an existing offer + // int64 offerID; + // }; + // + // =========================================================================== + xdr.struct("ManageSellOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ManageBuyOfferOp + // { + // Asset selling; + // Asset buying; + // int64 buyAmount; // amount being bought. if set to 0, delete the offer + // Price price; // price of thing being bought in terms of what you are + // // selling + // + // // 0=create a new offer, otherwise edit an existing offer + // int64 offerID; + // }; + // + // =========================================================================== + xdr.struct("ManageBuyOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["buyAmount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct CreatePassiveSellOfferOp + // { + // Asset selling; // A + // Asset buying; // B + // int64 amount; // amount taker gets + // Price price; // cost of A in terms of B + // }; + // + // =========================================================================== + xdr.struct("CreatePassiveSellOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")]]); + + // === xdr source ============================================================ + // + // struct SetOptionsOp + // { + // AccountID* inflationDest; // sets the inflation destination + // + // uint32* clearFlags; // which flags to clear + // uint32* setFlags; // which flags to set + // + // // account threshold manipulation + // uint32* masterWeight; // weight of the master account + // uint32* lowThreshold; + // uint32* medThreshold; + // uint32* highThreshold; + // + // string32* homeDomain; // sets the home domain + // + // // Add, update or remove a signer for the account + // // signer is deleted if the weight is 0 + // Signer* signer; + // }; + // + // =========================================================================== + xdr.struct("SetOptionsOp", [["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["clearFlags", xdr.option(xdr.lookup("Uint32"))], ["setFlags", xdr.option(xdr.lookup("Uint32"))], ["masterWeight", xdr.option(xdr.lookup("Uint32"))], ["lowThreshold", xdr.option(xdr.lookup("Uint32"))], ["medThreshold", xdr.option(xdr.lookup("Uint32"))], ["highThreshold", xdr.option(xdr.lookup("Uint32"))], ["homeDomain", xdr.option(xdr.lookup("String32"))], ["signer", xdr.option(xdr.lookup("Signer"))]]); + + // === xdr source ============================================================ + // + // union ChangeTrustAsset switch (AssetType type) + // { + // case ASSET_TYPE_NATIVE: // Not credit + // void; + // + // case ASSET_TYPE_CREDIT_ALPHANUM4: + // AlphaNum4 alphaNum4; + // + // case ASSET_TYPE_CREDIT_ALPHANUM12: + // AlphaNum12 alphaNum12; + // + // case ASSET_TYPE_POOL_SHARE: + // LiquidityPoolParameters liquidityPool; + // + // // add other asset types here in the future + // }; + // + // =========================================================================== + xdr.union("ChangeTrustAsset", { + switchOn: xdr.lookup("AssetType"), + switchName: "type", + switches: [["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"], ["assetTypePoolShare", "liquidityPool"]], + arms: { + alphaNum4: xdr.lookup("AlphaNum4"), + alphaNum12: xdr.lookup("AlphaNum12"), + liquidityPool: xdr.lookup("LiquidityPoolParameters") + } + }); + + // === xdr source ============================================================ + // + // struct ChangeTrustOp + // { + // ChangeTrustAsset line; + // + // // if limit is set to 0, deletes the trust line + // int64 limit; + // }; + // + // =========================================================================== + xdr.struct("ChangeTrustOp", [["line", xdr.lookup("ChangeTrustAsset")], ["limit", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct AllowTrustOp + // { + // AccountID trustor; + // AssetCode asset; + // + // // One of 0, AUTHORIZED_FLAG, or AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG + // uint32 authorize; + // }; + // + // =========================================================================== + xdr.struct("AllowTrustOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("AssetCode")], ["authorize", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ManageDataOp + // { + // string64 dataName; + // DataValue* dataValue; // set to null to clear + // }; + // + // =========================================================================== + xdr.struct("ManageDataOp", [["dataName", xdr.lookup("String64")], ["dataValue", xdr.option(xdr.lookup("DataValue"))]]); + + // === xdr source ============================================================ + // + // struct BumpSequenceOp + // { + // SequenceNumber bumpTo; + // }; + // + // =========================================================================== + xdr.struct("BumpSequenceOp", [["bumpTo", xdr.lookup("SequenceNumber")]]); + + // === xdr source ============================================================ + // + // struct CreateClaimableBalanceOp + // { + // Asset asset; + // int64 amount; + // Claimant claimants<10>; + // }; + // + // =========================================================================== + xdr.struct("CreateClaimableBalanceOp", [["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["claimants", xdr.varArray(xdr.lookup("Claimant"), 10)]]); + + // === xdr source ============================================================ + // + // struct ClaimClaimableBalanceOp + // { + // ClaimableBalanceID balanceID; + // }; + // + // =========================================================================== + xdr.struct("ClaimClaimableBalanceOp", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct BeginSponsoringFutureReservesOp + // { + // AccountID sponsoredID; + // }; + // + // =========================================================================== + xdr.struct("BeginSponsoringFutureReservesOp", [["sponsoredId", xdr.lookup("AccountId")]]); + + // === xdr source ============================================================ + // + // enum RevokeSponsorshipType + // { + // REVOKE_SPONSORSHIP_LEDGER_ENTRY = 0, + // REVOKE_SPONSORSHIP_SIGNER = 1 + // }; + // + // =========================================================================== + xdr["enum"]("RevokeSponsorshipType", { + revokeSponsorshipLedgerEntry: 0, + revokeSponsorshipSigner: 1 + }); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID accountID; + // SignerKey signerKey; + // } + // + // =========================================================================== + xdr.struct("RevokeSponsorshipOpSigner", [["accountId", xdr.lookup("AccountId")], ["signerKey", xdr.lookup("SignerKey")]]); + + // === xdr source ============================================================ + // + // union RevokeSponsorshipOp switch (RevokeSponsorshipType type) + // { + // case REVOKE_SPONSORSHIP_LEDGER_ENTRY: + // LedgerKey ledgerKey; + // case REVOKE_SPONSORSHIP_SIGNER: + // struct + // { + // AccountID accountID; + // SignerKey signerKey; + // } signer; + // }; + // + // =========================================================================== + xdr.union("RevokeSponsorshipOp", { + switchOn: xdr.lookup("RevokeSponsorshipType"), + switchName: "type", + switches: [["revokeSponsorshipLedgerEntry", "ledgerKey"], ["revokeSponsorshipSigner", "signer"]], + arms: { + ledgerKey: xdr.lookup("LedgerKey"), + signer: xdr.lookup("RevokeSponsorshipOpSigner") + } + }); + + // === xdr source ============================================================ + // + // struct ClawbackOp + // { + // Asset asset; + // MuxedAccount from; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("ClawbackOp", [["asset", xdr.lookup("Asset")], ["from", xdr.lookup("MuxedAccount")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClawbackClaimableBalanceOp + // { + // ClaimableBalanceID balanceID; + // }; + // + // =========================================================================== + xdr.struct("ClawbackClaimableBalanceOp", [["balanceId", xdr.lookup("ClaimableBalanceId")]]); + + // === xdr source ============================================================ + // + // struct SetTrustLineFlagsOp + // { + // AccountID trustor; + // Asset asset; + // + // uint32 clearFlags; // which flags to clear + // uint32 setFlags; // which flags to set + // }; + // + // =========================================================================== + xdr.struct("SetTrustLineFlagsOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["clearFlags", xdr.lookup("Uint32")], ["setFlags", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // const LIQUIDITY_POOL_FEE_V18 = 30; + // + // =========================================================================== + xdr["const"]("LIQUIDITY_POOL_FEE_V18", 30); + + // === xdr source ============================================================ + // + // struct LiquidityPoolDepositOp + // { + // PoolID liquidityPoolID; + // int64 maxAmountA; // maximum amount of first asset to deposit + // int64 maxAmountB; // maximum amount of second asset to deposit + // Price minPrice; // minimum depositA/depositB + // Price maxPrice; // maximum depositA/depositB + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolDepositOp", [["liquidityPoolId", xdr.lookup("PoolId")], ["maxAmountA", xdr.lookup("Int64")], ["maxAmountB", xdr.lookup("Int64")], ["minPrice", xdr.lookup("Price")], ["maxPrice", xdr.lookup("Price")]]); + + // === xdr source ============================================================ + // + // struct LiquidityPoolWithdrawOp + // { + // PoolID liquidityPoolID; + // int64 amount; // amount of pool shares to withdraw + // int64 minAmountA; // minimum amount of first asset to withdraw + // int64 minAmountB; // minimum amount of second asset to withdraw + // }; + // + // =========================================================================== + xdr.struct("LiquidityPoolWithdrawOp", [["liquidityPoolId", xdr.lookup("PoolId")], ["amount", xdr.lookup("Int64")], ["minAmountA", xdr.lookup("Int64")], ["minAmountB", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum HostFunctionType + // { + // HOST_FUNCTION_TYPE_INVOKE_CONTRACT = 0, + // HOST_FUNCTION_TYPE_CREATE_CONTRACT = 1, + // HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM = 2, + // HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2 = 3 + // }; + // + // =========================================================================== + xdr["enum"]("HostFunctionType", { + hostFunctionTypeInvokeContract: 0, + hostFunctionTypeCreateContract: 1, + hostFunctionTypeUploadContractWasm: 2, + hostFunctionTypeCreateContractV2: 3 + }); + + // === xdr source ============================================================ + // + // enum ContractIDPreimageType + // { + // CONTRACT_ID_PREIMAGE_FROM_ADDRESS = 0, + // CONTRACT_ID_PREIMAGE_FROM_ASSET = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractIdPreimageType", { + contractIdPreimageFromAddress: 0, + contractIdPreimageFromAsset: 1 + }); + + // === xdr source ============================================================ + // + // struct + // { + // SCAddress address; + // uint256 salt; + // } + // + // =========================================================================== + xdr.struct("ContractIdPreimageFromAddress", [["address", xdr.lookup("ScAddress")], ["salt", xdr.lookup("Uint256")]]); + + // === xdr source ============================================================ + // + // union ContractIDPreimage switch (ContractIDPreimageType type) + // { + // case CONTRACT_ID_PREIMAGE_FROM_ADDRESS: + // struct + // { + // SCAddress address; + // uint256 salt; + // } fromAddress; + // case CONTRACT_ID_PREIMAGE_FROM_ASSET: + // Asset fromAsset; + // }; + // + // =========================================================================== + xdr.union("ContractIdPreimage", { + switchOn: xdr.lookup("ContractIdPreimageType"), + switchName: "type", + switches: [["contractIdPreimageFromAddress", "fromAddress"], ["contractIdPreimageFromAsset", "fromAsset"]], + arms: { + fromAddress: xdr.lookup("ContractIdPreimageFromAddress"), + fromAsset: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // struct CreateContractArgs + // { + // ContractIDPreimage contractIDPreimage; + // ContractExecutable executable; + // }; + // + // =========================================================================== + xdr.struct("CreateContractArgs", [["contractIdPreimage", xdr.lookup("ContractIdPreimage")], ["executable", xdr.lookup("ContractExecutable")]]); + + // === xdr source ============================================================ + // + // struct CreateContractArgsV2 + // { + // ContractIDPreimage contractIDPreimage; + // ContractExecutable executable; + // // Arguments of the contract's constructor. + // SCVal constructorArgs<>; + // }; + // + // =========================================================================== + xdr.struct("CreateContractArgsV2", [["contractIdPreimage", xdr.lookup("ContractIdPreimage")], ["executable", xdr.lookup("ContractExecutable")], ["constructorArgs", xdr.varArray(xdr.lookup("ScVal"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct InvokeContractArgs { + // SCAddress contractAddress; + // SCSymbol functionName; + // SCVal args<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeContractArgs", [["contractAddress", xdr.lookup("ScAddress")], ["functionName", xdr.lookup("ScSymbol")], ["args", xdr.varArray(xdr.lookup("ScVal"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union HostFunction switch (HostFunctionType type) + // { + // case HOST_FUNCTION_TYPE_INVOKE_CONTRACT: + // InvokeContractArgs invokeContract; + // case HOST_FUNCTION_TYPE_CREATE_CONTRACT: + // CreateContractArgs createContract; + // case HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM: + // opaque wasm<>; + // case HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2: + // CreateContractArgsV2 createContractV2; + // }; + // + // =========================================================================== + xdr.union("HostFunction", { + switchOn: xdr.lookup("HostFunctionType"), + switchName: "type", + switches: [["hostFunctionTypeInvokeContract", "invokeContract"], ["hostFunctionTypeCreateContract", "createContract"], ["hostFunctionTypeUploadContractWasm", "wasm"], ["hostFunctionTypeCreateContractV2", "createContractV2"]], + arms: { + invokeContract: xdr.lookup("InvokeContractArgs"), + createContract: xdr.lookup("CreateContractArgs"), + wasm: xdr.varOpaque(), + createContractV2: xdr.lookup("CreateContractArgsV2") + } + }); + + // === xdr source ============================================================ + // + // enum SorobanAuthorizedFunctionType + // { + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN = 0, + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN = 1, + // SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN = 2 + // }; + // + // =========================================================================== + xdr["enum"]("SorobanAuthorizedFunctionType", { + sorobanAuthorizedFunctionTypeContractFn: 0, + sorobanAuthorizedFunctionTypeCreateContractHostFn: 1, + sorobanAuthorizedFunctionTypeCreateContractV2HostFn: 2 + }); + + // === xdr source ============================================================ + // + // union SorobanAuthorizedFunction switch (SorobanAuthorizedFunctionType type) + // { + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN: + // InvokeContractArgs contractFn; + // // This variant of auth payload for creating new contract instances + // // doesn't allow specifying the constructor arguments, creating contracts + // // with constructors that take arguments is only possible by authorizing + // // `SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN` + // // (protocol 22+). + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN: + // CreateContractArgs createContractHostFn; + // // This variant of auth payload for creating new contract instances + // // is only accepted in and after protocol 22. It allows authorizing the + // // contract constructor arguments. + // case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN: + // CreateContractArgsV2 createContractV2HostFn; + // }; + // + // =========================================================================== + xdr.union("SorobanAuthorizedFunction", { + switchOn: xdr.lookup("SorobanAuthorizedFunctionType"), + switchName: "type", + switches: [["sorobanAuthorizedFunctionTypeContractFn", "contractFn"], ["sorobanAuthorizedFunctionTypeCreateContractHostFn", "createContractHostFn"], ["sorobanAuthorizedFunctionTypeCreateContractV2HostFn", "createContractV2HostFn"]], + arms: { + contractFn: xdr.lookup("InvokeContractArgs"), + createContractHostFn: xdr.lookup("CreateContractArgs"), + createContractV2HostFn: xdr.lookup("CreateContractArgsV2") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanAuthorizedInvocation + // { + // SorobanAuthorizedFunction function; + // SorobanAuthorizedInvocation subInvocations<>; + // }; + // + // =========================================================================== + xdr.struct("SorobanAuthorizedInvocation", [["function", xdr.lookup("SorobanAuthorizedFunction")], ["subInvocations", xdr.varArray(xdr.lookup("SorobanAuthorizedInvocation"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct SorobanAddressCredentials + // { + // SCAddress address; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SCVal signature; + // }; + // + // =========================================================================== + xdr.struct("SorobanAddressCredentials", [["address", xdr.lookup("ScAddress")], ["nonce", xdr.lookup("Int64")], ["signatureExpirationLedger", xdr.lookup("Uint32")], ["signature", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // enum SorobanCredentialsType + // { + // SOROBAN_CREDENTIALS_SOURCE_ACCOUNT = 0, + // SOROBAN_CREDENTIALS_ADDRESS = 1 + // }; + // + // =========================================================================== + xdr["enum"]("SorobanCredentialsType", { + sorobanCredentialsSourceAccount: 0, + sorobanCredentialsAddress: 1 + }); + + // === xdr source ============================================================ + // + // union SorobanCredentials switch (SorobanCredentialsType type) + // { + // case SOROBAN_CREDENTIALS_SOURCE_ACCOUNT: + // void; + // case SOROBAN_CREDENTIALS_ADDRESS: + // SorobanAddressCredentials address; + // }; + // + // =========================================================================== + xdr.union("SorobanCredentials", { + switchOn: xdr.lookup("SorobanCredentialsType"), + switchName: "type", + switches: [["sorobanCredentialsSourceAccount", xdr["void"]()], ["sorobanCredentialsAddress", "address"]], + arms: { + address: xdr.lookup("SorobanAddressCredentials") + } + }); + + // === xdr source ============================================================ + // + // struct SorobanAuthorizationEntry + // { + // SorobanCredentials credentials; + // SorobanAuthorizedInvocation rootInvocation; + // }; + // + // =========================================================================== + xdr.struct("SorobanAuthorizationEntry", [["credentials", xdr.lookup("SorobanCredentials")], ["rootInvocation", xdr.lookup("SorobanAuthorizedInvocation")]]); + + // === xdr source ============================================================ + // + // struct InvokeHostFunctionOp + // { + // // Host function to invoke. + // HostFunction hostFunction; + // // Per-address authorizations for this host function. + // SorobanAuthorizationEntry auth<>; + // }; + // + // =========================================================================== + xdr.struct("InvokeHostFunctionOp", [["hostFunction", xdr.lookup("HostFunction")], ["auth", xdr.varArray(xdr.lookup("SorobanAuthorizationEntry"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct ExtendFootprintTTLOp + // { + // ExtensionPoint ext; + // uint32 extendTo; + // }; + // + // =========================================================================== + xdr.struct("ExtendFootprintTtlOp", [["ext", xdr.lookup("ExtensionPoint")], ["extendTo", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct RestoreFootprintOp + // { + // ExtensionPoint ext; + // }; + // + // =========================================================================== + xdr.struct("RestoreFootprintOp", [["ext", xdr.lookup("ExtensionPoint")]]); + + // === xdr source ============================================================ + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountOp createAccountOp; + // case PAYMENT: + // PaymentOp paymentOp; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp; + // case MANAGE_SELL_OFFER: + // ManageSellOfferOp manageSellOfferOp; + // case CREATE_PASSIVE_SELL_OFFER: + // CreatePassiveSellOfferOp createPassiveSellOfferOp; + // case SET_OPTIONS: + // SetOptionsOp setOptionsOp; + // case CHANGE_TRUST: + // ChangeTrustOp changeTrustOp; + // case ALLOW_TRUST: + // AllowTrustOp allowTrustOp; + // case ACCOUNT_MERGE: + // MuxedAccount destination; + // case INFLATION: + // void; + // case MANAGE_DATA: + // ManageDataOp manageDataOp; + // case BUMP_SEQUENCE: + // BumpSequenceOp bumpSequenceOp; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferOp manageBuyOfferOp; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendOp pathPaymentStrictSendOp; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceOp createClaimableBalanceOp; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceOp claimClaimableBalanceOp; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp; + // case END_SPONSORING_FUTURE_RESERVES: + // void; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipOp revokeSponsorshipOp; + // case CLAWBACK: + // ClawbackOp clawbackOp; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceOp clawbackClaimableBalanceOp; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsOp setTrustLineFlagsOp; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositOp liquidityPoolDepositOp; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawOp liquidityPoolWithdrawOp; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionOp invokeHostFunctionOp; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLOp extendFootprintTTLOp; + // case RESTORE_FOOTPRINT: + // RestoreFootprintOp restoreFootprintOp; + // } + // + // =========================================================================== + xdr.union("OperationBody", { + switchOn: xdr.lookup("OperationType"), + switchName: "type", + switches: [["createAccount", "createAccountOp"], ["payment", "paymentOp"], ["pathPaymentStrictReceive", "pathPaymentStrictReceiveOp"], ["manageSellOffer", "manageSellOfferOp"], ["createPassiveSellOffer", "createPassiveSellOfferOp"], ["setOptions", "setOptionsOp"], ["changeTrust", "changeTrustOp"], ["allowTrust", "allowTrustOp"], ["accountMerge", "destination"], ["inflation", xdr["void"]()], ["manageData", "manageDataOp"], ["bumpSequence", "bumpSequenceOp"], ["manageBuyOffer", "manageBuyOfferOp"], ["pathPaymentStrictSend", "pathPaymentStrictSendOp"], ["createClaimableBalance", "createClaimableBalanceOp"], ["claimClaimableBalance", "claimClaimableBalanceOp"], ["beginSponsoringFutureReserves", "beginSponsoringFutureReservesOp"], ["endSponsoringFutureReserves", xdr["void"]()], ["revokeSponsorship", "revokeSponsorshipOp"], ["clawback", "clawbackOp"], ["clawbackClaimableBalance", "clawbackClaimableBalanceOp"], ["setTrustLineFlags", "setTrustLineFlagsOp"], ["liquidityPoolDeposit", "liquidityPoolDepositOp"], ["liquidityPoolWithdraw", "liquidityPoolWithdrawOp"], ["invokeHostFunction", "invokeHostFunctionOp"], ["extendFootprintTtl", "extendFootprintTtlOp"], ["restoreFootprint", "restoreFootprintOp"]], + arms: { + createAccountOp: xdr.lookup("CreateAccountOp"), + paymentOp: xdr.lookup("PaymentOp"), + pathPaymentStrictReceiveOp: xdr.lookup("PathPaymentStrictReceiveOp"), + manageSellOfferOp: xdr.lookup("ManageSellOfferOp"), + createPassiveSellOfferOp: xdr.lookup("CreatePassiveSellOfferOp"), + setOptionsOp: xdr.lookup("SetOptionsOp"), + changeTrustOp: xdr.lookup("ChangeTrustOp"), + allowTrustOp: xdr.lookup("AllowTrustOp"), + destination: xdr.lookup("MuxedAccount"), + manageDataOp: xdr.lookup("ManageDataOp"), + bumpSequenceOp: xdr.lookup("BumpSequenceOp"), + manageBuyOfferOp: xdr.lookup("ManageBuyOfferOp"), + pathPaymentStrictSendOp: xdr.lookup("PathPaymentStrictSendOp"), + createClaimableBalanceOp: xdr.lookup("CreateClaimableBalanceOp"), + claimClaimableBalanceOp: xdr.lookup("ClaimClaimableBalanceOp"), + beginSponsoringFutureReservesOp: xdr.lookup("BeginSponsoringFutureReservesOp"), + revokeSponsorshipOp: xdr.lookup("RevokeSponsorshipOp"), + clawbackOp: xdr.lookup("ClawbackOp"), + clawbackClaimableBalanceOp: xdr.lookup("ClawbackClaimableBalanceOp"), + setTrustLineFlagsOp: xdr.lookup("SetTrustLineFlagsOp"), + liquidityPoolDepositOp: xdr.lookup("LiquidityPoolDepositOp"), + liquidityPoolWithdrawOp: xdr.lookup("LiquidityPoolWithdrawOp"), + invokeHostFunctionOp: xdr.lookup("InvokeHostFunctionOp"), + extendFootprintTtlOp: xdr.lookup("ExtendFootprintTtlOp"), + restoreFootprintOp: xdr.lookup("RestoreFootprintOp") + } + }); + + // === xdr source ============================================================ + // + // struct Operation + // { + // // sourceAccount is the account used to run the operation + // // if not set, the runtime defaults to "sourceAccount" specified at + // // the transaction level + // MuxedAccount* sourceAccount; + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountOp createAccountOp; + // case PAYMENT: + // PaymentOp paymentOp; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp; + // case MANAGE_SELL_OFFER: + // ManageSellOfferOp manageSellOfferOp; + // case CREATE_PASSIVE_SELL_OFFER: + // CreatePassiveSellOfferOp createPassiveSellOfferOp; + // case SET_OPTIONS: + // SetOptionsOp setOptionsOp; + // case CHANGE_TRUST: + // ChangeTrustOp changeTrustOp; + // case ALLOW_TRUST: + // AllowTrustOp allowTrustOp; + // case ACCOUNT_MERGE: + // MuxedAccount destination; + // case INFLATION: + // void; + // case MANAGE_DATA: + // ManageDataOp manageDataOp; + // case BUMP_SEQUENCE: + // BumpSequenceOp bumpSequenceOp; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferOp manageBuyOfferOp; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendOp pathPaymentStrictSendOp; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceOp createClaimableBalanceOp; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceOp claimClaimableBalanceOp; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp; + // case END_SPONSORING_FUTURE_RESERVES: + // void; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipOp revokeSponsorshipOp; + // case CLAWBACK: + // ClawbackOp clawbackOp; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceOp clawbackClaimableBalanceOp; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsOp setTrustLineFlagsOp; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositOp liquidityPoolDepositOp; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawOp liquidityPoolWithdrawOp; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionOp invokeHostFunctionOp; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLOp extendFootprintTTLOp; + // case RESTORE_FOOTPRINT: + // RestoreFootprintOp restoreFootprintOp; + // } + // body; + // }; + // + // =========================================================================== + xdr.struct("Operation", [["sourceAccount", xdr.option(xdr.lookup("MuxedAccount"))], ["body", xdr.lookup("OperationBody")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageOperationId", [["sourceAccount", xdr.lookup("AccountId")], ["seqNum", xdr.lookup("SequenceNumber")], ["opNum", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // PoolID liquidityPoolID; + // Asset asset; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageRevokeId", [["sourceAccount", xdr.lookup("AccountId")], ["seqNum", xdr.lookup("SequenceNumber")], ["opNum", xdr.lookup("Uint32")], ["liquidityPoolId", xdr.lookup("PoolId")], ["asset", xdr.lookup("Asset")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash networkID; + // ContractIDPreimage contractIDPreimage; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageContractId", [["networkId", xdr.lookup("Hash")], ["contractIdPreimage", xdr.lookup("ContractIdPreimage")]]); + + // === xdr source ============================================================ + // + // struct + // { + // Hash networkID; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SorobanAuthorizedInvocation invocation; + // } + // + // =========================================================================== + xdr.struct("HashIdPreimageSorobanAuthorization", [["networkId", xdr.lookup("Hash")], ["nonce", xdr.lookup("Int64")], ["signatureExpirationLedger", xdr.lookup("Uint32")], ["invocation", xdr.lookup("SorobanAuthorizedInvocation")]]); + + // === xdr source ============================================================ + // + // union HashIDPreimage switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_OP_ID: + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // } operationID; + // case ENVELOPE_TYPE_POOL_REVOKE_OP_ID: + // struct + // { + // AccountID sourceAccount; + // SequenceNumber seqNum; + // uint32 opNum; + // PoolID liquidityPoolID; + // Asset asset; + // } revokeID; + // case ENVELOPE_TYPE_CONTRACT_ID: + // struct + // { + // Hash networkID; + // ContractIDPreimage contractIDPreimage; + // } contractID; + // case ENVELOPE_TYPE_SOROBAN_AUTHORIZATION: + // struct + // { + // Hash networkID; + // int64 nonce; + // uint32 signatureExpirationLedger; + // SorobanAuthorizedInvocation invocation; + // } sorobanAuthorization; + // }; + // + // =========================================================================== + xdr.union("HashIdPreimage", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeOpId", "operationId"], ["envelopeTypePoolRevokeOpId", "revokeId"], ["envelopeTypeContractId", "contractId"], ["envelopeTypeSorobanAuthorization", "sorobanAuthorization"]], + arms: { + operationId: xdr.lookup("HashIdPreimageOperationId"), + revokeId: xdr.lookup("HashIdPreimageRevokeId"), + contractId: xdr.lookup("HashIdPreimageContractId"), + sorobanAuthorization: xdr.lookup("HashIdPreimageSorobanAuthorization") + } + }); + + // === xdr source ============================================================ + // + // enum MemoType + // { + // MEMO_NONE = 0, + // MEMO_TEXT = 1, + // MEMO_ID = 2, + // MEMO_HASH = 3, + // MEMO_RETURN = 4 + // }; + // + // =========================================================================== + xdr["enum"]("MemoType", { + memoNone: 0, + memoText: 1, + memoId: 2, + memoHash: 3, + memoReturn: 4 + }); + + // === xdr source ============================================================ + // + // union Memo switch (MemoType type) + // { + // case MEMO_NONE: + // void; + // case MEMO_TEXT: + // string text<28>; + // case MEMO_ID: + // uint64 id; + // case MEMO_HASH: + // Hash hash; // the hash of what to pull from the content server + // case MEMO_RETURN: + // Hash retHash; // the hash of the tx you are rejecting + // }; + // + // =========================================================================== + xdr.union("Memo", { + switchOn: xdr.lookup("MemoType"), + switchName: "type", + switches: [["memoNone", xdr["void"]()], ["memoText", "text"], ["memoId", "id"], ["memoHash", "hash"], ["memoReturn", "retHash"]], + arms: { + text: xdr.string(28), + id: xdr.lookup("Uint64"), + hash: xdr.lookup("Hash"), + retHash: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // struct TimeBounds + // { + // TimePoint minTime; + // TimePoint maxTime; // 0 here means no maxTime + // }; + // + // =========================================================================== + xdr.struct("TimeBounds", [["minTime", xdr.lookup("TimePoint")], ["maxTime", xdr.lookup("TimePoint")]]); + + // === xdr source ============================================================ + // + // struct LedgerBounds + // { + // uint32 minLedger; + // uint32 maxLedger; // 0 here means no maxLedger + // }; + // + // =========================================================================== + xdr.struct("LedgerBounds", [["minLedger", xdr.lookup("Uint32")], ["maxLedger", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct PreconditionsV2 + // { + // TimeBounds* timeBounds; + // + // // Transaction only valid for ledger numbers n such that + // // minLedger <= n < maxLedger (if maxLedger == 0, then + // // only minLedger is checked) + // LedgerBounds* ledgerBounds; + // + // // If NULL, only valid when sourceAccount's sequence number + // // is seqNum - 1. Otherwise, valid when sourceAccount's + // // sequence number n satisfies minSeqNum <= n < tx.seqNum. + // // Note that after execution the account's sequence number + // // is always raised to tx.seqNum, and a transaction is not + // // valid if tx.seqNum is too high to ensure replay protection. + // SequenceNumber* minSeqNum; + // + // // For the transaction to be valid, the current ledger time must + // // be at least minSeqAge greater than sourceAccount's seqTime. + // Duration minSeqAge; + // + // // For the transaction to be valid, the current ledger number + // // must be at least minSeqLedgerGap greater than sourceAccount's + // // seqLedger. + // uint32 minSeqLedgerGap; + // + // // For the transaction to be valid, there must be a signature + // // corresponding to every Signer in this array, even if the + // // signature is not otherwise required by the sourceAccount or + // // operations. + // SignerKey extraSigners<2>; + // }; + // + // =========================================================================== + xdr.struct("PreconditionsV2", [["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["ledgerBounds", xdr.option(xdr.lookup("LedgerBounds"))], ["minSeqNum", xdr.option(xdr.lookup("SequenceNumber"))], ["minSeqAge", xdr.lookup("Duration")], ["minSeqLedgerGap", xdr.lookup("Uint32")], ["extraSigners", xdr.varArray(xdr.lookup("SignerKey"), 2)]]); + + // === xdr source ============================================================ + // + // enum PreconditionType + // { + // PRECOND_NONE = 0, + // PRECOND_TIME = 1, + // PRECOND_V2 = 2 + // }; + // + // =========================================================================== + xdr["enum"]("PreconditionType", { + precondNone: 0, + precondTime: 1, + precondV2: 2 + }); + + // === xdr source ============================================================ + // + // union Preconditions switch (PreconditionType type) + // { + // case PRECOND_NONE: + // void; + // case PRECOND_TIME: + // TimeBounds timeBounds; + // case PRECOND_V2: + // PreconditionsV2 v2; + // }; + // + // =========================================================================== + xdr.union("Preconditions", { + switchOn: xdr.lookup("PreconditionType"), + switchName: "type", + switches: [["precondNone", xdr["void"]()], ["precondTime", "timeBounds"], ["precondV2", "v2"]], + arms: { + timeBounds: xdr.lookup("TimeBounds"), + v2: xdr.lookup("PreconditionsV2") + } + }); + + // === xdr source ============================================================ + // + // struct LedgerFootprint + // { + // LedgerKey readOnly<>; + // LedgerKey readWrite<>; + // }; + // + // =========================================================================== + xdr.struct("LedgerFootprint", [["readOnly", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["readWrite", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)]]); + + // === xdr source ============================================================ + // + // enum ArchivalProofType + // { + // EXISTENCE = 0, + // NONEXISTENCE = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ArchivalProofType", { + existence: 0, + nonexistence: 1 + }); + + // === xdr source ============================================================ + // + // struct ArchivalProofNode + // { + // uint32 index; + // Hash hash; + // }; + // + // =========================================================================== + xdr.struct("ArchivalProofNode", [["index", xdr.lookup("Uint32")], ["hash", xdr.lookup("Hash")]]); + + // === xdr source ============================================================ + // + // typedef ArchivalProofNode ProofLevel<>; + // + // =========================================================================== + xdr.typedef("ProofLevel", xdr.varArray(xdr.lookup("ArchivalProofNode"), 2147483647)); + + // === xdr source ============================================================ + // + // struct NonexistenceProofBody + // { + // ColdArchiveBucketEntry entriesToProve<>; + // + // // Vector of vectors, where proofLevels[level] + // // contains all HashNodes that correspond with that level + // ProofLevel proofLevels<>; + // }; + // + // =========================================================================== + xdr.struct("NonexistenceProofBody", [["entriesToProve", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["proofLevels", xdr.varArray(xdr.lookup("ProofLevel"), 2147483647)]]); + + // === xdr source ============================================================ + // + // struct ExistenceProofBody + // { + // LedgerKey keysToProve<>; + // + // // Bounds for each key being proved, where bound[n] + // // corresponds to keysToProve[n] + // ColdArchiveBucketEntry lowBoundEntries<>; + // ColdArchiveBucketEntry highBoundEntries<>; + // + // // Vector of vectors, where proofLevels[level] + // // contains all HashNodes that correspond with that level + // ProofLevel proofLevels<>; + // }; + // + // =========================================================================== + xdr.struct("ExistenceProofBody", [["keysToProve", xdr.varArray(xdr.lookup("LedgerKey"), 2147483647)], ["lowBoundEntries", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["highBoundEntries", xdr.varArray(xdr.lookup("ColdArchiveBucketEntry"), 2147483647)], ["proofLevels", xdr.varArray(xdr.lookup("ProofLevel"), 2147483647)]]); + + // === xdr source ============================================================ + // + // union switch (ArchivalProofType t) + // { + // case EXISTENCE: + // NonexistenceProofBody nonexistenceProof; + // case NONEXISTENCE: + // ExistenceProofBody existenceProof; + // } + // + // =========================================================================== + xdr.union("ArchivalProofBody", { + switchOn: xdr.lookup("ArchivalProofType"), + switchName: "t", + switches: [["existence", "nonexistenceProof"], ["nonexistence", "existenceProof"]], + arms: { + nonexistenceProof: xdr.lookup("NonexistenceProofBody"), + existenceProof: xdr.lookup("ExistenceProofBody") + } + }); + + // === xdr source ============================================================ + // + // struct ArchivalProof + // { + // uint32 epoch; // AST Subtree for this proof + // + // union switch (ArchivalProofType t) + // { + // case EXISTENCE: + // NonexistenceProofBody nonexistenceProof; + // case NONEXISTENCE: + // ExistenceProofBody existenceProof; + // } body; + // }; + // + // =========================================================================== + xdr.struct("ArchivalProof", [["epoch", xdr.lookup("Uint32")], ["body", xdr.lookup("ArchivalProofBody")]]); + + // === xdr source ============================================================ + // + // struct SorobanResources + // { + // // The ledger footprint of the transaction. + // LedgerFootprint footprint; + // // The maximum number of instructions this transaction can use + // uint32 instructions; + // + // // The maximum number of bytes this transaction can read from ledger + // uint32 readBytes; + // // The maximum number of bytes this transaction can write to ledger + // uint32 writeBytes; + // }; + // + // =========================================================================== + xdr.struct("SorobanResources", [["footprint", xdr.lookup("LedgerFootprint")], ["instructions", xdr.lookup("Uint32")], ["readBytes", xdr.lookup("Uint32")], ["writeBytes", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ArchivalProof proofs<>; + // } + // + // =========================================================================== + xdr.union("SorobanTransactionDataExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "proofs"]], + arms: { + proofs: xdr.varArray(xdr.lookup("ArchivalProof"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // struct SorobanTransactionData + // { + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // ArchivalProof proofs<>; + // } ext; + // SorobanResources resources; + // // Amount of the transaction `fee` allocated to the Soroban resource fees. + // // The fraction of `resourceFee` corresponding to `resources` specified + // // above is *not* refundable (i.e. fees for instructions, ledger I/O), as + // // well as fees for the transaction size. + // // The remaining part of the fee is refundable and the charged value is + // // based on the actual consumption of refundable resources (events, ledger + // // rent bumps). + // // The `inclusionFee` used for prioritization of the transaction is defined + // // as `tx.fee - resourceFee`. + // int64 resourceFee; + // }; + // + // =========================================================================== + xdr.struct("SorobanTransactionData", [["ext", xdr.lookup("SorobanTransactionDataExt")], ["resources", xdr.lookup("SorobanResources")], ["resourceFee", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionV0Ext", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionV0 + // { + // uint256 sourceAccountEd25519; + // uint32 fee; + // SequenceNumber seqNum; + // TimeBounds* timeBounds; + // Memo memo; + // Operation operations; + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionV0", [["sourceAccountEd25519", xdr.lookup("Uint256")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), xdr.lookup("MAX_OPS_PER_TX"))], ["ext", xdr.lookup("TransactionV0Ext")]]); + + // === xdr source ============================================================ + // + // struct TransactionV0Envelope + // { + // TransactionV0 tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("TransactionV0Envelope", [["tx", xdr.lookup("TransactionV0")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionData sorobanData; + // } + // + // =========================================================================== + xdr.union("TransactionExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()], [1, "sorobanData"]], + arms: { + sorobanData: xdr.lookup("SorobanTransactionData") + } + }); + + // === xdr source ============================================================ + // + // struct Transaction + // { + // // account used to run the transaction + // MuxedAccount sourceAccount; + // + // // the fee the sourceAccount will pay + // uint32 fee; + // + // // sequence number to consume in the account + // SequenceNumber seqNum; + // + // // validity conditions + // Preconditions cond; + // + // Memo memo; + // + // Operation operations; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // case 1: + // SorobanTransactionData sorobanData; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("Transaction", [["sourceAccount", xdr.lookup("MuxedAccount")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["cond", xdr.lookup("Preconditions")], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), xdr.lookup("MAX_OPS_PER_TX"))], ["ext", xdr.lookup("TransactionExt")]]); + + // === xdr source ============================================================ + // + // struct TransactionV1Envelope + // { + // Transaction tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("TransactionV1Envelope", [["tx", xdr.lookup("Transaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // } + // + // =========================================================================== + xdr.union("FeeBumpTransactionInnerTx", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTx", "v1"]], + arms: { + v1: xdr.lookup("TransactionV1Envelope") + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("FeeBumpTransactionExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct FeeBumpTransaction + // { + // MuxedAccount feeSource; + // int64 fee; + // union switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // } + // innerTx; + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("FeeBumpTransaction", [["feeSource", xdr.lookup("MuxedAccount")], ["fee", xdr.lookup("Int64")], ["innerTx", xdr.lookup("FeeBumpTransactionInnerTx")], ["ext", xdr.lookup("FeeBumpTransactionExt")]]); + + // === xdr source ============================================================ + // + // struct FeeBumpTransactionEnvelope + // { + // FeeBumpTransaction tx; + // /* Each decorated signature is a signature over the SHA256 hash of + // * a TransactionSignaturePayload */ + // DecoratedSignature signatures<20>; + // }; + // + // =========================================================================== + xdr.struct("FeeBumpTransactionEnvelope", [["tx", xdr.lookup("FeeBumpTransaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]); + + // === xdr source ============================================================ + // + // union TransactionEnvelope switch (EnvelopeType type) + // { + // case ENVELOPE_TYPE_TX_V0: + // TransactionV0Envelope v0; + // case ENVELOPE_TYPE_TX: + // TransactionV1Envelope v1; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransactionEnvelope feeBump; + // }; + // + // =========================================================================== + xdr.union("TransactionEnvelope", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTxV0", "v0"], ["envelopeTypeTx", "v1"], ["envelopeTypeTxFeeBump", "feeBump"]], + arms: { + v0: xdr.lookup("TransactionV0Envelope"), + v1: xdr.lookup("TransactionV1Envelope"), + feeBump: xdr.lookup("FeeBumpTransactionEnvelope") + } + }); + + // === xdr source ============================================================ + // + // union switch (EnvelopeType type) + // { + // // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // case ENVELOPE_TYPE_TX: + // Transaction tx; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransaction feeBump; + // } + // + // =========================================================================== + xdr.union("TransactionSignaturePayloadTaggedTransaction", { + switchOn: xdr.lookup("EnvelopeType"), + switchName: "type", + switches: [["envelopeTypeTx", "tx"], ["envelopeTypeTxFeeBump", "feeBump"]], + arms: { + tx: xdr.lookup("Transaction"), + feeBump: xdr.lookup("FeeBumpTransaction") + } + }); + + // === xdr source ============================================================ + // + // struct TransactionSignaturePayload + // { + // Hash networkId; + // union switch (EnvelopeType type) + // { + // // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // case ENVELOPE_TYPE_TX: + // Transaction tx; + // case ENVELOPE_TYPE_TX_FEE_BUMP: + // FeeBumpTransaction feeBump; + // } + // taggedTransaction; + // }; + // + // =========================================================================== + xdr.struct("TransactionSignaturePayload", [["networkId", xdr.lookup("Hash")], ["taggedTransaction", xdr.lookup("TransactionSignaturePayloadTaggedTransaction")]]); + + // === xdr source ============================================================ + // + // enum ClaimAtomType + // { + // CLAIM_ATOM_TYPE_V0 = 0, + // CLAIM_ATOM_TYPE_ORDER_BOOK = 1, + // CLAIM_ATOM_TYPE_LIQUIDITY_POOL = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimAtomType", { + claimAtomTypeV0: 0, + claimAtomTypeOrderBook: 1, + claimAtomTypeLiquidityPool: 2 + }); + + // === xdr source ============================================================ + // + // struct ClaimOfferAtomV0 + // { + // // emitted to identify the offer + // uint256 sellerEd25519; // Account that owns the offer + // int64 offerID; + // + // // amount and asset taken from the owner + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the owner + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimOfferAtomV0", [["sellerEd25519", xdr.lookup("Uint256")], ["offerId", xdr.lookup("Int64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClaimOfferAtom + // { + // // emitted to identify the offer + // AccountID sellerID; // Account that owns the offer + // int64 offerID; + // + // // amount and asset taken from the owner + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the owner + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimOfferAtom", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Int64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ClaimLiquidityAtom + // { + // PoolID liquidityPoolID; + // + // // amount and asset taken from the pool + // Asset assetSold; + // int64 amountSold; + // + // // amount and asset sent to the pool + // Asset assetBought; + // int64 amountBought; + // }; + // + // =========================================================================== + xdr.struct("ClaimLiquidityAtom", [["liquidityPoolId", xdr.lookup("PoolId")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union ClaimAtom switch (ClaimAtomType type) + // { + // case CLAIM_ATOM_TYPE_V0: + // ClaimOfferAtomV0 v0; + // case CLAIM_ATOM_TYPE_ORDER_BOOK: + // ClaimOfferAtom orderBook; + // case CLAIM_ATOM_TYPE_LIQUIDITY_POOL: + // ClaimLiquidityAtom liquidityPool; + // }; + // + // =========================================================================== + xdr.union("ClaimAtom", { + switchOn: xdr.lookup("ClaimAtomType"), + switchName: "type", + switches: [["claimAtomTypeV0", "v0"], ["claimAtomTypeOrderBook", "orderBook"], ["claimAtomTypeLiquidityPool", "liquidityPool"]], + arms: { + v0: xdr.lookup("ClaimOfferAtomV0"), + orderBook: xdr.lookup("ClaimOfferAtom"), + liquidityPool: xdr.lookup("ClaimLiquidityAtom") + } + }); + + // === xdr source ============================================================ + // + // enum CreateAccountResultCode + // { + // // codes considered as "success" for the operation + // CREATE_ACCOUNT_SUCCESS = 0, // account was created + // + // // codes considered as "failure" for the operation + // CREATE_ACCOUNT_MALFORMED = -1, // invalid destination + // CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account + // CREATE_ACCOUNT_LOW_RESERVE = + // -3, // would create an account below the min reserve + // CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists + // }; + // + // =========================================================================== + xdr["enum"]("CreateAccountResultCode", { + createAccountSuccess: 0, + createAccountMalformed: -1, + createAccountUnderfunded: -2, + createAccountLowReserve: -3, + createAccountAlreadyExist: -4 + }); + + // === xdr source ============================================================ + // + // union CreateAccountResult switch (CreateAccountResultCode code) + // { + // case CREATE_ACCOUNT_SUCCESS: + // void; + // case CREATE_ACCOUNT_MALFORMED: + // case CREATE_ACCOUNT_UNDERFUNDED: + // case CREATE_ACCOUNT_LOW_RESERVE: + // case CREATE_ACCOUNT_ALREADY_EXIST: + // void; + // }; + // + // =========================================================================== + xdr.union("CreateAccountResult", { + switchOn: xdr.lookup("CreateAccountResultCode"), + switchName: "code", + switches: [["createAccountSuccess", xdr["void"]()], ["createAccountMalformed", xdr["void"]()], ["createAccountUnderfunded", xdr["void"]()], ["createAccountLowReserve", xdr["void"]()], ["createAccountAlreadyExist", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum PaymentResultCode + // { + // // codes considered as "success" for the operation + // PAYMENT_SUCCESS = 0, // payment successfully completed + // + // // codes considered as "failure" for the operation + // PAYMENT_MALFORMED = -1, // bad input + // PAYMENT_UNDERFUNDED = -2, // not enough funds in source account + // PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account + // PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer + // PAYMENT_NO_DESTINATION = -5, // destination account does not exist + // PAYMENT_NO_TRUST = -6, // destination missing a trust line for asset + // PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset + // PAYMENT_LINE_FULL = -8, // destination would go above their limit + // PAYMENT_NO_ISSUER = -9 // missing issuer on asset + // }; + // + // =========================================================================== + xdr["enum"]("PaymentResultCode", { + paymentSuccess: 0, + paymentMalformed: -1, + paymentUnderfunded: -2, + paymentSrcNoTrust: -3, + paymentSrcNotAuthorized: -4, + paymentNoDestination: -5, + paymentNoTrust: -6, + paymentNotAuthorized: -7, + paymentLineFull: -8, + paymentNoIssuer: -9 + }); + + // === xdr source ============================================================ + // + // union PaymentResult switch (PaymentResultCode code) + // { + // case PAYMENT_SUCCESS: + // void; + // case PAYMENT_MALFORMED: + // case PAYMENT_UNDERFUNDED: + // case PAYMENT_SRC_NO_TRUST: + // case PAYMENT_SRC_NOT_AUTHORIZED: + // case PAYMENT_NO_DESTINATION: + // case PAYMENT_NO_TRUST: + // case PAYMENT_NOT_AUTHORIZED: + // case PAYMENT_LINE_FULL: + // case PAYMENT_NO_ISSUER: + // void; + // }; + // + // =========================================================================== + xdr.union("PaymentResult", { + switchOn: xdr.lookup("PaymentResultCode"), + switchName: "code", + switches: [["paymentSuccess", xdr["void"]()], ["paymentMalformed", xdr["void"]()], ["paymentUnderfunded", xdr["void"]()], ["paymentSrcNoTrust", xdr["void"]()], ["paymentSrcNotAuthorized", xdr["void"]()], ["paymentNoDestination", xdr["void"]()], ["paymentNoTrust", xdr["void"]()], ["paymentNotAuthorized", xdr["void"]()], ["paymentLineFull", xdr["void"]()], ["paymentNoIssuer", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum PathPaymentStrictReceiveResultCode + // { + // // codes considered as "success" for the operation + // PATH_PAYMENT_STRICT_RECEIVE_SUCCESS = 0, // success + // + // // codes considered as "failure" for the operation + // PATH_PAYMENT_STRICT_RECEIVE_MALFORMED = -1, // bad input + // PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED = + // -2, // not enough funds in source account + // PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST = + // -3, // no trust line on source account + // PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED = + // -4, // source not authorized to transfer + // PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION = + // -5, // destination account does not exist + // PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST = + // -6, // dest missing a trust line for asset + // PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED = + // -7, // dest not authorized to hold asset + // PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL = + // -8, // dest would go above their limit + // PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER = -9, // missing issuer on one asset + // PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS = + // -10, // not enough offers to satisfy path + // PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF = + // -11, // would cross one of its own offers + // PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX = -12 // could not satisfy sendmax + // }; + // + // =========================================================================== + xdr["enum"]("PathPaymentStrictReceiveResultCode", { + pathPaymentStrictReceiveSuccess: 0, + pathPaymentStrictReceiveMalformed: -1, + pathPaymentStrictReceiveUnderfunded: -2, + pathPaymentStrictReceiveSrcNoTrust: -3, + pathPaymentStrictReceiveSrcNotAuthorized: -4, + pathPaymentStrictReceiveNoDestination: -5, + pathPaymentStrictReceiveNoTrust: -6, + pathPaymentStrictReceiveNotAuthorized: -7, + pathPaymentStrictReceiveLineFull: -8, + pathPaymentStrictReceiveNoIssuer: -9, + pathPaymentStrictReceiveTooFewOffers: -10, + pathPaymentStrictReceiveOfferCrossSelf: -11, + pathPaymentStrictReceiveOverSendmax: -12 + }); + + // === xdr source ============================================================ + // + // struct SimplePaymentResult + // { + // AccountID destination; + // Asset asset; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("SimplePaymentResult", [["destination", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } + // + // =========================================================================== + xdr.struct("PathPaymentStrictReceiveResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]); + + // === xdr source ============================================================ + // + // union PathPaymentStrictReceiveResult switch ( + // PathPaymentStrictReceiveResultCode code) + // { + // case PATH_PAYMENT_STRICT_RECEIVE_SUCCESS: + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } success; + // case PATH_PAYMENT_STRICT_RECEIVE_MALFORMED: + // case PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED: + // case PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST: + // case PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION: + // case PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST: + // case PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL: + // void; + // case PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER: + // Asset noIssuer; // the asset that caused the error + // case PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS: + // case PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF: + // case PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX: + // void; + // }; + // + // =========================================================================== + xdr.union("PathPaymentStrictReceiveResult", { + switchOn: xdr.lookup("PathPaymentStrictReceiveResultCode"), + switchName: "code", + switches: [["pathPaymentStrictReceiveSuccess", "success"], ["pathPaymentStrictReceiveMalformed", xdr["void"]()], ["pathPaymentStrictReceiveUnderfunded", xdr["void"]()], ["pathPaymentStrictReceiveSrcNoTrust", xdr["void"]()], ["pathPaymentStrictReceiveSrcNotAuthorized", xdr["void"]()], ["pathPaymentStrictReceiveNoDestination", xdr["void"]()], ["pathPaymentStrictReceiveNoTrust", xdr["void"]()], ["pathPaymentStrictReceiveNotAuthorized", xdr["void"]()], ["pathPaymentStrictReceiveLineFull", xdr["void"]()], ["pathPaymentStrictReceiveNoIssuer", "noIssuer"], ["pathPaymentStrictReceiveTooFewOffers", xdr["void"]()], ["pathPaymentStrictReceiveOfferCrossSelf", xdr["void"]()], ["pathPaymentStrictReceiveOverSendmax", xdr["void"]()]], + arms: { + success: xdr.lookup("PathPaymentStrictReceiveResultSuccess"), + noIssuer: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // enum PathPaymentStrictSendResultCode + // { + // // codes considered as "success" for the operation + // PATH_PAYMENT_STRICT_SEND_SUCCESS = 0, // success + // + // // codes considered as "failure" for the operation + // PATH_PAYMENT_STRICT_SEND_MALFORMED = -1, // bad input + // PATH_PAYMENT_STRICT_SEND_UNDERFUNDED = + // -2, // not enough funds in source account + // PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST = + // -3, // no trust line on source account + // PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED = + // -4, // source not authorized to transfer + // PATH_PAYMENT_STRICT_SEND_NO_DESTINATION = + // -5, // destination account does not exist + // PATH_PAYMENT_STRICT_SEND_NO_TRUST = + // -6, // dest missing a trust line for asset + // PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED = + // -7, // dest not authorized to hold asset + // PATH_PAYMENT_STRICT_SEND_LINE_FULL = -8, // dest would go above their limit + // PATH_PAYMENT_STRICT_SEND_NO_ISSUER = -9, // missing issuer on one asset + // PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS = + // -10, // not enough offers to satisfy path + // PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF = + // -11, // would cross one of its own offers + // PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN = -12 // could not satisfy destMin + // }; + // + // =========================================================================== + xdr["enum"]("PathPaymentStrictSendResultCode", { + pathPaymentStrictSendSuccess: 0, + pathPaymentStrictSendMalformed: -1, + pathPaymentStrictSendUnderfunded: -2, + pathPaymentStrictSendSrcNoTrust: -3, + pathPaymentStrictSendSrcNotAuthorized: -4, + pathPaymentStrictSendNoDestination: -5, + pathPaymentStrictSendNoTrust: -6, + pathPaymentStrictSendNotAuthorized: -7, + pathPaymentStrictSendLineFull: -8, + pathPaymentStrictSendNoIssuer: -9, + pathPaymentStrictSendTooFewOffers: -10, + pathPaymentStrictSendOfferCrossSelf: -11, + pathPaymentStrictSendUnderDestmin: -12 + }); + + // === xdr source ============================================================ + // + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } + // + // =========================================================================== + xdr.struct("PathPaymentStrictSendResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]); + + // === xdr source ============================================================ + // + // union PathPaymentStrictSendResult switch (PathPaymentStrictSendResultCode code) + // { + // case PATH_PAYMENT_STRICT_SEND_SUCCESS: + // struct + // { + // ClaimAtom offers<>; + // SimplePaymentResult last; + // } success; + // case PATH_PAYMENT_STRICT_SEND_MALFORMED: + // case PATH_PAYMENT_STRICT_SEND_UNDERFUNDED: + // case PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST: + // case PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_SEND_NO_DESTINATION: + // case PATH_PAYMENT_STRICT_SEND_NO_TRUST: + // case PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED: + // case PATH_PAYMENT_STRICT_SEND_LINE_FULL: + // void; + // case PATH_PAYMENT_STRICT_SEND_NO_ISSUER: + // Asset noIssuer; // the asset that caused the error + // case PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS: + // case PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF: + // case PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN: + // void; + // }; + // + // =========================================================================== + xdr.union("PathPaymentStrictSendResult", { + switchOn: xdr.lookup("PathPaymentStrictSendResultCode"), + switchName: "code", + switches: [["pathPaymentStrictSendSuccess", "success"], ["pathPaymentStrictSendMalformed", xdr["void"]()], ["pathPaymentStrictSendUnderfunded", xdr["void"]()], ["pathPaymentStrictSendSrcNoTrust", xdr["void"]()], ["pathPaymentStrictSendSrcNotAuthorized", xdr["void"]()], ["pathPaymentStrictSendNoDestination", xdr["void"]()], ["pathPaymentStrictSendNoTrust", xdr["void"]()], ["pathPaymentStrictSendNotAuthorized", xdr["void"]()], ["pathPaymentStrictSendLineFull", xdr["void"]()], ["pathPaymentStrictSendNoIssuer", "noIssuer"], ["pathPaymentStrictSendTooFewOffers", xdr["void"]()], ["pathPaymentStrictSendOfferCrossSelf", xdr["void"]()], ["pathPaymentStrictSendUnderDestmin", xdr["void"]()]], + arms: { + success: xdr.lookup("PathPaymentStrictSendResultSuccess"), + noIssuer: xdr.lookup("Asset") + } + }); + + // === xdr source ============================================================ + // + // enum ManageSellOfferResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_SELL_OFFER_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // MANAGE_SELL_OFFER_MALFORMED = -1, // generated offer would be invalid + // MANAGE_SELL_OFFER_SELL_NO_TRUST = + // -2, // no trust line for what we're selling + // MANAGE_SELL_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying + // MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell + // MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy + // MANAGE_SELL_OFFER_LINE_FULL = -6, // can't receive more of what it's buying + // MANAGE_SELL_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell + // MANAGE_SELL_OFFER_CROSS_SELF = + // -8, // would cross an offer from the same user + // MANAGE_SELL_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling + // MANAGE_SELL_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying + // + // // update errors + // MANAGE_SELL_OFFER_NOT_FOUND = + // -11, // offerID does not match an existing offer + // + // MANAGE_SELL_OFFER_LOW_RESERVE = + // -12 // not enough funds to create a new Offer + // }; + // + // =========================================================================== + xdr["enum"]("ManageSellOfferResultCode", { + manageSellOfferSuccess: 0, + manageSellOfferMalformed: -1, + manageSellOfferSellNoTrust: -2, + manageSellOfferBuyNoTrust: -3, + manageSellOfferSellNotAuthorized: -4, + manageSellOfferBuyNotAuthorized: -5, + manageSellOfferLineFull: -6, + manageSellOfferUnderfunded: -7, + manageSellOfferCrossSelf: -8, + manageSellOfferSellNoIssuer: -9, + manageSellOfferBuyNoIssuer: -10, + manageSellOfferNotFound: -11, + manageSellOfferLowReserve: -12 + }); + + // === xdr source ============================================================ + // + // enum ManageOfferEffect + // { + // MANAGE_OFFER_CREATED = 0, + // MANAGE_OFFER_UPDATED = 1, + // MANAGE_OFFER_DELETED = 2 + // }; + // + // =========================================================================== + xdr["enum"]("ManageOfferEffect", { + manageOfferCreated: 0, + manageOfferUpdated: 1, + manageOfferDeleted: 2 + }); + + // === xdr source ============================================================ + // + // union switch (ManageOfferEffect effect) + // { + // case MANAGE_OFFER_CREATED: + // case MANAGE_OFFER_UPDATED: + // OfferEntry offer; + // case MANAGE_OFFER_DELETED: + // void; + // } + // + // =========================================================================== + xdr.union("ManageOfferSuccessResultOffer", { + switchOn: xdr.lookup("ManageOfferEffect"), + switchName: "effect", + switches: [["manageOfferCreated", "offer"], ["manageOfferUpdated", "offer"], ["manageOfferDeleted", xdr["void"]()]], + arms: { + offer: xdr.lookup("OfferEntry") + } + }); + + // === xdr source ============================================================ + // + // struct ManageOfferSuccessResult + // { + // // offers that got claimed while creating this offer + // ClaimAtom offersClaimed<>; + // + // union switch (ManageOfferEffect effect) + // { + // case MANAGE_OFFER_CREATED: + // case MANAGE_OFFER_UPDATED: + // OfferEntry offer; + // case MANAGE_OFFER_DELETED: + // void; + // } + // offer; + // }; + // + // =========================================================================== + xdr.struct("ManageOfferSuccessResult", [["offersClaimed", xdr.varArray(xdr.lookup("ClaimAtom"), 2147483647)], ["offer", xdr.lookup("ManageOfferSuccessResultOffer")]]); + + // === xdr source ============================================================ + // + // union ManageSellOfferResult switch (ManageSellOfferResultCode code) + // { + // case MANAGE_SELL_OFFER_SUCCESS: + // ManageOfferSuccessResult success; + // case MANAGE_SELL_OFFER_MALFORMED: + // case MANAGE_SELL_OFFER_SELL_NO_TRUST: + // case MANAGE_SELL_OFFER_BUY_NO_TRUST: + // case MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED: + // case MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED: + // case MANAGE_SELL_OFFER_LINE_FULL: + // case MANAGE_SELL_OFFER_UNDERFUNDED: + // case MANAGE_SELL_OFFER_CROSS_SELF: + // case MANAGE_SELL_OFFER_SELL_NO_ISSUER: + // case MANAGE_SELL_OFFER_BUY_NO_ISSUER: + // case MANAGE_SELL_OFFER_NOT_FOUND: + // case MANAGE_SELL_OFFER_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageSellOfferResult", { + switchOn: xdr.lookup("ManageSellOfferResultCode"), + switchName: "code", + switches: [["manageSellOfferSuccess", "success"], ["manageSellOfferMalformed", xdr["void"]()], ["manageSellOfferSellNoTrust", xdr["void"]()], ["manageSellOfferBuyNoTrust", xdr["void"]()], ["manageSellOfferSellNotAuthorized", xdr["void"]()], ["manageSellOfferBuyNotAuthorized", xdr["void"]()], ["manageSellOfferLineFull", xdr["void"]()], ["manageSellOfferUnderfunded", xdr["void"]()], ["manageSellOfferCrossSelf", xdr["void"]()], ["manageSellOfferSellNoIssuer", xdr["void"]()], ["manageSellOfferBuyNoIssuer", xdr["void"]()], ["manageSellOfferNotFound", xdr["void"]()], ["manageSellOfferLowReserve", xdr["void"]()]], + arms: { + success: xdr.lookup("ManageOfferSuccessResult") + } + }); + + // === xdr source ============================================================ + // + // enum ManageBuyOfferResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_BUY_OFFER_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // MANAGE_BUY_OFFER_MALFORMED = -1, // generated offer would be invalid + // MANAGE_BUY_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling + // MANAGE_BUY_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying + // MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell + // MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy + // MANAGE_BUY_OFFER_LINE_FULL = -6, // can't receive more of what it's buying + // MANAGE_BUY_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell + // MANAGE_BUY_OFFER_CROSS_SELF = -8, // would cross an offer from the same user + // MANAGE_BUY_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling + // MANAGE_BUY_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying + // + // // update errors + // MANAGE_BUY_OFFER_NOT_FOUND = + // -11, // offerID does not match an existing offer + // + // MANAGE_BUY_OFFER_LOW_RESERVE = -12 // not enough funds to create a new Offer + // }; + // + // =========================================================================== + xdr["enum"]("ManageBuyOfferResultCode", { + manageBuyOfferSuccess: 0, + manageBuyOfferMalformed: -1, + manageBuyOfferSellNoTrust: -2, + manageBuyOfferBuyNoTrust: -3, + manageBuyOfferSellNotAuthorized: -4, + manageBuyOfferBuyNotAuthorized: -5, + manageBuyOfferLineFull: -6, + manageBuyOfferUnderfunded: -7, + manageBuyOfferCrossSelf: -8, + manageBuyOfferSellNoIssuer: -9, + manageBuyOfferBuyNoIssuer: -10, + manageBuyOfferNotFound: -11, + manageBuyOfferLowReserve: -12 + }); + + // === xdr source ============================================================ + // + // union ManageBuyOfferResult switch (ManageBuyOfferResultCode code) + // { + // case MANAGE_BUY_OFFER_SUCCESS: + // ManageOfferSuccessResult success; + // case MANAGE_BUY_OFFER_MALFORMED: + // case MANAGE_BUY_OFFER_SELL_NO_TRUST: + // case MANAGE_BUY_OFFER_BUY_NO_TRUST: + // case MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED: + // case MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED: + // case MANAGE_BUY_OFFER_LINE_FULL: + // case MANAGE_BUY_OFFER_UNDERFUNDED: + // case MANAGE_BUY_OFFER_CROSS_SELF: + // case MANAGE_BUY_OFFER_SELL_NO_ISSUER: + // case MANAGE_BUY_OFFER_BUY_NO_ISSUER: + // case MANAGE_BUY_OFFER_NOT_FOUND: + // case MANAGE_BUY_OFFER_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageBuyOfferResult", { + switchOn: xdr.lookup("ManageBuyOfferResultCode"), + switchName: "code", + switches: [["manageBuyOfferSuccess", "success"], ["manageBuyOfferMalformed", xdr["void"]()], ["manageBuyOfferSellNoTrust", xdr["void"]()], ["manageBuyOfferBuyNoTrust", xdr["void"]()], ["manageBuyOfferSellNotAuthorized", xdr["void"]()], ["manageBuyOfferBuyNotAuthorized", xdr["void"]()], ["manageBuyOfferLineFull", xdr["void"]()], ["manageBuyOfferUnderfunded", xdr["void"]()], ["manageBuyOfferCrossSelf", xdr["void"]()], ["manageBuyOfferSellNoIssuer", xdr["void"]()], ["manageBuyOfferBuyNoIssuer", xdr["void"]()], ["manageBuyOfferNotFound", xdr["void"]()], ["manageBuyOfferLowReserve", xdr["void"]()]], + arms: { + success: xdr.lookup("ManageOfferSuccessResult") + } + }); + + // === xdr source ============================================================ + // + // enum SetOptionsResultCode + // { + // // codes considered as "success" for the operation + // SET_OPTIONS_SUCCESS = 0, + // // codes considered as "failure" for the operation + // SET_OPTIONS_LOW_RESERVE = -1, // not enough funds to add a signer + // SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached + // SET_OPTIONS_BAD_FLAGS = -3, // invalid combination of clear/set flags + // SET_OPTIONS_INVALID_INFLATION = -4, // inflation account does not exist + // SET_OPTIONS_CANT_CHANGE = -5, // can no longer change this option + // SET_OPTIONS_UNKNOWN_FLAG = -6, // can't set an unknown flag + // SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold + // SET_OPTIONS_BAD_SIGNER = -8, // signer cannot be masterkey + // SET_OPTIONS_INVALID_HOME_DOMAIN = -9, // malformed home domain + // SET_OPTIONS_AUTH_REVOCABLE_REQUIRED = + // -10 // auth revocable is required for clawback + // }; + // + // =========================================================================== + xdr["enum"]("SetOptionsResultCode", { + setOptionsSuccess: 0, + setOptionsLowReserve: -1, + setOptionsTooManySigners: -2, + setOptionsBadFlags: -3, + setOptionsInvalidInflation: -4, + setOptionsCantChange: -5, + setOptionsUnknownFlag: -6, + setOptionsThresholdOutOfRange: -7, + setOptionsBadSigner: -8, + setOptionsInvalidHomeDomain: -9, + setOptionsAuthRevocableRequired: -10 + }); + + // === xdr source ============================================================ + // + // union SetOptionsResult switch (SetOptionsResultCode code) + // { + // case SET_OPTIONS_SUCCESS: + // void; + // case SET_OPTIONS_LOW_RESERVE: + // case SET_OPTIONS_TOO_MANY_SIGNERS: + // case SET_OPTIONS_BAD_FLAGS: + // case SET_OPTIONS_INVALID_INFLATION: + // case SET_OPTIONS_CANT_CHANGE: + // case SET_OPTIONS_UNKNOWN_FLAG: + // case SET_OPTIONS_THRESHOLD_OUT_OF_RANGE: + // case SET_OPTIONS_BAD_SIGNER: + // case SET_OPTIONS_INVALID_HOME_DOMAIN: + // case SET_OPTIONS_AUTH_REVOCABLE_REQUIRED: + // void; + // }; + // + // =========================================================================== + xdr.union("SetOptionsResult", { + switchOn: xdr.lookup("SetOptionsResultCode"), + switchName: "code", + switches: [["setOptionsSuccess", xdr["void"]()], ["setOptionsLowReserve", xdr["void"]()], ["setOptionsTooManySigners", xdr["void"]()], ["setOptionsBadFlags", xdr["void"]()], ["setOptionsInvalidInflation", xdr["void"]()], ["setOptionsCantChange", xdr["void"]()], ["setOptionsUnknownFlag", xdr["void"]()], ["setOptionsThresholdOutOfRange", xdr["void"]()], ["setOptionsBadSigner", xdr["void"]()], ["setOptionsInvalidHomeDomain", xdr["void"]()], ["setOptionsAuthRevocableRequired", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ChangeTrustResultCode + // { + // // codes considered as "success" for the operation + // CHANGE_TRUST_SUCCESS = 0, + // // codes considered as "failure" for the operation + // CHANGE_TRUST_MALFORMED = -1, // bad input + // CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer + // CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance + // // cannot create with a limit of 0 + // CHANGE_TRUST_LOW_RESERVE = + // -4, // not enough funds to create a new trust line, + // CHANGE_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed + // CHANGE_TRUST_TRUST_LINE_MISSING = -6, // Asset trustline is missing for pool + // CHANGE_TRUST_CANNOT_DELETE = + // -7, // Asset trustline is still referenced in a pool + // CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES = + // -8 // Asset trustline is deauthorized + // }; + // + // =========================================================================== + xdr["enum"]("ChangeTrustResultCode", { + changeTrustSuccess: 0, + changeTrustMalformed: -1, + changeTrustNoIssuer: -2, + changeTrustInvalidLimit: -3, + changeTrustLowReserve: -4, + changeTrustSelfNotAllowed: -5, + changeTrustTrustLineMissing: -6, + changeTrustCannotDelete: -7, + changeTrustNotAuthMaintainLiabilities: -8 + }); + + // === xdr source ============================================================ + // + // union ChangeTrustResult switch (ChangeTrustResultCode code) + // { + // case CHANGE_TRUST_SUCCESS: + // void; + // case CHANGE_TRUST_MALFORMED: + // case CHANGE_TRUST_NO_ISSUER: + // case CHANGE_TRUST_INVALID_LIMIT: + // case CHANGE_TRUST_LOW_RESERVE: + // case CHANGE_TRUST_SELF_NOT_ALLOWED: + // case CHANGE_TRUST_TRUST_LINE_MISSING: + // case CHANGE_TRUST_CANNOT_DELETE: + // case CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES: + // void; + // }; + // + // =========================================================================== + xdr.union("ChangeTrustResult", { + switchOn: xdr.lookup("ChangeTrustResultCode"), + switchName: "code", + switches: [["changeTrustSuccess", xdr["void"]()], ["changeTrustMalformed", xdr["void"]()], ["changeTrustNoIssuer", xdr["void"]()], ["changeTrustInvalidLimit", xdr["void"]()], ["changeTrustLowReserve", xdr["void"]()], ["changeTrustSelfNotAllowed", xdr["void"]()], ["changeTrustTrustLineMissing", xdr["void"]()], ["changeTrustCannotDelete", xdr["void"]()], ["changeTrustNotAuthMaintainLiabilities", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum AllowTrustResultCode + // { + // // codes considered as "success" for the operation + // ALLOW_TRUST_SUCCESS = 0, + // // codes considered as "failure" for the operation + // ALLOW_TRUST_MALFORMED = -1, // asset is not ASSET_TYPE_ALPHANUM + // ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline + // // source account does not require trust + // ALLOW_TRUST_TRUST_NOT_REQUIRED = -3, + // ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust, + // ALLOW_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed + // ALLOW_TRUST_LOW_RESERVE = -6 // claimable balances can't be created + // // on revoke due to low reserves + // }; + // + // =========================================================================== + xdr["enum"]("AllowTrustResultCode", { + allowTrustSuccess: 0, + allowTrustMalformed: -1, + allowTrustNoTrustLine: -2, + allowTrustTrustNotRequired: -3, + allowTrustCantRevoke: -4, + allowTrustSelfNotAllowed: -5, + allowTrustLowReserve: -6 + }); + + // === xdr source ============================================================ + // + // union AllowTrustResult switch (AllowTrustResultCode code) + // { + // case ALLOW_TRUST_SUCCESS: + // void; + // case ALLOW_TRUST_MALFORMED: + // case ALLOW_TRUST_NO_TRUST_LINE: + // case ALLOW_TRUST_TRUST_NOT_REQUIRED: + // case ALLOW_TRUST_CANT_REVOKE: + // case ALLOW_TRUST_SELF_NOT_ALLOWED: + // case ALLOW_TRUST_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("AllowTrustResult", { + switchOn: xdr.lookup("AllowTrustResultCode"), + switchName: "code", + switches: [["allowTrustSuccess", xdr["void"]()], ["allowTrustMalformed", xdr["void"]()], ["allowTrustNoTrustLine", xdr["void"]()], ["allowTrustTrustNotRequired", xdr["void"]()], ["allowTrustCantRevoke", xdr["void"]()], ["allowTrustSelfNotAllowed", xdr["void"]()], ["allowTrustLowReserve", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum AccountMergeResultCode + // { + // // codes considered as "success" for the operation + // ACCOUNT_MERGE_SUCCESS = 0, + // // codes considered as "failure" for the operation + // ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself + // ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist + // ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set + // ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers + // ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5, // sequence number is over max allowed + // ACCOUNT_MERGE_DEST_FULL = -6, // can't add source balance to + // // destination balance + // ACCOUNT_MERGE_IS_SPONSOR = -7 // can't merge account that is a sponsor + // }; + // + // =========================================================================== + xdr["enum"]("AccountMergeResultCode", { + accountMergeSuccess: 0, + accountMergeMalformed: -1, + accountMergeNoAccount: -2, + accountMergeImmutableSet: -3, + accountMergeHasSubEntries: -4, + accountMergeSeqnumTooFar: -5, + accountMergeDestFull: -6, + accountMergeIsSponsor: -7 + }); + + // === xdr source ============================================================ + // + // union AccountMergeResult switch (AccountMergeResultCode code) + // { + // case ACCOUNT_MERGE_SUCCESS: + // int64 sourceAccountBalance; // how much got transferred from source account + // case ACCOUNT_MERGE_MALFORMED: + // case ACCOUNT_MERGE_NO_ACCOUNT: + // case ACCOUNT_MERGE_IMMUTABLE_SET: + // case ACCOUNT_MERGE_HAS_SUB_ENTRIES: + // case ACCOUNT_MERGE_SEQNUM_TOO_FAR: + // case ACCOUNT_MERGE_DEST_FULL: + // case ACCOUNT_MERGE_IS_SPONSOR: + // void; + // }; + // + // =========================================================================== + xdr.union("AccountMergeResult", { + switchOn: xdr.lookup("AccountMergeResultCode"), + switchName: "code", + switches: [["accountMergeSuccess", "sourceAccountBalance"], ["accountMergeMalformed", xdr["void"]()], ["accountMergeNoAccount", xdr["void"]()], ["accountMergeImmutableSet", xdr["void"]()], ["accountMergeHasSubEntries", xdr["void"]()], ["accountMergeSeqnumTooFar", xdr["void"]()], ["accountMergeDestFull", xdr["void"]()], ["accountMergeIsSponsor", xdr["void"]()]], + arms: { + sourceAccountBalance: xdr.lookup("Int64") + } + }); + + // === xdr source ============================================================ + // + // enum InflationResultCode + // { + // // codes considered as "success" for the operation + // INFLATION_SUCCESS = 0, + // // codes considered as "failure" for the operation + // INFLATION_NOT_TIME = -1 + // }; + // + // =========================================================================== + xdr["enum"]("InflationResultCode", { + inflationSuccess: 0, + inflationNotTime: -1 + }); + + // === xdr source ============================================================ + // + // struct InflationPayout // or use PaymentResultAtom to limit types? + // { + // AccountID destination; + // int64 amount; + // }; + // + // =========================================================================== + xdr.struct("InflationPayout", [["destination", xdr.lookup("AccountId")], ["amount", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // union InflationResult switch (InflationResultCode code) + // { + // case INFLATION_SUCCESS: + // InflationPayout payouts<>; + // case INFLATION_NOT_TIME: + // void; + // }; + // + // =========================================================================== + xdr.union("InflationResult", { + switchOn: xdr.lookup("InflationResultCode"), + switchName: "code", + switches: [["inflationSuccess", "payouts"], ["inflationNotTime", xdr["void"]()]], + arms: { + payouts: xdr.varArray(xdr.lookup("InflationPayout"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // enum ManageDataResultCode + // { + // // codes considered as "success" for the operation + // MANAGE_DATA_SUCCESS = 0, + // // codes considered as "failure" for the operation + // MANAGE_DATA_NOT_SUPPORTED_YET = + // -1, // The network hasn't moved to this protocol change yet + // MANAGE_DATA_NAME_NOT_FOUND = + // -2, // Trying to remove a Data Entry that isn't there + // MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry + // MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string + // }; + // + // =========================================================================== + xdr["enum"]("ManageDataResultCode", { + manageDataSuccess: 0, + manageDataNotSupportedYet: -1, + manageDataNameNotFound: -2, + manageDataLowReserve: -3, + manageDataInvalidName: -4 + }); + + // === xdr source ============================================================ + // + // union ManageDataResult switch (ManageDataResultCode code) + // { + // case MANAGE_DATA_SUCCESS: + // void; + // case MANAGE_DATA_NOT_SUPPORTED_YET: + // case MANAGE_DATA_NAME_NOT_FOUND: + // case MANAGE_DATA_LOW_RESERVE: + // case MANAGE_DATA_INVALID_NAME: + // void; + // }; + // + // =========================================================================== + xdr.union("ManageDataResult", { + switchOn: xdr.lookup("ManageDataResultCode"), + switchName: "code", + switches: [["manageDataSuccess", xdr["void"]()], ["manageDataNotSupportedYet", xdr["void"]()], ["manageDataNameNotFound", xdr["void"]()], ["manageDataLowReserve", xdr["void"]()], ["manageDataInvalidName", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum BumpSequenceResultCode + // { + // // codes considered as "success" for the operation + // BUMP_SEQUENCE_SUCCESS = 0, + // // codes considered as "failure" for the operation + // BUMP_SEQUENCE_BAD_SEQ = -1 // `bumpTo` is not within bounds + // }; + // + // =========================================================================== + xdr["enum"]("BumpSequenceResultCode", { + bumpSequenceSuccess: 0, + bumpSequenceBadSeq: -1 + }); + + // === xdr source ============================================================ + // + // union BumpSequenceResult switch (BumpSequenceResultCode code) + // { + // case BUMP_SEQUENCE_SUCCESS: + // void; + // case BUMP_SEQUENCE_BAD_SEQ: + // void; + // }; + // + // =========================================================================== + xdr.union("BumpSequenceResult", { + switchOn: xdr.lookup("BumpSequenceResultCode"), + switchName: "code", + switches: [["bumpSequenceSuccess", xdr["void"]()], ["bumpSequenceBadSeq", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum CreateClaimableBalanceResultCode + // { + // CREATE_CLAIMABLE_BALANCE_SUCCESS = 0, + // CREATE_CLAIMABLE_BALANCE_MALFORMED = -1, + // CREATE_CLAIMABLE_BALANCE_LOW_RESERVE = -2, + // CREATE_CLAIMABLE_BALANCE_NO_TRUST = -3, + // CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -4, + // CREATE_CLAIMABLE_BALANCE_UNDERFUNDED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("CreateClaimableBalanceResultCode", { + createClaimableBalanceSuccess: 0, + createClaimableBalanceMalformed: -1, + createClaimableBalanceLowReserve: -2, + createClaimableBalanceNoTrust: -3, + createClaimableBalanceNotAuthorized: -4, + createClaimableBalanceUnderfunded: -5 + }); + + // === xdr source ============================================================ + // + // union CreateClaimableBalanceResult switch ( + // CreateClaimableBalanceResultCode code) + // { + // case CREATE_CLAIMABLE_BALANCE_SUCCESS: + // ClaimableBalanceID balanceID; + // case CREATE_CLAIMABLE_BALANCE_MALFORMED: + // case CREATE_CLAIMABLE_BALANCE_LOW_RESERVE: + // case CREATE_CLAIMABLE_BALANCE_NO_TRUST: + // case CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED: + // case CREATE_CLAIMABLE_BALANCE_UNDERFUNDED: + // void; + // }; + // + // =========================================================================== + xdr.union("CreateClaimableBalanceResult", { + switchOn: xdr.lookup("CreateClaimableBalanceResultCode"), + switchName: "code", + switches: [["createClaimableBalanceSuccess", "balanceId"], ["createClaimableBalanceMalformed", xdr["void"]()], ["createClaimableBalanceLowReserve", xdr["void"]()], ["createClaimableBalanceNoTrust", xdr["void"]()], ["createClaimableBalanceNotAuthorized", xdr["void"]()], ["createClaimableBalanceUnderfunded", xdr["void"]()]], + arms: { + balanceId: xdr.lookup("ClaimableBalanceId") + } + }); + + // === xdr source ============================================================ + // + // enum ClaimClaimableBalanceResultCode + // { + // CLAIM_CLAIMABLE_BALANCE_SUCCESS = 0, + // CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1, + // CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM = -2, + // CLAIM_CLAIMABLE_BALANCE_LINE_FULL = -3, + // CLAIM_CLAIMABLE_BALANCE_NO_TRUST = -4, + // CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("ClaimClaimableBalanceResultCode", { + claimClaimableBalanceSuccess: 0, + claimClaimableBalanceDoesNotExist: -1, + claimClaimableBalanceCannotClaim: -2, + claimClaimableBalanceLineFull: -3, + claimClaimableBalanceNoTrust: -4, + claimClaimableBalanceNotAuthorized: -5 + }); + + // === xdr source ============================================================ + // + // union ClaimClaimableBalanceResult switch (ClaimClaimableBalanceResultCode code) + // { + // case CLAIM_CLAIMABLE_BALANCE_SUCCESS: + // void; + // case CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST: + // case CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM: + // case CLAIM_CLAIMABLE_BALANCE_LINE_FULL: + // case CLAIM_CLAIMABLE_BALANCE_NO_TRUST: + // case CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClaimClaimableBalanceResult", { + switchOn: xdr.lookup("ClaimClaimableBalanceResultCode"), + switchName: "code", + switches: [["claimClaimableBalanceSuccess", xdr["void"]()], ["claimClaimableBalanceDoesNotExist", xdr["void"]()], ["claimClaimableBalanceCannotClaim", xdr["void"]()], ["claimClaimableBalanceLineFull", xdr["void"]()], ["claimClaimableBalanceNoTrust", xdr["void"]()], ["claimClaimableBalanceNotAuthorized", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum BeginSponsoringFutureReservesResultCode + // { + // // codes considered as "success" for the operation + // BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED = -1, + // BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED = -2, + // BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("BeginSponsoringFutureReservesResultCode", { + beginSponsoringFutureReservesSuccess: 0, + beginSponsoringFutureReservesMalformed: -1, + beginSponsoringFutureReservesAlreadySponsored: -2, + beginSponsoringFutureReservesRecursive: -3 + }); + + // === xdr source ============================================================ + // + // union BeginSponsoringFutureReservesResult switch ( + // BeginSponsoringFutureReservesResultCode code) + // { + // case BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS: + // void; + // case BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED: + // case BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED: + // case BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE: + // void; + // }; + // + // =========================================================================== + xdr.union("BeginSponsoringFutureReservesResult", { + switchOn: xdr.lookup("BeginSponsoringFutureReservesResultCode"), + switchName: "code", + switches: [["beginSponsoringFutureReservesSuccess", xdr["void"]()], ["beginSponsoringFutureReservesMalformed", xdr["void"]()], ["beginSponsoringFutureReservesAlreadySponsored", xdr["void"]()], ["beginSponsoringFutureReservesRecursive", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum EndSponsoringFutureReservesResultCode + // { + // // codes considered as "success" for the operation + // END_SPONSORING_FUTURE_RESERVES_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED = -1 + // }; + // + // =========================================================================== + xdr["enum"]("EndSponsoringFutureReservesResultCode", { + endSponsoringFutureReservesSuccess: 0, + endSponsoringFutureReservesNotSponsored: -1 + }); + + // === xdr source ============================================================ + // + // union EndSponsoringFutureReservesResult switch ( + // EndSponsoringFutureReservesResultCode code) + // { + // case END_SPONSORING_FUTURE_RESERVES_SUCCESS: + // void; + // case END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED: + // void; + // }; + // + // =========================================================================== + xdr.union("EndSponsoringFutureReservesResult", { + switchOn: xdr.lookup("EndSponsoringFutureReservesResultCode"), + switchName: "code", + switches: [["endSponsoringFutureReservesSuccess", xdr["void"]()], ["endSponsoringFutureReservesNotSponsored", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum RevokeSponsorshipResultCode + // { + // // codes considered as "success" for the operation + // REVOKE_SPONSORSHIP_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // REVOKE_SPONSORSHIP_DOES_NOT_EXIST = -1, + // REVOKE_SPONSORSHIP_NOT_SPONSOR = -2, + // REVOKE_SPONSORSHIP_LOW_RESERVE = -3, + // REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE = -4, + // REVOKE_SPONSORSHIP_MALFORMED = -5 + // }; + // + // =========================================================================== + xdr["enum"]("RevokeSponsorshipResultCode", { + revokeSponsorshipSuccess: 0, + revokeSponsorshipDoesNotExist: -1, + revokeSponsorshipNotSponsor: -2, + revokeSponsorshipLowReserve: -3, + revokeSponsorshipOnlyTransferable: -4, + revokeSponsorshipMalformed: -5 + }); + + // === xdr source ============================================================ + // + // union RevokeSponsorshipResult switch (RevokeSponsorshipResultCode code) + // { + // case REVOKE_SPONSORSHIP_SUCCESS: + // void; + // case REVOKE_SPONSORSHIP_DOES_NOT_EXIST: + // case REVOKE_SPONSORSHIP_NOT_SPONSOR: + // case REVOKE_SPONSORSHIP_LOW_RESERVE: + // case REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE: + // case REVOKE_SPONSORSHIP_MALFORMED: + // void; + // }; + // + // =========================================================================== + xdr.union("RevokeSponsorshipResult", { + switchOn: xdr.lookup("RevokeSponsorshipResultCode"), + switchName: "code", + switches: [["revokeSponsorshipSuccess", xdr["void"]()], ["revokeSponsorshipDoesNotExist", xdr["void"]()], ["revokeSponsorshipNotSponsor", xdr["void"]()], ["revokeSponsorshipLowReserve", xdr["void"]()], ["revokeSponsorshipOnlyTransferable", xdr["void"]()], ["revokeSponsorshipMalformed", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ClawbackResultCode + // { + // // codes considered as "success" for the operation + // CLAWBACK_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // CLAWBACK_MALFORMED = -1, + // CLAWBACK_NOT_CLAWBACK_ENABLED = -2, + // CLAWBACK_NO_TRUST = -3, + // CLAWBACK_UNDERFUNDED = -4 + // }; + // + // =========================================================================== + xdr["enum"]("ClawbackResultCode", { + clawbackSuccess: 0, + clawbackMalformed: -1, + clawbackNotClawbackEnabled: -2, + clawbackNoTrust: -3, + clawbackUnderfunded: -4 + }); + + // === xdr source ============================================================ + // + // union ClawbackResult switch (ClawbackResultCode code) + // { + // case CLAWBACK_SUCCESS: + // void; + // case CLAWBACK_MALFORMED: + // case CLAWBACK_NOT_CLAWBACK_ENABLED: + // case CLAWBACK_NO_TRUST: + // case CLAWBACK_UNDERFUNDED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClawbackResult", { + switchOn: xdr.lookup("ClawbackResultCode"), + switchName: "code", + switches: [["clawbackSuccess", xdr["void"]()], ["clawbackMalformed", xdr["void"]()], ["clawbackNotClawbackEnabled", xdr["void"]()], ["clawbackNoTrust", xdr["void"]()], ["clawbackUnderfunded", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum ClawbackClaimableBalanceResultCode + // { + // // codes considered as "success" for the operation + // CLAWBACK_CLAIMABLE_BALANCE_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1, + // CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER = -2, + // CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED = -3 + // }; + // + // =========================================================================== + xdr["enum"]("ClawbackClaimableBalanceResultCode", { + clawbackClaimableBalanceSuccess: 0, + clawbackClaimableBalanceDoesNotExist: -1, + clawbackClaimableBalanceNotIssuer: -2, + clawbackClaimableBalanceNotClawbackEnabled: -3 + }); + + // === xdr source ============================================================ + // + // union ClawbackClaimableBalanceResult switch ( + // ClawbackClaimableBalanceResultCode code) + // { + // case CLAWBACK_CLAIMABLE_BALANCE_SUCCESS: + // void; + // case CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST: + // case CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER: + // case CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED: + // void; + // }; + // + // =========================================================================== + xdr.union("ClawbackClaimableBalanceResult", { + switchOn: xdr.lookup("ClawbackClaimableBalanceResultCode"), + switchName: "code", + switches: [["clawbackClaimableBalanceSuccess", xdr["void"]()], ["clawbackClaimableBalanceDoesNotExist", xdr["void"]()], ["clawbackClaimableBalanceNotIssuer", xdr["void"]()], ["clawbackClaimableBalanceNotClawbackEnabled", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum SetTrustLineFlagsResultCode + // { + // // codes considered as "success" for the operation + // SET_TRUST_LINE_FLAGS_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // SET_TRUST_LINE_FLAGS_MALFORMED = -1, + // SET_TRUST_LINE_FLAGS_NO_TRUST_LINE = -2, + // SET_TRUST_LINE_FLAGS_CANT_REVOKE = -3, + // SET_TRUST_LINE_FLAGS_INVALID_STATE = -4, + // SET_TRUST_LINE_FLAGS_LOW_RESERVE = -5 // claimable balances can't be created + // // on revoke due to low reserves + // }; + // + // =========================================================================== + xdr["enum"]("SetTrustLineFlagsResultCode", { + setTrustLineFlagsSuccess: 0, + setTrustLineFlagsMalformed: -1, + setTrustLineFlagsNoTrustLine: -2, + setTrustLineFlagsCantRevoke: -3, + setTrustLineFlagsInvalidState: -4, + setTrustLineFlagsLowReserve: -5 + }); + + // === xdr source ============================================================ + // + // union SetTrustLineFlagsResult switch (SetTrustLineFlagsResultCode code) + // { + // case SET_TRUST_LINE_FLAGS_SUCCESS: + // void; + // case SET_TRUST_LINE_FLAGS_MALFORMED: + // case SET_TRUST_LINE_FLAGS_NO_TRUST_LINE: + // case SET_TRUST_LINE_FLAGS_CANT_REVOKE: + // case SET_TRUST_LINE_FLAGS_INVALID_STATE: + // case SET_TRUST_LINE_FLAGS_LOW_RESERVE: + // void; + // }; + // + // =========================================================================== + xdr.union("SetTrustLineFlagsResult", { + switchOn: xdr.lookup("SetTrustLineFlagsResultCode"), + switchName: "code", + switches: [["setTrustLineFlagsSuccess", xdr["void"]()], ["setTrustLineFlagsMalformed", xdr["void"]()], ["setTrustLineFlagsNoTrustLine", xdr["void"]()], ["setTrustLineFlagsCantRevoke", xdr["void"]()], ["setTrustLineFlagsInvalidState", xdr["void"]()], ["setTrustLineFlagsLowReserve", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum LiquidityPoolDepositResultCode + // { + // // codes considered as "success" for the operation + // LIQUIDITY_POOL_DEPOSIT_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // LIQUIDITY_POOL_DEPOSIT_MALFORMED = -1, // bad input + // LIQUIDITY_POOL_DEPOSIT_NO_TRUST = -2, // no trust line for one of the + // // assets + // LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED = -3, // not authorized for one of the + // // assets + // LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED = -4, // not enough balance for one of + // // the assets + // LIQUIDITY_POOL_DEPOSIT_LINE_FULL = -5, // pool share trust line doesn't + // // have sufficient limit + // LIQUIDITY_POOL_DEPOSIT_BAD_PRICE = -6, // deposit price outside bounds + // LIQUIDITY_POOL_DEPOSIT_POOL_FULL = -7 // pool reserves are full + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolDepositResultCode", { + liquidityPoolDepositSuccess: 0, + liquidityPoolDepositMalformed: -1, + liquidityPoolDepositNoTrust: -2, + liquidityPoolDepositNotAuthorized: -3, + liquidityPoolDepositUnderfunded: -4, + liquidityPoolDepositLineFull: -5, + liquidityPoolDepositBadPrice: -6, + liquidityPoolDepositPoolFull: -7 + }); + + // === xdr source ============================================================ + // + // union LiquidityPoolDepositResult switch (LiquidityPoolDepositResultCode code) + // { + // case LIQUIDITY_POOL_DEPOSIT_SUCCESS: + // void; + // case LIQUIDITY_POOL_DEPOSIT_MALFORMED: + // case LIQUIDITY_POOL_DEPOSIT_NO_TRUST: + // case LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED: + // case LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED: + // case LIQUIDITY_POOL_DEPOSIT_LINE_FULL: + // case LIQUIDITY_POOL_DEPOSIT_BAD_PRICE: + // case LIQUIDITY_POOL_DEPOSIT_POOL_FULL: + // void; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolDepositResult", { + switchOn: xdr.lookup("LiquidityPoolDepositResultCode"), + switchName: "code", + switches: [["liquidityPoolDepositSuccess", xdr["void"]()], ["liquidityPoolDepositMalformed", xdr["void"]()], ["liquidityPoolDepositNoTrust", xdr["void"]()], ["liquidityPoolDepositNotAuthorized", xdr["void"]()], ["liquidityPoolDepositUnderfunded", xdr["void"]()], ["liquidityPoolDepositLineFull", xdr["void"]()], ["liquidityPoolDepositBadPrice", xdr["void"]()], ["liquidityPoolDepositPoolFull", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum LiquidityPoolWithdrawResultCode + // { + // // codes considered as "success" for the operation + // LIQUIDITY_POOL_WITHDRAW_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // LIQUIDITY_POOL_WITHDRAW_MALFORMED = -1, // bad input + // LIQUIDITY_POOL_WITHDRAW_NO_TRUST = -2, // no trust line for one of the + // // assets + // LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED = -3, // not enough balance of the + // // pool share + // LIQUIDITY_POOL_WITHDRAW_LINE_FULL = -4, // would go above limit for one + // // of the assets + // LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM = -5 // didn't withdraw enough + // }; + // + // =========================================================================== + xdr["enum"]("LiquidityPoolWithdrawResultCode", { + liquidityPoolWithdrawSuccess: 0, + liquidityPoolWithdrawMalformed: -1, + liquidityPoolWithdrawNoTrust: -2, + liquidityPoolWithdrawUnderfunded: -3, + liquidityPoolWithdrawLineFull: -4, + liquidityPoolWithdrawUnderMinimum: -5 + }); + + // === xdr source ============================================================ + // + // union LiquidityPoolWithdrawResult switch (LiquidityPoolWithdrawResultCode code) + // { + // case LIQUIDITY_POOL_WITHDRAW_SUCCESS: + // void; + // case LIQUIDITY_POOL_WITHDRAW_MALFORMED: + // case LIQUIDITY_POOL_WITHDRAW_NO_TRUST: + // case LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED: + // case LIQUIDITY_POOL_WITHDRAW_LINE_FULL: + // case LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM: + // void; + // }; + // + // =========================================================================== + xdr.union("LiquidityPoolWithdrawResult", { + switchOn: xdr.lookup("LiquidityPoolWithdrawResultCode"), + switchName: "code", + switches: [["liquidityPoolWithdrawSuccess", xdr["void"]()], ["liquidityPoolWithdrawMalformed", xdr["void"]()], ["liquidityPoolWithdrawNoTrust", xdr["void"]()], ["liquidityPoolWithdrawUnderfunded", xdr["void"]()], ["liquidityPoolWithdrawLineFull", xdr["void"]()], ["liquidityPoolWithdrawUnderMinimum", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum InvokeHostFunctionResultCode + // { + // // codes considered as "success" for the operation + // INVOKE_HOST_FUNCTION_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // INVOKE_HOST_FUNCTION_MALFORMED = -1, + // INVOKE_HOST_FUNCTION_TRAPPED = -2, + // INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3, + // INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4, + // INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5 + // }; + // + // =========================================================================== + xdr["enum"]("InvokeHostFunctionResultCode", { + invokeHostFunctionSuccess: 0, + invokeHostFunctionMalformed: -1, + invokeHostFunctionTrapped: -2, + invokeHostFunctionResourceLimitExceeded: -3, + invokeHostFunctionEntryArchived: -4, + invokeHostFunctionInsufficientRefundableFee: -5 + }); + + // === xdr source ============================================================ + // + // union InvokeHostFunctionResult switch (InvokeHostFunctionResultCode code) + // { + // case INVOKE_HOST_FUNCTION_SUCCESS: + // Hash success; // sha256(InvokeHostFunctionSuccessPreImage) + // case INVOKE_HOST_FUNCTION_MALFORMED: + // case INVOKE_HOST_FUNCTION_TRAPPED: + // case INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED: + // case INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED: + // case INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("InvokeHostFunctionResult", { + switchOn: xdr.lookup("InvokeHostFunctionResultCode"), + switchName: "code", + switches: [["invokeHostFunctionSuccess", "success"], ["invokeHostFunctionMalformed", xdr["void"]()], ["invokeHostFunctionTrapped", xdr["void"]()], ["invokeHostFunctionResourceLimitExceeded", xdr["void"]()], ["invokeHostFunctionEntryArchived", xdr["void"]()], ["invokeHostFunctionInsufficientRefundableFee", xdr["void"]()]], + arms: { + success: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum ExtendFootprintTTLResultCode + // { + // // codes considered as "success" for the operation + // EXTEND_FOOTPRINT_TTL_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // EXTEND_FOOTPRINT_TTL_MALFORMED = -1, + // EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2, + // EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("ExtendFootprintTtlResultCode", { + extendFootprintTtlSuccess: 0, + extendFootprintTtlMalformed: -1, + extendFootprintTtlResourceLimitExceeded: -2, + extendFootprintTtlInsufficientRefundableFee: -3 + }); + + // === xdr source ============================================================ + // + // union ExtendFootprintTTLResult switch (ExtendFootprintTTLResultCode code) + // { + // case EXTEND_FOOTPRINT_TTL_SUCCESS: + // void; + // case EXTEND_FOOTPRINT_TTL_MALFORMED: + // case EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED: + // case EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("ExtendFootprintTtlResult", { + switchOn: xdr.lookup("ExtendFootprintTtlResultCode"), + switchName: "code", + switches: [["extendFootprintTtlSuccess", xdr["void"]()], ["extendFootprintTtlMalformed", xdr["void"]()], ["extendFootprintTtlResourceLimitExceeded", xdr["void"]()], ["extendFootprintTtlInsufficientRefundableFee", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum RestoreFootprintResultCode + // { + // // codes considered as "success" for the operation + // RESTORE_FOOTPRINT_SUCCESS = 0, + // + // // codes considered as "failure" for the operation + // RESTORE_FOOTPRINT_MALFORMED = -1, + // RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED = -2, + // RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE = -3 + // }; + // + // =========================================================================== + xdr["enum"]("RestoreFootprintResultCode", { + restoreFootprintSuccess: 0, + restoreFootprintMalformed: -1, + restoreFootprintResourceLimitExceeded: -2, + restoreFootprintInsufficientRefundableFee: -3 + }); + + // === xdr source ============================================================ + // + // union RestoreFootprintResult switch (RestoreFootprintResultCode code) + // { + // case RESTORE_FOOTPRINT_SUCCESS: + // void; + // case RESTORE_FOOTPRINT_MALFORMED: + // case RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED: + // case RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE: + // void; + // }; + // + // =========================================================================== + xdr.union("RestoreFootprintResult", { + switchOn: xdr.lookup("RestoreFootprintResultCode"), + switchName: "code", + switches: [["restoreFootprintSuccess", xdr["void"]()], ["restoreFootprintMalformed", xdr["void"]()], ["restoreFootprintResourceLimitExceeded", xdr["void"]()], ["restoreFootprintInsufficientRefundableFee", xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum OperationResultCode + // { + // opINNER = 0, // inner object result is valid + // + // opBAD_AUTH = -1, // too few valid signatures / wrong network + // opNO_ACCOUNT = -2, // source account was not found + // opNOT_SUPPORTED = -3, // operation not supported at this time + // opTOO_MANY_SUBENTRIES = -4, // max number of subentries already reached + // opEXCEEDED_WORK_LIMIT = -5, // operation did too much work + // opTOO_MANY_SPONSORING = -6 // account is sponsoring too many entries + // }; + // + // =========================================================================== + xdr["enum"]("OperationResultCode", { + opInner: 0, + opBadAuth: -1, + opNoAccount: -2, + opNotSupported: -3, + opTooManySubentries: -4, + opExceededWorkLimit: -5, + opTooManySponsoring: -6 + }); + + // === xdr source ============================================================ + // + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountResult createAccountResult; + // case PAYMENT: + // PaymentResult paymentResult; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult; + // case MANAGE_SELL_OFFER: + // ManageSellOfferResult manageSellOfferResult; + // case CREATE_PASSIVE_SELL_OFFER: + // ManageSellOfferResult createPassiveSellOfferResult; + // case SET_OPTIONS: + // SetOptionsResult setOptionsResult; + // case CHANGE_TRUST: + // ChangeTrustResult changeTrustResult; + // case ALLOW_TRUST: + // AllowTrustResult allowTrustResult; + // case ACCOUNT_MERGE: + // AccountMergeResult accountMergeResult; + // case INFLATION: + // InflationResult inflationResult; + // case MANAGE_DATA: + // ManageDataResult manageDataResult; + // case BUMP_SEQUENCE: + // BumpSequenceResult bumpSeqResult; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferResult manageBuyOfferResult; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendResult pathPaymentStrictSendResult; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceResult createClaimableBalanceResult; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceResult claimClaimableBalanceResult; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult; + // case END_SPONSORING_FUTURE_RESERVES: + // EndSponsoringFutureReservesResult endSponsoringFutureReservesResult; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipResult revokeSponsorshipResult; + // case CLAWBACK: + // ClawbackResult clawbackResult; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceResult clawbackClaimableBalanceResult; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsResult setTrustLineFlagsResult; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositResult liquidityPoolDepositResult; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawResult liquidityPoolWithdrawResult; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionResult invokeHostFunctionResult; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLResult extendFootprintTTLResult; + // case RESTORE_FOOTPRINT: + // RestoreFootprintResult restoreFootprintResult; + // } + // + // =========================================================================== + xdr.union("OperationResultTr", { + switchOn: xdr.lookup("OperationType"), + switchName: "type", + switches: [["createAccount", "createAccountResult"], ["payment", "paymentResult"], ["pathPaymentStrictReceive", "pathPaymentStrictReceiveResult"], ["manageSellOffer", "manageSellOfferResult"], ["createPassiveSellOffer", "createPassiveSellOfferResult"], ["setOptions", "setOptionsResult"], ["changeTrust", "changeTrustResult"], ["allowTrust", "allowTrustResult"], ["accountMerge", "accountMergeResult"], ["inflation", "inflationResult"], ["manageData", "manageDataResult"], ["bumpSequence", "bumpSeqResult"], ["manageBuyOffer", "manageBuyOfferResult"], ["pathPaymentStrictSend", "pathPaymentStrictSendResult"], ["createClaimableBalance", "createClaimableBalanceResult"], ["claimClaimableBalance", "claimClaimableBalanceResult"], ["beginSponsoringFutureReserves", "beginSponsoringFutureReservesResult"], ["endSponsoringFutureReserves", "endSponsoringFutureReservesResult"], ["revokeSponsorship", "revokeSponsorshipResult"], ["clawback", "clawbackResult"], ["clawbackClaimableBalance", "clawbackClaimableBalanceResult"], ["setTrustLineFlags", "setTrustLineFlagsResult"], ["liquidityPoolDeposit", "liquidityPoolDepositResult"], ["liquidityPoolWithdraw", "liquidityPoolWithdrawResult"], ["invokeHostFunction", "invokeHostFunctionResult"], ["extendFootprintTtl", "extendFootprintTtlResult"], ["restoreFootprint", "restoreFootprintResult"]], + arms: { + createAccountResult: xdr.lookup("CreateAccountResult"), + paymentResult: xdr.lookup("PaymentResult"), + pathPaymentStrictReceiveResult: xdr.lookup("PathPaymentStrictReceiveResult"), + manageSellOfferResult: xdr.lookup("ManageSellOfferResult"), + createPassiveSellOfferResult: xdr.lookup("ManageSellOfferResult"), + setOptionsResult: xdr.lookup("SetOptionsResult"), + changeTrustResult: xdr.lookup("ChangeTrustResult"), + allowTrustResult: xdr.lookup("AllowTrustResult"), + accountMergeResult: xdr.lookup("AccountMergeResult"), + inflationResult: xdr.lookup("InflationResult"), + manageDataResult: xdr.lookup("ManageDataResult"), + bumpSeqResult: xdr.lookup("BumpSequenceResult"), + manageBuyOfferResult: xdr.lookup("ManageBuyOfferResult"), + pathPaymentStrictSendResult: xdr.lookup("PathPaymentStrictSendResult"), + createClaimableBalanceResult: xdr.lookup("CreateClaimableBalanceResult"), + claimClaimableBalanceResult: xdr.lookup("ClaimClaimableBalanceResult"), + beginSponsoringFutureReservesResult: xdr.lookup("BeginSponsoringFutureReservesResult"), + endSponsoringFutureReservesResult: xdr.lookup("EndSponsoringFutureReservesResult"), + revokeSponsorshipResult: xdr.lookup("RevokeSponsorshipResult"), + clawbackResult: xdr.lookup("ClawbackResult"), + clawbackClaimableBalanceResult: xdr.lookup("ClawbackClaimableBalanceResult"), + setTrustLineFlagsResult: xdr.lookup("SetTrustLineFlagsResult"), + liquidityPoolDepositResult: xdr.lookup("LiquidityPoolDepositResult"), + liquidityPoolWithdrawResult: xdr.lookup("LiquidityPoolWithdrawResult"), + invokeHostFunctionResult: xdr.lookup("InvokeHostFunctionResult"), + extendFootprintTtlResult: xdr.lookup("ExtendFootprintTtlResult"), + restoreFootprintResult: xdr.lookup("RestoreFootprintResult") + } + }); + + // === xdr source ============================================================ + // + // union OperationResult switch (OperationResultCode code) + // { + // case opINNER: + // union switch (OperationType type) + // { + // case CREATE_ACCOUNT: + // CreateAccountResult createAccountResult; + // case PAYMENT: + // PaymentResult paymentResult; + // case PATH_PAYMENT_STRICT_RECEIVE: + // PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult; + // case MANAGE_SELL_OFFER: + // ManageSellOfferResult manageSellOfferResult; + // case CREATE_PASSIVE_SELL_OFFER: + // ManageSellOfferResult createPassiveSellOfferResult; + // case SET_OPTIONS: + // SetOptionsResult setOptionsResult; + // case CHANGE_TRUST: + // ChangeTrustResult changeTrustResult; + // case ALLOW_TRUST: + // AllowTrustResult allowTrustResult; + // case ACCOUNT_MERGE: + // AccountMergeResult accountMergeResult; + // case INFLATION: + // InflationResult inflationResult; + // case MANAGE_DATA: + // ManageDataResult manageDataResult; + // case BUMP_SEQUENCE: + // BumpSequenceResult bumpSeqResult; + // case MANAGE_BUY_OFFER: + // ManageBuyOfferResult manageBuyOfferResult; + // case PATH_PAYMENT_STRICT_SEND: + // PathPaymentStrictSendResult pathPaymentStrictSendResult; + // case CREATE_CLAIMABLE_BALANCE: + // CreateClaimableBalanceResult createClaimableBalanceResult; + // case CLAIM_CLAIMABLE_BALANCE: + // ClaimClaimableBalanceResult claimClaimableBalanceResult; + // case BEGIN_SPONSORING_FUTURE_RESERVES: + // BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult; + // case END_SPONSORING_FUTURE_RESERVES: + // EndSponsoringFutureReservesResult endSponsoringFutureReservesResult; + // case REVOKE_SPONSORSHIP: + // RevokeSponsorshipResult revokeSponsorshipResult; + // case CLAWBACK: + // ClawbackResult clawbackResult; + // case CLAWBACK_CLAIMABLE_BALANCE: + // ClawbackClaimableBalanceResult clawbackClaimableBalanceResult; + // case SET_TRUST_LINE_FLAGS: + // SetTrustLineFlagsResult setTrustLineFlagsResult; + // case LIQUIDITY_POOL_DEPOSIT: + // LiquidityPoolDepositResult liquidityPoolDepositResult; + // case LIQUIDITY_POOL_WITHDRAW: + // LiquidityPoolWithdrawResult liquidityPoolWithdrawResult; + // case INVOKE_HOST_FUNCTION: + // InvokeHostFunctionResult invokeHostFunctionResult; + // case EXTEND_FOOTPRINT_TTL: + // ExtendFootprintTTLResult extendFootprintTTLResult; + // case RESTORE_FOOTPRINT: + // RestoreFootprintResult restoreFootprintResult; + // } + // tr; + // case opBAD_AUTH: + // case opNO_ACCOUNT: + // case opNOT_SUPPORTED: + // case opTOO_MANY_SUBENTRIES: + // case opEXCEEDED_WORK_LIMIT: + // case opTOO_MANY_SPONSORING: + // void; + // }; + // + // =========================================================================== + xdr.union("OperationResult", { + switchOn: xdr.lookup("OperationResultCode"), + switchName: "code", + switches: [["opInner", "tr"], ["opBadAuth", xdr["void"]()], ["opNoAccount", xdr["void"]()], ["opNotSupported", xdr["void"]()], ["opTooManySubentries", xdr["void"]()], ["opExceededWorkLimit", xdr["void"]()], ["opTooManySponsoring", xdr["void"]()]], + arms: { + tr: xdr.lookup("OperationResultTr") + } + }); + + // === xdr source ============================================================ + // + // enum TransactionResultCode + // { + // txFEE_BUMP_INNER_SUCCESS = 1, // fee bump inner transaction succeeded + // txSUCCESS = 0, // all operations succeeded + // + // txFAILED = -1, // one of the operations failed (none were applied) + // + // txTOO_EARLY = -2, // ledger closeTime before minTime + // txTOO_LATE = -3, // ledger closeTime after maxTime + // txMISSING_OPERATION = -4, // no operation was specified + // txBAD_SEQ = -5, // sequence number does not match source account + // + // txBAD_AUTH = -6, // too few valid signatures / wrong network + // txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve + // txNO_ACCOUNT = -8, // source account not found + // txINSUFFICIENT_FEE = -9, // fee is too small + // txBAD_AUTH_EXTRA = -10, // unused signatures attached to transaction + // txINTERNAL_ERROR = -11, // an unknown error occurred + // + // txNOT_SUPPORTED = -12, // transaction type not supported + // txFEE_BUMP_INNER_FAILED = -13, // fee bump inner transaction failed + // txBAD_SPONSORSHIP = -14, // sponsorship not confirmed + // txBAD_MIN_SEQ_AGE_OR_GAP = -15, // minSeqAge or minSeqLedgerGap conditions not met + // txMALFORMED = -16, // precondition is invalid + // txSOROBAN_INVALID = -17 // soroban-specific preconditions were not met + // }; + // + // =========================================================================== + xdr["enum"]("TransactionResultCode", { + txFeeBumpInnerSuccess: 1, + txSuccess: 0, + txFailed: -1, + txTooEarly: -2, + txTooLate: -3, + txMissingOperation: -4, + txBadSeq: -5, + txBadAuth: -6, + txInsufficientBalance: -7, + txNoAccount: -8, + txInsufficientFee: -9, + txBadAuthExtra: -10, + txInternalError: -11, + txNotSupported: -12, + txFeeBumpInnerFailed: -13, + txBadSponsorship: -14, + txBadMinSeqAgeOrGap: -15, + txMalformed: -16, + txSorobanInvalid: -17 + }); + + // === xdr source ============================================================ + // + // union switch (TransactionResultCode code) + // { + // // txFEE_BUMP_INNER_SUCCESS is not included + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // txFEE_BUMP_INNER_FAILED is not included + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // + // =========================================================================== + xdr.union("InnerTransactionResultResult", { + switchOn: xdr.lookup("TransactionResultCode"), + switchName: "code", + switches: [["txSuccess", "results"], ["txFailed", "results"], ["txTooEarly", xdr["void"]()], ["txTooLate", xdr["void"]()], ["txMissingOperation", xdr["void"]()], ["txBadSeq", xdr["void"]()], ["txBadAuth", xdr["void"]()], ["txInsufficientBalance", xdr["void"]()], ["txNoAccount", xdr["void"]()], ["txInsufficientFee", xdr["void"]()], ["txBadAuthExtra", xdr["void"]()], ["txInternalError", xdr["void"]()], ["txNotSupported", xdr["void"]()], ["txBadSponsorship", xdr["void"]()], ["txBadMinSeqAgeOrGap", xdr["void"]()], ["txMalformed", xdr["void"]()], ["txSorobanInvalid", xdr["void"]()]], + arms: { + results: xdr.varArray(xdr.lookup("OperationResult"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("InnerTransactionResultExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct InnerTransactionResult + // { + // // Always 0. Here for binary compatibility. + // int64 feeCharged; + // + // union switch (TransactionResultCode code) + // { + // // txFEE_BUMP_INNER_SUCCESS is not included + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // txFEE_BUMP_INNER_FAILED is not included + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // result; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("InnerTransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("InnerTransactionResultResult")], ["ext", xdr.lookup("InnerTransactionResultExt")]]); + + // === xdr source ============================================================ + // + // struct InnerTransactionResultPair + // { + // Hash transactionHash; // hash of the inner transaction + // InnerTransactionResult result; // result for the inner transaction + // }; + // + // =========================================================================== + xdr.struct("InnerTransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("InnerTransactionResult")]]); + + // === xdr source ============================================================ + // + // union switch (TransactionResultCode code) + // { + // case txFEE_BUMP_INNER_SUCCESS: + // case txFEE_BUMP_INNER_FAILED: + // InnerTransactionResultPair innerResultPair; + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // case txFEE_BUMP_INNER_FAILED: handled above + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionResultResult", { + switchOn: xdr.lookup("TransactionResultCode"), + switchName: "code", + switches: [["txFeeBumpInnerSuccess", "innerResultPair"], ["txFeeBumpInnerFailed", "innerResultPair"], ["txSuccess", "results"], ["txFailed", "results"], ["txTooEarly", xdr["void"]()], ["txTooLate", xdr["void"]()], ["txMissingOperation", xdr["void"]()], ["txBadSeq", xdr["void"]()], ["txBadAuth", xdr["void"]()], ["txInsufficientBalance", xdr["void"]()], ["txNoAccount", xdr["void"]()], ["txInsufficientFee", xdr["void"]()], ["txBadAuthExtra", xdr["void"]()], ["txInternalError", xdr["void"]()], ["txNotSupported", xdr["void"]()], ["txBadSponsorship", xdr["void"]()], ["txBadMinSeqAgeOrGap", xdr["void"]()], ["txMalformed", xdr["void"]()], ["txSorobanInvalid", xdr["void"]()]], + arms: { + innerResultPair: xdr.lookup("InnerTransactionResultPair"), + results: xdr.varArray(xdr.lookup("OperationResult"), 2147483647) + } + }); + + // === xdr source ============================================================ + // + // union switch (int v) + // { + // case 0: + // void; + // } + // + // =========================================================================== + xdr.union("TransactionResultExt", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // struct TransactionResult + // { + // int64 feeCharged; // actual fee charged for the transaction + // + // union switch (TransactionResultCode code) + // { + // case txFEE_BUMP_INNER_SUCCESS: + // case txFEE_BUMP_INNER_FAILED: + // InnerTransactionResultPair innerResultPair; + // case txSUCCESS: + // case txFAILED: + // OperationResult results<>; + // case txTOO_EARLY: + // case txTOO_LATE: + // case txMISSING_OPERATION: + // case txBAD_SEQ: + // case txBAD_AUTH: + // case txINSUFFICIENT_BALANCE: + // case txNO_ACCOUNT: + // case txINSUFFICIENT_FEE: + // case txBAD_AUTH_EXTRA: + // case txINTERNAL_ERROR: + // case txNOT_SUPPORTED: + // // case txFEE_BUMP_INNER_FAILED: handled above + // case txBAD_SPONSORSHIP: + // case txBAD_MIN_SEQ_AGE_OR_GAP: + // case txMALFORMED: + // case txSOROBAN_INVALID: + // void; + // } + // result; + // + // // reserved for future use + // union switch (int v) + // { + // case 0: + // void; + // } + // ext; + // }; + // + // =========================================================================== + xdr.struct("TransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("TransactionResultResult")], ["ext", xdr.lookup("TransactionResultExt")]]); + + // === xdr source ============================================================ + // + // typedef opaque Hash[32]; + // + // =========================================================================== + xdr.typedef("Hash", xdr.opaque(32)); + + // === xdr source ============================================================ + // + // typedef opaque uint256[32]; + // + // =========================================================================== + xdr.typedef("Uint256", xdr.opaque(32)); + + // === xdr source ============================================================ + // + // typedef unsigned int uint32; + // + // =========================================================================== + xdr.typedef("Uint32", xdr.uint()); + + // === xdr source ============================================================ + // + // typedef int int32; + // + // =========================================================================== + xdr.typedef("Int32", xdr["int"]()); + + // === xdr source ============================================================ + // + // typedef unsigned hyper uint64; + // + // =========================================================================== + xdr.typedef("Uint64", xdr.uhyper()); + + // === xdr source ============================================================ + // + // typedef hyper int64; + // + // =========================================================================== + xdr.typedef("Int64", xdr.hyper()); + + // === xdr source ============================================================ + // + // typedef uint64 TimePoint; + // + // =========================================================================== + xdr.typedef("TimePoint", xdr.lookup("Uint64")); + + // === xdr source ============================================================ + // + // typedef uint64 Duration; + // + // =========================================================================== + xdr.typedef("Duration", xdr.lookup("Uint64")); + + // === xdr source ============================================================ + // + // union ExtensionPoint switch (int v) + // { + // case 0: + // void; + // }; + // + // =========================================================================== + xdr.union("ExtensionPoint", { + switchOn: xdr["int"](), + switchName: "v", + switches: [[0, xdr["void"]()]], + arms: {} + }); + + // === xdr source ============================================================ + // + // enum CryptoKeyType + // { + // KEY_TYPE_ED25519 = 0, + // KEY_TYPE_PRE_AUTH_TX = 1, + // KEY_TYPE_HASH_X = 2, + // KEY_TYPE_ED25519_SIGNED_PAYLOAD = 3, + // // MUXED enum values for supported type are derived from the enum values + // // above by ORing them with 0x100 + // KEY_TYPE_MUXED_ED25519 = 0x100 + // }; + // + // =========================================================================== + xdr["enum"]("CryptoKeyType", { + keyTypeEd25519: 0, + keyTypePreAuthTx: 1, + keyTypeHashX: 2, + keyTypeEd25519SignedPayload: 3, + keyTypeMuxedEd25519: 256 + }); + + // === xdr source ============================================================ + // + // enum PublicKeyType + // { + // PUBLIC_KEY_TYPE_ED25519 = KEY_TYPE_ED25519 + // }; + // + // =========================================================================== + xdr["enum"]("PublicKeyType", { + publicKeyTypeEd25519: 0 + }); + + // === xdr source ============================================================ + // + // enum SignerKeyType + // { + // SIGNER_KEY_TYPE_ED25519 = KEY_TYPE_ED25519, + // SIGNER_KEY_TYPE_PRE_AUTH_TX = KEY_TYPE_PRE_AUTH_TX, + // SIGNER_KEY_TYPE_HASH_X = KEY_TYPE_HASH_X, + // SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD = KEY_TYPE_ED25519_SIGNED_PAYLOAD + // }; + // + // =========================================================================== + xdr["enum"]("SignerKeyType", { + signerKeyTypeEd25519: 0, + signerKeyTypePreAuthTx: 1, + signerKeyTypeHashX: 2, + signerKeyTypeEd25519SignedPayload: 3 + }); + + // === xdr source ============================================================ + // + // union PublicKey switch (PublicKeyType type) + // { + // case PUBLIC_KEY_TYPE_ED25519: + // uint256 ed25519; + // }; + // + // =========================================================================== + xdr.union("PublicKey", { + switchOn: xdr.lookup("PublicKeyType"), + switchName: "type", + switches: [["publicKeyTypeEd25519", "ed25519"]], + arms: { + ed25519: xdr.lookup("Uint256") + } + }); + + // === xdr source ============================================================ + // + // struct + // { + // /* Public key that must sign the payload. */ + // uint256 ed25519; + // /* Payload to be raw signed by ed25519. */ + // opaque payload<64>; + // } + // + // =========================================================================== + xdr.struct("SignerKeyEd25519SignedPayload", [["ed25519", xdr.lookup("Uint256")], ["payload", xdr.varOpaque(64)]]); + + // === xdr source ============================================================ + // + // union SignerKey switch (SignerKeyType type) + // { + // case SIGNER_KEY_TYPE_ED25519: + // uint256 ed25519; + // case SIGNER_KEY_TYPE_PRE_AUTH_TX: + // /* SHA-256 Hash of TransactionSignaturePayload structure */ + // uint256 preAuthTx; + // case SIGNER_KEY_TYPE_HASH_X: + // /* Hash of random 256 bit preimage X */ + // uint256 hashX; + // case SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD: + // struct + // { + // /* Public key that must sign the payload. */ + // uint256 ed25519; + // /* Payload to be raw signed by ed25519. */ + // opaque payload<64>; + // } ed25519SignedPayload; + // }; + // + // =========================================================================== + xdr.union("SignerKey", { + switchOn: xdr.lookup("SignerKeyType"), + switchName: "type", + switches: [["signerKeyTypeEd25519", "ed25519"], ["signerKeyTypePreAuthTx", "preAuthTx"], ["signerKeyTypeHashX", "hashX"], ["signerKeyTypeEd25519SignedPayload", "ed25519SignedPayload"]], + arms: { + ed25519: xdr.lookup("Uint256"), + preAuthTx: xdr.lookup("Uint256"), + hashX: xdr.lookup("Uint256"), + ed25519SignedPayload: xdr.lookup("SignerKeyEd25519SignedPayload") + } + }); + + // === xdr source ============================================================ + // + // typedef opaque Signature<64>; + // + // =========================================================================== + xdr.typedef("Signature", xdr.varOpaque(64)); + + // === xdr source ============================================================ + // + // typedef opaque SignatureHint[4]; + // + // =========================================================================== + xdr.typedef("SignatureHint", xdr.opaque(4)); + + // === xdr source ============================================================ + // + // typedef PublicKey NodeID; + // + // =========================================================================== + xdr.typedef("NodeId", xdr.lookup("PublicKey")); + + // === xdr source ============================================================ + // + // typedef PublicKey AccountID; + // + // =========================================================================== + xdr.typedef("AccountId", xdr.lookup("PublicKey")); + + // === xdr source ============================================================ + // + // struct Curve25519Secret + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("Curve25519Secret", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct Curve25519Public + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("Curve25519Public", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct HmacSha256Key + // { + // opaque key[32]; + // }; + // + // =========================================================================== + xdr.struct("HmacSha256Key", [["key", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct HmacSha256Mac + // { + // opaque mac[32]; + // }; + // + // =========================================================================== + xdr.struct("HmacSha256Mac", [["mac", xdr.opaque(32)]]); + + // === xdr source ============================================================ + // + // struct ShortHashSeed + // { + // opaque seed[16]; + // }; + // + // =========================================================================== + xdr.struct("ShortHashSeed", [["seed", xdr.opaque(16)]]); + + // === xdr source ============================================================ + // + // enum BinaryFuseFilterType + // { + // BINARY_FUSE_FILTER_8_BIT = 0, + // BINARY_FUSE_FILTER_16_BIT = 1, + // BINARY_FUSE_FILTER_32_BIT = 2 + // }; + // + // =========================================================================== + xdr["enum"]("BinaryFuseFilterType", { + binaryFuseFilter8Bit: 0, + binaryFuseFilter16Bit: 1, + binaryFuseFilter32Bit: 2 + }); + + // === xdr source ============================================================ + // + // struct SerializedBinaryFuseFilter + // { + // BinaryFuseFilterType type; + // + // // Seed used to hash input to filter + // ShortHashSeed inputHashSeed; + // + // // Seed used for internal filter hash operations + // ShortHashSeed filterSeed; + // uint32 segmentLength; + // uint32 segementLengthMask; + // uint32 segmentCount; + // uint32 segmentCountLength; + // uint32 fingerprintLength; // Length in terms of element count, not bytes + // + // // Array of uint8_t, uint16_t, or uint32_t depending on filter type + // opaque fingerprints<>; + // }; + // + // =========================================================================== + xdr.struct("SerializedBinaryFuseFilter", [["type", xdr.lookup("BinaryFuseFilterType")], ["inputHashSeed", xdr.lookup("ShortHashSeed")], ["filterSeed", xdr.lookup("ShortHashSeed")], ["segmentLength", xdr.lookup("Uint32")], ["segementLengthMask", xdr.lookup("Uint32")], ["segmentCount", xdr.lookup("Uint32")], ["segmentCountLength", xdr.lookup("Uint32")], ["fingerprintLength", xdr.lookup("Uint32")], ["fingerprints", xdr.varOpaque()]]); + + // === xdr source ============================================================ + // + // enum SCValType + // { + // SCV_BOOL = 0, + // SCV_VOID = 1, + // SCV_ERROR = 2, + // + // // 32 bits is the smallest type in WASM or XDR; no need for u8/u16. + // SCV_U32 = 3, + // SCV_I32 = 4, + // + // // 64 bits is naturally supported by both WASM and XDR also. + // SCV_U64 = 5, + // SCV_I64 = 6, + // + // // Time-related u64 subtypes with their own functions and formatting. + // SCV_TIMEPOINT = 7, + // SCV_DURATION = 8, + // + // // 128 bits is naturally supported by Rust and we use it for Soroban + // // fixed-point arithmetic prices / balances / similar "quantities". These + // // are represented in XDR as a pair of 2 u64s. + // SCV_U128 = 9, + // SCV_I128 = 10, + // + // // 256 bits is the size of sha256 output, ed25519 keys, and the EVM machine + // // word, so for interop use we include this even though it requires a small + // // amount of Rust guest and/or host library code. + // SCV_U256 = 11, + // SCV_I256 = 12, + // + // // Bytes come in 3 flavors, 2 of which have meaningfully different + // // formatting and validity-checking / domain-restriction. + // SCV_BYTES = 13, + // SCV_STRING = 14, + // SCV_SYMBOL = 15, + // + // // Vecs and maps are just polymorphic containers of other ScVals. + // SCV_VEC = 16, + // SCV_MAP = 17, + // + // // Address is the universal identifier for contracts and classic + // // accounts. + // SCV_ADDRESS = 18, + // + // // The following are the internal SCVal variants that are not + // // exposed to the contracts. + // SCV_CONTRACT_INSTANCE = 19, + // + // // SCV_LEDGER_KEY_CONTRACT_INSTANCE and SCV_LEDGER_KEY_NONCE are unique + // // symbolic SCVals used as the key for ledger entries for a contract's + // // instance and an address' nonce, respectively. + // SCV_LEDGER_KEY_CONTRACT_INSTANCE = 20, + // SCV_LEDGER_KEY_NONCE = 21 + // }; + // + // =========================================================================== + xdr["enum"]("ScValType", { + scvBool: 0, + scvVoid: 1, + scvError: 2, + scvU32: 3, + scvI32: 4, + scvU64: 5, + scvI64: 6, + scvTimepoint: 7, + scvDuration: 8, + scvU128: 9, + scvI128: 10, + scvU256: 11, + scvI256: 12, + scvBytes: 13, + scvString: 14, + scvSymbol: 15, + scvVec: 16, + scvMap: 17, + scvAddress: 18, + scvContractInstance: 19, + scvLedgerKeyContractInstance: 20, + scvLedgerKeyNonce: 21 + }); + + // === xdr source ============================================================ + // + // enum SCErrorType + // { + // SCE_CONTRACT = 0, // Contract-specific, user-defined codes. + // SCE_WASM_VM = 1, // Errors while interpreting WASM bytecode. + // SCE_CONTEXT = 2, // Errors in the contract's host context. + // SCE_STORAGE = 3, // Errors accessing host storage. + // SCE_OBJECT = 4, // Errors working with host objects. + // SCE_CRYPTO = 5, // Errors in cryptographic operations. + // SCE_EVENTS = 6, // Errors while emitting events. + // SCE_BUDGET = 7, // Errors relating to budget limits. + // SCE_VALUE = 8, // Errors working with host values or SCVals. + // SCE_AUTH = 9 // Errors from the authentication subsystem. + // }; + // + // =========================================================================== + xdr["enum"]("ScErrorType", { + sceContract: 0, + sceWasmVm: 1, + sceContext: 2, + sceStorage: 3, + sceObject: 4, + sceCrypto: 5, + sceEvents: 6, + sceBudget: 7, + sceValue: 8, + sceAuth: 9 + }); + + // === xdr source ============================================================ + // + // enum SCErrorCode + // { + // SCEC_ARITH_DOMAIN = 0, // Some arithmetic was undefined (overflow, divide-by-zero). + // SCEC_INDEX_BOUNDS = 1, // Something was indexed beyond its bounds. + // SCEC_INVALID_INPUT = 2, // User provided some otherwise-bad data. + // SCEC_MISSING_VALUE = 3, // Some value was required but not provided. + // SCEC_EXISTING_VALUE = 4, // Some value was provided where not allowed. + // SCEC_EXCEEDED_LIMIT = 5, // Some arbitrary limit -- gas or otherwise -- was hit. + // SCEC_INVALID_ACTION = 6, // Data was valid but action requested was not. + // SCEC_INTERNAL_ERROR = 7, // The host detected an error in its own logic. + // SCEC_UNEXPECTED_TYPE = 8, // Some type wasn't as expected. + // SCEC_UNEXPECTED_SIZE = 9 // Something's size wasn't as expected. + // }; + // + // =========================================================================== + xdr["enum"]("ScErrorCode", { + scecArithDomain: 0, + scecIndexBounds: 1, + scecInvalidInput: 2, + scecMissingValue: 3, + scecExistingValue: 4, + scecExceededLimit: 5, + scecInvalidAction: 6, + scecInternalError: 7, + scecUnexpectedType: 8, + scecUnexpectedSize: 9 + }); + + // === xdr source ============================================================ + // + // union SCError switch (SCErrorType type) + // { + // case SCE_CONTRACT: + // uint32 contractCode; + // case SCE_WASM_VM: + // case SCE_CONTEXT: + // case SCE_STORAGE: + // case SCE_OBJECT: + // case SCE_CRYPTO: + // case SCE_EVENTS: + // case SCE_BUDGET: + // case SCE_VALUE: + // case SCE_AUTH: + // SCErrorCode code; + // }; + // + // =========================================================================== + xdr.union("ScError", { + switchOn: xdr.lookup("ScErrorType"), + switchName: "type", + switches: [["sceContract", "contractCode"], ["sceWasmVm", "code"], ["sceContext", "code"], ["sceStorage", "code"], ["sceObject", "code"], ["sceCrypto", "code"], ["sceEvents", "code"], ["sceBudget", "code"], ["sceValue", "code"], ["sceAuth", "code"]], + arms: { + contractCode: xdr.lookup("Uint32"), + code: xdr.lookup("ScErrorCode") + } + }); + + // === xdr source ============================================================ + // + // struct UInt128Parts { + // uint64 hi; + // uint64 lo; + // }; + // + // =========================================================================== + xdr.struct("UInt128Parts", [["hi", xdr.lookup("Uint64")], ["lo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct Int128Parts { + // int64 hi; + // uint64 lo; + // }; + // + // =========================================================================== + xdr.struct("Int128Parts", [["hi", xdr.lookup("Int64")], ["lo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct UInt256Parts { + // uint64 hi_hi; + // uint64 hi_lo; + // uint64 lo_hi; + // uint64 lo_lo; + // }; + // + // =========================================================================== + xdr.struct("UInt256Parts", [["hiHi", xdr.lookup("Uint64")], ["hiLo", xdr.lookup("Uint64")], ["loHi", xdr.lookup("Uint64")], ["loLo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // struct Int256Parts { + // int64 hi_hi; + // uint64 hi_lo; + // uint64 lo_hi; + // uint64 lo_lo; + // }; + // + // =========================================================================== + xdr.struct("Int256Parts", [["hiHi", xdr.lookup("Int64")], ["hiLo", xdr.lookup("Uint64")], ["loHi", xdr.lookup("Uint64")], ["loLo", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // enum ContractExecutableType + // { + // CONTRACT_EXECUTABLE_WASM = 0, + // CONTRACT_EXECUTABLE_STELLAR_ASSET = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ContractExecutableType", { + contractExecutableWasm: 0, + contractExecutableStellarAsset: 1 + }); + + // === xdr source ============================================================ + // + // union ContractExecutable switch (ContractExecutableType type) + // { + // case CONTRACT_EXECUTABLE_WASM: + // Hash wasm_hash; + // case CONTRACT_EXECUTABLE_STELLAR_ASSET: + // void; + // }; + // + // =========================================================================== + xdr.union("ContractExecutable", { + switchOn: xdr.lookup("ContractExecutableType"), + switchName: "type", + switches: [["contractExecutableWasm", "wasmHash"], ["contractExecutableStellarAsset", xdr["void"]()]], + arms: { + wasmHash: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // enum SCAddressType + // { + // SC_ADDRESS_TYPE_ACCOUNT = 0, + // SC_ADDRESS_TYPE_CONTRACT = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ScAddressType", { + scAddressTypeAccount: 0, + scAddressTypeContract: 1 + }); + + // === xdr source ============================================================ + // + // union SCAddress switch (SCAddressType type) + // { + // case SC_ADDRESS_TYPE_ACCOUNT: + // AccountID accountId; + // case SC_ADDRESS_TYPE_CONTRACT: + // Hash contractId; + // }; + // + // =========================================================================== + xdr.union("ScAddress", { + switchOn: xdr.lookup("ScAddressType"), + switchName: "type", + switches: [["scAddressTypeAccount", "accountId"], ["scAddressTypeContract", "contractId"]], + arms: { + accountId: xdr.lookup("AccountId"), + contractId: xdr.lookup("Hash") + } + }); + + // === xdr source ============================================================ + // + // const SCSYMBOL_LIMIT = 32; + // + // =========================================================================== + xdr["const"]("SCSYMBOL_LIMIT", 32); + + // === xdr source ============================================================ + // + // typedef SCVal SCVec<>; + // + // =========================================================================== + xdr.typedef("ScVec", xdr.varArray(xdr.lookup("ScVal"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef SCMapEntry SCMap<>; + // + // =========================================================================== + xdr.typedef("ScMap", xdr.varArray(xdr.lookup("ScMapEntry"), 2147483647)); + + // === xdr source ============================================================ + // + // typedef opaque SCBytes<>; + // + // =========================================================================== + xdr.typedef("ScBytes", xdr.varOpaque()); + + // === xdr source ============================================================ + // + // typedef string SCString<>; + // + // =========================================================================== + xdr.typedef("ScString", xdr.string()); + + // === xdr source ============================================================ + // + // typedef string SCSymbol; + // + // =========================================================================== + xdr.typedef("ScSymbol", xdr.string(SCSYMBOL_LIMIT)); + + // === xdr source ============================================================ + // + // struct SCNonceKey { + // int64 nonce; + // }; + // + // =========================================================================== + xdr.struct("ScNonceKey", [["nonce", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct SCContractInstance { + // ContractExecutable executable; + // SCMap* storage; + // }; + // + // =========================================================================== + xdr.struct("ScContractInstance", [["executable", xdr.lookup("ContractExecutable")], ["storage", xdr.option(xdr.lookup("ScMap"))]]); + + // === xdr source ============================================================ + // + // union SCVal switch (SCValType type) + // { + // + // case SCV_BOOL: + // bool b; + // case SCV_VOID: + // void; + // case SCV_ERROR: + // SCError error; + // + // case SCV_U32: + // uint32 u32; + // case SCV_I32: + // int32 i32; + // + // case SCV_U64: + // uint64 u64; + // case SCV_I64: + // int64 i64; + // case SCV_TIMEPOINT: + // TimePoint timepoint; + // case SCV_DURATION: + // Duration duration; + // + // case SCV_U128: + // UInt128Parts u128; + // case SCV_I128: + // Int128Parts i128; + // + // case SCV_U256: + // UInt256Parts u256; + // case SCV_I256: + // Int256Parts i256; + // + // case SCV_BYTES: + // SCBytes bytes; + // case SCV_STRING: + // SCString str; + // case SCV_SYMBOL: + // SCSymbol sym; + // + // // Vec and Map are recursive so need to live + // // behind an option, due to xdrpp limitations. + // case SCV_VEC: + // SCVec *vec; + // case SCV_MAP: + // SCMap *map; + // + // case SCV_ADDRESS: + // SCAddress address; + // + // // Special SCVals reserved for system-constructed contract-data + // // ledger keys, not generally usable elsewhere. + // case SCV_LEDGER_KEY_CONTRACT_INSTANCE: + // void; + // case SCV_LEDGER_KEY_NONCE: + // SCNonceKey nonce_key; + // + // case SCV_CONTRACT_INSTANCE: + // SCContractInstance instance; + // }; + // + // =========================================================================== + xdr.union("ScVal", { + switchOn: xdr.lookup("ScValType"), + switchName: "type", + switches: [["scvBool", "b"], ["scvVoid", xdr["void"]()], ["scvError", "error"], ["scvU32", "u32"], ["scvI32", "i32"], ["scvU64", "u64"], ["scvI64", "i64"], ["scvTimepoint", "timepoint"], ["scvDuration", "duration"], ["scvU128", "u128"], ["scvI128", "i128"], ["scvU256", "u256"], ["scvI256", "i256"], ["scvBytes", "bytes"], ["scvString", "str"], ["scvSymbol", "sym"], ["scvVec", "vec"], ["scvMap", "map"], ["scvAddress", "address"], ["scvLedgerKeyContractInstance", xdr["void"]()], ["scvLedgerKeyNonce", "nonceKey"], ["scvContractInstance", "instance"]], + arms: { + b: xdr.bool(), + error: xdr.lookup("ScError"), + u32: xdr.lookup("Uint32"), + i32: xdr.lookup("Int32"), + u64: xdr.lookup("Uint64"), + i64: xdr.lookup("Int64"), + timepoint: xdr.lookup("TimePoint"), + duration: xdr.lookup("Duration"), + u128: xdr.lookup("UInt128Parts"), + i128: xdr.lookup("Int128Parts"), + u256: xdr.lookup("UInt256Parts"), + i256: xdr.lookup("Int256Parts"), + bytes: xdr.lookup("ScBytes"), + str: xdr.lookup("ScString"), + sym: xdr.lookup("ScSymbol"), + vec: xdr.option(xdr.lookup("ScVec")), + map: xdr.option(xdr.lookup("ScMap")), + address: xdr.lookup("ScAddress"), + nonceKey: xdr.lookup("ScNonceKey"), + instance: xdr.lookup("ScContractInstance") + } + }); + + // === xdr source ============================================================ + // + // struct SCMapEntry + // { + // SCVal key; + // SCVal val; + // }; + // + // =========================================================================== + xdr.struct("ScMapEntry", [["key", xdr.lookup("ScVal")], ["val", xdr.lookup("ScVal")]]); + + // === xdr source ============================================================ + // + // enum SCEnvMetaKind + // { + // SC_ENV_META_KIND_INTERFACE_VERSION = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ScEnvMetaKind", { + scEnvMetaKindInterfaceVersion: 0 + }); + + // === xdr source ============================================================ + // + // struct { + // uint32 protocol; + // uint32 preRelease; + // } + // + // =========================================================================== + xdr.struct("ScEnvMetaEntryInterfaceVersion", [["protocol", xdr.lookup("Uint32")], ["preRelease", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // union SCEnvMetaEntry switch (SCEnvMetaKind kind) + // { + // case SC_ENV_META_KIND_INTERFACE_VERSION: + // struct { + // uint32 protocol; + // uint32 preRelease; + // } interfaceVersion; + // }; + // + // =========================================================================== + xdr.union("ScEnvMetaEntry", { + switchOn: xdr.lookup("ScEnvMetaKind"), + switchName: "kind", + switches: [["scEnvMetaKindInterfaceVersion", "interfaceVersion"]], + arms: { + interfaceVersion: xdr.lookup("ScEnvMetaEntryInterfaceVersion") + } + }); + + // === xdr source ============================================================ + // + // struct SCMetaV0 + // { + // string key<>; + // string val<>; + // }; + // + // =========================================================================== + xdr.struct("ScMetaV0", [["key", xdr.string()], ["val", xdr.string()]]); + + // === xdr source ============================================================ + // + // enum SCMetaKind + // { + // SC_META_V0 = 0 + // }; + // + // =========================================================================== + xdr["enum"]("ScMetaKind", { + scMetaV0: 0 + }); + + // === xdr source ============================================================ + // + // union SCMetaEntry switch (SCMetaKind kind) + // { + // case SC_META_V0: + // SCMetaV0 v0; + // }; + // + // =========================================================================== + xdr.union("ScMetaEntry", { + switchOn: xdr.lookup("ScMetaKind"), + switchName: "kind", + switches: [["scMetaV0", "v0"]], + arms: { + v0: xdr.lookup("ScMetaV0") + } + }); + + // === xdr source ============================================================ + // + // const SC_SPEC_DOC_LIMIT = 1024; + // + // =========================================================================== + xdr["const"]("SC_SPEC_DOC_LIMIT", 1024); + + // === xdr source ============================================================ + // + // enum SCSpecType + // { + // SC_SPEC_TYPE_VAL = 0, + // + // // Types with no parameters. + // SC_SPEC_TYPE_BOOL = 1, + // SC_SPEC_TYPE_VOID = 2, + // SC_SPEC_TYPE_ERROR = 3, + // SC_SPEC_TYPE_U32 = 4, + // SC_SPEC_TYPE_I32 = 5, + // SC_SPEC_TYPE_U64 = 6, + // SC_SPEC_TYPE_I64 = 7, + // SC_SPEC_TYPE_TIMEPOINT = 8, + // SC_SPEC_TYPE_DURATION = 9, + // SC_SPEC_TYPE_U128 = 10, + // SC_SPEC_TYPE_I128 = 11, + // SC_SPEC_TYPE_U256 = 12, + // SC_SPEC_TYPE_I256 = 13, + // SC_SPEC_TYPE_BYTES = 14, + // SC_SPEC_TYPE_STRING = 16, + // SC_SPEC_TYPE_SYMBOL = 17, + // SC_SPEC_TYPE_ADDRESS = 19, + // + // // Types with parameters. + // SC_SPEC_TYPE_OPTION = 1000, + // SC_SPEC_TYPE_RESULT = 1001, + // SC_SPEC_TYPE_VEC = 1002, + // SC_SPEC_TYPE_MAP = 1004, + // SC_SPEC_TYPE_TUPLE = 1005, + // SC_SPEC_TYPE_BYTES_N = 1006, + // + // // User defined types. + // SC_SPEC_TYPE_UDT = 2000 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecType", { + scSpecTypeVal: 0, + scSpecTypeBool: 1, + scSpecTypeVoid: 2, + scSpecTypeError: 3, + scSpecTypeU32: 4, + scSpecTypeI32: 5, + scSpecTypeU64: 6, + scSpecTypeI64: 7, + scSpecTypeTimepoint: 8, + scSpecTypeDuration: 9, + scSpecTypeU128: 10, + scSpecTypeI128: 11, + scSpecTypeU256: 12, + scSpecTypeI256: 13, + scSpecTypeBytes: 14, + scSpecTypeString: 16, + scSpecTypeSymbol: 17, + scSpecTypeAddress: 19, + scSpecTypeOption: 1000, + scSpecTypeResult: 1001, + scSpecTypeVec: 1002, + scSpecTypeMap: 1004, + scSpecTypeTuple: 1005, + scSpecTypeBytesN: 1006, + scSpecTypeUdt: 2000 + }); + + // === xdr source ============================================================ + // + // struct SCSpecTypeOption + // { + // SCSpecTypeDef valueType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeOption", [["valueType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeResult + // { + // SCSpecTypeDef okType; + // SCSpecTypeDef errorType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeResult", [["okType", xdr.lookup("ScSpecTypeDef")], ["errorType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeVec + // { + // SCSpecTypeDef elementType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeVec", [["elementType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeMap + // { + // SCSpecTypeDef keyType; + // SCSpecTypeDef valueType; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeMap", [["keyType", xdr.lookup("ScSpecTypeDef")], ["valueType", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeTuple + // { + // SCSpecTypeDef valueTypes<12>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeTuple", [["valueTypes", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 12)]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeBytesN + // { + // uint32 n; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeBytesN", [["n", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecTypeUDT + // { + // string name<60>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecTypeUdt", [["name", xdr.string(60)]]); + + // === xdr source ============================================================ + // + // union SCSpecTypeDef switch (SCSpecType type) + // { + // case SC_SPEC_TYPE_VAL: + // case SC_SPEC_TYPE_BOOL: + // case SC_SPEC_TYPE_VOID: + // case SC_SPEC_TYPE_ERROR: + // case SC_SPEC_TYPE_U32: + // case SC_SPEC_TYPE_I32: + // case SC_SPEC_TYPE_U64: + // case SC_SPEC_TYPE_I64: + // case SC_SPEC_TYPE_TIMEPOINT: + // case SC_SPEC_TYPE_DURATION: + // case SC_SPEC_TYPE_U128: + // case SC_SPEC_TYPE_I128: + // case SC_SPEC_TYPE_U256: + // case SC_SPEC_TYPE_I256: + // case SC_SPEC_TYPE_BYTES: + // case SC_SPEC_TYPE_STRING: + // case SC_SPEC_TYPE_SYMBOL: + // case SC_SPEC_TYPE_ADDRESS: + // void; + // case SC_SPEC_TYPE_OPTION: + // SCSpecTypeOption option; + // case SC_SPEC_TYPE_RESULT: + // SCSpecTypeResult result; + // case SC_SPEC_TYPE_VEC: + // SCSpecTypeVec vec; + // case SC_SPEC_TYPE_MAP: + // SCSpecTypeMap map; + // case SC_SPEC_TYPE_TUPLE: + // SCSpecTypeTuple tuple; + // case SC_SPEC_TYPE_BYTES_N: + // SCSpecTypeBytesN bytesN; + // case SC_SPEC_TYPE_UDT: + // SCSpecTypeUDT udt; + // }; + // + // =========================================================================== + xdr.union("ScSpecTypeDef", { + switchOn: xdr.lookup("ScSpecType"), + switchName: "type", + switches: [["scSpecTypeVal", xdr["void"]()], ["scSpecTypeBool", xdr["void"]()], ["scSpecTypeVoid", xdr["void"]()], ["scSpecTypeError", xdr["void"]()], ["scSpecTypeU32", xdr["void"]()], ["scSpecTypeI32", xdr["void"]()], ["scSpecTypeU64", xdr["void"]()], ["scSpecTypeI64", xdr["void"]()], ["scSpecTypeTimepoint", xdr["void"]()], ["scSpecTypeDuration", xdr["void"]()], ["scSpecTypeU128", xdr["void"]()], ["scSpecTypeI128", xdr["void"]()], ["scSpecTypeU256", xdr["void"]()], ["scSpecTypeI256", xdr["void"]()], ["scSpecTypeBytes", xdr["void"]()], ["scSpecTypeString", xdr["void"]()], ["scSpecTypeSymbol", xdr["void"]()], ["scSpecTypeAddress", xdr["void"]()], ["scSpecTypeOption", "option"], ["scSpecTypeResult", "result"], ["scSpecTypeVec", "vec"], ["scSpecTypeMap", "map"], ["scSpecTypeTuple", "tuple"], ["scSpecTypeBytesN", "bytesN"], ["scSpecTypeUdt", "udt"]], + arms: { + option: xdr.lookup("ScSpecTypeOption"), + result: xdr.lookup("ScSpecTypeResult"), + vec: xdr.lookup("ScSpecTypeVec"), + map: xdr.lookup("ScSpecTypeMap"), + tuple: xdr.lookup("ScSpecTypeTuple"), + bytesN: xdr.lookup("ScSpecTypeBytesN"), + udt: xdr.lookup("ScSpecTypeUdt") + } + }); + + // === xdr source ============================================================ + // + // struct SCSpecUDTStructFieldV0 + // { + // string doc; + // string name<30>; + // SCSpecTypeDef type; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtStructFieldV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(30)], ["type", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTStructV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTStructFieldV0 fields<40>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtStructV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["fields", xdr.varArray(xdr.lookup("ScSpecUdtStructFieldV0"), 40)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionCaseVoidV0 + // { + // string doc; + // string name<60>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionCaseVoidV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionCaseTupleV0 + // { + // string doc; + // string name<60>; + // SCSpecTypeDef type<12>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionCaseTupleV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["type", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 12)]]); + + // === xdr source ============================================================ + // + // enum SCSpecUDTUnionCaseV0Kind + // { + // SC_SPEC_UDT_UNION_CASE_VOID_V0 = 0, + // SC_SPEC_UDT_UNION_CASE_TUPLE_V0 = 1 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecUdtUnionCaseV0Kind", { + scSpecUdtUnionCaseVoidV0: 0, + scSpecUdtUnionCaseTupleV0: 1 + }); + + // === xdr source ============================================================ + // + // union SCSpecUDTUnionCaseV0 switch (SCSpecUDTUnionCaseV0Kind kind) + // { + // case SC_SPEC_UDT_UNION_CASE_VOID_V0: + // SCSpecUDTUnionCaseVoidV0 voidCase; + // case SC_SPEC_UDT_UNION_CASE_TUPLE_V0: + // SCSpecUDTUnionCaseTupleV0 tupleCase; + // }; + // + // =========================================================================== + xdr.union("ScSpecUdtUnionCaseV0", { + switchOn: xdr.lookup("ScSpecUdtUnionCaseV0Kind"), + switchName: "kind", + switches: [["scSpecUdtUnionCaseVoidV0", "voidCase"], ["scSpecUdtUnionCaseTupleV0", "tupleCase"]], + arms: { + voidCase: xdr.lookup("ScSpecUdtUnionCaseVoidV0"), + tupleCase: xdr.lookup("ScSpecUdtUnionCaseTupleV0") + } + }); + + // === xdr source ============================================================ + // + // struct SCSpecUDTUnionV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTUnionCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtUnionV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtUnionCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTEnumCaseV0 + // { + // string doc; + // string name<60>; + // uint32 value; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtEnumCaseV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["value", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTEnumV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTEnumCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtEnumV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtEnumCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTErrorEnumCaseV0 + // { + // string doc; + // string name<60>; + // uint32 value; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtErrorEnumCaseV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(60)], ["value", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct SCSpecUDTErrorEnumV0 + // { + // string doc; + // string lib<80>; + // string name<60>; + // SCSpecUDTErrorEnumCaseV0 cases<50>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecUdtErrorEnumV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["lib", xdr.string(80)], ["name", xdr.string(60)], ["cases", xdr.varArray(xdr.lookup("ScSpecUdtErrorEnumCaseV0"), 50)]]); + + // === xdr source ============================================================ + // + // struct SCSpecFunctionInputV0 + // { + // string doc; + // string name<30>; + // SCSpecTypeDef type; + // }; + // + // =========================================================================== + xdr.struct("ScSpecFunctionInputV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.string(30)], ["type", xdr.lookup("ScSpecTypeDef")]]); + + // === xdr source ============================================================ + // + // struct SCSpecFunctionV0 + // { + // string doc; + // SCSymbol name; + // SCSpecFunctionInputV0 inputs<10>; + // SCSpecTypeDef outputs<1>; + // }; + // + // =========================================================================== + xdr.struct("ScSpecFunctionV0", [["doc", xdr.string(SC_SPEC_DOC_LIMIT)], ["name", xdr.lookup("ScSymbol")], ["inputs", xdr.varArray(xdr.lookup("ScSpecFunctionInputV0"), 10)], ["outputs", xdr.varArray(xdr.lookup("ScSpecTypeDef"), 1)]]); + + // === xdr source ============================================================ + // + // enum SCSpecEntryKind + // { + // SC_SPEC_ENTRY_FUNCTION_V0 = 0, + // SC_SPEC_ENTRY_UDT_STRUCT_V0 = 1, + // SC_SPEC_ENTRY_UDT_UNION_V0 = 2, + // SC_SPEC_ENTRY_UDT_ENUM_V0 = 3, + // SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0 = 4 + // }; + // + // =========================================================================== + xdr["enum"]("ScSpecEntryKind", { + scSpecEntryFunctionV0: 0, + scSpecEntryUdtStructV0: 1, + scSpecEntryUdtUnionV0: 2, + scSpecEntryUdtEnumV0: 3, + scSpecEntryUdtErrorEnumV0: 4 + }); + + // === xdr source ============================================================ + // + // union SCSpecEntry switch (SCSpecEntryKind kind) + // { + // case SC_SPEC_ENTRY_FUNCTION_V0: + // SCSpecFunctionV0 functionV0; + // case SC_SPEC_ENTRY_UDT_STRUCT_V0: + // SCSpecUDTStructV0 udtStructV0; + // case SC_SPEC_ENTRY_UDT_UNION_V0: + // SCSpecUDTUnionV0 udtUnionV0; + // case SC_SPEC_ENTRY_UDT_ENUM_V0: + // SCSpecUDTEnumV0 udtEnumV0; + // case SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0: + // SCSpecUDTErrorEnumV0 udtErrorEnumV0; + // }; + // + // =========================================================================== + xdr.union("ScSpecEntry", { + switchOn: xdr.lookup("ScSpecEntryKind"), + switchName: "kind", + switches: [["scSpecEntryFunctionV0", "functionV0"], ["scSpecEntryUdtStructV0", "udtStructV0"], ["scSpecEntryUdtUnionV0", "udtUnionV0"], ["scSpecEntryUdtEnumV0", "udtEnumV0"], ["scSpecEntryUdtErrorEnumV0", "udtErrorEnumV0"]], + arms: { + functionV0: xdr.lookup("ScSpecFunctionV0"), + udtStructV0: xdr.lookup("ScSpecUdtStructV0"), + udtUnionV0: xdr.lookup("ScSpecUdtUnionV0"), + udtEnumV0: xdr.lookup("ScSpecUdtEnumV0"), + udtErrorEnumV0: xdr.lookup("ScSpecUdtErrorEnumV0") + } + }); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractExecutionLanesV0 + // { + // // maximum number of Soroban transactions per ledger + // uint32 ledgerMaxTxCount; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractExecutionLanesV0", [["ledgerMaxTxCount", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractComputeV0 + // { + // // Maximum instructions per ledger + // int64 ledgerMaxInstructions; + // // Maximum instructions per transaction + // int64 txMaxInstructions; + // // Cost of 10000 instructions + // int64 feeRatePerInstructionsIncrement; + // + // // Memory limit per transaction. Unlike instructions, there is no fee + // // for memory, just the limit. + // uint32 txMemoryLimit; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractComputeV0", [["ledgerMaxInstructions", xdr.lookup("Int64")], ["txMaxInstructions", xdr.lookup("Int64")], ["feeRatePerInstructionsIncrement", xdr.lookup("Int64")], ["txMemoryLimit", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractParallelComputeV0 + // { + // // Maximum number of threads that can be used to apply a + // // transaction set to close the ledger. + // // This doesn't limit or defined the actual number of + // // threads used and instead only defines the minimum number + // // of physical threads that a tier-1 validator has to support + // // in order to not fall out of sync with the network. + // uint32 ledgerMaxParallelThreads; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractParallelComputeV0", [["ledgerMaxParallelThreads", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractLedgerCostV0 + // { + // // Maximum number of ledger entry read operations per ledger + // uint32 ledgerMaxReadLedgerEntries; + // // Maximum number of bytes that can be read per ledger + // uint32 ledgerMaxReadBytes; + // // Maximum number of ledger entry write operations per ledger + // uint32 ledgerMaxWriteLedgerEntries; + // // Maximum number of bytes that can be written per ledger + // uint32 ledgerMaxWriteBytes; + // + // // Maximum number of ledger entry read operations per transaction + // uint32 txMaxReadLedgerEntries; + // // Maximum number of bytes that can be read per transaction + // uint32 txMaxReadBytes; + // // Maximum number of ledger entry write operations per transaction + // uint32 txMaxWriteLedgerEntries; + // // Maximum number of bytes that can be written per transaction + // uint32 txMaxWriteBytes; + // + // int64 feeReadLedgerEntry; // Fee per ledger entry read + // int64 feeWriteLedgerEntry; // Fee per ledger entry write + // + // int64 feeRead1KB; // Fee for reading 1KB + // + // // The following parameters determine the write fee per 1KB. + // // Write fee grows linearly until bucket list reaches this size + // int64 bucketListTargetSizeBytes; + // // Fee per 1KB write when the bucket list is empty + // int64 writeFee1KBBucketListLow; + // // Fee per 1KB write when the bucket list has reached `bucketListTargetSizeBytes` + // int64 writeFee1KBBucketListHigh; + // // Write fee multiplier for any additional data past the first `bucketListTargetSizeBytes` + // uint32 bucketListWriteFeeGrowthFactor; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractLedgerCostV0", [["ledgerMaxReadLedgerEntries", xdr.lookup("Uint32")], ["ledgerMaxReadBytes", xdr.lookup("Uint32")], ["ledgerMaxWriteLedgerEntries", xdr.lookup("Uint32")], ["ledgerMaxWriteBytes", xdr.lookup("Uint32")], ["txMaxReadLedgerEntries", xdr.lookup("Uint32")], ["txMaxReadBytes", xdr.lookup("Uint32")], ["txMaxWriteLedgerEntries", xdr.lookup("Uint32")], ["txMaxWriteBytes", xdr.lookup("Uint32")], ["feeReadLedgerEntry", xdr.lookup("Int64")], ["feeWriteLedgerEntry", xdr.lookup("Int64")], ["feeRead1Kb", xdr.lookup("Int64")], ["bucketListTargetSizeBytes", xdr.lookup("Int64")], ["writeFee1KbBucketListLow", xdr.lookup("Int64")], ["writeFee1KbBucketListHigh", xdr.lookup("Int64")], ["bucketListWriteFeeGrowthFactor", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractHistoricalDataV0 + // { + // int64 feeHistorical1KB; // Fee for storing 1KB in archives + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractHistoricalDataV0", [["feeHistorical1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractEventsV0 + // { + // // Maximum size of events that a contract call can emit. + // uint32 txMaxContractEventsSizeBytes; + // // Fee for generating 1KB of contract events. + // int64 feeContractEvents1KB; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractEventsV0", [["txMaxContractEventsSizeBytes", xdr.lookup("Uint32")], ["feeContractEvents1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct ConfigSettingContractBandwidthV0 + // { + // // Maximum sum of all transaction sizes in the ledger in bytes + // uint32 ledgerMaxTxsSizeBytes; + // // Maximum size in bytes for a transaction + // uint32 txMaxSizeBytes; + // + // // Fee for 1 KB of transaction size + // int64 feeTxSize1KB; + // }; + // + // =========================================================================== + xdr.struct("ConfigSettingContractBandwidthV0", [["ledgerMaxTxsSizeBytes", xdr.lookup("Uint32")], ["txMaxSizeBytes", xdr.lookup("Uint32")], ["feeTxSize1Kb", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // enum ContractCostType { + // // Cost of running 1 wasm instruction + // WasmInsnExec = 0, + // // Cost of allocating a slice of memory (in bytes) + // MemAlloc = 1, + // // Cost of copying a slice of bytes into a pre-allocated memory + // MemCpy = 2, + // // Cost of comparing two slices of memory + // MemCmp = 3, + // // Cost of a host function dispatch, not including the actual work done by + // // the function nor the cost of VM invocation machinary + // DispatchHostFunction = 4, + // // Cost of visiting a host object from the host object storage. Exists to + // // make sure some baseline cost coverage, i.e. repeatly visiting objects + // // by the guest will always incur some charges. + // VisitObject = 5, + // // Cost of serializing an xdr object to bytes + // ValSer = 6, + // // Cost of deserializing an xdr object from bytes + // ValDeser = 7, + // // Cost of computing the sha256 hash from bytes + // ComputeSha256Hash = 8, + // // Cost of computing the ed25519 pubkey from bytes + // ComputeEd25519PubKey = 9, + // // Cost of verifying ed25519 signature of a payload. + // VerifyEd25519Sig = 10, + // // Cost of instantiation a VM from wasm bytes code. + // VmInstantiation = 11, + // // Cost of instantiation a VM from a cached state. + // VmCachedInstantiation = 12, + // // Cost of invoking a function on the VM. If the function is a host function, + // // additional cost will be covered by `DispatchHostFunction`. + // InvokeVmFunction = 13, + // // Cost of computing a keccak256 hash from bytes. + // ComputeKeccak256Hash = 14, + // // Cost of decoding an ECDSA signature computed from a 256-bit prime modulus + // // curve (e.g. secp256k1 and secp256r1) + // DecodeEcdsaCurve256Sig = 15, + // // Cost of recovering an ECDSA secp256k1 key from a signature. + // RecoverEcdsaSecp256k1Key = 16, + // // Cost of int256 addition (`+`) and subtraction (`-`) operations + // Int256AddSub = 17, + // // Cost of int256 multiplication (`*`) operation + // Int256Mul = 18, + // // Cost of int256 division (`/`) operation + // Int256Div = 19, + // // Cost of int256 power (`exp`) operation + // Int256Pow = 20, + // // Cost of int256 shift (`shl`, `shr`) operation + // Int256Shift = 21, + // // Cost of drawing random bytes using a ChaCha20 PRNG + // ChaCha20DrawBytes = 22, + // + // // Cost of parsing wasm bytes that only encode instructions. + // ParseWasmInstructions = 23, + // // Cost of parsing a known number of wasm functions. + // ParseWasmFunctions = 24, + // // Cost of parsing a known number of wasm globals. + // ParseWasmGlobals = 25, + // // Cost of parsing a known number of wasm table entries. + // ParseWasmTableEntries = 26, + // // Cost of parsing a known number of wasm types. + // ParseWasmTypes = 27, + // // Cost of parsing a known number of wasm data segments. + // ParseWasmDataSegments = 28, + // // Cost of parsing a known number of wasm element segments. + // ParseWasmElemSegments = 29, + // // Cost of parsing a known number of wasm imports. + // ParseWasmImports = 30, + // // Cost of parsing a known number of wasm exports. + // ParseWasmExports = 31, + // // Cost of parsing a known number of data segment bytes. + // ParseWasmDataSegmentBytes = 32, + // + // // Cost of instantiating wasm bytes that only encode instructions. + // InstantiateWasmInstructions = 33, + // // Cost of instantiating a known number of wasm functions. + // InstantiateWasmFunctions = 34, + // // Cost of instantiating a known number of wasm globals. + // InstantiateWasmGlobals = 35, + // // Cost of instantiating a known number of wasm table entries. + // InstantiateWasmTableEntries = 36, + // // Cost of instantiating a known number of wasm types. + // InstantiateWasmTypes = 37, + // // Cost of instantiating a known number of wasm data segments. + // InstantiateWasmDataSegments = 38, + // // Cost of instantiating a known number of wasm element segments. + // InstantiateWasmElemSegments = 39, + // // Cost of instantiating a known number of wasm imports. + // InstantiateWasmImports = 40, + // // Cost of instantiating a known number of wasm exports. + // InstantiateWasmExports = 41, + // // Cost of instantiating a known number of data segment bytes. + // InstantiateWasmDataSegmentBytes = 42, + // + // // Cost of decoding a bytes array representing an uncompressed SEC-1 encoded + // // point on a 256-bit elliptic curve + // Sec1DecodePointUncompressed = 43, + // // Cost of verifying an ECDSA Secp256r1 signature + // VerifyEcdsaSecp256r1Sig = 44, + // + // // Cost of encoding a BLS12-381 Fp (base field element) + // Bls12381EncodeFp = 45, + // // Cost of decoding a BLS12-381 Fp (base field element) + // Bls12381DecodeFp = 46, + // // Cost of checking a G1 point lies on the curve + // Bls12381G1CheckPointOnCurve = 47, + // // Cost of checking a G1 point belongs to the correct subgroup + // Bls12381G1CheckPointInSubgroup = 48, + // // Cost of checking a G2 point lies on the curve + // Bls12381G2CheckPointOnCurve = 49, + // // Cost of checking a G2 point belongs to the correct subgroup + // Bls12381G2CheckPointInSubgroup = 50, + // // Cost of converting a BLS12-381 G1 point from projective to affine coordinates + // Bls12381G1ProjectiveToAffine = 51, + // // Cost of converting a BLS12-381 G2 point from projective to affine coordinates + // Bls12381G2ProjectiveToAffine = 52, + // // Cost of performing BLS12-381 G1 point addition + // Bls12381G1Add = 53, + // // Cost of performing BLS12-381 G1 scalar multiplication + // Bls12381G1Mul = 54, + // // Cost of performing BLS12-381 G1 multi-scalar multiplication (MSM) + // Bls12381G1Msm = 55, + // // Cost of mapping a BLS12-381 Fp field element to a G1 point + // Bls12381MapFpToG1 = 56, + // // Cost of hashing to a BLS12-381 G1 point + // Bls12381HashToG1 = 57, + // // Cost of performing BLS12-381 G2 point addition + // Bls12381G2Add = 58, + // // Cost of performing BLS12-381 G2 scalar multiplication + // Bls12381G2Mul = 59, + // // Cost of performing BLS12-381 G2 multi-scalar multiplication (MSM) + // Bls12381G2Msm = 60, + // // Cost of mapping a BLS12-381 Fp2 field element to a G2 point + // Bls12381MapFp2ToG2 = 61, + // // Cost of hashing to a BLS12-381 G2 point + // Bls12381HashToG2 = 62, + // // Cost of performing BLS12-381 pairing operation + // Bls12381Pairing = 63, + // // Cost of converting a BLS12-381 scalar element from U256 + // Bls12381FrFromU256 = 64, + // // Cost of converting a BLS12-381 scalar element to U256 + // Bls12381FrToU256 = 65, + // // Cost of performing BLS12-381 scalar element addition/subtraction + // Bls12381FrAddSub = 66, + // // Cost of performing BLS12-381 scalar element multiplication + // Bls12381FrMul = 67, + // // Cost of performing BLS12-381 scalar element exponentiation + // Bls12381FrPow = 68, + // // Cost of performing BLS12-381 scalar element inversion + // Bls12381FrInv = 69 + // }; + // + // =========================================================================== + xdr["enum"]("ContractCostType", { + wasmInsnExec: 0, + memAlloc: 1, + memCpy: 2, + memCmp: 3, + dispatchHostFunction: 4, + visitObject: 5, + valSer: 6, + valDeser: 7, + computeSha256Hash: 8, + computeEd25519PubKey: 9, + verifyEd25519Sig: 10, + vmInstantiation: 11, + vmCachedInstantiation: 12, + invokeVmFunction: 13, + computeKeccak256Hash: 14, + decodeEcdsaCurve256Sig: 15, + recoverEcdsaSecp256k1Key: 16, + int256AddSub: 17, + int256Mul: 18, + int256Div: 19, + int256Pow: 20, + int256Shift: 21, + chaCha20DrawBytes: 22, + parseWasmInstructions: 23, + parseWasmFunctions: 24, + parseWasmGlobals: 25, + parseWasmTableEntries: 26, + parseWasmTypes: 27, + parseWasmDataSegments: 28, + parseWasmElemSegments: 29, + parseWasmImports: 30, + parseWasmExports: 31, + parseWasmDataSegmentBytes: 32, + instantiateWasmInstructions: 33, + instantiateWasmFunctions: 34, + instantiateWasmGlobals: 35, + instantiateWasmTableEntries: 36, + instantiateWasmTypes: 37, + instantiateWasmDataSegments: 38, + instantiateWasmElemSegments: 39, + instantiateWasmImports: 40, + instantiateWasmExports: 41, + instantiateWasmDataSegmentBytes: 42, + sec1DecodePointUncompressed: 43, + verifyEcdsaSecp256r1Sig: 44, + bls12381EncodeFp: 45, + bls12381DecodeFp: 46, + bls12381G1CheckPointOnCurve: 47, + bls12381G1CheckPointInSubgroup: 48, + bls12381G2CheckPointOnCurve: 49, + bls12381G2CheckPointInSubgroup: 50, + bls12381G1ProjectiveToAffine: 51, + bls12381G2ProjectiveToAffine: 52, + bls12381G1Add: 53, + bls12381G1Mul: 54, + bls12381G1Msm: 55, + bls12381MapFpToG1: 56, + bls12381HashToG1: 57, + bls12381G2Add: 58, + bls12381G2Mul: 59, + bls12381G2Msm: 60, + bls12381MapFp2ToG2: 61, + bls12381HashToG2: 62, + bls12381Pairing: 63, + bls12381FrFromU256: 64, + bls12381FrToU256: 65, + bls12381FrAddSub: 66, + bls12381FrMul: 67, + bls12381FrPow: 68, + bls12381FrInv: 69 + }); + + // === xdr source ============================================================ + // + // struct ContractCostParamEntry { + // // use `ext` to add more terms (e.g. higher order polynomials) in the future + // ExtensionPoint ext; + // + // int64 constTerm; + // int64 linearTerm; + // }; + // + // =========================================================================== + xdr.struct("ContractCostParamEntry", [["ext", xdr.lookup("ExtensionPoint")], ["constTerm", xdr.lookup("Int64")], ["linearTerm", xdr.lookup("Int64")]]); + + // === xdr source ============================================================ + // + // struct StateArchivalSettings { + // uint32 maxEntryTTL; + // uint32 minTemporaryTTL; + // uint32 minPersistentTTL; + // + // // rent_fee = wfee_rate_average / rent_rate_denominator_for_type + // int64 persistentRentRateDenominator; + // int64 tempRentRateDenominator; + // + // // max number of entries that emit archival meta in a single ledger + // uint32 maxEntriesToArchive; + // + // // Number of snapshots to use when calculating average BucketList size + // uint32 bucketListSizeWindowSampleSize; + // + // // How often to sample the BucketList size for the average, in ledgers + // uint32 bucketListWindowSamplePeriod; + // + // // Maximum number of bytes that we scan for eviction per ledger + // uint32 evictionScanSize; + // + // // Lowest BucketList level to be scanned to evict entries + // uint32 startingEvictionScanLevel; + // }; + // + // =========================================================================== + xdr.struct("StateArchivalSettings", [["maxEntryTtl", xdr.lookup("Uint32")], ["minTemporaryTtl", xdr.lookup("Uint32")], ["minPersistentTtl", xdr.lookup("Uint32")], ["persistentRentRateDenominator", xdr.lookup("Int64")], ["tempRentRateDenominator", xdr.lookup("Int64")], ["maxEntriesToArchive", xdr.lookup("Uint32")], ["bucketListSizeWindowSampleSize", xdr.lookup("Uint32")], ["bucketListWindowSamplePeriod", xdr.lookup("Uint32")], ["evictionScanSize", xdr.lookup("Uint32")], ["startingEvictionScanLevel", xdr.lookup("Uint32")]]); + + // === xdr source ============================================================ + // + // struct EvictionIterator { + // uint32 bucketListLevel; + // bool isCurrBucket; + // uint64 bucketFileOffset; + // }; + // + // =========================================================================== + xdr.struct("EvictionIterator", [["bucketListLevel", xdr.lookup("Uint32")], ["isCurrBucket", xdr.bool()], ["bucketFileOffset", xdr.lookup("Uint64")]]); + + // === xdr source ============================================================ + // + // const CONTRACT_COST_COUNT_LIMIT = 1024; + // + // =========================================================================== + xdr["const"]("CONTRACT_COST_COUNT_LIMIT", 1024); + + // === xdr source ============================================================ + // + // typedef ContractCostParamEntry ContractCostParams; + // + // =========================================================================== + xdr.typedef("ContractCostParams", xdr.varArray(xdr.lookup("ContractCostParamEntry"), xdr.lookup("CONTRACT_COST_COUNT_LIMIT"))); + + // === xdr source ============================================================ + // + // enum ConfigSettingID + // { + // CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES = 0, + // CONFIG_SETTING_CONTRACT_COMPUTE_V0 = 1, + // CONFIG_SETTING_CONTRACT_LEDGER_COST_V0 = 2, + // CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0 = 3, + // CONFIG_SETTING_CONTRACT_EVENTS_V0 = 4, + // CONFIG_SETTING_CONTRACT_BANDWIDTH_V0 = 5, + // CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS = 6, + // CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7, + // CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8, + // CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9, + // CONFIG_SETTING_STATE_ARCHIVAL = 10, + // CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11, + // CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW = 12, + // CONFIG_SETTING_EVICTION_ITERATOR = 13, + // CONFIG_SETTING_CONTRACT_PARALLEL_COMPUTE_V0 = 14 + // }; + // + // =========================================================================== + xdr["enum"]("ConfigSettingId", { + configSettingContractMaxSizeBytes: 0, + configSettingContractComputeV0: 1, + configSettingContractLedgerCostV0: 2, + configSettingContractHistoricalDataV0: 3, + configSettingContractEventsV0: 4, + configSettingContractBandwidthV0: 5, + configSettingContractCostParamsCpuInstructions: 6, + configSettingContractCostParamsMemoryBytes: 7, + configSettingContractDataKeySizeBytes: 8, + configSettingContractDataEntrySizeBytes: 9, + configSettingStateArchival: 10, + configSettingContractExecutionLanes: 11, + configSettingBucketlistSizeWindow: 12, + configSettingEvictionIterator: 13, + configSettingContractParallelComputeV0: 14 + }); + + // === xdr source ============================================================ + // + // union ConfigSettingEntry switch (ConfigSettingID configSettingID) + // { + // case CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES: + // uint32 contractMaxSizeBytes; + // case CONFIG_SETTING_CONTRACT_COMPUTE_V0: + // ConfigSettingContractComputeV0 contractCompute; + // case CONFIG_SETTING_CONTRACT_LEDGER_COST_V0: + // ConfigSettingContractLedgerCostV0 contractLedgerCost; + // case CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0: + // ConfigSettingContractHistoricalDataV0 contractHistoricalData; + // case CONFIG_SETTING_CONTRACT_EVENTS_V0: + // ConfigSettingContractEventsV0 contractEvents; + // case CONFIG_SETTING_CONTRACT_BANDWIDTH_V0: + // ConfigSettingContractBandwidthV0 contractBandwidth; + // case CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS: + // ContractCostParams contractCostParamsCpuInsns; + // case CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES: + // ContractCostParams contractCostParamsMemBytes; + // case CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES: + // uint32 contractDataKeySizeBytes; + // case CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES: + // uint32 contractDataEntrySizeBytes; + // case CONFIG_SETTING_STATE_ARCHIVAL: + // StateArchivalSettings stateArchivalSettings; + // case CONFIG_SETTING_CONTRACT_EXECUTION_LANES: + // ConfigSettingContractExecutionLanesV0 contractExecutionLanes; + // case CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW: + // uint64 bucketListSizeWindow<>; + // case CONFIG_SETTING_EVICTION_ITERATOR: + // EvictionIterator evictionIterator; + // case CONFIG_SETTING_CONTRACT_PARALLEL_COMPUTE_V0: + // ConfigSettingContractParallelComputeV0 contractParallelCompute; + // }; + // + // =========================================================================== + xdr.union("ConfigSettingEntry", { + switchOn: xdr.lookup("ConfigSettingId"), + switchName: "configSettingId", + switches: [["configSettingContractMaxSizeBytes", "contractMaxSizeBytes"], ["configSettingContractComputeV0", "contractCompute"], ["configSettingContractLedgerCostV0", "contractLedgerCost"], ["configSettingContractHistoricalDataV0", "contractHistoricalData"], ["configSettingContractEventsV0", "contractEvents"], ["configSettingContractBandwidthV0", "contractBandwidth"], ["configSettingContractCostParamsCpuInstructions", "contractCostParamsCpuInsns"], ["configSettingContractCostParamsMemoryBytes", "contractCostParamsMemBytes"], ["configSettingContractDataKeySizeBytes", "contractDataKeySizeBytes"], ["configSettingContractDataEntrySizeBytes", "contractDataEntrySizeBytes"], ["configSettingStateArchival", "stateArchivalSettings"], ["configSettingContractExecutionLanes", "contractExecutionLanes"], ["configSettingBucketlistSizeWindow", "bucketListSizeWindow"], ["configSettingEvictionIterator", "evictionIterator"], ["configSettingContractParallelComputeV0", "contractParallelCompute"]], + arms: { + contractMaxSizeBytes: xdr.lookup("Uint32"), + contractCompute: xdr.lookup("ConfigSettingContractComputeV0"), + contractLedgerCost: xdr.lookup("ConfigSettingContractLedgerCostV0"), + contractHistoricalData: xdr.lookup("ConfigSettingContractHistoricalDataV0"), + contractEvents: xdr.lookup("ConfigSettingContractEventsV0"), + contractBandwidth: xdr.lookup("ConfigSettingContractBandwidthV0"), + contractCostParamsCpuInsns: xdr.lookup("ContractCostParams"), + contractCostParamsMemBytes: xdr.lookup("ContractCostParams"), + contractDataKeySizeBytes: xdr.lookup("Uint32"), + contractDataEntrySizeBytes: xdr.lookup("Uint32"), + stateArchivalSettings: xdr.lookup("StateArchivalSettings"), + contractExecutionLanes: xdr.lookup("ConfigSettingContractExecutionLanesV0"), + bucketListSizeWindow: xdr.varArray(xdr.lookup("Uint64"), 2147483647), + evictionIterator: xdr.lookup("EvictionIterator"), + contractParallelCompute: xdr.lookup("ConfigSettingContractParallelComputeV0") + } + }); +}); +var _default = exports["default"] = types; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/get_liquidity_pool_id.js b/node_modules/@stellar/stellar-base/lib/get_liquidity_pool_id.js new file mode 100644 index 00000000..ead7d49b --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/get_liquidity_pool_id.js @@ -0,0 +1,57 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.LiquidityPoolFeeV18 = void 0; +exports.getLiquidityPoolId = getLiquidityPoolId; +var _xdr = _interopRequireDefault(require("./xdr")); +var _asset = require("./asset"); +var _hashing = require("./hashing"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +// LiquidityPoolFeeV18 is the default liquidity pool fee in protocol v18. It defaults to 30 base points (0.3%). +var LiquidityPoolFeeV18 = exports.LiquidityPoolFeeV18 = 30; + +/** + * getLiquidityPoolId computes the Pool ID for the given assets, fee and pool type. + * + * @see [stellar-core getPoolID](https://github.com/stellar/stellar-core/blob/9f3a48c6a8f1aa77b6043a055d0638661f718080/src/ledger/test/LedgerTxnTests.cpp#L3746-L3751) + * + * @export + * @param {string} liquidityPoolType – A string representing the liquidity pool type. + * @param {object} liquidityPoolParameters – The liquidity pool parameters. + * @param {Asset} liquidityPoolParameters.assetA – The first asset in the Pool, it must respect the rule assetA < assetB. + * @param {Asset} liquidityPoolParameters.assetB – The second asset in the Pool, it must respect the rule assetA < assetB. + * @param {number} liquidityPoolParameters.fee – The liquidity pool fee. For now the only fee supported is `30`. + * + * @return {Buffer} the raw Pool ID buffer, which can be stringfied with `toString('hex')` + */ +function getLiquidityPoolId(liquidityPoolType) { + var liquidityPoolParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if (liquidityPoolType !== 'constant_product') { + throw new Error('liquidityPoolType is invalid'); + } + var assetA = liquidityPoolParameters.assetA, + assetB = liquidityPoolParameters.assetB, + fee = liquidityPoolParameters.fee; + if (!assetA || !(assetA instanceof _asset.Asset)) { + throw new Error('assetA is invalid'); + } + if (!assetB || !(assetB instanceof _asset.Asset)) { + throw new Error('assetB is invalid'); + } + if (!fee || fee !== LiquidityPoolFeeV18) { + throw new Error('fee is invalid'); + } + if (_asset.Asset.compare(assetA, assetB) !== -1) { + throw new Error('Assets are not in lexicographic order'); + } + var lpTypeData = _xdr["default"].LiquidityPoolType.liquidityPoolConstantProduct().toXDR(); + var lpParamsData = new _xdr["default"].LiquidityPoolConstantProductParameters({ + assetA: assetA.toXDRObject(), + assetB: assetB.toXDRObject(), + fee: fee + }).toXDR(); + var payload = Buffer.concat([lpTypeData, lpParamsData]); + return (0, _hashing.hash)(payload); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/hashing.js b/node_modules/@stellar/stellar-base/lib/hashing.js new file mode 100644 index 00000000..21190b89 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/hashing.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.hash = hash; +var _sha = require("sha.js"); +function hash(data) { + var hasher = new _sha.sha256(); + hasher.update(data, 'utf8'); + return hasher.digest(); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/index.js b/node_modules/@stellar/stellar-base/lib/index.js new file mode 100644 index 00000000..f94c54a0 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/index.js @@ -0,0 +1,389 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var _exportNames = { + xdr: true, + cereal: true, + hash: true, + sign: true, + verify: true, + FastSigning: true, + getLiquidityPoolId: true, + LiquidityPoolFeeV18: true, + Keypair: true, + UnsignedHyper: true, + Hyper: true, + TransactionBase: true, + Transaction: true, + FeeBumpTransaction: true, + TransactionBuilder: true, + TimeoutInfinite: true, + BASE_FEE: true, + Asset: true, + LiquidityPoolAsset: true, + LiquidityPoolId: true, + Operation: true, + AuthRequiredFlag: true, + AuthRevocableFlag: true, + AuthImmutableFlag: true, + AuthClawbackEnabledFlag: true, + Account: true, + MuxedAccount: true, + Claimant: true, + Networks: true, + StrKey: true, + SignerKey: true, + Soroban: true, + decodeAddressToMuxedAccount: true, + encodeMuxedAccountToAddress: true, + extractBaseAddress: true, + encodeMuxedAccount: true, + Contract: true, + Address: true +}; +Object.defineProperty(exports, "Account", { + enumerable: true, + get: function get() { + return _account.Account; + } +}); +Object.defineProperty(exports, "Address", { + enumerable: true, + get: function get() { + return _address.Address; + } +}); +Object.defineProperty(exports, "Asset", { + enumerable: true, + get: function get() { + return _asset.Asset; + } +}); +Object.defineProperty(exports, "AuthClawbackEnabledFlag", { + enumerable: true, + get: function get() { + return _operation.AuthClawbackEnabledFlag; + } +}); +Object.defineProperty(exports, "AuthImmutableFlag", { + enumerable: true, + get: function get() { + return _operation.AuthImmutableFlag; + } +}); +Object.defineProperty(exports, "AuthRequiredFlag", { + enumerable: true, + get: function get() { + return _operation.AuthRequiredFlag; + } +}); +Object.defineProperty(exports, "AuthRevocableFlag", { + enumerable: true, + get: function get() { + return _operation.AuthRevocableFlag; + } +}); +Object.defineProperty(exports, "BASE_FEE", { + enumerable: true, + get: function get() { + return _transaction_builder.BASE_FEE; + } +}); +Object.defineProperty(exports, "Claimant", { + enumerable: true, + get: function get() { + return _claimant.Claimant; + } +}); +Object.defineProperty(exports, "Contract", { + enumerable: true, + get: function get() { + return _contract.Contract; + } +}); +Object.defineProperty(exports, "FastSigning", { + enumerable: true, + get: function get() { + return _signing.FastSigning; + } +}); +Object.defineProperty(exports, "FeeBumpTransaction", { + enumerable: true, + get: function get() { + return _fee_bump_transaction.FeeBumpTransaction; + } +}); +Object.defineProperty(exports, "Hyper", { + enumerable: true, + get: function get() { + return _jsXdr.Hyper; + } +}); +Object.defineProperty(exports, "Keypair", { + enumerable: true, + get: function get() { + return _keypair.Keypair; + } +}); +Object.defineProperty(exports, "LiquidityPoolAsset", { + enumerable: true, + get: function get() { + return _liquidity_pool_asset.LiquidityPoolAsset; + } +}); +Object.defineProperty(exports, "LiquidityPoolFeeV18", { + enumerable: true, + get: function get() { + return _get_liquidity_pool_id.LiquidityPoolFeeV18; + } +}); +Object.defineProperty(exports, "LiquidityPoolId", { + enumerable: true, + get: function get() { + return _liquidity_pool_id.LiquidityPoolId; + } +}); +Object.defineProperty(exports, "MuxedAccount", { + enumerable: true, + get: function get() { + return _muxed_account.MuxedAccount; + } +}); +Object.defineProperty(exports, "Networks", { + enumerable: true, + get: function get() { + return _network.Networks; + } +}); +Object.defineProperty(exports, "Operation", { + enumerable: true, + get: function get() { + return _operation.Operation; + } +}); +Object.defineProperty(exports, "SignerKey", { + enumerable: true, + get: function get() { + return _signerkey.SignerKey; + } +}); +Object.defineProperty(exports, "Soroban", { + enumerable: true, + get: function get() { + return _soroban.Soroban; + } +}); +Object.defineProperty(exports, "StrKey", { + enumerable: true, + get: function get() { + return _strkey.StrKey; + } +}); +Object.defineProperty(exports, "TimeoutInfinite", { + enumerable: true, + get: function get() { + return _transaction_builder.TimeoutInfinite; + } +}); +Object.defineProperty(exports, "Transaction", { + enumerable: true, + get: function get() { + return _transaction.Transaction; + } +}); +Object.defineProperty(exports, "TransactionBase", { + enumerable: true, + get: function get() { + return _transaction_base.TransactionBase; + } +}); +Object.defineProperty(exports, "TransactionBuilder", { + enumerable: true, + get: function get() { + return _transaction_builder.TransactionBuilder; + } +}); +Object.defineProperty(exports, "UnsignedHyper", { + enumerable: true, + get: function get() { + return _jsXdr.UnsignedHyper; + } +}); +Object.defineProperty(exports, "cereal", { + enumerable: true, + get: function get() { + return _jsxdr["default"]; + } +}); +Object.defineProperty(exports, "decodeAddressToMuxedAccount", { + enumerable: true, + get: function get() { + return _decode_encode_muxed_account.decodeAddressToMuxedAccount; + } +}); +exports["default"] = void 0; +Object.defineProperty(exports, "encodeMuxedAccount", { + enumerable: true, + get: function get() { + return _decode_encode_muxed_account.encodeMuxedAccount; + } +}); +Object.defineProperty(exports, "encodeMuxedAccountToAddress", { + enumerable: true, + get: function get() { + return _decode_encode_muxed_account.encodeMuxedAccountToAddress; + } +}); +Object.defineProperty(exports, "extractBaseAddress", { + enumerable: true, + get: function get() { + return _decode_encode_muxed_account.extractBaseAddress; + } +}); +Object.defineProperty(exports, "getLiquidityPoolId", { + enumerable: true, + get: function get() { + return _get_liquidity_pool_id.getLiquidityPoolId; + } +}); +Object.defineProperty(exports, "hash", { + enumerable: true, + get: function get() { + return _hashing.hash; + } +}); +Object.defineProperty(exports, "sign", { + enumerable: true, + get: function get() { + return _signing.sign; + } +}); +Object.defineProperty(exports, "verify", { + enumerable: true, + get: function get() { + return _signing.verify; + } +}); +Object.defineProperty(exports, "xdr", { + enumerable: true, + get: function get() { + return _xdr["default"]; + } +}); +var _xdr = _interopRequireDefault(require("./xdr")); +var _jsxdr = _interopRequireDefault(require("./jsxdr")); +var _hashing = require("./hashing"); +var _signing = require("./signing"); +var _get_liquidity_pool_id = require("./get_liquidity_pool_id"); +var _keypair = require("./keypair"); +var _jsXdr = require("@stellar/js-xdr"); +var _transaction_base = require("./transaction_base"); +var _transaction = require("./transaction"); +var _fee_bump_transaction = require("./fee_bump_transaction"); +var _transaction_builder = require("./transaction_builder"); +var _asset = require("./asset"); +var _liquidity_pool_asset = require("./liquidity_pool_asset"); +var _liquidity_pool_id = require("./liquidity_pool_id"); +var _operation = require("./operation"); +var _memo = require("./memo"); +Object.keys(_memo).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _memo[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _memo[key]; + } + }); +}); +var _account = require("./account"); +var _muxed_account = require("./muxed_account"); +var _claimant = require("./claimant"); +var _network = require("./network"); +var _strkey = require("./strkey"); +var _signerkey = require("./signerkey"); +var _soroban = require("./soroban"); +var _decode_encode_muxed_account = require("./util/decode_encode_muxed_account"); +var _contract = require("./contract"); +var _address = require("./address"); +var _numbers = require("./numbers"); +Object.keys(_numbers).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _numbers[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _numbers[key]; + } + }); +}); +var _scval = require("./scval"); +Object.keys(_scval).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _scval[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _scval[key]; + } + }); +}); +var _events = require("./events"); +Object.keys(_events).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _events[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _events[key]; + } + }); +}); +var _sorobandata_builder = require("./sorobandata_builder"); +Object.keys(_sorobandata_builder).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _sorobandata_builder[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _sorobandata_builder[key]; + } + }); +}); +var _auth = require("./auth"); +Object.keys(_auth).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _auth[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _auth[key]; + } + }); +}); +var _invocation = require("./invocation"); +Object.keys(_invocation).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _invocation[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _invocation[key]; + } + }); +}); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/* eslint-disable import/no-import-module-exports */ +// +// Soroban +// +var _default = exports["default"] = module.exports; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/invocation.js b/node_modules/@stellar/stellar-base/lib/invocation.js new file mode 100644 index 00000000..b7be9c10 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/invocation.js @@ -0,0 +1,212 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.buildInvocationTree = buildInvocationTree; +exports.walkInvocationTree = walkInvocationTree; +var _asset = require("./asset"); +var _address = require("./address"); +var _scval = require("./scval"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * @typedef CreateInvocation + * + * @prop {'wasm'|'sac'} type a type indicating if this creation was a custom + * contract or a wrapping of an existing Stellar asset + * @prop {string} [token] when `type=='sac'`, the canonical {@link Asset} that + * is being wrapped by this Stellar Asset Contract + * @prop {object} [wasm] when `type=='wasm'`, add'l creation parameters + * + * @prop {string} wasm.hash hex hash of WASM bytecode backing this contract + * @prop {string} wasm.address contract address of this deployment + * @prop {string} wasm.salt hex salt that the user consumed when creating + * this contract (encoded in the resulting address) + * @prop {any[]} [wasm.constructorArgs] a list of natively-represented values + * (see {@link scValToNative}) that are passed to the constructor when + * creating this contract + */ + +/** + * @typedef ExecuteInvocation + * + * @prop {string} source the strkey of the contract (C...) being invoked + * @prop {string} function the name of the function being invoked + * @prop {any[]} args the natively-represented parameters to the function + * invocation (see {@link scValToNative} for rules on how they're + * represented a JS types) + */ + +/** + * @typedef InvocationTree + * @prop {'execute' | 'create'} type the type of invocation occurring, either + * contract creation or host function execution + * @prop {CreateInvocation | ExecuteInvocation} args the parameters to the + * invocation, depending on the type + * @prop {InvocationTree[]} invocations any sub-invocations that (may) occur + * as a result of this invocation (i.e. a tree of call stacks) + */ + +/** + * Turns a raw invocation tree into a human-readable format. + * + * This is designed to make the invocation tree easier to understand in order to + * inform users about the side-effects of their contract calls. This will help + * make informed decisions about whether or not a particular invocation will + * result in what you expect it to. + * + * @param {xdr.SorobanAuthorizedInvocation} root the raw XDR of the invocation, + * likely acquired from transaction simulation. this is either from the + * {@link Operation.invokeHostFunction} itself (the `func` field), or from + * the authorization entries ({@link xdr.SorobanAuthorizationEntry}, the + * `rootInvocation` field) + * + * @returns {InvocationTree} a human-readable version of the invocation tree + * + * @example + * Here, we show a browser modal after simulating an arbitrary transaction, + * `tx`, which we assume has an `Operation.invokeHostFunction` inside of it: + * + * ```typescript + * import { Server, buildInvocationTree } from '@stellar/stellar-sdk'; + * + * const s = new Server("fill in accordingly"); + * + * s.simulateTransaction(tx).then( + * (resp: SorobanRpc.SimulateTransactionResponse) => { + * if (SorobanRpc.isSuccessfulSim(resp) && ) { + * // bold assumption: there's a valid result with an auth entry + * alert( + * "You are authorizing the following invocation:\n" + + * JSON.stringify( + * buildInvocationTree(resp.result!.auth[0].rootInvocation()), + * null, + * 2 + * ) + * ); + * } + * } + * ); + * ``` + */ +function buildInvocationTree(root) { + var fn = root["function"](); + + /** @type {InvocationTree} */ + var output = {}; + + /** @type {xdr.CreateContractArgs|xdr.CreateContractArgsV2|xdr.InvokeContractArgs} */ + var inner = fn.value(); + switch (fn["switch"]().value) { + // sorobanAuthorizedFunctionTypeContractFn + case 0: + output.type = 'execute'; + output.args = { + source: _address.Address.fromScAddress(inner.contractAddress()).toString(), + "function": inner.functionName(), + args: inner.args().map(function (arg) { + return (0, _scval.scValToNative)(arg); + }) + }; + break; + + // sorobanAuthorizedFunctionTypeCreateContractHostFn + // sorobanAuthorizedFunctionTypeCreateContractV2HostFn + case 1: // fallthrough: just no ctor args in V1 + case 2: + { + var createV2 = fn["switch"]().value === 2; + output.type = 'create'; + output.args = {}; + + // If the executable is a WASM, the preimage MUST be an address. If it's a + // token, the preimage MUST be an asset. This is a cheeky way to check + // that, because wasm=0, token=1 and address=0, asset=1 in the XDR switch + // values. + // + // The first part may not be true in V2, but we'd need to update this code + // anyway so it can still be an error. + var _ref = [inner.executable(), inner.contractIdPreimage()], + exec = _ref[0], + preimage = _ref[1]; + if (!!exec["switch"]().value !== !!preimage["switch"]().value) { + throw new Error("creation function appears invalid: ".concat(JSON.stringify(inner), " (should be wasm+address or token+asset)")); + } + switch (exec["switch"]().value) { + // contractExecutableWasm + case 0: + { + /** @type {xdr.ContractIdPreimageFromAddress} */ + var details = preimage.fromAddress(); + output.args.type = 'wasm'; + output.args.wasm = _objectSpread({ + salt: details.salt().toString('hex'), + hash: exec.wasmHash().toString('hex'), + address: _address.Address.fromScAddress(details.address()).toString() + }, createV2 && { + constructorArgs: inner.constructorArgs().map(function (arg) { + return (0, _scval.scValToNative)(arg); + }) + }); + break; + } + + // contractExecutableStellarAsset + case 1: + output.args.type = 'sac'; + output.args.asset = _asset.Asset.fromOperation(preimage.fromAsset()).toString(); + break; + default: + throw new Error("unknown creation type: ".concat(JSON.stringify(exec))); + } + break; + } + default: + throw new Error("unknown invocation type (".concat(fn["switch"](), "): ").concat(JSON.stringify(fn))); + } + output.invocations = root.subInvocations().map(function (i) { + return buildInvocationTree(i); + }); + return output; +} + +/** + * @callback InvocationWalker + * + * @param {xdr.SorobanAuthorizedInvocation} node the currently explored node + * @param {number} depth the depth of the tree this node is occurring at (the + * root starts at a depth of 1) + * @param {xdr.SorobanAuthorizedInvocation} [parent] this `node`s parent node, + * if any (i.e. this doesn't exist at the root) + * + * @returns {boolean|null|void} returning exactly `false` is a hint to stop + * exploring, other values are ignored + */ + +/** + * Executes a callback function on each node in the tree until stopped. + * + * Nodes are walked in a depth-first order. Returning `false` from the callback + * stops further depth exploration at that node, but it does not stop the walk + * in a "global" view. + * + * @param {xdr.SorobanAuthorizedInvocation} root the tree to explore + * @param {InvocationWalker} callback the callback to execute for each node + * @returns {void} + */ +function walkInvocationTree(root, callback) { + walkHelper(root, 1, callback); +} +function walkHelper(node, depth, callback, parent) { + if (callback(node, depth, parent) === false /* allow void rv */) { + return; + } + node.subInvocations().forEach(function (i) { + return walkHelper(i, depth + 1, callback, node); + }); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/jsxdr.js b/node_modules/@stellar/stellar-base/lib/jsxdr.js new file mode 100644 index 00000000..0fec4e99 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/jsxdr.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var _jsXdr = require("@stellar/js-xdr"); +var cereal = { + XdrWriter: _jsXdr.XdrWriter, + XdrReader: _jsXdr.XdrReader +}; +var _default = exports["default"] = cereal; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/keypair.js b/node_modules/@stellar/stellar-base/lib/keypair.js new file mode 100644 index 00000000..1bf249c1 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/keypair.js @@ -0,0 +1,307 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Keypair = void 0; +var _tweetnacl = _interopRequireDefault(require("tweetnacl")); +var _signing = require("./signing"); +var _strkey = require("./strkey"); +var _hashing = require("./hashing"); +var _xdr = _interopRequireDefault(require("./xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint no-bitwise: ["error", {"allow": ["^"]}] */ +/** + * `Keypair` represents public (and secret) keys of the account. + * + * Currently `Keypair` only supports ed25519 but in a future this class can be abstraction layer for other + * public-key signature systems. + * + * Use more convenient methods to create `Keypair` object: + * * `{@link Keypair.fromPublicKey}` + * * `{@link Keypair.fromSecret}` + * * `{@link Keypair.random}` + * + * @constructor + * @param {object} keys At least one of keys must be provided. + * @param {string} keys.type Public-key signature system name. (currently only `ed25519` keys are supported) + * @param {Buffer} [keys.publicKey] Raw public key + * @param {Buffer} [keys.secretKey] Raw secret key (32-byte secret seed in ed25519`) + */ +var Keypair = exports.Keypair = /*#__PURE__*/function () { + function Keypair(keys) { + _classCallCheck(this, Keypair); + if (keys.type !== 'ed25519') { + throw new Error('Invalid keys type'); + } + this.type = keys.type; + if (keys.secretKey) { + keys.secretKey = Buffer.from(keys.secretKey); + if (keys.secretKey.length !== 32) { + throw new Error('secretKey length is invalid'); + } + this._secretSeed = keys.secretKey; + this._publicKey = (0, _signing.generate)(keys.secretKey); + this._secretKey = Buffer.concat([keys.secretKey, this._publicKey]); + if (keys.publicKey && !this._publicKey.equals(Buffer.from(keys.publicKey))) { + throw new Error('secretKey does not match publicKey'); + } + } else { + this._publicKey = Buffer.from(keys.publicKey); + if (this._publicKey.length !== 32) { + throw new Error('publicKey length is invalid'); + } + } + } + + /** + * Creates a new `Keypair` instance from secret. This can either be secret key or secret seed depending + * on underlying public-key signature system. Currently `Keypair` only supports ed25519. + * @param {string} secret secret key (ex. `SDAKFNYEIAORZKKCYRILFQKLLOCNPL5SWJ3YY5NM3ZH6GJSZGXHZEPQS`) + * @returns {Keypair} + */ + return _createClass(Keypair, [{ + key: "xdrAccountId", + value: function xdrAccountId() { + return new _xdr["default"].AccountId.publicKeyTypeEd25519(this._publicKey); + } + }, { + key: "xdrPublicKey", + value: function xdrPublicKey() { + return new _xdr["default"].PublicKey.publicKeyTypeEd25519(this._publicKey); + } + + /** + * Creates a {@link xdr.MuxedAccount} object from the public key. + * + * You will get a different type of muxed account depending on whether or not + * you pass an ID. + * + * @param {string} [id] - stringified integer indicating the underlying muxed + * ID of the new account object + * + * @return {xdr.MuxedAccount} + */ + }, { + key: "xdrMuxedAccount", + value: function xdrMuxedAccount(id) { + if (typeof id !== 'undefined') { + if (typeof id !== 'string') { + throw new TypeError("expected string for ID, got ".concat(_typeof(id))); + } + return _xdr["default"].MuxedAccount.keyTypeMuxedEd25519(new _xdr["default"].MuxedAccountMed25519({ + id: _xdr["default"].Uint64.fromString(id), + ed25519: this._publicKey + })); + } + return new _xdr["default"].MuxedAccount.keyTypeEd25519(this._publicKey); + } + + /** + * Returns raw public key + * @returns {Buffer} + */ + }, { + key: "rawPublicKey", + value: function rawPublicKey() { + return this._publicKey; + } + }, { + key: "signatureHint", + value: function signatureHint() { + var a = this.xdrAccountId().toXDR(); + return a.slice(a.length - 4); + } + + /** + * Returns public key associated with this `Keypair` object. + * @returns {string} + */ + }, { + key: "publicKey", + value: function publicKey() { + return _strkey.StrKey.encodeEd25519PublicKey(this._publicKey); + } + + /** + * Returns secret key associated with this `Keypair` object + * @returns {string} + */ + }, { + key: "secret", + value: function secret() { + if (!this._secretSeed) { + throw new Error('no secret key available'); + } + if (this.type === 'ed25519') { + return _strkey.StrKey.encodeEd25519SecretSeed(this._secretSeed); + } + throw new Error('Invalid Keypair type'); + } + + /** + * Returns raw secret key. + * @returns {Buffer} + */ + }, { + key: "rawSecretKey", + value: function rawSecretKey() { + return this._secretSeed; + } + + /** + * Returns `true` if this `Keypair` object contains secret key and can sign. + * @returns {boolean} + */ + }, { + key: "canSign", + value: function canSign() { + return !!this._secretKey; + } + + /** + * Signs data. + * @param {Buffer} data Data to sign + * @returns {Buffer} + */ + }, { + key: "sign", + value: function sign(data) { + if (!this.canSign()) { + throw new Error('cannot sign: no secret key available'); + } + return (0, _signing.sign)(data, this._secretKey); + } + + /** + * Verifies if `signature` for `data` is valid. + * @param {Buffer} data Signed data + * @param {Buffer} signature Signature + * @returns {boolean} + */ + }, { + key: "verify", + value: function verify(data, signature) { + return (0, _signing.verify)(data, signature, this._publicKey); + } + + /** + * Returns the decorated signature (hint+sig) for arbitrary data. + * + * @param {Buffer} data arbitrary data to sign + * @return {xdr.DecoratedSignature} the raw signature structure which can be + * added directly to a transaction envelope + * + * @see TransactionBase.addDecoratedSignature + */ + }, { + key: "signDecorated", + value: function signDecorated(data) { + var signature = this.sign(data); + var hint = this.signatureHint(); + return new _xdr["default"].DecoratedSignature({ + hint: hint, + signature: signature + }); + } + + /** + * Returns the raw decorated signature (hint+sig) for a signed payload signer. + * + * The hint is defined as the last 4 bytes of the signer key XORed with last + * 4 bytes of the payload (zero-left-padded if necessary). + * + * @param {Buffer} data data to both sign and treat as the payload + * @return {xdr.DecoratedSignature} + * + * @see https://github.com/stellar/stellar-protocol/blob/master/core/cap-0040.md#signature-hint + * @see TransactionBase.addDecoratedSignature + */ + }, { + key: "signPayloadDecorated", + value: function signPayloadDecorated(data) { + var signature = this.sign(data); + var keyHint = this.signatureHint(); + var hint = Buffer.from(data.slice(-4)); + if (hint.length < 4) { + // append zeroes as needed + hint = Buffer.concat([hint, Buffer.alloc(4 - data.length, 0)]); + } + return new _xdr["default"].DecoratedSignature({ + hint: hint.map(function (_byte, i) { + return _byte ^ keyHint[i]; + }), + signature: signature + }); + } + }], [{ + key: "fromSecret", + value: function fromSecret(secret) { + var rawSecret = _strkey.StrKey.decodeEd25519SecretSeed(secret); + return this.fromRawEd25519Seed(rawSecret); + } + + /** + * Creates a new `Keypair` object from ed25519 secret key seed raw bytes. + * + * @param {Buffer} rawSeed Raw 32-byte ed25519 secret key seed + * @returns {Keypair} + */ + }, { + key: "fromRawEd25519Seed", + value: function fromRawEd25519Seed(rawSeed) { + return new this({ + type: 'ed25519', + secretKey: rawSeed + }); + } + + /** + * Returns `Keypair` object representing network master key. + * @param {string} networkPassphrase passphrase of the target stellar network (e.g. "Public Global Stellar Network ; September 2015"). + * @returns {Keypair} + */ + }, { + key: "master", + value: function master(networkPassphrase) { + if (!networkPassphrase) { + throw new Error('No network selected. Please pass a network argument, e.g. `Keypair.master(Networks.PUBLIC)`.'); + } + return this.fromRawEd25519Seed((0, _hashing.hash)(networkPassphrase)); + } + + /** + * Creates a new `Keypair` object from public key. + * @param {string} publicKey public key (ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`) + * @returns {Keypair} + */ + }, { + key: "fromPublicKey", + value: function fromPublicKey(publicKey) { + publicKey = _strkey.StrKey.decodeEd25519PublicKey(publicKey); + if (publicKey.length !== 32) { + throw new Error('Invalid Stellar public key'); + } + return new this({ + type: 'ed25519', + publicKey: publicKey + }); + } + + /** + * Create a random `Keypair` object. + * @returns {Keypair} + */ + }, { + key: "random", + value: function random() { + var secret = _tweetnacl["default"].randomBytes(32); + return this.fromRawEd25519Seed(secret); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/liquidity_pool_asset.js b/node_modules/@stellar/stellar-base/lib/liquidity_pool_asset.js new file mode 100644 index 00000000..ab2ad162 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/liquidity_pool_asset.js @@ -0,0 +1,125 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.LiquidityPoolAsset = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _asset = require("./asset"); +var _get_liquidity_pool_id = require("./get_liquidity_pool_id"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * LiquidityPoolAsset class represents a liquidity pool trustline change. + * + * @constructor + * @param {Asset} assetA – The first asset in the Pool, it must respect the rule assetA < assetB. See {@link Asset.compare} for more details on how assets are sorted. + * @param {Asset} assetB – The second asset in the Pool, it must respect the rule assetA < assetB. See {@link Asset.compare} for more details on how assets are sorted. + * @param {number} fee – The liquidity pool fee. For now the only fee supported is `30`. + */ +var LiquidityPoolAsset = exports.LiquidityPoolAsset = /*#__PURE__*/function () { + function LiquidityPoolAsset(assetA, assetB, fee) { + _classCallCheck(this, LiquidityPoolAsset); + if (!assetA || !(assetA instanceof _asset.Asset)) { + throw new Error('assetA is invalid'); + } + if (!assetB || !(assetB instanceof _asset.Asset)) { + throw new Error('assetB is invalid'); + } + if (_asset.Asset.compare(assetA, assetB) !== -1) { + throw new Error('Assets are not in lexicographic order'); + } + if (!fee || fee !== _get_liquidity_pool_id.LiquidityPoolFeeV18) { + throw new Error('fee is invalid'); + } + this.assetA = assetA; + this.assetB = assetB; + this.fee = fee; + } + + /** + * Returns a liquidity pool asset object from its XDR ChangeTrustAsset object + * representation. + * @param {xdr.ChangeTrustAsset} ctAssetXdr - The asset XDR object. + * @returns {LiquidityPoolAsset} + */ + return _createClass(LiquidityPoolAsset, [{ + key: "toXDRObject", + value: + /** + * Returns the `xdr.ChangeTrustAsset` object for this liquidity pool asset. + * + * Note: To convert from an {@link Asset `Asset`} to `xdr.ChangeTrustAsset` + * please refer to the + * {@link Asset.toChangeTrustXDRObject `Asset.toChangeTrustXDRObject`} method. + * + * @returns {xdr.ChangeTrustAsset} XDR ChangeTrustAsset object. + */ + function toXDRObject() { + var lpConstantProductParamsXdr = new _xdr["default"].LiquidityPoolConstantProductParameters({ + assetA: this.assetA.toXDRObject(), + assetB: this.assetB.toXDRObject(), + fee: this.fee + }); + var lpParamsXdr = new _xdr["default"].LiquidityPoolParameters('liquidityPoolConstantProduct', lpConstantProductParamsXdr); + return new _xdr["default"].ChangeTrustAsset('assetTypePoolShare', lpParamsXdr); + } + + /** + * @returns {LiquidityPoolParameters} Liquidity pool parameters. + */ + }, { + key: "getLiquidityPoolParameters", + value: function getLiquidityPoolParameters() { + return _objectSpread(_objectSpread({}, this), {}, { + assetA: this.assetA, + assetB: this.assetB, + fee: this.fee + }); + } + + /** + * @see [Assets concept](https://developers.stellar.org/docs/glossary/assets/) + * @returns {AssetType.liquidityPoolShares} asset type. Can only be `liquidity_pool_shares`. + */ + }, { + key: "getAssetType", + value: function getAssetType() { + return 'liquidity_pool_shares'; + } + + /** + * @param {LiquidityPoolAsset} other the LiquidityPoolAsset to compare + * @returns {boolean} `true` if this asset equals the given asset. + */ + }, { + key: "equals", + value: function equals(other) { + return this.assetA.equals(other.assetA) && this.assetB.equals(other.assetB) && this.fee === other.fee; + } + }, { + key: "toString", + value: function toString() { + var poolId = (0, _get_liquidity_pool_id.getLiquidityPoolId)('constant_product', this.getLiquidityPoolParameters()).toString('hex'); + return "liquidity_pool:".concat(poolId); + } + }], [{ + key: "fromOperation", + value: function fromOperation(ctAssetXdr) { + var assetType = ctAssetXdr["switch"](); + if (assetType === _xdr["default"].AssetType.assetTypePoolShare()) { + var liquidityPoolParameters = ctAssetXdr.liquidityPool().constantProduct(); + return new this(_asset.Asset.fromOperation(liquidityPoolParameters.assetA()), _asset.Asset.fromOperation(liquidityPoolParameters.assetB()), liquidityPoolParameters.fee()); + } + throw new Error("Invalid asset type: ".concat(assetType.name)); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/liquidity_pool_id.js b/node_modules/@stellar/stellar-base/lib/liquidity_pool_id.js new file mode 100644 index 00000000..ea22ddb1 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/liquidity_pool_id.js @@ -0,0 +1,100 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.LiquidityPoolId = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * LiquidityPoolId class represents the asset referenced by a trustline to a + * liquidity pool. + * + * @constructor + * @param {string} liquidityPoolId - The ID of the liquidity pool in string 'hex'. + */ +var LiquidityPoolId = exports.LiquidityPoolId = /*#__PURE__*/function () { + function LiquidityPoolId(liquidityPoolId) { + _classCallCheck(this, LiquidityPoolId); + if (!liquidityPoolId) { + throw new Error('liquidityPoolId cannot be empty'); + } + if (!/^[a-f0-9]{64}$/.test(liquidityPoolId)) { + throw new Error('Liquidity pool ID is not a valid hash'); + } + this.liquidityPoolId = liquidityPoolId; + } + + /** + * Returns a liquidity pool ID object from its xdr.TrustLineAsset representation. + * @param {xdr.TrustLineAsset} tlAssetXdr - The asset XDR object. + * @returns {LiquidityPoolId} + */ + return _createClass(LiquidityPoolId, [{ + key: "toXDRObject", + value: + /** + * Returns the `xdr.TrustLineAsset` object for this liquidity pool ID. + * + * Note: To convert from {@link Asset `Asset`} to `xdr.TrustLineAsset` please + * refer to the + * {@link Asset.toTrustLineXDRObject `Asset.toTrustLineXDRObject`} method. + * + * @returns {xdr.TrustLineAsset} XDR LiquidityPoolId object + */ + function toXDRObject() { + var xdrPoolId = _xdr["default"].PoolId.fromXDR(this.liquidityPoolId, 'hex'); + return new _xdr["default"].TrustLineAsset('assetTypePoolShare', xdrPoolId); + } + + /** + * @returns {string} Liquidity pool ID. + */ + }, { + key: "getLiquidityPoolId", + value: function getLiquidityPoolId() { + return String(this.liquidityPoolId); + } + + /** + * @see [Assets concept](https://developers.stellar.org/docs/glossary/assets/) + * @returns {AssetType.liquidityPoolShares} asset type. Can only be `liquidity_pool_shares`. + */ + }, { + key: "getAssetType", + value: function getAssetType() { + return 'liquidity_pool_shares'; + } + + /** + * @param {LiquidityPoolId} asset LiquidityPoolId to compare. + * @returns {boolean} `true` if this asset equals the given asset. + */ + }, { + key: "equals", + value: function equals(asset) { + return this.liquidityPoolId === asset.getLiquidityPoolId(); + } + }, { + key: "toString", + value: function toString() { + return "liquidity_pool:".concat(this.liquidityPoolId); + } + }], [{ + key: "fromOperation", + value: function fromOperation(tlAssetXdr) { + var assetType = tlAssetXdr["switch"](); + if (assetType === _xdr["default"].AssetType.assetTypePoolShare()) { + var liquidityPoolId = tlAssetXdr.liquidityPoolId().toString('hex'); + return new this(liquidityPoolId); + } + throw new Error("Invalid asset type: ".concat(assetType.name)); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/memo.js b/node_modules/@stellar/stellar-base/lib/memo.js new file mode 100644 index 00000000..473bb72d --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/memo.js @@ -0,0 +1,269 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.MemoText = exports.MemoReturn = exports.MemoNone = exports.MemoID = exports.MemoHash = exports.Memo = void 0; +var _jsXdr = require("@stellar/js-xdr"); +var _bignumber = _interopRequireDefault(require("./util/bignumber")); +var _xdr = _interopRequireDefault(require("./xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Type of {@link Memo}. + */ +var MemoNone = exports.MemoNone = 'none'; +/** + * Type of {@link Memo}. + */ +var MemoID = exports.MemoID = 'id'; +/** + * Type of {@link Memo}. + */ +var MemoText = exports.MemoText = 'text'; +/** + * Type of {@link Memo}. + */ +var MemoHash = exports.MemoHash = 'hash'; +/** + * Type of {@link Memo}. + */ +var MemoReturn = exports.MemoReturn = 'return'; + +/** + * `Memo` represents memos attached to transactions. + * + * @param {string} type - `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn` + * @param {*} value - `string` for `MemoID`, `MemoText`, buffer of hex string for `MemoHash` or `MemoReturn` + * @see [Transactions concept](https://developers.stellar.org/docs/glossary/transactions/) + * @class Memo + */ +var Memo = exports.Memo = /*#__PURE__*/function () { + function Memo(type) { + var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + _classCallCheck(this, Memo); + this._type = type; + this._value = value; + switch (this._type) { + case MemoNone: + break; + case MemoID: + Memo._validateIdValue(value); + break; + case MemoText: + Memo._validateTextValue(value); + break; + case MemoHash: + case MemoReturn: + Memo._validateHashValue(value); + // We want MemoHash and MemoReturn to have Buffer as a value + if (typeof value === 'string') { + this._value = Buffer.from(value, 'hex'); + } + break; + default: + throw new Error('Invalid memo type'); + } + } + + /** + * Contains memo type: `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn` + */ + return _createClass(Memo, [{ + key: "type", + get: function get() { + return this._type; + }, + set: function set(type) { + throw new Error('Memo is immutable'); + } + + /** + * Contains memo value: + * * `null` for `MemoNone`, + * * `string` for `MemoID`, + * * `Buffer` for `MemoText` after decoding using `fromXDRObject`, original value otherwise, + * * `Buffer` for `MemoHash`, `MemoReturn`. + */ + }, { + key: "value", + get: function get() { + switch (this._type) { + case MemoNone: + return null; + case MemoID: + case MemoText: + return this._value; + case MemoHash: + case MemoReturn: + return Buffer.from(this._value); + default: + throw new Error('Invalid memo type'); + } + }, + set: function set(value) { + throw new Error('Memo is immutable'); + } + }, { + key: "toXDRObject", + value: + /** + * Returns XDR memo object. + * @returns {xdr.Memo} + */ + function toXDRObject() { + switch (this._type) { + case MemoNone: + return _xdr["default"].Memo.memoNone(); + case MemoID: + return _xdr["default"].Memo.memoId(_jsXdr.UnsignedHyper.fromString(this._value)); + case MemoText: + return _xdr["default"].Memo.memoText(this._value); + case MemoHash: + return _xdr["default"].Memo.memoHash(this._value); + case MemoReturn: + return _xdr["default"].Memo.memoReturn(this._value); + default: + return null; + } + } + + /** + * Returns {@link Memo} from XDR memo object. + * @param {xdr.Memo} object XDR memo object + * @returns {Memo} + */ + }], [{ + key: "_validateIdValue", + value: function _validateIdValue(value) { + var error = new Error("Expects a int64 as a string. Got ".concat(value)); + if (typeof value !== 'string') { + throw error; + } + var number; + try { + number = new _bignumber["default"](value); + } catch (e) { + throw error; + } + + // Infinity + if (!number.isFinite()) { + throw error; + } + + // NaN + if (number.isNaN()) { + throw error; + } + } + }, { + key: "_validateTextValue", + value: function _validateTextValue(value) { + if (!_xdr["default"].Memo.armTypeForArm('text').isValid(value)) { + throw new Error('Expects string, array or buffer, max 28 bytes'); + } + } + }, { + key: "_validateHashValue", + value: function _validateHashValue(value) { + var error = new Error("Expects a 32 byte hash value or hex encoded string. Got ".concat(value)); + if (value === null || typeof value === 'undefined') { + throw error; + } + var valueBuffer; + if (typeof value === 'string') { + if (!/^[0-9A-Fa-f]{64}$/g.test(value)) { + throw error; + } + valueBuffer = Buffer.from(value, 'hex'); + } else if (Buffer.isBuffer(value)) { + valueBuffer = Buffer.from(value); + } else { + throw error; + } + if (!valueBuffer.length || valueBuffer.length !== 32) { + throw error; + } + } + + /** + * Returns an empty memo (`MemoNone`). + * @returns {Memo} + */ + }, { + key: "none", + value: function none() { + return new Memo(MemoNone); + } + + /** + * Creates and returns a `MemoText` memo. + * @param {string} text - memo text + * @returns {Memo} + */ + }, { + key: "text", + value: function text(_text) { + return new Memo(MemoText, _text); + } + + /** + * Creates and returns a `MemoID` memo. + * @param {string} id - 64-bit number represented as a string + * @returns {Memo} + */ + }, { + key: "id", + value: function id(_id) { + return new Memo(MemoID, _id); + } + + /** + * Creates and returns a `MemoHash` memo. + * @param {array|string} hash - 32 byte hash or hex encoded string + * @returns {Memo} + */ + }, { + key: "hash", + value: function hash(_hash) { + return new Memo(MemoHash, _hash); + } + + /** + * Creates and returns a `MemoReturn` memo. + * @param {array|string} hash - 32 byte hash or hex encoded string + * @returns {Memo} + */ + }, { + key: "return", + value: function _return(hash) { + return new Memo(MemoReturn, hash); + } + }, { + key: "fromXDRObject", + value: function fromXDRObject(object) { + switch (object.arm()) { + case 'id': + return Memo.id(object.value().toString()); + case 'text': + return Memo.text(object.value()); + case 'hash': + return Memo.hash(object.value()); + case 'retHash': + return Memo["return"](object.value()); + default: + break; + } + if (typeof object.value() === 'undefined') { + return Memo.none(); + } + throw new Error('Unknown type'); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/muxed_account.js b/node_modules/@stellar/stellar-base/lib/muxed_account.js new file mode 100644 index 00000000..4f02b660 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/muxed_account.js @@ -0,0 +1,158 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.MuxedAccount = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _account = require("./account"); +var _strkey = require("./strkey"); +var _decode_encode_muxed_account = require("./util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Represents a muxed account for transactions and operations. + * + * A muxed (or *multiplexed*) account (defined rigorously in + * [CAP-27](https://stellar.org/protocol/cap-27) and briefly in + * [SEP-23](https://stellar.org/protocol/sep-23)) is one that resolves a single + * Stellar `G...`` account to many different underlying IDs. + * + * For example, you may have a single Stellar address for accounting purposes: + * GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ + * + * Yet would like to use it for 4 different family members: + * 1: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAAGZFQ + * 2: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAALIWQ + * 3: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAAPYHQ + * 4: MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAAQLQQ + * + * This object makes it easy to create muxed accounts from regular accounts, + * duplicate them, get/set the underlying IDs, etc. without mucking around with + * the raw XDR. + * + * Because muxed accounts are purely an off-chain convention, they all share the + * sequence number tied to their underlying G... account. Thus, this object + * *requires* an {@link Account} instance to be passed in, so that muxed + * instances of an account can collectively modify the sequence number whenever + * a muxed account is used as the source of a @{link Transaction} with {@link + * TransactionBuilder}. + * + * @constructor + * + * @param {Account} account - the @{link Account} instance representing the + * underlying G... address + * @param {string} id - a stringified uint64 value that represents the + * ID of the muxed account + * + * @link https://developers.stellar.org/docs/glossary/muxed-accounts/ + */ +var MuxedAccount = exports.MuxedAccount = /*#__PURE__*/function () { + function MuxedAccount(baseAccount, id) { + _classCallCheck(this, MuxedAccount); + var accountId = baseAccount.accountId(); + if (!_strkey.StrKey.isValidEd25519PublicKey(accountId)) { + throw new Error('accountId is invalid'); + } + this.account = baseAccount; + this._muxedXdr = (0, _decode_encode_muxed_account.encodeMuxedAccount)(accountId, id); + this._mAddress = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(this._muxedXdr); + this._id = id; + } + + /** + * Parses an M-address into a MuxedAccount object. + * + * @param {string} mAddress - an M-address to transform + * @param {string} sequenceNum - the sequence number of the underlying {@link + * Account}, to use for the underlying base account (@link + * MuxedAccount.baseAccount). If you're using the SDK, you can use + * `server.loadAccount` to fetch this if you don't know it. + * + * @return {MuxedAccount} + */ + return _createClass(MuxedAccount, [{ + key: "baseAccount", + value: + /** + * @return {Account} the underlying account object shared among all muxed + * accounts with this Stellar address + */ + function baseAccount() { + return this.account; + } + + /** + * @return {string} the M-address representing this account's (G-address, ID) + */ + }, { + key: "accountId", + value: function accountId() { + return this._mAddress; + } + }, { + key: "id", + value: function id() { + return this._id; + } + }, { + key: "setId", + value: function setId(id) { + if (typeof id !== 'string') { + throw new Error('id should be a string representing a number (uint64)'); + } + this._muxedXdr.med25519().id(_xdr["default"].Uint64.fromString(id)); + this._mAddress = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(this._muxedXdr); + this._id = id; + return this; + } + + /** + * Accesses the underlying account's sequence number. + * @return {string} strigified sequence number for the underlying account + */ + }, { + key: "sequenceNumber", + value: function sequenceNumber() { + return this.account.sequenceNumber(); + } + + /** + * Increments the underlying account's sequence number by one. + * @return {void} + */ + }, { + key: "incrementSequenceNumber", + value: function incrementSequenceNumber() { + return this.account.incrementSequenceNumber(); + } + + /** + * @return {xdr.MuxedAccount} the XDR object representing this muxed account's + * G-address and uint64 ID + */ + }, { + key: "toXDRObject", + value: function toXDRObject() { + return this._muxedXdr; + } + }, { + key: "equals", + value: function equals(otherMuxedAccount) { + return this.accountId() === otherMuxedAccount.accountId(); + } + }], [{ + key: "fromAddress", + value: function fromAddress(mAddress, sequenceNum) { + var muxedAccount = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(mAddress); + var gAddress = (0, _decode_encode_muxed_account.extractBaseAddress)(mAddress); + var id = muxedAccount.med25519().id().toString(); + return new MuxedAccount(new _account.Account(gAddress, sequenceNum), id); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/network.js b/node_modules/@stellar/stellar-base/lib/network.js new file mode 100644 index 00000000..0bd81df7 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/network.js @@ -0,0 +1,22 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Networks = void 0; +/** + * Contains passphrases for common networks: + * * `Networks.PUBLIC`: `Public Global Stellar Network ; September 2015` + * * `Networks.TESTNET`: `Test SDF Network ; September 2015` + * * `Networks.FUTURENET`: `Test SDF Future Network ; October 2022` + * * `Networks.STANDALONE`: `Standalone Network ; February 2017` + * + * @type {{PUBLIC: string, TESTNET: string, FUTURENET: string, STANDALONE: string }} + */ +var Networks = exports.Networks = { + PUBLIC: 'Public Global Stellar Network ; September 2015', + TESTNET: 'Test SDF Network ; September 2015', + FUTURENET: 'Test SDF Future Network ; October 2022', + SANDBOX: 'Local Sandbox Stellar Network ; September 2022', + STANDALONE: 'Standalone Network ; February 2017' +}; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/index.js b/node_modules/@stellar/stellar-base/lib/numbers/index.js new file mode 100644 index 00000000..a797b7cc --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/index.js @@ -0,0 +1,85 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Int128", { + enumerable: true, + get: function get() { + return _int.Int128; + } +}); +Object.defineProperty(exports, "Int256", { + enumerable: true, + get: function get() { + return _int2.Int256; + } +}); +Object.defineProperty(exports, "ScInt", { + enumerable: true, + get: function get() { + return _sc_int.ScInt; + } +}); +Object.defineProperty(exports, "Uint128", { + enumerable: true, + get: function get() { + return _uint.Uint128; + } +}); +Object.defineProperty(exports, "Uint256", { + enumerable: true, + get: function get() { + return _uint2.Uint256; + } +}); +Object.defineProperty(exports, "XdrLargeInt", { + enumerable: true, + get: function get() { + return _xdr_large_int.XdrLargeInt; + } +}); +exports.scValToBigInt = scValToBigInt; +var _xdr_large_int = require("./xdr_large_int"); +var _uint = require("./uint128"); +var _uint2 = require("./uint256"); +var _int = require("./int128"); +var _int2 = require("./int256"); +var _sc_int = require("./sc_int"); +/** + * Transforms an opaque {@link xdr.ScVal} into a native bigint, if possible. + * + * If you then want to use this in the abstractions provided by this module, + * you can pass it to the constructor of {@link XdrLargeInt}. + * + * @example + * let scv = contract.call("add", x, y); // assume it returns an xdr.ScVal + * let bigi = scValToBigInt(scv); + * + * new ScInt(bigi); // if you don't care about types, and + * new XdrLargeInt('i128', bigi); // if you do + * + * @param {xdr.ScVal} scv - the raw XDR value to parse into an integer + * @returns {bigint} the native value of this input value + * + * @throws {TypeError} if the `scv` input value doesn't represent an integer + */ +function scValToBigInt(scv) { + var scIntType = _xdr_large_int.XdrLargeInt.getType(scv["switch"]().name); + switch (scv["switch"]().name) { + case 'scvU32': + case 'scvI32': + return BigInt(scv.value()); + case 'scvU64': + case 'scvI64': + return new _xdr_large_int.XdrLargeInt(scIntType, scv.value()).toBigInt(); + case 'scvU128': + case 'scvI128': + return new _xdr_large_int.XdrLargeInt(scIntType, [scv.value().lo(), scv.value().hi()]).toBigInt(); + case 'scvU256': + case 'scvI256': + return new _xdr_large_int.XdrLargeInt(scIntType, [scv.value().loLo(), scv.value().loHi(), scv.value().hiLo(), scv.value().hiHi()]).toBigInt(); + default: + throw TypeError("expected integer type, got ".concat(scv["switch"]())); + } +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/int128.js b/node_modules/@stellar/stellar-base/lib/numbers/int128.js new file mode 100644 index 00000000..5abe97ec --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/int128.js @@ -0,0 +1,48 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Int128 = void 0; +var _jsXdr = require("@stellar/js-xdr"); +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var Int128 = exports.Int128 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct a signed 128-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Int128() { + _classCallCheck(this, Int128); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return _callSuper(this, Int128, [args]); + } + _inherits(Int128, _LargeInt); + return _createClass(Int128, [{ + key: "unsigned", + get: function get() { + return false; + } + }, { + key: "size", + get: function get() { + return 128; + } + }]); +}(_jsXdr.LargeInt); +Int128.defineIntBoundaries(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/int256.js b/node_modules/@stellar/stellar-base/lib/numbers/int256.js new file mode 100644 index 00000000..8407671b --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/int256.js @@ -0,0 +1,48 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Int256 = void 0; +var _jsXdr = require("@stellar/js-xdr"); +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var Int256 = exports.Int256 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct a signed 256-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Int256() { + _classCallCheck(this, Int256); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return _callSuper(this, Int256, [args]); + } + _inherits(Int256, _LargeInt); + return _createClass(Int256, [{ + key: "unsigned", + get: function get() { + return false; + } + }, { + key: "size", + get: function get() { + return 256; + } + }]); +}(_jsXdr.LargeInt); +Int256.defineIntBoundaries(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/sc_int.js b/node_modules/@stellar/stellar-base/lib/numbers/sc_int.js new file mode 100644 index 00000000..fc33f328 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/sc_int.js @@ -0,0 +1,131 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ScInt = void 0; +var _xdr_large_int = require("./xdr_large_int"); +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Provides an easier way to manipulate large numbers for Stellar operations. + * + * You can instantiate this "**s**mart **c**ontract integer" value either from + * bigints, strings, or numbers (whole numbers, or this will throw). + * + * If you need to create a native BigInt from a list of integer "parts" (for + * example, you have a series of encoded 32-bit integers that represent a larger + * value), you can use the lower level abstraction {@link XdrLargeInt}. For + * example, you could do `new XdrLargeInt('u128', bytes...).toBigInt()`. + * + * @example + * import { xdr, ScInt, scValToBigInt } from "@stellar/stellar-base"; + * + * // You have an ScVal from a contract and want to parse it into JS native. + * const value = xdr.ScVal.fromXDR(someXdr, "base64"); + * const bigi = scValToBigInt(value); // grab it as a BigInt + * let sci = new ScInt(bigi); + * + * sci.toNumber(); // gives native JS type (w/ size check) + * sci.toBigInt(); // gives the native BigInt value + * sci.toU64(); // gives ScValType-specific XDR constructs (with size checks) + * + * // You have a number and want to shove it into a contract. + * sci = ScInt(0xdeadcafebabe); + * sci.toBigInt() // returns 244838016400062n + * sci.toNumber() // throws: too large + * + * // Pass any to e.g. a Contract.call(), conversion happens automatically + * // regardless of the initial type. + * const scValU128 = sci.toU128(); + * const scValI256 = sci.toI256(); + * const scValU64 = sci.toU64(); + * + * // Lots of ways to initialize: + * ScInt("123456789123456789") + * ScInt(123456789123456789n); + * ScInt(1n << 140n); + * ScInt(-42); + * ScInt(scValToBigInt(scValU128)); // from above + * + * // If you know the type ahead of time (accessing `.raw` is faster than + * // conversions), you can specify the type directly (otherwise, it's + * // interpreted from the numbers you pass in): + * const i = ScInt(123456789n, { type: "u256" }); + * + * // For example, you can use the underlying `sdk.U256` and convert it to an + * // `xdr.ScVal` directly like so: + * const scv = new xdr.ScVal.scvU256(i.raw); + * + * // Or reinterpret it as a different type (size permitting): + * const scv = i.toI64(); + * + * @param {number|bigint|string} value - a single, integer-like value which will + * be interpreted in the smallest appropriate XDR type supported by Stellar + * (64, 128, or 256 bit integer values). signed values are supported, though + * they are sanity-checked against `opts.type`. if you need 32-bit values, + * you can construct them directly without needing this wrapper, e.g. + * `xdr.ScVal.scvU32(1234)`. + * + * @param {object} [opts] - an optional object controlling optional parameters + * @param {string} [opts.type] - force a specific data type. the type choices + * are: 'i64', 'u64', 'i128', 'u128', 'i256', and 'u256' (default: the + * smallest one that fits the `value`) + * + * @throws {RangeError} if the `value` is invalid (e.g. floating point), too + * large (i.e. exceeds a 256-bit value), or doesn't fit in the `opts.type` + * @throws {TypeError} on missing parameters, or if the "signedness" of `opts` + * doesn't match input `value`, e.g. passing `{type: 'u64'}` yet passing -1n + * @throws {SyntaxError} if a string `value` can't be parsed as a big integer + */ +var ScInt = exports.ScInt = /*#__PURE__*/function (_XdrLargeInt) { + function ScInt(value, opts) { + var _opts$type; + _classCallCheck(this, ScInt); + var signed = value < 0; + var type = (_opts$type = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type !== void 0 ? _opts$type : ''; + if (type.startsWith('u') && signed) { + throw TypeError("specified type ".concat(opts.type, " yet negative (").concat(value, ")")); + } + + // If unspecified, we make a best guess at the type based on the bit length + // of the value, treating 64 as a minimum and 256 as a maximum. + if (type === '') { + type = signed ? 'i' : 'u'; + var bitlen = nearestBigIntSize(value); + switch (bitlen) { + case 64: + case 128: + case 256: + type += bitlen.toString(); + break; + default: + throw RangeError("expected 64/128/256 bits for input (".concat(value, "), got ").concat(bitlen)); + } + } + return _callSuper(this, ScInt, [type, value]); + } + _inherits(ScInt, _XdrLargeInt); + return _createClass(ScInt); +}(_xdr_large_int.XdrLargeInt); +function nearestBigIntSize(bigI) { + var _find; + // Note: Even though BigInt.toString(2) includes the negative sign for + // negative values (???), the following is still accurate, because the + // negative sign would be represented by a sign bit. + var bitlen = bigI.toString(2).length; + return (_find = [64, 128, 256].find(function (len) { + return bitlen <= len; + })) !== null && _find !== void 0 ? _find : bitlen; +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/uint128.js b/node_modules/@stellar/stellar-base/lib/numbers/uint128.js new file mode 100644 index 00000000..906c06c1 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/uint128.js @@ -0,0 +1,48 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Uint128 = void 0; +var _jsXdr = require("@stellar/js-xdr"); +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var Uint128 = exports.Uint128 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct an unsigned 128-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Uint128() { + _classCallCheck(this, Uint128); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return _callSuper(this, Uint128, [args]); + } + _inherits(Uint128, _LargeInt); + return _createClass(Uint128, [{ + key: "unsigned", + get: function get() { + return true; + } + }, { + key: "size", + get: function get() { + return 128; + } + }]); +}(_jsXdr.LargeInt); +Uint128.defineIntBoundaries(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/uint256.js b/node_modules/@stellar/stellar-base/lib/numbers/uint256.js new file mode 100644 index 00000000..c037860f --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/uint256.js @@ -0,0 +1,48 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Uint256 = void 0; +var _jsXdr = require("@stellar/js-xdr"); +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var Uint256 = exports.Uint256 = /*#__PURE__*/function (_LargeInt) { + /** + * Construct an unsigned 256-bit integer that can be XDR-encoded. + * + * @param {Array} args - one or more slices to encode + * in big-endian format (i.e. earlier elements are higher bits) + */ + function Uint256() { + _classCallCheck(this, Uint256); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return _callSuper(this, Uint256, [args]); + } + _inherits(Uint256, _LargeInt); + return _createClass(Uint256, [{ + key: "unsigned", + get: function get() { + return true; + } + }, { + key: "size", + get: function get() { + return 256; + } + }]); +}(_jsXdr.LargeInt); +Uint256.defineIntBoundaries(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/numbers/xdr_large_int.js b/node_modules/@stellar/stellar-base/lib/numbers/xdr_large_int.js new file mode 100644 index 00000000..e929c49e --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/numbers/xdr_large_int.js @@ -0,0 +1,266 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.XdrLargeInt = void 0; +var _jsXdr = require("@stellar/js-xdr"); +var _uint = require("./uint128"); +var _uint2 = require("./uint256"); +var _int = require("./int128"); +var _int2 = require("./int256"); +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint no-bitwise: ["error", {"allow": [">>"]}] */ +/** + * A wrapper class to represent large XDR-encodable integers. + * + * This operates at a lower level than {@link ScInt} by forcing you to specify + * the type / width / size in bits of the integer you're targeting, regardless + * of the input value(s) you provide. + * + * @param {string} type - force a specific data type. the type choices are: + * 'i64', 'u64', 'i128', 'u128', 'i256', and 'u256' (default: the smallest + * one that fits the `value`) (see {@link XdrLargeInt.isType}) + * @param {number|bigint|string|Array} values a list of + * integer-like values interpreted in big-endian order + */ +var XdrLargeInt = exports.XdrLargeInt = /*#__PURE__*/function () { + function XdrLargeInt(type, values) { + _classCallCheck(this, XdrLargeInt); + /** @type {xdr.LargeInt} */ + _defineProperty(this, "int", void 0); + // child class of a jsXdr.LargeInt + /** @type {string} */ + _defineProperty(this, "type", void 0); + if (!(values instanceof Array)) { + values = [values]; + } + + // normalize values to one type + values = values.map(function (i) { + // micro-optimization to no-op on the likeliest input value: + if (typeof i === 'bigint') { + return i; + } + if (i instanceof XdrLargeInt) { + return i.toBigInt(); + } + return BigInt(i); + }); + switch (type) { + case 'i64': + this["int"] = new _jsXdr.Hyper(values); + break; + case 'i128': + this["int"] = new _int.Int128(values); + break; + case 'i256': + this["int"] = new _int2.Int256(values); + break; + case 'u64': + this["int"] = new _jsXdr.UnsignedHyper(values); + break; + case 'u128': + this["int"] = new _uint.Uint128(values); + break; + case 'u256': + this["int"] = new _uint2.Uint256(values); + break; + default: + throw TypeError("invalid type: ".concat(type)); + } + this.type = type; + } + + /** + * @returns {number} + * @throws {RangeError} if the value can't fit into a Number + */ + return _createClass(XdrLargeInt, [{ + key: "toNumber", + value: function toNumber() { + var bi = this["int"].toBigInt(); + if (bi > Number.MAX_SAFE_INTEGER || bi < Number.MIN_SAFE_INTEGER) { + throw RangeError("value ".concat(bi, " not in range for Number ") + "[".concat(Number.MAX_SAFE_INTEGER, ", ").concat(Number.MIN_SAFE_INTEGER, "]")); + } + return Number(bi); + } + + /** @returns {bigint} */ + }, { + key: "toBigInt", + value: function toBigInt() { + return this["int"].toBigInt(); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = I64` */ + }, { + key: "toI64", + value: function toI64() { + this._sizeCheck(64); + var v = this.toBigInt(); + if (BigInt.asIntN(64, v) !== v) { + throw RangeError("value too large for i64: ".concat(v)); + } + return _xdr["default"].ScVal.scvI64(new _xdr["default"].Int64(v)); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = U64` */ + }, { + key: "toU64", + value: function toU64() { + this._sizeCheck(64); + return _xdr["default"].ScVal.scvU64(new _xdr["default"].Uint64(BigInt.asUintN(64, this.toBigInt())) // reiterpret as unsigned + ); + } + + /** + * @returns {xdr.ScVal} the integer encoded with `ScValType = I128` + * @throws {RangeError} if the value cannot fit in 128 bits + */ + }, { + key: "toI128", + value: function toI128() { + this._sizeCheck(128); + var v = this["int"].toBigInt(); + var hi64 = BigInt.asIntN(64, v >> 64n); // encode top 64 w/ sign bit + var lo64 = BigInt.asUintN(64, v); // grab btm 64, encode sign + + return _xdr["default"].ScVal.scvI128(new _xdr["default"].Int128Parts({ + hi: new _xdr["default"].Int64(hi64), + lo: new _xdr["default"].Uint64(lo64) + })); + } + + /** + * @returns {xdr.ScVal} the integer encoded with `ScValType = U128` + * @throws {RangeError} if the value cannot fit in 128 bits + */ + }, { + key: "toU128", + value: function toU128() { + this._sizeCheck(128); + var v = this["int"].toBigInt(); + return _xdr["default"].ScVal.scvU128(new _xdr["default"].UInt128Parts({ + hi: new _xdr["default"].Uint64(BigInt.asUintN(64, v >> 64n)), + lo: new _xdr["default"].Uint64(BigInt.asUintN(64, v)) + })); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = I256` */ + }, { + key: "toI256", + value: function toI256() { + var v = this["int"].toBigInt(); + var hiHi64 = BigInt.asIntN(64, v >> 192n); // keep sign bit + var hiLo64 = BigInt.asUintN(64, v >> 128n); + var loHi64 = BigInt.asUintN(64, v >> 64n); + var loLo64 = BigInt.asUintN(64, v); + return _xdr["default"].ScVal.scvI256(new _xdr["default"].Int256Parts({ + hiHi: new _xdr["default"].Int64(hiHi64), + hiLo: new _xdr["default"].Uint64(hiLo64), + loHi: new _xdr["default"].Uint64(loHi64), + loLo: new _xdr["default"].Uint64(loLo64) + })); + } + + /** @returns {xdr.ScVal} the integer encoded with `ScValType = U256` */ + }, { + key: "toU256", + value: function toU256() { + var v = this["int"].toBigInt(); + var hiHi64 = BigInt.asUintN(64, v >> 192n); // encode sign bit + var hiLo64 = BigInt.asUintN(64, v >> 128n); + var loHi64 = BigInt.asUintN(64, v >> 64n); + var loLo64 = BigInt.asUintN(64, v); + return _xdr["default"].ScVal.scvU256(new _xdr["default"].UInt256Parts({ + hiHi: new _xdr["default"].Uint64(hiHi64), + hiLo: new _xdr["default"].Uint64(hiLo64), + loHi: new _xdr["default"].Uint64(loHi64), + loLo: new _xdr["default"].Uint64(loLo64) + })); + } + + /** @returns {xdr.ScVal} the smallest interpretation of the stored value */ + }, { + key: "toScVal", + value: function toScVal() { + switch (this.type) { + case 'i64': + return this.toI64(); + case 'i128': + return this.toI128(); + case 'i256': + return this.toI256(); + case 'u64': + return this.toU64(); + case 'u128': + return this.toU128(); + case 'u256': + return this.toU256(); + default: + throw TypeError("invalid type: ".concat(this.type)); + } + } + }, { + key: "valueOf", + value: function valueOf() { + return this["int"].valueOf(); + } + }, { + key: "toString", + value: function toString() { + return this["int"].toString(); + } + }, { + key: "toJSON", + value: function toJSON() { + return { + value: this.toBigInt().toString(), + type: this.type + }; + } + }, { + key: "_sizeCheck", + value: function _sizeCheck(bits) { + if (this["int"].size > bits) { + throw RangeError("value too large for ".concat(bits, " bits (").concat(this.type, ")")); + } + } + }], [{ + key: "isType", + value: function isType(type) { + switch (type) { + case 'i64': + case 'i128': + case 'i256': + case 'u64': + case 'u128': + case 'u256': + return true; + default: + return false; + } + } + + /** + * Convert the raw `ScValType` string (e.g. 'scvI128', generated by the XDR) + * to a type description for {@link XdrLargeInt} construction (e.g. 'i128') + * + * @param {string} scvType the `xdr.ScValType` as a string + * @returns {string} a suitable equivalent type to construct this object + */ + }, { + key: "getType", + value: function getType(scvType) { + return scvType.slice(3).toLowerCase(); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operation.js b/node_modules/@stellar/stellar-base/lib/operation.js new file mode 100644 index 00000000..17ea8620 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operation.js @@ -0,0 +1,719 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Operation = exports.AuthRevocableFlag = exports.AuthRequiredFlag = exports.AuthImmutableFlag = exports.AuthClawbackEnabledFlag = void 0; +var _jsXdr = require("@stellar/js-xdr"); +var _bignumber = _interopRequireDefault(require("./util/bignumber")); +var _util = require("./util/util"); +var _continued_fraction = require("./util/continued_fraction"); +var _asset = require("./asset"); +var _liquidity_pool_asset = require("./liquidity_pool_asset"); +var _claimant = require("./claimant"); +var _strkey = require("./strkey"); +var _liquidity_pool_id = require("./liquidity_pool_id"); +var _xdr = _interopRequireDefault(require("./xdr")); +var ops = _interopRequireWildcard(require("./operations")); +var _decode_encode_muxed_account = require("./util/decode_encode_muxed_account"); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable no-bitwise */ +var ONE = 10000000; +var MAX_INT64 = '9223372036854775807'; + +/** + * When set using `{@link Operation.setOptions}` option, requires the issuing + * account to give other accounts permission before they can hold the issuing + * account’s credit. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthRequiredFlag = exports.AuthRequiredFlag = 1 << 0; +/** + * When set using `{@link Operation.setOptions}` option, allows the issuing + * account to revoke its credit held by other accounts. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthRevocableFlag = exports.AuthRevocableFlag = 1 << 1; +/** + * When set using `{@link Operation.setOptions}` option, then none of the + * authorization flags can be set and the account can never be deleted. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthImmutableFlag = exports.AuthImmutableFlag = 1 << 2; + +/** + * When set using `{@link Operation.setOptions}` option, then any trustlines + * created by this account can have a ClawbackOp operation submitted for the + * corresponding asset. + * + * @constant + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +var AuthClawbackEnabledFlag = exports.AuthClawbackEnabledFlag = 1 << 3; + +/** + * `Operation` class represents + * [operations](https://developers.stellar.org/docs/glossary/operations/) in + * Stellar network. + * + * Use one of static methods to create operations: + * * `{@link Operation.createAccount}` + * * `{@link Operation.payment}` + * * `{@link Operation.pathPaymentStrictReceive}` + * * `{@link Operation.pathPaymentStrictSend}` + * * `{@link Operation.manageSellOffer}` + * * `{@link Operation.manageBuyOffer}` + * * `{@link Operation.createPassiveSellOffer}` + * * `{@link Operation.setOptions}` + * * `{@link Operation.changeTrust}` + * * `{@link Operation.allowTrust}` + * * `{@link Operation.accountMerge}` + * * `{@link Operation.inflation}` + * * `{@link Operation.manageData}` + * * `{@link Operation.bumpSequence}` + * * `{@link Operation.createClaimableBalance}` + * * `{@link Operation.claimClaimableBalance}` + * * `{@link Operation.beginSponsoringFutureReserves}` + * * `{@link Operation.endSponsoringFutureReserves}` + * * `{@link Operation.revokeAccountSponsorship}` + * * `{@link Operation.revokeTrustlineSponsorship}` + * * `{@link Operation.revokeOfferSponsorship}` + * * `{@link Operation.revokeDataSponsorship}` + * * `{@link Operation.revokeClaimableBalanceSponsorship}` + * * `{@link Operation.revokeLiquidityPoolSponsorship}` + * * `{@link Operation.revokeSignerSponsorship}` + * * `{@link Operation.clawback}` + * * `{@link Operation.clawbackClaimableBalance}` + * * `{@link Operation.setTrustLineFlags}` + * * `{@link Operation.liquidityPoolDeposit}` + * * `{@link Operation.liquidityPoolWithdraw}` + * * `{@link Operation.invokeHostFunction}`, which has the following additional + * "pseudo-operations" that make building host functions easier: + * - `{@link Operation.createStellarAssetContract}` + * - `{@link Operation.invokeContractFunction}` + * - `{@link Operation.createCustomContract}` + * - `{@link Operation.uploadContractWasm}` + * * `{@link Operation.extendFootprintTtlOp}` + * * `{@link Operation.restoreFootprint}` + * + * @class Operation + */ +var Operation = exports.Operation = /*#__PURE__*/function () { + function Operation() { + _classCallCheck(this, Operation); + } + return _createClass(Operation, null, [{ + key: "setSourceAccount", + value: function setSourceAccount(opAttributes, opts) { + if (opts.source) { + try { + opAttributes.sourceAccount = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(opts.source); + } catch (e) { + throw new Error('Source address is invalid'); + } + } + } + + /** + * Deconstructs the raw XDR operation object into the structured object that + * was used to create the operation (i.e. the `opts` parameter to most ops). + * + * @param {xdr.Operation} operation - An XDR Operation. + * @return {Operation} + */ + }, { + key: "fromXDRObject", + value: function fromXDRObject(operation) { + var result = {}; + if (operation.sourceAccount()) { + result.source = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(operation.sourceAccount()); + } + var attrs = operation.body().value(); + var operationName = operation.body()["switch"]().name; + switch (operationName) { + case 'createAccount': + { + result.type = 'createAccount'; + result.destination = accountIdtoAddress(attrs.destination()); + result.startingBalance = this._fromXDRAmount(attrs.startingBalance()); + break; + } + case 'payment': + { + result.type = 'payment'; + result.destination = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(attrs.destination()); + result.asset = _asset.Asset.fromOperation(attrs.asset()); + result.amount = this._fromXDRAmount(attrs.amount()); + break; + } + case 'pathPaymentStrictReceive': + { + result.type = 'pathPaymentStrictReceive'; + result.sendAsset = _asset.Asset.fromOperation(attrs.sendAsset()); + result.sendMax = this._fromXDRAmount(attrs.sendMax()); + result.destination = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(attrs.destination()); + result.destAsset = _asset.Asset.fromOperation(attrs.destAsset()); + result.destAmount = this._fromXDRAmount(attrs.destAmount()); + result.path = []; + var path = attrs.path(); + + // note that Object.values isn't supported by node 6! + Object.keys(path).forEach(function (pathKey) { + result.path.push(_asset.Asset.fromOperation(path[pathKey])); + }); + break; + } + case 'pathPaymentStrictSend': + { + result.type = 'pathPaymentStrictSend'; + result.sendAsset = _asset.Asset.fromOperation(attrs.sendAsset()); + result.sendAmount = this._fromXDRAmount(attrs.sendAmount()); + result.destination = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(attrs.destination()); + result.destAsset = _asset.Asset.fromOperation(attrs.destAsset()); + result.destMin = this._fromXDRAmount(attrs.destMin()); + result.path = []; + var _path = attrs.path(); + + // note that Object.values isn't supported by node 6! + Object.keys(_path).forEach(function (pathKey) { + result.path.push(_asset.Asset.fromOperation(_path[pathKey])); + }); + break; + } + case 'changeTrust': + { + result.type = 'changeTrust'; + switch (attrs.line()["switch"]()) { + case _xdr["default"].AssetType.assetTypePoolShare(): + result.line = _liquidity_pool_asset.LiquidityPoolAsset.fromOperation(attrs.line()); + break; + default: + result.line = _asset.Asset.fromOperation(attrs.line()); + break; + } + result.limit = this._fromXDRAmount(attrs.limit()); + break; + } + case 'allowTrust': + { + result.type = 'allowTrust'; + result.trustor = accountIdtoAddress(attrs.trustor()); + result.assetCode = attrs.asset().value().toString(); + result.assetCode = (0, _util.trimEnd)(result.assetCode, '\0'); + result.authorize = attrs.authorize(); + break; + } + case 'setOptions': + { + result.type = 'setOptions'; + if (attrs.inflationDest()) { + result.inflationDest = accountIdtoAddress(attrs.inflationDest()); + } + result.clearFlags = attrs.clearFlags(); + result.setFlags = attrs.setFlags(); + result.masterWeight = attrs.masterWeight(); + result.lowThreshold = attrs.lowThreshold(); + result.medThreshold = attrs.medThreshold(); + result.highThreshold = attrs.highThreshold(); + // home_domain is checked by iscntrl in stellar-core + result.homeDomain = attrs.homeDomain() !== undefined ? attrs.homeDomain().toString('ascii') : undefined; + if (attrs.signer()) { + var signer = {}; + var arm = attrs.signer().key().arm(); + if (arm === 'ed25519') { + signer.ed25519PublicKey = accountIdtoAddress(attrs.signer().key()); + } else if (arm === 'preAuthTx') { + signer.preAuthTx = attrs.signer().key().preAuthTx(); + } else if (arm === 'hashX') { + signer.sha256Hash = attrs.signer().key().hashX(); + } else if (arm === 'ed25519SignedPayload') { + var signedPayload = attrs.signer().key().ed25519SignedPayload(); + signer.ed25519SignedPayload = _strkey.StrKey.encodeSignedPayload(signedPayload.toXDR()); + } + signer.weight = attrs.signer().weight(); + result.signer = signer; + } + break; + } + // the next case intentionally falls through! + case 'manageOffer': + case 'manageSellOffer': + { + result.type = 'manageSellOffer'; + result.selling = _asset.Asset.fromOperation(attrs.selling()); + result.buying = _asset.Asset.fromOperation(attrs.buying()); + result.amount = this._fromXDRAmount(attrs.amount()); + result.price = this._fromXDRPrice(attrs.price()); + result.offerId = attrs.offerId().toString(); + break; + } + case 'manageBuyOffer': + { + result.type = 'manageBuyOffer'; + result.selling = _asset.Asset.fromOperation(attrs.selling()); + result.buying = _asset.Asset.fromOperation(attrs.buying()); + result.buyAmount = this._fromXDRAmount(attrs.buyAmount()); + result.price = this._fromXDRPrice(attrs.price()); + result.offerId = attrs.offerId().toString(); + break; + } + // the next case intentionally falls through! + case 'createPassiveOffer': + case 'createPassiveSellOffer': + { + result.type = 'createPassiveSellOffer'; + result.selling = _asset.Asset.fromOperation(attrs.selling()); + result.buying = _asset.Asset.fromOperation(attrs.buying()); + result.amount = this._fromXDRAmount(attrs.amount()); + result.price = this._fromXDRPrice(attrs.price()); + break; + } + case 'accountMerge': + { + result.type = 'accountMerge'; + result.destination = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(attrs); + break; + } + case 'manageData': + { + result.type = 'manageData'; + // manage_data.name is checked by iscntrl in stellar-core + result.name = attrs.dataName().toString('ascii'); + result.value = attrs.dataValue(); + break; + } + case 'inflation': + { + result.type = 'inflation'; + break; + } + case 'bumpSequence': + { + result.type = 'bumpSequence'; + result.bumpTo = attrs.bumpTo().toString(); + break; + } + case 'createClaimableBalance': + { + result.type = 'createClaimableBalance'; + result.asset = _asset.Asset.fromOperation(attrs.asset()); + result.amount = this._fromXDRAmount(attrs.amount()); + result.claimants = []; + attrs.claimants().forEach(function (claimant) { + result.claimants.push(_claimant.Claimant.fromXDR(claimant)); + }); + break; + } + case 'claimClaimableBalance': + { + result.type = 'claimClaimableBalance'; + result.balanceId = attrs.toXDR('hex'); + break; + } + case 'beginSponsoringFutureReserves': + { + result.type = 'beginSponsoringFutureReserves'; + result.sponsoredId = accountIdtoAddress(attrs.sponsoredId()); + break; + } + case 'endSponsoringFutureReserves': + { + result.type = 'endSponsoringFutureReserves'; + break; + } + case 'revokeSponsorship': + { + extractRevokeSponshipDetails(attrs, result); + break; + } + case 'clawback': + { + result.type = 'clawback'; + result.amount = this._fromXDRAmount(attrs.amount()); + result.from = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(attrs.from()); + result.asset = _asset.Asset.fromOperation(attrs.asset()); + break; + } + case 'clawbackClaimableBalance': + { + result.type = 'clawbackClaimableBalance'; + result.balanceId = attrs.toXDR('hex'); + break; + } + case 'setTrustLineFlags': + { + result.type = 'setTrustLineFlags'; + result.asset = _asset.Asset.fromOperation(attrs.asset()); + result.trustor = accountIdtoAddress(attrs.trustor()); + + // Convert from the integer-bitwised flag into a sensible object that + // indicates true/false for each flag that's on/off. + var clears = attrs.clearFlags(); + var sets = attrs.setFlags(); + var mapping = { + authorized: _xdr["default"].TrustLineFlags.authorizedFlag(), + authorizedToMaintainLiabilities: _xdr["default"].TrustLineFlags.authorizedToMaintainLiabilitiesFlag(), + clawbackEnabled: _xdr["default"].TrustLineFlags.trustlineClawbackEnabledFlag() + }; + var getFlagValue = function getFlagValue(key) { + var bit = mapping[key].value; + if (sets & bit) { + return true; + } + if (clears & bit) { + return false; + } + return undefined; + }; + result.flags = {}; + Object.keys(mapping).forEach(function (flagName) { + result.flags[flagName] = getFlagValue(flagName); + }); + break; + } + case 'liquidityPoolDeposit': + { + result.type = 'liquidityPoolDeposit'; + result.liquidityPoolId = attrs.liquidityPoolId().toString('hex'); + result.maxAmountA = this._fromXDRAmount(attrs.maxAmountA()); + result.maxAmountB = this._fromXDRAmount(attrs.maxAmountB()); + result.minPrice = this._fromXDRPrice(attrs.minPrice()); + result.maxPrice = this._fromXDRPrice(attrs.maxPrice()); + break; + } + case 'liquidityPoolWithdraw': + { + result.type = 'liquidityPoolWithdraw'; + result.liquidityPoolId = attrs.liquidityPoolId().toString('hex'); + result.amount = this._fromXDRAmount(attrs.amount()); + result.minAmountA = this._fromXDRAmount(attrs.minAmountA()); + result.minAmountB = this._fromXDRAmount(attrs.minAmountB()); + break; + } + case 'invokeHostFunction': + { + var _attrs$auth; + result.type = 'invokeHostFunction'; + result.func = attrs.hostFunction(); + result.auth = (_attrs$auth = attrs.auth()) !== null && _attrs$auth !== void 0 ? _attrs$auth : []; + break; + } + case 'extendFootprintTtl': + { + result.type = 'extendFootprintTtl'; + result.extendTo = attrs.extendTo(); + break; + } + case 'restoreFootprint': + { + result.type = 'restoreFootprint'; + break; + } + default: + { + throw new Error("Unknown operation: ".concat(operationName)); + } + } + return result; + } + + /** + * Validates that a given amount is possible for a Stellar asset. + * + * Specifically, this means that the amount is well, a valid number, but also + * that it is within the int64 range and has no more than 7 decimal levels of + * precision. + * + * Note that while smart contracts allow larger amounts, this is oriented + * towards validating the standard Stellar operations. + * + * @param {string} value the amount to validate + * @param {boolean} allowZero optionally, whether or not zero is valid (default: no) + * + * @returns {boolean} + */ + }, { + key: "isValidAmount", + value: function isValidAmount(value) { + var allowZero = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (typeof value !== 'string') { + return false; + } + var amount; + try { + amount = new _bignumber["default"](value); + } catch (e) { + return false; + } + if ( + // == 0 + !allowZero && amount.isZero() || + // < 0 + amount.isNegative() || + // > Max value + amount.times(ONE).gt(new _bignumber["default"](MAX_INT64).toString()) || + // Decimal places (max 7) + amount.decimalPlaces() > 7 || + // NaN or Infinity + amount.isNaN() || !amount.isFinite()) { + return false; + } + return true; + } + }, { + key: "constructAmountRequirementsError", + value: function constructAmountRequirementsError(arg) { + return "".concat(arg, " argument must be of type String, represent a positive number and have at most 7 digits after the decimal"); + } + + /** + * Returns value converted to uint32 value or undefined. + * If `value` is not `Number`, `String` or `Undefined` then throws an error. + * Used in {@link Operation.setOptions}. + * @private + * @param {string} name Name of the property (used in error message only) + * @param {*} value Value to check + * @param {function(value, name)} isValidFunction Function to check other constraints (the argument will be a `Number`) + * @returns {undefined|Number} + */ + }, { + key: "_checkUnsignedIntValue", + value: function _checkUnsignedIntValue(name, value) { + var isValidFunction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + if (typeof value === 'undefined') { + return undefined; + } + if (typeof value === 'string') { + value = parseFloat(value); + } + switch (true) { + case typeof value !== 'number' || !Number.isFinite(value) || value % 1 !== 0: + throw new Error("".concat(name, " value is invalid")); + case value < 0: + throw new Error("".concat(name, " value must be unsigned")); + case !isValidFunction || isValidFunction && isValidFunction(value, name): + return value; + default: + throw new Error("".concat(name, " value is invalid")); + } + } + /** + * @private + * @param {string|BigNumber} value Value + * @returns {Hyper} XDR amount + */ + }, { + key: "_toXDRAmount", + value: function _toXDRAmount(value) { + var amount = new _bignumber["default"](value).times(ONE); + return _jsXdr.Hyper.fromString(amount.toString()); + } + + /** + * @private + * @param {string|BigNumber} value XDR amount + * @returns {BigNumber} Number + */ + }, { + key: "_fromXDRAmount", + value: function _fromXDRAmount(value) { + return new _bignumber["default"](value).div(ONE).toFixed(7); + } + + /** + * @private + * @param {object} price Price object + * @param {function} price.n numerator function that returns a value + * @param {function} price.d denominator function that returns a value + * @returns {BigNumber} Big string + */ + }, { + key: "_fromXDRPrice", + value: function _fromXDRPrice(price) { + var n = new _bignumber["default"](price.n()); + return n.div(new _bignumber["default"](price.d())).toString(); + } + + /** + * @private + * @param {object} price Price object + * @param {function} price.n numerator function that returns a value + * @param {function} price.d denominator function that returns a value + * @returns {object} XDR price object + */ + }, { + key: "_toXDRPrice", + value: function _toXDRPrice(price) { + var xdrObject; + if (price.n && price.d) { + xdrObject = new _xdr["default"].Price(price); + } else { + var approx = (0, _continued_fraction.best_r)(price); + xdrObject = new _xdr["default"].Price({ + n: parseInt(approx[0], 10), + d: parseInt(approx[1], 10) + }); + } + if (xdrObject.n() < 0 || xdrObject.d() < 0) { + throw new Error('price must be positive'); + } + return xdrObject; + } + }]); +}(); +function extractRevokeSponshipDetails(attrs, result) { + switch (attrs["switch"]().name) { + case 'revokeSponsorshipLedgerEntry': + { + var ledgerKey = attrs.ledgerKey(); + switch (ledgerKey["switch"]().name) { + case _xdr["default"].LedgerEntryType.account().name: + { + result.type = 'revokeAccountSponsorship'; + result.account = accountIdtoAddress(ledgerKey.account().accountId()); + break; + } + case _xdr["default"].LedgerEntryType.trustline().name: + { + result.type = 'revokeTrustlineSponsorship'; + result.account = accountIdtoAddress(ledgerKey.trustLine().accountId()); + var xdrAsset = ledgerKey.trustLine().asset(); + switch (xdrAsset["switch"]()) { + case _xdr["default"].AssetType.assetTypePoolShare(): + result.asset = _liquidity_pool_id.LiquidityPoolId.fromOperation(xdrAsset); + break; + default: + result.asset = _asset.Asset.fromOperation(xdrAsset); + break; + } + break; + } + case _xdr["default"].LedgerEntryType.offer().name: + { + result.type = 'revokeOfferSponsorship'; + result.seller = accountIdtoAddress(ledgerKey.offer().sellerId()); + result.offerId = ledgerKey.offer().offerId().toString(); + break; + } + case _xdr["default"].LedgerEntryType.data().name: + { + result.type = 'revokeDataSponsorship'; + result.account = accountIdtoAddress(ledgerKey.data().accountId()); + result.name = ledgerKey.data().dataName().toString('ascii'); + break; + } + case _xdr["default"].LedgerEntryType.claimableBalance().name: + { + result.type = 'revokeClaimableBalanceSponsorship'; + result.balanceId = ledgerKey.claimableBalance().balanceId().toXDR('hex'); + break; + } + case _xdr["default"].LedgerEntryType.liquidityPool().name: + { + result.type = 'revokeLiquidityPoolSponsorship'; + result.liquidityPoolId = ledgerKey.liquidityPool().liquidityPoolId().toString('hex'); + break; + } + default: + { + throw new Error("Unknown ledgerKey: ".concat(attrs["switch"]().name)); + } + } + break; + } + case 'revokeSponsorshipSigner': + { + result.type = 'revokeSignerSponsorship'; + result.account = accountIdtoAddress(attrs.signer().accountId()); + result.signer = convertXDRSignerKeyToObject(attrs.signer().signerKey()); + break; + } + default: + { + throw new Error("Unknown revokeSponsorship: ".concat(attrs["switch"]().name)); + } + } +} +function convertXDRSignerKeyToObject(signerKey) { + var attrs = {}; + switch (signerKey["switch"]().name) { + case _xdr["default"].SignerKeyType.signerKeyTypeEd25519().name: + { + attrs.ed25519PublicKey = _strkey.StrKey.encodeEd25519PublicKey(signerKey.ed25519()); + break; + } + case _xdr["default"].SignerKeyType.signerKeyTypePreAuthTx().name: + { + attrs.preAuthTx = signerKey.preAuthTx().toString('hex'); + break; + } + case _xdr["default"].SignerKeyType.signerKeyTypeHashX().name: + { + attrs.sha256Hash = signerKey.hashX().toString('hex'); + break; + } + default: + { + throw new Error("Unknown signerKey: ".concat(signerKey["switch"]().name)); + } + } + return attrs; +} +function accountIdtoAddress(accountId) { + return _strkey.StrKey.encodeEd25519PublicKey(accountId.ed25519()); +} + +// Attach all imported operations as static methods on the Operation class +Operation.accountMerge = ops.accountMerge; +Operation.allowTrust = ops.allowTrust; +Operation.bumpSequence = ops.bumpSequence; +Operation.changeTrust = ops.changeTrust; +Operation.createAccount = ops.createAccount; +Operation.createClaimableBalance = ops.createClaimableBalance; +Operation.claimClaimableBalance = ops.claimClaimableBalance; +Operation.clawbackClaimableBalance = ops.clawbackClaimableBalance; +Operation.createPassiveSellOffer = ops.createPassiveSellOffer; +Operation.inflation = ops.inflation; +Operation.manageData = ops.manageData; +Operation.manageSellOffer = ops.manageSellOffer; +Operation.manageBuyOffer = ops.manageBuyOffer; +Operation.pathPaymentStrictReceive = ops.pathPaymentStrictReceive; +Operation.pathPaymentStrictSend = ops.pathPaymentStrictSend; +Operation.payment = ops.payment; +Operation.setOptions = ops.setOptions; +Operation.beginSponsoringFutureReserves = ops.beginSponsoringFutureReserves; +Operation.endSponsoringFutureReserves = ops.endSponsoringFutureReserves; +Operation.revokeAccountSponsorship = ops.revokeAccountSponsorship; +Operation.revokeTrustlineSponsorship = ops.revokeTrustlineSponsorship; +Operation.revokeOfferSponsorship = ops.revokeOfferSponsorship; +Operation.revokeDataSponsorship = ops.revokeDataSponsorship; +Operation.revokeClaimableBalanceSponsorship = ops.revokeClaimableBalanceSponsorship; +Operation.revokeLiquidityPoolSponsorship = ops.revokeLiquidityPoolSponsorship; +Operation.revokeSignerSponsorship = ops.revokeSignerSponsorship; +Operation.clawback = ops.clawback; +Operation.setTrustLineFlags = ops.setTrustLineFlags; +Operation.liquidityPoolDeposit = ops.liquidityPoolDeposit; +Operation.liquidityPoolWithdraw = ops.liquidityPoolWithdraw; +Operation.invokeHostFunction = ops.invokeHostFunction; +Operation.extendFootprintTtl = ops.extendFootprintTtl; +Operation.restoreFootprint = ops.restoreFootprint; + +// these are not `xdr.Operation`s directly, but are proxies for complex but +// common versions of `Operation.invokeHostFunction` +Operation.createStellarAssetContract = ops.createStellarAssetContract; +Operation.invokeContractFunction = ops.invokeContractFunction; +Operation.createCustomContract = ops.createCustomContract; +Operation.uploadContractWasm = ops.uploadContractWasm; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/account_merge.js b/node_modules/@stellar/stellar-base/lib/operations/account_merge.js new file mode 100644 index 00000000..f910fa54 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/account_merge.js @@ -0,0 +1,32 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.accountMerge = accountMerge; +var _xdr = _interopRequireDefault(require("../xdr")); +var _decode_encode_muxed_account = require("../util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Transfers native balance to destination account. + * + * @function + * @alias Operation.accountMerge + * + * @param {object} opts - options object + * @param {string} opts.destination - destination to merge the source account into + * @param {string} [opts.source] - operation source account (defaults to + * transaction source) + * + * @returns {xdr.Operation} an Account Merge operation (xdr.AccountMergeOp) + */ +function accountMerge(opts) { + var opAttributes = {}; + try { + opAttributes.body = _xdr["default"].OperationBody.accountMerge((0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(opts.destination)); + } catch (e) { + throw new Error('destination is invalid'); + } + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/allow_trust.js b/node_modules/@stellar/stellar-base/lib/operations/allow_trust.js new file mode 100644 index 00000000..85dd6e61 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/allow_trust.js @@ -0,0 +1,57 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.allowTrust = allowTrust; +var _xdr = _interopRequireDefault(require("../xdr")); +var _keypair = require("../keypair"); +var _strkey = require("../strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * @deprecated since v5.0 + * + * Returns an XDR AllowTrustOp. An "allow trust" operation authorizes another + * account to hold your account's credit for a given asset. + * + * @function + * @alias Operation.allowTrust + * + * @param {object} opts Options object + * @param {string} opts.trustor - The trusting account (the one being authorized) + * @param {string} opts.assetCode - The asset code being authorized. + * @param {(0|1|2)} opts.authorize - `1` to authorize, `2` to authorize to maintain liabilities, and `0` to deauthorize. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * + * @returns {xdr.AllowTrustOp} Allow Trust operation + */ +function allowTrust(opts) { + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.trustor)) { + throw new Error('trustor is invalid'); + } + var attributes = {}; + attributes.trustor = _keypair.Keypair.fromPublicKey(opts.trustor).xdrAccountId(); + if (opts.assetCode.length <= 4) { + var code = opts.assetCode.padEnd(4, '\0'); + attributes.asset = _xdr["default"].AssetCode.assetTypeCreditAlphanum4(code); + } else if (opts.assetCode.length <= 12) { + var _code = opts.assetCode.padEnd(12, '\0'); + attributes.asset = _xdr["default"].AssetCode.assetTypeCreditAlphanum12(_code); + } else { + throw new Error('Asset code must be 12 characters at max.'); + } + if (typeof opts.authorize === 'boolean') { + if (opts.authorize) { + attributes.authorize = _xdr["default"].TrustLineFlags.authorizedFlag().value; + } else { + attributes.authorize = 0; + } + } else { + attributes.authorize = opts.authorize; + } + var allowTrustOp = new _xdr["default"].AllowTrustOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.allowTrust(allowTrustOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/begin_sponsoring_future_reserves.js b/node_modules/@stellar/stellar-base/lib/operations/begin_sponsoring_future_reserves.js new file mode 100644 index 00000000..0e7e0e89 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/begin_sponsoring_future_reserves.js @@ -0,0 +1,38 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.beginSponsoringFutureReserves = beginSponsoringFutureReserves; +var _xdr = _interopRequireDefault(require("../xdr")); +var _strkey = require("../strkey"); +var _keypair = require("../keypair"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create a "begin sponsoring future reserves" operation. + * @function + * @alias Operation.beginSponsoringFutureReserves + * @param {object} opts Options object + * @param {string} opts.sponsoredId - The sponsored account id. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.beginSponsoringFutureReserves({ + * sponsoredId: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + * }); + * + */ +function beginSponsoringFutureReserves() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.sponsoredId)) { + throw new Error('sponsoredId is invalid'); + } + var op = new _xdr["default"].BeginSponsoringFutureReservesOp({ + sponsoredId: _keypair.Keypair.fromPublicKey(opts.sponsoredId).xdrAccountId() + }); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.beginSponsoringFutureReserves(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/bump_sequence.js b/node_modules/@stellar/stellar-base/lib/operations/bump_sequence.js new file mode 100644 index 00000000..9e48d6ab --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/bump_sequence.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.bumpSequence = bumpSequence; +var _jsXdr = require("@stellar/js-xdr"); +var _bignumber = _interopRequireDefault(require("../util/bignumber")); +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * This operation bumps sequence number. + * @function + * @alias Operation.bumpSequence + * @param {object} opts Options object + * @param {string} opts.bumpTo - Sequence number to bump to. + * @param {string} [opts.source] - The optional source account. + * @returns {xdr.BumpSequenceOp} Operation + */ +function bumpSequence(opts) { + var attributes = {}; + if (typeof opts.bumpTo !== 'string') { + throw new Error('bumpTo must be a string'); + } + try { + // eslint-disable-next-line no-new + new _bignumber["default"](opts.bumpTo); + } catch (e) { + throw new Error('bumpTo must be a stringified number'); + } + attributes.bumpTo = _jsXdr.Hyper.fromString(opts.bumpTo); + var bumpSequenceOp = new _xdr["default"].BumpSequenceOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.bumpSequence(bumpSequenceOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/change_trust.js b/node_modules/@stellar/stellar-base/lib/operations/change_trust.js new file mode 100644 index 00000000..0c9ad214 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/change_trust.js @@ -0,0 +1,52 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.changeTrust = changeTrust; +var _jsXdr = require("@stellar/js-xdr"); +var _bignumber = _interopRequireDefault(require("../util/bignumber")); +var _xdr = _interopRequireDefault(require("../xdr")); +var _asset = require("../asset"); +var _liquidity_pool_asset = require("../liquidity_pool_asset"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +var MAX_INT64 = '9223372036854775807'; + +/** + * Returns an XDR ChangeTrustOp. A "change trust" operation adds, removes, or updates a + * trust line for a given asset from the source account to another. + * @function + * @alias Operation.changeTrust + * @param {object} opts Options object + * @param {Asset | LiquidityPoolAsset} opts.asset - The asset for the trust line. + * @param {string} [opts.limit] - The limit for the asset, defaults to max int64. + * If the limit is set to "0" it deletes the trustline. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @returns {xdr.ChangeTrustOp} Change Trust operation + */ +function changeTrust(opts) { + var attributes = {}; + if (opts.asset instanceof _asset.Asset) { + attributes.line = opts.asset.toChangeTrustXDRObject(); + } else if (opts.asset instanceof _liquidity_pool_asset.LiquidityPoolAsset) { + attributes.line = opts.asset.toXDRObject(); + } else { + throw new TypeError('asset must be Asset or LiquidityPoolAsset'); + } + if (opts.limit !== undefined && !this.isValidAmount(opts.limit, true)) { + throw new TypeError(this.constructAmountRequirementsError('limit')); + } + if (opts.limit) { + attributes.limit = this._toXDRAmount(opts.limit); + } else { + attributes.limit = _jsXdr.Hyper.fromString(new _bignumber["default"](MAX_INT64).toString()); + } + if (opts.source) { + attributes.source = opts.source.masterKeypair; + } + var changeTrustOP = new _xdr["default"].ChangeTrustOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.changeTrust(changeTrustOP); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/claim_claimable_balance.js b/node_modules/@stellar/stellar-base/lib/operations/claim_claimable_balance.js new file mode 100644 index 00000000..62434b86 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/claim_claimable_balance.js @@ -0,0 +1,40 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.claimClaimableBalance = claimClaimableBalance; +exports.validateClaimableBalanceId = validateClaimableBalanceId; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create a new claim claimable balance operation. + * @function + * @alias Operation.claimClaimableBalance + * @param {object} opts Options object + * @param {string} opts.balanceId - The claimable balance id to be claimed. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} Claim claimable balance operation + * + * @example + * const op = Operation.claimClaimableBalance({ + * balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', + * }); + * + */ +function claimClaimableBalance() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + validateClaimableBalanceId(opts.balanceId); + var attributes = {}; + attributes.balanceId = _xdr["default"].ClaimableBalanceId.fromXDR(opts.balanceId, 'hex'); + var claimClaimableBalanceOp = new _xdr["default"].ClaimClaimableBalanceOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.claimClaimableBalance(claimClaimableBalanceOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} +function validateClaimableBalanceId(balanceId) { + if (typeof balanceId !== 'string' || balanceId.length !== 8 + 64 /* 8b discriminant + 64b string */) { + throw new Error('must provide a valid claimable balance id'); + } +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/clawback.js b/node_modules/@stellar/stellar-base/lib/operations/clawback.js new file mode 100644 index 00000000..eb4bf6d7 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/clawback.js @@ -0,0 +1,46 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.clawback = clawback; +var _xdr = _interopRequireDefault(require("../xdr")); +var _decode_encode_muxed_account = require("../util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Creates a clawback operation. + * + * @function + * @alias Operation.clawback + * + * @param {object} opts - Options object + * @param {Asset} opts.asset - The asset being clawed back. + * @param {string} opts.amount - The amount of the asset to claw back. + * @param {string} opts.from - The public key of the (optionally-muxed) + * account to claw back from. + * + * @param {string} [opts.source] - The source account for the operation. + * Defaults to the transaction's source account. + * + * @return {xdr.ClawbackOp} + * + * @see https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md#clawback-operation + */ +function clawback(opts) { + var attributes = {}; + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + attributes.asset = opts.asset.toXDRObject(); + try { + attributes.from = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(opts.from); + } catch (e) { + throw new Error('from address is invalid'); + } + var opAttributes = { + body: _xdr["default"].OperationBody.clawback(new _xdr["default"].ClawbackOp(attributes)) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/clawback_claimable_balance.js b/node_modules/@stellar/stellar-base/lib/operations/clawback_claimable_balance.js new file mode 100644 index 00000000..2603ce18 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/clawback_claimable_balance.js @@ -0,0 +1,39 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.clawbackClaimableBalance = clawbackClaimableBalance; +var _xdr = _interopRequireDefault(require("../xdr")); +var _claim_claimable_balance = require("./claim_claimable_balance"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Creates a clawback operation for a claimable balance. + * + * @function + * @alias Operation.clawbackClaimableBalance + * @param {object} opts - Options object + * @param {string} opts.balanceId - The claimable balance ID to be clawed back. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @return {xdr.ClawbackClaimableBalanceOp} + * + * @example + * const op = Operation.clawbackClaimableBalance({ + * balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', + * }); + * + * @link https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md#clawback-claimable-balance-operation + */ +function clawbackClaimableBalance() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + (0, _claim_claimable_balance.validateClaimableBalanceId)(opts.balanceId); + var attributes = { + balanceId: _xdr["default"].ClaimableBalanceId.fromXDR(opts.balanceId, 'hex') + }; + var opAttributes = { + body: _xdr["default"].OperationBody.clawbackClaimableBalance(new _xdr["default"].ClawbackClaimableBalanceOp(attributes)) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/create_account.js b/node_modules/@stellar/stellar-base/lib/operations/create_account.js new file mode 100644 index 00000000..dd64bf66 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/create_account.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createAccount = createAccount; +var _xdr = _interopRequireDefault(require("../xdr")); +var _keypair = require("../keypair"); +var _strkey = require("../strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create and fund a non existent account. + * @function + * @alias Operation.createAccount + * @param {object} opts Options object + * @param {string} opts.destination - Destination account ID to create an account for. + * @param {string} opts.startingBalance - Amount in XLM the account should be funded for. Must be greater + * than the [reserve balance amount](https://developers.stellar.org/docs/glossary/fees/). + * @param {string} [opts.source] - The source account for the payment. Defaults to the transaction's source account. + * @returns {xdr.CreateAccountOp} Create account operation + */ +function createAccount(opts) { + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.destination)) { + throw new Error('destination is invalid'); + } + if (!this.isValidAmount(opts.startingBalance, true)) { + throw new TypeError(this.constructAmountRequirementsError('startingBalance')); + } + var attributes = {}; + attributes.destination = _keypair.Keypair.fromPublicKey(opts.destination).xdrAccountId(); + attributes.startingBalance = this._toXDRAmount(opts.startingBalance); + var createAccountOp = new _xdr["default"].CreateAccountOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.createAccount(createAccountOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/create_claimable_balance.js b/node_modules/@stellar/stellar-base/lib/operations/create_claimable_balance.js new file mode 100644 index 00000000..1e3437c4 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/create_claimable_balance.js @@ -0,0 +1,65 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createClaimableBalance = createClaimableBalance; +var _xdr = _interopRequireDefault(require("../xdr")); +var _asset = require("../asset"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create a new claimable balance operation. + * + * @function + * @alias Operation.createClaimableBalance + * + * @param {object} opts Options object + * @param {Asset} opts.asset - The asset for the claimable balance. + * @param {string} opts.amount - Amount. + * @param {Claimant[]} opts.claimants - An array of Claimants + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @returns {xdr.Operation} Create claimable balance operation + * + * @example + * const asset = new Asset( + * 'USD', + * 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + * ); + * const amount = '100.0000000'; + * const claimants = [ + * new Claimant( + * 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ', + * Claimant.predicateBeforeAbsoluteTime("4102444800000") + * ) + * ]; + * + * const op = Operation.createClaimableBalance({ + * asset, + * amount, + * claimants + * }); + * + */ +function createClaimableBalance(opts) { + if (!(opts.asset instanceof _asset.Asset)) { + throw new Error('must provide an asset for create claimable balance operation'); + } + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + if (!Array.isArray(opts.claimants) || opts.claimants.length === 0) { + throw new Error('must provide at least one claimant'); + } + var attributes = {}; + attributes.asset = opts.asset.toXDRObject(); + attributes.amount = this._toXDRAmount(opts.amount); + attributes.claimants = Object.values(opts.claimants).map(function (c) { + return c.toXDRObject(); + }); + var createClaimableBalanceOp = new _xdr["default"].CreateClaimableBalanceOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.createClaimableBalance(createClaimableBalanceOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/create_passive_sell_offer.js b/node_modules/@stellar/stellar-base/lib/operations/create_passive_sell_offer.js new file mode 100644 index 00000000..af9438a8 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/create_passive_sell_offer.js @@ -0,0 +1,44 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createPassiveSellOffer = createPassiveSellOffer; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Returns a XDR CreatePasiveSellOfferOp. A "create passive offer" operation creates an + * offer that won't consume a counter offer that exactly matches this offer. This is + * useful for offers just used as 1:1 exchanges for path payments. Use manage offer + * to manage this offer after using this operation to create it. + * @function + * @alias Operation.createPassiveSellOffer + * @param {object} opts Options object + * @param {Asset} opts.selling - What you're selling. + * @param {Asset} opts.buying - What you're buying. + * @param {string} opts.amount - The total amount you're selling. If 0, deletes the offer. + * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `selling` in terms of `buying`. + * @param {number} opts.price.n - If `opts.price` is an object: the price numerator + * @param {number} opts.price.d - If `opts.price` is an object: the price denominator + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found. + * @returns {xdr.CreatePassiveSellOfferOp} Create Passive Sell Offer operation + */ +function createPassiveSellOffer(opts) { + var attributes = {}; + attributes.selling = opts.selling.toXDRObject(); + attributes.buying = opts.buying.toXDRObject(); + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + if (opts.price === undefined) { + throw new TypeError('price argument is required'); + } + attributes.price = this._toXDRPrice(opts.price); + var createPassiveSellOfferOp = new _xdr["default"].CreatePassiveSellOfferOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.createPassiveSellOffer(createPassiveSellOfferOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/end_sponsoring_future_reserves.js b/node_modules/@stellar/stellar-base/lib/operations/end_sponsoring_future_reserves.js new file mode 100644 index 00000000..1ccf91ea --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/end_sponsoring_future_reserves.js @@ -0,0 +1,27 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.endSponsoringFutureReserves = endSponsoringFutureReserves; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create an "end sponsoring future reserves" operation. + * @function + * @alias Operation.endSponsoringFutureReserves + * @param {object} opts Options object + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.endSponsoringFutureReserves(); + * + */ +function endSponsoringFutureReserves() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.endSponsoringFutureReserves(); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/extend_footprint_ttl.js b/node_modules/@stellar/stellar-base/lib/operations/extend_footprint_ttl.js new file mode 100644 index 00000000..c91a5189 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/extend_footprint_ttl.js @@ -0,0 +1,53 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.extendFootprintTtl = extendFootprintTtl; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Builds an operation to bump the time-to-live (TTL) of the ledger keys. The + * keys for extension have to be provided in the read-only footprint of + * the transaction. + * + * The only parameter of the operation itself is the new minimum TTL for + * all the provided entries. If an entry already has a higher TTL, then it + * will just be skipped. + * + * TTL is the number of ledgers from the current ledger (exclusive) until + * the last ledger the entry is still considered alive (inclusive). Thus + * the exact ledger until the entries will live will only be determined + * when transaction has been applied. + * + * The footprint has to be specified in the transaction. See + * {@link TransactionBuilder}'s `opts.sorobanData` parameter, which is a + * {@link xdr.SorobanTransactionData} instance that contains fee data & resource + * usage as part of {@link xdr.SorobanResources}. + * + * @function + * @alias Operation.extendFootprintTtl + * + * @param {object} opts - object holding operation parameters + * @param {number} opts.extendTo - the minimum TTL that all the entries in + * the read-only footprint will have + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Extend Footprint TTL operation + * (xdr.ExtendFootprintTTLOp) + */ +function extendFootprintTtl(opts) { + var _opts$extendTo; + if (((_opts$extendTo = opts.extendTo) !== null && _opts$extendTo !== void 0 ? _opts$extendTo : -1) <= 0) { + throw new RangeError('extendTo has to be positive'); + } + var extendFootprintOp = new _xdr["default"].ExtendFootprintTtlOp({ + ext: new _xdr["default"].ExtensionPoint(0), + extendTo: opts.extendTo + }); + var opAttributes = { + body: _xdr["default"].OperationBody.extendFootprintTtl(extendFootprintOp) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/index.js b/node_modules/@stellar/stellar-base/lib/operations/index.js new file mode 100644 index 00000000..b0fbd989 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/index.js @@ -0,0 +1,254 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "accountMerge", { + enumerable: true, + get: function get() { + return _account_merge.accountMerge; + } +}); +Object.defineProperty(exports, "allowTrust", { + enumerable: true, + get: function get() { + return _allow_trust.allowTrust; + } +}); +Object.defineProperty(exports, "beginSponsoringFutureReserves", { + enumerable: true, + get: function get() { + return _begin_sponsoring_future_reserves.beginSponsoringFutureReserves; + } +}); +Object.defineProperty(exports, "bumpSequence", { + enumerable: true, + get: function get() { + return _bump_sequence.bumpSequence; + } +}); +Object.defineProperty(exports, "changeTrust", { + enumerable: true, + get: function get() { + return _change_trust.changeTrust; + } +}); +Object.defineProperty(exports, "claimClaimableBalance", { + enumerable: true, + get: function get() { + return _claim_claimable_balance.claimClaimableBalance; + } +}); +Object.defineProperty(exports, "clawback", { + enumerable: true, + get: function get() { + return _clawback.clawback; + } +}); +Object.defineProperty(exports, "clawbackClaimableBalance", { + enumerable: true, + get: function get() { + return _clawback_claimable_balance.clawbackClaimableBalance; + } +}); +Object.defineProperty(exports, "createAccount", { + enumerable: true, + get: function get() { + return _create_account.createAccount; + } +}); +Object.defineProperty(exports, "createClaimableBalance", { + enumerable: true, + get: function get() { + return _create_claimable_balance.createClaimableBalance; + } +}); +Object.defineProperty(exports, "createCustomContract", { + enumerable: true, + get: function get() { + return _invoke_host_function.createCustomContract; + } +}); +Object.defineProperty(exports, "createPassiveSellOffer", { + enumerable: true, + get: function get() { + return _create_passive_sell_offer.createPassiveSellOffer; + } +}); +Object.defineProperty(exports, "createStellarAssetContract", { + enumerable: true, + get: function get() { + return _invoke_host_function.createStellarAssetContract; + } +}); +Object.defineProperty(exports, "endSponsoringFutureReserves", { + enumerable: true, + get: function get() { + return _end_sponsoring_future_reserves.endSponsoringFutureReserves; + } +}); +Object.defineProperty(exports, "extendFootprintTtl", { + enumerable: true, + get: function get() { + return _extend_footprint_ttl.extendFootprintTtl; + } +}); +Object.defineProperty(exports, "inflation", { + enumerable: true, + get: function get() { + return _inflation.inflation; + } +}); +Object.defineProperty(exports, "invokeContractFunction", { + enumerable: true, + get: function get() { + return _invoke_host_function.invokeContractFunction; + } +}); +Object.defineProperty(exports, "invokeHostFunction", { + enumerable: true, + get: function get() { + return _invoke_host_function.invokeHostFunction; + } +}); +Object.defineProperty(exports, "liquidityPoolDeposit", { + enumerable: true, + get: function get() { + return _liquidity_pool_deposit.liquidityPoolDeposit; + } +}); +Object.defineProperty(exports, "liquidityPoolWithdraw", { + enumerable: true, + get: function get() { + return _liquidity_pool_withdraw.liquidityPoolWithdraw; + } +}); +Object.defineProperty(exports, "manageBuyOffer", { + enumerable: true, + get: function get() { + return _manage_buy_offer.manageBuyOffer; + } +}); +Object.defineProperty(exports, "manageData", { + enumerable: true, + get: function get() { + return _manage_data.manageData; + } +}); +Object.defineProperty(exports, "manageSellOffer", { + enumerable: true, + get: function get() { + return _manage_sell_offer.manageSellOffer; + } +}); +Object.defineProperty(exports, "pathPaymentStrictReceive", { + enumerable: true, + get: function get() { + return _path_payment_strict_receive.pathPaymentStrictReceive; + } +}); +Object.defineProperty(exports, "pathPaymentStrictSend", { + enumerable: true, + get: function get() { + return _path_payment_strict_send.pathPaymentStrictSend; + } +}); +Object.defineProperty(exports, "payment", { + enumerable: true, + get: function get() { + return _payment.payment; + } +}); +Object.defineProperty(exports, "restoreFootprint", { + enumerable: true, + get: function get() { + return _restore_footprint.restoreFootprint; + } +}); +Object.defineProperty(exports, "revokeAccountSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeAccountSponsorship; + } +}); +Object.defineProperty(exports, "revokeClaimableBalanceSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeClaimableBalanceSponsorship; + } +}); +Object.defineProperty(exports, "revokeDataSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeDataSponsorship; + } +}); +Object.defineProperty(exports, "revokeLiquidityPoolSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeLiquidityPoolSponsorship; + } +}); +Object.defineProperty(exports, "revokeOfferSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeOfferSponsorship; + } +}); +Object.defineProperty(exports, "revokeSignerSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeSignerSponsorship; + } +}); +Object.defineProperty(exports, "revokeTrustlineSponsorship", { + enumerable: true, + get: function get() { + return _revoke_sponsorship.revokeTrustlineSponsorship; + } +}); +Object.defineProperty(exports, "setOptions", { + enumerable: true, + get: function get() { + return _set_options.setOptions; + } +}); +Object.defineProperty(exports, "setTrustLineFlags", { + enumerable: true, + get: function get() { + return _set_trustline_flags.setTrustLineFlags; + } +}); +Object.defineProperty(exports, "uploadContractWasm", { + enumerable: true, + get: function get() { + return _invoke_host_function.uploadContractWasm; + } +}); +var _manage_sell_offer = require("./manage_sell_offer"); +var _create_passive_sell_offer = require("./create_passive_sell_offer"); +var _account_merge = require("./account_merge"); +var _allow_trust = require("./allow_trust"); +var _bump_sequence = require("./bump_sequence"); +var _change_trust = require("./change_trust"); +var _create_account = require("./create_account"); +var _create_claimable_balance = require("./create_claimable_balance"); +var _claim_claimable_balance = require("./claim_claimable_balance"); +var _clawback_claimable_balance = require("./clawback_claimable_balance"); +var _inflation = require("./inflation"); +var _manage_data = require("./manage_data"); +var _manage_buy_offer = require("./manage_buy_offer"); +var _path_payment_strict_receive = require("./path_payment_strict_receive"); +var _path_payment_strict_send = require("./path_payment_strict_send"); +var _payment = require("./payment"); +var _set_options = require("./set_options"); +var _begin_sponsoring_future_reserves = require("./begin_sponsoring_future_reserves"); +var _end_sponsoring_future_reserves = require("./end_sponsoring_future_reserves"); +var _revoke_sponsorship = require("./revoke_sponsorship"); +var _clawback = require("./clawback"); +var _set_trustline_flags = require("./set_trustline_flags"); +var _liquidity_pool_deposit = require("./liquidity_pool_deposit"); +var _liquidity_pool_withdraw = require("./liquidity_pool_withdraw"); +var _invoke_host_function = require("./invoke_host_function"); +var _extend_footprint_ttl = require("./extend_footprint_ttl"); +var _restore_footprint = require("./restore_footprint"); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/inflation.js b/node_modules/@stellar/stellar-base/lib/operations/inflation.js new file mode 100644 index 00000000..1485dbbb --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/inflation.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.inflation = inflation; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * This operation generates the inflation. + * @function + * @alias Operation.inflation + * @param {object} [opts] Options object + * @param {string} [opts.source] - The optional source account. + * @returns {xdr.InflationOp} Inflation operation + */ +function inflation() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.inflation(); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/invoke_host_function.js b/node_modules/@stellar/stellar-base/lib/operations/invoke_host_function.js new file mode 100644 index 00000000..4e692581 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/invoke_host_function.js @@ -0,0 +1,225 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createCustomContract = createCustomContract; +exports.createStellarAssetContract = createStellarAssetContract; +exports.invokeContractFunction = invokeContractFunction; +exports.invokeHostFunction = invokeHostFunction; +exports.uploadContractWasm = uploadContractWasm; +var _xdr = _interopRequireDefault(require("../xdr")); +var _keypair = require("../keypair"); +var _address = require("../address"); +var _asset = require("../asset"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +/** + * Invokes a single smart contract host function. + * + * @function + * @alias Operation.invokeHostFunction + * + * @param {object} opts - options object + * @param {xdr.HostFunction} opts.func - host function to execute (with its + * wrapped parameters) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - list outlining the + * tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#function + * @see Operation.invokeContractFunction + * @see Operation.createCustomContract + * @see Operation.createStellarAssetContract + * @see Operation.uploadContractWasm + * @see Contract.call + */ +function invokeHostFunction(opts) { + if (!opts.func) { + throw new TypeError("host function invocation ('func') required (got ".concat(JSON.stringify(opts), ")")); + } + var invokeHostFunctionOp = new _xdr["default"].InvokeHostFunctionOp({ + hostFunction: opts.func, + auth: opts.auth || [] + }); + var opAttributes = { + body: _xdr["default"].OperationBody.invokeHostFunction(invokeHostFunctionOp) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Returns an operation that invokes a contract function. + * + * @function + * @alias Operation.invokeContractFunction + * + * @param {any} opts - the set of parameters + * @param {string} opts.contract - a strkey-fied contract address (`C...`) + * @param {string} opts.function - the name of the contract fn to invoke + * @param {xdr.ScVal[]} opts.args - parameters to pass to the function + * invocation (try {@link nativeToScVal} or {@link ScInt} to make building + * these easier) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see Operation.invokeHostFunction + * @see Contract.call + * @see Address + */ +function invokeContractFunction(opts) { + var c = new _address.Address(opts.contract); + if (c._type !== 'contract') { + throw new TypeError("expected contract strkey instance, got ".concat(c)); + } + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: _xdr["default"].HostFunction.hostFunctionTypeInvokeContract(new _xdr["default"].InvokeContractArgs({ + contractAddress: c.toScAddress(), + functionName: opts["function"], + args: opts.args + })) + }); +} + +/** + * Returns an operation that creates a custom WASM contract and atomically + * invokes its constructor. + * + * @function + * @alias Operation.createCustomContract + * + * @param {any} opts - the set of parameters + * @param {Address} opts.address - the contract uploader address + * @param {Uint8Array|Buffer} opts.wasmHash - the SHA-256 hash of the contract + * WASM you're uploading (see {@link hash} and + * {@link Operation.uploadContractWasm}) + * @param {xdr.ScVal[]} [opts.constructorArgs] - the optional parameters to pass + * to the constructor of this contract (see {@link nativeToScVal} for ways to + * easily create these parameters from native JS values) + * @param {Uint8Array|Buffer} [opts.salt] - an optional, 32-byte salt to + * distinguish deployment instances of the same wasm from the same user (if + * omitted, one will be generated for you) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see + * https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#function + */ +function createCustomContract(opts) { + var _opts$constructorArgs; + var salt = Buffer.from(opts.salt || getSalty()); + if (!opts.wasmHash || opts.wasmHash.length !== 32) { + throw new TypeError("expected hash(contract WASM) in 'opts.wasmHash', got ".concat(opts.wasmHash)); + } + if (salt.length !== 32) { + throw new TypeError("expected 32-byte salt in 'opts.salt', got ".concat(opts.wasmHash)); + } + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: _xdr["default"].HostFunction.hostFunctionTypeCreateContractV2(new _xdr["default"].CreateContractArgsV2({ + executable: _xdr["default"].ContractExecutable.contractExecutableWasm(Buffer.from(opts.wasmHash)), + contractIdPreimage: _xdr["default"].ContractIdPreimage.contractIdPreimageFromAddress(new _xdr["default"].ContractIdPreimageFromAddress({ + address: opts.address.toScAddress(), + salt: salt + })), + constructorArgs: (_opts$constructorArgs = opts.constructorArgs) !== null && _opts$constructorArgs !== void 0 ? _opts$constructorArgs : [] + })) + }); +} + +/** + * Returns an operation that wraps a Stellar asset into a token contract. + * + * @function + * @alias Operation.createStellarAssetContract + * + * @param {any} opts - the set of parameters + * @param {Asset|string} opts.asset - the Stellar asset to wrap, either as an + * {@link Asset} object or in canonical form (SEP-11, `code:issuer`) + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see https://stellar.org/protocol/sep-11#alphanum4-alphanum12 + * @see + * https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions + * @see + * https://soroban.stellar.org/docs/advanced-tutorials/stellar-asset-contract + * @see Operation.invokeHostFunction + */ +function createStellarAssetContract(opts) { + var asset = opts.asset; + if (typeof asset === 'string') { + var _asset$split = asset.split(':'), + _asset$split2 = _slicedToArray(_asset$split, 2), + code = _asset$split2[0], + issuer = _asset$split2[1]; + asset = new _asset.Asset(code, issuer); // handles 'xlm' by default + } + if (!(asset instanceof _asset.Asset)) { + throw new TypeError("expected Asset in 'opts.asset', got ".concat(asset)); + } + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: _xdr["default"].HostFunction.hostFunctionTypeCreateContract(new _xdr["default"].CreateContractArgs({ + executable: _xdr["default"].ContractExecutable.contractExecutableStellarAsset(), + contractIdPreimage: _xdr["default"].ContractIdPreimage.contractIdPreimageFromAsset(asset.toXDRObject()) + })) + }); +} + +/** + * Returns an operation that uploads WASM for a contract. + * + * @function + * @alias Operation.uploadContractWasm + * + * @param {any} opts - the set of parameters + * @param {Uint8Array|Buffer} opts.wasm - a WASM blob to upload to the ledger + * @param {xdr.SorobanAuthorizationEntry[]} [opts.auth] - an optional list + * outlining the tree of authorizations required for the call + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} an Invoke Host Function operation + * (xdr.InvokeHostFunctionOp) + * + * @see + * https://soroban.stellar.org/docs/fundamentals-and-concepts/invoking-contracts-with-transactions#function + */ +function uploadContractWasm(opts) { + return this.invokeHostFunction({ + source: opts.source, + auth: opts.auth, + func: _xdr["default"].HostFunction.hostFunctionTypeUploadContractWasm(Buffer.from(opts.wasm) // coalesce so we can drop `Buffer` someday + ) + }); +} + +/** @returns {Buffer} a random 256-bit "salt" value. */ +function getSalty() { + return _keypair.Keypair.random().xdrPublicKey().value(); // ed25519 is 256 bits, too +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_deposit.js b/node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_deposit.js new file mode 100644 index 00000000..553c25f7 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_deposit.js @@ -0,0 +1,64 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.liquidityPoolDeposit = liquidityPoolDeposit; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Creates a liquidity pool deposit operation. + * + * @function + * @alias Operation.liquidityPoolDeposit + * @see https://developers.stellar.org/docs/start/list-of-operations/#liquidity-pool-deposit + * + * @param {object} opts - Options object + * @param {string} opts.liquidityPoolId - The liquidity pool ID. + * @param {string} opts.maxAmountA - Maximum amount of first asset to deposit. + * @param {string} opts.maxAmountB - Maximum amount of second asset to deposit. + * @param {number|string|BigNumber|Object} opts.minPrice - Minimum depositA/depositB price. + * @param {number} opts.minPrice.n - If `opts.minPrice` is an object: the price numerator + * @param {number} opts.minPrice.d - If `opts.minPrice` is an object: the price denominator + * @param {number|string|BigNumber|Object} opts.maxPrice - Maximum depositA/depositB price. + * @param {number} opts.maxPrice.n - If `opts.maxPrice` is an object: the price numerator + * @param {number} opts.maxPrice.d - If `opts.maxPrice` is an object: the price denominator + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @returns {xdr.Operation} The resulting operation (xdr.LiquidityPoolDepositOp). + */ +function liquidityPoolDeposit() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var liquidityPoolId = opts.liquidityPoolId, + maxAmountA = opts.maxAmountA, + maxAmountB = opts.maxAmountB, + minPrice = opts.minPrice, + maxPrice = opts.maxPrice; + var attributes = {}; + if (!liquidityPoolId) { + throw new TypeError('liquidityPoolId argument is required'); + } + attributes.liquidityPoolId = _xdr["default"].PoolId.fromXDR(liquidityPoolId, 'hex'); + if (!this.isValidAmount(maxAmountA, true)) { + throw new TypeError(this.constructAmountRequirementsError('maxAmountA')); + } + attributes.maxAmountA = this._toXDRAmount(maxAmountA); + if (!this.isValidAmount(maxAmountB, true)) { + throw new TypeError(this.constructAmountRequirementsError('maxAmountB')); + } + attributes.maxAmountB = this._toXDRAmount(maxAmountB); + if (minPrice === undefined) { + throw new TypeError('minPrice argument is required'); + } + attributes.minPrice = this._toXDRPrice(minPrice); + if (maxPrice === undefined) { + throw new TypeError('maxPrice argument is required'); + } + attributes.maxPrice = this._toXDRPrice(maxPrice); + var liquidityPoolDepositOp = new _xdr["default"].LiquidityPoolDepositOp(attributes); + var opAttributes = { + body: _xdr["default"].OperationBody.liquidityPoolDeposit(liquidityPoolDepositOp) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_withdraw.js b/node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_withdraw.js new file mode 100644 index 00000000..cb0f6a94 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/liquidity_pool_withdraw.js @@ -0,0 +1,50 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.liquidityPoolWithdraw = liquidityPoolWithdraw; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Creates a liquidity pool withdraw operation. + * + * @function + * @alias Operation.liquidityPoolWithdraw + * @see https://developers.stellar.org/docs/start/list-of-operations/#liquidity-pool-withdraw + * + * @param {object} opts - Options object + * @param {string} opts.liquidityPoolId - The liquidity pool ID. + * @param {string} opts.amount - Amount of pool shares to withdraw. + * @param {string} opts.minAmountA - Minimum amount of first asset to withdraw. + * @param {string} opts.minAmountB - Minimum amount of second asset to withdraw. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * + * @returns {xdr.Operation} The resulting operation (xdr.LiquidityPoolWithdrawOp). + */ +function liquidityPoolWithdraw() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var attributes = {}; + if (!opts.liquidityPoolId) { + throw new TypeError('liquidityPoolId argument is required'); + } + attributes.liquidityPoolId = _xdr["default"].PoolId.fromXDR(opts.liquidityPoolId, 'hex'); + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + if (!this.isValidAmount(opts.minAmountA, true)) { + throw new TypeError(this.constructAmountRequirementsError('minAmountA')); + } + attributes.minAmountA = this._toXDRAmount(opts.minAmountA); + if (!this.isValidAmount(opts.minAmountB, true)) { + throw new TypeError(this.constructAmountRequirementsError('minAmountB')); + } + attributes.minAmountB = this._toXDRAmount(opts.minAmountB); + var liquidityPoolWithdrawOp = new _xdr["default"].LiquidityPoolWithdrawOp(attributes); + var opAttributes = { + body: _xdr["default"].OperationBody.liquidityPoolWithdraw(liquidityPoolWithdrawOp) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/manage_buy_offer.js b/node_modules/@stellar/stellar-base/lib/operations/manage_buy_offer.js new file mode 100644 index 00000000..feef33d2 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/manage_buy_offer.js @@ -0,0 +1,50 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.manageBuyOffer = manageBuyOffer; +var _jsXdr = require("@stellar/js-xdr"); +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Returns a XDR ManageBuyOfferOp. A "manage buy offer" operation creates, updates, or + * deletes a buy offer. + * @function + * @alias Operation.manageBuyOffer + * @param {object} opts Options object + * @param {Asset} opts.selling - What you're selling. + * @param {Asset} opts.buying - What you're buying. + * @param {string} opts.buyAmount - The total amount you're buying. If 0, deletes the offer. + * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `buying` in terms of `selling`. + * @param {number} opts.price.n - If `opts.price` is an object: the price numerator + * @param {number} opts.price.d - If `opts.price` is an object: the price denominator + * @param {number|string} [opts.offerId ] - If `0`, will create a new offer (default). Otherwise, edits an exisiting offer. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found. + * @returns {xdr.ManageBuyOfferOp} Manage Buy Offer operation + */ +function manageBuyOffer(opts) { + var attributes = {}; + attributes.selling = opts.selling.toXDRObject(); + attributes.buying = opts.buying.toXDRObject(); + if (!this.isValidAmount(opts.buyAmount, true)) { + throw new TypeError(this.constructAmountRequirementsError('buyAmount')); + } + attributes.buyAmount = this._toXDRAmount(opts.buyAmount); + if (opts.price === undefined) { + throw new TypeError('price argument is required'); + } + attributes.price = this._toXDRPrice(opts.price); + if (opts.offerId !== undefined) { + opts.offerId = opts.offerId.toString(); + } else { + opts.offerId = '0'; + } + attributes.offerId = _jsXdr.Hyper.fromString(opts.offerId); + var manageBuyOfferOp = new _xdr["default"].ManageBuyOfferOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.manageBuyOffer(manageBuyOfferOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/manage_data.js b/node_modules/@stellar/stellar-base/lib/operations/manage_data.js new file mode 100644 index 00000000..f66fc617 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/manage_data.js @@ -0,0 +1,41 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.manageData = manageData; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * This operation adds data entry to the ledger. + * @function + * @alias Operation.manageData + * @param {object} opts Options object + * @param {string} opts.name - The name of the data entry. + * @param {string|Buffer} opts.value - The value of the data entry. + * @param {string} [opts.source] - The optional source account. + * @returns {xdr.ManageDataOp} Manage Data operation + */ +function manageData(opts) { + var attributes = {}; + if (!(typeof opts.name === 'string' && opts.name.length <= 64)) { + throw new Error('name must be a string, up to 64 characters'); + } + attributes.dataName = opts.name; + if (typeof opts.value !== 'string' && !Buffer.isBuffer(opts.value) && opts.value !== null) { + throw new Error('value must be a string, Buffer or null'); + } + if (typeof opts.value === 'string') { + attributes.dataValue = Buffer.from(opts.value); + } else { + attributes.dataValue = opts.value; + } + if (attributes.dataValue !== null && attributes.dataValue.length > 64) { + throw new Error('value cannot be longer that 64 bytes'); + } + var manageDataOp = new _xdr["default"].ManageDataOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.manageData(manageDataOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/manage_sell_offer.js b/node_modules/@stellar/stellar-base/lib/operations/manage_sell_offer.js new file mode 100644 index 00000000..62b772e1 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/manage_sell_offer.js @@ -0,0 +1,50 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.manageSellOffer = manageSellOffer; +var _jsXdr = require("@stellar/js-xdr"); +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Returns a XDR ManageSellOfferOp. A "manage sell offer" operation creates, updates, or + * deletes an offer. + * @function + * @alias Operation.manageSellOffer + * @param {object} opts Options object + * @param {Asset} opts.selling - What you're selling. + * @param {Asset} opts.buying - What you're buying. + * @param {string} opts.amount - The total amount you're selling. If 0, deletes the offer. + * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `selling` in terms of `buying`. + * @param {number} opts.price.n - If `opts.price` is an object: the price numerator + * @param {number} opts.price.d - If `opts.price` is an object: the price denominator + * @param {number|string} [opts.offerId ] - If `0`, will create a new offer (default). Otherwise, edits an exisiting offer. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found. + * @returns {xdr.ManageSellOfferOp} Manage Sell Offer operation + */ +function manageSellOffer(opts) { + var attributes = {}; + attributes.selling = opts.selling.toXDRObject(); + attributes.buying = opts.buying.toXDRObject(); + if (!this.isValidAmount(opts.amount, true)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + attributes.amount = this._toXDRAmount(opts.amount); + if (opts.price === undefined) { + throw new TypeError('price argument is required'); + } + attributes.price = this._toXDRPrice(opts.price); + if (opts.offerId !== undefined) { + opts.offerId = opts.offerId.toString(); + } else { + opts.offerId = '0'; + } + attributes.offerId = _jsXdr.Hyper.fromString(opts.offerId); + var manageSellOfferOp = new _xdr["default"].ManageSellOfferOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.manageSellOffer(manageSellOfferOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_receive.js b/node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_receive.js new file mode 100644 index 00000000..dc621341 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_receive.js @@ -0,0 +1,68 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.pathPaymentStrictReceive = pathPaymentStrictReceive; +var _xdr = _interopRequireDefault(require("../xdr")); +var _decode_encode_muxed_account = require("../util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Creates a PathPaymentStrictReceive operation. + * + * A `PathPaymentStrictReceive` operation sends the specified amount to the + * destination account. It credits the destination with `destAmount` of + * `destAsset`, while debiting at most `sendMax` of `sendAsset` from the source. + * The transfer optionally occurs through a path. XLM payments create the + * destination account if it does not exist. + * + * @function + * @alias Operation.pathPaymentStrictReceive + * @see https://developers.stellar.org/docs/start/list-of-operations/#path-payment-strict-receive + * + * @param {object} opts - Options object + * @param {Asset} opts.sendAsset - asset to pay with + * @param {string} opts.sendMax - maximum amount of sendAsset to send + * @param {string} opts.destination - destination account to send to + * @param {Asset} opts.destAsset - asset the destination will receive + * @param {string} opts.destAmount - amount the destination receives + * @param {Asset[]} opts.path - array of Asset objects to use as the path + * + * @param {string} [opts.source] - The source account for the payment. + * Defaults to the transaction's source account. + * + * @returns {xdr.PathPaymentStrictReceiveOp} the resulting path payment op + */ +function pathPaymentStrictReceive(opts) { + switch (true) { + case !opts.sendAsset: + throw new Error('Must specify a send asset'); + case !this.isValidAmount(opts.sendMax): + throw new TypeError(this.constructAmountRequirementsError('sendMax')); + case !opts.destAsset: + throw new Error('Must provide a destAsset for a payment operation'); + case !this.isValidAmount(opts.destAmount): + throw new TypeError(this.constructAmountRequirementsError('destAmount')); + default: + break; + } + var attributes = {}; + attributes.sendAsset = opts.sendAsset.toXDRObject(); + attributes.sendMax = this._toXDRAmount(opts.sendMax); + try { + attributes.destination = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(opts.destination); + } catch (e) { + throw new Error('destination is invalid'); + } + attributes.destAsset = opts.destAsset.toXDRObject(); + attributes.destAmount = this._toXDRAmount(opts.destAmount); + var path = opts.path ? opts.path : []; + attributes.path = path.map(function (x) { + return x.toXDRObject(); + }); + var payment = new _xdr["default"].PathPaymentStrictReceiveOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.pathPaymentStrictReceive(payment); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_send.js b/node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_send.js new file mode 100644 index 00000000..f10c3a1a --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/path_payment_strict_send.js @@ -0,0 +1,68 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.pathPaymentStrictSend = pathPaymentStrictSend; +var _xdr = _interopRequireDefault(require("../xdr")); +var _decode_encode_muxed_account = require("../util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Creates a PathPaymentStrictSend operation. + * + * A `PathPaymentStrictSend` operation sends the specified amount to the + * destination account crediting at least `destMin` of `destAsset`, optionally + * through a path. XLM payments create the destination account if it does not + * exist. + * + * @function + * @alias Operation.pathPaymentStrictSend + * @see https://developers.stellar.org/docs/start/list-of-operations/#path-payment-strict-send + * + * @param {object} opts - Options object + * @param {Asset} opts.sendAsset - asset to pay with + * @param {string} opts.sendAmount - amount of sendAsset to send (excluding fees) + * @param {string} opts.destination - destination account to send to + * @param {Asset} opts.destAsset - asset the destination will receive + * @param {string} opts.destMin - minimum amount of destAsset to be receive + * @param {Asset[]} opts.path - array of Asset objects to use as the path + * + * @param {string} [opts.source] - The source account for the payment. + * Defaults to the transaction's source account. + * + * @returns {xdr.Operation} the resulting path payment operation + * (xdr.PathPaymentStrictSendOp) + */ +function pathPaymentStrictSend(opts) { + switch (true) { + case !opts.sendAsset: + throw new Error('Must specify a send asset'); + case !this.isValidAmount(opts.sendAmount): + throw new TypeError(this.constructAmountRequirementsError('sendAmount')); + case !opts.destAsset: + throw new Error('Must provide a destAsset for a payment operation'); + case !this.isValidAmount(opts.destMin): + throw new TypeError(this.constructAmountRequirementsError('destMin')); + default: + break; + } + var attributes = {}; + attributes.sendAsset = opts.sendAsset.toXDRObject(); + attributes.sendAmount = this._toXDRAmount(opts.sendAmount); + try { + attributes.destination = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(opts.destination); + } catch (e) { + throw new Error('destination is invalid'); + } + attributes.destAsset = opts.destAsset.toXDRObject(); + attributes.destMin = this._toXDRAmount(opts.destMin); + var path = opts.path ? opts.path : []; + attributes.path = path.map(function (x) { + return x.toXDRObject(); + }); + var payment = new _xdr["default"].PathPaymentStrictSendOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.pathPaymentStrictSend(payment); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/payment.js b/node_modules/@stellar/stellar-base/lib/operations/payment.js new file mode 100644 index 00000000..b74d50ee --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/payment.js @@ -0,0 +1,47 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.payment = payment; +var _xdr = _interopRequireDefault(require("../xdr")); +var _decode_encode_muxed_account = require("../util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create a payment operation. + * + * @function + * @alias Operation.payment + * @see https://developers.stellar.org/docs/start/list-of-operations/#payment + * + * @param {object} opts - Options object + * @param {string} opts.destination - destination account ID + * @param {Asset} opts.asset - asset to send + * @param {string} opts.amount - amount to send + * + * @param {string} [opts.source] - The source account for the payment. + * Defaults to the transaction's source account. + * + * @returns {xdr.Operation} The resulting payment operation (xdr.PaymentOp) + */ +function payment(opts) { + if (!opts.asset) { + throw new Error('Must provide an asset for a payment operation'); + } + if (!this.isValidAmount(opts.amount)) { + throw new TypeError(this.constructAmountRequirementsError('amount')); + } + var attributes = {}; + try { + attributes.destination = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(opts.destination); + } catch (e) { + throw new Error('destination is invalid'); + } + attributes.asset = opts.asset.toXDRObject(); + attributes.amount = this._toXDRAmount(opts.amount); + var paymentOp = new _xdr["default"].PaymentOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.payment(paymentOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/restore_footprint.js b/node_modules/@stellar/stellar-base/lib/operations/restore_footprint.js new file mode 100644 index 00000000..a367c592 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/restore_footprint.js @@ -0,0 +1,42 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.restoreFootprint = restoreFootprint; +var _xdr = _interopRequireDefault(require("../xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Builds an operation to restore the archived ledger entries specified + * by the ledger keys. + * + * The ledger keys to restore are specified separately from the operation + * in read-write footprint of the transaction. + * + * It takes no parameters because the relevant footprint is derived from the + * transaction itself. See {@link TransactionBuilder}'s `opts.sorobanData` + * parameter (or {@link TransactionBuilder.setSorobanData} / + * {@link TransactionBuilder.setLedgerKeys}), which is a + * {@link xdr.SorobanTransactionData} instance that contains fee data & resource + * usage as part of {@link xdr.SorobanTransactionData}. + * + * @function + * @alias Operation.restoreFootprint + * + * @param {object} [opts] - an optional set of parameters + * @param {string} [opts.source] - an optional source account + * + * @returns {xdr.Operation} a Bump Footprint Expiration operation + * (xdr.RestoreFootprintOp) + */ +function restoreFootprint() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var op = new _xdr["default"].RestoreFootprintOp({ + ext: new _xdr["default"].ExtensionPoint(0) + }); + var opAttributes = { + body: _xdr["default"].OperationBody.restoreFootprint(op) + }; + this.setSourceAccount(opAttributes, opts !== null && opts !== void 0 ? opts : {}); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/revoke_sponsorship.js b/node_modules/@stellar/stellar-base/lib/operations/revoke_sponsorship.js new file mode 100644 index 00000000..b6c2fe32 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/revoke_sponsorship.js @@ -0,0 +1,301 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.revokeAccountSponsorship = revokeAccountSponsorship; +exports.revokeClaimableBalanceSponsorship = revokeClaimableBalanceSponsorship; +exports.revokeDataSponsorship = revokeDataSponsorship; +exports.revokeLiquidityPoolSponsorship = revokeLiquidityPoolSponsorship; +exports.revokeOfferSponsorship = revokeOfferSponsorship; +exports.revokeSignerSponsorship = revokeSignerSponsorship; +exports.revokeTrustlineSponsorship = revokeTrustlineSponsorship; +var _xdr = _interopRequireDefault(require("../xdr")); +var _strkey = require("../strkey"); +var _keypair = require("../keypair"); +var _asset = require("../asset"); +var _liquidity_pool_id = require("../liquidity_pool_id"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Create a "revoke sponsorship" operation for an account. + * + * @function + * @alias Operation.revokeAccountSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The sponsored account ID. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeAccountSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * }); + * + */ +function revokeAccountSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + var ledgerKey = _xdr["default"].LedgerKey.account(new _xdr["default"].LedgerKeyAccount({ + accountId: _keypair.Keypair.fromPublicKey(opts.account).xdrAccountId() + })); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a trustline. + * + * @function + * @alias Operation.revokeTrustlineSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The account ID which owns the trustline. + * @param {Asset | LiquidityPoolId} opts.asset - The trustline asset. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeTrustlineSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * asset: new StellarBase.LiquidityPoolId( + * 'USDUSD', + * 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7' + * ) + * }); + * + */ +function revokeTrustlineSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + var asset; + if (opts.asset instanceof _asset.Asset) { + asset = opts.asset.toTrustLineXDRObject(); + } else if (opts.asset instanceof _liquidity_pool_id.LiquidityPoolId) { + asset = opts.asset.toXDRObject(); + } else { + throw new TypeError('asset must be an Asset or LiquidityPoolId'); + } + var ledgerKey = _xdr["default"].LedgerKey.trustline(new _xdr["default"].LedgerKeyTrustLine({ + accountId: _keypair.Keypair.fromPublicKey(opts.account).xdrAccountId(), + asset: asset + })); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for an offer. + * + * @function + * @alias Operation.revokeOfferSponsorship + * @param {object} opts Options object + * @param {string} opts.seller - The account ID which created the offer. + * @param {string} opts.offerId - The offer ID. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeOfferSponsorship({ + * seller: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * offerId: '1234' + * }); + * + */ +function revokeOfferSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.seller)) { + throw new Error('seller is invalid'); + } + if (typeof opts.offerId !== 'string') { + throw new Error('offerId is invalid'); + } + var ledgerKey = _xdr["default"].LedgerKey.offer(new _xdr["default"].LedgerKeyOffer({ + sellerId: _keypair.Keypair.fromPublicKey(opts.seller).xdrAccountId(), + offerId: _xdr["default"].Int64.fromString(opts.offerId) + })); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a data entry. + * + * @function + * @alias Operation.revokeDataSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The account ID which owns the data entry. + * @param {string} opts.name - The name of the data entry + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeDataSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * name: 'foo' + * }); + * + */ +function revokeDataSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + if (typeof opts.name !== 'string' || opts.name.length > 64) { + throw new Error('name must be a string, up to 64 characters'); + } + var ledgerKey = _xdr["default"].LedgerKey.data(new _xdr["default"].LedgerKeyData({ + accountId: _keypair.Keypair.fromPublicKey(opts.account).xdrAccountId(), + dataName: opts.name + })); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a claimable balance. + * + * @function + * @alias Operation.revokeClaimableBalanceSponsorship + * @param {object} opts Options object + * @param {string} opts.balanceId - The sponsored claimable balance ID. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeClaimableBalanceSponsorship({ + * balanceId: '00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be', + * }); + * + */ +function revokeClaimableBalanceSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (typeof opts.balanceId !== 'string') { + throw new Error('balanceId is invalid'); + } + var ledgerKey = _xdr["default"].LedgerKey.claimableBalance(new _xdr["default"].LedgerKeyClaimableBalance({ + balanceId: _xdr["default"].ClaimableBalanceId.fromXDR(opts.balanceId, 'hex') + })); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Creates a "revoke sponsorship" operation for a liquidity pool. + * + * @function + * @alias Operation.revokeLiquidityPoolSponsorship + * @param {object} opts – Options object. + * @param {string} opts.liquidityPoolId - The sponsored liquidity pool ID in 'hex' string. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr Operation. + * + * @example + * const op = Operation.revokeLiquidityPoolSponsorship({ + * liquidityPoolId: 'dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380fac7', + * }); + * + */ +function revokeLiquidityPoolSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (typeof opts.liquidityPoolId !== 'string') { + throw new Error('liquidityPoolId is invalid'); + } + var ledgerKey = _xdr["default"].LedgerKey.liquidityPool(new _xdr["default"].LedgerKeyLiquidityPool({ + liquidityPoolId: _xdr["default"].PoolId.fromXDR(opts.liquidityPoolId, 'hex') + })); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipLedgerEntry(ledgerKey); + var opAttributes = { + body: _xdr["default"].OperationBody.revokeSponsorship(op) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} + +/** + * Create a "revoke sponsorship" operation for a signer. + * + * @function + * @alias Operation.revokeSignerSponsorship + * @param {object} opts Options object + * @param {string} opts.account - The account ID where the signer sponsorship is being removed from. + * @param {object} opts.signer - The signer whose sponsorship is being removed. + * @param {string} [opts.signer.ed25519PublicKey] - The ed25519 public key of the signer. + * @param {Buffer|string} [opts.signer.sha256Hash] - sha256 hash (Buffer or hex string). + * @param {Buffer|string} [opts.signer.preAuthTx] - Hash (Buffer or hex string) of transaction. + * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account. + * @returns {xdr.Operation} xdr operation + * + * @example + * const op = Operation.revokeSignerSponsorship({ + * account: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7 + * signer: { + * ed25519PublicKey: 'GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ' + * } + * }) + * + */ +function revokeSignerSponsorship() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.account)) { + throw new Error('account is invalid'); + } + var key; + if (opts.signer.ed25519PublicKey) { + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.signer.ed25519PublicKey)) { + throw new Error('signer.ed25519PublicKey is invalid.'); + } + var rawKey = _strkey.StrKey.decodeEd25519PublicKey(opts.signer.ed25519PublicKey); + key = new _xdr["default"].SignerKey.signerKeyTypeEd25519(rawKey); + } else if (opts.signer.preAuthTx) { + var buffer; + if (typeof opts.signer.preAuthTx === 'string') { + buffer = Buffer.from(opts.signer.preAuthTx, 'hex'); + } else { + buffer = opts.signer.preAuthTx; + } + if (!(Buffer.isBuffer(buffer) && buffer.length === 32)) { + throw new Error('signer.preAuthTx must be 32 bytes Buffer.'); + } + key = new _xdr["default"].SignerKey.signerKeyTypePreAuthTx(buffer); + } else if (opts.signer.sha256Hash) { + var _buffer; + if (typeof opts.signer.sha256Hash === 'string') { + _buffer = Buffer.from(opts.signer.sha256Hash, 'hex'); + } else { + _buffer = opts.signer.sha256Hash; + } + if (!(Buffer.isBuffer(_buffer) && _buffer.length === 32)) { + throw new Error('signer.sha256Hash must be 32 bytes Buffer.'); + } + key = new _xdr["default"].SignerKey.signerKeyTypeHashX(_buffer); + } else { + throw new Error('signer is invalid'); + } + var signer = new _xdr["default"].RevokeSponsorshipOpSigner({ + accountId: _keypair.Keypair.fromPublicKey(opts.account).xdrAccountId(), + signerKey: key + }); + var op = _xdr["default"].RevokeSponsorshipOp.revokeSponsorshipSigner(signer); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.revokeSponsorship(op); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/set_options.js b/node_modules/@stellar/stellar-base/lib/operations/set_options.js new file mode 100644 index 00000000..82bb85dc --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/set_options.js @@ -0,0 +1,135 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.setOptions = setOptions; +var _xdr = _interopRequireDefault(require("../xdr")); +var _keypair = require("../keypair"); +var _strkey = require("../strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/* eslint-disable no-param-reassign */ + +function weightCheckFunction(value, name) { + if (value >= 0 && value <= 255) { + return true; + } + throw new Error("".concat(name, " value must be between 0 and 255")); +} + +/** + * Returns an XDR SetOptionsOp. A "set options" operations set or clear account flags, + * set the account's inflation destination, and/or add new signers to the account. + * The flags used in `opts.clearFlags` and `opts.setFlags` can be the following: + * - `{@link AuthRequiredFlag}` + * - `{@link AuthRevocableFlag}` + * - `{@link AuthImmutableFlag}` + * - `{@link AuthClawbackEnabledFlag}` + * + * It's possible to set/clear multiple flags at once using logical or. + * + * @function + * @alias Operation.setOptions + * + * @param {object} opts Options object + * @param {string} [opts.inflationDest] - Set this account ID as the account's inflation destination. + * @param {(number|string)} [opts.clearFlags] - Bitmap integer for which account flags to clear. + * @param {(number|string)} [opts.setFlags] - Bitmap integer for which account flags to set. + * @param {number|string} [opts.masterWeight] - The master key weight. + * @param {number|string} [opts.lowThreshold] - The sum weight for the low threshold. + * @param {number|string} [opts.medThreshold] - The sum weight for the medium threshold. + * @param {number|string} [opts.highThreshold] - The sum weight for the high threshold. + * @param {object} [opts.signer] - Add or remove a signer from the account. The signer is + * deleted if the weight is 0. Only one of `ed25519PublicKey`, `sha256Hash`, `preAuthTx` should be defined. + * @param {string} [opts.signer.ed25519PublicKey] - The ed25519 public key of the signer. + * @param {Buffer|string} [opts.signer.sha256Hash] - sha256 hash (Buffer or hex string) of preimage that will unlock funds. Preimage should be used as signature of future transaction. + * @param {Buffer|string} [opts.signer.preAuthTx] - Hash (Buffer or hex string) of transaction that will unlock funds. + * @param {string} [opts.signer.ed25519SignedPayload] - Signed payload signer (ed25519 public key + raw payload) for atomic transaction signature disclosure. + * @param {number|string} [opts.signer.weight] - The weight of the new signer (0 to delete or 1-255) + * @param {string} [opts.homeDomain] - sets the home domain used for reverse federation lookup. + * @param {string} [opts.source] - The source account (defaults to transaction source). + * + * @returns {xdr.SetOptionsOp} XDR operation + * @see [Account flags](https://developers.stellar.org/docs/glossary/accounts/#flags) + */ +function setOptions(opts) { + var attributes = {}; + if (opts.inflationDest) { + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.inflationDest)) { + throw new Error('inflationDest is invalid'); + } + attributes.inflationDest = _keypair.Keypair.fromPublicKey(opts.inflationDest).xdrAccountId(); + } + attributes.clearFlags = this._checkUnsignedIntValue('clearFlags', opts.clearFlags); + attributes.setFlags = this._checkUnsignedIntValue('setFlags', opts.setFlags); + attributes.masterWeight = this._checkUnsignedIntValue('masterWeight', opts.masterWeight, weightCheckFunction); + attributes.lowThreshold = this._checkUnsignedIntValue('lowThreshold', opts.lowThreshold, weightCheckFunction); + attributes.medThreshold = this._checkUnsignedIntValue('medThreshold', opts.medThreshold, weightCheckFunction); + attributes.highThreshold = this._checkUnsignedIntValue('highThreshold', opts.highThreshold, weightCheckFunction); + if (opts.homeDomain !== undefined && typeof opts.homeDomain !== 'string') { + throw new TypeError('homeDomain argument must be of type String'); + } + attributes.homeDomain = opts.homeDomain; + if (opts.signer) { + var weight = this._checkUnsignedIntValue('signer.weight', opts.signer.weight, weightCheckFunction); + var key; + var setValues = 0; + if (opts.signer.ed25519PublicKey) { + if (!_strkey.StrKey.isValidEd25519PublicKey(opts.signer.ed25519PublicKey)) { + throw new Error('signer.ed25519PublicKey is invalid.'); + } + var rawKey = _strkey.StrKey.decodeEd25519PublicKey(opts.signer.ed25519PublicKey); + + // eslint-disable-next-line new-cap + key = new _xdr["default"].SignerKey.signerKeyTypeEd25519(rawKey); + setValues += 1; + } + if (opts.signer.preAuthTx) { + if (typeof opts.signer.preAuthTx === 'string') { + opts.signer.preAuthTx = Buffer.from(opts.signer.preAuthTx, 'hex'); + } + if (!(Buffer.isBuffer(opts.signer.preAuthTx) && opts.signer.preAuthTx.length === 32)) { + throw new Error('signer.preAuthTx must be 32 bytes Buffer.'); + } + + // eslint-disable-next-line new-cap + key = new _xdr["default"].SignerKey.signerKeyTypePreAuthTx(opts.signer.preAuthTx); + setValues += 1; + } + if (opts.signer.sha256Hash) { + if (typeof opts.signer.sha256Hash === 'string') { + opts.signer.sha256Hash = Buffer.from(opts.signer.sha256Hash, 'hex'); + } + if (!(Buffer.isBuffer(opts.signer.sha256Hash) && opts.signer.sha256Hash.length === 32)) { + throw new Error('signer.sha256Hash must be 32 bytes Buffer.'); + } + + // eslint-disable-next-line new-cap + key = new _xdr["default"].SignerKey.signerKeyTypeHashX(opts.signer.sha256Hash); + setValues += 1; + } + if (opts.signer.ed25519SignedPayload) { + if (!_strkey.StrKey.isValidSignedPayload(opts.signer.ed25519SignedPayload)) { + throw new Error('signer.ed25519SignedPayload is invalid.'); + } + var _rawKey = _strkey.StrKey.decodeSignedPayload(opts.signer.ed25519SignedPayload); + var signedPayloadXdr = _xdr["default"].SignerKeyEd25519SignedPayload.fromXDR(_rawKey); + + // eslint-disable-next-line new-cap + key = _xdr["default"].SignerKey.signerKeyTypeEd25519SignedPayload(signedPayloadXdr); + setValues += 1; + } + if (setValues !== 1) { + throw new Error('Signer object must contain exactly one of signer.ed25519PublicKey, signer.sha256Hash, signer.preAuthTx.'); + } + attributes.signer = new _xdr["default"].Signer({ + key: key, + weight: weight + }); + } + var setOptionsOp = new _xdr["default"].SetOptionsOp(attributes); + var opAttributes = {}; + opAttributes.body = _xdr["default"].OperationBody.setOptions(setOptionsOp); + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/operations/set_trustline_flags.js b/node_modules/@stellar/stellar-base/lib/operations/set_trustline_flags.js new file mode 100644 index 00000000..f6cd06e2 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/operations/set_trustline_flags.js @@ -0,0 +1,84 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.setTrustLineFlags = setTrustLineFlags; +var _xdr = _interopRequireDefault(require("../xdr")); +var _keypair = require("../keypair"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +/** + * Creates a trustline flag configuring operation. + * + * For the flags, set them to true to enable them and false to disable them. Any + * unmodified operations will be marked `undefined` in the result. + * + * Note that you can only **clear** the clawbackEnabled flag set; it must be set + * account-wide via operations.SetOptions (setting + * xdr.AccountFlags.clawbackEnabled). + * + * @function + * @alias Operation.setTrustLineFlags + * + * @param {object} opts - Options object + * @param {string} opts.trustor - the account whose trustline this is + * @param {Asset} opts.asset - the asset on the trustline + * @param {object} opts.flags - the set of flags to modify + * + * @param {bool} [opts.flags.authorized] - authorize account to perform + * transactions with its credit + * @param {bool} [opts.flags.authorizedToMaintainLiabilities] - authorize + * account to maintain and reduce liabilities for its credit + * @param {bool} [opts.flags.clawbackEnabled] - stop claimable balances on + * this trustlines from having clawbacks enabled (this flag can only be set + * to false!) + * @param {string} [opts.source] - The source account for the operation. + * Defaults to the transaction's source account. + * + * @note You must include at least one flag. + * + * @return {xdr.SetTrustLineFlagsOp} + * + * @link xdr.AccountFlags + * @link xdr.TrustLineFlags + * @see https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md#set-trustline-flags-operation + * @see https://developers.stellar.org/docs/start/list-of-operations/#set-options + */ +function setTrustLineFlags() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var attributes = {}; + if (_typeof(opts.flags) !== 'object' || Object.keys(opts.flags).length === 0) { + throw new Error('opts.flags must be a map of boolean flags to modify'); + } + var mapping = { + authorized: _xdr["default"].TrustLineFlags.authorizedFlag(), + authorizedToMaintainLiabilities: _xdr["default"].TrustLineFlags.authorizedToMaintainLiabilitiesFlag(), + clawbackEnabled: _xdr["default"].TrustLineFlags.trustlineClawbackEnabledFlag() + }; + + /* eslint no-bitwise: "off" */ + var clearFlag = 0; + var setFlag = 0; + Object.keys(opts.flags).forEach(function (flagName) { + if (!Object.prototype.hasOwnProperty.call(mapping, flagName)) { + throw new Error("unsupported flag name specified: ".concat(flagName)); + } + var flagValue = opts.flags[flagName]; + var bit = mapping[flagName].value; + if (flagValue === true) { + setFlag |= bit; + } else if (flagValue === false) { + clearFlag |= bit; + } + }); + attributes.trustor = _keypair.Keypair.fromPublicKey(opts.trustor).xdrAccountId(); + attributes.asset = opts.asset.toXDRObject(); + attributes.clearFlags = clearFlag; + attributes.setFlags = setFlag; + var opAttributes = { + body: _xdr["default"].OperationBody.setTrustLineFlags(new _xdr["default"].SetTrustLineFlagsOp(attributes)) + }; + this.setSourceAccount(opAttributes, opts); + return new _xdr["default"].Operation(opAttributes); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/scval.js b/node_modules/@stellar/stellar-base/lib/scval.js new file mode 100644 index 00000000..191b0329 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/scval.js @@ -0,0 +1,412 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.nativeToScVal = nativeToScVal; +exports.scValToNative = scValToNative; +var _xdr = _interopRequireDefault(require("./xdr")); +var _keypair = require("./keypair"); +var _address = require("./address"); +var _contract = require("./contract"); +var _index = require("./numbers/index"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +/** + * Attempts to convert native types into smart contract values + * ({@link xdr.ScVal}). + * + * Provides conversions from smart contract XDR values ({@link xdr.ScVal}) to + * native JavaScript types. + * + * The conversions are as follows: + * + * - xdr.ScVal -> passthrough + * - null/undefined -> scvVoid + * - string -> scvString (a copy is made) + * - UintArray8 -> scvBytes (a copy is made) + * - boolean -> scvBool + * + * - number/bigint -> the smallest possible XDR integer type that will fit the + * input value (if you want a specific type, use {@link ScInt}) + * + * - {@link Address} or {@link Contract} -> scvAddress (for contracts and + * public keys) + * + * - Array -> scvVec after attempting to convert each item of type `T` to an + * xdr.ScVal (recursively). note that all values must be the same type! + * + * - object -> scvMap after attempting to convert each key and value to an + * xdr.ScVal (recursively). note that there is no restriction on types + * matching anywhere (unlike arrays) + * + * When passing an integer-like native value, you can also optionally specify a + * type which will force a particular interpretation of that value. + * + * Note that not all type specifications are compatible with all `ScVal`s, e.g. + * `toScVal("a string", {type: "i256"})` will throw. + * + * @param {any} val - a native (or convertible) input value to wrap + * @param {object} [opts] - an optional set of hints around the type of + * conversion you'd like to see + * @param {string} [opts.type] - there is different behavior for different input + * types for `val`: + * + * - when `val` is an integer-like type (i.e. number|bigint), this will be + * forwarded to {@link ScInt} or forced to be u32/i32. + * + * - when `val` is an array type, this is forwarded to the recursion + * + * - when `val` is an object type (key-value entries), this should be an + * object in which each key has a pair of types (to represent forced types + * for the key and the value), where `null` (or a missing entry) indicates + * the default interpretation(s) (refer to the examples, below) + * + * - when `val` is a string type, this can be 'string' or 'symbol' to force + * a particular interpretation of `val`. + * + * - when `val` is a bytes-like type, this can be 'string', 'symbol', or + * 'bytes' to force a particular interpretation + * + * As a simple example, `nativeToScVal("hello", {type: 'symbol'})` will + * return an `scvSymbol`, whereas without the type it would have been an + * `scvString`. + * + * @returns {xdr.ScVal} a wrapped, smart, XDR version of the input value + * @throws {TypeError} if... + * - there are arrays with more than one type in them + * - there are values that do not have a sensible conversion (e.g. random XDR + * types, custom classes) + * - the type of the input object (or some inner value of said object) cannot + * be determined (via `typeof`) + * - the type you specified (via `opts.type`) is incompatible with the value + * you passed in (`val`), e.g. `nativeToScVal("a string", { type: 'i128' })`, + * though this does not apply for types that ignore `opts` (e.g. addresses). + * @see scValToNative + * + * @example + * nativeToScVal(1000); // gives ScValType === scvU64 + * nativeToScVal(1000n); // gives ScValType === scvU64 + * nativeToScVal(1n << 100n); // gives ScValType === scvU128 + * nativeToScVal(1000, { type: 'u32' }); // gives ScValType === scvU32 + * nativeToScVal(1000, { type: 'i125' }); // gives ScValType === scvI256 + * nativeToScVal("a string"); // gives ScValType === scvString + * nativeToScVal("a string", { type: 'symbol' }); // gives scvSymbol + * nativeToScVal(new Uint8Array(5)); // scvBytes + * nativeToScVal(new Uint8Array(5), { type: 'symbol' }); // scvSymbol + * nativeToScVal(null); // scvVoid + * nativeToScVal(true); // scvBool + * nativeToScVal([1, 2, 3]); // gives scvVec with each element as scvU64 + * nativeToScVal([1, 2, 3], { type: 'i128' }); // scvVec + * nativeToScVal({ 'hello': 1, 'world': [ true, false ] }, { + * type: { + * 'hello': [ 'symbol', 'i128' ], + * } + * }) + * // gives scvMap with entries: [ + * // [ scvSymbol, scvI128 ], + * // [ scvString, scvArray ] + * // ] + * + * @example + * import { + * nativeToScVal, + * scValToNative, + * ScInt, + * xdr + * } from '@stellar/stellar-base'; + * + * let gigaMap = { + * bool: true, + * void: null, + * u32: xdr.ScVal.scvU32(1), + * i32: xdr.ScVal.scvI32(1), + * u64: 1n, + * i64: -1n, + * u128: new ScInt(1).toU128(), + * i128: new ScInt(1).toI128(), + * u256: new ScInt(1).toU256(), + * i256: new ScInt(1).toI256(), + * map: { + * arbitrary: 1n, + * nested: 'values', + * etc: false + * }, + * vec: ['same', 'type', 'list'], + * }; + * + * // then, simply: + * let scv = nativeToScVal(gigaMap); // scv.switch() == xdr.ScValType.scvMap() + * + * // then... + * someContract.call("method", scv); + * + * // Similarly, the inverse should work: + * scValToNative(scv) == gigaMap; // true + */ +function nativeToScVal(val) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + switch (_typeof(val)) { + case 'object': + { + var _val$constructor$name, _val$constructor; + if (val === null) { + return _xdr["default"].ScVal.scvVoid(); + } + if (val instanceof _xdr["default"].ScVal) { + return val; // should we copy? + } + if (val instanceof _address.Address) { + return val.toScVal(); + } + if (val instanceof _keypair.Keypair) { + return nativeToScVal(val.publicKey(), { + type: 'address' + }); + } + if (val instanceof _contract.Contract) { + return val.address().toScVal(); + } + if (val instanceof Uint8Array || Buffer.isBuffer(val)) { + var _opts$type; + var copy = Uint8Array.from(val); + switch ((_opts$type = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type !== void 0 ? _opts$type : 'bytes') { + case 'bytes': + return _xdr["default"].ScVal.scvBytes(copy); + case 'symbol': + return _xdr["default"].ScVal.scvSymbol(copy); + case 'string': + return _xdr["default"].ScVal.scvString(copy); + default: + throw new TypeError("invalid type (".concat(opts.type, ") specified for bytes-like value")); + } + } + if (Array.isArray(val)) { + return _xdr["default"].ScVal.scvVec(val.map(function (v) { + return nativeToScVal(v, opts); + })); + } + if (((_val$constructor$name = (_val$constructor = val.constructor) === null || _val$constructor === void 0 ? void 0 : _val$constructor.name) !== null && _val$constructor$name !== void 0 ? _val$constructor$name : '') !== 'Object') { + var _val$constructor2; + throw new TypeError("cannot interpret ".concat((_val$constructor2 = val.constructor) === null || _val$constructor2 === void 0 ? void 0 : _val$constructor2.name, " value as ScVal (").concat(JSON.stringify(val), ")")); + } + return _xdr["default"].ScVal.scvMap(Object.entries(val) + // The Soroban runtime expects maps to have their keys in sorted + // order, so let's do that here as part of the conversion to prevent + // confusing error messages on execution. + .sort(function (_ref, _ref2) { + var _ref3 = _slicedToArray(_ref, 1), + key1 = _ref3[0]; + var _ref4 = _slicedToArray(_ref2, 1), + key2 = _ref4[0]; + return key1.localeCompare(key2); + }).map(function (_ref5) { + var _k, _opts$type2; + var _ref6 = _slicedToArray(_ref5, 2), + k = _ref6[0], + v = _ref6[1]; + // the type can be specified with an entry for the key and the value, + // e.g. val = { 'hello': 1 } and opts.type = { hello: [ 'symbol', + // 'u128' ]} or you can use `null` for the default interpretation + var _ref7 = (_k = ((_opts$type2 = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type2 !== void 0 ? _opts$type2 : {})[k]) !== null && _k !== void 0 ? _k : [null, null], + _ref8 = _slicedToArray(_ref7, 2), + keyType = _ref8[0], + valType = _ref8[1]; + var keyOpts = keyType ? { + type: keyType + } : {}; + var valOpts = valType ? { + type: valType + } : {}; + return new _xdr["default"].ScMapEntry({ + key: nativeToScVal(k, keyOpts), + val: nativeToScVal(v, valOpts) + }); + })); + } + case 'number': + case 'bigint': + switch (opts === null || opts === void 0 ? void 0 : opts.type) { + case 'u32': + return _xdr["default"].ScVal.scvU32(val); + case 'i32': + return _xdr["default"].ScVal.scvI32(val); + default: + break; + } + return new _index.ScInt(val, { + type: opts === null || opts === void 0 ? void 0 : opts.type + }).toScVal(); + case 'string': + { + var _opts$type3; + var optType = (_opts$type3 = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _opts$type3 !== void 0 ? _opts$type3 : 'string'; + switch (optType) { + case 'string': + return _xdr["default"].ScVal.scvString(val); + case 'symbol': + return _xdr["default"].ScVal.scvSymbol(val); + case 'address': + return new _address.Address(val).toScVal(); + case 'u32': + return _xdr["default"].ScVal.scvU32(parseInt(val, 10)); + case 'i32': + return _xdr["default"].ScVal.scvI32(parseInt(val, 10)); + default: + if (_index.XdrLargeInt.isType(optType)) { + return new _index.XdrLargeInt(optType, val).toScVal(); + } + throw new TypeError("invalid type (".concat(opts.type, ") specified for string value")); + } + } + case 'boolean': + return _xdr["default"].ScVal.scvBool(val); + case 'undefined': + return _xdr["default"].ScVal.scvVoid(); + case 'function': + // FIXME: Is this too helpful? + return nativeToScVal(val()); + default: + throw new TypeError("failed to convert typeof ".concat(_typeof(val), " (").concat(val, ")")); + } +} + +/** + * Given a smart contract value, attempt to convert it to a native type. + * Possible conversions include: + * + * - void -> `null` + * - u32, i32 -> `number` + * - u64, i64, u128, i128, u256, i256 -> `bigint` + * - vec -> `Array` of any of the above (via recursion) + * - map -> key-value object of any of the above (via recursion) + * - bool -> `boolean` + * - bytes -> `Uint8Array` + * - symbol -> `string` + * - string -> `string` IF the underlying buffer can be decoded as ascii/utf8, + * `Uint8Array` of the raw contents in any error case + * + * If no viable conversion can be determined, this just "unwraps" the smart + * value to return its underlying XDR value. + * + * @param {xdr.ScVal} scv - the input smart contract value + * + * @returns {any} + * @see nativeToScVal + */ +function scValToNative(scv) { + var _scv$vec, _scv$map; + // we use the verbose xdr.ScValType..value form here because it's faster + // than string comparisons and the underlying constants never need to be + // updated + switch (scv["switch"]().value) { + case _xdr["default"].ScValType.scvVoid().value: + return null; + + // these can be converted to bigints directly + case _xdr["default"].ScValType.scvU64().value: + case _xdr["default"].ScValType.scvI64().value: + return scv.value().toBigInt(); + + // these can be parsed by internal abstractions note that this can also + // handle the above two cases, but it's not as efficient (another + // type-check, parsing, etc.) + case _xdr["default"].ScValType.scvU128().value: + case _xdr["default"].ScValType.scvI128().value: + case _xdr["default"].ScValType.scvU256().value: + case _xdr["default"].ScValType.scvI256().value: + return (0, _index.scValToBigInt)(scv); + case _xdr["default"].ScValType.scvVec().value: + return ((_scv$vec = scv.vec()) !== null && _scv$vec !== void 0 ? _scv$vec : []).map(scValToNative); + case _xdr["default"].ScValType.scvAddress().value: + return _address.Address.fromScVal(scv).toString(); + case _xdr["default"].ScValType.scvMap().value: + return Object.fromEntries(((_scv$map = scv.map()) !== null && _scv$map !== void 0 ? _scv$map : []).map(function (entry) { + return [scValToNative(entry.key()), scValToNative(entry.val())]; + })); + + // these return the primitive type directly + case _xdr["default"].ScValType.scvBool().value: + case _xdr["default"].ScValType.scvU32().value: + case _xdr["default"].ScValType.scvI32().value: + case _xdr["default"].ScValType.scvBytes().value: + return scv.value(); + + // Symbols are limited to [a-zA-Z0-9_]+, so we can safely make ascii strings + // + // Strings, however, are "presented" as strings and we treat them as such + // (in other words, string = bytes with a hint that it's text). If the user + // encoded non-printable bytes in their string value, that's on them. + // + // Note that we assume a utf8 encoding (ascii-compatible). For other + // encodings, you should probably use bytes anyway. If it cannot be decoded, + // the raw bytes are returned. + case _xdr["default"].ScValType.scvSymbol().value: + case _xdr["default"].ScValType.scvString().value: + { + var v = scv.value(); // string|Buffer + if (Buffer.isBuffer(v) || ArrayBuffer.isView(v)) { + try { + return new TextDecoder().decode(v); + } catch (e) { + return new Uint8Array(v.buffer); // copy of bytes + } + } + return v; // string already + } + + // these can be converted to bigint + case _xdr["default"].ScValType.scvTimepoint().value: + case _xdr["default"].ScValType.scvDuration().value: + return new _xdr["default"].Uint64(scv.value()).toBigInt(); + case _xdr["default"].ScValType.scvError().value: + switch (scv.error()["switch"]().value) { + // Distinguish errors from the user contract. + case _xdr["default"].ScErrorType.sceContract().value: + return { + type: 'contract', + code: scv.error().contractCode() + }; + default: + { + var err = scv.error(); + return { + type: 'system', + code: err.code().value, + value: err.code().name + }; + } + } + + // in the fallthrough case, just return the underlying value directly + default: + return scv.value(); + } +} + +/// Inject a sortable map builder into the xdr module. +_xdr["default"].scvSortedMap = function (items) { + var sorted = Array.from(items).sort(function (a, b) { + // Both a and b are `ScMapEntry`s, so we need to sort by underlying key. + // + // We couldn't possibly handle every combination of keys since Soroban + // maps don't enforce consistent types, so we do a best-effort and try + // sorting by "number-like" or "string-like." + var nativeA = scValToNative(a.key()); + var nativeB = scValToNative(b.key()); + switch (_typeof(nativeA)) { + case 'number': + case 'bigint': + return nativeA < nativeB ? -1 : 1; + default: + return nativeA.toString().localeCompare(nativeB.toString()); + } + }); + return _xdr["default"].ScVal.scvMap(sorted); +}; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/signerkey.js b/node_modules/@stellar/stellar-base/lib/signerkey.js new file mode 100644 index 00000000..47e83d36 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/signerkey.js @@ -0,0 +1,102 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SignerKey = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _strkey = require("./strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * A container class with helpers to convert between signer keys + * (`xdr.SignerKey`) and {@link StrKey}s. + * + * It's primarly used for manipulating the `extraSigners` precondition on a + * {@link Transaction}. + * + * @see {@link TransactionBuilder.setExtraSigners} + */ +var SignerKey = exports.SignerKey = /*#__PURE__*/function () { + function SignerKey() { + _classCallCheck(this, SignerKey); + } + return _createClass(SignerKey, null, [{ + key: "decodeAddress", + value: + /** + * Decodes a StrKey address into an xdr.SignerKey instance. + * + * Only ED25519 public keys (G...), pre-auth transactions (T...), hashes + * (H...), and signed payloads (P...) can be signer keys. + * + * @param {string} address a StrKey-encoded signer address + * @returns {xdr.SignerKey} + */ + function decodeAddress(address) { + var signerKeyMap = { + ed25519PublicKey: _xdr["default"].SignerKey.signerKeyTypeEd25519, + preAuthTx: _xdr["default"].SignerKey.signerKeyTypePreAuthTx, + sha256Hash: _xdr["default"].SignerKey.signerKeyTypeHashX, + signedPayload: _xdr["default"].SignerKey.signerKeyTypeEd25519SignedPayload + }; + var vb = _strkey.StrKey.getVersionByteForPrefix(address); + var encoder = signerKeyMap[vb]; + if (!encoder) { + throw new Error("invalid signer key type (".concat(vb, ")")); + } + var raw = (0, _strkey.decodeCheck)(vb, address); + switch (vb) { + case 'signedPayload': + return encoder(new _xdr["default"].SignerKeyEd25519SignedPayload({ + ed25519: raw.slice(0, 32), + payload: raw.slice(32 + 4) + })); + case 'ed25519PublicKey': // falls through + case 'preAuthTx': // falls through + case 'sha256Hash': // falls through + default: + return encoder(raw); + } + } + + /** + * Encodes a signer key into its StrKey equivalent. + * + * @param {xdr.SignerKey} signerKey the signer + * @returns {string} the StrKey representation of the signer + */ + }, { + key: "encodeSignerKey", + value: function encodeSignerKey(signerKey) { + var strkeyType; + var raw; + switch (signerKey["switch"]()) { + case _xdr["default"].SignerKeyType.signerKeyTypeEd25519(): + strkeyType = 'ed25519PublicKey'; + raw = signerKey.value(); + break; + case _xdr["default"].SignerKeyType.signerKeyTypePreAuthTx(): + strkeyType = 'preAuthTx'; + raw = signerKey.value(); + break; + case _xdr["default"].SignerKeyType.signerKeyTypeHashX(): + strkeyType = 'sha256Hash'; + raw = signerKey.value(); + break; + case _xdr["default"].SignerKeyType.signerKeyTypeEd25519SignedPayload(): + strkeyType = 'signedPayload'; + raw = signerKey.ed25519SignedPayload().toXDR('raw'); + break; + default: + throw new Error("invalid SignerKey (type: ".concat(signerKey["switch"](), ")")); + } + return (0, _strkey.encodeCheck)(strkeyType, raw); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/signing.js b/node_modules/@stellar/stellar-base/lib/signing.js new file mode 100644 index 00000000..5cbd475e --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/signing.js @@ -0,0 +1,96 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FastSigning = void 0; +exports.generate = generate; +exports.sign = sign; +exports.verify = verify; +// This module provides the signing functionality used by the stellar network +// The code below may look a little strange... this is because we try to provide +// the most efficient signing method possible. First, we try to load the +// native `sodium-native` package for node.js environments, and if that fails we +// fallback to `tweetnacl` + +var actualMethods = {}; + +/** + * Use this flag to check if fast signing (provided by `sodium-native` package) is available. + * If your app is signing a large number of transaction or verifying a large number + * of signatures make sure `sodium-native` package is installed. + */ +var FastSigning = exports.FastSigning = checkFastSigning(); +function sign(data, secretKey) { + return actualMethods.sign(data, secretKey); +} +function verify(data, signature, publicKey) { + return actualMethods.verify(data, signature, publicKey); +} +function generate(secretKey) { + return actualMethods.generate(secretKey); +} +function checkFastSigning() { + return typeof window === 'undefined' ? checkFastSigningNode() : checkFastSigningBrowser(); +} +function checkFastSigningNode() { + // NOTE: we use commonjs style require here because es6 imports + // can only occur at the top level. thanks, obama. + var sodium; + try { + // eslint-disable-next-line + sodium = require('sodium-native'); + } catch (err) { + return checkFastSigningBrowser(); + } + if (!Object.keys(sodium).length) { + return checkFastSigningBrowser(); + } + actualMethods.generate = function (secretKey) { + var pk = Buffer.alloc(sodium.crypto_sign_PUBLICKEYBYTES); + var sk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES); + sodium.crypto_sign_seed_keypair(pk, sk, secretKey); + return pk; + }; + actualMethods.sign = function (data, secretKey) { + data = Buffer.from(data); + var signature = Buffer.alloc(sodium.crypto_sign_BYTES); + sodium.crypto_sign_detached(signature, data, secretKey); + return signature; + }; + actualMethods.verify = function (data, signature, publicKey) { + data = Buffer.from(data); + try { + return sodium.crypto_sign_verify_detached(signature, data, publicKey); + } catch (e) { + return false; + } + }; + return true; +} +function checkFastSigningBrowser() { + // fallback to `tweetnacl` if we're in the browser or + // if there was a failure installing `sodium-native` + // eslint-disable-next-line + var nacl = require('tweetnacl'); + actualMethods.generate = function (secretKey) { + var secretKeyUint8 = new Uint8Array(secretKey); + var naclKeys = nacl.sign.keyPair.fromSeed(secretKeyUint8); + return Buffer.from(naclKeys.publicKey); + }; + actualMethods.sign = function (data, secretKey) { + data = Buffer.from(data); + data = new Uint8Array(data.toJSON().data); + secretKey = new Uint8Array(secretKey.toJSON().data); + var signature = nacl.sign.detached(data, secretKey); + return Buffer.from(signature); + }; + actualMethods.verify = function (data, signature, publicKey) { + data = Buffer.from(data); + data = new Uint8Array(data.toJSON().data); + signature = new Uint8Array(signature.toJSON().data); + publicKey = new Uint8Array(publicKey.toJSON().data); + return nacl.sign.detached.verify(data, signature, publicKey); + }; + return false; +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/soroban.js b/node_modules/@stellar/stellar-base/lib/soroban.js new file mode 100644 index 00000000..5012a7db --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/soroban.js @@ -0,0 +1,95 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Soroban = void 0; +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toArray(r) { return _arrayWithHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* Helper class to assist with formatting and parsing token amounts. */ +var Soroban = exports.Soroban = /*#__PURE__*/function () { + function Soroban() { + _classCallCheck(this, Soroban); + } + return _createClass(Soroban, null, [{ + key: "formatTokenAmount", + value: + /** + * Given a whole number smart contract amount of a token and an amount of + * decimal places (if the token has any), it returns a "display" value. + * + * All arithmetic inside the contract is performed on integers to avoid + * potential precision and consistency issues of floating-point. + * + * @param {string} amount the token amount you want to display + * @param {number} decimals specify how many decimal places a token has + * + * @returns {string} the display value + * @throws {TypeError} if the given amount has a decimal point already + * @example + * formatTokenAmount("123000", 4) === "12.3"; + */ + function formatTokenAmount(amount, decimals) { + if (amount.includes('.')) { + throw new TypeError('No decimals are allowed'); + } + var formatted = amount; + if (decimals > 0) { + if (decimals > formatted.length) { + formatted = ['0', formatted.toString().padStart(decimals, '0')].join('.'); + } else { + formatted = [formatted.slice(0, -decimals), formatted.slice(-decimals)].join('.'); + } + } + + // remove trailing zero if any + return formatted.replace(/(\.\d*?)0+$/, '$1'); + } + + /** + * Parse a token amount to use it on smart contract + * + * This function takes the display value and its decimals (if the token has + * any) and returns a string that'll be used within the smart contract. + * + * @param {string} value the token amount you want to use it on smart + * contract which you've been displaying in a UI + * @param {number} decimals the number of decimal places expected in the + * display value (different than the "actual" number, because suffix zeroes + * might not be present) + * + * @returns {string} the whole number token amount represented by the display + * value with the decimal places shifted over + * + * @example + * const displayValueAmount = "123.4560" + * const parsedAmtForSmartContract = parseTokenAmount(displayValueAmount, 5); + * parsedAmtForSmartContract === "12345600" + */ + }, { + key: "parseTokenAmount", + value: function parseTokenAmount(value, decimals) { + var _fraction$padEnd; + var _value$split$slice = value.split('.').slice(), + _value$split$slice2 = _toArray(_value$split$slice), + whole = _value$split$slice2[0], + fraction = _value$split$slice2[1], + rest = _value$split$slice2.slice(2); + if (rest.length) { + throw new Error("Invalid decimal value: ".concat(value)); + } + var shifted = BigInt(whole + ((_fraction$padEnd = fraction === null || fraction === void 0 ? void 0 : fraction.padEnd(decimals, '0')) !== null && _fraction$padEnd !== void 0 ? _fraction$padEnd : '0'.repeat(decimals))); + return shifted.toString(); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/sorobandata_builder.js b/node_modules/@stellar/stellar-base/lib/sorobandata_builder.js new file mode 100644 index 00000000..c86b0d8f --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/sorobandata_builder.js @@ -0,0 +1,217 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SorobanDataBuilder = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Supports building {@link xdr.SorobanTransactionData} structures with various + * items set to specific values. + * + * This is recommended for when you are building + * {@link Operation.extendFootprintTtl} / {@link Operation.restoreFootprint} + * operations and need to {@link TransactionBuilder.setSorobanData} to avoid + * (re)building the entire data structure from scratch. + * + * @constructor + * + * @param {string | xdr.SorobanTransactionData} [sorobanData] either a + * base64-encoded string that represents an + * {@link xdr.SorobanTransactionData} instance or an XDR instance itself + * (it will be copied); if omitted or "falsy" (e.g. an empty string), it + * starts with an empty instance + * + * @example + * // You want to use an existing data blob but override specific parts. + * const newData = new SorobanDataBuilder(existing) + * .setReadOnly(someLedgerKeys) + * .setRefundableFee("1000") + * .build(); + * + * // You want an instance from scratch + * const newData = new SorobanDataBuilder() + * .setFootprint([someLedgerKey], []) + * .setRefundableFee("1000") + * .build(); + */ +var SorobanDataBuilder = exports.SorobanDataBuilder = /*#__PURE__*/function () { + function SorobanDataBuilder(sorobanData) { + _classCallCheck(this, SorobanDataBuilder); + _defineProperty(this, "_data", void 0); + var data; + if (!sorobanData) { + data = new _xdr["default"].SorobanTransactionData({ + resources: new _xdr["default"].SorobanResources({ + footprint: new _xdr["default"].LedgerFootprint({ + readOnly: [], + readWrite: [] + }), + instructions: 0, + readBytes: 0, + writeBytes: 0 + }), + ext: new _xdr["default"].ExtensionPoint(0), + resourceFee: new _xdr["default"].Int64(0) + }); + } else if (typeof sorobanData === 'string' || ArrayBuffer.isView(sorobanData)) { + data = SorobanDataBuilder.fromXDR(sorobanData); + } else { + data = SorobanDataBuilder.fromXDR(sorobanData.toXDR()); // copy + } + this._data = data; + } + + /** + * Decodes and builds a {@link xdr.SorobanTransactionData} instance. + * @param {Uint8Array|Buffer|string} data raw input to decode + * @returns {xdr.SorobanTransactionData} + */ + return _createClass(SorobanDataBuilder, [{ + key: "setResourceFee", + value: + /** + * Sets the resource fee portion of the Soroban data. + * @param {number | bigint | string} fee the resource fee to set (int64) + * @returns {SorobanDataBuilder} + */ + function setResourceFee(fee) { + this._data.resourceFee(new _xdr["default"].Int64(fee)); + return this; + } + + /** + * Sets up the resource metrics. + * + * You should almost NEVER need this, as its often generated / provided to you + * by transaction simulation/preflight from a Soroban RPC server. + * + * @param {number} cpuInstrs number of CPU instructions + * @param {number} readBytes number of bytes being read + * @param {number} writeBytes number of bytes being written + * + * @returns {SorobanDataBuilder} + */ + }, { + key: "setResources", + value: function setResources(cpuInstrs, readBytes, writeBytes) { + this._data.resources().instructions(cpuInstrs); + this._data.resources().readBytes(readBytes); + this._data.resources().writeBytes(writeBytes); + return this; + } + + /** + * Appends the given ledger keys to the existing storage access footprint. + * @param {xdr.LedgerKey[]} readOnly read-only keys to add + * @param {xdr.LedgerKey[]} readWrite read-write keys to add + * @returns {SorobanDataBuilder} this builder instance + */ + }, { + key: "appendFootprint", + value: function appendFootprint(readOnly, readWrite) { + return this.setFootprint(this.getReadOnly().concat(readOnly), this.getReadWrite().concat(readWrite)); + } + + /** + * Sets the storage access footprint to be a certain set of ledger keys. + * + * You can also set each field explicitly via + * {@link SorobanDataBuilder.setReadOnly} and + * {@link SorobanDataBuilder.setReadWrite} or add to the existing footprint + * via {@link SorobanDataBuilder.appendFootprint}. + * + * Passing `null|undefined` to either parameter will IGNORE the existing + * values. If you want to clear them, pass `[]`, instead. + * + * @param {xdr.LedgerKey[]|null} [readOnly] the set of ledger keys to set in + * the read-only portion of the transaction's `sorobanData`, or `null | + * undefined` to keep the existing keys + * @param {xdr.LedgerKey[]|null} [readWrite] the set of ledger keys to set in + * the read-write portion of the transaction's `sorobanData`, or `null | + * undefined` to keep the existing keys + * @returns {SorobanDataBuilder} this builder instance + */ + }, { + key: "setFootprint", + value: function setFootprint(readOnly, readWrite) { + if (readOnly !== null) { + // null means "leave me alone" + this.setReadOnly(readOnly); + } + if (readWrite !== null) { + this.setReadWrite(readWrite); + } + return this; + } + + /** + * @param {xdr.LedgerKey[]} readOnly read-only keys in the access footprint + * @returns {SorobanDataBuilder} + */ + }, { + key: "setReadOnly", + value: function setReadOnly(readOnly) { + this._data.resources().footprint().readOnly(readOnly !== null && readOnly !== void 0 ? readOnly : []); + return this; + } + + /** + * @param {xdr.LedgerKey[]} readWrite read-write keys in the access footprint + * @returns {SorobanDataBuilder} + */ + }, { + key: "setReadWrite", + value: function setReadWrite(readWrite) { + this._data.resources().footprint().readWrite(readWrite !== null && readWrite !== void 0 ? readWrite : []); + return this; + } + + /** + * @returns {xdr.SorobanTransactionData} a copy of the final data structure + */ + }, { + key: "build", + value: function build() { + return _xdr["default"].SorobanTransactionData.fromXDR(this._data.toXDR()); // clone + } + + // + // getters follow + // + + /** @returns {xdr.LedgerKey[]} the read-only storage access pattern */ + }, { + key: "getReadOnly", + value: function getReadOnly() { + return this.getFootprint().readOnly(); + } + + /** @returns {xdr.LedgerKey[]} the read-write storage access pattern */ + }, { + key: "getReadWrite", + value: function getReadWrite() { + return this.getFootprint().readWrite(); + } + + /** @returns {xdr.LedgerFootprint} the storage access pattern */ + }, { + key: "getFootprint", + value: function getFootprint() { + return this._data.resources().footprint(); + } + }], [{ + key: "fromXDR", + value: function fromXDR(data) { + return _xdr["default"].SorobanTransactionData.fromXDR(data, typeof data === 'string' ? 'base64' : 'raw'); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/strkey.js b/node_modules/@stellar/stellar-base/lib/strkey.js new file mode 100644 index 00000000..0159b251 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/strkey.js @@ -0,0 +1,399 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.StrKey = void 0; +exports.decodeCheck = decodeCheck; +exports.encodeCheck = encodeCheck; +var _base = _interopRequireDefault(require("base32.js")); +var _checksum = require("./util/checksum"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint no-bitwise: ["error", {"allow": ["<<", ">>", "^", "&", "&="]}] */ +var versionBytes = { + ed25519PublicKey: 6 << 3, + // G (when encoded in base32) + ed25519SecretSeed: 18 << 3, + // S + med25519PublicKey: 12 << 3, + // M + preAuthTx: 19 << 3, + // T + sha256Hash: 23 << 3, + // X + signedPayload: 15 << 3, + // P + contract: 2 << 3 // C +}; +var strkeyTypes = { + G: 'ed25519PublicKey', + S: 'ed25519SecretSeed', + M: 'med25519PublicKey', + T: 'preAuthTx', + X: 'sha256Hash', + P: 'signedPayload', + C: 'contract' +}; + +/** + * StrKey is a helper class that allows encoding and decoding Stellar keys + * to/from strings, i.e. between their binary (Buffer, xdr.PublicKey, etc.) and + * string (i.e. "GABCD...", etc.) representations. + */ +var StrKey = exports.StrKey = /*#__PURE__*/function () { + function StrKey() { + _classCallCheck(this, StrKey); + } + return _createClass(StrKey, null, [{ + key: "encodeEd25519PublicKey", + value: + /** + * Encodes `data` to strkey ed25519 public key. + * + * @param {Buffer} data raw data to encode + * @returns {string} "G..." representation of the key + */ + function encodeEd25519PublicKey(data) { + return encodeCheck('ed25519PublicKey', data); + } + + /** + * Decodes strkey ed25519 public key to raw data. + * + * If the parameter is a muxed account key ("M..."), this will only encode it + * as a basic Ed25519 key (as if in "G..." format). + * + * @param {string} data "G..." (or "M...") key representation to decode + * @returns {Buffer} raw key + */ + }, { + key: "decodeEd25519PublicKey", + value: function decodeEd25519PublicKey(data) { + return decodeCheck('ed25519PublicKey', data); + } + + /** + * Returns true if the given Stellar public key is a valid ed25519 public key. + * @param {string} publicKey public key to check + * @returns {boolean} + */ + }, { + key: "isValidEd25519PublicKey", + value: function isValidEd25519PublicKey(publicKey) { + return isValid('ed25519PublicKey', publicKey); + } + + /** + * Encodes data to strkey ed25519 seed. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeEd25519SecretSeed", + value: function encodeEd25519SecretSeed(data) { + return encodeCheck('ed25519SecretSeed', data); + } + + /** + * Decodes strkey ed25519 seed to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodeEd25519SecretSeed", + value: function decodeEd25519SecretSeed(address) { + return decodeCheck('ed25519SecretSeed', address); + } + + /** + * Returns true if the given Stellar secret key is a valid ed25519 secret seed. + * @param {string} seed seed to check + * @returns {boolean} + */ + }, { + key: "isValidEd25519SecretSeed", + value: function isValidEd25519SecretSeed(seed) { + return isValid('ed25519SecretSeed', seed); + } + + /** + * Encodes data to strkey med25519 public key. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeMed25519PublicKey", + value: function encodeMed25519PublicKey(data) { + return encodeCheck('med25519PublicKey', data); + } + + /** + * Decodes strkey med25519 public key to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodeMed25519PublicKey", + value: function decodeMed25519PublicKey(address) { + return decodeCheck('med25519PublicKey', address); + } + + /** + * Returns true if the given Stellar public key is a valid med25519 public key. + * @param {string} publicKey public key to check + * @returns {boolean} + */ + }, { + key: "isValidMed25519PublicKey", + value: function isValidMed25519PublicKey(publicKey) { + return isValid('med25519PublicKey', publicKey); + } + + /** + * Encodes data to strkey preAuthTx. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodePreAuthTx", + value: function encodePreAuthTx(data) { + return encodeCheck('preAuthTx', data); + } + + /** + * Decodes strkey PreAuthTx to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodePreAuthTx", + value: function decodePreAuthTx(address) { + return decodeCheck('preAuthTx', address); + } + + /** + * Encodes data to strkey sha256 hash. + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeSha256Hash", + value: function encodeSha256Hash(data) { + return encodeCheck('sha256Hash', data); + } + + /** + * Decodes strkey sha256 hash to raw data. + * @param {string} address data to decode + * @returns {Buffer} + */ + }, { + key: "decodeSha256Hash", + value: function decodeSha256Hash(address) { + return decodeCheck('sha256Hash', address); + } + + /** + * Encodes raw data to strkey signed payload (P...). + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeSignedPayload", + value: function encodeSignedPayload(data) { + return encodeCheck('signedPayload', data); + } + + /** + * Decodes strkey signed payload (P...) to raw data. + * @param {string} address address to decode + * @returns {Buffer} + */ + }, { + key: "decodeSignedPayload", + value: function decodeSignedPayload(address) { + return decodeCheck('signedPayload', address); + } + + /** + * Checks validity of alleged signed payload (P...) strkey address. + * @param {string} address signer key to check + * @returns {boolean} + */ + }, { + key: "isValidSignedPayload", + value: function isValidSignedPayload(address) { + return isValid('signedPayload', address); + } + + /** + * Encodes raw data to strkey contract (C...). + * @param {Buffer} data data to encode + * @returns {string} + */ + }, { + key: "encodeContract", + value: function encodeContract(data) { + return encodeCheck('contract', data); + } + + /** + * Decodes strkey contract (C...) to raw data. + * @param {string} address address to decode + * @returns {Buffer} + */ + }, { + key: "decodeContract", + value: function decodeContract(address) { + return decodeCheck('contract', address); + } + + /** + * Checks validity of alleged contract (C...) strkey address. + * @param {string} address signer key to check + * @returns {boolean} + */ + }, { + key: "isValidContract", + value: function isValidContract(address) { + return isValid('contract', address); + } + }, { + key: "getVersionByteForPrefix", + value: function getVersionByteForPrefix(address) { + return strkeyTypes[address[0]]; + } + }]); +}(); +/** + * Sanity-checks whether or not a strkey *appears* valid. + * + * @param {string} versionByteName the type of strkey to expect in `encoded` + * @param {string} encoded the strkey to validate + * + * @return {Boolean} whether or not the `encoded` strkey appears valid for the + * `versionByteName` strkey type (see `versionBytes`, above). + * + * @note This isn't a *definitive* check of validity, but rather a best-effort + * check based on (a) input length, (b) whether or not it can be decoded, + * and (c) output length. + */ +function isValid(versionByteName, encoded) { + if (typeof encoded !== 'string') { + return false; + } + + // basic length checks on the strkey lengths + switch (versionByteName) { + case 'ed25519PublicKey': // falls through + case 'ed25519SecretSeed': // falls through + case 'preAuthTx': // falls through + case 'sha256Hash': // falls through + case 'contract': + if (encoded.length !== 56) { + return false; + } + break; + case 'med25519PublicKey': + if (encoded.length !== 69) { + return false; + } + break; + case 'signedPayload': + if (encoded.length < 56 || encoded.length > 165) { + return false; + } + break; + default: + return false; + } + var decoded = ''; + try { + decoded = decodeCheck(versionByteName, encoded); + } catch (err) { + return false; + } + + // basic length checks on the resulting buffer sizes + switch (versionByteName) { + case 'ed25519PublicKey': // falls through + case 'ed25519SecretSeed': // falls through + case 'preAuthTx': // falls through + case 'sha256Hash': // falls through + case 'contract': + return decoded.length === 32; + case 'med25519PublicKey': + return decoded.length === 40; + // +8 bytes for the ID + + case 'signedPayload': + return ( + // 32 for the signer, +4 for the payload size, then either +4 for the + // min or +64 for the max payload + decoded.length >= 32 + 4 + 4 && decoded.length <= 32 + 4 + 64 + ); + default: + return false; + } +} +function decodeCheck(versionByteName, encoded) { + if (typeof encoded !== 'string') { + throw new TypeError('encoded argument must be of type String'); + } + var decoded = _base["default"].decode(encoded); + var versionByte = decoded[0]; + var payload = decoded.slice(0, -2); + var data = payload.slice(1); + var checksum = decoded.slice(-2); + if (encoded !== _base["default"].encode(decoded)) { + throw new Error('invalid encoded string'); + } + var expectedVersion = versionBytes[versionByteName]; + if (expectedVersion === undefined) { + throw new Error("".concat(versionByteName, " is not a valid version byte name. ") + "Expected one of ".concat(Object.keys(versionBytes).join(', '))); + } + if (versionByte !== expectedVersion) { + throw new Error("invalid version byte. expected ".concat(expectedVersion, ", got ").concat(versionByte)); + } + var expectedChecksum = calculateChecksum(payload); + if (!(0, _checksum.verifyChecksum)(expectedChecksum, checksum)) { + throw new Error("invalid checksum"); + } + return Buffer.from(data); +} +function encodeCheck(versionByteName, data) { + if (data === null || data === undefined) { + throw new Error('cannot encode null data'); + } + var versionByte = versionBytes[versionByteName]; + if (versionByte === undefined) { + throw new Error("".concat(versionByteName, " is not a valid version byte name. ") + "Expected one of ".concat(Object.keys(versionBytes).join(', '))); + } + data = Buffer.from(data); + var versionBuffer = Buffer.from([versionByte]); + var payload = Buffer.concat([versionBuffer, data]); + var checksum = Buffer.from(calculateChecksum(payload)); + var unencoded = Buffer.concat([payload, checksum]); + return _base["default"].encode(unencoded); +} + +// Computes the CRC16-XModem checksum of `payload` in little-endian order +function calculateChecksum(payload) { + var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0]; + var crc16 = 0x0; + for (var i = 0; i < payload.length; i += 1) { + var _byte = payload[i]; + var lookupIndex = crc16 >> 8 ^ _byte; + crc16 = crc16 << 8 ^ crcTable[lookupIndex]; + crc16 &= 0xffff; + } + var checksum = new Uint8Array(2); + checksum[0] = crc16 & 0xff; + checksum[1] = crc16 >> 8 & 0xff; + return checksum; +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/transaction.js b/node_modules/@stellar/stellar-base/lib/transaction.js new file mode 100644 index 00000000..d7ff289f --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/transaction.js @@ -0,0 +1,367 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Transaction = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _hashing = require("./hashing"); +var _strkey = require("./strkey"); +var _operation = require("./operation"); +var _memo = require("./memo"); +var _transaction_base = require("./transaction_base"); +var _decode_encode_muxed_account = require("./util/decode_encode_muxed_account"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Use {@link TransactionBuilder} to build a transaction object. If you have an + * object or base64-encoded string of the transaction envelope XDR, use {@link + * TransactionBuilder.fromXDR}. + * + * Once a Transaction has been created, its attributes and operations should not + * be changed. You should only add signatures (using {@link Transaction#sign}) + * to a Transaction object before submitting to the network or forwarding on to + * additional signers. + * + * @constructor + * + * @param {string|xdr.TransactionEnvelope} envelope - transaction envelope + * object or base64 encoded string + * @param {string} [networkPassphrase] - passphrase of the target stellar + * network (e.g. "Public Global Stellar Network ; September 2015") + * + * @extends TransactionBase + */ +var Transaction = exports.Transaction = /*#__PURE__*/function (_TransactionBase) { + function Transaction(envelope, networkPassphrase) { + var _this; + _classCallCheck(this, Transaction); + if (typeof envelope === 'string') { + var buffer = Buffer.from(envelope, 'base64'); + envelope = _xdr["default"].TransactionEnvelope.fromXDR(buffer); + } + var envelopeType = envelope["switch"](); + if (!(envelopeType === _xdr["default"].EnvelopeType.envelopeTypeTxV0() || envelopeType === _xdr["default"].EnvelopeType.envelopeTypeTx())) { + throw new Error("Invalid TransactionEnvelope: expected an envelopeTypeTxV0 or envelopeTypeTx but received an ".concat(envelopeType.name, ".")); + } + var txEnvelope = envelope.value(); + var tx = txEnvelope.tx(); + var fee = tx.fee().toString(); + var signatures = (txEnvelope.signatures() || []).slice(); + _this = _callSuper(this, Transaction, [tx, signatures, fee, networkPassphrase]); + _this._envelopeType = envelopeType; + _this._memo = tx.memo(); + _this._sequence = tx.seqNum().toString(); + switch (_this._envelopeType) { + case _xdr["default"].EnvelopeType.envelopeTypeTxV0(): + _this._source = _strkey.StrKey.encodeEd25519PublicKey(_this.tx.sourceAccountEd25519()); + break; + default: + _this._source = (0, _decode_encode_muxed_account.encodeMuxedAccountToAddress)(_this.tx.sourceAccount()); + break; + } + var cond = null; + var timeBounds = null; + switch (_this._envelopeType) { + case _xdr["default"].EnvelopeType.envelopeTypeTxV0(): + timeBounds = tx.timeBounds(); + break; + case _xdr["default"].EnvelopeType.envelopeTypeTx(): + switch (tx.cond()["switch"]()) { + case _xdr["default"].PreconditionType.precondTime(): + timeBounds = tx.cond().timeBounds(); + break; + case _xdr["default"].PreconditionType.precondV2(): + cond = tx.cond().v2(); + timeBounds = cond.timeBounds(); + break; + default: + break; + } + break; + default: + break; + } + if (timeBounds) { + _this._timeBounds = { + minTime: timeBounds.minTime().toString(), + maxTime: timeBounds.maxTime().toString() + }; + } + if (cond) { + var ledgerBounds = cond.ledgerBounds(); + if (ledgerBounds) { + _this._ledgerBounds = { + minLedger: ledgerBounds.minLedger(), + maxLedger: ledgerBounds.maxLedger() + }; + } + var minSeq = cond.minSeqNum(); + if (minSeq) { + _this._minAccountSequence = minSeq.toString(); + } + _this._minAccountSequenceAge = cond.minSeqAge(); + _this._minAccountSequenceLedgerGap = cond.minSeqLedgerGap(); + _this._extraSigners = cond.extraSigners(); + } + var operations = tx.operations() || []; + _this._operations = operations.map(function (op) { + return _operation.Operation.fromXDRObject(op); + }); + return _this; + } + + /** + * @type {object} + * @property {string} 64 bit unix timestamp + * @property {string} 64 bit unix timestamp + * @readonly + */ + _inherits(Transaction, _TransactionBase); + return _createClass(Transaction, [{ + key: "timeBounds", + get: function get() { + return this._timeBounds; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {object} + * @property {number} minLedger - smallest ledger bound (uint32) + * @property {number} maxLedger - largest ledger bound (or 0 for inf) + * @readonly + */ + }, { + key: "ledgerBounds", + get: function get() { + return this._ledgerBounds; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * 64 bit account sequence + * @readonly + * @type {string} + */ + }, { + key: "minAccountSequence", + get: function get() { + return this._minAccountSequence; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * 64 bit number of seconds + * @type {number} + * @readonly + */ + }, { + key: "minAccountSequenceAge", + get: function get() { + return this._minAccountSequenceAge; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * 32 bit number of ledgers + * @type {number} + * @readonly + */ + }, { + key: "minAccountSequenceLedgerGap", + get: function get() { + return this._minAccountSequenceLedgerGap; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * array of extra signers ({@link StrKey}s) + * @type {string[]} + * @readonly + */ + }, { + key: "extraSigners", + get: function get() { + return this._extraSigners; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "sequence", + get: function get() { + return this._sequence; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "source", + get: function get() { + return this._source; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {Array.} + * @readonly + */ + }, { + key: "operations", + get: function get() { + return this._operations; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "memo", + get: function get() { + return _memo.Memo.fromXDRObject(this._memo); + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * Returns the "signature base" of this transaction, which is the value + * that, when hashed, should be signed to create a signature that + * validators on the Stellar Network will accept. + * + * It is composed of a 4 prefix bytes followed by the xdr-encoded form + * of this transaction. + * @returns {Buffer} + */ + }, { + key: "signatureBase", + value: function signatureBase() { + var tx = this.tx; + + // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0 + // we need a Transaction to generate the signature base + if (this._envelopeType === _xdr["default"].EnvelopeType.envelopeTypeTxV0()) { + tx = _xdr["default"].Transaction.fromXDR(Buffer.concat([ + // TransactionV0 is a transaction with the AccountID discriminant + // stripped off, we need to put it back to build a valid transaction + // which we can use to build a TransactionSignaturePayloadTaggedTransaction + _xdr["default"].PublicKeyType.publicKeyTypeEd25519().toXDR(), tx.toXDR()])); + } + var taggedTransaction = new _xdr["default"].TransactionSignaturePayloadTaggedTransaction.envelopeTypeTx(tx); + var txSignature = new _xdr["default"].TransactionSignaturePayload({ + networkId: _xdr["default"].Hash.fromXDR((0, _hashing.hash)(this.networkPassphrase)), + taggedTransaction: taggedTransaction + }); + return txSignature.toXDR(); + } + + /** + * To envelope returns a xdr.TransactionEnvelope which can be submitted to the network. + * @returns {xdr.TransactionEnvelope} + */ + }, { + key: "toEnvelope", + value: function toEnvelope() { + var rawTx = this.tx.toXDR(); + var signatures = this.signatures.slice(); // make a copy of the signatures + + var envelope; + switch (this._envelopeType) { + case _xdr["default"].EnvelopeType.envelopeTypeTxV0(): + envelope = new _xdr["default"].TransactionEnvelope.envelopeTypeTxV0(new _xdr["default"].TransactionV0Envelope({ + tx: _xdr["default"].TransactionV0.fromXDR(rawTx), + // make a copy of tx + signatures: signatures + })); + break; + case _xdr["default"].EnvelopeType.envelopeTypeTx(): + envelope = new _xdr["default"].TransactionEnvelope.envelopeTypeTx(new _xdr["default"].TransactionV1Envelope({ + tx: _xdr["default"].Transaction.fromXDR(rawTx), + // make a copy of tx + signatures: signatures + })); + break; + default: + throw new Error("Invalid TransactionEnvelope: expected an envelopeTypeTxV0 or envelopeTypeTx but received an ".concat(this._envelopeType.name, ".")); + } + return envelope; + } + + /** + * Calculate the claimable balance ID for an operation within the transaction. + * + * @param {integer} opIndex the index of the CreateClaimableBalance op + * @returns {string} a hex string representing the claimable balance ID + * + * @throws {RangeError} for invalid `opIndex` value + * @throws {TypeError} if op at `opIndex` is not `CreateClaimableBalance` + * @throws for general XDR un/marshalling failures + * + * @see https://github.com/stellar/go/blob/d712346e61e288d450b0c08038c158f8848cc3e4/txnbuild/transaction.go#L392-L435 + * + */ + }, { + key: "getClaimableBalanceId", + value: function getClaimableBalanceId(opIndex) { + // Validate and then extract the operation from the transaction. + if (!Number.isInteger(opIndex) || opIndex < 0 || opIndex >= this.operations.length) { + throw new RangeError('invalid operation index'); + } + var op = this.operations[opIndex]; + try { + op = _operation.Operation.createClaimableBalance(op); + } catch (err) { + throw new TypeError("expected createClaimableBalance, got ".concat(op.type, ": ").concat(err)); + } + + // Always use the transaction's *unmuxed* source. + var account = _strkey.StrKey.decodeEd25519PublicKey((0, _decode_encode_muxed_account.extractBaseAddress)(this.source)); + var operationId = _xdr["default"].HashIdPreimage.envelopeTypeOpId(new _xdr["default"].HashIdPreimageOperationId({ + sourceAccount: _xdr["default"].AccountId.publicKeyTypeEd25519(account), + seqNum: _xdr["default"].SequenceNumber.fromString(this.sequence), + opNum: opIndex + })); + var opIdHash = (0, _hashing.hash)(operationId.toXDR('raw')); + var balanceId = _xdr["default"].ClaimableBalanceId.claimableBalanceIdTypeV0(opIdHash); + return balanceId.toXDR('hex'); + } + }]); +}(_transaction_base.TransactionBase); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/transaction_base.js b/node_modules/@stellar/stellar-base/lib/transaction_base.js new file mode 100644 index 00000000..8454e86c --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/transaction_base.js @@ -0,0 +1,247 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TransactionBase = void 0; +var _xdr = _interopRequireDefault(require("./xdr")); +var _hashing = require("./hashing"); +var _keypair = require("./keypair"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * @ignore + */ +var TransactionBase = exports.TransactionBase = /*#__PURE__*/function () { + function TransactionBase(tx, signatures, fee, networkPassphrase) { + _classCallCheck(this, TransactionBase); + if (typeof networkPassphrase !== 'string') { + throw new Error("Invalid passphrase provided to Transaction: expected a string but got a ".concat(_typeof(networkPassphrase))); + } + this._networkPassphrase = networkPassphrase; + this._tx = tx; + this._signatures = signatures; + this._fee = fee; + } + + /** + * @type {Array.} + * @readonly + */ + return _createClass(TransactionBase, [{ + key: "signatures", + get: function get() { + return this._signatures; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + }, { + key: "tx", + get: function get() { + return this._tx; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "fee", + get: function get() { + return this._fee; + }, + set: function set(value) { + throw new Error('Transaction is immutable'); + } + + /** + * @type {string} + * @readonly + */ + }, { + key: "networkPassphrase", + get: function get() { + return this._networkPassphrase; + }, + set: function set(networkPassphrase) { + this._networkPassphrase = networkPassphrase; + } + + /** + * Signs the transaction with the given {@link Keypair}. + * @param {...Keypair} keypairs Keypairs of signers + * @returns {void} + */ + }, { + key: "sign", + value: function sign() { + var _this = this; + var txHash = this.hash(); + for (var _len = arguments.length, keypairs = new Array(_len), _key = 0; _key < _len; _key++) { + keypairs[_key] = arguments[_key]; + } + keypairs.forEach(function (kp) { + var sig = kp.signDecorated(txHash); + _this.signatures.push(sig); + }); + } + + /** + * Signs a transaction with the given {@link Keypair}. Useful if someone sends + * you a transaction XDR for you to sign and return (see + * [addSignature](#addSignature) for more information). + * + * When you get a transaction XDR to sign.... + * - Instantiate a `Transaction` object with the XDR + * - Use {@link Keypair} to generate a keypair object for your Stellar seed. + * - Run `getKeypairSignature` with that keypair + * - Send back the signature along with your publicKey (not your secret seed!) + * + * Example: + * ```javascript + * // `transactionXDR` is a string from the person generating the transaction + * const transaction = new Transaction(transactionXDR, networkPassphrase); + * const keypair = Keypair.fromSecret(myStellarSeed); + * return transaction.getKeypairSignature(keypair); + * ``` + * + * @param {Keypair} keypair Keypair of signer + * @returns {string} Signature string + */ + }, { + key: "getKeypairSignature", + value: function getKeypairSignature(keypair) { + return keypair.sign(this.hash()).toString('base64'); + } + + /** + * Add a signature to the transaction. Useful when a party wants to pre-sign + * a transaction but doesn't want to give access to their secret keys. + * This will also verify whether the signature is valid. + * + * Here's how you would use this feature to solicit multiple signatures. + * - Use `TransactionBuilder` to build a new transaction. + * - Make sure to set a long enough timeout on that transaction to give your + * signers enough time to sign! + * - Once you build the transaction, use `transaction.toXDR()` to get the + * base64-encoded XDR string. + * - _Warning!_ Once you've built this transaction, don't submit any other + * transactions onto your account! Doing so will invalidate this pre-compiled + * transaction! + * - Send this XDR string to your other parties. They can use the instructions + * for [getKeypairSignature](#getKeypairSignature) to sign the transaction. + * - They should send you back their `publicKey` and the `signature` string + * from [getKeypairSignature](#getKeypairSignature), both of which you pass to + * this function. + * + * @param {string} publicKey The public key of the signer + * @param {string} signature The base64 value of the signature XDR + * @returns {void} + */ + }, { + key: "addSignature", + value: function addSignature() { + var publicKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + if (!signature || typeof signature !== 'string') { + throw new Error('Invalid signature'); + } + if (!publicKey || typeof publicKey !== 'string') { + throw new Error('Invalid publicKey'); + } + var keypair; + var hint; + var signatureBuffer = Buffer.from(signature, 'base64'); + try { + keypair = _keypair.Keypair.fromPublicKey(publicKey); + hint = keypair.signatureHint(); + } catch (e) { + throw new Error('Invalid publicKey'); + } + if (!keypair.verify(this.hash(), signatureBuffer)) { + throw new Error('Invalid signature'); + } + this.signatures.push(new _xdr["default"].DecoratedSignature({ + hint: hint, + signature: signatureBuffer + })); + } + + /** + * Add a decorated signature directly to the transaction envelope. + * + * @param {xdr.DecoratedSignature} signature raw signature to add + * @returns {void} + * + * @see Keypair.signDecorated + * @see Keypair.signPayloadDecorated + */ + }, { + key: "addDecoratedSignature", + value: function addDecoratedSignature(signature) { + this.signatures.push(signature); + } + + /** + * Add `hashX` signer preimage as signature. + * @param {Buffer|String} preimage Preimage of hash used as signer + * @returns {void} + */ + }, { + key: "signHashX", + value: function signHashX(preimage) { + if (typeof preimage === 'string') { + preimage = Buffer.from(preimage, 'hex'); + } + if (preimage.length > 64) { + throw new Error('preimage cannnot be longer than 64 bytes'); + } + var signature = preimage; + var hashX = (0, _hashing.hash)(preimage); + var hint = hashX.slice(hashX.length - 4); + this.signatures.push(new _xdr["default"].DecoratedSignature({ + hint: hint, + signature: signature + })); + } + + /** + * Returns a hash for this transaction, suitable for signing. + * @returns {Buffer} + */ + }, { + key: "hash", + value: function hash() { + return (0, _hashing.hash)(this.signatureBase()); + } + }, { + key: "signatureBase", + value: function signatureBase() { + throw new Error('Implement in subclass'); + } + }, { + key: "toEnvelope", + value: function toEnvelope() { + throw new Error('Implement in subclass'); + } + + /** + * Get the transaction envelope as a base64-encoded string + * @returns {string} XDR string + */ + }, { + key: "toXDR", + value: function toXDR() { + return this.toEnvelope().toXDR().toString('base64'); + } + }]); +}(); \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/transaction_builder.js b/node_modules/@stellar/stellar-base/lib/transaction_builder.js new file mode 100644 index 00000000..4b557f67 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/transaction_builder.js @@ -0,0 +1,781 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TransactionBuilder = exports.TimeoutInfinite = exports.BASE_FEE = void 0; +exports.isValidDate = isValidDate; +var _jsXdr = require("@stellar/js-xdr"); +var _bignumber = _interopRequireDefault(require("./util/bignumber")); +var _xdr = _interopRequireDefault(require("./xdr")); +var _account = require("./account"); +var _muxed_account = require("./muxed_account"); +var _decode_encode_muxed_account = require("./util/decode_encode_muxed_account"); +var _transaction = require("./transaction"); +var _fee_bump_transaction = require("./fee_bump_transaction"); +var _sorobandata_builder = require("./sorobandata_builder"); +var _strkey = require("./strkey"); +var _signerkey = require("./signerkey"); +var _memo = require("./memo"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * Minimum base fee for transactions. If this fee is below the network + * minimum, the transaction will fail. The more operations in the + * transaction, the greater the required fee. Use {@link + * Server#fetchBaseFee} to get an accurate value of minimum transaction + * fee on the network. + * + * @constant + * @see [Fees](https://developers.stellar.org/docs/glossary/fees/) + */ +var BASE_FEE = exports.BASE_FEE = '100'; // Stroops + +/** + * @constant + * @see {@link TransactionBuilder#setTimeout} + * @see [Timeout](https://developers.stellar.org/api/resources/transactions/post/) + */ +var TimeoutInfinite = exports.TimeoutInfinite = 0; + +/** + *

Transaction builder helps constructs a new `{@link Transaction}` using the + * given {@link Account} as the transaction's "source account". The transaction + * will use the current sequence number of the given account as its sequence + * number and increment the given account's sequence number by one. The given + * source account must include a private key for signing the transaction or an + * error will be thrown.

+ * + *

Operations can be added to the transaction via their corresponding builder + * methods, and each returns the TransactionBuilder object so they can be + * chained together. After adding the desired operations, call the `build()` + * method on the `TransactionBuilder` to return a fully constructed `{@link + * Transaction}` that can be signed. The returned transaction will contain the + * sequence number of the source account and include the signature from the + * source account.

+ * + *

Be careful about unsubmitted transactions! When you build + * a transaction, `stellar-sdk` automatically increments the source account's + * sequence number. If you end up not submitting this transaction and submitting + * another one instead, it'll fail due to the sequence number being wrong. So if + * you decide not to use a built transaction, make sure to update the source + * account's sequence number with + * [Server.loadAccount](https://stellar.github.io/js-stellar-sdk/Server.html#loadAccount) + * before creating another transaction.

+ * + *

The following code example creates a new transaction with {@link + * Operation.createAccount} and {@link Operation.payment} operations. The + * Transaction's source account first funds `destinationA`, then sends a payment + * to `destinationB`. The built transaction is then signed by + * `sourceKeypair`.

+ * + * ``` + * var transaction = new TransactionBuilder(source, { fee, networkPassphrase: Networks.TESTNET }) + * .addOperation(Operation.createAccount({ + * destination: destinationA, + * startingBalance: "20" + * })) // <- funds and creates destinationA + * .addOperation(Operation.payment({ + * destination: destinationB, + * amount: "100", + * asset: Asset.native() + * })) // <- sends 100 XLM to destinationB + * .setTimeout(30) + * .build(); + * + * transaction.sign(sourceKeypair); + * ``` + * + * @constructor + * + * @param {Account} sourceAccount - source account for this transaction + * @param {object} opts - Options object + * @param {string} opts.fee - max fee you're willing to pay per + * operation in this transaction (**in stroops**) + * + * @param {object} [opts.timebounds] - timebounds for the + * validity of this transaction + * @param {number|string|Date} [opts.timebounds.minTime] - 64-bit UNIX + * timestamp or Date object + * @param {number|string|Date} [opts.timebounds.maxTime] - 64-bit UNIX + * timestamp or Date object + * @param {object} [opts.ledgerbounds] - ledger bounds for the + * validity of this transaction + * @param {number} [opts.ledgerbounds.minLedger] - number of the minimum + * ledger sequence + * @param {number} [opts.ledgerbounds.maxLedger] - number of the maximum + * ledger sequence + * @param {string} [opts.minAccountSequence] - number for + * the minimum account sequence + * @param {number} [opts.minAccountSequenceAge] - number of + * seconds for the minimum account sequence age + * @param {number} [opts.minAccountSequenceLedgerGap] - number of + * ledgers for the minimum account sequence ledger gap + * @param {string[]} [opts.extraSigners] - list of the extra signers + * required for this transaction + * @param {Memo} [opts.memo] - memo for the transaction + * @param {string} [opts.networkPassphrase] passphrase of the + * target Stellar network (e.g. "Public Global Stellar Network ; September + * 2015" for the pubnet) + * @param {xdr.SorobanTransactionData | string} [opts.sorobanData] - an + * optional instance of {@link xdr.SorobanTransactionData} to be set as the + * internal `Transaction.Ext.SorobanData` field (either the xdr object or a + * base64 string). In the case of Soroban transactions, this can be obtained + * from a prior simulation of the transaction with a contract invocation and + * provides necessary resource estimations. You can also use + * {@link SorobanDataBuilder} to construct complicated combinations of + * parameters without mucking with XDR directly. **Note:** For + * non-contract(non-Soroban) transactions, this has no effect. + */ +var TransactionBuilder = exports.TransactionBuilder = /*#__PURE__*/function () { + function TransactionBuilder(sourceAccount) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + _classCallCheck(this, TransactionBuilder); + if (!sourceAccount) { + throw new Error('must specify source account for the transaction'); + } + if (opts.fee === undefined) { + throw new Error('must specify fee for the transaction (in stroops)'); + } + this.source = sourceAccount; + this.operations = []; + this.baseFee = opts.fee; + this.timebounds = opts.timebounds ? _objectSpread({}, opts.timebounds) : null; + this.ledgerbounds = opts.ledgerbounds ? _objectSpread({}, opts.ledgerbounds) : null; + this.minAccountSequence = opts.minAccountSequence || null; + this.minAccountSequenceAge = opts.minAccountSequenceAge || null; + this.minAccountSequenceLedgerGap = opts.minAccountSequenceLedgerGap || null; + this.extraSigners = opts.extraSigners ? _toConsumableArray(opts.extraSigners) : null; + this.memo = opts.memo || _memo.Memo.none(); + this.networkPassphrase = opts.networkPassphrase || null; + this.sorobanData = opts.sorobanData ? new _sorobandata_builder.SorobanDataBuilder(opts.sorobanData).build() : null; + } + + /** + * Creates a builder instance using an existing {@link Transaction} as a + * template, ignoring any existing envelope signatures. + * + * Note that the sequence number WILL be cloned, so EITHER this transaction or + * the one it was cloned from will be valid. This is useful in situations + * where you are constructing a transaction in pieces and need to make + * adjustments as you go (for example, when filling out Soroban resource + * information). + * + * @param {Transaction} tx a "template" transaction to clone exactly + * @param {object} [opts] additional options to override the clone, e.g. + * {fee: '1000'} will override the existing base fee derived from `tx` (see + * the {@link TransactionBuilder} constructor for detailed options) + * + * @returns {TransactionBuilder} a "prepared" builder instance with the same + * configuration and operations as the given transaction + * + * @warning This does not clone the transaction's + * {@link xdr.SorobanTransactionData} (if applicable), use + * {@link SorobanDataBuilder} and {@link TransactionBuilder.setSorobanData} + * as needed, instead.. + * + * @todo This cannot clone {@link FeeBumpTransaction}s, yet. + */ + return _createClass(TransactionBuilder, [{ + key: "addOperation", + value: + /** + * Adds an operation to the transaction. + * + * @param {xdr.Operation} operation The xdr operation object, use {@link + * Operation} static methods. + * + * @returns {TransactionBuilder} + */ + function addOperation(operation) { + this.operations.push(operation); + return this; + } + + /** + * Adds an operation to the transaction at a specific index. + * + * @param {xdr.Operation} operation - The xdr operation object to add, use {@link Operation} static methods. + * @param {number} index - The index at which to insert the operation. + * + * @returns {TransactionBuilder} - The TransactionBuilder instance for method chaining. + */ + }, { + key: "addOperationAt", + value: function addOperationAt(operation, index) { + this.operations.splice(index, 0, operation); + return this; + } + + /** + * Removes the operations from the builder (useful when cloning). + * @returns {TransactionBuilder} this builder instance + */ + }, { + key: "clearOperations", + value: function clearOperations() { + this.operations = []; + return this; + } + + /** + * Removes the operation at the specified index from the transaction. + * + * @param {number} index - The index of the operation to remove. + * + * @returns {TransactionBuilder} The TransactionBuilder instance for method chaining. + */ + }, { + key: "clearOperationAt", + value: function clearOperationAt(index) { + this.operations.splice(index, 1); + return this; + } + + /** + * Adds a memo to the transaction. + * @param {Memo} memo {@link Memo} object + * @returns {TransactionBuilder} + */ + }, { + key: "addMemo", + value: function addMemo(memo) { + this.memo = memo; + return this; + } + + /** + * Sets a timeout precondition on the transaction. + * + * Because of the distributed nature of the Stellar network it is possible + * that the status of your transaction will be determined after a long time + * if the network is highly congested. If you want to be sure to receive the + * status of the transaction within a given period you should set the {@link + * TimeBounds} with `maxTime` on the transaction (this is what `setTimeout` + * does internally; if there's `minTime` set but no `maxTime` it will be + * added). + * + * A call to `TransactionBuilder.setTimeout` is **required** if Transaction + * does not have `max_time` set. If you don't want to set timeout, use + * `{@link TimeoutInfinite}`. In general you should set `{@link + * TimeoutInfinite}` only in smart contracts. + * + * Please note that Horizon may still return 504 Gateway Timeout + * error, even for short timeouts. In such case you need to resubmit the same + * transaction again without making any changes to receive a status. This + * method is using the machine system time (UTC), make sure it is set + * correctly. + * + * @param {number} timeoutSeconds Number of seconds the transaction is good. + * Can't be negative. If the value is {@link TimeoutInfinite}, the + * transaction is good indefinitely. + * + * @returns {TransactionBuilder} + * + * @see {@link TimeoutInfinite} + * @see https://developers.stellar.org/docs/tutorials/handling-errors/ + */ + }, { + key: "setTimeout", + value: function setTimeout(timeoutSeconds) { + if (this.timebounds !== null && this.timebounds.maxTime > 0) { + throw new Error('TimeBounds.max_time has been already set - setting timeout would overwrite it.'); + } + if (timeoutSeconds < 0) { + throw new Error('timeout cannot be negative'); + } + if (timeoutSeconds > 0) { + var timeoutTimestamp = Math.floor(Date.now() / 1000) + timeoutSeconds; + if (this.timebounds === null) { + this.timebounds = { + minTime: 0, + maxTime: timeoutTimestamp + }; + } else { + this.timebounds = { + minTime: this.timebounds.minTime, + maxTime: timeoutTimestamp + }; + } + } else { + this.timebounds = { + minTime: 0, + maxTime: 0 + }; + } + return this; + } + + /** + * If you want to prepare a transaction which will become valid at some point + * in the future, or be invalid after some time, you can set a timebounds + * precondition. Internally this will set the `minTime`, and `maxTime` + * preconditions. Conflicts with `setTimeout`, so use one or the other. + * + * @param {Date|number} minEpochOrDate Either a JS Date object, or a number + * of UNIX epoch seconds. The transaction is valid after this timestamp. + * Can't be negative. If the value is `0`, the transaction is valid + * immediately. + * @param {Date|number} maxEpochOrDate Either a JS Date object, or a number + * of UNIX epoch seconds. The transaction is valid until this timestamp. + * Can't be negative. If the value is `0`, the transaction is valid + * indefinitely. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setTimebounds", + value: function setTimebounds(minEpochOrDate, maxEpochOrDate) { + // Force it to a date type + if (typeof minEpochOrDate === 'number') { + minEpochOrDate = new Date(minEpochOrDate * 1000); + } + if (typeof maxEpochOrDate === 'number') { + maxEpochOrDate = new Date(maxEpochOrDate * 1000); + } + if (this.timebounds !== null) { + throw new Error('TimeBounds has been already set - setting timebounds would overwrite it.'); + } + + // Convert that date to the epoch seconds + var minTime = Math.floor(minEpochOrDate.valueOf() / 1000); + var maxTime = Math.floor(maxEpochOrDate.valueOf() / 1000); + if (minTime < 0) { + throw new Error('min_time cannot be negative'); + } + if (maxTime < 0) { + throw new Error('max_time cannot be negative'); + } + if (maxTime > 0 && minTime > maxTime) { + throw new Error('min_time cannot be greater than max_time'); + } + this.timebounds = { + minTime: minTime, + maxTime: maxTime + }; + return this; + } + + /** + * If you want to prepare a transaction which will only be valid within some + * range of ledgers, you can set a ledgerbounds precondition. + * Internally this will set the `minLedger` and `maxLedger` preconditions. + * + * @param {number} minLedger The minimum ledger this transaction is valid at + * or after. Cannot be negative. If the value is `0` (the default), the + * transaction is valid immediately. + * + * @param {number} maxLedger The maximum ledger this transaction is valid + * before. Cannot be negative. If the value is `0`, the transaction is + * valid indefinitely. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setLedgerbounds", + value: function setLedgerbounds(minLedger, maxLedger) { + if (this.ledgerbounds !== null) { + throw new Error('LedgerBounds has been already set - setting ledgerbounds would overwrite it.'); + } + if (minLedger < 0) { + throw new Error('min_ledger cannot be negative'); + } + if (maxLedger < 0) { + throw new Error('max_ledger cannot be negative'); + } + if (maxLedger > 0 && minLedger > maxLedger) { + throw new Error('min_ledger cannot be greater than max_ledger'); + } + this.ledgerbounds = { + minLedger: minLedger, + maxLedger: maxLedger + }; + return this; + } + + /** + * If you want to prepare a transaction which will be valid only while the + * account sequence number is + * + * minAccountSequence <= sourceAccountSequence < tx.seqNum + * + * Note that after execution the account's sequence number is always raised to + * `tx.seqNum`. Internally this will set the `minAccountSequence` + * precondition. + * + * @param {string} minAccountSequence The minimum source account sequence + * number this transaction is valid for. If the value is `0` (the + * default), the transaction is valid when `sourceAccount's sequence + * number == tx.seqNum- 1`. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setMinAccountSequence", + value: function setMinAccountSequence(minAccountSequence) { + if (this.minAccountSequence !== null) { + throw new Error('min_account_sequence has been already set - setting min_account_sequence would overwrite it.'); + } + this.minAccountSequence = minAccountSequence; + return this; + } + + /** + * For the transaction to be valid, the current ledger time must be at least + * `minAccountSequenceAge` greater than sourceAccount's `sequenceTime`. + * Internally this will set the `minAccountSequenceAge` precondition. + * + * @param {number} durationInSeconds The minimum amount of time between + * source account sequence time and the ledger time when this transaction + * will become valid. If the value is `0`, the transaction is unrestricted + * by the account sequence age. Cannot be negative. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setMinAccountSequenceAge", + value: function setMinAccountSequenceAge(durationInSeconds) { + if (typeof durationInSeconds !== 'number') { + throw new Error('min_account_sequence_age must be a number'); + } + if (this.minAccountSequenceAge !== null) { + throw new Error('min_account_sequence_age has been already set - setting min_account_sequence_age would overwrite it.'); + } + if (durationInSeconds < 0) { + throw new Error('min_account_sequence_age cannot be negative'); + } + this.minAccountSequenceAge = durationInSeconds; + return this; + } + + /** + * For the transaction to be valid, the current ledger number must be at least + * `minAccountSequenceLedgerGap` greater than sourceAccount's ledger sequence. + * Internally this will set the `minAccountSequenceLedgerGap` precondition. + * + * @param {number} gap The minimum number of ledgers between source account + * sequence and the ledger number when this transaction will become valid. + * If the value is `0`, the transaction is unrestricted by the account + * sequence ledger. Cannot be negative. + * + * @returns {TransactionBuilder} + */ + }, { + key: "setMinAccountSequenceLedgerGap", + value: function setMinAccountSequenceLedgerGap(gap) { + if (this.minAccountSequenceLedgerGap !== null) { + throw new Error('min_account_sequence_ledger_gap has been already set - setting min_account_sequence_ledger_gap would overwrite it.'); + } + if (gap < 0) { + throw new Error('min_account_sequence_ledger_gap cannot be negative'); + } + this.minAccountSequenceLedgerGap = gap; + return this; + } + + /** + * For the transaction to be valid, there must be a signature corresponding to + * every Signer in this array, even if the signature is not otherwise required + * by the sourceAccount or operations. Internally this will set the + * `extraSigners` precondition. + * + * @param {string[]} extraSigners required extra signers (as {@link StrKey}s) + * + * @returns {TransactionBuilder} + */ + }, { + key: "setExtraSigners", + value: function setExtraSigners(extraSigners) { + if (!Array.isArray(extraSigners)) { + throw new Error('extra_signers must be an array of strings.'); + } + if (this.extraSigners !== null) { + throw new Error('extra_signers has been already set - setting extra_signers would overwrite it.'); + } + if (extraSigners.length > 2) { + throw new Error('extra_signers cannot be longer than 2 elements.'); + } + this.extraSigners = _toConsumableArray(extraSigners); + return this; + } + + /** + * Set network nassphrase for the Transaction that will be built. + * + * @param {string} networkPassphrase passphrase of the target Stellar + * network (e.g. "Public Global Stellar Network ; September 2015"). + * + * @returns {TransactionBuilder} + */ + }, { + key: "setNetworkPassphrase", + value: function setNetworkPassphrase(networkPassphrase) { + this.networkPassphrase = networkPassphrase; + return this; + } + + /** + * Sets the transaction's internal Soroban transaction data (resources, + * footprint, etc.). + * + * For non-contract(non-Soroban) transactions, this setting has no effect. In + * the case of Soroban transactions, this is either an instance of + * {@link xdr.SorobanTransactionData} or a base64-encoded string of said + * structure. This is usually obtained from the simulation response based on a + * transaction with a Soroban operation (e.g. + * {@link Operation.invokeHostFunction}, providing necessary resource + * and storage footprint estimations for contract invocation. + * + * @param {xdr.SorobanTransactionData | string} sorobanData the + * {@link xdr.SorobanTransactionData} as a raw xdr object or a base64 + * string to be decoded + * + * @returns {TransactionBuilder} + * @see {SorobanDataBuilder} + */ + }, { + key: "setSorobanData", + value: function setSorobanData(sorobanData) { + this.sorobanData = new _sorobandata_builder.SorobanDataBuilder(sorobanData).build(); + return this; + } + + /** + * This will build the transaction. + * It will also increment the source account's sequence number by 1. + * @returns {Transaction} This method will return the built {@link Transaction}. + */ + }, { + key: "build", + value: function build() { + var sequenceNumber = new _bignumber["default"](this.source.sequenceNumber()).plus(1); + var fee = new _bignumber["default"](this.baseFee).times(this.operations.length).toNumber(); + var attrs = { + fee: fee, + seqNum: _xdr["default"].SequenceNumber.fromString(sequenceNumber.toString()), + memo: this.memo ? this.memo.toXDRObject() : null + }; + if (this.timebounds === null || typeof this.timebounds.minTime === 'undefined' || typeof this.timebounds.maxTime === 'undefined') { + throw new Error('TimeBounds has to be set or you must call setTimeout(TimeoutInfinite).'); + } + if (isValidDate(this.timebounds.minTime)) { + this.timebounds.minTime = this.timebounds.minTime.getTime() / 1000; + } + if (isValidDate(this.timebounds.maxTime)) { + this.timebounds.maxTime = this.timebounds.maxTime.getTime() / 1000; + } + this.timebounds.minTime = _jsXdr.UnsignedHyper.fromString(this.timebounds.minTime.toString()); + this.timebounds.maxTime = _jsXdr.UnsignedHyper.fromString(this.timebounds.maxTime.toString()); + var timeBounds = new _xdr["default"].TimeBounds(this.timebounds); + if (this.hasV2Preconditions()) { + var ledgerBounds = null; + if (this.ledgerbounds !== null) { + ledgerBounds = new _xdr["default"].LedgerBounds(this.ledgerbounds); + } + var minSeqNum = this.minAccountSequence || '0'; + minSeqNum = _xdr["default"].SequenceNumber.fromString(minSeqNum); + var minSeqAge = _jsXdr.UnsignedHyper.fromString(this.minAccountSequenceAge !== null ? this.minAccountSequenceAge.toString() : '0'); + var minSeqLedgerGap = this.minAccountSequenceLedgerGap || 0; + var extraSigners = this.extraSigners !== null ? this.extraSigners.map(_signerkey.SignerKey.decodeAddress) : []; + attrs.cond = _xdr["default"].Preconditions.precondV2(new _xdr["default"].PreconditionsV2({ + timeBounds: timeBounds, + ledgerBounds: ledgerBounds, + minSeqNum: minSeqNum, + minSeqAge: minSeqAge, + minSeqLedgerGap: minSeqLedgerGap, + extraSigners: extraSigners + })); + } else { + attrs.cond = _xdr["default"].Preconditions.precondTime(timeBounds); + } + attrs.sourceAccount = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(this.source.accountId()); + + // TODO - remove this workaround for TransactionExt ts constructor + // and use the typescript generated static factory method once fixed + // https://github.com/stellar/dts-xdr/issues/5 + if (this.sorobanData) { + // @ts-ignore + attrs.ext = new _xdr["default"].TransactionExt(1, this.sorobanData); + } else { + // @ts-ignore + attrs.ext = new _xdr["default"].TransactionExt(0, _xdr["default"].Void); + } + var xtx = new _xdr["default"].Transaction(attrs); + xtx.operations(this.operations); + var txEnvelope = new _xdr["default"].TransactionEnvelope.envelopeTypeTx(new _xdr["default"].TransactionV1Envelope({ + tx: xtx + })); + var tx = new _transaction.Transaction(txEnvelope, this.networkPassphrase); + this.source.incrementSequenceNumber(); + return tx; + } + }, { + key: "hasV2Preconditions", + value: function hasV2Preconditions() { + return this.ledgerbounds !== null || this.minAccountSequence !== null || this.minAccountSequenceAge !== null || this.minAccountSequenceLedgerGap !== null || this.extraSigners !== null && this.extraSigners.length > 0; + } + + /** + * Builds a {@link FeeBumpTransaction}, enabling you to resubmit an existing + * transaction with a higher fee. + * + * @param {Keypair|string} feeSource - account paying for the transaction, + * in the form of either a Keypair (only the public key is used) or + * an account ID (in G... or M... form, but refer to `withMuxing`) + * @param {string} baseFee - max fee willing to pay per operation + * in inner transaction (**in stroops**) + * @param {Transaction} innerTx - {@link Transaction} to be bumped by + * the fee bump transaction + * @param {string} networkPassphrase - passphrase of the target + * Stellar network (e.g. "Public Global Stellar Network ; September 2015", + * see {@link Networks}) + * + * @todo Alongside the next major version bump, this type signature can be + * changed to be less awkward: accept a MuxedAccount as the `feeSource` + * rather than a keypair or string. + * + * @note Your fee-bump amount should be >= 10x the original fee. + * @see https://developers.stellar.org/docs/glossary/fee-bumps/#replace-by-fee + * + * @returns {FeeBumpTransaction} + */ + }], [{ + key: "cloneFrom", + value: function cloneFrom(tx) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if (!(tx instanceof _transaction.Transaction)) { + throw new TypeError("expected a 'Transaction', got: ".concat(tx)); + } + var sequenceNum = (BigInt(tx.sequence) - 1n).toString(); + var source; + // rebuild the source account based on the strkey + if (_strkey.StrKey.isValidMed25519PublicKey(tx.source)) { + source = _muxed_account.MuxedAccount.fromAddress(tx.source, sequenceNum); + } else if (_strkey.StrKey.isValidEd25519PublicKey(tx.source)) { + source = new _account.Account(tx.source, sequenceNum); + } else { + throw new TypeError("unsupported tx source account: ".concat(tx.source)); + } + + // the initial fee passed to the builder gets scaled up based on the number + // of operations at the end, so we have to down-scale first + var unscaledFee = parseInt(tx.fee, 10) / tx.operations.length; + var builder = new TransactionBuilder(source, _objectSpread({ + fee: (unscaledFee || BASE_FEE).toString(), + memo: tx.memo, + networkPassphrase: tx.networkPassphrase, + timebounds: tx.timeBounds, + ledgerbounds: tx.ledgerBounds, + minAccountSequence: tx.minAccountSequence, + minAccountSequenceAge: tx.minAccountSequenceAge, + minAccountSequenceLedgerGap: tx.minAccountSequenceLedgerGap, + extraSigners: tx.extraSigners + }, opts)); + tx._tx.operations().forEach(function (op) { + return builder.addOperation(op); + }); + return builder; + } + }, { + key: "buildFeeBumpTransaction", + value: function buildFeeBumpTransaction(feeSource, baseFee, innerTx, networkPassphrase) { + var innerOps = innerTx.operations.length; + var innerBaseFeeRate = new _bignumber["default"](innerTx.fee).div(innerOps); + var base = new _bignumber["default"](baseFee); + + // The fee rate for fee bump is at least the fee rate of the inner transaction + if (base.lt(innerBaseFeeRate)) { + throw new Error("Invalid baseFee, it should be at least ".concat(innerBaseFeeRate, " stroops.")); + } + var minBaseFee = new _bignumber["default"](BASE_FEE); + + // The fee rate is at least the minimum fee + if (base.lt(minBaseFee)) { + throw new Error("Invalid baseFee, it should be at least ".concat(minBaseFee, " stroops.")); + } + var innerTxEnvelope = innerTx.toEnvelope(); + if (innerTxEnvelope["switch"]() === _xdr["default"].EnvelopeType.envelopeTypeTxV0()) { + var v0Tx = innerTxEnvelope.v0().tx(); + var v1Tx = new _xdr["default"].Transaction({ + sourceAccount: new _xdr["default"].MuxedAccount.keyTypeEd25519(v0Tx.sourceAccountEd25519()), + fee: v0Tx.fee(), + seqNum: v0Tx.seqNum(), + cond: _xdr["default"].Preconditions.precondTime(v0Tx.timeBounds()), + memo: v0Tx.memo(), + operations: v0Tx.operations(), + ext: new _xdr["default"].TransactionExt(0) + }); + innerTxEnvelope = new _xdr["default"].TransactionEnvelope.envelopeTypeTx(new _xdr["default"].TransactionV1Envelope({ + tx: v1Tx, + signatures: innerTxEnvelope.v0().signatures() + })); + } + var feeSourceAccount; + if (typeof feeSource === 'string') { + feeSourceAccount = (0, _decode_encode_muxed_account.decodeAddressToMuxedAccount)(feeSource); + } else { + feeSourceAccount = feeSource.xdrMuxedAccount(); + } + var tx = new _xdr["default"].FeeBumpTransaction({ + feeSource: feeSourceAccount, + fee: _xdr["default"].Int64.fromString(base.times(innerOps + 1).toString()), + innerTx: _xdr["default"].FeeBumpTransactionInnerTx.envelopeTypeTx(innerTxEnvelope.v1()), + ext: new _xdr["default"].FeeBumpTransactionExt(0) + }); + var feeBumpTxEnvelope = new _xdr["default"].FeeBumpTransactionEnvelope({ + tx: tx, + signatures: [] + }); + var envelope = new _xdr["default"].TransactionEnvelope.envelopeTypeTxFeeBump(feeBumpTxEnvelope); + return new _fee_bump_transaction.FeeBumpTransaction(envelope, networkPassphrase); + } + + /** + * Build a {@link Transaction} or {@link FeeBumpTransaction} from an + * xdr.TransactionEnvelope. + * + * @param {string|xdr.TransactionEnvelope} envelope - The transaction envelope + * object or base64 encoded string. + * @param {string} networkPassphrase - The network passphrase of the target + * Stellar network (e.g. "Public Global Stellar Network ; September + * 2015"), see {@link Networks}. + * + * @returns {Transaction|FeeBumpTransaction} + */ + }, { + key: "fromXDR", + value: function fromXDR(envelope, networkPassphrase) { + if (typeof envelope === 'string') { + envelope = _xdr["default"].TransactionEnvelope.fromXDR(envelope, 'base64'); + } + if (envelope["switch"]() === _xdr["default"].EnvelopeType.envelopeTypeTxFeeBump()) { + return new _fee_bump_transaction.FeeBumpTransaction(envelope, networkPassphrase); + } + return new _transaction.Transaction(envelope, networkPassphrase); + } + }]); +}(); +/** + * Checks whether a provided object is a valid Date. + * @argument {Date} d date object + * @returns {boolean} + */ +function isValidDate(d) { + // isnan is okay here because it correctly checks for invalid date objects + // eslint-disable-next-line no-restricted-globals + return d instanceof Date && !isNaN(d); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/util/bignumber.js b/node_modules/@stellar/stellar-base/lib/util/bignumber.js new file mode 100644 index 00000000..8654ac4b --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/util/bignumber.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var _bignumber = _interopRequireDefault(require("bignumber.js")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +var BigNumber = _bignumber["default"].clone(); +BigNumber.DEBUG = true; // gives us exceptions on bad constructor values +var _default = exports["default"] = BigNumber; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/util/checksum.js b/node_modules/@stellar/stellar-base/lib/util/checksum.js new file mode 100644 index 00000000..2362ba3f --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/util/checksum.js @@ -0,0 +1,20 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.verifyChecksum = verifyChecksum; +function verifyChecksum(expected, actual) { + if (expected.length !== actual.length) { + return false; + } + if (expected.length === 0) { + return true; + } + for (var i = 0; i < expected.length; i += 1) { + if (expected[i] !== actual[i]) { + return false; + } + } + return true; +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/util/continued_fraction.js b/node_modules/@stellar/stellar-base/lib/util/continued_fraction.js new file mode 100644 index 00000000..d8a0666c --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/util/continued_fraction.js @@ -0,0 +1,58 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.best_r = best_r; +var _bignumber = _interopRequireDefault(require("./bignumber")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +// eslint-disable-next-line no-bitwise +var MAX_INT = (1 << 31 >>> 0) - 1; + +/** + * Calculates and returns the best rational approximation of the given real number. + * @private + * @param {string|number|BigNumber} rawNumber Real number + * @throws Error Throws `Error` when the best rational approximation cannot be found. + * @returns {array} first element is n (numerator), second element is d (denominator) + */ +function best_r(rawNumber) { + var number = new _bignumber["default"](rawNumber); + var a; + var f; + var fractions = [[new _bignumber["default"](0), new _bignumber["default"](1)], [new _bignumber["default"](1), new _bignumber["default"](0)]]; + var i = 2; + + // eslint-disable-next-line no-constant-condition + while (true) { + if (number.gt(MAX_INT)) { + break; + } + a = number.integerValue(_bignumber["default"].ROUND_FLOOR); + f = number.minus(a); + var h = a.times(fractions[i - 1][0]).plus(fractions[i - 2][0]); + var k = a.times(fractions[i - 1][1]).plus(fractions[i - 2][1]); + if (h.gt(MAX_INT) || k.gt(MAX_INT)) { + break; + } + fractions.push([h, k]); + if (f.eq(0)) { + break; + } + number = new _bignumber["default"](1).div(f); + i += 1; + } + var _fractions = _slicedToArray(fractions[fractions.length - 1], 2), + n = _fractions[0], + d = _fractions[1]; + if (n.isZero() || d.isZero()) { + throw new Error("Couldn't find approximation"); + } + return [n.toNumber(), d.toNumber()]; +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/util/decode_encode_muxed_account.js b/node_modules/@stellar/stellar-base/lib/util/decode_encode_muxed_account.js new file mode 100644 index 00000000..671d62d1 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/util/decode_encode_muxed_account.js @@ -0,0 +1,116 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.decodeAddressToMuxedAccount = decodeAddressToMuxedAccount; +exports.encodeMuxedAccount = encodeMuxedAccount; +exports.encodeMuxedAccountToAddress = encodeMuxedAccountToAddress; +exports.extractBaseAddress = extractBaseAddress; +var _xdr = _interopRequireDefault(require("../xdr")); +var _strkey = require("../strkey"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +/** + * Converts a Stellar address (in G... or M... form) to an `xdr.MuxedAccount` + * structure, using the ed25519 representation when possible. + * + * This supports full muxed accounts, where an `M...` address will resolve to + * both its underlying `G...` address and an integer ID. + * + * @param {string} address G... or M... address to encode into XDR + * @returns {xdr.MuxedAccount} a muxed account object for this address string + */ +function decodeAddressToMuxedAccount(address) { + if (_strkey.StrKey.isValidMed25519PublicKey(address)) { + return _decodeAddressFullyToMuxedAccount(address); + } + return _xdr["default"].MuxedAccount.keyTypeEd25519(_strkey.StrKey.decodeEd25519PublicKey(address)); +} + +/** + * Converts an xdr.MuxedAccount to its StrKey representation. + * + * This returns its "M..." string representation if there is a muxing ID within + * the object and returns the "G..." representation otherwise. + * + * @param {xdr.MuxedAccount} muxedAccount Raw account to stringify + * @returns {string} Stringified G... (corresponding to the underlying pubkey) + * or M... address (corresponding to both the key and the muxed ID) + * + * @see https://stellar.org/protocol/sep-23 + */ +function encodeMuxedAccountToAddress(muxedAccount) { + if (muxedAccount["switch"]().value === _xdr["default"].CryptoKeyType.keyTypeMuxedEd25519().value) { + return _encodeMuxedAccountFullyToAddress(muxedAccount); + } + return _strkey.StrKey.encodeEd25519PublicKey(muxedAccount.ed25519()); +} + +/** + * Transform a Stellar address (G...) and an ID into its XDR representation. + * + * @param {string} address - a Stellar G... address + * @param {string} id - a Uint64 ID represented as a string + * + * @return {xdr.MuxedAccount} - XDR representation of the above muxed account + */ +function encodeMuxedAccount(address, id) { + if (!_strkey.StrKey.isValidEd25519PublicKey(address)) { + throw new Error('address should be a Stellar account ID (G...)'); + } + if (typeof id !== 'string') { + throw new Error('id should be a string representing a number (uint64)'); + } + return _xdr["default"].MuxedAccount.keyTypeMuxedEd25519(new _xdr["default"].MuxedAccountMed25519({ + id: _xdr["default"].Uint64.fromString(id), + ed25519: _strkey.StrKey.decodeEd25519PublicKey(address) + })); +} + +/** + * Extracts the underlying base (G...) address from an M-address. + * @param {string} address an account address (either M... or G...) + * @return {string} a Stellar public key address (G...) + */ +function extractBaseAddress(address) { + if (_strkey.StrKey.isValidEd25519PublicKey(address)) { + return address; + } + if (!_strkey.StrKey.isValidMed25519PublicKey(address)) { + throw new TypeError("expected muxed account (M...), got ".concat(address)); + } + var muxedAccount = decodeAddressToMuxedAccount(address); + return _strkey.StrKey.encodeEd25519PublicKey(muxedAccount.med25519().ed25519()); +} + +// Decodes an "M..." account ID into its MuxedAccount object representation. +function _decodeAddressFullyToMuxedAccount(address) { + var rawBytes = _strkey.StrKey.decodeMed25519PublicKey(address); + + // Decoding M... addresses cannot be done through a simple + // MuxedAccountMed25519.fromXDR() call, because the definition is: + // + // constructor(attributes: { id: Uint64; ed25519: Buffer }); + // + // Note the ID is the first attribute. However, the ID comes *last* in the + // stringified (base32-encoded) address itself (it's the last 8-byte suffix). + // The `fromXDR()` method interprets bytes in order, so we need to parse out + // the raw binary into its requisite parts, i.e. use the MuxedAccountMed25519 + // constructor directly. + // + // Refer to https://github.com/stellar/go/blob/master/xdr/muxed_account.go#L26 + // for the Golang implementation of the M... parsing. + return _xdr["default"].MuxedAccount.keyTypeMuxedEd25519(new _xdr["default"].MuxedAccountMed25519({ + id: _xdr["default"].Uint64.fromXDR(rawBytes.subarray(-8)), + ed25519: rawBytes.subarray(0, -8) + })); +} + +// Converts an xdr.MuxedAccount into its *true* "M..." string representation. +function _encodeMuxedAccountFullyToAddress(muxedAccount) { + if (muxedAccount["switch"]() === _xdr["default"].CryptoKeyType.keyTypeEd25519()) { + return encodeMuxedAccountToAddress(muxedAccount); + } + var muxed = muxedAccount.med25519(); + return _strkey.StrKey.encodeMed25519PublicKey(Buffer.concat([muxed.ed25519(), muxed.id().toXDR('raw')])); +} \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/util/util.js b/node_modules/@stellar/stellar-base/lib/util/util.js new file mode 100644 index 00000000..d399b35c --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/util/util.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.trimEnd = void 0; +var trimEnd = exports.trimEnd = function trimEnd(input, _char) { + var isNumber = typeof input === 'number'; + var str = String(input); + while (str.endsWith(_char)) { + str = str.slice(0, -1); + } + return isNumber ? Number(str) : str; +}; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/lib/xdr.js b/node_modules/@stellar/stellar-base/lib/xdr.js new file mode 100644 index 00000000..9d55fc22 --- /dev/null +++ b/node_modules/@stellar/stellar-base/lib/xdr.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var _curr_generated = _interopRequireDefault(require("./generated/curr_generated")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +var _default = exports["default"] = _curr_generated["default"]; \ No newline at end of file diff --git a/node_modules/@stellar/stellar-base/package.json b/node_modules/@stellar/stellar-base/package.json new file mode 100644 index 00000000..ceb8adfa --- /dev/null +++ b/node_modules/@stellar/stellar-base/package.json @@ -0,0 +1,136 @@ +{ + "name": "@stellar/stellar-base", + "version": "13.1.0", + "description": "Low-level support library for the Stellar network.", + "main": "./lib/index.js", + "browser": { + "main": "./dist/stellar-base.min.js", + "sodium-native": false + }, + "types": "./types/index.d.ts", + "scripts": { + "build": "yarn build:node && yarn build:browser", + "build:node": "babel --out-dir ./lib/ ./src/", + "build:browser": "webpack -c ./config/webpack.config.browser.js", + "build:node:prod": "cross-env NODE_ENV=production yarn build", + "build:browser:prod": "cross-env NODE_ENV=production yarn build:browser", + "build:prod": "cross-env NODE_ENV=production yarn build", + "test": "yarn build && yarn test:node && yarn test:browser", + "test:node": "NODE_OPTIONS=$(test ! $(node -v | awk -F'.' '{printf substr($1,2)}') = '18' && echo '--no-experimental-detect-module') yarn _nyc mocha", + "test:browser": "karma start ./config/karma.conf.js", + "docs": "jsdoc -c ./config/.jsdoc.json --verbose", + "lint": "eslint -c ./config/.eslintrc.js src/ && dtslint --localTs node_modules/typescript/lib types/", + "preversion": "yarn clean && yarn fmt && yarn lint && yarn build:prod && yarn test", + "fmt": "prettier --config ./config/prettier.config.js --ignore-path ./config/.prettierignore --write './**/*.js'", + "prepare": "yarn build:prod", + "clean": "rm -rf lib/ dist/ coverage/ .nyc_output/", + "_nyc": "nyc --nycrc-path ./config/.nycrc" + }, + "engines": { + "node": ">=18.0.0" + }, + "mocha": { + "require": [ + "@babel/register", + "./test/test-helper.js" + ], + "reporter": "dot", + "recursive": true, + "timeout": 5000 + }, + "nyc": { + "sourceMap": false, + "instrument": false, + "reporter": "text-summary" + }, + "files": [ + "/dist/*.js", + "/lib/**/*.js", + "/types/*.d.ts" + ], + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "**/*.{js,json}": [ + "yarn fmt", + "yarn lint" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/stellar/js-stellar-base.git" + }, + "keywords": [ + "stellar" + ], + "author": "Stellar Development Foundation ", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/stellar/js-stellar-base/issues" + }, + "homepage": "https://github.com/stellar/js-stellar-base", + "devDependencies": { + "@babel/cli": "^7.27.0", + "@babel/core": "^7.26.10", + "@babel/eslint-parser": "^7.27.0", + "@babel/eslint-plugin": "^7.27.0", + "@babel/preset-env": "^7.26.9", + "@babel/register": "^7.25.9", + "@definitelytyped/dtslint": "^0.0.182", + "@istanbuljs/nyc-config-babel": "3.0.0", + "@types/node": "^20.14.11", + "@typescript-eslint/parser": "^6.20.0", + "babel-loader": "^9.2.1", + "babel-plugin-istanbul": "^6.1.1", + "chai": "^4.3.10", + "chai-as-promised": "^7.1.2", + "cross-env": "^7.0.3", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prefer-import": "^0.0.1", + "eslint-plugin-prettier": "^5.2.5", + "eslint-webpack-plugin": "^4.2.0", + "ghooks": "^2.0.4", + "husky": "^8.0.3", + "jsdoc": "^4.0.4", + "karma": "^6.4.4", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage": "^2.2.1", + "karma-firefox-launcher": "^2.1.3", + "karma-mocha": "^2.0.0", + "karma-sinon-chai": "^2.0.2", + "karma-webpack": "^5.0.1", + "lint-staged": "^15.5.0", + "minami": "^1.1.1", + "mocha": "^10.8.2", + "node-polyfill-webpack-plugin": "^3.0.0", + "nyc": "^15.1.0", + "prettier": "^3.5.3", + "randombytes": "^2.1.0", + "sinon": "^16.1.0", + "sinon-chai": "^3.7.0", + "taffydb": "^2.7.3", + "terser-webpack-plugin": "^5.3.14", + "ts-node": "^10.9.2", + "typescript": "5.6.3", + "webpack": "^5.98.0", + "webpack-cli": "^5.1.1" + }, + "dependencies": { + "@stellar/js-xdr": "^3.1.2", + "base32.js": "^0.1.0", + "bignumber.js": "^9.1.2", + "buffer": "^6.0.3", + "sha.js": "^2.3.6", + "tweetnacl": "^1.0.3" + }, + "optionalDependencies": { + "sodium-native": "^4.3.3" + } +} diff --git a/node_modules/@stellar/stellar-base/types/curr.d.ts b/node_modules/@stellar/stellar-base/types/curr.d.ts new file mode 100644 index 00000000..00be76e4 --- /dev/null +++ b/node_modules/@stellar/stellar-base/types/curr.d.ts @@ -0,0 +1,15724 @@ +// Automatically generated by xdrgen on 2024-09-12T11:09:00-08:00 +// DO NOT EDIT or your changes may be overwritten +import { Operation } from './index'; + +export {}; + +// Hidden namespace as hack to work around name collision. +declare namespace xdrHidden { + // tslint:disable-line:strict-export-declare-modifiers + class Operation2 { + constructor(attributes: { + sourceAccount: null | xdr.MuxedAccount; + body: xdr.OperationBody; + }); + + sourceAccount(value?: null | xdr.MuxedAccount): null | xdr.MuxedAccount; + + body(value?: xdr.OperationBody): xdr.OperationBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): xdr.Operation; + + static write(value: xdr.Operation, io: Buffer): void; + + static isValid(value: xdr.Operation): boolean; + + static toXDR(value: xdr.Operation): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): xdr.Operation; + + static fromXDR(input: string, format: 'hex' | 'base64'): xdr.Operation; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } +} + +export namespace xdr { + export import Operation = xdrHidden.Operation2; // tslint:disable-line:strict-export-declare-modifiers + + type Hash = Opaque[]; // workaround, cause unknown + + /** + * Returns an {@link ScVal} with a map type and sorted entries. + * + * @param items the key-value pairs to sort. + * + * @warning This only performs "best-effort" sorting, working best when the + * keys are all either numeric or string-like. + */ + function scvSortedMap(items: ScMapEntry[]): ScVal; + + interface SignedInt { + readonly MAX_VALUE: 2147483647; + readonly MIN_VALUE: -2147483648; + read(io: Buffer): number; + write(value: number, io: Buffer): void; + isValid(value: number): boolean; + toXDR(value: number): Buffer; + fromXDR(input: Buffer, format?: 'raw'): number; + fromXDR(input: string, format: 'hex' | 'base64'): number; + validateXDR(input: Buffer, format?: 'raw'): boolean; + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + interface UnsignedInt { + readonly MAX_VALUE: 4294967295; + readonly MIN_VALUE: 0; + read(io: Buffer): number; + write(value: number, io: Buffer): void; + isValid(value: number): boolean; + toXDR(value: number): Buffer; + fromXDR(input: Buffer, format?: 'raw'): number; + fromXDR(input: string, format: 'hex' | 'base64'): number; + validateXDR(input: Buffer, format?: 'raw'): boolean; + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + interface Bool { + read(io: Buffer): boolean; + write(value: boolean, io: Buffer): void; + isValid(value: boolean): boolean; + toXDR(value: boolean): Buffer; + fromXDR(input: Buffer, format?: 'raw'): boolean; + fromXDR(input: string, format: 'hex' | 'base64'): boolean; + validateXDR(input: Buffer, format?: 'raw'): boolean; + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Hyper { + low: number; + + high: number; + + unsigned: boolean; + + constructor( + values: string | bigint | number | Array, + ); + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static toXDR(value: Hyper): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Hyper; + + static fromXDR(input: string, format: 'hex' | 'base64'): Hyper; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + + static readonly MAX_VALUE: Hyper; + + static readonly MIN_VALUE: Hyper; + + static read(io: Buffer): Hyper; + + static write(value: Hyper, io: Buffer): void; + + static fromString(input: string): Hyper; + + static fromBytes(low: number, high: number): Hyper; + + static isValid(value: Hyper): boolean; + + toBigInt(): bigint; + + toString(): string; + } + + class UnsignedHyper { + low: number; + + high: number; + + unsigned: boolean; + + constructor( + values: string | bigint | number | Array, + ); + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static toXDR(value: UnsignedHyper): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UnsignedHyper; + + static fromXDR(input: string, format: 'hex' | 'base64'): UnsignedHyper; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + + static readonly MAX_VALUE: UnsignedHyper; + + static readonly MIN_VALUE: UnsignedHyper; + + static read(io: Buffer): UnsignedHyper; + + static write(value: UnsignedHyper, io: Buffer): void; + + static fromString(input: string): UnsignedHyper; + + static fromBytes(low: number, high: number): UnsignedHyper; + + static isValid(value: UnsignedHyper): boolean; + + toBigInt(): bigint; + + toString(): string; + } + + class XDRString { + constructor(maxLength: 4294967295); + + read(io: Buffer): Buffer; + + readString(io: Buffer): string; + + write(value: string | Buffer, io: Buffer): void; + + isValid(value: string | number[] | Buffer): boolean; + + toXDR(value: string | Buffer): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): Buffer; + + fromXDR(input: string, format: 'hex' | 'base64'): Buffer; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class XDRArray { + read(io: Buffer): Buffer; + + write(value: T[], io: Buffer): void; + + isValid(value: T[]): boolean; + + toXDR(value: T[]): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): T[]; + + fromXDR(input: string, format: 'hex' | 'base64'): T[]; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Opaque { + constructor(length: number); + + read(io: Buffer): Buffer; + + write(value: Buffer, io: Buffer): void; + + isValid(value: Buffer): boolean; + + toXDR(value: Buffer): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): Buffer; + + fromXDR(input: string, format: 'hex' | 'base64'): Buffer; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class VarOpaque extends Opaque {} + + class Option { + constructor(childType: { + read(io: any): any; + write(value: any, io: Buffer): void; + isValid(value: any): boolean; + }); + + read(io: Buffer): any; + + write(value: any, io: Buffer): void; + + isValid(value: any): boolean; + + toXDR(value: any): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): any; + + fromXDR(input: string, format: 'hex' | 'base64'): any; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementType { + readonly name: + | 'scpStPrepare' + | 'scpStConfirm' + | 'scpStExternalize' + | 'scpStNominate'; + + readonly value: 0 | 1 | 2 | 3; + + static scpStPrepare(): ScpStatementType; + + static scpStConfirm(): ScpStatementType; + + static scpStExternalize(): ScpStatementType; + + static scpStNominate(): ScpStatementType; + } + + class AssetType { + readonly name: + | 'assetTypeNative' + | 'assetTypeCreditAlphanum4' + | 'assetTypeCreditAlphanum12' + | 'assetTypePoolShare'; + + readonly value: 0 | 1 | 2 | 3; + + static assetTypeNative(): AssetType; + + static assetTypeCreditAlphanum4(): AssetType; + + static assetTypeCreditAlphanum12(): AssetType; + + static assetTypePoolShare(): AssetType; + } + + class ThresholdIndices { + readonly name: + | 'thresholdMasterWeight' + | 'thresholdLow' + | 'thresholdMed' + | 'thresholdHigh'; + + readonly value: 0 | 1 | 2 | 3; + + static thresholdMasterWeight(): ThresholdIndices; + + static thresholdLow(): ThresholdIndices; + + static thresholdMed(): ThresholdIndices; + + static thresholdHigh(): ThresholdIndices; + } + + class LedgerEntryType { + readonly name: + | 'account' + | 'trustline' + | 'offer' + | 'data' + | 'claimableBalance' + | 'liquidityPool' + | 'contractData' + | 'contractCode' + | 'configSetting' + | 'ttl'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static account(): LedgerEntryType; + + static trustline(): LedgerEntryType; + + static offer(): LedgerEntryType; + + static data(): LedgerEntryType; + + static claimableBalance(): LedgerEntryType; + + static liquidityPool(): LedgerEntryType; + + static contractData(): LedgerEntryType; + + static contractCode(): LedgerEntryType; + + static configSetting(): LedgerEntryType; + + static ttl(): LedgerEntryType; + } + + class AccountFlags { + readonly name: + | 'authRequiredFlag' + | 'authRevocableFlag' + | 'authImmutableFlag' + | 'authClawbackEnabledFlag'; + + readonly value: 1 | 2 | 4 | 8; + + static authRequiredFlag(): AccountFlags; + + static authRevocableFlag(): AccountFlags; + + static authImmutableFlag(): AccountFlags; + + static authClawbackEnabledFlag(): AccountFlags; + } + + class TrustLineFlags { + readonly name: + | 'authorizedFlag' + | 'authorizedToMaintainLiabilitiesFlag' + | 'trustlineClawbackEnabledFlag'; + + readonly value: 1 | 2 | 4; + + static authorizedFlag(): TrustLineFlags; + + static authorizedToMaintainLiabilitiesFlag(): TrustLineFlags; + + static trustlineClawbackEnabledFlag(): TrustLineFlags; + } + + class LiquidityPoolType { + readonly name: 'liquidityPoolConstantProduct'; + + readonly value: 0; + + static liquidityPoolConstantProduct(): LiquidityPoolType; + } + + class OfferEntryFlags { + readonly name: 'passiveFlag'; + + readonly value: 1; + + static passiveFlag(): OfferEntryFlags; + } + + class ClaimPredicateType { + readonly name: + | 'claimPredicateUnconditional' + | 'claimPredicateAnd' + | 'claimPredicateOr' + | 'claimPredicateNot' + | 'claimPredicateBeforeAbsoluteTime' + | 'claimPredicateBeforeRelativeTime'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5; + + static claimPredicateUnconditional(): ClaimPredicateType; + + static claimPredicateAnd(): ClaimPredicateType; + + static claimPredicateOr(): ClaimPredicateType; + + static claimPredicateNot(): ClaimPredicateType; + + static claimPredicateBeforeAbsoluteTime(): ClaimPredicateType; + + static claimPredicateBeforeRelativeTime(): ClaimPredicateType; + } + + class ClaimantType { + readonly name: 'claimantTypeV0'; + + readonly value: 0; + + static claimantTypeV0(): ClaimantType; + } + + class ClaimableBalanceIdType { + readonly name: 'claimableBalanceIdTypeV0'; + + readonly value: 0; + + static claimableBalanceIdTypeV0(): ClaimableBalanceIdType; + } + + class ClaimableBalanceFlags { + readonly name: 'claimableBalanceClawbackEnabledFlag'; + + readonly value: 1; + + static claimableBalanceClawbackEnabledFlag(): ClaimableBalanceFlags; + } + + class ContractDataDurability { + readonly name: 'temporary' | 'persistent'; + + readonly value: 0 | 1; + + static temporary(): ContractDataDurability; + + static persistent(): ContractDataDurability; + } + + class EnvelopeType { + readonly name: + | 'envelopeTypeTxV0' + | 'envelopeTypeScp' + | 'envelopeTypeTx' + | 'envelopeTypeAuth' + | 'envelopeTypeScpvalue' + | 'envelopeTypeTxFeeBump' + | 'envelopeTypeOpId' + | 'envelopeTypePoolRevokeOpId' + | 'envelopeTypeContractId' + | 'envelopeTypeSorobanAuthorization'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static envelopeTypeTxV0(): EnvelopeType; + + static envelopeTypeScp(): EnvelopeType; + + static envelopeTypeTx(): EnvelopeType; + + static envelopeTypeAuth(): EnvelopeType; + + static envelopeTypeScpvalue(): EnvelopeType; + + static envelopeTypeTxFeeBump(): EnvelopeType; + + static envelopeTypeOpId(): EnvelopeType; + + static envelopeTypePoolRevokeOpId(): EnvelopeType; + + static envelopeTypeContractId(): EnvelopeType; + + static envelopeTypeSorobanAuthorization(): EnvelopeType; + } + + class BucketListType { + readonly name: 'live' | 'hotArchive' | 'coldArchive'; + + readonly value: 0 | 1 | 2; + + static live(): BucketListType; + + static hotArchive(): BucketListType; + + static coldArchive(): BucketListType; + } + + class BucketEntryType { + readonly name: 'metaentry' | 'liveentry' | 'deadentry' | 'initentry'; + + readonly value: -1 | 0 | 1 | 2; + + static metaentry(): BucketEntryType; + + static liveentry(): BucketEntryType; + + static deadentry(): BucketEntryType; + + static initentry(): BucketEntryType; + } + + class HotArchiveBucketEntryType { + readonly name: + | 'hotArchiveMetaentry' + | 'hotArchiveArchived' + | 'hotArchiveLive' + | 'hotArchiveDeleted'; + + readonly value: -1 | 0 | 1 | 2; + + static hotArchiveMetaentry(): HotArchiveBucketEntryType; + + static hotArchiveArchived(): HotArchiveBucketEntryType; + + static hotArchiveLive(): HotArchiveBucketEntryType; + + static hotArchiveDeleted(): HotArchiveBucketEntryType; + } + + class ColdArchiveBucketEntryType { + readonly name: + | 'coldArchiveMetaentry' + | 'coldArchiveArchivedLeaf' + | 'coldArchiveDeletedLeaf' + | 'coldArchiveBoundaryLeaf' + | 'coldArchiveHash'; + + readonly value: -1 | 0 | 1 | 2 | 3; + + static coldArchiveMetaentry(): ColdArchiveBucketEntryType; + + static coldArchiveArchivedLeaf(): ColdArchiveBucketEntryType; + + static coldArchiveDeletedLeaf(): ColdArchiveBucketEntryType; + + static coldArchiveBoundaryLeaf(): ColdArchiveBucketEntryType; + + static coldArchiveHash(): ColdArchiveBucketEntryType; + } + + class StellarValueType { + readonly name: 'stellarValueBasic' | 'stellarValueSigned'; + + readonly value: 0 | 1; + + static stellarValueBasic(): StellarValueType; + + static stellarValueSigned(): StellarValueType; + } + + class LedgerHeaderFlags { + readonly name: + | 'disableLiquidityPoolTradingFlag' + | 'disableLiquidityPoolDepositFlag' + | 'disableLiquidityPoolWithdrawalFlag'; + + readonly value: 1 | 2 | 4; + + static disableLiquidityPoolTradingFlag(): LedgerHeaderFlags; + + static disableLiquidityPoolDepositFlag(): LedgerHeaderFlags; + + static disableLiquidityPoolWithdrawalFlag(): LedgerHeaderFlags; + } + + class LedgerUpgradeType { + readonly name: + | 'ledgerUpgradeVersion' + | 'ledgerUpgradeBaseFee' + | 'ledgerUpgradeMaxTxSetSize' + | 'ledgerUpgradeBaseReserve' + | 'ledgerUpgradeFlags' + | 'ledgerUpgradeConfig' + | 'ledgerUpgradeMaxSorobanTxSetSize'; + + readonly value: 1 | 2 | 3 | 4 | 5 | 6 | 7; + + static ledgerUpgradeVersion(): LedgerUpgradeType; + + static ledgerUpgradeBaseFee(): LedgerUpgradeType; + + static ledgerUpgradeMaxTxSetSize(): LedgerUpgradeType; + + static ledgerUpgradeBaseReserve(): LedgerUpgradeType; + + static ledgerUpgradeFlags(): LedgerUpgradeType; + + static ledgerUpgradeConfig(): LedgerUpgradeType; + + static ledgerUpgradeMaxSorobanTxSetSize(): LedgerUpgradeType; + } + + class TxSetComponentType { + readonly name: 'txsetCompTxsMaybeDiscountedFee'; + + readonly value: 0; + + static txsetCompTxsMaybeDiscountedFee(): TxSetComponentType; + } + + class LedgerEntryChangeType { + readonly name: + | 'ledgerEntryCreated' + | 'ledgerEntryUpdated' + | 'ledgerEntryRemoved' + | 'ledgerEntryState'; + + readonly value: 0 | 1 | 2 | 3; + + static ledgerEntryCreated(): LedgerEntryChangeType; + + static ledgerEntryUpdated(): LedgerEntryChangeType; + + static ledgerEntryRemoved(): LedgerEntryChangeType; + + static ledgerEntryState(): LedgerEntryChangeType; + } + + class ContractEventType { + readonly name: 'system' | 'contract' | 'diagnostic'; + + readonly value: 0 | 1 | 2; + + static system(): ContractEventType; + + static contract(): ContractEventType; + + static diagnostic(): ContractEventType; + } + + class ErrorCode { + readonly name: 'errMisc' | 'errData' | 'errConf' | 'errAuth' | 'errLoad'; + + readonly value: 0 | 1 | 2 | 3 | 4; + + static errMisc(): ErrorCode; + + static errData(): ErrorCode; + + static errConf(): ErrorCode; + + static errAuth(): ErrorCode; + + static errLoad(): ErrorCode; + } + + class IpAddrType { + readonly name: 'iPv4' | 'iPv6'; + + readonly value: 0 | 1; + + static iPv4(): IpAddrType; + + static iPv6(): IpAddrType; + } + + class MessageType { + readonly name: + | 'errorMsg' + | 'auth' + | 'dontHave' + | 'getPeers' + | 'peers' + | 'getTxSet' + | 'txSet' + | 'generalizedTxSet' + | 'transaction' + | 'getScpQuorumset' + | 'scpQuorumset' + | 'scpMessage' + | 'getScpState' + | 'hello' + | 'surveyRequest' + | 'surveyResponse' + | 'sendMore' + | 'sendMoreExtended' + | 'floodAdvert' + | 'floodDemand' + | 'timeSlicedSurveyRequest' + | 'timeSlicedSurveyResponse' + | 'timeSlicedSurveyStartCollecting' + | 'timeSlicedSurveyStopCollecting'; + + readonly value: + | 0 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 17 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 20 + | 18 + | 19 + | 21 + | 22 + | 23 + | 24; + + static errorMsg(): MessageType; + + static auth(): MessageType; + + static dontHave(): MessageType; + + static getPeers(): MessageType; + + static peers(): MessageType; + + static getTxSet(): MessageType; + + static txSet(): MessageType; + + static generalizedTxSet(): MessageType; + + static transaction(): MessageType; + + static getScpQuorumset(): MessageType; + + static scpQuorumset(): MessageType; + + static scpMessage(): MessageType; + + static getScpState(): MessageType; + + static hello(): MessageType; + + static surveyRequest(): MessageType; + + static surveyResponse(): MessageType; + + static sendMore(): MessageType; + + static sendMoreExtended(): MessageType; + + static floodAdvert(): MessageType; + + static floodDemand(): MessageType; + + static timeSlicedSurveyRequest(): MessageType; + + static timeSlicedSurveyResponse(): MessageType; + + static timeSlicedSurveyStartCollecting(): MessageType; + + static timeSlicedSurveyStopCollecting(): MessageType; + } + + class SurveyMessageCommandType { + readonly name: 'surveyTopology' | 'timeSlicedSurveyTopology'; + + readonly value: 0 | 1; + + static surveyTopology(): SurveyMessageCommandType; + + static timeSlicedSurveyTopology(): SurveyMessageCommandType; + } + + class SurveyMessageResponseType { + readonly name: + | 'surveyTopologyResponseV0' + | 'surveyTopologyResponseV1' + | 'surveyTopologyResponseV2'; + + readonly value: 0 | 1 | 2; + + static surveyTopologyResponseV0(): SurveyMessageResponseType; + + static surveyTopologyResponseV1(): SurveyMessageResponseType; + + static surveyTopologyResponseV2(): SurveyMessageResponseType; + } + + class OperationType { + readonly name: + | 'createAccount' + | 'payment' + | 'pathPaymentStrictReceive' + | 'manageSellOffer' + | 'createPassiveSellOffer' + | 'setOptions' + | 'changeTrust' + | 'allowTrust' + | 'accountMerge' + | 'inflation' + | 'manageData' + | 'bumpSequence' + | 'manageBuyOffer' + | 'pathPaymentStrictSend' + | 'createClaimableBalance' + | 'claimClaimableBalance' + | 'beginSponsoringFutureReserves' + | 'endSponsoringFutureReserves' + | 'revokeSponsorship' + | 'clawback' + | 'clawbackClaimableBalance' + | 'setTrustLineFlags' + | 'liquidityPoolDeposit' + | 'liquidityPoolWithdraw' + | 'invokeHostFunction' + | 'extendFootprintTtl' + | 'restoreFootprint'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26; + + static createAccount(): OperationType; + + static payment(): OperationType; + + static pathPaymentStrictReceive(): OperationType; + + static manageSellOffer(): OperationType; + + static createPassiveSellOffer(): OperationType; + + static setOptions(): OperationType; + + static changeTrust(): OperationType; + + static allowTrust(): OperationType; + + static accountMerge(): OperationType; + + static inflation(): OperationType; + + static manageData(): OperationType; + + static bumpSequence(): OperationType; + + static manageBuyOffer(): OperationType; + + static pathPaymentStrictSend(): OperationType; + + static createClaimableBalance(): OperationType; + + static claimClaimableBalance(): OperationType; + + static beginSponsoringFutureReserves(): OperationType; + + static endSponsoringFutureReserves(): OperationType; + + static revokeSponsorship(): OperationType; + + static clawback(): OperationType; + + static clawbackClaimableBalance(): OperationType; + + static setTrustLineFlags(): OperationType; + + static liquidityPoolDeposit(): OperationType; + + static liquidityPoolWithdraw(): OperationType; + + static invokeHostFunction(): OperationType; + + static extendFootprintTtl(): OperationType; + + static restoreFootprint(): OperationType; + } + + class RevokeSponsorshipType { + readonly name: 'revokeSponsorshipLedgerEntry' | 'revokeSponsorshipSigner'; + + readonly value: 0 | 1; + + static revokeSponsorshipLedgerEntry(): RevokeSponsorshipType; + + static revokeSponsorshipSigner(): RevokeSponsorshipType; + } + + class HostFunctionType { + readonly name: + | 'hostFunctionTypeInvokeContract' + | 'hostFunctionTypeCreateContract' + | 'hostFunctionTypeUploadContractWasm' + | 'hostFunctionTypeCreateContractV2'; + + readonly value: 0 | 1 | 2 | 3; + + static hostFunctionTypeInvokeContract(): HostFunctionType; + + static hostFunctionTypeCreateContract(): HostFunctionType; + + static hostFunctionTypeUploadContractWasm(): HostFunctionType; + + static hostFunctionTypeCreateContractV2(): HostFunctionType; + } + + class ContractIdPreimageType { + readonly name: + | 'contractIdPreimageFromAddress' + | 'contractIdPreimageFromAsset'; + + readonly value: 0 | 1; + + static contractIdPreimageFromAddress(): ContractIdPreimageType; + + static contractIdPreimageFromAsset(): ContractIdPreimageType; + } + + class SorobanAuthorizedFunctionType { + readonly name: + | 'sorobanAuthorizedFunctionTypeContractFn' + | 'sorobanAuthorizedFunctionTypeCreateContractHostFn' + | 'sorobanAuthorizedFunctionTypeCreateContractV2HostFn'; + + readonly value: 0 | 1 | 2; + + static sorobanAuthorizedFunctionTypeContractFn(): SorobanAuthorizedFunctionType; + + static sorobanAuthorizedFunctionTypeCreateContractHostFn(): SorobanAuthorizedFunctionType; + + static sorobanAuthorizedFunctionTypeCreateContractV2HostFn(): SorobanAuthorizedFunctionType; + } + + class SorobanCredentialsType { + readonly name: + | 'sorobanCredentialsSourceAccount' + | 'sorobanCredentialsAddress'; + + readonly value: 0 | 1; + + static sorobanCredentialsSourceAccount(): SorobanCredentialsType; + + static sorobanCredentialsAddress(): SorobanCredentialsType; + } + + class MemoType { + readonly name: + | 'memoNone' + | 'memoText' + | 'memoId' + | 'memoHash' + | 'memoReturn'; + + readonly value: 0 | 1 | 2 | 3 | 4; + + static memoNone(): MemoType; + + static memoText(): MemoType; + + static memoId(): MemoType; + + static memoHash(): MemoType; + + static memoReturn(): MemoType; + } + + class PreconditionType { + readonly name: 'precondNone' | 'precondTime' | 'precondV2'; + + readonly value: 0 | 1 | 2; + + static precondNone(): PreconditionType; + + static precondTime(): PreconditionType; + + static precondV2(): PreconditionType; + } + + class ArchivalProofType { + readonly name: 'existence' | 'nonexistence'; + + readonly value: 0 | 1; + + static existence(): ArchivalProofType; + + static nonexistence(): ArchivalProofType; + } + + class ClaimAtomType { + readonly name: + | 'claimAtomTypeV0' + | 'claimAtomTypeOrderBook' + | 'claimAtomTypeLiquidityPool'; + + readonly value: 0 | 1 | 2; + + static claimAtomTypeV0(): ClaimAtomType; + + static claimAtomTypeOrderBook(): ClaimAtomType; + + static claimAtomTypeLiquidityPool(): ClaimAtomType; + } + + class CreateAccountResultCode { + readonly name: + | 'createAccountSuccess' + | 'createAccountMalformed' + | 'createAccountUnderfunded' + | 'createAccountLowReserve' + | 'createAccountAlreadyExist'; + + readonly value: 0 | -1 | -2 | -3 | -4; + + static createAccountSuccess(): CreateAccountResultCode; + + static createAccountMalformed(): CreateAccountResultCode; + + static createAccountUnderfunded(): CreateAccountResultCode; + + static createAccountLowReserve(): CreateAccountResultCode; + + static createAccountAlreadyExist(): CreateAccountResultCode; + } + + class PaymentResultCode { + readonly name: + | 'paymentSuccess' + | 'paymentMalformed' + | 'paymentUnderfunded' + | 'paymentSrcNoTrust' + | 'paymentSrcNotAuthorized' + | 'paymentNoDestination' + | 'paymentNoTrust' + | 'paymentNotAuthorized' + | 'paymentLineFull' + | 'paymentNoIssuer'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9; + + static paymentSuccess(): PaymentResultCode; + + static paymentMalformed(): PaymentResultCode; + + static paymentUnderfunded(): PaymentResultCode; + + static paymentSrcNoTrust(): PaymentResultCode; + + static paymentSrcNotAuthorized(): PaymentResultCode; + + static paymentNoDestination(): PaymentResultCode; + + static paymentNoTrust(): PaymentResultCode; + + static paymentNotAuthorized(): PaymentResultCode; + + static paymentLineFull(): PaymentResultCode; + + static paymentNoIssuer(): PaymentResultCode; + } + + class PathPaymentStrictReceiveResultCode { + readonly name: + | 'pathPaymentStrictReceiveSuccess' + | 'pathPaymentStrictReceiveMalformed' + | 'pathPaymentStrictReceiveUnderfunded' + | 'pathPaymentStrictReceiveSrcNoTrust' + | 'pathPaymentStrictReceiveSrcNotAuthorized' + | 'pathPaymentStrictReceiveNoDestination' + | 'pathPaymentStrictReceiveNoTrust' + | 'pathPaymentStrictReceiveNotAuthorized' + | 'pathPaymentStrictReceiveLineFull' + | 'pathPaymentStrictReceiveNoIssuer' + | 'pathPaymentStrictReceiveTooFewOffers' + | 'pathPaymentStrictReceiveOfferCrossSelf' + | 'pathPaymentStrictReceiveOverSendmax'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static pathPaymentStrictReceiveSuccess(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveMalformed(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveUnderfunded(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveSrcNoTrust(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveSrcNotAuthorized(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNoDestination(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNoTrust(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNotAuthorized(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveLineFull(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNoIssuer(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveTooFewOffers(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveOfferCrossSelf(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveOverSendmax(): PathPaymentStrictReceiveResultCode; + } + + class PathPaymentStrictSendResultCode { + readonly name: + | 'pathPaymentStrictSendSuccess' + | 'pathPaymentStrictSendMalformed' + | 'pathPaymentStrictSendUnderfunded' + | 'pathPaymentStrictSendSrcNoTrust' + | 'pathPaymentStrictSendSrcNotAuthorized' + | 'pathPaymentStrictSendNoDestination' + | 'pathPaymentStrictSendNoTrust' + | 'pathPaymentStrictSendNotAuthorized' + | 'pathPaymentStrictSendLineFull' + | 'pathPaymentStrictSendNoIssuer' + | 'pathPaymentStrictSendTooFewOffers' + | 'pathPaymentStrictSendOfferCrossSelf' + | 'pathPaymentStrictSendUnderDestmin'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static pathPaymentStrictSendSuccess(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendMalformed(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendUnderfunded(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendSrcNoTrust(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendSrcNotAuthorized(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNoDestination(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNoTrust(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNotAuthorized(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendLineFull(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNoIssuer(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendTooFewOffers(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendOfferCrossSelf(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendUnderDestmin(): PathPaymentStrictSendResultCode; + } + + class ManageSellOfferResultCode { + readonly name: + | 'manageSellOfferSuccess' + | 'manageSellOfferMalformed' + | 'manageSellOfferSellNoTrust' + | 'manageSellOfferBuyNoTrust' + | 'manageSellOfferSellNotAuthorized' + | 'manageSellOfferBuyNotAuthorized' + | 'manageSellOfferLineFull' + | 'manageSellOfferUnderfunded' + | 'manageSellOfferCrossSelf' + | 'manageSellOfferSellNoIssuer' + | 'manageSellOfferBuyNoIssuer' + | 'manageSellOfferNotFound' + | 'manageSellOfferLowReserve'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static manageSellOfferSuccess(): ManageSellOfferResultCode; + + static manageSellOfferMalformed(): ManageSellOfferResultCode; + + static manageSellOfferSellNoTrust(): ManageSellOfferResultCode; + + static manageSellOfferBuyNoTrust(): ManageSellOfferResultCode; + + static manageSellOfferSellNotAuthorized(): ManageSellOfferResultCode; + + static manageSellOfferBuyNotAuthorized(): ManageSellOfferResultCode; + + static manageSellOfferLineFull(): ManageSellOfferResultCode; + + static manageSellOfferUnderfunded(): ManageSellOfferResultCode; + + static manageSellOfferCrossSelf(): ManageSellOfferResultCode; + + static manageSellOfferSellNoIssuer(): ManageSellOfferResultCode; + + static manageSellOfferBuyNoIssuer(): ManageSellOfferResultCode; + + static manageSellOfferNotFound(): ManageSellOfferResultCode; + + static manageSellOfferLowReserve(): ManageSellOfferResultCode; + } + + class ManageOfferEffect { + readonly name: + | 'manageOfferCreated' + | 'manageOfferUpdated' + | 'manageOfferDeleted'; + + readonly value: 0 | 1 | 2; + + static manageOfferCreated(): ManageOfferEffect; + + static manageOfferUpdated(): ManageOfferEffect; + + static manageOfferDeleted(): ManageOfferEffect; + } + + class ManageBuyOfferResultCode { + readonly name: + | 'manageBuyOfferSuccess' + | 'manageBuyOfferMalformed' + | 'manageBuyOfferSellNoTrust' + | 'manageBuyOfferBuyNoTrust' + | 'manageBuyOfferSellNotAuthorized' + | 'manageBuyOfferBuyNotAuthorized' + | 'manageBuyOfferLineFull' + | 'manageBuyOfferUnderfunded' + | 'manageBuyOfferCrossSelf' + | 'manageBuyOfferSellNoIssuer' + | 'manageBuyOfferBuyNoIssuer' + | 'manageBuyOfferNotFound' + | 'manageBuyOfferLowReserve'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static manageBuyOfferSuccess(): ManageBuyOfferResultCode; + + static manageBuyOfferMalformed(): ManageBuyOfferResultCode; + + static manageBuyOfferSellNoTrust(): ManageBuyOfferResultCode; + + static manageBuyOfferBuyNoTrust(): ManageBuyOfferResultCode; + + static manageBuyOfferSellNotAuthorized(): ManageBuyOfferResultCode; + + static manageBuyOfferBuyNotAuthorized(): ManageBuyOfferResultCode; + + static manageBuyOfferLineFull(): ManageBuyOfferResultCode; + + static manageBuyOfferUnderfunded(): ManageBuyOfferResultCode; + + static manageBuyOfferCrossSelf(): ManageBuyOfferResultCode; + + static manageBuyOfferSellNoIssuer(): ManageBuyOfferResultCode; + + static manageBuyOfferBuyNoIssuer(): ManageBuyOfferResultCode; + + static manageBuyOfferNotFound(): ManageBuyOfferResultCode; + + static manageBuyOfferLowReserve(): ManageBuyOfferResultCode; + } + + class SetOptionsResultCode { + readonly name: + | 'setOptionsSuccess' + | 'setOptionsLowReserve' + | 'setOptionsTooManySigners' + | 'setOptionsBadFlags' + | 'setOptionsInvalidInflation' + | 'setOptionsCantChange' + | 'setOptionsUnknownFlag' + | 'setOptionsThresholdOutOfRange' + | 'setOptionsBadSigner' + | 'setOptionsInvalidHomeDomain' + | 'setOptionsAuthRevocableRequired'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10; + + static setOptionsSuccess(): SetOptionsResultCode; + + static setOptionsLowReserve(): SetOptionsResultCode; + + static setOptionsTooManySigners(): SetOptionsResultCode; + + static setOptionsBadFlags(): SetOptionsResultCode; + + static setOptionsInvalidInflation(): SetOptionsResultCode; + + static setOptionsCantChange(): SetOptionsResultCode; + + static setOptionsUnknownFlag(): SetOptionsResultCode; + + static setOptionsThresholdOutOfRange(): SetOptionsResultCode; + + static setOptionsBadSigner(): SetOptionsResultCode; + + static setOptionsInvalidHomeDomain(): SetOptionsResultCode; + + static setOptionsAuthRevocableRequired(): SetOptionsResultCode; + } + + class ChangeTrustResultCode { + readonly name: + | 'changeTrustSuccess' + | 'changeTrustMalformed' + | 'changeTrustNoIssuer' + | 'changeTrustInvalidLimit' + | 'changeTrustLowReserve' + | 'changeTrustSelfNotAllowed' + | 'changeTrustTrustLineMissing' + | 'changeTrustCannotDelete' + | 'changeTrustNotAuthMaintainLiabilities'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8; + + static changeTrustSuccess(): ChangeTrustResultCode; + + static changeTrustMalformed(): ChangeTrustResultCode; + + static changeTrustNoIssuer(): ChangeTrustResultCode; + + static changeTrustInvalidLimit(): ChangeTrustResultCode; + + static changeTrustLowReserve(): ChangeTrustResultCode; + + static changeTrustSelfNotAllowed(): ChangeTrustResultCode; + + static changeTrustTrustLineMissing(): ChangeTrustResultCode; + + static changeTrustCannotDelete(): ChangeTrustResultCode; + + static changeTrustNotAuthMaintainLiabilities(): ChangeTrustResultCode; + } + + class AllowTrustResultCode { + readonly name: + | 'allowTrustSuccess' + | 'allowTrustMalformed' + | 'allowTrustNoTrustLine' + | 'allowTrustTrustNotRequired' + | 'allowTrustCantRevoke' + | 'allowTrustSelfNotAllowed' + | 'allowTrustLowReserve'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6; + + static allowTrustSuccess(): AllowTrustResultCode; + + static allowTrustMalformed(): AllowTrustResultCode; + + static allowTrustNoTrustLine(): AllowTrustResultCode; + + static allowTrustTrustNotRequired(): AllowTrustResultCode; + + static allowTrustCantRevoke(): AllowTrustResultCode; + + static allowTrustSelfNotAllowed(): AllowTrustResultCode; + + static allowTrustLowReserve(): AllowTrustResultCode; + } + + class AccountMergeResultCode { + readonly name: + | 'accountMergeSuccess' + | 'accountMergeMalformed' + | 'accountMergeNoAccount' + | 'accountMergeImmutableSet' + | 'accountMergeHasSubEntries' + | 'accountMergeSeqnumTooFar' + | 'accountMergeDestFull' + | 'accountMergeIsSponsor'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7; + + static accountMergeSuccess(): AccountMergeResultCode; + + static accountMergeMalformed(): AccountMergeResultCode; + + static accountMergeNoAccount(): AccountMergeResultCode; + + static accountMergeImmutableSet(): AccountMergeResultCode; + + static accountMergeHasSubEntries(): AccountMergeResultCode; + + static accountMergeSeqnumTooFar(): AccountMergeResultCode; + + static accountMergeDestFull(): AccountMergeResultCode; + + static accountMergeIsSponsor(): AccountMergeResultCode; + } + + class InflationResultCode { + readonly name: 'inflationSuccess' | 'inflationNotTime'; + + readonly value: 0 | -1; + + static inflationSuccess(): InflationResultCode; + + static inflationNotTime(): InflationResultCode; + } + + class ManageDataResultCode { + readonly name: + | 'manageDataSuccess' + | 'manageDataNotSupportedYet' + | 'manageDataNameNotFound' + | 'manageDataLowReserve' + | 'manageDataInvalidName'; + + readonly value: 0 | -1 | -2 | -3 | -4; + + static manageDataSuccess(): ManageDataResultCode; + + static manageDataNotSupportedYet(): ManageDataResultCode; + + static manageDataNameNotFound(): ManageDataResultCode; + + static manageDataLowReserve(): ManageDataResultCode; + + static manageDataInvalidName(): ManageDataResultCode; + } + + class BumpSequenceResultCode { + readonly name: 'bumpSequenceSuccess' | 'bumpSequenceBadSeq'; + + readonly value: 0 | -1; + + static bumpSequenceSuccess(): BumpSequenceResultCode; + + static bumpSequenceBadSeq(): BumpSequenceResultCode; + } + + class CreateClaimableBalanceResultCode { + readonly name: + | 'createClaimableBalanceSuccess' + | 'createClaimableBalanceMalformed' + | 'createClaimableBalanceLowReserve' + | 'createClaimableBalanceNoTrust' + | 'createClaimableBalanceNotAuthorized' + | 'createClaimableBalanceUnderfunded'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static createClaimableBalanceSuccess(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceMalformed(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceLowReserve(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceNoTrust(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceNotAuthorized(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceUnderfunded(): CreateClaimableBalanceResultCode; + } + + class ClaimClaimableBalanceResultCode { + readonly name: + | 'claimClaimableBalanceSuccess' + | 'claimClaimableBalanceDoesNotExist' + | 'claimClaimableBalanceCannotClaim' + | 'claimClaimableBalanceLineFull' + | 'claimClaimableBalanceNoTrust' + | 'claimClaimableBalanceNotAuthorized'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static claimClaimableBalanceSuccess(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceDoesNotExist(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceCannotClaim(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceLineFull(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceNoTrust(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceNotAuthorized(): ClaimClaimableBalanceResultCode; + } + + class BeginSponsoringFutureReservesResultCode { + readonly name: + | 'beginSponsoringFutureReservesSuccess' + | 'beginSponsoringFutureReservesMalformed' + | 'beginSponsoringFutureReservesAlreadySponsored' + | 'beginSponsoringFutureReservesRecursive'; + + readonly value: 0 | -1 | -2 | -3; + + static beginSponsoringFutureReservesSuccess(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesMalformed(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesAlreadySponsored(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesRecursive(): BeginSponsoringFutureReservesResultCode; + } + + class EndSponsoringFutureReservesResultCode { + readonly name: + | 'endSponsoringFutureReservesSuccess' + | 'endSponsoringFutureReservesNotSponsored'; + + readonly value: 0 | -1; + + static endSponsoringFutureReservesSuccess(): EndSponsoringFutureReservesResultCode; + + static endSponsoringFutureReservesNotSponsored(): EndSponsoringFutureReservesResultCode; + } + + class RevokeSponsorshipResultCode { + readonly name: + | 'revokeSponsorshipSuccess' + | 'revokeSponsorshipDoesNotExist' + | 'revokeSponsorshipNotSponsor' + | 'revokeSponsorshipLowReserve' + | 'revokeSponsorshipOnlyTransferable' + | 'revokeSponsorshipMalformed'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static revokeSponsorshipSuccess(): RevokeSponsorshipResultCode; + + static revokeSponsorshipDoesNotExist(): RevokeSponsorshipResultCode; + + static revokeSponsorshipNotSponsor(): RevokeSponsorshipResultCode; + + static revokeSponsorshipLowReserve(): RevokeSponsorshipResultCode; + + static revokeSponsorshipOnlyTransferable(): RevokeSponsorshipResultCode; + + static revokeSponsorshipMalformed(): RevokeSponsorshipResultCode; + } + + class ClawbackResultCode { + readonly name: + | 'clawbackSuccess' + | 'clawbackMalformed' + | 'clawbackNotClawbackEnabled' + | 'clawbackNoTrust' + | 'clawbackUnderfunded'; + + readonly value: 0 | -1 | -2 | -3 | -4; + + static clawbackSuccess(): ClawbackResultCode; + + static clawbackMalformed(): ClawbackResultCode; + + static clawbackNotClawbackEnabled(): ClawbackResultCode; + + static clawbackNoTrust(): ClawbackResultCode; + + static clawbackUnderfunded(): ClawbackResultCode; + } + + class ClawbackClaimableBalanceResultCode { + readonly name: + | 'clawbackClaimableBalanceSuccess' + | 'clawbackClaimableBalanceDoesNotExist' + | 'clawbackClaimableBalanceNotIssuer' + | 'clawbackClaimableBalanceNotClawbackEnabled'; + + readonly value: 0 | -1 | -2 | -3; + + static clawbackClaimableBalanceSuccess(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceDoesNotExist(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceNotIssuer(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceNotClawbackEnabled(): ClawbackClaimableBalanceResultCode; + } + + class SetTrustLineFlagsResultCode { + readonly name: + | 'setTrustLineFlagsSuccess' + | 'setTrustLineFlagsMalformed' + | 'setTrustLineFlagsNoTrustLine' + | 'setTrustLineFlagsCantRevoke' + | 'setTrustLineFlagsInvalidState' + | 'setTrustLineFlagsLowReserve'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static setTrustLineFlagsSuccess(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsMalformed(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsNoTrustLine(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsCantRevoke(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsInvalidState(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsLowReserve(): SetTrustLineFlagsResultCode; + } + + class LiquidityPoolDepositResultCode { + readonly name: + | 'liquidityPoolDepositSuccess' + | 'liquidityPoolDepositMalformed' + | 'liquidityPoolDepositNoTrust' + | 'liquidityPoolDepositNotAuthorized' + | 'liquidityPoolDepositUnderfunded' + | 'liquidityPoolDepositLineFull' + | 'liquidityPoolDepositBadPrice' + | 'liquidityPoolDepositPoolFull'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7; + + static liquidityPoolDepositSuccess(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositMalformed(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositNoTrust(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositNotAuthorized(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositUnderfunded(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositLineFull(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositBadPrice(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositPoolFull(): LiquidityPoolDepositResultCode; + } + + class LiquidityPoolWithdrawResultCode { + readonly name: + | 'liquidityPoolWithdrawSuccess' + | 'liquidityPoolWithdrawMalformed' + | 'liquidityPoolWithdrawNoTrust' + | 'liquidityPoolWithdrawUnderfunded' + | 'liquidityPoolWithdrawLineFull' + | 'liquidityPoolWithdrawUnderMinimum'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static liquidityPoolWithdrawSuccess(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawMalformed(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawNoTrust(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawUnderfunded(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawLineFull(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawUnderMinimum(): LiquidityPoolWithdrawResultCode; + } + + class InvokeHostFunctionResultCode { + readonly name: + | 'invokeHostFunctionSuccess' + | 'invokeHostFunctionMalformed' + | 'invokeHostFunctionTrapped' + | 'invokeHostFunctionResourceLimitExceeded' + | 'invokeHostFunctionEntryArchived' + | 'invokeHostFunctionInsufficientRefundableFee'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static invokeHostFunctionSuccess(): InvokeHostFunctionResultCode; + + static invokeHostFunctionMalformed(): InvokeHostFunctionResultCode; + + static invokeHostFunctionTrapped(): InvokeHostFunctionResultCode; + + static invokeHostFunctionResourceLimitExceeded(): InvokeHostFunctionResultCode; + + static invokeHostFunctionEntryArchived(): InvokeHostFunctionResultCode; + + static invokeHostFunctionInsufficientRefundableFee(): InvokeHostFunctionResultCode; + } + + class ExtendFootprintTtlResultCode { + readonly name: + | 'extendFootprintTtlSuccess' + | 'extendFootprintTtlMalformed' + | 'extendFootprintTtlResourceLimitExceeded' + | 'extendFootprintTtlInsufficientRefundableFee'; + + readonly value: 0 | -1 | -2 | -3; + + static extendFootprintTtlSuccess(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlMalformed(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlResourceLimitExceeded(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlInsufficientRefundableFee(): ExtendFootprintTtlResultCode; + } + + class RestoreFootprintResultCode { + readonly name: + | 'restoreFootprintSuccess' + | 'restoreFootprintMalformed' + | 'restoreFootprintResourceLimitExceeded' + | 'restoreFootprintInsufficientRefundableFee'; + + readonly value: 0 | -1 | -2 | -3; + + static restoreFootprintSuccess(): RestoreFootprintResultCode; + + static restoreFootprintMalformed(): RestoreFootprintResultCode; + + static restoreFootprintResourceLimitExceeded(): RestoreFootprintResultCode; + + static restoreFootprintInsufficientRefundableFee(): RestoreFootprintResultCode; + } + + class OperationResultCode { + readonly name: + | 'opInner' + | 'opBadAuth' + | 'opNoAccount' + | 'opNotSupported' + | 'opTooManySubentries' + | 'opExceededWorkLimit' + | 'opTooManySponsoring'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6; + + static opInner(): OperationResultCode; + + static opBadAuth(): OperationResultCode; + + static opNoAccount(): OperationResultCode; + + static opNotSupported(): OperationResultCode; + + static opTooManySubentries(): OperationResultCode; + + static opExceededWorkLimit(): OperationResultCode; + + static opTooManySponsoring(): OperationResultCode; + } + + class TransactionResultCode { + readonly name: + | 'txFeeBumpInnerSuccess' + | 'txSuccess' + | 'txFailed' + | 'txTooEarly' + | 'txTooLate' + | 'txMissingOperation' + | 'txBadSeq' + | 'txBadAuth' + | 'txInsufficientBalance' + | 'txNoAccount' + | 'txInsufficientFee' + | 'txBadAuthExtra' + | 'txInternalError' + | 'txNotSupported' + | 'txFeeBumpInnerFailed' + | 'txBadSponsorship' + | 'txBadMinSeqAgeOrGap' + | 'txMalformed' + | 'txSorobanInvalid'; + + readonly value: + | 1 + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12 + | -13 + | -14 + | -15 + | -16 + | -17; + + static txFeeBumpInnerSuccess(): TransactionResultCode; + + static txSuccess(): TransactionResultCode; + + static txFailed(): TransactionResultCode; + + static txTooEarly(): TransactionResultCode; + + static txTooLate(): TransactionResultCode; + + static txMissingOperation(): TransactionResultCode; + + static txBadSeq(): TransactionResultCode; + + static txBadAuth(): TransactionResultCode; + + static txInsufficientBalance(): TransactionResultCode; + + static txNoAccount(): TransactionResultCode; + + static txInsufficientFee(): TransactionResultCode; + + static txBadAuthExtra(): TransactionResultCode; + + static txInternalError(): TransactionResultCode; + + static txNotSupported(): TransactionResultCode; + + static txFeeBumpInnerFailed(): TransactionResultCode; + + static txBadSponsorship(): TransactionResultCode; + + static txBadMinSeqAgeOrGap(): TransactionResultCode; + + static txMalformed(): TransactionResultCode; + + static txSorobanInvalid(): TransactionResultCode; + } + + class CryptoKeyType { + readonly name: + | 'keyTypeEd25519' + | 'keyTypePreAuthTx' + | 'keyTypeHashX' + | 'keyTypeEd25519SignedPayload' + | 'keyTypeMuxedEd25519'; + + readonly value: 0 | 1 | 2 | 3 | 256; + + static keyTypeEd25519(): CryptoKeyType; + + static keyTypePreAuthTx(): CryptoKeyType; + + static keyTypeHashX(): CryptoKeyType; + + static keyTypeEd25519SignedPayload(): CryptoKeyType; + + static keyTypeMuxedEd25519(): CryptoKeyType; + } + + class PublicKeyType { + readonly name: 'publicKeyTypeEd25519'; + + readonly value: 0; + + static publicKeyTypeEd25519(): PublicKeyType; + } + + class SignerKeyType { + readonly name: + | 'signerKeyTypeEd25519' + | 'signerKeyTypePreAuthTx' + | 'signerKeyTypeHashX' + | 'signerKeyTypeEd25519SignedPayload'; + + readonly value: 0 | 1 | 2 | 3; + + static signerKeyTypeEd25519(): SignerKeyType; + + static signerKeyTypePreAuthTx(): SignerKeyType; + + static signerKeyTypeHashX(): SignerKeyType; + + static signerKeyTypeEd25519SignedPayload(): SignerKeyType; + } + + class BinaryFuseFilterType { + readonly name: + | 'binaryFuseFilter8Bit' + | 'binaryFuseFilter16Bit' + | 'binaryFuseFilter32Bit'; + + readonly value: 0 | 1 | 2; + + static binaryFuseFilter8Bit(): BinaryFuseFilterType; + + static binaryFuseFilter16Bit(): BinaryFuseFilterType; + + static binaryFuseFilter32Bit(): BinaryFuseFilterType; + } + + class ScValType { + readonly name: + | 'scvBool' + | 'scvVoid' + | 'scvError' + | 'scvU32' + | 'scvI32' + | 'scvU64' + | 'scvI64' + | 'scvTimepoint' + | 'scvDuration' + | 'scvU128' + | 'scvI128' + | 'scvU256' + | 'scvI256' + | 'scvBytes' + | 'scvString' + | 'scvSymbol' + | 'scvVec' + | 'scvMap' + | 'scvAddress' + | 'scvContractInstance' + | 'scvLedgerKeyContractInstance' + | 'scvLedgerKeyNonce'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21; + + static scvBool(): ScValType; + + static scvVoid(): ScValType; + + static scvError(): ScValType; + + static scvU32(): ScValType; + + static scvI32(): ScValType; + + static scvU64(): ScValType; + + static scvI64(): ScValType; + + static scvTimepoint(): ScValType; + + static scvDuration(): ScValType; + + static scvU128(): ScValType; + + static scvI128(): ScValType; + + static scvU256(): ScValType; + + static scvI256(): ScValType; + + static scvBytes(): ScValType; + + static scvString(): ScValType; + + static scvSymbol(): ScValType; + + static scvVec(): ScValType; + + static scvMap(): ScValType; + + static scvAddress(): ScValType; + + static scvContractInstance(): ScValType; + + static scvLedgerKeyContractInstance(): ScValType; + + static scvLedgerKeyNonce(): ScValType; + } + + class ScErrorType { + readonly name: + | 'sceContract' + | 'sceWasmVm' + | 'sceContext' + | 'sceStorage' + | 'sceObject' + | 'sceCrypto' + | 'sceEvents' + | 'sceBudget' + | 'sceValue' + | 'sceAuth'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static sceContract(): ScErrorType; + + static sceWasmVm(): ScErrorType; + + static sceContext(): ScErrorType; + + static sceStorage(): ScErrorType; + + static sceObject(): ScErrorType; + + static sceCrypto(): ScErrorType; + + static sceEvents(): ScErrorType; + + static sceBudget(): ScErrorType; + + static sceValue(): ScErrorType; + + static sceAuth(): ScErrorType; + } + + class ScErrorCode { + readonly name: + | 'scecArithDomain' + | 'scecIndexBounds' + | 'scecInvalidInput' + | 'scecMissingValue' + | 'scecExistingValue' + | 'scecExceededLimit' + | 'scecInvalidAction' + | 'scecInternalError' + | 'scecUnexpectedType' + | 'scecUnexpectedSize'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static scecArithDomain(): ScErrorCode; + + static scecIndexBounds(): ScErrorCode; + + static scecInvalidInput(): ScErrorCode; + + static scecMissingValue(): ScErrorCode; + + static scecExistingValue(): ScErrorCode; + + static scecExceededLimit(): ScErrorCode; + + static scecInvalidAction(): ScErrorCode; + + static scecInternalError(): ScErrorCode; + + static scecUnexpectedType(): ScErrorCode; + + static scecUnexpectedSize(): ScErrorCode; + } + + class ContractExecutableType { + readonly name: 'contractExecutableWasm' | 'contractExecutableStellarAsset'; + + readonly value: 0 | 1; + + static contractExecutableWasm(): ContractExecutableType; + + static contractExecutableStellarAsset(): ContractExecutableType; + } + + class ScAddressType { + readonly name: 'scAddressTypeAccount' | 'scAddressTypeContract'; + + readonly value: 0 | 1; + + static scAddressTypeAccount(): ScAddressType; + + static scAddressTypeContract(): ScAddressType; + } + + class ScEnvMetaKind { + readonly name: 'scEnvMetaKindInterfaceVersion'; + + readonly value: 0; + + static scEnvMetaKindInterfaceVersion(): ScEnvMetaKind; + } + + class ScMetaKind { + readonly name: 'scMetaV0'; + + readonly value: 0; + + static scMetaV0(): ScMetaKind; + } + + class ScSpecType { + readonly name: + | 'scSpecTypeVal' + | 'scSpecTypeBool' + | 'scSpecTypeVoid' + | 'scSpecTypeError' + | 'scSpecTypeU32' + | 'scSpecTypeI32' + | 'scSpecTypeU64' + | 'scSpecTypeI64' + | 'scSpecTypeTimepoint' + | 'scSpecTypeDuration' + | 'scSpecTypeU128' + | 'scSpecTypeI128' + | 'scSpecTypeU256' + | 'scSpecTypeI256' + | 'scSpecTypeBytes' + | 'scSpecTypeString' + | 'scSpecTypeSymbol' + | 'scSpecTypeAddress' + | 'scSpecTypeOption' + | 'scSpecTypeResult' + | 'scSpecTypeVec' + | 'scSpecTypeMap' + | 'scSpecTypeTuple' + | 'scSpecTypeBytesN' + | 'scSpecTypeUdt'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 16 + | 17 + | 19 + | 1000 + | 1001 + | 1002 + | 1004 + | 1005 + | 1006 + | 2000; + + static scSpecTypeVal(): ScSpecType; + + static scSpecTypeBool(): ScSpecType; + + static scSpecTypeVoid(): ScSpecType; + + static scSpecTypeError(): ScSpecType; + + static scSpecTypeU32(): ScSpecType; + + static scSpecTypeI32(): ScSpecType; + + static scSpecTypeU64(): ScSpecType; + + static scSpecTypeI64(): ScSpecType; + + static scSpecTypeTimepoint(): ScSpecType; + + static scSpecTypeDuration(): ScSpecType; + + static scSpecTypeU128(): ScSpecType; + + static scSpecTypeI128(): ScSpecType; + + static scSpecTypeU256(): ScSpecType; + + static scSpecTypeI256(): ScSpecType; + + static scSpecTypeBytes(): ScSpecType; + + static scSpecTypeString(): ScSpecType; + + static scSpecTypeSymbol(): ScSpecType; + + static scSpecTypeAddress(): ScSpecType; + + static scSpecTypeOption(): ScSpecType; + + static scSpecTypeResult(): ScSpecType; + + static scSpecTypeVec(): ScSpecType; + + static scSpecTypeMap(): ScSpecType; + + static scSpecTypeTuple(): ScSpecType; + + static scSpecTypeBytesN(): ScSpecType; + + static scSpecTypeUdt(): ScSpecType; + } + + class ScSpecUdtUnionCaseV0Kind { + readonly name: 'scSpecUdtUnionCaseVoidV0' | 'scSpecUdtUnionCaseTupleV0'; + + readonly value: 0 | 1; + + static scSpecUdtUnionCaseVoidV0(): ScSpecUdtUnionCaseV0Kind; + + static scSpecUdtUnionCaseTupleV0(): ScSpecUdtUnionCaseV0Kind; + } + + class ScSpecEntryKind { + readonly name: + | 'scSpecEntryFunctionV0' + | 'scSpecEntryUdtStructV0' + | 'scSpecEntryUdtUnionV0' + | 'scSpecEntryUdtEnumV0' + | 'scSpecEntryUdtErrorEnumV0'; + + readonly value: 0 | 1 | 2 | 3 | 4; + + static scSpecEntryFunctionV0(): ScSpecEntryKind; + + static scSpecEntryUdtStructV0(): ScSpecEntryKind; + + static scSpecEntryUdtUnionV0(): ScSpecEntryKind; + + static scSpecEntryUdtEnumV0(): ScSpecEntryKind; + + static scSpecEntryUdtErrorEnumV0(): ScSpecEntryKind; + } + + class ContractCostType { + readonly name: + | 'wasmInsnExec' + | 'memAlloc' + | 'memCpy' + | 'memCmp' + | 'dispatchHostFunction' + | 'visitObject' + | 'valSer' + | 'valDeser' + | 'computeSha256Hash' + | 'computeEd25519PubKey' + | 'verifyEd25519Sig' + | 'vmInstantiation' + | 'vmCachedInstantiation' + | 'invokeVmFunction' + | 'computeKeccak256Hash' + | 'decodeEcdsaCurve256Sig' + | 'recoverEcdsaSecp256k1Key' + | 'int256AddSub' + | 'int256Mul' + | 'int256Div' + | 'int256Pow' + | 'int256Shift' + | 'chaCha20DrawBytes' + | 'parseWasmInstructions' + | 'parseWasmFunctions' + | 'parseWasmGlobals' + | 'parseWasmTableEntries' + | 'parseWasmTypes' + | 'parseWasmDataSegments' + | 'parseWasmElemSegments' + | 'parseWasmImports' + | 'parseWasmExports' + | 'parseWasmDataSegmentBytes' + | 'instantiateWasmInstructions' + | 'instantiateWasmFunctions' + | 'instantiateWasmGlobals' + | 'instantiateWasmTableEntries' + | 'instantiateWasmTypes' + | 'instantiateWasmDataSegments' + | 'instantiateWasmElemSegments' + | 'instantiateWasmImports' + | 'instantiateWasmExports' + | 'instantiateWasmDataSegmentBytes' + | 'sec1DecodePointUncompressed' + | 'verifyEcdsaSecp256r1Sig' + | 'bls12381EncodeFp' + | 'bls12381DecodeFp' + | 'bls12381G1CheckPointOnCurve' + | 'bls12381G1CheckPointInSubgroup' + | 'bls12381G2CheckPointOnCurve' + | 'bls12381G2CheckPointInSubgroup' + | 'bls12381G1ProjectiveToAffine' + | 'bls12381G2ProjectiveToAffine' + | 'bls12381G1Add' + | 'bls12381G1Mul' + | 'bls12381G1Msm' + | 'bls12381MapFpToG1' + | 'bls12381HashToG1' + | 'bls12381G2Add' + | 'bls12381G2Mul' + | 'bls12381G2Msm' + | 'bls12381MapFp2ToG2' + | 'bls12381HashToG2' + | 'bls12381Pairing' + | 'bls12381FrFromU256' + | 'bls12381FrToU256' + | 'bls12381FrAddSub' + | 'bls12381FrMul' + | 'bls12381FrPow' + | 'bls12381FrInv'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26 + | 27 + | 28 + | 29 + | 30 + | 31 + | 32 + | 33 + | 34 + | 35 + | 36 + | 37 + | 38 + | 39 + | 40 + | 41 + | 42 + | 43 + | 44 + | 45 + | 46 + | 47 + | 48 + | 49 + | 50 + | 51 + | 52 + | 53 + | 54 + | 55 + | 56 + | 57 + | 58 + | 59 + | 60 + | 61 + | 62 + | 63 + | 64 + | 65 + | 66 + | 67 + | 68 + | 69; + + static wasmInsnExec(): ContractCostType; + + static memAlloc(): ContractCostType; + + static memCpy(): ContractCostType; + + static memCmp(): ContractCostType; + + static dispatchHostFunction(): ContractCostType; + + static visitObject(): ContractCostType; + + static valSer(): ContractCostType; + + static valDeser(): ContractCostType; + + static computeSha256Hash(): ContractCostType; + + static computeEd25519PubKey(): ContractCostType; + + static verifyEd25519Sig(): ContractCostType; + + static vmInstantiation(): ContractCostType; + + static vmCachedInstantiation(): ContractCostType; + + static invokeVmFunction(): ContractCostType; + + static computeKeccak256Hash(): ContractCostType; + + static decodeEcdsaCurve256Sig(): ContractCostType; + + static recoverEcdsaSecp256k1Key(): ContractCostType; + + static int256AddSub(): ContractCostType; + + static int256Mul(): ContractCostType; + + static int256Div(): ContractCostType; + + static int256Pow(): ContractCostType; + + static int256Shift(): ContractCostType; + + static chaCha20DrawBytes(): ContractCostType; + + static parseWasmInstructions(): ContractCostType; + + static parseWasmFunctions(): ContractCostType; + + static parseWasmGlobals(): ContractCostType; + + static parseWasmTableEntries(): ContractCostType; + + static parseWasmTypes(): ContractCostType; + + static parseWasmDataSegments(): ContractCostType; + + static parseWasmElemSegments(): ContractCostType; + + static parseWasmImports(): ContractCostType; + + static parseWasmExports(): ContractCostType; + + static parseWasmDataSegmentBytes(): ContractCostType; + + static instantiateWasmInstructions(): ContractCostType; + + static instantiateWasmFunctions(): ContractCostType; + + static instantiateWasmGlobals(): ContractCostType; + + static instantiateWasmTableEntries(): ContractCostType; + + static instantiateWasmTypes(): ContractCostType; + + static instantiateWasmDataSegments(): ContractCostType; + + static instantiateWasmElemSegments(): ContractCostType; + + static instantiateWasmImports(): ContractCostType; + + static instantiateWasmExports(): ContractCostType; + + static instantiateWasmDataSegmentBytes(): ContractCostType; + + static sec1DecodePointUncompressed(): ContractCostType; + + static verifyEcdsaSecp256r1Sig(): ContractCostType; + + static bls12381EncodeFp(): ContractCostType; + + static bls12381DecodeFp(): ContractCostType; + + static bls12381G1CheckPointOnCurve(): ContractCostType; + + static bls12381G1CheckPointInSubgroup(): ContractCostType; + + static bls12381G2CheckPointOnCurve(): ContractCostType; + + static bls12381G2CheckPointInSubgroup(): ContractCostType; + + static bls12381G1ProjectiveToAffine(): ContractCostType; + + static bls12381G2ProjectiveToAffine(): ContractCostType; + + static bls12381G1Add(): ContractCostType; + + static bls12381G1Mul(): ContractCostType; + + static bls12381G1Msm(): ContractCostType; + + static bls12381MapFpToG1(): ContractCostType; + + static bls12381HashToG1(): ContractCostType; + + static bls12381G2Add(): ContractCostType; + + static bls12381G2Mul(): ContractCostType; + + static bls12381G2Msm(): ContractCostType; + + static bls12381MapFp2ToG2(): ContractCostType; + + static bls12381HashToG2(): ContractCostType; + + static bls12381Pairing(): ContractCostType; + + static bls12381FrFromU256(): ContractCostType; + + static bls12381FrToU256(): ContractCostType; + + static bls12381FrAddSub(): ContractCostType; + + static bls12381FrMul(): ContractCostType; + + static bls12381FrPow(): ContractCostType; + + static bls12381FrInv(): ContractCostType; + } + + class ConfigSettingId { + readonly name: + | 'configSettingContractMaxSizeBytes' + | 'configSettingContractComputeV0' + | 'configSettingContractLedgerCostV0' + | 'configSettingContractHistoricalDataV0' + | 'configSettingContractEventsV0' + | 'configSettingContractBandwidthV0' + | 'configSettingContractCostParamsCpuInstructions' + | 'configSettingContractCostParamsMemoryBytes' + | 'configSettingContractDataKeySizeBytes' + | 'configSettingContractDataEntrySizeBytes' + | 'configSettingStateArchival' + | 'configSettingContractExecutionLanes' + | 'configSettingBucketlistSizeWindow' + | 'configSettingEvictionIterator'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13; + + static configSettingContractMaxSizeBytes(): ConfigSettingId; + + static configSettingContractComputeV0(): ConfigSettingId; + + static configSettingContractLedgerCostV0(): ConfigSettingId; + + static configSettingContractHistoricalDataV0(): ConfigSettingId; + + static configSettingContractEventsV0(): ConfigSettingId; + + static configSettingContractBandwidthV0(): ConfigSettingId; + + static configSettingContractCostParamsCpuInstructions(): ConfigSettingId; + + static configSettingContractCostParamsMemoryBytes(): ConfigSettingId; + + static configSettingContractDataKeySizeBytes(): ConfigSettingId; + + static configSettingContractDataEntrySizeBytes(): ConfigSettingId; + + static configSettingStateArchival(): ConfigSettingId; + + static configSettingContractExecutionLanes(): ConfigSettingId; + + static configSettingBucketlistSizeWindow(): ConfigSettingId; + + static configSettingEvictionIterator(): ConfigSettingId; + } + + const Value: VarOpaque; + + const Thresholds: Opaque; + + const String32: XDRString; + + const String64: XDRString; + + type SequenceNumber = Int64; + + const DataValue: VarOpaque; + + type PoolId = Hash; + + const AssetCode4: Opaque; + + const AssetCode12: Opaque; + + type SponsorshipDescriptor = undefined | AccountId; + + const UpgradeType: VarOpaque; + + const LedgerEntryChanges: XDRArray; + + const DiagnosticEvents: XDRArray; + + const EncryptedBody: VarOpaque; + + const PeerStatList: XDRArray; + + const TimeSlicedPeerDataList: XDRArray; + + const TxAdvertVector: XDRArray; + + const TxDemandVector: XDRArray; + + const ProofLevel: XDRArray; + + const Hash: Opaque; + + const Uint256: Opaque; + + const Uint32: UnsignedInt; + + const Int32: SignedInt; + + class Uint64 extends UnsignedHyper {} + + class Int64 extends Hyper {} + + type TimePoint = Uint64; + + type Duration = Uint64; + + const Signature: VarOpaque; + + const SignatureHint: Opaque; + + type NodeId = PublicKey; + + type AccountId = PublicKey; + + const ScVec: XDRArray; + + const ScMap: XDRArray; + + const ScBytes: VarOpaque; + + const ScString: XDRString; + + const ScSymbol: XDRString; + + const ContractCostParams: XDRArray; + + class ScpBallot { + constructor(attributes: { counter: number; value: Buffer }); + + counter(value?: number): number; + + value(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpBallot; + + static write(value: ScpBallot, io: Buffer): void; + + static isValid(value: ScpBallot): boolean; + + static toXDR(value: ScpBallot): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpBallot; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpBallot; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpNomination { + constructor(attributes: { + quorumSetHash: Buffer; + votes: Buffer[]; + accepted: Buffer[]; + }); + + quorumSetHash(value?: Buffer): Buffer; + + votes(value?: Buffer[]): Buffer[]; + + accepted(value?: Buffer[]): Buffer[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpNomination; + + static write(value: ScpNomination, io: Buffer): void; + + static isValid(value: ScpNomination): boolean; + + static toXDR(value: ScpNomination): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpNomination; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpNomination; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementPrepare { + constructor(attributes: { + quorumSetHash: Buffer; + ballot: ScpBallot; + prepared: null | ScpBallot; + preparedPrime: null | ScpBallot; + nC: number; + nH: number; + }); + + quorumSetHash(value?: Buffer): Buffer; + + ballot(value?: ScpBallot): ScpBallot; + + prepared(value?: null | ScpBallot): null | ScpBallot; + + preparedPrime(value?: null | ScpBallot): null | ScpBallot; + + nC(value?: number): number; + + nH(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementPrepare; + + static write(value: ScpStatementPrepare, io: Buffer): void; + + static isValid(value: ScpStatementPrepare): boolean; + + static toXDR(value: ScpStatementPrepare): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementPrepare; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementPrepare; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementConfirm { + constructor(attributes: { + ballot: ScpBallot; + nPrepared: number; + nCommit: number; + nH: number; + quorumSetHash: Buffer; + }); + + ballot(value?: ScpBallot): ScpBallot; + + nPrepared(value?: number): number; + + nCommit(value?: number): number; + + nH(value?: number): number; + + quorumSetHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementConfirm; + + static write(value: ScpStatementConfirm, io: Buffer): void; + + static isValid(value: ScpStatementConfirm): boolean; + + static toXDR(value: ScpStatementConfirm): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementConfirm; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementConfirm; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementExternalize { + constructor(attributes: { + commit: ScpBallot; + nH: number; + commitQuorumSetHash: Buffer; + }); + + commit(value?: ScpBallot): ScpBallot; + + nH(value?: number): number; + + commitQuorumSetHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementExternalize; + + static write(value: ScpStatementExternalize, io: Buffer): void; + + static isValid(value: ScpStatementExternalize): boolean; + + static toXDR(value: ScpStatementExternalize): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementExternalize; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementExternalize; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatement { + constructor(attributes: { + nodeId: NodeId; + slotIndex: Uint64; + pledges: ScpStatementPledges; + }); + + nodeId(value?: NodeId): NodeId; + + slotIndex(value?: Uint64): Uint64; + + pledges(value?: ScpStatementPledges): ScpStatementPledges; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatement; + + static write(value: ScpStatement, io: Buffer): void; + + static isValid(value: ScpStatement): boolean; + + static toXDR(value: ScpStatement): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatement; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpStatement; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpEnvelope { + constructor(attributes: { statement: ScpStatement; signature: Buffer }); + + statement(value?: ScpStatement): ScpStatement; + + signature(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpEnvelope; + + static write(value: ScpEnvelope, io: Buffer): void; + + static isValid(value: ScpEnvelope): boolean; + + static toXDR(value: ScpEnvelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpEnvelope; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpEnvelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpQuorumSet { + constructor(attributes: { + threshold: number; + validators: NodeId[]; + innerSets: ScpQuorumSet[]; + }); + + threshold(value?: number): number; + + validators(value?: NodeId[]): NodeId[]; + + innerSets(value?: ScpQuorumSet[]): ScpQuorumSet[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpQuorumSet; + + static write(value: ScpQuorumSet, io: Buffer): void; + + static isValid(value: ScpQuorumSet): boolean; + + static toXDR(value: ScpQuorumSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpQuorumSet; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpQuorumSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AlphaNum4 { + constructor(attributes: { assetCode: Buffer; issuer: AccountId }); + + assetCode(value?: Buffer): Buffer; + + issuer(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AlphaNum4; + + static write(value: AlphaNum4, io: Buffer): void; + + static isValid(value: AlphaNum4): boolean; + + static toXDR(value: AlphaNum4): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AlphaNum4; + + static fromXDR(input: string, format: 'hex' | 'base64'): AlphaNum4; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AlphaNum12 { + constructor(attributes: { assetCode: Buffer; issuer: AccountId }); + + assetCode(value?: Buffer): Buffer; + + issuer(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AlphaNum12; + + static write(value: AlphaNum12, io: Buffer): void; + + static isValid(value: AlphaNum12): boolean; + + static toXDR(value: AlphaNum12): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AlphaNum12; + + static fromXDR(input: string, format: 'hex' | 'base64'): AlphaNum12; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Price { + constructor(attributes: { n: number; d: number }); + + n(value?: number): number; + + d(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Price; + + static write(value: Price, io: Buffer): void; + + static isValid(value: Price): boolean; + + static toXDR(value: Price): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Price; + + static fromXDR(input: string, format: 'hex' | 'base64'): Price; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Liabilities { + constructor(attributes: { buying: Int64; selling: Int64 }); + + buying(value?: Int64): Int64; + + selling(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Liabilities; + + static write(value: Liabilities, io: Buffer): void; + + static isValid(value: Liabilities): boolean; + + static toXDR(value: Liabilities): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Liabilities; + + static fromXDR(input: string, format: 'hex' | 'base64'): Liabilities; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Signer { + constructor(attributes: { key: SignerKey; weight: number }); + + key(value?: SignerKey): SignerKey; + + weight(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Signer; + + static write(value: Signer, io: Buffer): void; + + static isValid(value: Signer): boolean; + + static toXDR(value: Signer): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Signer; + + static fromXDR(input: string, format: 'hex' | 'base64'): Signer; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV3 { + constructor(attributes: { + ext: ExtensionPoint; + seqLedger: number; + seqTime: TimePoint; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + seqLedger(value?: number): number; + + seqTime(value?: TimePoint): TimePoint; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV3; + + static write(value: AccountEntryExtensionV3, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV3): boolean; + + static toXDR(value: AccountEntryExtensionV3): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV3; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV3; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV2 { + constructor(attributes: { + numSponsored: number; + numSponsoring: number; + signerSponsoringIDs: SponsorshipDescriptor[]; + ext: AccountEntryExtensionV2Ext; + }); + + numSponsored(value?: number): number; + + numSponsoring(value?: number): number; + + signerSponsoringIDs( + value?: SponsorshipDescriptor[], + ): SponsorshipDescriptor[]; + + ext(value?: AccountEntryExtensionV2Ext): AccountEntryExtensionV2Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV2; + + static write(value: AccountEntryExtensionV2, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV2): boolean; + + static toXDR(value: AccountEntryExtensionV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV1 { + constructor(attributes: { + liabilities: Liabilities; + ext: AccountEntryExtensionV1Ext; + }); + + liabilities(value?: Liabilities): Liabilities; + + ext(value?: AccountEntryExtensionV1Ext): AccountEntryExtensionV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV1; + + static write(value: AccountEntryExtensionV1, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV1): boolean; + + static toXDR(value: AccountEntryExtensionV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntry { + constructor(attributes: { + accountId: AccountId; + balance: Int64; + seqNum: SequenceNumber; + numSubEntries: number; + inflationDest: null | AccountId; + flags: number; + homeDomain: string | Buffer; + thresholds: Buffer; + signers: Signer[]; + ext: AccountEntryExt; + }); + + accountId(value?: AccountId): AccountId; + + balance(value?: Int64): Int64; + + seqNum(value?: SequenceNumber): SequenceNumber; + + numSubEntries(value?: number): number; + + inflationDest(value?: null | AccountId): null | AccountId; + + flags(value?: number): number; + + homeDomain(value?: string | Buffer): string | Buffer; + + thresholds(value?: Buffer): Buffer; + + signers(value?: Signer[]): Signer[]; + + ext(value?: AccountEntryExt): AccountEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntry; + + static write(value: AccountEntry, io: Buffer): void; + + static isValid(value: AccountEntry): boolean; + + static toXDR(value: AccountEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): AccountEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryExtensionV2 { + constructor(attributes: { + liquidityPoolUseCount: number; + ext: TrustLineEntryExtensionV2Ext; + }); + + liquidityPoolUseCount(value?: number): number; + + ext(value?: TrustLineEntryExtensionV2Ext): TrustLineEntryExtensionV2Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryExtensionV2; + + static write(value: TrustLineEntryExtensionV2, io: Buffer): void; + + static isValid(value: TrustLineEntryExtensionV2): boolean; + + static toXDR(value: TrustLineEntryExtensionV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryExtensionV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TrustLineEntryExtensionV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryV1 { + constructor(attributes: { + liabilities: Liabilities; + ext: TrustLineEntryV1Ext; + }); + + liabilities(value?: Liabilities): Liabilities; + + ext(value?: TrustLineEntryV1Ext): TrustLineEntryV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryV1; + + static write(value: TrustLineEntryV1, io: Buffer): void; + + static isValid(value: TrustLineEntryV1): boolean; + + static toXDR(value: TrustLineEntryV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineEntryV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntry { + constructor(attributes: { + accountId: AccountId; + asset: TrustLineAsset; + balance: Int64; + limit: Int64; + flags: number; + ext: TrustLineEntryExt; + }); + + accountId(value?: AccountId): AccountId; + + asset(value?: TrustLineAsset): TrustLineAsset; + + balance(value?: Int64): Int64; + + limit(value?: Int64): Int64; + + flags(value?: number): number; + + ext(value?: TrustLineEntryExt): TrustLineEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntry; + + static write(value: TrustLineEntry, io: Buffer): void; + + static isValid(value: TrustLineEntry): boolean; + + static toXDR(value: TrustLineEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OfferEntry { + constructor(attributes: { + sellerId: AccountId; + offerId: Int64; + selling: Asset; + buying: Asset; + amount: Int64; + price: Price; + flags: number; + ext: OfferEntryExt; + }); + + sellerId(value?: AccountId): AccountId; + + offerId(value?: Int64): Int64; + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + price(value?: Price): Price; + + flags(value?: number): number; + + ext(value?: OfferEntryExt): OfferEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OfferEntry; + + static write(value: OfferEntry, io: Buffer): void; + + static isValid(value: OfferEntry): boolean; + + static toXDR(value: OfferEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OfferEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): OfferEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DataEntry { + constructor(attributes: { + accountId: AccountId; + dataName: string | Buffer; + dataValue: Buffer; + ext: DataEntryExt; + }); + + accountId(value?: AccountId): AccountId; + + dataName(value?: string | Buffer): string | Buffer; + + dataValue(value?: Buffer): Buffer; + + ext(value?: DataEntryExt): DataEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DataEntry; + + static write(value: DataEntry, io: Buffer): void; + + static isValid(value: DataEntry): boolean; + + static toXDR(value: DataEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DataEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): DataEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimantV0 { + constructor(attributes: { + destination: AccountId; + predicate: ClaimPredicate; + }); + + destination(value?: AccountId): AccountId; + + predicate(value?: ClaimPredicate): ClaimPredicate; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimantV0; + + static write(value: ClaimantV0, io: Buffer): void; + + static isValid(value: ClaimantV0): boolean; + + static toXDR(value: ClaimantV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimantV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimantV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntryExtensionV1 { + constructor(attributes: { + ext: ClaimableBalanceEntryExtensionV1Ext; + flags: number; + }); + + ext( + value?: ClaimableBalanceEntryExtensionV1Ext, + ): ClaimableBalanceEntryExtensionV1Ext; + + flags(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntryExtensionV1; + + static write(value: ClaimableBalanceEntryExtensionV1, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntryExtensionV1): boolean; + + static toXDR(value: ClaimableBalanceEntryExtensionV1): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ClaimableBalanceEntryExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntryExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntry { + constructor(attributes: { + balanceId: ClaimableBalanceId; + claimants: Claimant[]; + asset: Asset; + amount: Int64; + ext: ClaimableBalanceEntryExt; + }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + claimants(value?: Claimant[]): Claimant[]; + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + ext(value?: ClaimableBalanceEntryExt): ClaimableBalanceEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntry; + + static write(value: ClaimableBalanceEntry, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntry): boolean; + + static toXDR(value: ClaimableBalanceEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimableBalanceEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolConstantProductParameters { + constructor(attributes: { assetA: Asset; assetB: Asset; fee: number }); + + assetA(value?: Asset): Asset; + + assetB(value?: Asset): Asset; + + fee(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolConstantProductParameters; + + static write( + value: LiquidityPoolConstantProductParameters, + io: Buffer, + ): void; + + static isValid(value: LiquidityPoolConstantProductParameters): boolean; + + static toXDR(value: LiquidityPoolConstantProductParameters): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): LiquidityPoolConstantProductParameters; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolConstantProductParameters; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolEntryConstantProduct { + constructor(attributes: { + params: LiquidityPoolConstantProductParameters; + reserveA: Int64; + reserveB: Int64; + totalPoolShares: Int64; + poolSharesTrustLineCount: Int64; + }); + + params( + value?: LiquidityPoolConstantProductParameters, + ): LiquidityPoolConstantProductParameters; + + reserveA(value?: Int64): Int64; + + reserveB(value?: Int64): Int64; + + totalPoolShares(value?: Int64): Int64; + + poolSharesTrustLineCount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolEntryConstantProduct; + + static write(value: LiquidityPoolEntryConstantProduct, io: Buffer): void; + + static isValid(value: LiquidityPoolEntryConstantProduct): boolean; + + static toXDR(value: LiquidityPoolEntryConstantProduct): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): LiquidityPoolEntryConstantProduct; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolEntryConstantProduct; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolEntry { + constructor(attributes: { + liquidityPoolId: PoolId; + body: LiquidityPoolEntryBody; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + body(value?: LiquidityPoolEntryBody): LiquidityPoolEntryBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolEntry; + + static write(value: LiquidityPoolEntry, io: Buffer): void; + + static isValid(value: LiquidityPoolEntry): boolean; + + static toXDR(value: LiquidityPoolEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): LiquidityPoolEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractDataEntry { + constructor(attributes: { + ext: ExtensionPoint; + contract: ScAddress; + key: ScVal; + durability: ContractDataDurability; + val: ScVal; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + contract(value?: ScAddress): ScAddress; + + key(value?: ScVal): ScVal; + + durability(value?: ContractDataDurability): ContractDataDurability; + + val(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractDataEntry; + + static write(value: ContractDataEntry, io: Buffer): void; + + static isValid(value: ContractDataEntry): boolean; + + static toXDR(value: ContractDataEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractDataEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractDataEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeCostInputs { + constructor(attributes: { + ext: ExtensionPoint; + nInstructions: number; + nFunctions: number; + nGlobals: number; + nTableEntries: number; + nTypes: number; + nDataSegments: number; + nElemSegments: number; + nImports: number; + nExports: number; + nDataSegmentBytes: number; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + nInstructions(value?: number): number; + + nFunctions(value?: number): number; + + nGlobals(value?: number): number; + + nTableEntries(value?: number): number; + + nTypes(value?: number): number; + + nDataSegments(value?: number): number; + + nElemSegments(value?: number): number; + + nImports(value?: number): number; + + nExports(value?: number): number; + + nDataSegmentBytes(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeCostInputs; + + static write(value: ContractCodeCostInputs, io: Buffer): void; + + static isValid(value: ContractCodeCostInputs): boolean; + + static toXDR(value: ContractCodeCostInputs): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeCostInputs; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCodeCostInputs; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeEntryV1 { + constructor(attributes: { + ext: ExtensionPoint; + costInputs: ContractCodeCostInputs; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + costInputs(value?: ContractCodeCostInputs): ContractCodeCostInputs; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeEntryV1; + + static write(value: ContractCodeEntryV1, io: Buffer): void; + + static isValid(value: ContractCodeEntryV1): boolean; + + static toXDR(value: ContractCodeEntryV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeEntryV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCodeEntryV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeEntry { + constructor(attributes: { + ext: ContractCodeEntryExt; + hash: Buffer; + code: Buffer; + }); + + ext(value?: ContractCodeEntryExt): ContractCodeEntryExt; + + hash(value?: Buffer): Buffer; + + code(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeEntry; + + static write(value: ContractCodeEntry, io: Buffer): void; + + static isValid(value: ContractCodeEntry): boolean; + + static toXDR(value: ContractCodeEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractCodeEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TtlEntry { + constructor(attributes: { keyHash: Buffer; liveUntilLedgerSeq: number }); + + keyHash(value?: Buffer): Buffer; + + liveUntilLedgerSeq(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TtlEntry; + + static write(value: TtlEntry, io: Buffer): void; + + static isValid(value: TtlEntry): boolean; + + static toXDR(value: TtlEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TtlEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): TtlEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryExtensionV1 { + constructor(attributes: { + sponsoringId: SponsorshipDescriptor; + ext: LedgerEntryExtensionV1Ext; + }); + + sponsoringId(value?: SponsorshipDescriptor): SponsorshipDescriptor; + + ext(value?: LedgerEntryExtensionV1Ext): LedgerEntryExtensionV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryExtensionV1; + + static write(value: LedgerEntryExtensionV1, io: Buffer): void; + + static isValid(value: LedgerEntryExtensionV1): boolean; + + static toXDR(value: LedgerEntryExtensionV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerEntryExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntry { + constructor(attributes: { + lastModifiedLedgerSeq: number; + data: LedgerEntryData; + ext: LedgerEntryExt; + }); + + lastModifiedLedgerSeq(value?: number): number; + + data(value?: LedgerEntryData): LedgerEntryData; + + ext(value?: LedgerEntryExt): LedgerEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntry; + + static write(value: LedgerEntry, io: Buffer): void; + + static isValid(value: LedgerEntry): boolean; + + static toXDR(value: LedgerEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyAccount { + constructor(attributes: { accountId: AccountId }); + + accountId(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyAccount; + + static write(value: LedgerKeyAccount, io: Buffer): void; + + static isValid(value: LedgerKeyAccount): boolean; + + static toXDR(value: LedgerKeyAccount): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyAccount; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyAccount; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyTrustLine { + constructor(attributes: { accountId: AccountId; asset: TrustLineAsset }); + + accountId(value?: AccountId): AccountId; + + asset(value?: TrustLineAsset): TrustLineAsset; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyTrustLine; + + static write(value: LedgerKeyTrustLine, io: Buffer): void; + + static isValid(value: LedgerKeyTrustLine): boolean; + + static toXDR(value: LedgerKeyTrustLine): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyTrustLine; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyTrustLine; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyOffer { + constructor(attributes: { sellerId: AccountId; offerId: Int64 }); + + sellerId(value?: AccountId): AccountId; + + offerId(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyOffer; + + static write(value: LedgerKeyOffer, io: Buffer): void; + + static isValid(value: LedgerKeyOffer): boolean; + + static toXDR(value: LedgerKeyOffer): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyOffer; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyOffer; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyData { + constructor(attributes: { + accountId: AccountId; + dataName: string | Buffer; + }); + + accountId(value?: AccountId): AccountId; + + dataName(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyData; + + static write(value: LedgerKeyData, io: Buffer): void; + + static isValid(value: LedgerKeyData): boolean; + + static toXDR(value: LedgerKeyData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyData; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyClaimableBalance { + constructor(attributes: { balanceId: ClaimableBalanceId }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyClaimableBalance; + + static write(value: LedgerKeyClaimableBalance, io: Buffer): void; + + static isValid(value: LedgerKeyClaimableBalance): boolean; + + static toXDR(value: LedgerKeyClaimableBalance): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyClaimableBalance; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyClaimableBalance; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyLiquidityPool { + constructor(attributes: { liquidityPoolId: PoolId }); + + liquidityPoolId(value?: PoolId): PoolId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyLiquidityPool; + + static write(value: LedgerKeyLiquidityPool, io: Buffer): void; + + static isValid(value: LedgerKeyLiquidityPool): boolean; + + static toXDR(value: LedgerKeyLiquidityPool): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyLiquidityPool; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyLiquidityPool; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyContractData { + constructor(attributes: { + contract: ScAddress; + key: ScVal; + durability: ContractDataDurability; + }); + + contract(value?: ScAddress): ScAddress; + + key(value?: ScVal): ScVal; + + durability(value?: ContractDataDurability): ContractDataDurability; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyContractData; + + static write(value: LedgerKeyContractData, io: Buffer): void; + + static isValid(value: LedgerKeyContractData): boolean; + + static toXDR(value: LedgerKeyContractData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyContractData; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyContractData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyContractCode { + constructor(attributes: { hash: Buffer }); + + hash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyContractCode; + + static write(value: LedgerKeyContractCode, io: Buffer): void; + + static isValid(value: LedgerKeyContractCode): boolean; + + static toXDR(value: LedgerKeyContractCode): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyContractCode; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyContractCode; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyConfigSetting { + constructor(attributes: { configSettingId: ConfigSettingId }); + + configSettingId(value?: ConfigSettingId): ConfigSettingId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyConfigSetting; + + static write(value: LedgerKeyConfigSetting, io: Buffer): void; + + static isValid(value: LedgerKeyConfigSetting): boolean; + + static toXDR(value: LedgerKeyConfigSetting): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyConfigSetting; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyConfigSetting; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyTtl { + constructor(attributes: { keyHash: Buffer }); + + keyHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyTtl; + + static write(value: LedgerKeyTtl, io: Buffer): void; + + static isValid(value: LedgerKeyTtl): boolean; + + static toXDR(value: LedgerKeyTtl): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyTtl; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyTtl; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BucketMetadata { + constructor(attributes: { ledgerVersion: number; ext: BucketMetadataExt }); + + ledgerVersion(value?: number): number; + + ext(value?: BucketMetadataExt): BucketMetadataExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BucketMetadata; + + static write(value: BucketMetadata, io: Buffer): void; + + static isValid(value: BucketMetadata): boolean; + + static toXDR(value: BucketMetadata): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BucketMetadata; + + static fromXDR(input: string, format: 'hex' | 'base64'): BucketMetadata; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveArchivedLeaf { + constructor(attributes: { index: number; archivedEntry: LedgerEntry }); + + index(value?: number): number; + + archivedEntry(value?: LedgerEntry): LedgerEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveArchivedLeaf; + + static write(value: ColdArchiveArchivedLeaf, io: Buffer): void; + + static isValid(value: ColdArchiveArchivedLeaf): boolean; + + static toXDR(value: ColdArchiveArchivedLeaf): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveArchivedLeaf; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveArchivedLeaf; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveDeletedLeaf { + constructor(attributes: { index: number; deletedKey: LedgerKey }); + + index(value?: number): number; + + deletedKey(value?: LedgerKey): LedgerKey; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveDeletedLeaf; + + static write(value: ColdArchiveDeletedLeaf, io: Buffer): void; + + static isValid(value: ColdArchiveDeletedLeaf): boolean; + + static toXDR(value: ColdArchiveDeletedLeaf): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveDeletedLeaf; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveDeletedLeaf; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveBoundaryLeaf { + constructor(attributes: { index: number; isLowerBound: boolean }); + + index(value?: number): number; + + isLowerBound(value?: boolean): boolean; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveBoundaryLeaf; + + static write(value: ColdArchiveBoundaryLeaf, io: Buffer): void; + + static isValid(value: ColdArchiveBoundaryLeaf): boolean; + + static toXDR(value: ColdArchiveBoundaryLeaf): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveBoundaryLeaf; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveBoundaryLeaf; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveHashEntry { + constructor(attributes: { index: number; level: number; hash: Buffer }); + + index(value?: number): number; + + level(value?: number): number; + + hash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveHashEntry; + + static write(value: ColdArchiveHashEntry, io: Buffer): void; + + static isValid(value: ColdArchiveHashEntry): boolean; + + static toXDR(value: ColdArchiveHashEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveHashEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveHashEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseValueSignature { + constructor(attributes: { nodeId: NodeId; signature: Buffer }); + + nodeId(value?: NodeId): NodeId; + + signature(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseValueSignature; + + static write(value: LedgerCloseValueSignature, io: Buffer): void; + + static isValid(value: LedgerCloseValueSignature): boolean; + + static toXDR(value: LedgerCloseValueSignature): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseValueSignature; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerCloseValueSignature; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StellarValue { + constructor(attributes: { + txSetHash: Buffer; + closeTime: TimePoint; + upgrades: Buffer[]; + ext: StellarValueExt; + }); + + txSetHash(value?: Buffer): Buffer; + + closeTime(value?: TimePoint): TimePoint; + + upgrades(value?: Buffer[]): Buffer[]; + + ext(value?: StellarValueExt): StellarValueExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StellarValue; + + static write(value: StellarValue, io: Buffer): void; + + static isValid(value: StellarValue): boolean; + + static toXDR(value: StellarValue): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StellarValue; + + static fromXDR(input: string, format: 'hex' | 'base64'): StellarValue; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderExtensionV1 { + constructor(attributes: { flags: number; ext: LedgerHeaderExtensionV1Ext }); + + flags(value?: number): number; + + ext(value?: LedgerHeaderExtensionV1Ext): LedgerHeaderExtensionV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderExtensionV1; + + static write(value: LedgerHeaderExtensionV1, io: Buffer): void; + + static isValid(value: LedgerHeaderExtensionV1): boolean; + + static toXDR(value: LedgerHeaderExtensionV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeader { + constructor(attributes: { + ledgerVersion: number; + previousLedgerHash: Buffer; + scpValue: StellarValue; + txSetResultHash: Buffer; + bucketListHash: Buffer; + ledgerSeq: number; + totalCoins: Int64; + feePool: Int64; + inflationSeq: number; + idPool: Uint64; + baseFee: number; + baseReserve: number; + maxTxSetSize: number; + skipList: Buffer[]; + ext: LedgerHeaderExt; + }); + + ledgerVersion(value?: number): number; + + previousLedgerHash(value?: Buffer): Buffer; + + scpValue(value?: StellarValue): StellarValue; + + txSetResultHash(value?: Buffer): Buffer; + + bucketListHash(value?: Buffer): Buffer; + + ledgerSeq(value?: number): number; + + totalCoins(value?: Int64): Int64; + + feePool(value?: Int64): Int64; + + inflationSeq(value?: number): number; + + idPool(value?: Uint64): Uint64; + + baseFee(value?: number): number; + + baseReserve(value?: number): number; + + maxTxSetSize(value?: number): number; + + skipList(value?: Buffer[]): Buffer[]; + + ext(value?: LedgerHeaderExt): LedgerHeaderExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeader; + + static write(value: LedgerHeader, io: Buffer): void; + + static isValid(value: LedgerHeader): boolean; + + static toXDR(value: LedgerHeader): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeader; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerHeader; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigUpgradeSetKey { + constructor(attributes: { contractId: Buffer; contentHash: Buffer }); + + contractId(value?: Buffer): Buffer; + + contentHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigUpgradeSetKey; + + static write(value: ConfigUpgradeSetKey, io: Buffer): void; + + static isValid(value: ConfigUpgradeSetKey): boolean; + + static toXDR(value: ConfigUpgradeSetKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ConfigUpgradeSetKey; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigUpgradeSetKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigUpgradeSet { + constructor(attributes: { updatedEntry: ConfigSettingEntry[] }); + + updatedEntry(value?: ConfigSettingEntry[]): ConfigSettingEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigUpgradeSet; + + static write(value: ConfigUpgradeSet, io: Buffer): void; + + static isValid(value: ConfigUpgradeSet): boolean; + + static toXDR(value: ConfigUpgradeSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ConfigUpgradeSet; + + static fromXDR(input: string, format: 'hex' | 'base64'): ConfigUpgradeSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TxSetComponentTxsMaybeDiscountedFee { + constructor(attributes: { + baseFee: null | Int64; + txes: TransactionEnvelope[]; + }); + + baseFee(value?: null | Int64): null | Int64; + + txes(value?: TransactionEnvelope[]): TransactionEnvelope[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TxSetComponentTxsMaybeDiscountedFee; + + static write(value: TxSetComponentTxsMaybeDiscountedFee, io: Buffer): void; + + static isValid(value: TxSetComponentTxsMaybeDiscountedFee): boolean; + + static toXDR(value: TxSetComponentTxsMaybeDiscountedFee): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TxSetComponentTxsMaybeDiscountedFee; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TxSetComponentTxsMaybeDiscountedFee; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSet { + constructor(attributes: { + previousLedgerHash: Buffer; + txes: TransactionEnvelope[]; + }); + + previousLedgerHash(value?: Buffer): Buffer; + + txes(value?: TransactionEnvelope[]): TransactionEnvelope[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSet; + + static write(value: TransactionSet, io: Buffer): void; + + static isValid(value: TransactionSet): boolean; + + static toXDR(value: TransactionSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionSet; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSetV1 { + constructor(attributes: { + previousLedgerHash: Buffer; + phases: TransactionPhase[]; + }); + + previousLedgerHash(value?: Buffer): Buffer; + + phases(value?: TransactionPhase[]): TransactionPhase[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSetV1; + + static write(value: TransactionSetV1, io: Buffer): void; + + static isValid(value: TransactionSetV1): boolean; + + static toXDR(value: TransactionSetV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionSetV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionSetV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultPair { + constructor(attributes: { + transactionHash: Buffer; + result: TransactionResult; + }); + + transactionHash(value?: Buffer): Buffer; + + result(value?: TransactionResult): TransactionResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultPair; + + static write(value: TransactionResultPair, io: Buffer): void; + + static isValid(value: TransactionResultPair): boolean; + + static toXDR(value: TransactionResultPair): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultPair; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultPair; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultSet { + constructor(attributes: { results: TransactionResultPair[] }); + + results(value?: TransactionResultPair[]): TransactionResultPair[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultSet; + + static write(value: TransactionResultSet, io: Buffer): void; + + static isValid(value: TransactionResultSet): boolean; + + static toXDR(value: TransactionResultSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultSet; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryEntry { + constructor(attributes: { + ledgerSeq: number; + txSet: TransactionSet; + ext: TransactionHistoryEntryExt; + }); + + ledgerSeq(value?: number): number; + + txSet(value?: TransactionSet): TransactionSet; + + ext(value?: TransactionHistoryEntryExt): TransactionHistoryEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryEntry; + + static write(value: TransactionHistoryEntry, io: Buffer): void; + + static isValid(value: TransactionHistoryEntry): boolean; + + static toXDR(value: TransactionHistoryEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionHistoryEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryResultEntry { + constructor(attributes: { + ledgerSeq: number; + txResultSet: TransactionResultSet; + ext: TransactionHistoryResultEntryExt; + }); + + ledgerSeq(value?: number): number; + + txResultSet(value?: TransactionResultSet): TransactionResultSet; + + ext( + value?: TransactionHistoryResultEntryExt, + ): TransactionHistoryResultEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryResultEntry; + + static write(value: TransactionHistoryResultEntry, io: Buffer): void; + + static isValid(value: TransactionHistoryResultEntry): boolean; + + static toXDR(value: TransactionHistoryResultEntry): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TransactionHistoryResultEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryResultEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderHistoryEntry { + constructor(attributes: { + hash: Buffer; + header: LedgerHeader; + ext: LedgerHeaderHistoryEntryExt; + }); + + hash(value?: Buffer): Buffer; + + header(value?: LedgerHeader): LedgerHeader; + + ext(value?: LedgerHeaderHistoryEntryExt): LedgerHeaderHistoryEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderHistoryEntry; + + static write(value: LedgerHeaderHistoryEntry, io: Buffer): void; + + static isValid(value: LedgerHeaderHistoryEntry): boolean; + + static toXDR(value: LedgerHeaderHistoryEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderHistoryEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderHistoryEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerScpMessages { + constructor(attributes: { ledgerSeq: number; messages: ScpEnvelope[] }); + + ledgerSeq(value?: number): number; + + messages(value?: ScpEnvelope[]): ScpEnvelope[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerScpMessages; + + static write(value: LedgerScpMessages, io: Buffer): void; + + static isValid(value: LedgerScpMessages): boolean; + + static toXDR(value: LedgerScpMessages): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerScpMessages; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerScpMessages; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpHistoryEntryV0 { + constructor(attributes: { + quorumSets: ScpQuorumSet[]; + ledgerMessages: LedgerScpMessages; + }); + + quorumSets(value?: ScpQuorumSet[]): ScpQuorumSet[]; + + ledgerMessages(value?: LedgerScpMessages): LedgerScpMessages; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpHistoryEntryV0; + + static write(value: ScpHistoryEntryV0, io: Buffer): void; + + static isValid(value: ScpHistoryEntryV0): boolean; + + static toXDR(value: ScpHistoryEntryV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpHistoryEntryV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpHistoryEntryV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationMeta { + constructor(attributes: { changes: LedgerEntryChange[] }); + + changes(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationMeta; + + static write(value: OperationMeta, io: Buffer): void; + + static isValid(value: OperationMeta): boolean; + + static toXDR(value: OperationMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMetaV1 { + constructor(attributes: { + txChanges: LedgerEntryChange[]; + operations: OperationMeta[]; + }); + + txChanges(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + operations(value?: OperationMeta[]): OperationMeta[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMetaV1; + + static write(value: TransactionMetaV1, io: Buffer): void; + + static isValid(value: TransactionMetaV1): boolean; + + static toXDR(value: TransactionMetaV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMetaV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMetaV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMetaV2 { + constructor(attributes: { + txChangesBefore: LedgerEntryChange[]; + operations: OperationMeta[]; + txChangesAfter: LedgerEntryChange[]; + }); + + txChangesBefore(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + operations(value?: OperationMeta[]): OperationMeta[]; + + txChangesAfter(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMetaV2; + + static write(value: TransactionMetaV2, io: Buffer): void; + + static isValid(value: TransactionMetaV2): boolean; + + static toXDR(value: TransactionMetaV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMetaV2; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMetaV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractEventV0 { + constructor(attributes: { topics: ScVal[]; data: ScVal }); + + topics(value?: ScVal[]): ScVal[]; + + data(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractEventV0; + + static write(value: ContractEventV0, io: Buffer): void; + + static isValid(value: ContractEventV0): boolean; + + static toXDR(value: ContractEventV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractEventV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractEventV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractEvent { + constructor(attributes: { + ext: ExtensionPoint; + contractId: null | Buffer; + type: ContractEventType; + body: ContractEventBody; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + contractId(value?: null | Buffer): null | Buffer; + + type(value?: ContractEventType): ContractEventType; + + body(value?: ContractEventBody): ContractEventBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractEvent; + + static write(value: ContractEvent, io: Buffer): void; + + static isValid(value: ContractEvent): boolean; + + static toXDR(value: ContractEvent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractEvent; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractEvent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DiagnosticEvent { + constructor(attributes: { + inSuccessfulContractCall: boolean; + event: ContractEvent; + }); + + inSuccessfulContractCall(value?: boolean): boolean; + + event(value?: ContractEvent): ContractEvent; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DiagnosticEvent; + + static write(value: DiagnosticEvent, io: Buffer): void; + + static isValid(value: DiagnosticEvent): boolean; + + static toXDR(value: DiagnosticEvent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DiagnosticEvent; + + static fromXDR(input: string, format: 'hex' | 'base64'): DiagnosticEvent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionMetaExtV1 { + constructor(attributes: { + ext: ExtensionPoint; + totalNonRefundableResourceFeeCharged: Int64; + totalRefundableResourceFeeCharged: Int64; + rentFeeCharged: Int64; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + totalNonRefundableResourceFeeCharged(value?: Int64): Int64; + + totalRefundableResourceFeeCharged(value?: Int64): Int64; + + rentFeeCharged(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionMetaExtV1; + + static write(value: SorobanTransactionMetaExtV1, io: Buffer): void; + + static isValid(value: SorobanTransactionMetaExtV1): boolean; + + static toXDR(value: SorobanTransactionMetaExtV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionMetaExtV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionMetaExtV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionMeta { + constructor(attributes: { + ext: SorobanTransactionMetaExt; + events: ContractEvent[]; + returnValue: ScVal; + diagnosticEvents: DiagnosticEvent[]; + }); + + ext(value?: SorobanTransactionMetaExt): SorobanTransactionMetaExt; + + events(value?: ContractEvent[]): ContractEvent[]; + + returnValue(value?: ScVal): ScVal; + + diagnosticEvents(value?: DiagnosticEvent[]): DiagnosticEvent[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionMeta; + + static write(value: SorobanTransactionMeta, io: Buffer): void; + + static isValid(value: SorobanTransactionMeta): boolean; + + static toXDR(value: SorobanTransactionMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionMeta; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMetaV3 { + constructor(attributes: { + ext: ExtensionPoint; + txChangesBefore: LedgerEntryChange[]; + operations: OperationMeta[]; + txChangesAfter: LedgerEntryChange[]; + sorobanMeta: null | SorobanTransactionMeta; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + txChangesBefore(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + operations(value?: OperationMeta[]): OperationMeta[]; + + txChangesAfter(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + sorobanMeta( + value?: null | SorobanTransactionMeta, + ): null | SorobanTransactionMeta; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMetaV3; + + static write(value: TransactionMetaV3, io: Buffer): void; + + static isValid(value: TransactionMetaV3): boolean; + + static toXDR(value: TransactionMetaV3): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMetaV3; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMetaV3; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeHostFunctionSuccessPreImage { + constructor(attributes: { returnValue: ScVal; events: ContractEvent[] }); + + returnValue(value?: ScVal): ScVal; + + events(value?: ContractEvent[]): ContractEvent[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeHostFunctionSuccessPreImage; + + static write(value: InvokeHostFunctionSuccessPreImage, io: Buffer): void; + + static isValid(value: InvokeHostFunctionSuccessPreImage): boolean; + + static toXDR(value: InvokeHostFunctionSuccessPreImage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): InvokeHostFunctionSuccessPreImage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InvokeHostFunctionSuccessPreImage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultMeta { + constructor(attributes: { + result: TransactionResultPair; + feeProcessing: LedgerEntryChange[]; + txApplyProcessing: TransactionMeta; + }); + + result(value?: TransactionResultPair): TransactionResultPair; + + feeProcessing(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + txApplyProcessing(value?: TransactionMeta): TransactionMeta; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultMeta; + + static write(value: TransactionResultMeta, io: Buffer): void; + + static isValid(value: TransactionResultMeta): boolean; + + static toXDR(value: TransactionResultMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultMeta; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class UpgradeEntryMeta { + constructor(attributes: { + upgrade: LedgerUpgrade; + changes: LedgerEntryChange[]; + }); + + upgrade(value?: LedgerUpgrade): LedgerUpgrade; + + changes(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): UpgradeEntryMeta; + + static write(value: UpgradeEntryMeta, io: Buffer): void; + + static isValid(value: UpgradeEntryMeta): boolean; + + static toXDR(value: UpgradeEntryMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UpgradeEntryMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): UpgradeEntryMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaV0 { + constructor(attributes: { + ledgerHeader: LedgerHeaderHistoryEntry; + txSet: TransactionSet; + txProcessing: TransactionResultMeta[]; + upgradesProcessing: UpgradeEntryMeta[]; + scpInfo: ScpHistoryEntry[]; + }); + + ledgerHeader(value?: LedgerHeaderHistoryEntry): LedgerHeaderHistoryEntry; + + txSet(value?: TransactionSet): TransactionSet; + + txProcessing(value?: TransactionResultMeta[]): TransactionResultMeta[]; + + upgradesProcessing(value?: UpgradeEntryMeta[]): UpgradeEntryMeta[]; + + scpInfo(value?: ScpHistoryEntry[]): ScpHistoryEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaV0; + + static write(value: LedgerCloseMetaV0, io: Buffer): void; + + static isValid(value: LedgerCloseMetaV0): boolean; + + static toXDR(value: LedgerCloseMetaV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMetaV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaExtV1 { + constructor(attributes: { ext: ExtensionPoint; sorobanFeeWrite1Kb: Int64 }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + sorobanFeeWrite1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaExtV1; + + static write(value: LedgerCloseMetaExtV1, io: Buffer): void; + + static isValid(value: LedgerCloseMetaExtV1): boolean; + + static toXDR(value: LedgerCloseMetaExtV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaExtV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerCloseMetaExtV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaV1 { + constructor(attributes: { + ext: LedgerCloseMetaExt; + ledgerHeader: LedgerHeaderHistoryEntry; + txSet: GeneralizedTransactionSet; + txProcessing: TransactionResultMeta[]; + upgradesProcessing: UpgradeEntryMeta[]; + scpInfo: ScpHistoryEntry[]; + totalByteSizeOfBucketList: Uint64; + evictedTemporaryLedgerKeys: LedgerKey[]; + evictedPersistentLedgerEntries: LedgerEntry[]; + }); + + ext(value?: LedgerCloseMetaExt): LedgerCloseMetaExt; + + ledgerHeader(value?: LedgerHeaderHistoryEntry): LedgerHeaderHistoryEntry; + + txSet(value?: GeneralizedTransactionSet): GeneralizedTransactionSet; + + txProcessing(value?: TransactionResultMeta[]): TransactionResultMeta[]; + + upgradesProcessing(value?: UpgradeEntryMeta[]): UpgradeEntryMeta[]; + + scpInfo(value?: ScpHistoryEntry[]): ScpHistoryEntry[]; + + totalByteSizeOfBucketList(value?: Uint64): Uint64; + + evictedTemporaryLedgerKeys(value?: LedgerKey[]): LedgerKey[]; + + evictedPersistentLedgerEntries(value?: LedgerEntry[]): LedgerEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaV1; + + static write(value: LedgerCloseMetaV1, io: Buffer): void; + + static isValid(value: LedgerCloseMetaV1): boolean; + + static toXDR(value: LedgerCloseMetaV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMetaV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Error { + constructor(attributes: { code: ErrorCode; msg: string | Buffer }); + + code(value?: ErrorCode): ErrorCode; + + msg(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Error; + + static write(value: Error, io: Buffer): void; + + static isValid(value: Error): boolean; + + static toXDR(value: Error): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Error; + + static fromXDR(input: string, format: 'hex' | 'base64'): Error; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SendMore { + constructor(attributes: { numMessages: number }); + + numMessages(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SendMore; + + static write(value: SendMore, io: Buffer): void; + + static isValid(value: SendMore): boolean; + + static toXDR(value: SendMore): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SendMore; + + static fromXDR(input: string, format: 'hex' | 'base64'): SendMore; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SendMoreExtended { + constructor(attributes: { numMessages: number; numBytes: number }); + + numMessages(value?: number): number; + + numBytes(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SendMoreExtended; + + static write(value: SendMoreExtended, io: Buffer): void; + + static isValid(value: SendMoreExtended): boolean; + + static toXDR(value: SendMoreExtended): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SendMoreExtended; + + static fromXDR(input: string, format: 'hex' | 'base64'): SendMoreExtended; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AuthCert { + constructor(attributes: { + pubkey: Curve25519Public; + expiration: Uint64; + sig: Buffer; + }); + + pubkey(value?: Curve25519Public): Curve25519Public; + + expiration(value?: Uint64): Uint64; + + sig(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AuthCert; + + static write(value: AuthCert, io: Buffer): void; + + static isValid(value: AuthCert): boolean; + + static toXDR(value: AuthCert): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AuthCert; + + static fromXDR(input: string, format: 'hex' | 'base64'): AuthCert; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Hello { + constructor(attributes: { + ledgerVersion: number; + overlayVersion: number; + overlayMinVersion: number; + networkId: Buffer; + versionStr: string | Buffer; + listeningPort: number; + peerId: NodeId; + cert: AuthCert; + nonce: Buffer; + }); + + ledgerVersion(value?: number): number; + + overlayVersion(value?: number): number; + + overlayMinVersion(value?: number): number; + + networkId(value?: Buffer): Buffer; + + versionStr(value?: string | Buffer): string | Buffer; + + listeningPort(value?: number): number; + + peerId(value?: NodeId): NodeId; + + cert(value?: AuthCert): AuthCert; + + nonce(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Hello; + + static write(value: Hello, io: Buffer): void; + + static isValid(value: Hello): boolean; + + static toXDR(value: Hello): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Hello; + + static fromXDR(input: string, format: 'hex' | 'base64'): Hello; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Auth { + constructor(attributes: { flags: number }); + + flags(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Auth; + + static write(value: Auth, io: Buffer): void; + + static isValid(value: Auth): boolean; + + static toXDR(value: Auth): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Auth; + + static fromXDR(input: string, format: 'hex' | 'base64'): Auth; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PeerAddress { + constructor(attributes: { + ip: PeerAddressIp; + port: number; + numFailures: number; + }); + + ip(value?: PeerAddressIp): PeerAddressIp; + + port(value?: number): number; + + numFailures(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PeerAddress; + + static write(value: PeerAddress, io: Buffer): void; + + static isValid(value: PeerAddress): boolean; + + static toXDR(value: PeerAddress): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PeerAddress; + + static fromXDR(input: string, format: 'hex' | 'base64'): PeerAddress; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DontHave { + constructor(attributes: { type: MessageType; reqHash: Buffer }); + + type(value?: MessageType): MessageType; + + reqHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DontHave; + + static write(value: DontHave, io: Buffer): void; + + static isValid(value: DontHave): boolean; + + static toXDR(value: DontHave): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DontHave; + + static fromXDR(input: string, format: 'hex' | 'base64'): DontHave; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyStartCollectingMessage { + constructor(attributes: { + surveyorId: NodeId; + nonce: number; + ledgerNum: number; + }); + + surveyorId(value?: NodeId): NodeId; + + nonce(value?: number): number; + + ledgerNum(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyStartCollectingMessage; + + static write( + value: TimeSlicedSurveyStartCollectingMessage, + io: Buffer, + ): void; + + static isValid(value: TimeSlicedSurveyStartCollectingMessage): boolean; + + static toXDR(value: TimeSlicedSurveyStartCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyStartCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyStartCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyStartCollectingMessage { + constructor(attributes: { + signature: Buffer; + startCollecting: TimeSlicedSurveyStartCollectingMessage; + }); + + signature(value?: Buffer): Buffer; + + startCollecting( + value?: TimeSlicedSurveyStartCollectingMessage, + ): TimeSlicedSurveyStartCollectingMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyStartCollectingMessage; + + static write( + value: SignedTimeSlicedSurveyStartCollectingMessage, + io: Buffer, + ): void; + + static isValid( + value: SignedTimeSlicedSurveyStartCollectingMessage, + ): boolean; + + static toXDR(value: SignedTimeSlicedSurveyStartCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyStartCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyStartCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyStopCollectingMessage { + constructor(attributes: { + surveyorId: NodeId; + nonce: number; + ledgerNum: number; + }); + + surveyorId(value?: NodeId): NodeId; + + nonce(value?: number): number; + + ledgerNum(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyStopCollectingMessage; + + static write( + value: TimeSlicedSurveyStopCollectingMessage, + io: Buffer, + ): void; + + static isValid(value: TimeSlicedSurveyStopCollectingMessage): boolean; + + static toXDR(value: TimeSlicedSurveyStopCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyStopCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyStopCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyStopCollectingMessage { + constructor(attributes: { + signature: Buffer; + stopCollecting: TimeSlicedSurveyStopCollectingMessage; + }); + + signature(value?: Buffer): Buffer; + + stopCollecting( + value?: TimeSlicedSurveyStopCollectingMessage, + ): TimeSlicedSurveyStopCollectingMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyStopCollectingMessage; + + static write( + value: SignedTimeSlicedSurveyStopCollectingMessage, + io: Buffer, + ): void; + + static isValid(value: SignedTimeSlicedSurveyStopCollectingMessage): boolean; + + static toXDR(value: SignedTimeSlicedSurveyStopCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyStopCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyStopCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SurveyRequestMessage { + constructor(attributes: { + surveyorPeerId: NodeId; + surveyedPeerId: NodeId; + ledgerNum: number; + encryptionKey: Curve25519Public; + commandType: SurveyMessageCommandType; + }); + + surveyorPeerId(value?: NodeId): NodeId; + + surveyedPeerId(value?: NodeId): NodeId; + + ledgerNum(value?: number): number; + + encryptionKey(value?: Curve25519Public): Curve25519Public; + + commandType(value?: SurveyMessageCommandType): SurveyMessageCommandType; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SurveyRequestMessage; + + static write(value: SurveyRequestMessage, io: Buffer): void; + + static isValid(value: SurveyRequestMessage): boolean; + + static toXDR(value: SurveyRequestMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyRequestMessage { + constructor(attributes: { + request: SurveyRequestMessage; + nonce: number; + inboundPeersIndex: number; + outboundPeersIndex: number; + }); + + request(value?: SurveyRequestMessage): SurveyRequestMessage; + + nonce(value?: number): number; + + inboundPeersIndex(value?: number): number; + + outboundPeersIndex(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyRequestMessage; + + static write(value: TimeSlicedSurveyRequestMessage, io: Buffer): void; + + static isValid(value: TimeSlicedSurveyRequestMessage): boolean; + + static toXDR(value: TimeSlicedSurveyRequestMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedSurveyRequestMessage { + constructor(attributes: { + requestSignature: Buffer; + request: SurveyRequestMessage; + }); + + requestSignature(value?: Buffer): Buffer; + + request(value?: SurveyRequestMessage): SurveyRequestMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedSurveyRequestMessage; + + static write(value: SignedSurveyRequestMessage, io: Buffer): void; + + static isValid(value: SignedSurveyRequestMessage): boolean; + + static toXDR(value: SignedSurveyRequestMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SignedSurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedSurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyRequestMessage { + constructor(attributes: { + requestSignature: Buffer; + request: TimeSlicedSurveyRequestMessage; + }); + + requestSignature(value?: Buffer): Buffer; + + request( + value?: TimeSlicedSurveyRequestMessage, + ): TimeSlicedSurveyRequestMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyRequestMessage; + + static write(value: SignedTimeSlicedSurveyRequestMessage, io: Buffer): void; + + static isValid(value: SignedTimeSlicedSurveyRequestMessage): boolean; + + static toXDR(value: SignedTimeSlicedSurveyRequestMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SurveyResponseMessage { + constructor(attributes: { + surveyorPeerId: NodeId; + surveyedPeerId: NodeId; + ledgerNum: number; + commandType: SurveyMessageCommandType; + encryptedBody: Buffer; + }); + + surveyorPeerId(value?: NodeId): NodeId; + + surveyedPeerId(value?: NodeId): NodeId; + + ledgerNum(value?: number): number; + + commandType(value?: SurveyMessageCommandType): SurveyMessageCommandType; + + encryptedBody(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SurveyResponseMessage; + + static write(value: SurveyResponseMessage, io: Buffer): void; + + static isValid(value: SurveyResponseMessage): boolean; + + static toXDR(value: SurveyResponseMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyResponseMessage { + constructor(attributes: { response: SurveyResponseMessage; nonce: number }); + + response(value?: SurveyResponseMessage): SurveyResponseMessage; + + nonce(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyResponseMessage; + + static write(value: TimeSlicedSurveyResponseMessage, io: Buffer): void; + + static isValid(value: TimeSlicedSurveyResponseMessage): boolean; + + static toXDR(value: TimeSlicedSurveyResponseMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedSurveyResponseMessage { + constructor(attributes: { + responseSignature: Buffer; + response: SurveyResponseMessage; + }); + + responseSignature(value?: Buffer): Buffer; + + response(value?: SurveyResponseMessage): SurveyResponseMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedSurveyResponseMessage; + + static write(value: SignedSurveyResponseMessage, io: Buffer): void; + + static isValid(value: SignedSurveyResponseMessage): boolean; + + static toXDR(value: SignedSurveyResponseMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SignedSurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedSurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyResponseMessage { + constructor(attributes: { + responseSignature: Buffer; + response: TimeSlicedSurveyResponseMessage; + }); + + responseSignature(value?: Buffer): Buffer; + + response( + value?: TimeSlicedSurveyResponseMessage, + ): TimeSlicedSurveyResponseMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyResponseMessage; + + static write( + value: SignedTimeSlicedSurveyResponseMessage, + io: Buffer, + ): void; + + static isValid(value: SignedTimeSlicedSurveyResponseMessage): boolean; + + static toXDR(value: SignedTimeSlicedSurveyResponseMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PeerStats { + constructor(attributes: { + id: NodeId; + versionStr: string | Buffer; + messagesRead: Uint64; + messagesWritten: Uint64; + bytesRead: Uint64; + bytesWritten: Uint64; + secondsConnected: Uint64; + uniqueFloodBytesRecv: Uint64; + duplicateFloodBytesRecv: Uint64; + uniqueFetchBytesRecv: Uint64; + duplicateFetchBytesRecv: Uint64; + uniqueFloodMessageRecv: Uint64; + duplicateFloodMessageRecv: Uint64; + uniqueFetchMessageRecv: Uint64; + duplicateFetchMessageRecv: Uint64; + }); + + id(value?: NodeId): NodeId; + + versionStr(value?: string | Buffer): string | Buffer; + + messagesRead(value?: Uint64): Uint64; + + messagesWritten(value?: Uint64): Uint64; + + bytesRead(value?: Uint64): Uint64; + + bytesWritten(value?: Uint64): Uint64; + + secondsConnected(value?: Uint64): Uint64; + + uniqueFloodBytesRecv(value?: Uint64): Uint64; + + duplicateFloodBytesRecv(value?: Uint64): Uint64; + + uniqueFetchBytesRecv(value?: Uint64): Uint64; + + duplicateFetchBytesRecv(value?: Uint64): Uint64; + + uniqueFloodMessageRecv(value?: Uint64): Uint64; + + duplicateFloodMessageRecv(value?: Uint64): Uint64; + + uniqueFetchMessageRecv(value?: Uint64): Uint64; + + duplicateFetchMessageRecv(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PeerStats; + + static write(value: PeerStats, io: Buffer): void; + + static isValid(value: PeerStats): boolean; + + static toXDR(value: PeerStats): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PeerStats; + + static fromXDR(input: string, format: 'hex' | 'base64'): PeerStats; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedNodeData { + constructor(attributes: { + addedAuthenticatedPeers: number; + droppedAuthenticatedPeers: number; + totalInboundPeerCount: number; + totalOutboundPeerCount: number; + p75ScpFirstToSelfLatencyMs: number; + p75ScpSelfToOtherLatencyMs: number; + lostSyncCount: number; + isValidator: boolean; + maxInboundPeerCount: number; + maxOutboundPeerCount: number; + }); + + addedAuthenticatedPeers(value?: number): number; + + droppedAuthenticatedPeers(value?: number): number; + + totalInboundPeerCount(value?: number): number; + + totalOutboundPeerCount(value?: number): number; + + p75ScpFirstToSelfLatencyMs(value?: number): number; + + p75ScpSelfToOtherLatencyMs(value?: number): number; + + lostSyncCount(value?: number): number; + + isValidator(value?: boolean): boolean; + + maxInboundPeerCount(value?: number): number; + + maxOutboundPeerCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedNodeData; + + static write(value: TimeSlicedNodeData, io: Buffer): void; + + static isValid(value: TimeSlicedNodeData): boolean; + + static toXDR(value: TimeSlicedNodeData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TimeSlicedNodeData; + + static fromXDR(input: string, format: 'hex' | 'base64'): TimeSlicedNodeData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedPeerData { + constructor(attributes: { peerStats: PeerStats; averageLatencyMs: number }); + + peerStats(value?: PeerStats): PeerStats; + + averageLatencyMs(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedPeerData; + + static write(value: TimeSlicedPeerData, io: Buffer): void; + + static isValid(value: TimeSlicedPeerData): boolean; + + static toXDR(value: TimeSlicedPeerData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TimeSlicedPeerData; + + static fromXDR(input: string, format: 'hex' | 'base64'): TimeSlicedPeerData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TopologyResponseBodyV0 { + constructor(attributes: { + inboundPeers: PeerStats[]; + outboundPeers: PeerStats[]; + totalInboundPeerCount: number; + totalOutboundPeerCount: number; + }); + + inboundPeers(value?: PeerStats[]): PeerStats[]; + + outboundPeers(value?: PeerStats[]): PeerStats[]; + + totalInboundPeerCount(value?: number): number; + + totalOutboundPeerCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TopologyResponseBodyV0; + + static write(value: TopologyResponseBodyV0, io: Buffer): void; + + static isValid(value: TopologyResponseBodyV0): boolean; + + static toXDR(value: TopologyResponseBodyV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TopologyResponseBodyV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TopologyResponseBodyV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TopologyResponseBodyV1 { + constructor(attributes: { + inboundPeers: PeerStats[]; + outboundPeers: PeerStats[]; + totalInboundPeerCount: number; + totalOutboundPeerCount: number; + maxInboundPeerCount: number; + maxOutboundPeerCount: number; + }); + + inboundPeers(value?: PeerStats[]): PeerStats[]; + + outboundPeers(value?: PeerStats[]): PeerStats[]; + + totalInboundPeerCount(value?: number): number; + + totalOutboundPeerCount(value?: number): number; + + maxInboundPeerCount(value?: number): number; + + maxOutboundPeerCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TopologyResponseBodyV1; + + static write(value: TopologyResponseBodyV1, io: Buffer): void; + + static isValid(value: TopologyResponseBodyV1): boolean; + + static toXDR(value: TopologyResponseBodyV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TopologyResponseBodyV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TopologyResponseBodyV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TopologyResponseBodyV2 { + constructor(attributes: { + inboundPeers: TimeSlicedPeerData[]; + outboundPeers: TimeSlicedPeerData[]; + nodeData: TimeSlicedNodeData; + }); + + inboundPeers(value?: TimeSlicedPeerData[]): TimeSlicedPeerData[]; + + outboundPeers(value?: TimeSlicedPeerData[]): TimeSlicedPeerData[]; + + nodeData(value?: TimeSlicedNodeData): TimeSlicedNodeData; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TopologyResponseBodyV2; + + static write(value: TopologyResponseBodyV2, io: Buffer): void; + + static isValid(value: TopologyResponseBodyV2): boolean; + + static toXDR(value: TopologyResponseBodyV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TopologyResponseBodyV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TopologyResponseBodyV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FloodAdvert { + constructor(attributes: { txHashes: Hash[] }); + + txHashes(value?: Hash[]): Hash[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FloodAdvert; + + static write(value: FloodAdvert, io: Buffer): void; + + static isValid(value: FloodAdvert): boolean; + + static toXDR(value: FloodAdvert): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FloodAdvert; + + static fromXDR(input: string, format: 'hex' | 'base64'): FloodAdvert; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FloodDemand { + constructor(attributes: { txHashes: Hash[] }); + + txHashes(value?: Hash[]): Hash[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FloodDemand; + + static write(value: FloodDemand, io: Buffer): void; + + static isValid(value: FloodDemand): boolean; + + static toXDR(value: FloodDemand): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FloodDemand; + + static fromXDR(input: string, format: 'hex' | 'base64'): FloodDemand; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AuthenticatedMessageV0 { + constructor(attributes: { + sequence: Uint64; + message: StellarMessage; + mac: HmacSha256Mac; + }); + + sequence(value?: Uint64): Uint64; + + message(value?: StellarMessage): StellarMessage; + + mac(value?: HmacSha256Mac): HmacSha256Mac; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AuthenticatedMessageV0; + + static write(value: AuthenticatedMessageV0, io: Buffer): void; + + static isValid(value: AuthenticatedMessageV0): boolean; + + static toXDR(value: AuthenticatedMessageV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AuthenticatedMessageV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AuthenticatedMessageV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class MuxedAccountMed25519 { + constructor(attributes: { id: Uint64; ed25519: Buffer }); + + id(value?: Uint64): Uint64; + + ed25519(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): MuxedAccountMed25519; + + static write(value: MuxedAccountMed25519, io: Buffer): void; + + static isValid(value: MuxedAccountMed25519): boolean; + + static toXDR(value: MuxedAccountMed25519): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): MuxedAccountMed25519; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): MuxedAccountMed25519; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DecoratedSignature { + constructor(attributes: { hint: Buffer; signature: Buffer }); + + hint(value?: Buffer): Buffer; + + signature(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DecoratedSignature; + + static write(value: DecoratedSignature, io: Buffer): void; + + static isValid(value: DecoratedSignature): boolean; + + static toXDR(value: DecoratedSignature): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DecoratedSignature; + + static fromXDR(input: string, format: 'hex' | 'base64'): DecoratedSignature; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateAccountOp { + constructor(attributes: { destination: AccountId; startingBalance: Int64 }); + + destination(value?: AccountId): AccountId; + + startingBalance(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateAccountOp; + + static write(value: CreateAccountOp, io: Buffer): void; + + static isValid(value: CreateAccountOp): boolean; + + static toXDR(value: CreateAccountOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateAccountOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): CreateAccountOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PaymentOp { + constructor(attributes: { + destination: MuxedAccount; + asset: Asset; + amount: Int64; + }); + + destination(value?: MuxedAccount): MuxedAccount; + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PaymentOp; + + static write(value: PaymentOp, io: Buffer): void; + + static isValid(value: PaymentOp): boolean; + + static toXDR(value: PaymentOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PaymentOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): PaymentOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictReceiveOp { + constructor(attributes: { + sendAsset: Asset; + sendMax: Int64; + destination: MuxedAccount; + destAsset: Asset; + destAmount: Int64; + path: Asset[]; + }); + + sendAsset(value?: Asset): Asset; + + sendMax(value?: Int64): Int64; + + destination(value?: MuxedAccount): MuxedAccount; + + destAsset(value?: Asset): Asset; + + destAmount(value?: Int64): Int64; + + path(value?: Asset[]): Asset[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictReceiveOp; + + static write(value: PathPaymentStrictReceiveOp, io: Buffer): void; + + static isValid(value: PathPaymentStrictReceiveOp): boolean; + + static toXDR(value: PathPaymentStrictReceiveOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PathPaymentStrictReceiveOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictReceiveOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictSendOp { + constructor(attributes: { + sendAsset: Asset; + sendAmount: Int64; + destination: MuxedAccount; + destAsset: Asset; + destMin: Int64; + path: Asset[]; + }); + + sendAsset(value?: Asset): Asset; + + sendAmount(value?: Int64): Int64; + + destination(value?: MuxedAccount): MuxedAccount; + + destAsset(value?: Asset): Asset; + + destMin(value?: Int64): Int64; + + path(value?: Asset[]): Asset[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictSendOp; + + static write(value: PathPaymentStrictSendOp, io: Buffer): void; + + static isValid(value: PathPaymentStrictSendOp): boolean; + + static toXDR(value: PathPaymentStrictSendOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PathPaymentStrictSendOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictSendOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageSellOfferOp { + constructor(attributes: { + selling: Asset; + buying: Asset; + amount: Int64; + price: Price; + offerId: Int64; + }); + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + price(value?: Price): Price; + + offerId(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageSellOfferOp; + + static write(value: ManageSellOfferOp, io: Buffer): void; + + static isValid(value: ManageSellOfferOp): boolean; + + static toXDR(value: ManageSellOfferOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageSellOfferOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageSellOfferOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageBuyOfferOp { + constructor(attributes: { + selling: Asset; + buying: Asset; + buyAmount: Int64; + price: Price; + offerId: Int64; + }); + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + buyAmount(value?: Int64): Int64; + + price(value?: Price): Price; + + offerId(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageBuyOfferOp; + + static write(value: ManageBuyOfferOp, io: Buffer): void; + + static isValid(value: ManageBuyOfferOp): boolean; + + static toXDR(value: ManageBuyOfferOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageBuyOfferOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageBuyOfferOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreatePassiveSellOfferOp { + constructor(attributes: { + selling: Asset; + buying: Asset; + amount: Int64; + price: Price; + }); + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + price(value?: Price): Price; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreatePassiveSellOfferOp; + + static write(value: CreatePassiveSellOfferOp, io: Buffer): void; + + static isValid(value: CreatePassiveSellOfferOp): boolean; + + static toXDR(value: CreatePassiveSellOfferOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreatePassiveSellOfferOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreatePassiveSellOfferOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetOptionsOp { + constructor(attributes: { + inflationDest: null | AccountId; + clearFlags: null | number; + setFlags: null | number; + masterWeight: null | number; + lowThreshold: null | number; + medThreshold: null | number; + highThreshold: null | number; + homeDomain: null | string | Buffer; + signer: null | Signer; + }); + + inflationDest(value?: null | AccountId): null | AccountId; + + clearFlags(value?: null | number): null | number; + + setFlags(value?: null | number): null | number; + + masterWeight(value?: null | number): null | number; + + lowThreshold(value?: null | number): null | number; + + medThreshold(value?: null | number): null | number; + + highThreshold(value?: null | number): null | number; + + homeDomain(value?: null | string | Buffer): null | string | Buffer; + + signer(value?: null | Signer): null | Signer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetOptionsOp; + + static write(value: SetOptionsOp, io: Buffer): void; + + static isValid(value: SetOptionsOp): boolean; + + static toXDR(value: SetOptionsOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetOptionsOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): SetOptionsOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ChangeTrustOp { + constructor(attributes: { line: ChangeTrustAsset; limit: Int64 }); + + line(value?: ChangeTrustAsset): ChangeTrustAsset; + + limit(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ChangeTrustOp; + + static write(value: ChangeTrustOp, io: Buffer): void; + + static isValid(value: ChangeTrustOp): boolean; + + static toXDR(value: ChangeTrustOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ChangeTrustOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ChangeTrustOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AllowTrustOp { + constructor(attributes: { + trustor: AccountId; + asset: AssetCode; + authorize: number; + }); + + trustor(value?: AccountId): AccountId; + + asset(value?: AssetCode): AssetCode; + + authorize(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AllowTrustOp; + + static write(value: AllowTrustOp, io: Buffer): void; + + static isValid(value: AllowTrustOp): boolean; + + static toXDR(value: AllowTrustOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AllowTrustOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): AllowTrustOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageDataOp { + constructor(attributes: { + dataName: string | Buffer; + dataValue: null | Buffer; + }); + + dataName(value?: string | Buffer): string | Buffer; + + dataValue(value?: null | Buffer): null | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageDataOp; + + static write(value: ManageDataOp, io: Buffer): void; + + static isValid(value: ManageDataOp): boolean; + + static toXDR(value: ManageDataOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageDataOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageDataOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BumpSequenceOp { + constructor(attributes: { bumpTo: SequenceNumber }); + + bumpTo(value?: SequenceNumber): SequenceNumber; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BumpSequenceOp; + + static write(value: BumpSequenceOp, io: Buffer): void; + + static isValid(value: BumpSequenceOp): boolean; + + static toXDR(value: BumpSequenceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BumpSequenceOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): BumpSequenceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateClaimableBalanceOp { + constructor(attributes: { + asset: Asset; + amount: Int64; + claimants: Claimant[]; + }); + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + claimants(value?: Claimant[]): Claimant[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateClaimableBalanceOp; + + static write(value: CreateClaimableBalanceOp, io: Buffer): void; + + static isValid(value: CreateClaimableBalanceOp): boolean; + + static toXDR(value: CreateClaimableBalanceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateClaimableBalanceOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateClaimableBalanceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimClaimableBalanceOp { + constructor(attributes: { balanceId: ClaimableBalanceId }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimClaimableBalanceOp; + + static write(value: ClaimClaimableBalanceOp, io: Buffer): void; + + static isValid(value: ClaimClaimableBalanceOp): boolean; + + static toXDR(value: ClaimClaimableBalanceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimClaimableBalanceOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimClaimableBalanceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BeginSponsoringFutureReservesOp { + constructor(attributes: { sponsoredId: AccountId }); + + sponsoredId(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BeginSponsoringFutureReservesOp; + + static write(value: BeginSponsoringFutureReservesOp, io: Buffer): void; + + static isValid(value: BeginSponsoringFutureReservesOp): boolean; + + static toXDR(value: BeginSponsoringFutureReservesOp): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): BeginSponsoringFutureReservesOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): BeginSponsoringFutureReservesOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RevokeSponsorshipOpSigner { + constructor(attributes: { accountId: AccountId; signerKey: SignerKey }); + + accountId(value?: AccountId): AccountId; + + signerKey(value?: SignerKey): SignerKey; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RevokeSponsorshipOpSigner; + + static write(value: RevokeSponsorshipOpSigner, io: Buffer): void; + + static isValid(value: RevokeSponsorshipOpSigner): boolean; + + static toXDR(value: RevokeSponsorshipOpSigner): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RevokeSponsorshipOpSigner; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RevokeSponsorshipOpSigner; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackOp { + constructor(attributes: { + asset: Asset; + from: MuxedAccount; + amount: Int64; + }); + + asset(value?: Asset): Asset; + + from(value?: MuxedAccount): MuxedAccount; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackOp; + + static write(value: ClawbackOp, io: Buffer): void; + + static isValid(value: ClawbackOp): boolean; + + static toXDR(value: ClawbackOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClawbackOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClawbackOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackClaimableBalanceOp { + constructor(attributes: { balanceId: ClaimableBalanceId }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackClaimableBalanceOp; + + static write(value: ClawbackClaimableBalanceOp, io: Buffer): void; + + static isValid(value: ClawbackClaimableBalanceOp): boolean; + + static toXDR(value: ClawbackClaimableBalanceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClawbackClaimableBalanceOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClawbackClaimableBalanceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetTrustLineFlagsOp { + constructor(attributes: { + trustor: AccountId; + asset: Asset; + clearFlags: number; + setFlags: number; + }); + + trustor(value?: AccountId): AccountId; + + asset(value?: Asset): Asset; + + clearFlags(value?: number): number; + + setFlags(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetTrustLineFlagsOp; + + static write(value: SetTrustLineFlagsOp, io: Buffer): void; + + static isValid(value: SetTrustLineFlagsOp): boolean; + + static toXDR(value: SetTrustLineFlagsOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetTrustLineFlagsOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SetTrustLineFlagsOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolDepositOp { + constructor(attributes: { + liquidityPoolId: PoolId; + maxAmountA: Int64; + maxAmountB: Int64; + minPrice: Price; + maxPrice: Price; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + maxAmountA(value?: Int64): Int64; + + maxAmountB(value?: Int64): Int64; + + minPrice(value?: Price): Price; + + maxPrice(value?: Price): Price; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolDepositOp; + + static write(value: LiquidityPoolDepositOp, io: Buffer): void; + + static isValid(value: LiquidityPoolDepositOp): boolean; + + static toXDR(value: LiquidityPoolDepositOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolDepositOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolDepositOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolWithdrawOp { + constructor(attributes: { + liquidityPoolId: PoolId; + amount: Int64; + minAmountA: Int64; + minAmountB: Int64; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + amount(value?: Int64): Int64; + + minAmountA(value?: Int64): Int64; + + minAmountB(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolWithdrawOp; + + static write(value: LiquidityPoolWithdrawOp, io: Buffer): void; + + static isValid(value: LiquidityPoolWithdrawOp): boolean; + + static toXDR(value: LiquidityPoolWithdrawOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolWithdrawOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolWithdrawOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractIdPreimageFromAddress { + constructor(attributes: { address: ScAddress; salt: Buffer }); + + address(value?: ScAddress): ScAddress; + + salt(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractIdPreimageFromAddress; + + static write(value: ContractIdPreimageFromAddress, io: Buffer): void; + + static isValid(value: ContractIdPreimageFromAddress): boolean; + + static toXDR(value: ContractIdPreimageFromAddress): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ContractIdPreimageFromAddress; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractIdPreimageFromAddress; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateContractArgs { + constructor(attributes: { + contractIdPreimage: ContractIdPreimage; + executable: ContractExecutable; + }); + + contractIdPreimage(value?: ContractIdPreimage): ContractIdPreimage; + + executable(value?: ContractExecutable): ContractExecutable; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateContractArgs; + + static write(value: CreateContractArgs, io: Buffer): void; + + static isValid(value: CreateContractArgs): boolean; + + static toXDR(value: CreateContractArgs): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateContractArgs; + + static fromXDR(input: string, format: 'hex' | 'base64'): CreateContractArgs; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateContractArgsV2 { + constructor(attributes: { + contractIdPreimage: ContractIdPreimage; + executable: ContractExecutable; + constructorArgs: ScVal[]; + }); + + contractIdPreimage(value?: ContractIdPreimage): ContractIdPreimage; + + executable(value?: ContractExecutable): ContractExecutable; + + constructorArgs(value?: ScVal[]): ScVal[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateContractArgsV2; + + static write(value: CreateContractArgsV2, io: Buffer): void; + + static isValid(value: CreateContractArgsV2): boolean; + + static toXDR(value: CreateContractArgsV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateContractArgsV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateContractArgsV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeContractArgs { + constructor(attributes: { + contractAddress: ScAddress; + functionName: string | Buffer; + args: ScVal[]; + }); + + contractAddress(value?: ScAddress): ScAddress; + + functionName(value?: string | Buffer): string | Buffer; + + args(value?: ScVal[]): ScVal[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeContractArgs; + + static write(value: InvokeContractArgs, io: Buffer): void; + + static isValid(value: InvokeContractArgs): boolean; + + static toXDR(value: InvokeContractArgs): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InvokeContractArgs; + + static fromXDR(input: string, format: 'hex' | 'base64'): InvokeContractArgs; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAuthorizedInvocation { + constructor(attributes: { + function: SorobanAuthorizedFunction; + subInvocations: SorobanAuthorizedInvocation[]; + }); + + function(value?: SorobanAuthorizedFunction): SorobanAuthorizedFunction; + + subInvocations( + value?: SorobanAuthorizedInvocation[], + ): SorobanAuthorizedInvocation[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAuthorizedInvocation; + + static write(value: SorobanAuthorizedInvocation, io: Buffer): void; + + static isValid(value: SorobanAuthorizedInvocation): boolean; + + static toXDR(value: SorobanAuthorizedInvocation): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAuthorizedInvocation; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAuthorizedInvocation; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAddressCredentials { + constructor(attributes: { + address: ScAddress; + nonce: Int64; + signatureExpirationLedger: number; + signature: ScVal; + }); + + address(value?: ScAddress): ScAddress; + + nonce(value?: Int64): Int64; + + signatureExpirationLedger(value?: number): number; + + signature(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAddressCredentials; + + static write(value: SorobanAddressCredentials, io: Buffer): void; + + static isValid(value: SorobanAddressCredentials): boolean; + + static toXDR(value: SorobanAddressCredentials): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAddressCredentials; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAddressCredentials; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAuthorizationEntry { + constructor(attributes: { + credentials: SorobanCredentials; + rootInvocation: SorobanAuthorizedInvocation; + }); + + credentials(value?: SorobanCredentials): SorobanCredentials; + + rootInvocation( + value?: SorobanAuthorizedInvocation, + ): SorobanAuthorizedInvocation; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAuthorizationEntry; + + static write(value: SorobanAuthorizationEntry, io: Buffer): void; + + static isValid(value: SorobanAuthorizationEntry): boolean; + + static toXDR(value: SorobanAuthorizationEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAuthorizationEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAuthorizationEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeHostFunctionOp { + constructor(attributes: { + hostFunction: HostFunction; + auth: SorobanAuthorizationEntry[]; + }); + + hostFunction(value?: HostFunction): HostFunction; + + auth(value?: SorobanAuthorizationEntry[]): SorobanAuthorizationEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeHostFunctionOp; + + static write(value: InvokeHostFunctionOp, io: Buffer): void; + + static isValid(value: InvokeHostFunctionOp): boolean; + + static toXDR(value: InvokeHostFunctionOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InvokeHostFunctionOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InvokeHostFunctionOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExtendFootprintTtlOp { + constructor(attributes: { ext: ExtensionPoint; extendTo: number }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + extendTo(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExtendFootprintTtlOp; + + static write(value: ExtendFootprintTtlOp, io: Buffer): void; + + static isValid(value: ExtendFootprintTtlOp): boolean; + + static toXDR(value: ExtendFootprintTtlOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExtendFootprintTtlOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ExtendFootprintTtlOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RestoreFootprintOp { + constructor(attributes: { ext: ExtensionPoint }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RestoreFootprintOp; + + static write(value: RestoreFootprintOp, io: Buffer): void; + + static isValid(value: RestoreFootprintOp): boolean; + + static toXDR(value: RestoreFootprintOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RestoreFootprintOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): RestoreFootprintOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageOperationId { + constructor(attributes: { + sourceAccount: AccountId; + seqNum: SequenceNumber; + opNum: number; + }); + + sourceAccount(value?: AccountId): AccountId; + + seqNum(value?: SequenceNumber): SequenceNumber; + + opNum(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageOperationId; + + static write(value: HashIdPreimageOperationId, io: Buffer): void; + + static isValid(value: HashIdPreimageOperationId): boolean; + + static toXDR(value: HashIdPreimageOperationId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimageOperationId; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageOperationId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageRevokeId { + constructor(attributes: { + sourceAccount: AccountId; + seqNum: SequenceNumber; + opNum: number; + liquidityPoolId: PoolId; + asset: Asset; + }); + + sourceAccount(value?: AccountId): AccountId; + + seqNum(value?: SequenceNumber): SequenceNumber; + + opNum(value?: number): number; + + liquidityPoolId(value?: PoolId): PoolId; + + asset(value?: Asset): Asset; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageRevokeId; + + static write(value: HashIdPreimageRevokeId, io: Buffer): void; + + static isValid(value: HashIdPreimageRevokeId): boolean; + + static toXDR(value: HashIdPreimageRevokeId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimageRevokeId; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageRevokeId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageContractId { + constructor(attributes: { + networkId: Buffer; + contractIdPreimage: ContractIdPreimage; + }); + + networkId(value?: Buffer): Buffer; + + contractIdPreimage(value?: ContractIdPreimage): ContractIdPreimage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageContractId; + + static write(value: HashIdPreimageContractId, io: Buffer): void; + + static isValid(value: HashIdPreimageContractId): boolean; + + static toXDR(value: HashIdPreimageContractId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimageContractId; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageContractId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageSorobanAuthorization { + constructor(attributes: { + networkId: Buffer; + nonce: Int64; + signatureExpirationLedger: number; + invocation: SorobanAuthorizedInvocation; + }); + + networkId(value?: Buffer): Buffer; + + nonce(value?: Int64): Int64; + + signatureExpirationLedger(value?: number): number; + + invocation( + value?: SorobanAuthorizedInvocation, + ): SorobanAuthorizedInvocation; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageSorobanAuthorization; + + static write(value: HashIdPreimageSorobanAuthorization, io: Buffer): void; + + static isValid(value: HashIdPreimageSorobanAuthorization): boolean; + + static toXDR(value: HashIdPreimageSorobanAuthorization): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): HashIdPreimageSorobanAuthorization; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageSorobanAuthorization; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeBounds { + constructor(attributes: { minTime: TimePoint; maxTime: TimePoint }); + + minTime(value?: TimePoint): TimePoint; + + maxTime(value?: TimePoint): TimePoint; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeBounds; + + static write(value: TimeBounds, io: Buffer): void; + + static isValid(value: TimeBounds): boolean; + + static toXDR(value: TimeBounds): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TimeBounds; + + static fromXDR(input: string, format: 'hex' | 'base64'): TimeBounds; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerBounds { + constructor(attributes: { minLedger: number; maxLedger: number }); + + minLedger(value?: number): number; + + maxLedger(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerBounds; + + static write(value: LedgerBounds, io: Buffer): void; + + static isValid(value: LedgerBounds): boolean; + + static toXDR(value: LedgerBounds): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerBounds; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerBounds; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PreconditionsV2 { + constructor(attributes: { + timeBounds: null | TimeBounds; + ledgerBounds: null | LedgerBounds; + minSeqNum: null | SequenceNumber; + minSeqAge: Duration; + minSeqLedgerGap: number; + extraSigners: SignerKey[]; + }); + + timeBounds(value?: null | TimeBounds): null | TimeBounds; + + ledgerBounds(value?: null | LedgerBounds): null | LedgerBounds; + + minSeqNum(value?: null | SequenceNumber): null | SequenceNumber; + + minSeqAge(value?: Duration): Duration; + + minSeqLedgerGap(value?: number): number; + + extraSigners(value?: SignerKey[]): SignerKey[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PreconditionsV2; + + static write(value: PreconditionsV2, io: Buffer): void; + + static isValid(value: PreconditionsV2): boolean; + + static toXDR(value: PreconditionsV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PreconditionsV2; + + static fromXDR(input: string, format: 'hex' | 'base64'): PreconditionsV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerFootprint { + constructor(attributes: { readOnly: LedgerKey[]; readWrite: LedgerKey[] }); + + readOnly(value?: LedgerKey[]): LedgerKey[]; + + readWrite(value?: LedgerKey[]): LedgerKey[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerFootprint; + + static write(value: LedgerFootprint, io: Buffer): void; + + static isValid(value: LedgerFootprint): boolean; + + static toXDR(value: LedgerFootprint): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerFootprint; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerFootprint; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ArchivalProofNode { + constructor(attributes: { index: number; hash: Buffer }); + + index(value?: number): number; + + hash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ArchivalProofNode; + + static write(value: ArchivalProofNode, io: Buffer): void; + + static isValid(value: ArchivalProofNode): boolean; + + static toXDR(value: ArchivalProofNode): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ArchivalProofNode; + + static fromXDR(input: string, format: 'hex' | 'base64'): ArchivalProofNode; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class NonexistenceProofBody { + constructor(attributes: { + entriesToProve: ColdArchiveBucketEntry[]; + proofLevels: ArchivalProofNode[][]; + }); + + entriesToProve(value?: ColdArchiveBucketEntry[]): ColdArchiveBucketEntry[]; + + proofLevels(value?: ArchivalProofNode[][]): ArchivalProofNode[][]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): NonexistenceProofBody; + + static write(value: NonexistenceProofBody, io: Buffer): void; + + static isValid(value: NonexistenceProofBody): boolean; + + static toXDR(value: NonexistenceProofBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): NonexistenceProofBody; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): NonexistenceProofBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExistenceProofBody { + constructor(attributes: { + keysToProve: LedgerKey[]; + lowBoundEntries: ColdArchiveBucketEntry[]; + highBoundEntries: ColdArchiveBucketEntry[]; + proofLevels: ArchivalProofNode[][]; + }); + + keysToProve(value?: LedgerKey[]): LedgerKey[]; + + lowBoundEntries(value?: ColdArchiveBucketEntry[]): ColdArchiveBucketEntry[]; + + highBoundEntries( + value?: ColdArchiveBucketEntry[], + ): ColdArchiveBucketEntry[]; + + proofLevels(value?: ArchivalProofNode[][]): ArchivalProofNode[][]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExistenceProofBody; + + static write(value: ExistenceProofBody, io: Buffer): void; + + static isValid(value: ExistenceProofBody): boolean; + + static toXDR(value: ExistenceProofBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExistenceProofBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): ExistenceProofBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ArchivalProof { + constructor(attributes: { epoch: number; body: ArchivalProofBody }); + + epoch(value?: number): number; + + body(value?: ArchivalProofBody): ArchivalProofBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ArchivalProof; + + static write(value: ArchivalProof, io: Buffer): void; + + static isValid(value: ArchivalProof): boolean; + + static toXDR(value: ArchivalProof): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ArchivalProof; + + static fromXDR(input: string, format: 'hex' | 'base64'): ArchivalProof; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanResources { + constructor(attributes: { + footprint: LedgerFootprint; + instructions: number; + readBytes: number; + writeBytes: number; + }); + + footprint(value?: LedgerFootprint): LedgerFootprint; + + instructions(value?: number): number; + + readBytes(value?: number): number; + + writeBytes(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanResources; + + static write(value: SorobanResources, io: Buffer): void; + + static isValid(value: SorobanResources): boolean; + + static toXDR(value: SorobanResources): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanResources; + + static fromXDR(input: string, format: 'hex' | 'base64'): SorobanResources; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionData { + constructor(attributes: { + ext: ExtensionPoint; + resources: SorobanResources; + resourceFee: Int64; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + resources(value?: SorobanResources): SorobanResources; + + resourceFee(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionData; + + static write(value: SorobanTransactionData, io: Buffer): void; + + static isValid(value: SorobanTransactionData): boolean; + + static toXDR(value: SorobanTransactionData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionData; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV0 { + constructor(attributes: { + sourceAccountEd25519: Buffer; + fee: number; + seqNum: SequenceNumber; + timeBounds: null | TimeBounds; + memo: Memo; + operations: Operation[]; + ext: TransactionV0Ext; + }); + + sourceAccountEd25519(value?: Buffer): Buffer; + + fee(value?: number): number; + + seqNum(value?: SequenceNumber): SequenceNumber; + + timeBounds(value?: null | TimeBounds): null | TimeBounds; + + memo(value?: Memo): Memo; + + operations(value?: Operation[]): Operation[]; + + ext(value?: TransactionV0Ext): TransactionV0Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV0; + + static write(value: TransactionV0, io: Buffer): void; + + static isValid(value: TransactionV0): boolean; + + static toXDR(value: TransactionV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV0Envelope { + constructor(attributes: { + tx: TransactionV0; + signatures: DecoratedSignature[]; + }); + + tx(value?: TransactionV0): TransactionV0; + + signatures(value?: DecoratedSignature[]): DecoratedSignature[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV0Envelope; + + static write(value: TransactionV0Envelope, io: Buffer): void; + + static isValid(value: TransactionV0Envelope): boolean; + + static toXDR(value: TransactionV0Envelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV0Envelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionV0Envelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Transaction { + constructor(attributes: { + sourceAccount: MuxedAccount; + fee: number; + seqNum: SequenceNumber; + cond: Preconditions; + memo: Memo; + operations: Operation[]; + ext: TransactionExt; + }); + + sourceAccount(value?: MuxedAccount): MuxedAccount; + + fee(value?: number): number; + + seqNum(value?: SequenceNumber): SequenceNumber; + + cond(value?: Preconditions): Preconditions; + + memo(value?: Memo): Memo; + + operations(value?: Operation[]): Operation[]; + + ext(value?: TransactionExt): TransactionExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Transaction; + + static write(value: Transaction, io: Buffer): void; + + static isValid(value: Transaction): boolean; + + static toXDR(value: Transaction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Transaction; + + static fromXDR(input: string, format: 'hex' | 'base64'): Transaction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV1Envelope { + constructor(attributes: { + tx: Transaction; + signatures: DecoratedSignature[]; + }); + + tx(value?: Transaction): Transaction; + + signatures(value?: DecoratedSignature[]): DecoratedSignature[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV1Envelope; + + static write(value: TransactionV1Envelope, io: Buffer): void; + + static isValid(value: TransactionV1Envelope): boolean; + + static toXDR(value: TransactionV1Envelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV1Envelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionV1Envelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransaction { + constructor(attributes: { + feeSource: MuxedAccount; + fee: Int64; + innerTx: FeeBumpTransactionInnerTx; + ext: FeeBumpTransactionExt; + }); + + feeSource(value?: MuxedAccount): MuxedAccount; + + fee(value?: Int64): Int64; + + innerTx(value?: FeeBumpTransactionInnerTx): FeeBumpTransactionInnerTx; + + ext(value?: FeeBumpTransactionExt): FeeBumpTransactionExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransaction; + + static write(value: FeeBumpTransaction, io: Buffer): void; + + static isValid(value: FeeBumpTransaction): boolean; + + static toXDR(value: FeeBumpTransaction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransaction; + + static fromXDR(input: string, format: 'hex' | 'base64'): FeeBumpTransaction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransactionEnvelope { + constructor(attributes: { + tx: FeeBumpTransaction; + signatures: DecoratedSignature[]; + }); + + tx(value?: FeeBumpTransaction): FeeBumpTransaction; + + signatures(value?: DecoratedSignature[]): DecoratedSignature[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransactionEnvelope; + + static write(value: FeeBumpTransactionEnvelope, io: Buffer): void; + + static isValid(value: FeeBumpTransactionEnvelope): boolean; + + static toXDR(value: FeeBumpTransactionEnvelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransactionEnvelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): FeeBumpTransactionEnvelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSignaturePayload { + constructor(attributes: { + networkId: Buffer; + taggedTransaction: TransactionSignaturePayloadTaggedTransaction; + }); + + networkId(value?: Buffer): Buffer; + + taggedTransaction( + value?: TransactionSignaturePayloadTaggedTransaction, + ): TransactionSignaturePayloadTaggedTransaction; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSignaturePayload; + + static write(value: TransactionSignaturePayload, io: Buffer): void; + + static isValid(value: TransactionSignaturePayload): boolean; + + static toXDR(value: TransactionSignaturePayload): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionSignaturePayload; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionSignaturePayload; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimOfferAtomV0 { + constructor(attributes: { + sellerEd25519: Buffer; + offerId: Int64; + assetSold: Asset; + amountSold: Int64; + assetBought: Asset; + amountBought: Int64; + }); + + sellerEd25519(value?: Buffer): Buffer; + + offerId(value?: Int64): Int64; + + assetSold(value?: Asset): Asset; + + amountSold(value?: Int64): Int64; + + assetBought(value?: Asset): Asset; + + amountBought(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimOfferAtomV0; + + static write(value: ClaimOfferAtomV0, io: Buffer): void; + + static isValid(value: ClaimOfferAtomV0): boolean; + + static toXDR(value: ClaimOfferAtomV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimOfferAtomV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimOfferAtomV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimOfferAtom { + constructor(attributes: { + sellerId: AccountId; + offerId: Int64; + assetSold: Asset; + amountSold: Int64; + assetBought: Asset; + amountBought: Int64; + }); + + sellerId(value?: AccountId): AccountId; + + offerId(value?: Int64): Int64; + + assetSold(value?: Asset): Asset; + + amountSold(value?: Int64): Int64; + + assetBought(value?: Asset): Asset; + + amountBought(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimOfferAtom; + + static write(value: ClaimOfferAtom, io: Buffer): void; + + static isValid(value: ClaimOfferAtom): boolean; + + static toXDR(value: ClaimOfferAtom): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimOfferAtom; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimOfferAtom; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimLiquidityAtom { + constructor(attributes: { + liquidityPoolId: PoolId; + assetSold: Asset; + amountSold: Int64; + assetBought: Asset; + amountBought: Int64; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + assetSold(value?: Asset): Asset; + + amountSold(value?: Int64): Int64; + + assetBought(value?: Asset): Asset; + + amountBought(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimLiquidityAtom; + + static write(value: ClaimLiquidityAtom, io: Buffer): void; + + static isValid(value: ClaimLiquidityAtom): boolean; + + static toXDR(value: ClaimLiquidityAtom): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimLiquidityAtom; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimLiquidityAtom; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SimplePaymentResult { + constructor(attributes: { + destination: AccountId; + asset: Asset; + amount: Int64; + }); + + destination(value?: AccountId): AccountId; + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SimplePaymentResult; + + static write(value: SimplePaymentResult, io: Buffer): void; + + static isValid(value: SimplePaymentResult): boolean; + + static toXDR(value: SimplePaymentResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SimplePaymentResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SimplePaymentResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictReceiveResultSuccess { + constructor(attributes: { offers: ClaimAtom[]; last: SimplePaymentResult }); + + offers(value?: ClaimAtom[]): ClaimAtom[]; + + last(value?: SimplePaymentResult): SimplePaymentResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictReceiveResultSuccess; + + static write( + value: PathPaymentStrictReceiveResultSuccess, + io: Buffer, + ): void; + + static isValid(value: PathPaymentStrictReceiveResultSuccess): boolean; + + static toXDR(value: PathPaymentStrictReceiveResultSuccess): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): PathPaymentStrictReceiveResultSuccess; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictReceiveResultSuccess; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictSendResultSuccess { + constructor(attributes: { offers: ClaimAtom[]; last: SimplePaymentResult }); + + offers(value?: ClaimAtom[]): ClaimAtom[]; + + last(value?: SimplePaymentResult): SimplePaymentResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictSendResultSuccess; + + static write(value: PathPaymentStrictSendResultSuccess, io: Buffer): void; + + static isValid(value: PathPaymentStrictSendResultSuccess): boolean; + + static toXDR(value: PathPaymentStrictSendResultSuccess): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): PathPaymentStrictSendResultSuccess; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictSendResultSuccess; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageOfferSuccessResult { + constructor(attributes: { + offersClaimed: ClaimAtom[]; + offer: ManageOfferSuccessResultOffer; + }); + + offersClaimed(value?: ClaimAtom[]): ClaimAtom[]; + + offer(value?: ManageOfferSuccessResultOffer): ManageOfferSuccessResultOffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageOfferSuccessResult; + + static write(value: ManageOfferSuccessResult, io: Buffer): void; + + static isValid(value: ManageOfferSuccessResult): boolean; + + static toXDR(value: ManageOfferSuccessResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageOfferSuccessResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageOfferSuccessResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InflationPayout { + constructor(attributes: { destination: AccountId; amount: Int64 }); + + destination(value?: AccountId): AccountId; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InflationPayout; + + static write(value: InflationPayout, io: Buffer): void; + + static isValid(value: InflationPayout): boolean; + + static toXDR(value: InflationPayout): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InflationPayout; + + static fromXDR(input: string, format: 'hex' | 'base64'): InflationPayout; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResult { + constructor(attributes: { + feeCharged: Int64; + result: InnerTransactionResultResult; + ext: InnerTransactionResultExt; + }); + + feeCharged(value?: Int64): Int64; + + result(value?: InnerTransactionResultResult): InnerTransactionResultResult; + + ext(value?: InnerTransactionResultExt): InnerTransactionResultExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResult; + + static write(value: InnerTransactionResult, io: Buffer): void; + + static isValid(value: InnerTransactionResult): boolean; + + static toXDR(value: InnerTransactionResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResultPair { + constructor(attributes: { + transactionHash: Buffer; + result: InnerTransactionResult; + }); + + transactionHash(value?: Buffer): Buffer; + + result(value?: InnerTransactionResult): InnerTransactionResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResultPair; + + static write(value: InnerTransactionResultPair, io: Buffer): void; + + static isValid(value: InnerTransactionResultPair): boolean; + + static toXDR(value: InnerTransactionResultPair): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResultPair; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResultPair; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResult { + constructor(attributes: { + feeCharged: Int64; + result: TransactionResultResult; + ext: TransactionResultExt; + }); + + feeCharged(value?: Int64): Int64; + + result(value?: TransactionResultResult): TransactionResultResult; + + ext(value?: TransactionResultExt): TransactionResultExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResult; + + static write(value: TransactionResult, io: Buffer): void; + + static isValid(value: TransactionResult): boolean; + + static toXDR(value: TransactionResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignerKeyEd25519SignedPayload { + constructor(attributes: { ed25519: Buffer; payload: Buffer }); + + ed25519(value?: Buffer): Buffer; + + payload(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignerKeyEd25519SignedPayload; + + static write(value: SignerKeyEd25519SignedPayload, io: Buffer): void; + + static isValid(value: SignerKeyEd25519SignedPayload): boolean; + + static toXDR(value: SignerKeyEd25519SignedPayload): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignerKeyEd25519SignedPayload; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignerKeyEd25519SignedPayload; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Curve25519Secret { + constructor(attributes: { key: Buffer }); + + key(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Curve25519Secret; + + static write(value: Curve25519Secret, io: Buffer): void; + + static isValid(value: Curve25519Secret): boolean; + + static toXDR(value: Curve25519Secret): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Curve25519Secret; + + static fromXDR(input: string, format: 'hex' | 'base64'): Curve25519Secret; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Curve25519Public { + constructor(attributes: { key: Buffer }); + + key(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Curve25519Public; + + static write(value: Curve25519Public, io: Buffer): void; + + static isValid(value: Curve25519Public): boolean; + + static toXDR(value: Curve25519Public): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Curve25519Public; + + static fromXDR(input: string, format: 'hex' | 'base64'): Curve25519Public; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HmacSha256Key { + constructor(attributes: { key: Buffer }); + + key(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HmacSha256Key; + + static write(value: HmacSha256Key, io: Buffer): void; + + static isValid(value: HmacSha256Key): boolean; + + static toXDR(value: HmacSha256Key): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HmacSha256Key; + + static fromXDR(input: string, format: 'hex' | 'base64'): HmacSha256Key; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HmacSha256Mac { + constructor(attributes: { mac: Buffer }); + + mac(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HmacSha256Mac; + + static write(value: HmacSha256Mac, io: Buffer): void; + + static isValid(value: HmacSha256Mac): boolean; + + static toXDR(value: HmacSha256Mac): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HmacSha256Mac; + + static fromXDR(input: string, format: 'hex' | 'base64'): HmacSha256Mac; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ShortHashSeed { + constructor(attributes: { seed: Buffer }); + + seed(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ShortHashSeed; + + static write(value: ShortHashSeed, io: Buffer): void; + + static isValid(value: ShortHashSeed): boolean; + + static toXDR(value: ShortHashSeed): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ShortHashSeed; + + static fromXDR(input: string, format: 'hex' | 'base64'): ShortHashSeed; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SerializedBinaryFuseFilter { + constructor(attributes: { + type: BinaryFuseFilterType; + inputHashSeed: ShortHashSeed; + filterSeed: ShortHashSeed; + segmentLength: number; + segementLengthMask: number; + segmentCount: number; + segmentCountLength: number; + fingerprintLength: number; + fingerprints: Buffer; + }); + + type(value?: BinaryFuseFilterType): BinaryFuseFilterType; + + inputHashSeed(value?: ShortHashSeed): ShortHashSeed; + + filterSeed(value?: ShortHashSeed): ShortHashSeed; + + segmentLength(value?: number): number; + + segementLengthMask(value?: number): number; + + segmentCount(value?: number): number; + + segmentCountLength(value?: number): number; + + fingerprintLength(value?: number): number; + + fingerprints(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SerializedBinaryFuseFilter; + + static write(value: SerializedBinaryFuseFilter, io: Buffer): void; + + static isValid(value: SerializedBinaryFuseFilter): boolean; + + static toXDR(value: SerializedBinaryFuseFilter): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SerializedBinaryFuseFilter; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SerializedBinaryFuseFilter; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class UInt128Parts { + constructor(attributes: { hi: Uint64; lo: Uint64 }); + + hi(value?: Uint64): Uint64; + + lo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): UInt128Parts; + + static write(value: UInt128Parts, io: Buffer): void; + + static isValid(value: UInt128Parts): boolean; + + static toXDR(value: UInt128Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UInt128Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): UInt128Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Int128Parts { + constructor(attributes: { hi: Int64; lo: Uint64 }); + + hi(value?: Int64): Int64; + + lo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Int128Parts; + + static write(value: Int128Parts, io: Buffer): void; + + static isValid(value: Int128Parts): boolean; + + static toXDR(value: Int128Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Int128Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): Int128Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class UInt256Parts { + constructor(attributes: { + hiHi: Uint64; + hiLo: Uint64; + loHi: Uint64; + loLo: Uint64; + }); + + hiHi(value?: Uint64): Uint64; + + hiLo(value?: Uint64): Uint64; + + loHi(value?: Uint64): Uint64; + + loLo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): UInt256Parts; + + static write(value: UInt256Parts, io: Buffer): void; + + static isValid(value: UInt256Parts): boolean; + + static toXDR(value: UInt256Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UInt256Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): UInt256Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Int256Parts { + constructor(attributes: { + hiHi: Int64; + hiLo: Uint64; + loHi: Uint64; + loLo: Uint64; + }); + + hiHi(value?: Int64): Int64; + + hiLo(value?: Uint64): Uint64; + + loHi(value?: Uint64): Uint64; + + loLo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Int256Parts; + + static write(value: Int256Parts, io: Buffer): void; + + static isValid(value: Int256Parts): boolean; + + static toXDR(value: Int256Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Int256Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): Int256Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScNonceKey { + constructor(attributes: { nonce: Int64 }); + + nonce(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScNonceKey; + + static write(value: ScNonceKey, io: Buffer): void; + + static isValid(value: ScNonceKey): boolean; + + static toXDR(value: ScNonceKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScNonceKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScNonceKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScContractInstance { + constructor(attributes: { + executable: ContractExecutable; + storage: null | ScMapEntry[]; + }); + + executable(value?: ContractExecutable): ContractExecutable; + + storage(value?: null | ScMapEntry[]): null | ScMapEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScContractInstance; + + static write(value: ScContractInstance, io: Buffer): void; + + static isValid(value: ScContractInstance): boolean; + + static toXDR(value: ScContractInstance): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScContractInstance; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScContractInstance; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScMapEntry { + constructor(attributes: { key: ScVal; val: ScVal }); + + key(value?: ScVal): ScVal; + + val(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScMapEntry; + + static write(value: ScMapEntry, io: Buffer): void; + + static isValid(value: ScMapEntry): boolean; + + static toXDR(value: ScMapEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScMapEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScMapEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScEnvMetaEntryInterfaceVersion { + constructor(attributes: { protocol: number; preRelease: number }); + + protocol(value?: number): number; + + preRelease(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScEnvMetaEntryInterfaceVersion; + + static write(value: ScEnvMetaEntryInterfaceVersion, io: Buffer): void; + + static isValid(value: ScEnvMetaEntryInterfaceVersion): boolean; + + static toXDR(value: ScEnvMetaEntryInterfaceVersion): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ScEnvMetaEntryInterfaceVersion; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScEnvMetaEntryInterfaceVersion; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScMetaV0 { + constructor(attributes: { key: string | Buffer; val: string | Buffer }); + + key(value?: string | Buffer): string | Buffer; + + val(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScMetaV0; + + static write(value: ScMetaV0, io: Buffer): void; + + static isValid(value: ScMetaV0): boolean; + + static toXDR(value: ScMetaV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScMetaV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScMetaV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeOption { + constructor(attributes: { valueType: ScSpecTypeDef }); + + valueType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeOption; + + static write(value: ScSpecTypeOption, io: Buffer): void; + + static isValid(value: ScSpecTypeOption): boolean; + + static toXDR(value: ScSpecTypeOption): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeOption; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeOption; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeResult { + constructor(attributes: { + okType: ScSpecTypeDef; + errorType: ScSpecTypeDef; + }); + + okType(value?: ScSpecTypeDef): ScSpecTypeDef; + + errorType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeResult; + + static write(value: ScSpecTypeResult, io: Buffer): void; + + static isValid(value: ScSpecTypeResult): boolean; + + static toXDR(value: ScSpecTypeResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeVec { + constructor(attributes: { elementType: ScSpecTypeDef }); + + elementType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeVec; + + static write(value: ScSpecTypeVec, io: Buffer): void; + + static isValid(value: ScSpecTypeVec): boolean; + + static toXDR(value: ScSpecTypeVec): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeVec; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeVec; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeMap { + constructor(attributes: { + keyType: ScSpecTypeDef; + valueType: ScSpecTypeDef; + }); + + keyType(value?: ScSpecTypeDef): ScSpecTypeDef; + + valueType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeMap; + + static write(value: ScSpecTypeMap, io: Buffer): void; + + static isValid(value: ScSpecTypeMap): boolean; + + static toXDR(value: ScSpecTypeMap): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeMap; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeMap; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeTuple { + constructor(attributes: { valueTypes: ScSpecTypeDef[] }); + + valueTypes(value?: ScSpecTypeDef[]): ScSpecTypeDef[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeTuple; + + static write(value: ScSpecTypeTuple, io: Buffer): void; + + static isValid(value: ScSpecTypeTuple): boolean; + + static toXDR(value: ScSpecTypeTuple): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeTuple; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeTuple; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeBytesN { + constructor(attributes: { n: number }); + + n(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeBytesN; + + static write(value: ScSpecTypeBytesN, io: Buffer): void; + + static isValid(value: ScSpecTypeBytesN): boolean; + + static toXDR(value: ScSpecTypeBytesN): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeBytesN; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeBytesN; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeUdt { + constructor(attributes: { name: string | Buffer }); + + name(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeUdt; + + static write(value: ScSpecTypeUdt, io: Buffer): void; + + static isValid(value: ScSpecTypeUdt): boolean; + + static toXDR(value: ScSpecTypeUdt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeUdt; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeUdt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtStructFieldV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + type: ScSpecTypeDef; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + type(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtStructFieldV0; + + static write(value: ScSpecUdtStructFieldV0, io: Buffer): void; + + static isValid(value: ScSpecUdtStructFieldV0): boolean; + + static toXDR(value: ScSpecUdtStructFieldV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtStructFieldV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtStructFieldV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtStructV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + fields: ScSpecUdtStructFieldV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + fields(value?: ScSpecUdtStructFieldV0[]): ScSpecUdtStructFieldV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtStructV0; + + static write(value: ScSpecUdtStructV0, io: Buffer): void; + + static isValid(value: ScSpecUdtStructV0): boolean; + + static toXDR(value: ScSpecUdtStructV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtStructV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecUdtStructV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionCaseVoidV0 { + constructor(attributes: { doc: string | Buffer; name: string | Buffer }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionCaseVoidV0; + + static write(value: ScSpecUdtUnionCaseVoidV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionCaseVoidV0): boolean; + + static toXDR(value: ScSpecUdtUnionCaseVoidV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionCaseVoidV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtUnionCaseVoidV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionCaseTupleV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + type: ScSpecTypeDef[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + type(value?: ScSpecTypeDef[]): ScSpecTypeDef[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionCaseTupleV0; + + static write(value: ScSpecUdtUnionCaseTupleV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionCaseTupleV0): boolean; + + static toXDR(value: ScSpecUdtUnionCaseTupleV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionCaseTupleV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtUnionCaseTupleV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + cases: ScSpecUdtUnionCaseV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + cases(value?: ScSpecUdtUnionCaseV0[]): ScSpecUdtUnionCaseV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionV0; + + static write(value: ScSpecUdtUnionV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionV0): boolean; + + static toXDR(value: ScSpecUdtUnionV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecUdtUnionV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtEnumCaseV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + value: number; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + value(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtEnumCaseV0; + + static write(value: ScSpecUdtEnumCaseV0, io: Buffer): void; + + static isValid(value: ScSpecUdtEnumCaseV0): boolean; + + static toXDR(value: ScSpecUdtEnumCaseV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtEnumCaseV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtEnumCaseV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtEnumV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + cases: ScSpecUdtEnumCaseV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + cases(value?: ScSpecUdtEnumCaseV0[]): ScSpecUdtEnumCaseV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtEnumV0; + + static write(value: ScSpecUdtEnumV0, io: Buffer): void; + + static isValid(value: ScSpecUdtEnumV0): boolean; + + static toXDR(value: ScSpecUdtEnumV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtEnumV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecUdtEnumV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtErrorEnumCaseV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + value: number; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + value(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtErrorEnumCaseV0; + + static write(value: ScSpecUdtErrorEnumCaseV0, io: Buffer): void; + + static isValid(value: ScSpecUdtErrorEnumCaseV0): boolean; + + static toXDR(value: ScSpecUdtErrorEnumCaseV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtErrorEnumCaseV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtErrorEnumCaseV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtErrorEnumV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + cases: ScSpecUdtErrorEnumCaseV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + cases(value?: ScSpecUdtErrorEnumCaseV0[]): ScSpecUdtErrorEnumCaseV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtErrorEnumV0; + + static write(value: ScSpecUdtErrorEnumV0, io: Buffer): void; + + static isValid(value: ScSpecUdtErrorEnumV0): boolean; + + static toXDR(value: ScSpecUdtErrorEnumV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtErrorEnumV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtErrorEnumV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecFunctionInputV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + type: ScSpecTypeDef; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + type(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecFunctionInputV0; + + static write(value: ScSpecFunctionInputV0, io: Buffer): void; + + static isValid(value: ScSpecFunctionInputV0): boolean; + + static toXDR(value: ScSpecFunctionInputV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecFunctionInputV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecFunctionInputV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecFunctionV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + inputs: ScSpecFunctionInputV0[]; + outputs: ScSpecTypeDef[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + inputs(value?: ScSpecFunctionInputV0[]): ScSpecFunctionInputV0[]; + + outputs(value?: ScSpecTypeDef[]): ScSpecTypeDef[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecFunctionV0; + + static write(value: ScSpecFunctionV0, io: Buffer): void; + + static isValid(value: ScSpecFunctionV0): boolean; + + static toXDR(value: ScSpecFunctionV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecFunctionV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecFunctionV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractExecutionLanesV0 { + constructor(attributes: { ledgerMaxTxCount: number }); + + ledgerMaxTxCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractExecutionLanesV0; + + static write( + value: ConfigSettingContractExecutionLanesV0, + io: Buffer, + ): void; + + static isValid(value: ConfigSettingContractExecutionLanesV0): boolean; + + static toXDR(value: ConfigSettingContractExecutionLanesV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractExecutionLanesV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractExecutionLanesV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractComputeV0 { + constructor(attributes: { + ledgerMaxInstructions: Int64; + txMaxInstructions: Int64; + feeRatePerInstructionsIncrement: Int64; + txMemoryLimit: number; + }); + + ledgerMaxInstructions(value?: Int64): Int64; + + txMaxInstructions(value?: Int64): Int64; + + feeRatePerInstructionsIncrement(value?: Int64): Int64; + + txMemoryLimit(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractComputeV0; + + static write(value: ConfigSettingContractComputeV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractComputeV0): boolean; + + static toXDR(value: ConfigSettingContractComputeV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractComputeV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractComputeV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractLedgerCostV0 { + constructor(attributes: { + ledgerMaxReadLedgerEntries: number; + ledgerMaxReadBytes: number; + ledgerMaxWriteLedgerEntries: number; + ledgerMaxWriteBytes: number; + txMaxReadLedgerEntries: number; + txMaxReadBytes: number; + txMaxWriteLedgerEntries: number; + txMaxWriteBytes: number; + feeReadLedgerEntry: Int64; + feeWriteLedgerEntry: Int64; + feeRead1Kb: Int64; + bucketListTargetSizeBytes: Int64; + writeFee1KbBucketListLow: Int64; + writeFee1KbBucketListHigh: Int64; + bucketListWriteFeeGrowthFactor: number; + }); + + ledgerMaxReadLedgerEntries(value?: number): number; + + ledgerMaxReadBytes(value?: number): number; + + ledgerMaxWriteLedgerEntries(value?: number): number; + + ledgerMaxWriteBytes(value?: number): number; + + txMaxReadLedgerEntries(value?: number): number; + + txMaxReadBytes(value?: number): number; + + txMaxWriteLedgerEntries(value?: number): number; + + txMaxWriteBytes(value?: number): number; + + feeReadLedgerEntry(value?: Int64): Int64; + + feeWriteLedgerEntry(value?: Int64): Int64; + + feeRead1Kb(value?: Int64): Int64; + + bucketListTargetSizeBytes(value?: Int64): Int64; + + writeFee1KbBucketListLow(value?: Int64): Int64; + + writeFee1KbBucketListHigh(value?: Int64): Int64; + + bucketListWriteFeeGrowthFactor(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractLedgerCostV0; + + static write(value: ConfigSettingContractLedgerCostV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractLedgerCostV0): boolean; + + static toXDR(value: ConfigSettingContractLedgerCostV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractLedgerCostV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractLedgerCostV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractHistoricalDataV0 { + constructor(attributes: { feeHistorical1Kb: Int64 }); + + feeHistorical1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractHistoricalDataV0; + + static write( + value: ConfigSettingContractHistoricalDataV0, + io: Buffer, + ): void; + + static isValid(value: ConfigSettingContractHistoricalDataV0): boolean; + + static toXDR(value: ConfigSettingContractHistoricalDataV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractHistoricalDataV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractHistoricalDataV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractEventsV0 { + constructor(attributes: { + txMaxContractEventsSizeBytes: number; + feeContractEvents1Kb: Int64; + }); + + txMaxContractEventsSizeBytes(value?: number): number; + + feeContractEvents1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractEventsV0; + + static write(value: ConfigSettingContractEventsV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractEventsV0): boolean; + + static toXDR(value: ConfigSettingContractEventsV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractEventsV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractEventsV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractBandwidthV0 { + constructor(attributes: { + ledgerMaxTxsSizeBytes: number; + txMaxSizeBytes: number; + feeTxSize1Kb: Int64; + }); + + ledgerMaxTxsSizeBytes(value?: number): number; + + txMaxSizeBytes(value?: number): number; + + feeTxSize1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractBandwidthV0; + + static write(value: ConfigSettingContractBandwidthV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractBandwidthV0): boolean; + + static toXDR(value: ConfigSettingContractBandwidthV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractBandwidthV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractBandwidthV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCostParamEntry { + constructor(attributes: { + ext: ExtensionPoint; + constTerm: Int64; + linearTerm: Int64; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + constTerm(value?: Int64): Int64; + + linearTerm(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCostParamEntry; + + static write(value: ContractCostParamEntry, io: Buffer): void; + + static isValid(value: ContractCostParamEntry): boolean; + + static toXDR(value: ContractCostParamEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCostParamEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCostParamEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StateArchivalSettings { + constructor(attributes: { + maxEntryTtl: number; + minTemporaryTtl: number; + minPersistentTtl: number; + persistentRentRateDenominator: Int64; + tempRentRateDenominator: Int64; + maxEntriesToArchive: number; + bucketListSizeWindowSampleSize: number; + bucketListWindowSamplePeriod: number; + evictionScanSize: number; + startingEvictionScanLevel: number; + }); + + maxEntryTtl(value?: number): number; + + minTemporaryTtl(value?: number): number; + + minPersistentTtl(value?: number): number; + + persistentRentRateDenominator(value?: Int64): Int64; + + tempRentRateDenominator(value?: Int64): Int64; + + maxEntriesToArchive(value?: number): number; + + bucketListSizeWindowSampleSize(value?: number): number; + + bucketListWindowSamplePeriod(value?: number): number; + + evictionScanSize(value?: number): number; + + startingEvictionScanLevel(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StateArchivalSettings; + + static write(value: StateArchivalSettings, io: Buffer): void; + + static isValid(value: StateArchivalSettings): boolean; + + static toXDR(value: StateArchivalSettings): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StateArchivalSettings; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): StateArchivalSettings; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class EvictionIterator { + constructor(attributes: { + bucketListLevel: number; + isCurrBucket: boolean; + bucketFileOffset: Uint64; + }); + + bucketListLevel(value?: number): number; + + isCurrBucket(value?: boolean): boolean; + + bucketFileOffset(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): EvictionIterator; + + static write(value: EvictionIterator, io: Buffer): void; + + static isValid(value: EvictionIterator): boolean; + + static toXDR(value: EvictionIterator): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): EvictionIterator; + + static fromXDR(input: string, format: 'hex' | 'base64'): EvictionIterator; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementPledges { + switch(): ScpStatementType; + + prepare(value?: ScpStatementPrepare): ScpStatementPrepare; + + confirm(value?: ScpStatementConfirm): ScpStatementConfirm; + + externalize(value?: ScpStatementExternalize): ScpStatementExternalize; + + nominate(value?: ScpNomination): ScpNomination; + + static scpStPrepare(value: ScpStatementPrepare): ScpStatementPledges; + + static scpStConfirm(value: ScpStatementConfirm): ScpStatementPledges; + + static scpStExternalize( + value: ScpStatementExternalize, + ): ScpStatementPledges; + + static scpStNominate(value: ScpNomination): ScpStatementPledges; + + value(): + | ScpStatementPrepare + | ScpStatementConfirm + | ScpStatementExternalize + | ScpNomination; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementPledges; + + static write(value: ScpStatementPledges, io: Buffer): void; + + static isValid(value: ScpStatementPledges): boolean; + + static toXDR(value: ScpStatementPledges): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementPledges; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementPledges; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AssetCode { + switch(): AssetType; + + assetCode4(value?: Buffer): Buffer; + + assetCode12(value?: Buffer): Buffer; + + static assetTypeCreditAlphanum4(value: Buffer): AssetCode; + + static assetTypeCreditAlphanum12(value: Buffer): AssetCode; + + value(): Buffer | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AssetCode; + + static write(value: AssetCode, io: Buffer): void; + + static isValid(value: AssetCode): boolean; + + static toXDR(value: AssetCode): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AssetCode; + + static fromXDR(input: string, format: 'hex' | 'base64'): AssetCode; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Asset { + switch(): AssetType; + + alphaNum4(value?: AlphaNum4): AlphaNum4; + + alphaNum12(value?: AlphaNum12): AlphaNum12; + + static assetTypeNative(): Asset; + + static assetTypeCreditAlphanum4(value: AlphaNum4): Asset; + + static assetTypeCreditAlphanum12(value: AlphaNum12): Asset; + + value(): AlphaNum4 | AlphaNum12 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Asset; + + static write(value: Asset, io: Buffer): void; + + static isValid(value: Asset): boolean; + + static toXDR(value: Asset): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Asset; + + static fromXDR(input: string, format: 'hex' | 'base64'): Asset; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV2Ext { + switch(): number; + + v3(value?: AccountEntryExtensionV3): AccountEntryExtensionV3; + + static 0(): AccountEntryExtensionV2Ext; + + static 3(value: AccountEntryExtensionV3): AccountEntryExtensionV2Ext; + + value(): AccountEntryExtensionV3 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV2Ext; + + static write(value: AccountEntryExtensionV2Ext, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV2Ext): boolean; + + static toXDR(value: AccountEntryExtensionV2Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV2Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV2Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV1Ext { + switch(): number; + + v2(value?: AccountEntryExtensionV2): AccountEntryExtensionV2; + + static 0(): AccountEntryExtensionV1Ext; + + static 2(value: AccountEntryExtensionV2): AccountEntryExtensionV1Ext; + + value(): AccountEntryExtensionV2 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV1Ext; + + static write(value: AccountEntryExtensionV1Ext, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV1Ext): boolean; + + static toXDR(value: AccountEntryExtensionV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExt { + switch(): number; + + v1(value?: AccountEntryExtensionV1): AccountEntryExtensionV1; + + static 0(): AccountEntryExt; + + static 1(value: AccountEntryExtensionV1): AccountEntryExt; + + value(): AccountEntryExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExt; + + static write(value: AccountEntryExt, io: Buffer): void; + + static isValid(value: AccountEntryExt): boolean; + + static toXDR(value: AccountEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): AccountEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineAsset { + switch(): AssetType; + + alphaNum4(value?: AlphaNum4): AlphaNum4; + + alphaNum12(value?: AlphaNum12): AlphaNum12; + + liquidityPoolId(value?: PoolId): PoolId; + + static assetTypeNative(): TrustLineAsset; + + static assetTypeCreditAlphanum4(value: AlphaNum4): TrustLineAsset; + + static assetTypeCreditAlphanum12(value: AlphaNum12): TrustLineAsset; + + static assetTypePoolShare(value: PoolId): TrustLineAsset; + + value(): AlphaNum4 | AlphaNum12 | PoolId | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineAsset; + + static write(value: TrustLineAsset, io: Buffer): void; + + static isValid(value: TrustLineAsset): boolean; + + static toXDR(value: TrustLineAsset): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineAsset; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineAsset; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryExtensionV2Ext { + switch(): number; + + static 0(): TrustLineEntryExtensionV2Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryExtensionV2Ext; + + static write(value: TrustLineEntryExtensionV2Ext, io: Buffer): void; + + static isValid(value: TrustLineEntryExtensionV2Ext): boolean; + + static toXDR(value: TrustLineEntryExtensionV2Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryExtensionV2Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TrustLineEntryExtensionV2Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryV1Ext { + switch(): number; + + v2(value?: TrustLineEntryExtensionV2): TrustLineEntryExtensionV2; + + static 0(): TrustLineEntryV1Ext; + + static 2(value: TrustLineEntryExtensionV2): TrustLineEntryV1Ext; + + value(): TrustLineEntryExtensionV2 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryV1Ext; + + static write(value: TrustLineEntryV1Ext, io: Buffer): void; + + static isValid(value: TrustLineEntryV1Ext): boolean; + + static toXDR(value: TrustLineEntryV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TrustLineEntryV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryExt { + switch(): number; + + v1(value?: TrustLineEntryV1): TrustLineEntryV1; + + static 0(): TrustLineEntryExt; + + static 1(value: TrustLineEntryV1): TrustLineEntryExt; + + value(): TrustLineEntryV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryExt; + + static write(value: TrustLineEntryExt, io: Buffer): void; + + static isValid(value: TrustLineEntryExt): boolean; + + static toXDR(value: TrustLineEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OfferEntryExt { + switch(): number; + + static 0(): OfferEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OfferEntryExt; + + static write(value: OfferEntryExt, io: Buffer): void; + + static isValid(value: OfferEntryExt): boolean; + + static toXDR(value: OfferEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OfferEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): OfferEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DataEntryExt { + switch(): number; + + static 0(): DataEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DataEntryExt; + + static write(value: DataEntryExt, io: Buffer): void; + + static isValid(value: DataEntryExt): boolean; + + static toXDR(value: DataEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DataEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): DataEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimPredicate { + switch(): ClaimPredicateType; + + andPredicates(value?: ClaimPredicate[]): ClaimPredicate[]; + + orPredicates(value?: ClaimPredicate[]): ClaimPredicate[]; + + notPredicate(value?: null | ClaimPredicate): null | ClaimPredicate; + + absBefore(value?: Int64): Int64; + + relBefore(value?: Int64): Int64; + + static claimPredicateUnconditional(): ClaimPredicate; + + static claimPredicateAnd(value: ClaimPredicate[]): ClaimPredicate; + + static claimPredicateOr(value: ClaimPredicate[]): ClaimPredicate; + + static claimPredicateNot(value: null | ClaimPredicate): ClaimPredicate; + + static claimPredicateBeforeAbsoluteTime(value: Int64): ClaimPredicate; + + static claimPredicateBeforeRelativeTime(value: Int64): ClaimPredicate; + + value(): + | ClaimPredicate[] + | ClaimPredicate[] + | null + | ClaimPredicate + | Int64 + | Int64 + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimPredicate; + + static write(value: ClaimPredicate, io: Buffer): void; + + static isValid(value: ClaimPredicate): boolean; + + static toXDR(value: ClaimPredicate): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimPredicate; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimPredicate; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Claimant { + switch(): ClaimantType; + + v0(value?: ClaimantV0): ClaimantV0; + + static claimantTypeV0(value: ClaimantV0): Claimant; + + value(): ClaimantV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Claimant; + + static write(value: Claimant, io: Buffer): void; + + static isValid(value: Claimant): boolean; + + static toXDR(value: Claimant): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Claimant; + + static fromXDR(input: string, format: 'hex' | 'base64'): Claimant; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceId { + switch(): ClaimableBalanceIdType; + + v0(value?: Buffer): Buffer; + + static claimableBalanceIdTypeV0(value: Buffer): ClaimableBalanceId; + + value(): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceId; + + static write(value: ClaimableBalanceId, io: Buffer): void; + + static isValid(value: ClaimableBalanceId): boolean; + + static toXDR(value: ClaimableBalanceId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimableBalanceId; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimableBalanceId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntryExtensionV1Ext { + switch(): number; + + static 0(): ClaimableBalanceEntryExtensionV1Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntryExtensionV1Ext; + + static write(value: ClaimableBalanceEntryExtensionV1Ext, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntryExtensionV1Ext): boolean; + + static toXDR(value: ClaimableBalanceEntryExtensionV1Ext): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ClaimableBalanceEntryExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntryExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntryExt { + switch(): number; + + v1( + value?: ClaimableBalanceEntryExtensionV1, + ): ClaimableBalanceEntryExtensionV1; + + static 0(): ClaimableBalanceEntryExt; + + static 1(value: ClaimableBalanceEntryExtensionV1): ClaimableBalanceEntryExt; + + value(): ClaimableBalanceEntryExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntryExt; + + static write(value: ClaimableBalanceEntryExt, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntryExt): boolean; + + static toXDR(value: ClaimableBalanceEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimableBalanceEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolEntryBody { + switch(): LiquidityPoolType; + + constantProduct( + value?: LiquidityPoolEntryConstantProduct, + ): LiquidityPoolEntryConstantProduct; + + static liquidityPoolConstantProduct( + value: LiquidityPoolEntryConstantProduct, + ): LiquidityPoolEntryBody; + + value(): LiquidityPoolEntryConstantProduct; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolEntryBody; + + static write(value: LiquidityPoolEntryBody, io: Buffer): void; + + static isValid(value: LiquidityPoolEntryBody): boolean; + + static toXDR(value: LiquidityPoolEntryBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolEntryBody; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolEntryBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeEntryExt { + switch(): number; + + v1(value?: ContractCodeEntryV1): ContractCodeEntryV1; + + static 0(): ContractCodeEntryExt; + + static 1(value: ContractCodeEntryV1): ContractCodeEntryExt; + + value(): ContractCodeEntryV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeEntryExt; + + static write(value: ContractCodeEntryExt, io: Buffer): void; + + static isValid(value: ContractCodeEntryExt): boolean; + + static toXDR(value: ContractCodeEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCodeEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryExtensionV1Ext { + switch(): number; + + static 0(): LedgerEntryExtensionV1Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryExtensionV1Ext; + + static write(value: LedgerEntryExtensionV1Ext, io: Buffer): void; + + static isValid(value: LedgerEntryExtensionV1Ext): boolean; + + static toXDR(value: LedgerEntryExtensionV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerEntryExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryData { + switch(): LedgerEntryType; + + account(value?: AccountEntry): AccountEntry; + + trustLine(value?: TrustLineEntry): TrustLineEntry; + + offer(value?: OfferEntry): OfferEntry; + + data(value?: DataEntry): DataEntry; + + claimableBalance(value?: ClaimableBalanceEntry): ClaimableBalanceEntry; + + liquidityPool(value?: LiquidityPoolEntry): LiquidityPoolEntry; + + contractData(value?: ContractDataEntry): ContractDataEntry; + + contractCode(value?: ContractCodeEntry): ContractCodeEntry; + + configSetting(value?: ConfigSettingEntry): ConfigSettingEntry; + + ttl(value?: TtlEntry): TtlEntry; + + static account(value: AccountEntry): LedgerEntryData; + + static trustline(value: TrustLineEntry): LedgerEntryData; + + static offer(value: OfferEntry): LedgerEntryData; + + static data(value: DataEntry): LedgerEntryData; + + static claimableBalance(value: ClaimableBalanceEntry): LedgerEntryData; + + static liquidityPool(value: LiquidityPoolEntry): LedgerEntryData; + + static contractData(value: ContractDataEntry): LedgerEntryData; + + static contractCode(value: ContractCodeEntry): LedgerEntryData; + + static configSetting(value: ConfigSettingEntry): LedgerEntryData; + + static ttl(value: TtlEntry): LedgerEntryData; + + value(): + | AccountEntry + | TrustLineEntry + | OfferEntry + | DataEntry + | ClaimableBalanceEntry + | LiquidityPoolEntry + | ContractDataEntry + | ContractCodeEntry + | ConfigSettingEntry + | TtlEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryData; + + static write(value: LedgerEntryData, io: Buffer): void; + + static isValid(value: LedgerEntryData): boolean; + + static toXDR(value: LedgerEntryData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryData; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntryData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryExt { + switch(): number; + + v1(value?: LedgerEntryExtensionV1): LedgerEntryExtensionV1; + + static 0(): LedgerEntryExt; + + static 1(value: LedgerEntryExtensionV1): LedgerEntryExt; + + value(): LedgerEntryExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryExt; + + static write(value: LedgerEntryExt, io: Buffer): void; + + static isValid(value: LedgerEntryExt): boolean; + + static toXDR(value: LedgerEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKey { + switch(): LedgerEntryType; + + account(value?: LedgerKeyAccount): LedgerKeyAccount; + + trustLine(value?: LedgerKeyTrustLine): LedgerKeyTrustLine; + + offer(value?: LedgerKeyOffer): LedgerKeyOffer; + + data(value?: LedgerKeyData): LedgerKeyData; + + claimableBalance( + value?: LedgerKeyClaimableBalance, + ): LedgerKeyClaimableBalance; + + liquidityPool(value?: LedgerKeyLiquidityPool): LedgerKeyLiquidityPool; + + contractData(value?: LedgerKeyContractData): LedgerKeyContractData; + + contractCode(value?: LedgerKeyContractCode): LedgerKeyContractCode; + + configSetting(value?: LedgerKeyConfigSetting): LedgerKeyConfigSetting; + + ttl(value?: LedgerKeyTtl): LedgerKeyTtl; + + static account(value: LedgerKeyAccount): LedgerKey; + + static trustline(value: LedgerKeyTrustLine): LedgerKey; + + static offer(value: LedgerKeyOffer): LedgerKey; + + static data(value: LedgerKeyData): LedgerKey; + + static claimableBalance(value: LedgerKeyClaimableBalance): LedgerKey; + + static liquidityPool(value: LedgerKeyLiquidityPool): LedgerKey; + + static contractData(value: LedgerKeyContractData): LedgerKey; + + static contractCode(value: LedgerKeyContractCode): LedgerKey; + + static configSetting(value: LedgerKeyConfigSetting): LedgerKey; + + static ttl(value: LedgerKeyTtl): LedgerKey; + + value(): + | LedgerKeyAccount + | LedgerKeyTrustLine + | LedgerKeyOffer + | LedgerKeyData + | LedgerKeyClaimableBalance + | LedgerKeyLiquidityPool + | LedgerKeyContractData + | LedgerKeyContractCode + | LedgerKeyConfigSetting + | LedgerKeyTtl; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKey; + + static write(value: LedgerKey, io: Buffer): void; + + static isValid(value: LedgerKey): boolean; + + static toXDR(value: LedgerKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BucketMetadataExt { + switch(): number; + + bucketListType(value?: BucketListType): BucketListType; + + static 0(): BucketMetadataExt; + + static 1(value: BucketListType): BucketMetadataExt; + + value(): BucketListType | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BucketMetadataExt; + + static write(value: BucketMetadataExt, io: Buffer): void; + + static isValid(value: BucketMetadataExt): boolean; + + static toXDR(value: BucketMetadataExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BucketMetadataExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): BucketMetadataExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BucketEntry { + switch(): BucketEntryType; + + liveEntry(value?: LedgerEntry): LedgerEntry; + + deadEntry(value?: LedgerKey): LedgerKey; + + metaEntry(value?: BucketMetadata): BucketMetadata; + + static liveentry(value: LedgerEntry): BucketEntry; + + static initentry(value: LedgerEntry): BucketEntry; + + static deadentry(value: LedgerKey): BucketEntry; + + static metaentry(value: BucketMetadata): BucketEntry; + + value(): LedgerEntry | LedgerKey | BucketMetadata; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BucketEntry; + + static write(value: BucketEntry, io: Buffer): void; + + static isValid(value: BucketEntry): boolean; + + static toXDR(value: BucketEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BucketEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): BucketEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HotArchiveBucketEntry { + switch(): HotArchiveBucketEntryType; + + archivedEntry(value?: LedgerEntry): LedgerEntry; + + key(value?: LedgerKey): LedgerKey; + + metaEntry(value?: BucketMetadata): BucketMetadata; + + static hotArchiveArchived(value: LedgerEntry): HotArchiveBucketEntry; + + static hotArchiveLive(value: LedgerKey): HotArchiveBucketEntry; + + static hotArchiveDeleted(value: LedgerKey): HotArchiveBucketEntry; + + static hotArchiveMetaentry(value: BucketMetadata): HotArchiveBucketEntry; + + value(): LedgerEntry | LedgerKey | BucketMetadata; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HotArchiveBucketEntry; + + static write(value: HotArchiveBucketEntry, io: Buffer): void; + + static isValid(value: HotArchiveBucketEntry): boolean; + + static toXDR(value: HotArchiveBucketEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HotArchiveBucketEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HotArchiveBucketEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveBucketEntry { + switch(): ColdArchiveBucketEntryType; + + metaEntry(value?: BucketMetadata): BucketMetadata; + + archivedLeaf(value?: ColdArchiveArchivedLeaf): ColdArchiveArchivedLeaf; + + deletedLeaf(value?: ColdArchiveDeletedLeaf): ColdArchiveDeletedLeaf; + + boundaryLeaf(value?: ColdArchiveBoundaryLeaf): ColdArchiveBoundaryLeaf; + + hashEntry(value?: ColdArchiveHashEntry): ColdArchiveHashEntry; + + static coldArchiveMetaentry(value: BucketMetadata): ColdArchiveBucketEntry; + + static coldArchiveArchivedLeaf( + value: ColdArchiveArchivedLeaf, + ): ColdArchiveBucketEntry; + + static coldArchiveDeletedLeaf( + value: ColdArchiveDeletedLeaf, + ): ColdArchiveBucketEntry; + + static coldArchiveBoundaryLeaf( + value: ColdArchiveBoundaryLeaf, + ): ColdArchiveBucketEntry; + + static coldArchiveHash(value: ColdArchiveHashEntry): ColdArchiveBucketEntry; + + value(): + | BucketMetadata + | ColdArchiveArchivedLeaf + | ColdArchiveDeletedLeaf + | ColdArchiveBoundaryLeaf + | ColdArchiveHashEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveBucketEntry; + + static write(value: ColdArchiveBucketEntry, io: Buffer): void; + + static isValid(value: ColdArchiveBucketEntry): boolean; + + static toXDR(value: ColdArchiveBucketEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveBucketEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveBucketEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StellarValueExt { + switch(): StellarValueType; + + lcValueSignature( + value?: LedgerCloseValueSignature, + ): LedgerCloseValueSignature; + + static stellarValueBasic(): StellarValueExt; + + static stellarValueSigned( + value: LedgerCloseValueSignature, + ): StellarValueExt; + + value(): LedgerCloseValueSignature | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StellarValueExt; + + static write(value: StellarValueExt, io: Buffer): void; + + static isValid(value: StellarValueExt): boolean; + + static toXDR(value: StellarValueExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StellarValueExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): StellarValueExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderExtensionV1Ext { + switch(): number; + + static 0(): LedgerHeaderExtensionV1Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderExtensionV1Ext; + + static write(value: LedgerHeaderExtensionV1Ext, io: Buffer): void; + + static isValid(value: LedgerHeaderExtensionV1Ext): boolean; + + static toXDR(value: LedgerHeaderExtensionV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderExt { + switch(): number; + + v1(value?: LedgerHeaderExtensionV1): LedgerHeaderExtensionV1; + + static 0(): LedgerHeaderExt; + + static 1(value: LedgerHeaderExtensionV1): LedgerHeaderExt; + + value(): LedgerHeaderExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderExt; + + static write(value: LedgerHeaderExt, io: Buffer): void; + + static isValid(value: LedgerHeaderExt): boolean; + + static toXDR(value: LedgerHeaderExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerHeaderExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerUpgrade { + switch(): LedgerUpgradeType; + + newLedgerVersion(value?: number): number; + + newBaseFee(value?: number): number; + + newMaxTxSetSize(value?: number): number; + + newBaseReserve(value?: number): number; + + newFlags(value?: number): number; + + newConfig(value?: ConfigUpgradeSetKey): ConfigUpgradeSetKey; + + newMaxSorobanTxSetSize(value?: number): number; + + static ledgerUpgradeVersion(value: number): LedgerUpgrade; + + static ledgerUpgradeBaseFee(value: number): LedgerUpgrade; + + static ledgerUpgradeMaxTxSetSize(value: number): LedgerUpgrade; + + static ledgerUpgradeBaseReserve(value: number): LedgerUpgrade; + + static ledgerUpgradeFlags(value: number): LedgerUpgrade; + + static ledgerUpgradeConfig(value: ConfigUpgradeSetKey): LedgerUpgrade; + + static ledgerUpgradeMaxSorobanTxSetSize(value: number): LedgerUpgrade; + + value(): + | number + | number + | number + | number + | number + | ConfigUpgradeSetKey + | number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerUpgrade; + + static write(value: LedgerUpgrade, io: Buffer): void; + + static isValid(value: LedgerUpgrade): boolean; + + static toXDR(value: LedgerUpgrade): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerUpgrade; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerUpgrade; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TxSetComponent { + switch(): TxSetComponentType; + + txsMaybeDiscountedFee( + value?: TxSetComponentTxsMaybeDiscountedFee, + ): TxSetComponentTxsMaybeDiscountedFee; + + static txsetCompTxsMaybeDiscountedFee( + value: TxSetComponentTxsMaybeDiscountedFee, + ): TxSetComponent; + + value(): TxSetComponentTxsMaybeDiscountedFee; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TxSetComponent; + + static write(value: TxSetComponent, io: Buffer): void; + + static isValid(value: TxSetComponent): boolean; + + static toXDR(value: TxSetComponent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TxSetComponent; + + static fromXDR(input: string, format: 'hex' | 'base64'): TxSetComponent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionPhase { + switch(): number; + + v0Components(value?: TxSetComponent[]): TxSetComponent[]; + + static 0(value: TxSetComponent[]): TransactionPhase; + + value(): TxSetComponent[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionPhase; + + static write(value: TransactionPhase, io: Buffer): void; + + static isValid(value: TransactionPhase): boolean; + + static toXDR(value: TransactionPhase): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionPhase; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionPhase; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class GeneralizedTransactionSet { + switch(): number; + + v1TxSet(value?: TransactionSetV1): TransactionSetV1; + + static 1(value: TransactionSetV1): GeneralizedTransactionSet; + + value(): TransactionSetV1; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): GeneralizedTransactionSet; + + static write(value: GeneralizedTransactionSet, io: Buffer): void; + + static isValid(value: GeneralizedTransactionSet): boolean; + + static toXDR(value: GeneralizedTransactionSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): GeneralizedTransactionSet; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): GeneralizedTransactionSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryEntryExt { + switch(): number; + + generalizedTxSet( + value?: GeneralizedTransactionSet, + ): GeneralizedTransactionSet; + + static 0(): TransactionHistoryEntryExt; + + static 1(value: GeneralizedTransactionSet): TransactionHistoryEntryExt; + + value(): GeneralizedTransactionSet | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryEntryExt; + + static write(value: TransactionHistoryEntryExt, io: Buffer): void; + + static isValid(value: TransactionHistoryEntryExt): boolean; + + static toXDR(value: TransactionHistoryEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionHistoryEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryResultEntryExt { + switch(): number; + + static 0(): TransactionHistoryResultEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryResultEntryExt; + + static write(value: TransactionHistoryResultEntryExt, io: Buffer): void; + + static isValid(value: TransactionHistoryResultEntryExt): boolean; + + static toXDR(value: TransactionHistoryResultEntryExt): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TransactionHistoryResultEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryResultEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderHistoryEntryExt { + switch(): number; + + static 0(): LedgerHeaderHistoryEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderHistoryEntryExt; + + static write(value: LedgerHeaderHistoryEntryExt, io: Buffer): void; + + static isValid(value: LedgerHeaderHistoryEntryExt): boolean; + + static toXDR(value: LedgerHeaderHistoryEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderHistoryEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderHistoryEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpHistoryEntry { + switch(): number; + + v0(value?: ScpHistoryEntryV0): ScpHistoryEntryV0; + + static 0(value: ScpHistoryEntryV0): ScpHistoryEntry; + + value(): ScpHistoryEntryV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpHistoryEntry; + + static write(value: ScpHistoryEntry, io: Buffer): void; + + static isValid(value: ScpHistoryEntry): boolean; + + static toXDR(value: ScpHistoryEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpHistoryEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpHistoryEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryChange { + switch(): LedgerEntryChangeType; + + created(value?: LedgerEntry): LedgerEntry; + + updated(value?: LedgerEntry): LedgerEntry; + + removed(value?: LedgerKey): LedgerKey; + + state(value?: LedgerEntry): LedgerEntry; + + static ledgerEntryCreated(value: LedgerEntry): LedgerEntryChange; + + static ledgerEntryUpdated(value: LedgerEntry): LedgerEntryChange; + + static ledgerEntryRemoved(value: LedgerKey): LedgerEntryChange; + + static ledgerEntryState(value: LedgerEntry): LedgerEntryChange; + + value(): LedgerEntry | LedgerEntry | LedgerKey | LedgerEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryChange; + + static write(value: LedgerEntryChange, io: Buffer): void; + + static isValid(value: LedgerEntryChange): boolean; + + static toXDR(value: LedgerEntryChange): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryChange; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntryChange; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractEventBody { + switch(): number; + + v0(value?: ContractEventV0): ContractEventV0; + + static 0(value: ContractEventV0): ContractEventBody; + + value(): ContractEventV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractEventBody; + + static write(value: ContractEventBody, io: Buffer): void; + + static isValid(value: ContractEventBody): boolean; + + static toXDR(value: ContractEventBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractEventBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractEventBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionMetaExt { + switch(): number; + + v1(value?: SorobanTransactionMetaExtV1): SorobanTransactionMetaExtV1; + + static 0(): SorobanTransactionMetaExt; + + static 1(value: SorobanTransactionMetaExtV1): SorobanTransactionMetaExt; + + value(): SorobanTransactionMetaExtV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionMetaExt; + + static write(value: SorobanTransactionMetaExt, io: Buffer): void; + + static isValid(value: SorobanTransactionMetaExt): boolean; + + static toXDR(value: SorobanTransactionMetaExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionMetaExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionMetaExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMeta { + switch(): number; + + operations(value?: OperationMeta[]): OperationMeta[]; + + v1(value?: TransactionMetaV1): TransactionMetaV1; + + v2(value?: TransactionMetaV2): TransactionMetaV2; + + v3(value?: TransactionMetaV3): TransactionMetaV3; + + static 0(value: OperationMeta[]): TransactionMeta; + + static 1(value: TransactionMetaV1): TransactionMeta; + + static 2(value: TransactionMetaV2): TransactionMeta; + + static 3(value: TransactionMetaV3): TransactionMeta; + + value(): + | OperationMeta[] + | TransactionMetaV1 + | TransactionMetaV2 + | TransactionMetaV3; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMeta; + + static write(value: TransactionMeta, io: Buffer): void; + + static isValid(value: TransactionMeta): boolean; + + static toXDR(value: TransactionMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaExt { + switch(): number; + + v1(value?: LedgerCloseMetaExtV1): LedgerCloseMetaExtV1; + + static 0(): LedgerCloseMetaExt; + + static 1(value: LedgerCloseMetaExtV1): LedgerCloseMetaExt; + + value(): LedgerCloseMetaExtV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaExt; + + static write(value: LedgerCloseMetaExt, io: Buffer): void; + + static isValid(value: LedgerCloseMetaExt): boolean; + + static toXDR(value: LedgerCloseMetaExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMetaExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMeta { + switch(): number; + + v0(value?: LedgerCloseMetaV0): LedgerCloseMetaV0; + + v1(value?: LedgerCloseMetaV1): LedgerCloseMetaV1; + + static 0(value: LedgerCloseMetaV0): LedgerCloseMeta; + + static 1(value: LedgerCloseMetaV1): LedgerCloseMeta; + + value(): LedgerCloseMetaV0 | LedgerCloseMetaV1; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMeta; + + static write(value: LedgerCloseMeta, io: Buffer): void; + + static isValid(value: LedgerCloseMeta): boolean; + + static toXDR(value: LedgerCloseMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PeerAddressIp { + switch(): IpAddrType; + + ipv4(value?: Buffer): Buffer; + + ipv6(value?: Buffer): Buffer; + + static iPv4(value: Buffer): PeerAddressIp; + + static iPv6(value: Buffer): PeerAddressIp; + + value(): Buffer | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PeerAddressIp; + + static write(value: PeerAddressIp, io: Buffer): void; + + static isValid(value: PeerAddressIp): boolean; + + static toXDR(value: PeerAddressIp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PeerAddressIp; + + static fromXDR(input: string, format: 'hex' | 'base64'): PeerAddressIp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SurveyResponseBody { + switch(): SurveyMessageResponseType; + + topologyResponseBodyV0( + value?: TopologyResponseBodyV0, + ): TopologyResponseBodyV0; + + topologyResponseBodyV1( + value?: TopologyResponseBodyV1, + ): TopologyResponseBodyV1; + + topologyResponseBodyV2( + value?: TopologyResponseBodyV2, + ): TopologyResponseBodyV2; + + static surveyTopologyResponseV0( + value: TopologyResponseBodyV0, + ): SurveyResponseBody; + + static surveyTopologyResponseV1( + value: TopologyResponseBodyV1, + ): SurveyResponseBody; + + static surveyTopologyResponseV2( + value: TopologyResponseBodyV2, + ): SurveyResponseBody; + + value(): + | TopologyResponseBodyV0 + | TopologyResponseBodyV1 + | TopologyResponseBodyV2; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SurveyResponseBody; + + static write(value: SurveyResponseBody, io: Buffer): void; + + static isValid(value: SurveyResponseBody): boolean; + + static toXDR(value: SurveyResponseBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SurveyResponseBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): SurveyResponseBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StellarMessage { + switch(): MessageType; + + error(value?: Error): Error; + + hello(value?: Hello): Hello; + + auth(value?: Auth): Auth; + + dontHave(value?: DontHave): DontHave; + + peers(value?: PeerAddress[]): PeerAddress[]; + + txSetHash(value?: Buffer): Buffer; + + txSet(value?: TransactionSet): TransactionSet; + + generalizedTxSet( + value?: GeneralizedTransactionSet, + ): GeneralizedTransactionSet; + + transaction(value?: TransactionEnvelope): TransactionEnvelope; + + signedSurveyRequestMessage( + value?: SignedSurveyRequestMessage, + ): SignedSurveyRequestMessage; + + signedSurveyResponseMessage( + value?: SignedSurveyResponseMessage, + ): SignedSurveyResponseMessage; + + signedTimeSlicedSurveyRequestMessage( + value?: SignedTimeSlicedSurveyRequestMessage, + ): SignedTimeSlicedSurveyRequestMessage; + + signedTimeSlicedSurveyResponseMessage( + value?: SignedTimeSlicedSurveyResponseMessage, + ): SignedTimeSlicedSurveyResponseMessage; + + signedTimeSlicedSurveyStartCollectingMessage( + value?: SignedTimeSlicedSurveyStartCollectingMessage, + ): SignedTimeSlicedSurveyStartCollectingMessage; + + signedTimeSlicedSurveyStopCollectingMessage( + value?: SignedTimeSlicedSurveyStopCollectingMessage, + ): SignedTimeSlicedSurveyStopCollectingMessage; + + qSetHash(value?: Buffer): Buffer; + + qSet(value?: ScpQuorumSet): ScpQuorumSet; + + envelope(value?: ScpEnvelope): ScpEnvelope; + + getScpLedgerSeq(value?: number): number; + + sendMoreMessage(value?: SendMore): SendMore; + + sendMoreExtendedMessage(value?: SendMoreExtended): SendMoreExtended; + + floodAdvert(value?: FloodAdvert): FloodAdvert; + + floodDemand(value?: FloodDemand): FloodDemand; + + static errorMsg(value: Error): StellarMessage; + + static hello(value: Hello): StellarMessage; + + static auth(value: Auth): StellarMessage; + + static dontHave(value: DontHave): StellarMessage; + + static getPeers(): StellarMessage; + + static peers(value: PeerAddress[]): StellarMessage; + + static getTxSet(value: Buffer): StellarMessage; + + static txSet(value: TransactionSet): StellarMessage; + + static generalizedTxSet(value: GeneralizedTransactionSet): StellarMessage; + + static transaction(value: TransactionEnvelope): StellarMessage; + + static surveyRequest(value: SignedSurveyRequestMessage): StellarMessage; + + static surveyResponse(value: SignedSurveyResponseMessage): StellarMessage; + + static timeSlicedSurveyRequest( + value: SignedTimeSlicedSurveyRequestMessage, + ): StellarMessage; + + static timeSlicedSurveyResponse( + value: SignedTimeSlicedSurveyResponseMessage, + ): StellarMessage; + + static timeSlicedSurveyStartCollecting( + value: SignedTimeSlicedSurveyStartCollectingMessage, + ): StellarMessage; + + static timeSlicedSurveyStopCollecting( + value: SignedTimeSlicedSurveyStopCollectingMessage, + ): StellarMessage; + + static getScpQuorumset(value: Buffer): StellarMessage; + + static scpQuorumset(value: ScpQuorumSet): StellarMessage; + + static scpMessage(value: ScpEnvelope): StellarMessage; + + static getScpState(value: number): StellarMessage; + + static sendMore(value: SendMore): StellarMessage; + + static sendMoreExtended(value: SendMoreExtended): StellarMessage; + + static floodAdvert(value: FloodAdvert): StellarMessage; + + static floodDemand(value: FloodDemand): StellarMessage; + + value(): + | Error + | Hello + | Auth + | DontHave + | PeerAddress[] + | Buffer + | TransactionSet + | GeneralizedTransactionSet + | TransactionEnvelope + | SignedSurveyRequestMessage + | SignedSurveyResponseMessage + | SignedTimeSlicedSurveyRequestMessage + | SignedTimeSlicedSurveyResponseMessage + | SignedTimeSlicedSurveyStartCollectingMessage + | SignedTimeSlicedSurveyStopCollectingMessage + | Buffer + | ScpQuorumSet + | ScpEnvelope + | number + | SendMore + | SendMoreExtended + | FloodAdvert + | FloodDemand + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StellarMessage; + + static write(value: StellarMessage, io: Buffer): void; + + static isValid(value: StellarMessage): boolean; + + static toXDR(value: StellarMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StellarMessage; + + static fromXDR(input: string, format: 'hex' | 'base64'): StellarMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AuthenticatedMessage { + switch(): number; + + v0(value?: AuthenticatedMessageV0): AuthenticatedMessageV0; + + static 0(value: AuthenticatedMessageV0): AuthenticatedMessage; + + value(): AuthenticatedMessageV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AuthenticatedMessage; + + static write(value: AuthenticatedMessage, io: Buffer): void; + + static isValid(value: AuthenticatedMessage): boolean; + + static toXDR(value: AuthenticatedMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AuthenticatedMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AuthenticatedMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolParameters { + switch(): LiquidityPoolType; + + constantProduct( + value?: LiquidityPoolConstantProductParameters, + ): LiquidityPoolConstantProductParameters; + + static liquidityPoolConstantProduct( + value: LiquidityPoolConstantProductParameters, + ): LiquidityPoolParameters; + + value(): LiquidityPoolConstantProductParameters; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolParameters; + + static write(value: LiquidityPoolParameters, io: Buffer): void; + + static isValid(value: LiquidityPoolParameters): boolean; + + static toXDR(value: LiquidityPoolParameters): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolParameters; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolParameters; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class MuxedAccount { + switch(): CryptoKeyType; + + ed25519(value?: Buffer): Buffer; + + med25519(value?: MuxedAccountMed25519): MuxedAccountMed25519; + + static keyTypeEd25519(value: Buffer): MuxedAccount; + + static keyTypeMuxedEd25519(value: MuxedAccountMed25519): MuxedAccount; + + value(): Buffer | MuxedAccountMed25519; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): MuxedAccount; + + static write(value: MuxedAccount, io: Buffer): void; + + static isValid(value: MuxedAccount): boolean; + + static toXDR(value: MuxedAccount): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): MuxedAccount; + + static fromXDR(input: string, format: 'hex' | 'base64'): MuxedAccount; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ChangeTrustAsset { + switch(): AssetType; + + alphaNum4(value?: AlphaNum4): AlphaNum4; + + alphaNum12(value?: AlphaNum12): AlphaNum12; + + liquidityPool(value?: LiquidityPoolParameters): LiquidityPoolParameters; + + static assetTypeNative(): ChangeTrustAsset; + + static assetTypeCreditAlphanum4(value: AlphaNum4): ChangeTrustAsset; + + static assetTypeCreditAlphanum12(value: AlphaNum12): ChangeTrustAsset; + + static assetTypePoolShare(value: LiquidityPoolParameters): ChangeTrustAsset; + + value(): AlphaNum4 | AlphaNum12 | LiquidityPoolParameters | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ChangeTrustAsset; + + static write(value: ChangeTrustAsset, io: Buffer): void; + + static isValid(value: ChangeTrustAsset): boolean; + + static toXDR(value: ChangeTrustAsset): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ChangeTrustAsset; + + static fromXDR(input: string, format: 'hex' | 'base64'): ChangeTrustAsset; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RevokeSponsorshipOp { + switch(): RevokeSponsorshipType; + + ledgerKey(value?: LedgerKey): LedgerKey; + + signer(value?: RevokeSponsorshipOpSigner): RevokeSponsorshipOpSigner; + + static revokeSponsorshipLedgerEntry(value: LedgerKey): RevokeSponsorshipOp; + + static revokeSponsorshipSigner( + value: RevokeSponsorshipOpSigner, + ): RevokeSponsorshipOp; + + value(): LedgerKey | RevokeSponsorshipOpSigner; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RevokeSponsorshipOp; + + static write(value: RevokeSponsorshipOp, io: Buffer): void; + + static isValid(value: RevokeSponsorshipOp): boolean; + + static toXDR(value: RevokeSponsorshipOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RevokeSponsorshipOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RevokeSponsorshipOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractIdPreimage { + switch(): ContractIdPreimageType; + + fromAddress( + value?: ContractIdPreimageFromAddress, + ): ContractIdPreimageFromAddress; + + fromAsset(value?: Asset): Asset; + + static contractIdPreimageFromAddress( + value: ContractIdPreimageFromAddress, + ): ContractIdPreimage; + + static contractIdPreimageFromAsset(value: Asset): ContractIdPreimage; + + value(): ContractIdPreimageFromAddress | Asset; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractIdPreimage; + + static write(value: ContractIdPreimage, io: Buffer): void; + + static isValid(value: ContractIdPreimage): boolean; + + static toXDR(value: ContractIdPreimage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractIdPreimage; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractIdPreimage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HostFunction { + switch(): HostFunctionType; + + invokeContract(value?: InvokeContractArgs): InvokeContractArgs; + + createContract(value?: CreateContractArgs): CreateContractArgs; + + wasm(value?: Buffer): Buffer; + + createContractV2(value?: CreateContractArgsV2): CreateContractArgsV2; + + static hostFunctionTypeInvokeContract( + value: InvokeContractArgs, + ): HostFunction; + + static hostFunctionTypeCreateContract( + value: CreateContractArgs, + ): HostFunction; + + static hostFunctionTypeUploadContractWasm(value: Buffer): HostFunction; + + static hostFunctionTypeCreateContractV2( + value: CreateContractArgsV2, + ): HostFunction; + + value(): + | InvokeContractArgs + | CreateContractArgs + | Buffer + | CreateContractArgsV2; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HostFunction; + + static write(value: HostFunction, io: Buffer): void; + + static isValid(value: HostFunction): boolean; + + static toXDR(value: HostFunction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HostFunction; + + static fromXDR(input: string, format: 'hex' | 'base64'): HostFunction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAuthorizedFunction { + switch(): SorobanAuthorizedFunctionType; + + contractFn(value?: InvokeContractArgs): InvokeContractArgs; + + createContractHostFn(value?: CreateContractArgs): CreateContractArgs; + + createContractV2HostFn(value?: CreateContractArgsV2): CreateContractArgsV2; + + static sorobanAuthorizedFunctionTypeContractFn( + value: InvokeContractArgs, + ): SorobanAuthorizedFunction; + + static sorobanAuthorizedFunctionTypeCreateContractHostFn( + value: CreateContractArgs, + ): SorobanAuthorizedFunction; + + static sorobanAuthorizedFunctionTypeCreateContractV2HostFn( + value: CreateContractArgsV2, + ): SorobanAuthorizedFunction; + + value(): InvokeContractArgs | CreateContractArgs | CreateContractArgsV2; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAuthorizedFunction; + + static write(value: SorobanAuthorizedFunction, io: Buffer): void; + + static isValid(value: SorobanAuthorizedFunction): boolean; + + static toXDR(value: SorobanAuthorizedFunction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAuthorizedFunction; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAuthorizedFunction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanCredentials { + switch(): SorobanCredentialsType; + + address(value?: SorobanAddressCredentials): SorobanAddressCredentials; + + static sorobanCredentialsSourceAccount(): SorobanCredentials; + + static sorobanCredentialsAddress( + value: SorobanAddressCredentials, + ): SorobanCredentials; + + value(): SorobanAddressCredentials | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanCredentials; + + static write(value: SorobanCredentials, io: Buffer): void; + + static isValid(value: SorobanCredentials): boolean; + + static toXDR(value: SorobanCredentials): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanCredentials; + + static fromXDR(input: string, format: 'hex' | 'base64'): SorobanCredentials; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationBody { + switch(): OperationType; + + createAccountOp(value?: CreateAccountOp): CreateAccountOp; + + paymentOp(value?: PaymentOp): PaymentOp; + + pathPaymentStrictReceiveOp( + value?: PathPaymentStrictReceiveOp, + ): PathPaymentStrictReceiveOp; + + manageSellOfferOp(value?: ManageSellOfferOp): ManageSellOfferOp; + + createPassiveSellOfferOp( + value?: CreatePassiveSellOfferOp, + ): CreatePassiveSellOfferOp; + + setOptionsOp(value?: SetOptionsOp): SetOptionsOp; + + changeTrustOp(value?: ChangeTrustOp): ChangeTrustOp; + + allowTrustOp(value?: AllowTrustOp): AllowTrustOp; + + destination(value?: MuxedAccount): MuxedAccount; + + manageDataOp(value?: ManageDataOp): ManageDataOp; + + bumpSequenceOp(value?: BumpSequenceOp): BumpSequenceOp; + + manageBuyOfferOp(value?: ManageBuyOfferOp): ManageBuyOfferOp; + + pathPaymentStrictSendOp( + value?: PathPaymentStrictSendOp, + ): PathPaymentStrictSendOp; + + createClaimableBalanceOp( + value?: CreateClaimableBalanceOp, + ): CreateClaimableBalanceOp; + + claimClaimableBalanceOp( + value?: ClaimClaimableBalanceOp, + ): ClaimClaimableBalanceOp; + + beginSponsoringFutureReservesOp( + value?: BeginSponsoringFutureReservesOp, + ): BeginSponsoringFutureReservesOp; + + revokeSponsorshipOp(value?: RevokeSponsorshipOp): RevokeSponsorshipOp; + + clawbackOp(value?: ClawbackOp): ClawbackOp; + + clawbackClaimableBalanceOp( + value?: ClawbackClaimableBalanceOp, + ): ClawbackClaimableBalanceOp; + + setTrustLineFlagsOp(value?: SetTrustLineFlagsOp): SetTrustLineFlagsOp; + + liquidityPoolDepositOp( + value?: LiquidityPoolDepositOp, + ): LiquidityPoolDepositOp; + + liquidityPoolWithdrawOp( + value?: LiquidityPoolWithdrawOp, + ): LiquidityPoolWithdrawOp; + + invokeHostFunctionOp(value?: InvokeHostFunctionOp): InvokeHostFunctionOp; + + extendFootprintTtlOp(value?: ExtendFootprintTtlOp): ExtendFootprintTtlOp; + + restoreFootprintOp(value?: RestoreFootprintOp): RestoreFootprintOp; + + static createAccount(value: CreateAccountOp): OperationBody; + + static payment(value: PaymentOp): OperationBody; + + static pathPaymentStrictReceive( + value: PathPaymentStrictReceiveOp, + ): OperationBody; + + static manageSellOffer(value: ManageSellOfferOp): OperationBody; + + static createPassiveSellOffer( + value: CreatePassiveSellOfferOp, + ): OperationBody; + + static setOptions(value: SetOptionsOp): OperationBody; + + static changeTrust(value: ChangeTrustOp): OperationBody; + + static allowTrust(value: AllowTrustOp): OperationBody; + + static accountMerge(value: MuxedAccount): OperationBody; + + static inflation(): OperationBody; + + static manageData(value: ManageDataOp): OperationBody; + + static bumpSequence(value: BumpSequenceOp): OperationBody; + + static manageBuyOffer(value: ManageBuyOfferOp): OperationBody; + + static pathPaymentStrictSend(value: PathPaymentStrictSendOp): OperationBody; + + static createClaimableBalance( + value: CreateClaimableBalanceOp, + ): OperationBody; + + static claimClaimableBalance(value: ClaimClaimableBalanceOp): OperationBody; + + static beginSponsoringFutureReserves( + value: BeginSponsoringFutureReservesOp, + ): OperationBody; + + static endSponsoringFutureReserves(): OperationBody; + + static revokeSponsorship(value: RevokeSponsorshipOp): OperationBody; + + static clawback(value: ClawbackOp): OperationBody; + + static clawbackClaimableBalance( + value: ClawbackClaimableBalanceOp, + ): OperationBody; + + static setTrustLineFlags(value: SetTrustLineFlagsOp): OperationBody; + + static liquidityPoolDeposit(value: LiquidityPoolDepositOp): OperationBody; + + static liquidityPoolWithdraw(value: LiquidityPoolWithdrawOp): OperationBody; + + static invokeHostFunction(value: InvokeHostFunctionOp): OperationBody; + + static extendFootprintTtl(value: ExtendFootprintTtlOp): OperationBody; + + static restoreFootprint(value: RestoreFootprintOp): OperationBody; + + value(): + | CreateAccountOp + | PaymentOp + | PathPaymentStrictReceiveOp + | ManageSellOfferOp + | CreatePassiveSellOfferOp + | SetOptionsOp + | ChangeTrustOp + | AllowTrustOp + | MuxedAccount + | ManageDataOp + | BumpSequenceOp + | ManageBuyOfferOp + | PathPaymentStrictSendOp + | CreateClaimableBalanceOp + | ClaimClaimableBalanceOp + | BeginSponsoringFutureReservesOp + | RevokeSponsorshipOp + | ClawbackOp + | ClawbackClaimableBalanceOp + | SetTrustLineFlagsOp + | LiquidityPoolDepositOp + | LiquidityPoolWithdrawOp + | InvokeHostFunctionOp + | ExtendFootprintTtlOp + | RestoreFootprintOp + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationBody; + + static write(value: OperationBody, io: Buffer): void; + + static isValid(value: OperationBody): boolean; + + static toXDR(value: OperationBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimage { + switch(): EnvelopeType; + + operationId(value?: HashIdPreimageOperationId): HashIdPreimageOperationId; + + revokeId(value?: HashIdPreimageRevokeId): HashIdPreimageRevokeId; + + contractId(value?: HashIdPreimageContractId): HashIdPreimageContractId; + + sorobanAuthorization( + value?: HashIdPreimageSorobanAuthorization, + ): HashIdPreimageSorobanAuthorization; + + static envelopeTypeOpId(value: HashIdPreimageOperationId): HashIdPreimage; + + static envelopeTypePoolRevokeOpId( + value: HashIdPreimageRevokeId, + ): HashIdPreimage; + + static envelopeTypeContractId( + value: HashIdPreimageContractId, + ): HashIdPreimage; + + static envelopeTypeSorobanAuthorization( + value: HashIdPreimageSorobanAuthorization, + ): HashIdPreimage; + + value(): + | HashIdPreimageOperationId + | HashIdPreimageRevokeId + | HashIdPreimageContractId + | HashIdPreimageSorobanAuthorization; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimage; + + static write(value: HashIdPreimage, io: Buffer): void; + + static isValid(value: HashIdPreimage): boolean; + + static toXDR(value: HashIdPreimage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimage; + + static fromXDR(input: string, format: 'hex' | 'base64'): HashIdPreimage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Memo { + switch(): MemoType; + + text(value?: string | Buffer): string | Buffer; + + id(value?: Uint64): Uint64; + + hash(value?: Buffer): Buffer; + + retHash(value?: Buffer): Buffer; + + static memoNone(): Memo; + + static memoText(value: string | Buffer): Memo; + + static memoId(value: Uint64): Memo; + + static memoHash(value: Buffer): Memo; + + static memoReturn(value: Buffer): Memo; + + value(): string | Buffer | Uint64 | Buffer | Buffer | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Memo; + + static write(value: Memo, io: Buffer): void; + + static isValid(value: Memo): boolean; + + static toXDR(value: Memo): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Memo; + + static fromXDR(input: string, format: 'hex' | 'base64'): Memo; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Preconditions { + switch(): PreconditionType; + + timeBounds(value?: TimeBounds): TimeBounds; + + v2(value?: PreconditionsV2): PreconditionsV2; + + static precondNone(): Preconditions; + + static precondTime(value: TimeBounds): Preconditions; + + static precondV2(value: PreconditionsV2): Preconditions; + + value(): TimeBounds | PreconditionsV2 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Preconditions; + + static write(value: Preconditions, io: Buffer): void; + + static isValid(value: Preconditions): boolean; + + static toXDR(value: Preconditions): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Preconditions; + + static fromXDR(input: string, format: 'hex' | 'base64'): Preconditions; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ArchivalProofBody { + switch(): ArchivalProofType; + + nonexistenceProof(value?: NonexistenceProofBody): NonexistenceProofBody; + + existenceProof(value?: ExistenceProofBody): ExistenceProofBody; + + static existence(value: NonexistenceProofBody): ArchivalProofBody; + + static nonexistence(value: ExistenceProofBody): ArchivalProofBody; + + value(): NonexistenceProofBody | ExistenceProofBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ArchivalProofBody; + + static write(value: ArchivalProofBody, io: Buffer): void; + + static isValid(value: ArchivalProofBody): boolean; + + static toXDR(value: ArchivalProofBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ArchivalProofBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): ArchivalProofBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV0Ext { + switch(): number; + + static 0(): TransactionV0Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV0Ext; + + static write(value: TransactionV0Ext, io: Buffer): void; + + static isValid(value: TransactionV0Ext): boolean; + + static toXDR(value: TransactionV0Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV0Ext; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionV0Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionExt { + switch(): number; + + sorobanData(value?: SorobanTransactionData): SorobanTransactionData; + + static 0(): TransactionExt; + + static 1(value: SorobanTransactionData): TransactionExt; + + value(): SorobanTransactionData | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionExt; + + static write(value: TransactionExt, io: Buffer): void; + + static isValid(value: TransactionExt): boolean; + + static toXDR(value: TransactionExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransactionInnerTx { + switch(): EnvelopeType; + + v1(value?: TransactionV1Envelope): TransactionV1Envelope; + + static envelopeTypeTx( + value: TransactionV1Envelope, + ): FeeBumpTransactionInnerTx; + + value(): TransactionV1Envelope; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransactionInnerTx; + + static write(value: FeeBumpTransactionInnerTx, io: Buffer): void; + + static isValid(value: FeeBumpTransactionInnerTx): boolean; + + static toXDR(value: FeeBumpTransactionInnerTx): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransactionInnerTx; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): FeeBumpTransactionInnerTx; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransactionExt { + switch(): number; + + static 0(): FeeBumpTransactionExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransactionExt; + + static write(value: FeeBumpTransactionExt, io: Buffer): void; + + static isValid(value: FeeBumpTransactionExt): boolean; + + static toXDR(value: FeeBumpTransactionExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransactionExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): FeeBumpTransactionExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionEnvelope { + switch(): EnvelopeType; + + v0(value?: TransactionV0Envelope): TransactionV0Envelope; + + v1(value?: TransactionV1Envelope): TransactionV1Envelope; + + feeBump(value?: FeeBumpTransactionEnvelope): FeeBumpTransactionEnvelope; + + static envelopeTypeTxV0(value: TransactionV0Envelope): TransactionEnvelope; + + static envelopeTypeTx(value: TransactionV1Envelope): TransactionEnvelope; + + static envelopeTypeTxFeeBump( + value: FeeBumpTransactionEnvelope, + ): TransactionEnvelope; + + value(): + | TransactionV0Envelope + | TransactionV1Envelope + | FeeBumpTransactionEnvelope; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionEnvelope; + + static write(value: TransactionEnvelope, io: Buffer): void; + + static isValid(value: TransactionEnvelope): boolean; + + static toXDR(value: TransactionEnvelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionEnvelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionEnvelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSignaturePayloadTaggedTransaction { + switch(): EnvelopeType; + + tx(value?: Transaction): Transaction; + + feeBump(value?: FeeBumpTransaction): FeeBumpTransaction; + + static envelopeTypeTx( + value: Transaction, + ): TransactionSignaturePayloadTaggedTransaction; + + static envelopeTypeTxFeeBump( + value: FeeBumpTransaction, + ): TransactionSignaturePayloadTaggedTransaction; + + value(): Transaction | FeeBumpTransaction; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSignaturePayloadTaggedTransaction; + + static write( + value: TransactionSignaturePayloadTaggedTransaction, + io: Buffer, + ): void; + + static isValid( + value: TransactionSignaturePayloadTaggedTransaction, + ): boolean; + + static toXDR(value: TransactionSignaturePayloadTaggedTransaction): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TransactionSignaturePayloadTaggedTransaction; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionSignaturePayloadTaggedTransaction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimAtom { + switch(): ClaimAtomType; + + v0(value?: ClaimOfferAtomV0): ClaimOfferAtomV0; + + orderBook(value?: ClaimOfferAtom): ClaimOfferAtom; + + liquidityPool(value?: ClaimLiquidityAtom): ClaimLiquidityAtom; + + static claimAtomTypeV0(value: ClaimOfferAtomV0): ClaimAtom; + + static claimAtomTypeOrderBook(value: ClaimOfferAtom): ClaimAtom; + + static claimAtomTypeLiquidityPool(value: ClaimLiquidityAtom): ClaimAtom; + + value(): ClaimOfferAtomV0 | ClaimOfferAtom | ClaimLiquidityAtom; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimAtom; + + static write(value: ClaimAtom, io: Buffer): void; + + static isValid(value: ClaimAtom): boolean; + + static toXDR(value: ClaimAtom): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimAtom; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimAtom; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateAccountResult { + switch(): CreateAccountResultCode; + + static createAccountSuccess(): CreateAccountResult; + + static createAccountMalformed(): CreateAccountResult; + + static createAccountUnderfunded(): CreateAccountResult; + + static createAccountLowReserve(): CreateAccountResult; + + static createAccountAlreadyExist(): CreateAccountResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateAccountResult; + + static write(value: CreateAccountResult, io: Buffer): void; + + static isValid(value: CreateAccountResult): boolean; + + static toXDR(value: CreateAccountResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateAccountResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateAccountResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PaymentResult { + switch(): PaymentResultCode; + + static paymentSuccess(): PaymentResult; + + static paymentMalformed(): PaymentResult; + + static paymentUnderfunded(): PaymentResult; + + static paymentSrcNoTrust(): PaymentResult; + + static paymentSrcNotAuthorized(): PaymentResult; + + static paymentNoDestination(): PaymentResult; + + static paymentNoTrust(): PaymentResult; + + static paymentNotAuthorized(): PaymentResult; + + static paymentLineFull(): PaymentResult; + + static paymentNoIssuer(): PaymentResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PaymentResult; + + static write(value: PaymentResult, io: Buffer): void; + + static isValid(value: PaymentResult): boolean; + + static toXDR(value: PaymentResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PaymentResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): PaymentResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictReceiveResult { + switch(): PathPaymentStrictReceiveResultCode; + + success( + value?: PathPaymentStrictReceiveResultSuccess, + ): PathPaymentStrictReceiveResultSuccess; + + noIssuer(value?: Asset): Asset; + + static pathPaymentStrictReceiveSuccess( + value: PathPaymentStrictReceiveResultSuccess, + ): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveMalformed(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveUnderfunded(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveSrcNoTrust(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveSrcNotAuthorized(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNoDestination(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNoTrust(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNotAuthorized(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveLineFull(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNoIssuer( + value: Asset, + ): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveTooFewOffers(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveOfferCrossSelf(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveOverSendmax(): PathPaymentStrictReceiveResult; + + value(): PathPaymentStrictReceiveResultSuccess | Asset | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictReceiveResult; + + static write(value: PathPaymentStrictReceiveResult, io: Buffer): void; + + static isValid(value: PathPaymentStrictReceiveResult): boolean; + + static toXDR(value: PathPaymentStrictReceiveResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): PathPaymentStrictReceiveResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictReceiveResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictSendResult { + switch(): PathPaymentStrictSendResultCode; + + success( + value?: PathPaymentStrictSendResultSuccess, + ): PathPaymentStrictSendResultSuccess; + + noIssuer(value?: Asset): Asset; + + static pathPaymentStrictSendSuccess( + value: PathPaymentStrictSendResultSuccess, + ): PathPaymentStrictSendResult; + + static pathPaymentStrictSendMalformed(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendUnderfunded(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendSrcNoTrust(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendSrcNotAuthorized(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNoDestination(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNoTrust(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNotAuthorized(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendLineFull(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNoIssuer( + value: Asset, + ): PathPaymentStrictSendResult; + + static pathPaymentStrictSendTooFewOffers(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendOfferCrossSelf(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendUnderDestmin(): PathPaymentStrictSendResult; + + value(): PathPaymentStrictSendResultSuccess | Asset | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictSendResult; + + static write(value: PathPaymentStrictSendResult, io: Buffer): void; + + static isValid(value: PathPaymentStrictSendResult): boolean; + + static toXDR(value: PathPaymentStrictSendResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PathPaymentStrictSendResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictSendResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageOfferSuccessResultOffer { + switch(): ManageOfferEffect; + + offer(value?: OfferEntry): OfferEntry; + + static manageOfferCreated(value: OfferEntry): ManageOfferSuccessResultOffer; + + static manageOfferUpdated(value: OfferEntry): ManageOfferSuccessResultOffer; + + static manageOfferDeleted(): ManageOfferSuccessResultOffer; + + value(): OfferEntry | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageOfferSuccessResultOffer; + + static write(value: ManageOfferSuccessResultOffer, io: Buffer): void; + + static isValid(value: ManageOfferSuccessResultOffer): boolean; + + static toXDR(value: ManageOfferSuccessResultOffer): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ManageOfferSuccessResultOffer; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageOfferSuccessResultOffer; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageSellOfferResult { + switch(): ManageSellOfferResultCode; + + success(value?: ManageOfferSuccessResult): ManageOfferSuccessResult; + + static manageSellOfferSuccess( + value: ManageOfferSuccessResult, + ): ManageSellOfferResult; + + static manageSellOfferMalformed(): ManageSellOfferResult; + + static manageSellOfferSellNoTrust(): ManageSellOfferResult; + + static manageSellOfferBuyNoTrust(): ManageSellOfferResult; + + static manageSellOfferSellNotAuthorized(): ManageSellOfferResult; + + static manageSellOfferBuyNotAuthorized(): ManageSellOfferResult; + + static manageSellOfferLineFull(): ManageSellOfferResult; + + static manageSellOfferUnderfunded(): ManageSellOfferResult; + + static manageSellOfferCrossSelf(): ManageSellOfferResult; + + static manageSellOfferSellNoIssuer(): ManageSellOfferResult; + + static manageSellOfferBuyNoIssuer(): ManageSellOfferResult; + + static manageSellOfferNotFound(): ManageSellOfferResult; + + static manageSellOfferLowReserve(): ManageSellOfferResult; + + value(): ManageOfferSuccessResult | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageSellOfferResult; + + static write(value: ManageSellOfferResult, io: Buffer): void; + + static isValid(value: ManageSellOfferResult): boolean; + + static toXDR(value: ManageSellOfferResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageSellOfferResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageSellOfferResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageBuyOfferResult { + switch(): ManageBuyOfferResultCode; + + success(value?: ManageOfferSuccessResult): ManageOfferSuccessResult; + + static manageBuyOfferSuccess( + value: ManageOfferSuccessResult, + ): ManageBuyOfferResult; + + static manageBuyOfferMalformed(): ManageBuyOfferResult; + + static manageBuyOfferSellNoTrust(): ManageBuyOfferResult; + + static manageBuyOfferBuyNoTrust(): ManageBuyOfferResult; + + static manageBuyOfferSellNotAuthorized(): ManageBuyOfferResult; + + static manageBuyOfferBuyNotAuthorized(): ManageBuyOfferResult; + + static manageBuyOfferLineFull(): ManageBuyOfferResult; + + static manageBuyOfferUnderfunded(): ManageBuyOfferResult; + + static manageBuyOfferCrossSelf(): ManageBuyOfferResult; + + static manageBuyOfferSellNoIssuer(): ManageBuyOfferResult; + + static manageBuyOfferBuyNoIssuer(): ManageBuyOfferResult; + + static manageBuyOfferNotFound(): ManageBuyOfferResult; + + static manageBuyOfferLowReserve(): ManageBuyOfferResult; + + value(): ManageOfferSuccessResult | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageBuyOfferResult; + + static write(value: ManageBuyOfferResult, io: Buffer): void; + + static isValid(value: ManageBuyOfferResult): boolean; + + static toXDR(value: ManageBuyOfferResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageBuyOfferResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageBuyOfferResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetOptionsResult { + switch(): SetOptionsResultCode; + + static setOptionsSuccess(): SetOptionsResult; + + static setOptionsLowReserve(): SetOptionsResult; + + static setOptionsTooManySigners(): SetOptionsResult; + + static setOptionsBadFlags(): SetOptionsResult; + + static setOptionsInvalidInflation(): SetOptionsResult; + + static setOptionsCantChange(): SetOptionsResult; + + static setOptionsUnknownFlag(): SetOptionsResult; + + static setOptionsThresholdOutOfRange(): SetOptionsResult; + + static setOptionsBadSigner(): SetOptionsResult; + + static setOptionsInvalidHomeDomain(): SetOptionsResult; + + static setOptionsAuthRevocableRequired(): SetOptionsResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetOptionsResult; + + static write(value: SetOptionsResult, io: Buffer): void; + + static isValid(value: SetOptionsResult): boolean; + + static toXDR(value: SetOptionsResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetOptionsResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): SetOptionsResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ChangeTrustResult { + switch(): ChangeTrustResultCode; + + static changeTrustSuccess(): ChangeTrustResult; + + static changeTrustMalformed(): ChangeTrustResult; + + static changeTrustNoIssuer(): ChangeTrustResult; + + static changeTrustInvalidLimit(): ChangeTrustResult; + + static changeTrustLowReserve(): ChangeTrustResult; + + static changeTrustSelfNotAllowed(): ChangeTrustResult; + + static changeTrustTrustLineMissing(): ChangeTrustResult; + + static changeTrustCannotDelete(): ChangeTrustResult; + + static changeTrustNotAuthMaintainLiabilities(): ChangeTrustResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ChangeTrustResult; + + static write(value: ChangeTrustResult, io: Buffer): void; + + static isValid(value: ChangeTrustResult): boolean; + + static toXDR(value: ChangeTrustResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ChangeTrustResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ChangeTrustResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AllowTrustResult { + switch(): AllowTrustResultCode; + + static allowTrustSuccess(): AllowTrustResult; + + static allowTrustMalformed(): AllowTrustResult; + + static allowTrustNoTrustLine(): AllowTrustResult; + + static allowTrustTrustNotRequired(): AllowTrustResult; + + static allowTrustCantRevoke(): AllowTrustResult; + + static allowTrustSelfNotAllowed(): AllowTrustResult; + + static allowTrustLowReserve(): AllowTrustResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AllowTrustResult; + + static write(value: AllowTrustResult, io: Buffer): void; + + static isValid(value: AllowTrustResult): boolean; + + static toXDR(value: AllowTrustResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AllowTrustResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): AllowTrustResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountMergeResult { + switch(): AccountMergeResultCode; + + sourceAccountBalance(value?: Int64): Int64; + + static accountMergeSuccess(value: Int64): AccountMergeResult; + + static accountMergeMalformed(): AccountMergeResult; + + static accountMergeNoAccount(): AccountMergeResult; + + static accountMergeImmutableSet(): AccountMergeResult; + + static accountMergeHasSubEntries(): AccountMergeResult; + + static accountMergeSeqnumTooFar(): AccountMergeResult; + + static accountMergeDestFull(): AccountMergeResult; + + static accountMergeIsSponsor(): AccountMergeResult; + + value(): Int64 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountMergeResult; + + static write(value: AccountMergeResult, io: Buffer): void; + + static isValid(value: AccountMergeResult): boolean; + + static toXDR(value: AccountMergeResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountMergeResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): AccountMergeResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InflationResult { + switch(): InflationResultCode; + + payouts(value?: InflationPayout[]): InflationPayout[]; + + static inflationSuccess(value: InflationPayout[]): InflationResult; + + static inflationNotTime(): InflationResult; + + value(): InflationPayout[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InflationResult; + + static write(value: InflationResult, io: Buffer): void; + + static isValid(value: InflationResult): boolean; + + static toXDR(value: InflationResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InflationResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): InflationResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageDataResult { + switch(): ManageDataResultCode; + + static manageDataSuccess(): ManageDataResult; + + static manageDataNotSupportedYet(): ManageDataResult; + + static manageDataNameNotFound(): ManageDataResult; + + static manageDataLowReserve(): ManageDataResult; + + static manageDataInvalidName(): ManageDataResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageDataResult; + + static write(value: ManageDataResult, io: Buffer): void; + + static isValid(value: ManageDataResult): boolean; + + static toXDR(value: ManageDataResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageDataResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageDataResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BumpSequenceResult { + switch(): BumpSequenceResultCode; + + static bumpSequenceSuccess(): BumpSequenceResult; + + static bumpSequenceBadSeq(): BumpSequenceResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BumpSequenceResult; + + static write(value: BumpSequenceResult, io: Buffer): void; + + static isValid(value: BumpSequenceResult): boolean; + + static toXDR(value: BumpSequenceResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BumpSequenceResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): BumpSequenceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateClaimableBalanceResult { + switch(): CreateClaimableBalanceResultCode; + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + static createClaimableBalanceSuccess( + value: ClaimableBalanceId, + ): CreateClaimableBalanceResult; + + static createClaimableBalanceMalformed(): CreateClaimableBalanceResult; + + static createClaimableBalanceLowReserve(): CreateClaimableBalanceResult; + + static createClaimableBalanceNoTrust(): CreateClaimableBalanceResult; + + static createClaimableBalanceNotAuthorized(): CreateClaimableBalanceResult; + + static createClaimableBalanceUnderfunded(): CreateClaimableBalanceResult; + + value(): ClaimableBalanceId | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateClaimableBalanceResult; + + static write(value: CreateClaimableBalanceResult, io: Buffer): void; + + static isValid(value: CreateClaimableBalanceResult): boolean; + + static toXDR(value: CreateClaimableBalanceResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateClaimableBalanceResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateClaimableBalanceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimClaimableBalanceResult { + switch(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceSuccess(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceDoesNotExist(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceCannotClaim(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceLineFull(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceNoTrust(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceNotAuthorized(): ClaimClaimableBalanceResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimClaimableBalanceResult; + + static write(value: ClaimClaimableBalanceResult, io: Buffer): void; + + static isValid(value: ClaimClaimableBalanceResult): boolean; + + static toXDR(value: ClaimClaimableBalanceResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimClaimableBalanceResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimClaimableBalanceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BeginSponsoringFutureReservesResult { + switch(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesSuccess(): BeginSponsoringFutureReservesResult; + + static beginSponsoringFutureReservesMalformed(): BeginSponsoringFutureReservesResult; + + static beginSponsoringFutureReservesAlreadySponsored(): BeginSponsoringFutureReservesResult; + + static beginSponsoringFutureReservesRecursive(): BeginSponsoringFutureReservesResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BeginSponsoringFutureReservesResult; + + static write(value: BeginSponsoringFutureReservesResult, io: Buffer): void; + + static isValid(value: BeginSponsoringFutureReservesResult): boolean; + + static toXDR(value: BeginSponsoringFutureReservesResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): BeginSponsoringFutureReservesResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): BeginSponsoringFutureReservesResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class EndSponsoringFutureReservesResult { + switch(): EndSponsoringFutureReservesResultCode; + + static endSponsoringFutureReservesSuccess(): EndSponsoringFutureReservesResult; + + static endSponsoringFutureReservesNotSponsored(): EndSponsoringFutureReservesResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): EndSponsoringFutureReservesResult; + + static write(value: EndSponsoringFutureReservesResult, io: Buffer): void; + + static isValid(value: EndSponsoringFutureReservesResult): boolean; + + static toXDR(value: EndSponsoringFutureReservesResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): EndSponsoringFutureReservesResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): EndSponsoringFutureReservesResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RevokeSponsorshipResult { + switch(): RevokeSponsorshipResultCode; + + static revokeSponsorshipSuccess(): RevokeSponsorshipResult; + + static revokeSponsorshipDoesNotExist(): RevokeSponsorshipResult; + + static revokeSponsorshipNotSponsor(): RevokeSponsorshipResult; + + static revokeSponsorshipLowReserve(): RevokeSponsorshipResult; + + static revokeSponsorshipOnlyTransferable(): RevokeSponsorshipResult; + + static revokeSponsorshipMalformed(): RevokeSponsorshipResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RevokeSponsorshipResult; + + static write(value: RevokeSponsorshipResult, io: Buffer): void; + + static isValid(value: RevokeSponsorshipResult): boolean; + + static toXDR(value: RevokeSponsorshipResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RevokeSponsorshipResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RevokeSponsorshipResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackResult { + switch(): ClawbackResultCode; + + static clawbackSuccess(): ClawbackResult; + + static clawbackMalformed(): ClawbackResult; + + static clawbackNotClawbackEnabled(): ClawbackResult; + + static clawbackNoTrust(): ClawbackResult; + + static clawbackUnderfunded(): ClawbackResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackResult; + + static write(value: ClawbackResult, io: Buffer): void; + + static isValid(value: ClawbackResult): boolean; + + static toXDR(value: ClawbackResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClawbackResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClawbackResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackClaimableBalanceResult { + switch(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceSuccess(): ClawbackClaimableBalanceResult; + + static clawbackClaimableBalanceDoesNotExist(): ClawbackClaimableBalanceResult; + + static clawbackClaimableBalanceNotIssuer(): ClawbackClaimableBalanceResult; + + static clawbackClaimableBalanceNotClawbackEnabled(): ClawbackClaimableBalanceResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackClaimableBalanceResult; + + static write(value: ClawbackClaimableBalanceResult, io: Buffer): void; + + static isValid(value: ClawbackClaimableBalanceResult): boolean; + + static toXDR(value: ClawbackClaimableBalanceResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ClawbackClaimableBalanceResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClawbackClaimableBalanceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetTrustLineFlagsResult { + switch(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsSuccess(): SetTrustLineFlagsResult; + + static setTrustLineFlagsMalformed(): SetTrustLineFlagsResult; + + static setTrustLineFlagsNoTrustLine(): SetTrustLineFlagsResult; + + static setTrustLineFlagsCantRevoke(): SetTrustLineFlagsResult; + + static setTrustLineFlagsInvalidState(): SetTrustLineFlagsResult; + + static setTrustLineFlagsLowReserve(): SetTrustLineFlagsResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetTrustLineFlagsResult; + + static write(value: SetTrustLineFlagsResult, io: Buffer): void; + + static isValid(value: SetTrustLineFlagsResult): boolean; + + static toXDR(value: SetTrustLineFlagsResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetTrustLineFlagsResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SetTrustLineFlagsResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolDepositResult { + switch(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositSuccess(): LiquidityPoolDepositResult; + + static liquidityPoolDepositMalformed(): LiquidityPoolDepositResult; + + static liquidityPoolDepositNoTrust(): LiquidityPoolDepositResult; + + static liquidityPoolDepositNotAuthorized(): LiquidityPoolDepositResult; + + static liquidityPoolDepositUnderfunded(): LiquidityPoolDepositResult; + + static liquidityPoolDepositLineFull(): LiquidityPoolDepositResult; + + static liquidityPoolDepositBadPrice(): LiquidityPoolDepositResult; + + static liquidityPoolDepositPoolFull(): LiquidityPoolDepositResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolDepositResult; + + static write(value: LiquidityPoolDepositResult, io: Buffer): void; + + static isValid(value: LiquidityPoolDepositResult): boolean; + + static toXDR(value: LiquidityPoolDepositResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolDepositResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolDepositResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolWithdrawResult { + switch(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawSuccess(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawMalformed(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawNoTrust(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawUnderfunded(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawLineFull(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawUnderMinimum(): LiquidityPoolWithdrawResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolWithdrawResult; + + static write(value: LiquidityPoolWithdrawResult, io: Buffer): void; + + static isValid(value: LiquidityPoolWithdrawResult): boolean; + + static toXDR(value: LiquidityPoolWithdrawResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolWithdrawResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolWithdrawResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeHostFunctionResult { + switch(): InvokeHostFunctionResultCode; + + success(value?: Buffer): Buffer; + + static invokeHostFunctionSuccess(value: Buffer): InvokeHostFunctionResult; + + static invokeHostFunctionMalformed(): InvokeHostFunctionResult; + + static invokeHostFunctionTrapped(): InvokeHostFunctionResult; + + static invokeHostFunctionResourceLimitExceeded(): InvokeHostFunctionResult; + + static invokeHostFunctionEntryArchived(): InvokeHostFunctionResult; + + static invokeHostFunctionInsufficientRefundableFee(): InvokeHostFunctionResult; + + value(): Buffer | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeHostFunctionResult; + + static write(value: InvokeHostFunctionResult, io: Buffer): void; + + static isValid(value: InvokeHostFunctionResult): boolean; + + static toXDR(value: InvokeHostFunctionResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InvokeHostFunctionResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InvokeHostFunctionResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExtendFootprintTtlResult { + switch(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlSuccess(): ExtendFootprintTtlResult; + + static extendFootprintTtlMalformed(): ExtendFootprintTtlResult; + + static extendFootprintTtlResourceLimitExceeded(): ExtendFootprintTtlResult; + + static extendFootprintTtlInsufficientRefundableFee(): ExtendFootprintTtlResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExtendFootprintTtlResult; + + static write(value: ExtendFootprintTtlResult, io: Buffer): void; + + static isValid(value: ExtendFootprintTtlResult): boolean; + + static toXDR(value: ExtendFootprintTtlResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExtendFootprintTtlResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ExtendFootprintTtlResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RestoreFootprintResult { + switch(): RestoreFootprintResultCode; + + static restoreFootprintSuccess(): RestoreFootprintResult; + + static restoreFootprintMalformed(): RestoreFootprintResult; + + static restoreFootprintResourceLimitExceeded(): RestoreFootprintResult; + + static restoreFootprintInsufficientRefundableFee(): RestoreFootprintResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RestoreFootprintResult; + + static write(value: RestoreFootprintResult, io: Buffer): void; + + static isValid(value: RestoreFootprintResult): boolean; + + static toXDR(value: RestoreFootprintResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RestoreFootprintResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RestoreFootprintResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationResultTr { + switch(): OperationType; + + createAccountResult(value?: CreateAccountResult): CreateAccountResult; + + paymentResult(value?: PaymentResult): PaymentResult; + + pathPaymentStrictReceiveResult( + value?: PathPaymentStrictReceiveResult, + ): PathPaymentStrictReceiveResult; + + manageSellOfferResult(value?: ManageSellOfferResult): ManageSellOfferResult; + + createPassiveSellOfferResult( + value?: ManageSellOfferResult, + ): ManageSellOfferResult; + + setOptionsResult(value?: SetOptionsResult): SetOptionsResult; + + changeTrustResult(value?: ChangeTrustResult): ChangeTrustResult; + + allowTrustResult(value?: AllowTrustResult): AllowTrustResult; + + accountMergeResult(value?: AccountMergeResult): AccountMergeResult; + + inflationResult(value?: InflationResult): InflationResult; + + manageDataResult(value?: ManageDataResult): ManageDataResult; + + bumpSeqResult(value?: BumpSequenceResult): BumpSequenceResult; + + manageBuyOfferResult(value?: ManageBuyOfferResult): ManageBuyOfferResult; + + pathPaymentStrictSendResult( + value?: PathPaymentStrictSendResult, + ): PathPaymentStrictSendResult; + + createClaimableBalanceResult( + value?: CreateClaimableBalanceResult, + ): CreateClaimableBalanceResult; + + claimClaimableBalanceResult( + value?: ClaimClaimableBalanceResult, + ): ClaimClaimableBalanceResult; + + beginSponsoringFutureReservesResult( + value?: BeginSponsoringFutureReservesResult, + ): BeginSponsoringFutureReservesResult; + + endSponsoringFutureReservesResult( + value?: EndSponsoringFutureReservesResult, + ): EndSponsoringFutureReservesResult; + + revokeSponsorshipResult( + value?: RevokeSponsorshipResult, + ): RevokeSponsorshipResult; + + clawbackResult(value?: ClawbackResult): ClawbackResult; + + clawbackClaimableBalanceResult( + value?: ClawbackClaimableBalanceResult, + ): ClawbackClaimableBalanceResult; + + setTrustLineFlagsResult( + value?: SetTrustLineFlagsResult, + ): SetTrustLineFlagsResult; + + liquidityPoolDepositResult( + value?: LiquidityPoolDepositResult, + ): LiquidityPoolDepositResult; + + liquidityPoolWithdrawResult( + value?: LiquidityPoolWithdrawResult, + ): LiquidityPoolWithdrawResult; + + invokeHostFunctionResult( + value?: InvokeHostFunctionResult, + ): InvokeHostFunctionResult; + + extendFootprintTtlResult( + value?: ExtendFootprintTtlResult, + ): ExtendFootprintTtlResult; + + restoreFootprintResult( + value?: RestoreFootprintResult, + ): RestoreFootprintResult; + + static createAccount(value: CreateAccountResult): OperationResultTr; + + static payment(value: PaymentResult): OperationResultTr; + + static pathPaymentStrictReceive( + value: PathPaymentStrictReceiveResult, + ): OperationResultTr; + + static manageSellOffer(value: ManageSellOfferResult): OperationResultTr; + + static createPassiveSellOffer( + value: ManageSellOfferResult, + ): OperationResultTr; + + static setOptions(value: SetOptionsResult): OperationResultTr; + + static changeTrust(value: ChangeTrustResult): OperationResultTr; + + static allowTrust(value: AllowTrustResult): OperationResultTr; + + static accountMerge(value: AccountMergeResult): OperationResultTr; + + static inflation(value: InflationResult): OperationResultTr; + + static manageData(value: ManageDataResult): OperationResultTr; + + static bumpSequence(value: BumpSequenceResult): OperationResultTr; + + static manageBuyOffer(value: ManageBuyOfferResult): OperationResultTr; + + static pathPaymentStrictSend( + value: PathPaymentStrictSendResult, + ): OperationResultTr; + + static createClaimableBalance( + value: CreateClaimableBalanceResult, + ): OperationResultTr; + + static claimClaimableBalance( + value: ClaimClaimableBalanceResult, + ): OperationResultTr; + + static beginSponsoringFutureReserves( + value: BeginSponsoringFutureReservesResult, + ): OperationResultTr; + + static endSponsoringFutureReserves( + value: EndSponsoringFutureReservesResult, + ): OperationResultTr; + + static revokeSponsorship(value: RevokeSponsorshipResult): OperationResultTr; + + static clawback(value: ClawbackResult): OperationResultTr; + + static clawbackClaimableBalance( + value: ClawbackClaimableBalanceResult, + ): OperationResultTr; + + static setTrustLineFlags(value: SetTrustLineFlagsResult): OperationResultTr; + + static liquidityPoolDeposit( + value: LiquidityPoolDepositResult, + ): OperationResultTr; + + static liquidityPoolWithdraw( + value: LiquidityPoolWithdrawResult, + ): OperationResultTr; + + static invokeHostFunction( + value: InvokeHostFunctionResult, + ): OperationResultTr; + + static extendFootprintTtl( + value: ExtendFootprintTtlResult, + ): OperationResultTr; + + static restoreFootprint(value: RestoreFootprintResult): OperationResultTr; + + value(): + | CreateAccountResult + | PaymentResult + | PathPaymentStrictReceiveResult + | ManageSellOfferResult + | ManageSellOfferResult + | SetOptionsResult + | ChangeTrustResult + | AllowTrustResult + | AccountMergeResult + | InflationResult + | ManageDataResult + | BumpSequenceResult + | ManageBuyOfferResult + | PathPaymentStrictSendResult + | CreateClaimableBalanceResult + | ClaimClaimableBalanceResult + | BeginSponsoringFutureReservesResult + | EndSponsoringFutureReservesResult + | RevokeSponsorshipResult + | ClawbackResult + | ClawbackClaimableBalanceResult + | SetTrustLineFlagsResult + | LiquidityPoolDepositResult + | LiquidityPoolWithdrawResult + | InvokeHostFunctionResult + | ExtendFootprintTtlResult + | RestoreFootprintResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationResultTr; + + static write(value: OperationResultTr, io: Buffer): void; + + static isValid(value: OperationResultTr): boolean; + + static toXDR(value: OperationResultTr): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationResultTr; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationResultTr; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationResult { + switch(): OperationResultCode; + + tr(value?: OperationResultTr): OperationResultTr; + + static opInner(value: OperationResultTr): OperationResult; + + static opBadAuth(): OperationResult; + + static opNoAccount(): OperationResult; + + static opNotSupported(): OperationResult; + + static opTooManySubentries(): OperationResult; + + static opExceededWorkLimit(): OperationResult; + + static opTooManySponsoring(): OperationResult; + + value(): OperationResultTr | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationResult; + + static write(value: OperationResult, io: Buffer): void; + + static isValid(value: OperationResult): boolean; + + static toXDR(value: OperationResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResultResult { + switch(): TransactionResultCode; + + results(value?: OperationResult[]): OperationResult[]; + + static txSuccess(value: OperationResult[]): InnerTransactionResultResult; + + static txFailed(value: OperationResult[]): InnerTransactionResultResult; + + static txTooEarly(): InnerTransactionResultResult; + + static txTooLate(): InnerTransactionResultResult; + + static txMissingOperation(): InnerTransactionResultResult; + + static txBadSeq(): InnerTransactionResultResult; + + static txBadAuth(): InnerTransactionResultResult; + + static txInsufficientBalance(): InnerTransactionResultResult; + + static txNoAccount(): InnerTransactionResultResult; + + static txInsufficientFee(): InnerTransactionResultResult; + + static txBadAuthExtra(): InnerTransactionResultResult; + + static txInternalError(): InnerTransactionResultResult; + + static txNotSupported(): InnerTransactionResultResult; + + static txBadSponsorship(): InnerTransactionResultResult; + + static txBadMinSeqAgeOrGap(): InnerTransactionResultResult; + + static txMalformed(): InnerTransactionResultResult; + + static txSorobanInvalid(): InnerTransactionResultResult; + + value(): OperationResult[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResultResult; + + static write(value: InnerTransactionResultResult, io: Buffer): void; + + static isValid(value: InnerTransactionResultResult): boolean; + + static toXDR(value: InnerTransactionResultResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResultResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResultResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResultExt { + switch(): number; + + static 0(): InnerTransactionResultExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResultExt; + + static write(value: InnerTransactionResultExt, io: Buffer): void; + + static isValid(value: InnerTransactionResultExt): boolean; + + static toXDR(value: InnerTransactionResultExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResultExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResultExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultResult { + switch(): TransactionResultCode; + + innerResultPair( + value?: InnerTransactionResultPair, + ): InnerTransactionResultPair; + + results(value?: OperationResult[]): OperationResult[]; + + static txFeeBumpInnerSuccess( + value: InnerTransactionResultPair, + ): TransactionResultResult; + + static txFeeBumpInnerFailed( + value: InnerTransactionResultPair, + ): TransactionResultResult; + + static txSuccess(value: OperationResult[]): TransactionResultResult; + + static txFailed(value: OperationResult[]): TransactionResultResult; + + static txTooEarly(): TransactionResultResult; + + static txTooLate(): TransactionResultResult; + + static txMissingOperation(): TransactionResultResult; + + static txBadSeq(): TransactionResultResult; + + static txBadAuth(): TransactionResultResult; + + static txInsufficientBalance(): TransactionResultResult; + + static txNoAccount(): TransactionResultResult; + + static txInsufficientFee(): TransactionResultResult; + + static txBadAuthExtra(): TransactionResultResult; + + static txInternalError(): TransactionResultResult; + + static txNotSupported(): TransactionResultResult; + + static txBadSponsorship(): TransactionResultResult; + + static txBadMinSeqAgeOrGap(): TransactionResultResult; + + static txMalformed(): TransactionResultResult; + + static txSorobanInvalid(): TransactionResultResult; + + value(): InnerTransactionResultPair | OperationResult[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultResult; + + static write(value: TransactionResultResult, io: Buffer): void; + + static isValid(value: TransactionResultResult): boolean; + + static toXDR(value: TransactionResultResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultExt { + switch(): number; + + static 0(): TransactionResultExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultExt; + + static write(value: TransactionResultExt, io: Buffer): void; + + static isValid(value: TransactionResultExt): boolean; + + static toXDR(value: TransactionResultExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExtensionPoint { + switch(): number; + + static 0(): ExtensionPoint; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExtensionPoint; + + static write(value: ExtensionPoint, io: Buffer): void; + + static isValid(value: ExtensionPoint): boolean; + + static toXDR(value: ExtensionPoint): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExtensionPoint; + + static fromXDR(input: string, format: 'hex' | 'base64'): ExtensionPoint; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PublicKey { + switch(): PublicKeyType; + + ed25519(value?: Buffer): Buffer; + + static publicKeyTypeEd25519(value: Buffer): PublicKey; + + value(): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PublicKey; + + static write(value: PublicKey, io: Buffer): void; + + static isValid(value: PublicKey): boolean; + + static toXDR(value: PublicKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PublicKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): PublicKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignerKey { + switch(): SignerKeyType; + + ed25519(value?: Buffer): Buffer; + + preAuthTx(value?: Buffer): Buffer; + + hashX(value?: Buffer): Buffer; + + ed25519SignedPayload( + value?: SignerKeyEd25519SignedPayload, + ): SignerKeyEd25519SignedPayload; + + static signerKeyTypeEd25519(value: Buffer): SignerKey; + + static signerKeyTypePreAuthTx(value: Buffer): SignerKey; + + static signerKeyTypeHashX(value: Buffer): SignerKey; + + static signerKeyTypeEd25519SignedPayload( + value: SignerKeyEd25519SignedPayload, + ): SignerKey; + + value(): Buffer | Buffer | Buffer | SignerKeyEd25519SignedPayload; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignerKey; + + static write(value: SignerKey, io: Buffer): void; + + static isValid(value: SignerKey): boolean; + + static toXDR(value: SignerKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SignerKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): SignerKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScError { + switch(): ScErrorType; + + contractCode(value?: number): number; + + code(value?: ScErrorCode): ScErrorCode; + + static sceContract(value: number): ScError; + + static sceWasmVm(value: ScErrorCode): ScError; + + static sceContext(value: ScErrorCode): ScError; + + static sceStorage(value: ScErrorCode): ScError; + + static sceObject(value: ScErrorCode): ScError; + + static sceCrypto(value: ScErrorCode): ScError; + + static sceEvents(value: ScErrorCode): ScError; + + static sceBudget(value: ScErrorCode): ScError; + + static sceValue(value: ScErrorCode): ScError; + + static sceAuth(value: ScErrorCode): ScError; + + value(): number | ScErrorCode; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScError; + + static write(value: ScError, io: Buffer): void; + + static isValid(value: ScError): boolean; + + static toXDR(value: ScError): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScError; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScError; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractExecutable { + switch(): ContractExecutableType; + + wasmHash(value?: Buffer): Buffer; + + static contractExecutableWasm(value: Buffer): ContractExecutable; + + static contractExecutableStellarAsset(): ContractExecutable; + + value(): Buffer | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractExecutable; + + static write(value: ContractExecutable, io: Buffer): void; + + static isValid(value: ContractExecutable): boolean; + + static toXDR(value: ContractExecutable): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractExecutable; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractExecutable; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScAddress { + switch(): ScAddressType; + + accountId(value?: AccountId): AccountId; + + contractId(value?: Buffer): Buffer; + + static scAddressTypeAccount(value: AccountId): ScAddress; + + static scAddressTypeContract(value: Buffer): ScAddress; + + value(): AccountId | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScAddress; + + static write(value: ScAddress, io: Buffer): void; + + static isValid(value: ScAddress): boolean; + + static toXDR(value: ScAddress): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScAddress; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScAddress; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScVal { + switch(): ScValType; + + b(value?: boolean): boolean; + + error(value?: ScError): ScError; + + u32(value?: number): number; + + i32(value?: number): number; + + u64(value?: Uint64): Uint64; + + i64(value?: Int64): Int64; + + timepoint(value?: TimePoint): TimePoint; + + duration(value?: Duration): Duration; + + u128(value?: UInt128Parts): UInt128Parts; + + i128(value?: Int128Parts): Int128Parts; + + u256(value?: UInt256Parts): UInt256Parts; + + i256(value?: Int256Parts): Int256Parts; + + bytes(value?: Buffer): Buffer; + + str(value?: string | Buffer): string | Buffer; + + sym(value?: string | Buffer): string | Buffer; + + vec(value?: null | ScVal[]): null | ScVal[]; + + map(value?: null | ScMapEntry[]): null | ScMapEntry[]; + + address(value?: ScAddress): ScAddress; + + nonceKey(value?: ScNonceKey): ScNonceKey; + + instance(value?: ScContractInstance): ScContractInstance; + + static scvBool(value: boolean): ScVal; + + static scvVoid(): ScVal; + + static scvError(value: ScError): ScVal; + + static scvU32(value: number): ScVal; + + static scvI32(value: number): ScVal; + + static scvU64(value: Uint64): ScVal; + + static scvI64(value: Int64): ScVal; + + static scvTimepoint(value: TimePoint): ScVal; + + static scvDuration(value: Duration): ScVal; + + static scvU128(value: UInt128Parts): ScVal; + + static scvI128(value: Int128Parts): ScVal; + + static scvU256(value: UInt256Parts): ScVal; + + static scvI256(value: Int256Parts): ScVal; + + static scvBytes(value: Buffer): ScVal; + + static scvString(value: string | Buffer): ScVal; + + static scvSymbol(value: string | Buffer): ScVal; + + static scvVec(value: null | ScVal[]): ScVal; + + static scvMap(value: null | ScMapEntry[]): ScVal; + + static scvAddress(value: ScAddress): ScVal; + + static scvLedgerKeyContractInstance(): ScVal; + + static scvLedgerKeyNonce(value: ScNonceKey): ScVal; + + static scvContractInstance(value: ScContractInstance): ScVal; + + value(): + | boolean + | ScError + | number + | number + | Uint64 + | Int64 + | TimePoint + | Duration + | UInt128Parts + | Int128Parts + | UInt256Parts + | Int256Parts + | Buffer + | string + | Buffer + | string + | Buffer + | null + | ScVal[] + | null + | ScMapEntry[] + | ScAddress + | ScNonceKey + | ScContractInstance + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScVal; + + static write(value: ScVal, io: Buffer): void; + + static isValid(value: ScVal): boolean; + + static toXDR(value: ScVal): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScVal; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScVal; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScEnvMetaEntry { + switch(): ScEnvMetaKind; + + interfaceVersion( + value?: ScEnvMetaEntryInterfaceVersion, + ): ScEnvMetaEntryInterfaceVersion; + + static scEnvMetaKindInterfaceVersion( + value: ScEnvMetaEntryInterfaceVersion, + ): ScEnvMetaEntry; + + value(): ScEnvMetaEntryInterfaceVersion; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScEnvMetaEntry; + + static write(value: ScEnvMetaEntry, io: Buffer): void; + + static isValid(value: ScEnvMetaEntry): boolean; + + static toXDR(value: ScEnvMetaEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScEnvMetaEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScEnvMetaEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScMetaEntry { + switch(): ScMetaKind; + + v0(value?: ScMetaV0): ScMetaV0; + + static scMetaV0(value: ScMetaV0): ScMetaEntry; + + value(): ScMetaV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScMetaEntry; + + static write(value: ScMetaEntry, io: Buffer): void; + + static isValid(value: ScMetaEntry): boolean; + + static toXDR(value: ScMetaEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScMetaEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScMetaEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeDef { + switch(): ScSpecType; + + option(value?: ScSpecTypeOption): ScSpecTypeOption; + + result(value?: ScSpecTypeResult): ScSpecTypeResult; + + vec(value?: ScSpecTypeVec): ScSpecTypeVec; + + map(value?: ScSpecTypeMap): ScSpecTypeMap; + + tuple(value?: ScSpecTypeTuple): ScSpecTypeTuple; + + bytesN(value?: ScSpecTypeBytesN): ScSpecTypeBytesN; + + udt(value?: ScSpecTypeUdt): ScSpecTypeUdt; + + static scSpecTypeVal(): ScSpecTypeDef; + + static scSpecTypeBool(): ScSpecTypeDef; + + static scSpecTypeVoid(): ScSpecTypeDef; + + static scSpecTypeError(): ScSpecTypeDef; + + static scSpecTypeU32(): ScSpecTypeDef; + + static scSpecTypeI32(): ScSpecTypeDef; + + static scSpecTypeU64(): ScSpecTypeDef; + + static scSpecTypeI64(): ScSpecTypeDef; + + static scSpecTypeTimepoint(): ScSpecTypeDef; + + static scSpecTypeDuration(): ScSpecTypeDef; + + static scSpecTypeU128(): ScSpecTypeDef; + + static scSpecTypeI128(): ScSpecTypeDef; + + static scSpecTypeU256(): ScSpecTypeDef; + + static scSpecTypeI256(): ScSpecTypeDef; + + static scSpecTypeBytes(): ScSpecTypeDef; + + static scSpecTypeString(): ScSpecTypeDef; + + static scSpecTypeSymbol(): ScSpecTypeDef; + + static scSpecTypeAddress(): ScSpecTypeDef; + + static scSpecTypeOption(value: ScSpecTypeOption): ScSpecTypeDef; + + static scSpecTypeResult(value: ScSpecTypeResult): ScSpecTypeDef; + + static scSpecTypeVec(value: ScSpecTypeVec): ScSpecTypeDef; + + static scSpecTypeMap(value: ScSpecTypeMap): ScSpecTypeDef; + + static scSpecTypeTuple(value: ScSpecTypeTuple): ScSpecTypeDef; + + static scSpecTypeBytesN(value: ScSpecTypeBytesN): ScSpecTypeDef; + + static scSpecTypeUdt(value: ScSpecTypeUdt): ScSpecTypeDef; + + value(): + | ScSpecTypeOption + | ScSpecTypeResult + | ScSpecTypeVec + | ScSpecTypeMap + | ScSpecTypeTuple + | ScSpecTypeBytesN + | ScSpecTypeUdt + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeDef; + + static write(value: ScSpecTypeDef, io: Buffer): void; + + static isValid(value: ScSpecTypeDef): boolean; + + static toXDR(value: ScSpecTypeDef): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeDef; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeDef; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionCaseV0 { + switch(): ScSpecUdtUnionCaseV0Kind; + + voidCase(value?: ScSpecUdtUnionCaseVoidV0): ScSpecUdtUnionCaseVoidV0; + + tupleCase(value?: ScSpecUdtUnionCaseTupleV0): ScSpecUdtUnionCaseTupleV0; + + static scSpecUdtUnionCaseVoidV0( + value: ScSpecUdtUnionCaseVoidV0, + ): ScSpecUdtUnionCaseV0; + + static scSpecUdtUnionCaseTupleV0( + value: ScSpecUdtUnionCaseTupleV0, + ): ScSpecUdtUnionCaseV0; + + value(): ScSpecUdtUnionCaseVoidV0 | ScSpecUdtUnionCaseTupleV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionCaseV0; + + static write(value: ScSpecUdtUnionCaseV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionCaseV0): boolean; + + static toXDR(value: ScSpecUdtUnionCaseV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionCaseV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtUnionCaseV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecEntry { + switch(): ScSpecEntryKind; + + functionV0(value?: ScSpecFunctionV0): ScSpecFunctionV0; + + udtStructV0(value?: ScSpecUdtStructV0): ScSpecUdtStructV0; + + udtUnionV0(value?: ScSpecUdtUnionV0): ScSpecUdtUnionV0; + + udtEnumV0(value?: ScSpecUdtEnumV0): ScSpecUdtEnumV0; + + udtErrorEnumV0(value?: ScSpecUdtErrorEnumV0): ScSpecUdtErrorEnumV0; + + static scSpecEntryFunctionV0(value: ScSpecFunctionV0): ScSpecEntry; + + static scSpecEntryUdtStructV0(value: ScSpecUdtStructV0): ScSpecEntry; + + static scSpecEntryUdtUnionV0(value: ScSpecUdtUnionV0): ScSpecEntry; + + static scSpecEntryUdtEnumV0(value: ScSpecUdtEnumV0): ScSpecEntry; + + static scSpecEntryUdtErrorEnumV0(value: ScSpecUdtErrorEnumV0): ScSpecEntry; + + value(): + | ScSpecFunctionV0 + | ScSpecUdtStructV0 + | ScSpecUdtUnionV0 + | ScSpecUdtEnumV0 + | ScSpecUdtErrorEnumV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecEntry; + + static write(value: ScSpecEntry, io: Buffer): void; + + static isValid(value: ScSpecEntry): boolean; + + static toXDR(value: ScSpecEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingEntry { + switch(): ConfigSettingId; + + contractMaxSizeBytes(value?: number): number; + + contractCompute( + value?: ConfigSettingContractComputeV0, + ): ConfigSettingContractComputeV0; + + contractLedgerCost( + value?: ConfigSettingContractLedgerCostV0, + ): ConfigSettingContractLedgerCostV0; + + contractHistoricalData( + value?: ConfigSettingContractHistoricalDataV0, + ): ConfigSettingContractHistoricalDataV0; + + contractEvents( + value?: ConfigSettingContractEventsV0, + ): ConfigSettingContractEventsV0; + + contractBandwidth( + value?: ConfigSettingContractBandwidthV0, + ): ConfigSettingContractBandwidthV0; + + contractCostParamsCpuInsns( + value?: ContractCostParamEntry[], + ): ContractCostParamEntry[]; + + contractCostParamsMemBytes( + value?: ContractCostParamEntry[], + ): ContractCostParamEntry[]; + + contractDataKeySizeBytes(value?: number): number; + + contractDataEntrySizeBytes(value?: number): number; + + stateArchivalSettings(value?: StateArchivalSettings): StateArchivalSettings; + + contractExecutionLanes( + value?: ConfigSettingContractExecutionLanesV0, + ): ConfigSettingContractExecutionLanesV0; + + bucketListSizeWindow(value?: Uint64[]): Uint64[]; + + evictionIterator(value?: EvictionIterator): EvictionIterator; + + static configSettingContractMaxSizeBytes(value: number): ConfigSettingEntry; + + static configSettingContractComputeV0( + value: ConfigSettingContractComputeV0, + ): ConfigSettingEntry; + + static configSettingContractLedgerCostV0( + value: ConfigSettingContractLedgerCostV0, + ): ConfigSettingEntry; + + static configSettingContractHistoricalDataV0( + value: ConfigSettingContractHistoricalDataV0, + ): ConfigSettingEntry; + + static configSettingContractEventsV0( + value: ConfigSettingContractEventsV0, + ): ConfigSettingEntry; + + static configSettingContractBandwidthV0( + value: ConfigSettingContractBandwidthV0, + ): ConfigSettingEntry; + + static configSettingContractCostParamsCpuInstructions( + value: ContractCostParamEntry[], + ): ConfigSettingEntry; + + static configSettingContractCostParamsMemoryBytes( + value: ContractCostParamEntry[], + ): ConfigSettingEntry; + + static configSettingContractDataKeySizeBytes( + value: number, + ): ConfigSettingEntry; + + static configSettingContractDataEntrySizeBytes( + value: number, + ): ConfigSettingEntry; + + static configSettingStateArchival( + value: StateArchivalSettings, + ): ConfigSettingEntry; + + static configSettingContractExecutionLanes( + value: ConfigSettingContractExecutionLanesV0, + ): ConfigSettingEntry; + + static configSettingBucketlistSizeWindow( + value: Uint64[], + ): ConfigSettingEntry; + + static configSettingEvictionIterator( + value: EvictionIterator, + ): ConfigSettingEntry; + + value(): + | number + | ConfigSettingContractComputeV0 + | ConfigSettingContractLedgerCostV0 + | ConfigSettingContractHistoricalDataV0 + | ConfigSettingContractEventsV0 + | ConfigSettingContractBandwidthV0 + | ContractCostParamEntry[] + | ContractCostParamEntry[] + | number + | number + | StateArchivalSettings + | ConfigSettingContractExecutionLanesV0 + | Uint64[] + | EvictionIterator; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingEntry; + + static write(value: ConfigSettingEntry, io: Buffer): void; + + static isValid(value: ConfigSettingEntry): boolean; + + static toXDR(value: ConfigSettingEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ConfigSettingEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ConfigSettingEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } +} diff --git a/node_modules/@stellar/stellar-base/types/index.d.ts b/node_modules/@stellar/stellar-base/types/index.d.ts new file mode 100644 index 00000000..4c70c981 --- /dev/null +++ b/node_modules/@stellar/stellar-base/types/index.d.ts @@ -0,0 +1,1319 @@ +// TypeScript Version: 2.9 + +/// +import { xdr } from './xdr'; + +export { xdr }; + +export class Account { + constructor(accountId: string, sequence: string); + accountId(): string; + sequenceNumber(): string; + incrementSequenceNumber(): void; +} + +export class Address { + constructor(address: string); + static fromString(address: string): Address; + static account(buffer: Buffer): Address; + static contract(buffer: Buffer): Address; + static fromScVal(scVal: xdr.ScVal): Address; + static fromScAddress(scAddress: xdr.ScAddress): Address; + toString(): string; + toScVal(): xdr.ScVal; + toScAddress(): xdr.ScAddress; + toBuffer(): Buffer; +} + +export class Contract { + constructor(contractId: string); + call(method: string, ...params: xdr.ScVal[]): xdr.Operation; + contractId(): string; + address(): Address; + getFootprint(): xdr.LedgerKey; + + toString(): string; +} + +export class MuxedAccount { + constructor(account: Account, sequence: string); + static fromAddress(mAddress: string, sequenceNum: string): MuxedAccount; + static parseBaseAddress(mAddress: string): string; + + /* Modeled after Account, above */ + accountId(): string; + sequenceNumber(): string; + incrementSequenceNumber(): void; + + baseAccount(): Account; + id(): string; + setId(id: string): MuxedAccount; + toXDRObject(): xdr.MuxedAccount; + equals(otherMuxedAccount: MuxedAccount): boolean; +} + +export namespace AssetType { + type native = 'native'; + type credit4 = 'credit_alphanum4'; + type credit12 = 'credit_alphanum12'; + type liquidityPoolShares = 'liquidity_pool_shares'; +} +export type AssetType = + | AssetType.native + | AssetType.credit4 + | AssetType.credit12 + | AssetType.liquidityPoolShares; + +export class Asset { + static native(): Asset; + static fromOperation(xdr: xdr.Asset): Asset; + static compare(assetA: Asset, assetB: Asset): -1 | 0 | 1; + + constructor(code: string, issuer?: string); + + getCode(): string; + getIssuer(): string; + getAssetType(): AssetType; + isNative(): boolean; + equals(other: Asset): boolean; + toXDRObject(): xdr.Asset; + toChangeTrustXDRObject(): xdr.ChangeTrustAsset; + toTrustLineXDRObject(): xdr.TrustLineAsset; + contractId(networkPassphrase: string): string; + + code: string; + issuer: string; +} + +export class LiquidityPoolAsset { + constructor(assetA: Asset, assetB: Asset, fee: number); + + static fromOperation(xdr: xdr.ChangeTrustAsset): LiquidityPoolAsset; + + toXDRObject(): xdr.ChangeTrustAsset; + getLiquidityPoolParameters(): LiquidityPoolParameters; + getAssetType(): AssetType.liquidityPoolShares; + equals(other: LiquidityPoolAsset): boolean; + + assetA: Asset; + assetB: Asset; + fee: number; +} + +export class LiquidityPoolId { + constructor(liquidityPoolId: string); + + static fromOperation(xdr: xdr.TrustLineAsset): LiquidityPoolId; + + toXDRObject(): xdr.TrustLineAsset; + getLiquidityPoolId(): string; + equals(other: LiquidityPoolId): boolean; + + liquidityPoolId: string; +} + +export class Claimant { + readonly destination: string; + readonly predicate: xdr.ClaimPredicate; + constructor(destination: string, predicate?: xdr.ClaimPredicate); + + toXDRObject(): xdr.Claimant; + + static fromXDR(claimantXdr: xdr.Claimant): Claimant; + static predicateUnconditional(): xdr.ClaimPredicate; + static predicateAnd(left: xdr.ClaimPredicate, right: xdr.ClaimPredicate): xdr.ClaimPredicate; + static predicateOr(left: xdr.ClaimPredicate, right: xdr.ClaimPredicate): xdr.ClaimPredicate; + static predicateNot(predicate: xdr.ClaimPredicate): xdr.ClaimPredicate; + static predicateBeforeAbsoluteTime(absBefore: string): xdr.ClaimPredicate; + static predicateBeforeRelativeTime(seconds: string): xdr.ClaimPredicate; +} + +export const FastSigning: boolean; + +export type KeypairType = 'ed25519'; + +export class Keypair { + static fromRawEd25519Seed(secretSeed: Buffer): Keypair; + static fromSecret(secretKey: string): Keypair; + static master(networkPassphrase: string): Keypair; + static fromPublicKey(publicKey: string): Keypair; + static random(): Keypair; + + constructor( + keys: + | { + type: KeypairType; + secretKey: string | Buffer; + publicKey?: string | Buffer + } + | { + type: KeypairType; + publicKey: string | Buffer + } + ); + + readonly type: KeypairType; + publicKey(): string; + secret(): string; + rawPublicKey(): Buffer; + rawSecretKey(): Buffer; + canSign(): boolean; + sign(data: Buffer): Buffer; + signDecorated(data: Buffer): xdr.DecoratedSignature; + signPayloadDecorated(data: Buffer): xdr.DecoratedSignature; + signatureHint(): Buffer; + verify(data: Buffer, signature: Buffer): boolean; + + xdrAccountId(): xdr.AccountId; + xdrPublicKey(): xdr.PublicKey; + xdrMuxedAccount(id: string): xdr.MuxedAccount; +} + +export const LiquidityPoolFeeV18 = 30; + +export function getLiquidityPoolId(liquidityPoolType: LiquidityPoolType, liquidityPoolParameters: LiquidityPoolParameters): Buffer; + +export namespace LiquidityPoolParameters { + interface ConstantProduct { + assetA: Asset; + assetB: Asset; + fee: number; + } +} +export type LiquidityPoolParameters = + | LiquidityPoolParameters.ConstantProduct; + +export namespace LiquidityPoolType { + type constantProduct = 'constant_product'; +} +export type LiquidityPoolType = + | LiquidityPoolType.constantProduct; + +export const MemoNone = 'none'; +export const MemoID = 'id'; +export const MemoText = 'text'; +export const MemoHash = 'hash'; +export const MemoReturn = 'return'; +export namespace MemoType { + type None = typeof MemoNone; + type ID = typeof MemoID; + type Text = typeof MemoText; + type Hash = typeof MemoHash; + type Return = typeof MemoReturn; +} +export type MemoType = + | MemoType.None + | MemoType.ID + | MemoType.Text + | MemoType.Hash + | MemoType.Return; +export type MemoValue = null | string | Buffer; + +export class Memo { + static fromXDRObject(memo: xdr.Memo): Memo; + static hash(hash: string | Buffer): Memo; + static id(id: string): Memo; + static none(): Memo; + static return(hash: string): Memo; + static text(text: string): Memo; + + constructor(type: MemoType.None, value?: null); + constructor(type: MemoType.Hash | MemoType.Return, value: Buffer); + constructor( + type: MemoType.Hash | MemoType.Return | MemoType.ID | MemoType.Text, + value: string + ); + constructor(type: T, value: MemoValue); + + type: T; + value: T extends MemoType.None + ? null + : T extends MemoType.ID + ? string + : T extends MemoType.Text + ? string | Buffer // github.com/stellar/js-stellar-base/issues/152 + : T extends MemoType.Hash + ? Buffer + : T extends MemoType.Return + ? Buffer + : MemoValue; + + toXDRObject(): xdr.Memo; +} + +export enum Networks { + PUBLIC = 'Public Global Stellar Network ; September 2015', + TESTNET = 'Test SDF Network ; September 2015', + FUTURENET = 'Test SDF Future Network ; October 2022', + SANDBOX = 'Local Sandbox Stellar Network ; September 2022', + STANDALONE = 'Standalone Network ; February 2017' +} + +export const AuthRequiredFlag: 1; +export const AuthRevocableFlag: 2; +export const AuthImmutableFlag: 4; +export const AuthClawbackEnabledFlag: 8; +export namespace AuthFlag { + type immutable = typeof AuthImmutableFlag; + type required = typeof AuthRequiredFlag; + type revocable = typeof AuthRevocableFlag; + type clawbackEnabled = typeof AuthClawbackEnabledFlag; +} +export type AuthFlag = + | AuthFlag.required + | AuthFlag.immutable + | AuthFlag.revocable + | AuthFlag.clawbackEnabled; + +export namespace TrustLineFlag { + type deauthorize = 0; + type authorize = 1; + type authorizeToMaintainLiabilities = 2; +} +export type TrustLineFlag = + | TrustLineFlag.deauthorize + | TrustLineFlag.authorize + | TrustLineFlag.authorizeToMaintainLiabilities; + +export namespace Signer { + interface Ed25519PublicKey { + ed25519PublicKey: string; + weight: number | undefined; + } + interface Sha256Hash { + sha256Hash: Buffer; + weight: number | undefined; + } + interface PreAuthTx { + preAuthTx: Buffer; + weight: number | undefined; + } + interface Ed25519SignedPayload { + ed25519SignedPayload: string; + weight?: number | string; + } +} +export namespace SignerKeyOptions { + interface Ed25519PublicKey { + ed25519PublicKey: string; + } + interface Sha256Hash { + sha256Hash: Buffer | string; + } + interface PreAuthTx { + preAuthTx: Buffer | string; + } + interface Ed25519SignedPayload { + ed25519SignedPayload: string; + } +} +export type Signer = + | Signer.Ed25519PublicKey + | Signer.Sha256Hash + | Signer.PreAuthTx + | Signer.Ed25519SignedPayload; + +export type SignerKeyOptions = + | SignerKeyOptions.Ed25519PublicKey + | SignerKeyOptions.Sha256Hash + | SignerKeyOptions.PreAuthTx + | SignerKeyOptions.Ed25519SignedPayload; + +export namespace SignerOptions { + interface Ed25519PublicKey { + ed25519PublicKey: string; + weight?: number | string; + } + interface Sha256Hash { + sha256Hash: Buffer | string; + weight?: number | string; + } + interface PreAuthTx { + preAuthTx: Buffer | string; + weight?: number | string; + } + interface Ed25519SignedPayload { + ed25519SignedPayload: string; + weight?: number | string; + } +} +export type SignerOptions = + | SignerOptions.Ed25519PublicKey + | SignerOptions.Sha256Hash + | SignerOptions.PreAuthTx + | SignerOptions.Ed25519SignedPayload; + +export namespace OperationType { + type CreateAccount = 'createAccount'; + type Payment = 'payment'; + type PathPaymentStrictReceive = 'pathPaymentStrictReceive'; + type PathPaymentStrictSend = 'pathPaymentStrictSend'; + type CreatePassiveSellOffer = 'createPassiveSellOffer'; + type ManageSellOffer = 'manageSellOffer'; + type ManageBuyOffer = 'manageBuyOffer'; + type SetOptions = 'setOptions'; + type ChangeTrust = 'changeTrust'; + type AllowTrust = 'allowTrust'; + type AccountMerge = 'accountMerge'; + type Inflation = 'inflation'; + type ManageData = 'manageData'; + type BumpSequence = 'bumpSequence'; + type CreateClaimableBalance = 'createClaimableBalance'; + type ClaimClaimableBalance = 'claimClaimableBalance'; + type BeginSponsoringFutureReserves = 'beginSponsoringFutureReserves'; + type EndSponsoringFutureReserves = 'endSponsoringFutureReserves'; + type RevokeSponsorship = 'revokeSponsorship'; + type Clawback = 'clawback'; + type ClawbackClaimableBalance = 'clawbackClaimableBalance'; + type SetTrustLineFlags = 'setTrustLineFlags'; + type LiquidityPoolDeposit = 'liquidityPoolDeposit'; + type LiquidityPoolWithdraw = 'liquidityPoolWithdraw'; + type InvokeHostFunction = 'invokeHostFunction'; + type ExtendFootprintTTL = 'extendFootprintTtl'; + type RestoreFootprint = 'restoreFootprint'; +} +export type OperationType = + | OperationType.CreateAccount + | OperationType.Payment + | OperationType.PathPaymentStrictReceive + | OperationType.PathPaymentStrictSend + | OperationType.CreatePassiveSellOffer + | OperationType.ManageSellOffer + | OperationType.ManageBuyOffer + | OperationType.SetOptions + | OperationType.ChangeTrust + | OperationType.AllowTrust + | OperationType.AccountMerge + | OperationType.Inflation + | OperationType.ManageData + | OperationType.BumpSequence + | OperationType.CreateClaimableBalance + | OperationType.ClaimClaimableBalance + | OperationType.BeginSponsoringFutureReserves + | OperationType.EndSponsoringFutureReserves + | OperationType.RevokeSponsorship + | OperationType.Clawback + | OperationType.ClawbackClaimableBalance + | OperationType.SetTrustLineFlags + | OperationType.LiquidityPoolDeposit + | OperationType.LiquidityPoolWithdraw + | OperationType.InvokeHostFunction + | OperationType.ExtendFootprintTTL + | OperationType.RestoreFootprint; + +export namespace OperationOptions { + interface BaseOptions { + source?: string; + } + interface AccountMerge extends BaseOptions { + destination: string; + } + interface AllowTrust extends BaseOptions { + trustor: string; + assetCode: string; + authorize?: boolean | TrustLineFlag; + } + interface ChangeTrust extends BaseOptions { + asset: Asset | LiquidityPoolAsset; + limit?: string; + } + interface CreateAccount extends BaseOptions { + destination: string; + startingBalance: string; + } + interface CreatePassiveSellOffer extends BaseOptions { + selling: Asset; + buying: Asset; + amount: string; + price: number | string | object /* bignumber.js */; + } + interface ManageSellOffer extends CreatePassiveSellOffer { + offerId?: number | string; + } + interface ManageBuyOffer extends BaseOptions { + selling: Asset; + buying: Asset; + buyAmount: string; + price: number | string | object /* bignumber.js */; + offerId?: number | string; + } + // tslint:disable-next-line + interface Inflation extends BaseOptions { + // tslint:disable-line + } + interface ManageData extends BaseOptions { + name: string; + value: string | Buffer | null; + } + interface PathPaymentStrictReceive extends BaseOptions { + sendAsset: Asset; + sendMax: string; + destination: string; + destAsset: Asset; + destAmount: string; + path?: Asset[]; + } + interface PathPaymentStrictSend extends BaseOptions { + sendAsset: Asset; + sendAmount: string; + destination: string; + destAsset: Asset; + destMin: string; + path?: Asset[]; + } + interface Payment extends BaseOptions { + amount: string; + asset: Asset; + destination: string; + } + interface SetOptions extends BaseOptions { + inflationDest?: string; + clearFlags?: AuthFlag; + setFlags?: AuthFlag; + masterWeight?: number | string; + lowThreshold?: number | string; + medThreshold?: number | string; + highThreshold?: number | string; + homeDomain?: string; + signer?: T; + } + interface BumpSequence extends BaseOptions { + bumpTo: string; + } + interface CreateClaimableBalance extends BaseOptions { + asset: Asset; + amount: string; + claimants: Claimant[]; + } + interface ClaimClaimableBalance extends BaseOptions { + balanceId: string; + } + interface BeginSponsoringFutureReserves extends BaseOptions { + sponsoredId: string; + } + interface RevokeAccountSponsorship extends BaseOptions { + account: string; + } + interface RevokeTrustlineSponsorship extends BaseOptions { + account: string; + asset: Asset | LiquidityPoolId; + } + interface RevokeOfferSponsorship extends BaseOptions { + seller: string; + offerId: string; + } + interface RevokeDataSponsorship extends BaseOptions { + account: string; + name: string; + } + interface RevokeClaimableBalanceSponsorship extends BaseOptions { + balanceId: string; + } + interface RevokeLiquidityPoolSponsorship extends BaseOptions { + liquidityPoolId: string; + } + interface RevokeSignerSponsorship extends BaseOptions { + account: string; + signer: SignerKeyOptions; + } + interface Clawback extends BaseOptions { + asset: Asset; + amount: string; + from: string; + } + interface ClawbackClaimableBalance extends BaseOptions { + balanceId: string; + } + interface SetTrustLineFlags extends BaseOptions { + trustor: string; + asset: Asset; + flags: { + authorized?: boolean; + authorizedToMaintainLiabilities?: boolean; + clawbackEnabled?: boolean; + }; + } + interface LiquidityPoolDeposit extends BaseOptions { + liquidityPoolId: string; + maxAmountA: string; + maxAmountB: string; + minPrice: number | string | object /* bignumber.js */; + maxPrice: number | string | object /* bignumber.js */; + } + interface LiquidityPoolWithdraw extends BaseOptions { + liquidityPoolId: string; + amount: string; + minAmountA: string; + minAmountB: string; + } + + interface BaseInvocationOptions extends BaseOptions { + auth?: xdr.SorobanAuthorizationEntry[]; + } + interface InvokeHostFunction extends BaseInvocationOptions { + func: xdr.HostFunction; + } + interface InvokeContractFunction extends BaseInvocationOptions { + contract: string; + function: string; + args: xdr.ScVal[]; + } + interface CreateCustomContract extends BaseInvocationOptions { + address: Address; + wasmHash: Buffer | Uint8Array; + constructorArgs?: xdr.ScVal[]; + salt?: Buffer | Uint8Array; + } + interface CreateStellarAssetContract extends BaseOptions { + asset: Asset | string; + } + interface UploadContractWasm extends BaseOptions { + wasm: Buffer | Uint8Array; + } + + interface ExtendFootprintTTL extends BaseOptions { + extendTo: number; + } + type RestoreFootprint = BaseOptions; +} +export type OperationOptions = + | OperationOptions.CreateAccount + | OperationOptions.Payment + | OperationOptions.PathPaymentStrictReceive + | OperationOptions.PathPaymentStrictSend + | OperationOptions.CreatePassiveSellOffer + | OperationOptions.ManageSellOffer + | OperationOptions.ManageBuyOffer + | OperationOptions.SetOptions + | OperationOptions.ChangeTrust + | OperationOptions.AllowTrust + | OperationOptions.AccountMerge + | OperationOptions.Inflation + | OperationOptions.ManageData + | OperationOptions.BumpSequence + | OperationOptions.CreateClaimableBalance + | OperationOptions.ClaimClaimableBalance + | OperationOptions.BeginSponsoringFutureReserves + | OperationOptions.RevokeAccountSponsorship + | OperationOptions.RevokeTrustlineSponsorship + | OperationOptions.RevokeOfferSponsorship + | OperationOptions.RevokeDataSponsorship + | OperationOptions.RevokeClaimableBalanceSponsorship + | OperationOptions.RevokeLiquidityPoolSponsorship + | OperationOptions.RevokeSignerSponsorship + | OperationOptions.Clawback + | OperationOptions.ClawbackClaimableBalance + | OperationOptions.SetTrustLineFlags + | OperationOptions.LiquidityPoolDeposit + | OperationOptions.LiquidityPoolWithdraw + | OperationOptions.InvokeHostFunction + | OperationOptions.ExtendFootprintTTL + | OperationOptions.RestoreFootprint + | OperationOptions.CreateCustomContract + | OperationOptions.CreateStellarAssetContract + | OperationOptions.InvokeContractFunction + | OperationOptions.UploadContractWasm; + +export namespace Operation { + interface BaseOperation { + type: T; + source?: string; + } + + interface AccountMerge extends BaseOperation { + destination: string; + } + function accountMerge( + options: OperationOptions.AccountMerge + ): xdr.Operation; + + interface AllowTrust extends BaseOperation { + trustor: string; + assetCode: string; + // this is a boolean or a number so that it can support protocol 12 or 13 + authorize: boolean | TrustLineFlag | undefined; + } + function allowTrust( + options: OperationOptions.AllowTrust + ): xdr.Operation; + + interface ChangeTrust extends BaseOperation { + line: Asset | LiquidityPoolAsset; + limit: string; + } + function changeTrust( + options: OperationOptions.ChangeTrust + ): xdr.Operation; + + interface CreateAccount extends BaseOperation { + destination: string; + startingBalance: string; + } + function createAccount( + options: OperationOptions.CreateAccount + ): xdr.Operation; + + interface CreatePassiveSellOffer + extends BaseOperation { + selling: Asset; + buying: Asset; + amount: string; + price: string; + } + function createPassiveSellOffer( + options: OperationOptions.CreatePassiveSellOffer + ): xdr.Operation; + + interface Inflation extends BaseOperation {} + function inflation( + options: OperationOptions.Inflation + ): xdr.Operation; + + interface ManageData extends BaseOperation { + name: string; + value?: Buffer; + } + function manageData( + options: OperationOptions.ManageData + ): xdr.Operation; + + interface ManageSellOffer + extends BaseOperation { + selling: Asset; + buying: Asset; + amount: string; + price: string; + offerId: string; + } + function manageSellOffer( + options: OperationOptions.ManageSellOffer + ): xdr.Operation; + + interface ManageBuyOffer extends BaseOperation { + selling: Asset; + buying: Asset; + buyAmount: string; + price: string; + offerId: string; + } + function manageBuyOffer( + options: OperationOptions.ManageBuyOffer + ): xdr.Operation; + + interface PathPaymentStrictReceive + extends BaseOperation { + sendAsset: Asset; + sendMax: string; + destination: string; + destAsset: Asset; + destAmount: string; + path: Asset[]; + } + function pathPaymentStrictReceive( + options: OperationOptions.PathPaymentStrictReceive + ): xdr.Operation; + + interface PathPaymentStrictSend + extends BaseOperation { + sendAsset: Asset; + sendAmount: string; + destination: string; + destAsset: Asset; + destMin: string; + path: Asset[]; + } + function pathPaymentStrictSend( + options: OperationOptions.PathPaymentStrictSend + ): xdr.Operation; + + interface Payment extends BaseOperation { + amount: string; + asset: Asset; + destination: string; + } + function payment(options: OperationOptions.Payment): xdr.Operation; + + interface SetOptions + extends BaseOperation { + inflationDest?: string; + clearFlags?: AuthFlag; + setFlags?: AuthFlag; + masterWeight?: number; + lowThreshold?: number; + medThreshold?: number; + highThreshold?: number; + homeDomain?: string; + signer: T extends { ed25519PublicKey: any } + ? Signer.Ed25519PublicKey + : T extends { sha256Hash: any } + ? Signer.Sha256Hash + : T extends { preAuthTx: any } + ? Signer.PreAuthTx + : T extends { ed25519SignedPayload: any } + ? Signer.Ed25519SignedPayload + : never; + } + function setOptions( + options: OperationOptions.SetOptions + ): xdr.Operation>; + + interface BumpSequence extends BaseOperation { + bumpTo: string; + } + function bumpSequence( + options: OperationOptions.BumpSequence + ): xdr.Operation; + + interface CreateClaimableBalance extends BaseOperation { + amount: string; + asset: Asset; + claimants: Claimant[]; + } + function createClaimableBalance( + options: OperationOptions.CreateClaimableBalance + ): xdr.Operation; + + interface ClaimClaimableBalance extends BaseOperation { + balanceId: string; + } + function claimClaimableBalance( + options: OperationOptions.ClaimClaimableBalance + ): xdr.Operation; + + interface BeginSponsoringFutureReserves extends BaseOperation { + sponsoredId: string; + } + function beginSponsoringFutureReserves( + options: OperationOptions.BeginSponsoringFutureReserves + ): xdr.Operation; + + interface EndSponsoringFutureReserves extends BaseOperation { + } + function endSponsoringFutureReserves( + options: OperationOptions.BaseOptions + ): xdr.Operation; + + interface RevokeAccountSponsorship extends BaseOperation { + account: string; + } + function revokeAccountSponsorship( + options: OperationOptions.RevokeAccountSponsorship + ): xdr.Operation; + + interface RevokeTrustlineSponsorship extends BaseOperation { + account: string; + asset: Asset | LiquidityPoolId; + } + function revokeTrustlineSponsorship( + options: OperationOptions.RevokeTrustlineSponsorship + ): xdr.Operation; + + interface RevokeOfferSponsorship extends BaseOperation { + seller: string; + offerId: string; + } + function revokeOfferSponsorship( + options: OperationOptions.RevokeOfferSponsorship + ): xdr.Operation; + + interface RevokeDataSponsorship extends BaseOperation { + account: string; + name: string; + } + function revokeDataSponsorship( + options: OperationOptions.RevokeDataSponsorship + ): xdr.Operation; + + interface RevokeClaimableBalanceSponsorship extends BaseOperation { + balanceId: string; + } + function revokeClaimableBalanceSponsorship( + options: OperationOptions.RevokeClaimableBalanceSponsorship + ): xdr.Operation; + + interface RevokeLiquidityPoolSponsorship extends BaseOperation { + liquidityPoolId: string; + } + function revokeLiquidityPoolSponsorship( + options: OperationOptions.RevokeLiquidityPoolSponsorship + ): xdr.Operation; + + interface RevokeSignerSponsorship extends BaseOperation { + account: string; + signer: SignerKeyOptions; + } + function revokeSignerSponsorship( + options: OperationOptions.RevokeSignerSponsorship + ): xdr.Operation; + + interface Clawback extends BaseOperation { + asset: Asset; + amount: string; + from: string; + } + function clawback( + options: OperationOptions.Clawback + ): xdr.Operation; + + interface ClawbackClaimableBalance extends BaseOperation { + balanceId: string; + } + function clawbackClaimableBalance( + options: OperationOptions.ClawbackClaimableBalance + ): xdr.Operation; + + interface SetTrustLineFlags extends BaseOperation { + trustor: string; + asset: Asset; + flags: { + authorized?: boolean; + authorizedToMaintainLiabilities?: boolean; + clawbackEnabled?: boolean; + }; + } + function setTrustLineFlags( + options: OperationOptions.SetTrustLineFlags + ): xdr.Operation; + interface LiquidityPoolDeposit extends BaseOperation { + liquidityPoolId: string; + maxAmountA: string; + maxAmountB: string; + minPrice: string; + maxPrice: string; + } + function liquidityPoolDeposit( + options: OperationOptions.LiquidityPoolDeposit + ): xdr.Operation; + interface LiquidityPoolWithdraw extends BaseOperation { + liquidityPoolId: string; + amount: string; + minAmountA: string; + minAmountB: string; + } + function liquidityPoolWithdraw( + options: OperationOptions.LiquidityPoolWithdraw + ): xdr.Operation; + interface InvokeHostFunction extends BaseOperation { + func: xdr.HostFunction; + auth?: xdr.SorobanAuthorizationEntry[]; + } + function invokeHostFunction( + options: OperationOptions.InvokeHostFunction + ): xdr.Operation; + + function extendFootprintTtl( + options: OperationOptions.ExtendFootprintTTL + ): xdr.Operation; + interface ExtendFootprintTTL extends BaseOperation { + extendTo: number; + } + + function restoreFootprint(options: OperationOptions.RestoreFootprint): + xdr.Operation; + interface RestoreFootprint extends BaseOperation {} + + function createCustomContract( + opts: OperationOptions.CreateCustomContract + ): xdr.Operation; + function createStellarAssetContract( + opts: OperationOptions.CreateStellarAssetContract + ): xdr.Operation; + function invokeContractFunction( + opts: OperationOptions.InvokeContractFunction + ): xdr.Operation; + function uploadContractWasm( + opts: OperationOptions.UploadContractWasm + ): xdr.Operation; + + function fromXDRObject( + xdrOperation: xdr.Operation + ): T; +} +export type Operation = + | Operation.CreateAccount + | Operation.Payment + | Operation.PathPaymentStrictReceive + | Operation.PathPaymentStrictSend + | Operation.CreatePassiveSellOffer + | Operation.ManageSellOffer + | Operation.ManageBuyOffer + | Operation.SetOptions + | Operation.ChangeTrust + | Operation.AllowTrust + | Operation.AccountMerge + | Operation.Inflation + | Operation.ManageData + | Operation.BumpSequence + | Operation.CreateClaimableBalance + | Operation.ClaimClaimableBalance + | Operation.BeginSponsoringFutureReserves + | Operation.EndSponsoringFutureReserves + | Operation.RevokeAccountSponsorship + | Operation.RevokeTrustlineSponsorship + | Operation.RevokeOfferSponsorship + | Operation.RevokeDataSponsorship + | Operation.RevokeClaimableBalanceSponsorship + | Operation.RevokeLiquidityPoolSponsorship + | Operation.RevokeSignerSponsorship + | Operation.Clawback + | Operation.ClawbackClaimableBalance + | Operation.SetTrustLineFlags + | Operation.LiquidityPoolDeposit + | Operation.LiquidityPoolWithdraw + | Operation.InvokeHostFunction + | Operation.ExtendFootprintTTL + | Operation.RestoreFootprint; + +export namespace StrKey { + function encodeEd25519PublicKey(data: Buffer): string; + function decodeEd25519PublicKey(address: string): Buffer; + function isValidEd25519PublicKey(Key: string): boolean; + + function encodeEd25519SecretSeed(data: Buffer): string; + function decodeEd25519SecretSeed(address: string): Buffer; + function isValidEd25519SecretSeed(seed: string): boolean; + + function encodeMed25519PublicKey(data: Buffer): string; + function decodeMed25519PublicKey(address: string): Buffer; + function isValidMed25519PublicKey(publicKey: string): boolean; + + function encodeSignedPayload(data: Buffer): string; + function decodeSignedPayload(address: string): Buffer; + function isValidSignedPayload(address: string): boolean; + + function encodePreAuthTx(data: Buffer): string; + function decodePreAuthTx(address: string): Buffer; + + function encodeSha256Hash(data: Buffer): string; + function decodeSha256Hash(address: string): Buffer; + + function encodeContract(data: Buffer): string; + function decodeContract(address: string): Buffer; + function isValidContract(address: string): boolean; +} + +export namespace SignerKey { + function decodeAddress(address: string): xdr.SignerKey; + function encodeSignerKey(signerKey: xdr.SignerKey): string; +} + +export class TransactionI { + addSignature(publicKey: string, signature: string): void; + addDecoratedSignature(signature: xdr.DecoratedSignature): void; + + fee: string; + getKeypairSignature(keypair: Keypair): string; + hash(): Buffer; + networkPassphrase: string; + sign(...keypairs: Keypair[]): void; + signatureBase(): Buffer; + signatures: xdr.DecoratedSignature[]; + signHashX(preimage: Buffer | string): void; + toEnvelope(): xdr.TransactionEnvelope; + toXDR(): string; +} + +export class FeeBumpTransaction extends TransactionI { + constructor( + envelope: string | xdr.TransactionEnvelope, + networkPassphrase: string + ); + feeSource: string; + innerTransaction: Transaction; + get operations(): Operation[]; +} + +export class Transaction< + TMemo extends Memo = Memo, + TOps extends Operation[] = Operation[] +> extends TransactionI { + constructor( + envelope: string | xdr.TransactionEnvelope, + networkPassphrase: string + ); + memo: TMemo; + operations: TOps; + sequence: string; + source: string; + timeBounds?: { + minTime: string; + maxTime: string; + }; + ledgerBounds?: { + minLedger: number; + maxLedger: number; + }; + minAccountSequence?: string; + minAccountSequenceAge?: number; + minAccountSequenceLedgerGap?: number; + extraSigners?: string[]; + + getClaimableBalanceId(opIndex: number): string; +} + +export const BASE_FEE = '100'; +export const TimeoutInfinite = 0; + +export class TransactionBuilder { + constructor( + sourceAccount: Account, + options?: TransactionBuilder.TransactionBuilderOptions + ); + addOperation(operation: xdr.Operation): this; + addOperationAt(op: xdr.Operation, i: number): this; + clearOperations(): this; + clearOperationAt(i: number): this; + addMemo(memo: Memo): this; + setTimeout(timeoutInSeconds: number): this; + setTimebounds(min: Date | number, max: Date | number): this; + setLedgerbounds(minLedger: number, maxLedger: number): this; + setMinAccountSequence(minAccountSequence: string): this; + setMinAccountSequenceAge(durationInSeconds: number): this; + setMinAccountSequenceLedgerGap(gap: number): this; + setExtraSigners(extraSigners: string[]): this; + setSorobanData(sorobanData: string | xdr.SorobanTransactionData): this; + build(): Transaction; + setNetworkPassphrase(networkPassphrase: string): this; + + static cloneFrom( + tx: Transaction, + optionOverrides?: TransactionBuilder.TransactionBuilderOptions + ): TransactionBuilder; + static buildFeeBumpTransaction( + feeSource: Keypair | string, + baseFee: string, + innerTx: Transaction, + networkPassphrase: string + ): FeeBumpTransaction; + static fromXDR( + envelope: string | xdr.TransactionEnvelope, + networkPassphrase: string + ): Transaction | FeeBumpTransaction; + +} + +export namespace TransactionBuilder { + interface TransactionBuilderOptions { + fee: string; + memo?: Memo; + networkPassphrase?: string; + // preconditions: + timebounds?: { + minTime?: Date | number | string; + maxTime?: Date | number | string; + }; + ledgerbounds?: { + minLedger?: number; + maxLedger?: number; + }; + minAccountSequence?: string; + minAccountSequenceAge?: number; + minAccountSequenceLedgerGap?: number; + extraSigners?: string[]; + sorobanData?: string | xdr.SorobanTransactionData; + } +} + +export function hash(data: Buffer): Buffer; +export function sign(data: Buffer, rawSecret: Buffer): Buffer; +export function verify( + data: Buffer, + signature: Buffer, + rawPublicKey: Buffer +): boolean; + +export function decodeAddressToMuxedAccount(address: string, supportMuxing: boolean): xdr.MuxedAccount; +export function encodeMuxedAccountToAddress(account: xdr.MuxedAccount, supportMuxing: boolean): string; +export function encodeMuxedAccount(gAddress: string, id: string): xdr.MuxedAccount; +export function extractBaseAddress(address: string): string; + +export type IntLike = string | number | bigint; +export type ScIntType = + | 'i64' + | 'u64' + | 'i128' + | 'u128' + | 'i256' + | 'u256'; + +export class XdrLargeInt { + constructor( + type: ScIntType, + values: IntLike | IntLike[] + ); + + toNumber(): number; + toBigInt(): bigint; + + toI64(): xdr.ScVal; + toU64(): xdr.ScVal; + toI128(): xdr.ScVal; + toU128(): xdr.ScVal; + toI256(): xdr.ScVal; + toU256(): xdr.ScVal; + toScVal(): xdr.ScVal; + + valueOf(): any; // FIXME + toString(): string; + toJSON(): { + value: string; + type: ScIntType; + }; + + static isType(t: string): t is ScIntType; + static getType(scvType: string): ScIntType; +} + +export class ScInt extends XdrLargeInt { + constructor(value: IntLike, opts?: { type: ScIntType }); +} + +export function scValToBigInt(scv: xdr.ScVal): bigint; +export function nativeToScVal(val: any, opts?: { type: any }): xdr.ScVal; +export function scValToNative(scv: xdr.ScVal): any; + +interface SorobanEvent { + type: 'system'|'contract'|'diagnostic'; // xdr.ContractEventType.name + contractId?: string; // C... encoded strkey + + topics: any[]; // essentially a call of map(event.body.topics, scValToNative) + data: any; // similarly, scValToNative(rawEvent.data); +} + +export function humanizeEvents( + events: xdr.DiagnosticEvent[] | xdr.ContractEvent[] +): SorobanEvent[]; + +export class SorobanDataBuilder { + constructor(data?: string | Uint8Array | Buffer | xdr.SorobanTransactionData); + static fromXDR(data: Uint8Array | Buffer | string): SorobanDataBuilder; + + setResourceFee(fee: IntLike): SorobanDataBuilder; + setResources( + cpuInstrs: number, + readBytes: number, + writeBytes: number + ): SorobanDataBuilder; + + setFootprint( + readOnly?: xdr.LedgerKey[] | null, + readWrite?: xdr.LedgerKey[] | null + ): SorobanDataBuilder; + appendFootprint( + readOnly: xdr.LedgerKey[], + readWrite: xdr.LedgerKey[] + ): SorobanDataBuilder; + + setReadOnly(keys: xdr.LedgerKey[]): SorobanDataBuilder; + setReadWrite(keys: xdr.LedgerKey[]): SorobanDataBuilder; + + getFootprint(): xdr.LedgerFootprint; + getReadOnly(): xdr.LedgerKey[]; + getReadWrite(): xdr.LedgerKey[]; + + build(): xdr.SorobanTransactionData; +} + +type BufferLike = Buffer | Uint8Array | ArrayBuffer; +export type SigningCallback = ( + preimage: xdr.HashIdPreimage +) => Promise< + BufferLike | + { signature: BufferLike, publicKey: string } +>; + +export function authorizeInvocation( + signer: Keypair | SigningCallback, + validUntil: number, + invocation: xdr.SorobanAuthorizedInvocation, + publicKey?: string, + networkPassphrase?: string +): Promise; + +export function authorizeEntry( + entry: xdr.SorobanAuthorizationEntry, + signer: Keypair | SigningCallback, + validUntilLedgerSeq: number, + networkPassphrase?: string +): Promise; + +export interface CreateInvocation { + type: 'wasm' | 'sac'; + token?: string; + wasm?: { + hash: string; + address: string; + salt: string; + constructorArgs?: any[]; + }; +} + +export interface ExecuteInvocation { + source: string; + function: string; + args: any[]; +} + +export interface InvocationTree { + type: 'execute' | 'create'; + args: CreateInvocation | ExecuteInvocation; + invocations: InvocationTree[]; +} + +export function buildInvocationTree( + root: xdr.SorobanAuthorizedInvocation +): InvocationTree; + +export type InvocationWalker = ( + node: xdr.SorobanAuthorizedInvocation, + depth: number, + parent?: any +) => boolean|null|void; + +export function walkInvocationTree( + root: xdr.SorobanAuthorizedInvocation, + callback: InvocationWalker +): void; + +export namespace Soroban { + function formatTokenAmount(address: string, decimals: number): string; + function parseTokenAmount(value: string, decimals: number): string; +} + +export namespace cereal { + // These belong in @stellar/js-xdr but that would be a huge lift since we'd + // need types for the whole thing. + export class XdrWriter { + constructor(buffer?: Buffer|number); + + alloc(size: number): number; + resize(minRequiredSize: number): void; + finalize(): Buffer; + toArray(): number[]; + + write(value: Buffer|string, size: number): XdrReader; + writeInt32BE(value: number): void; + writeUInt32BE(value: number): void; + writeBigInt64BE(value: BigInt): void; + writeBigUInt64BE(value: BigInt): void; + writeFloatBE(value: number): void; + writeDoubleBE(value: number): void; + } + + export class XdrReader { + constructor(data: Buffer); + + eof: boolean; + advance(size: number): number; + rewind(): void; + ensureInputConsumed(): void; + + read(size: number): Buffer; + readInt32BE(): number; + readUInt32BE(): number; + readBigInt64BE(): BigInt; + readBigUInt64BE(): BigInt; + readFloatBE(): number; + readDoubleBE(): number; + } +} diff --git a/node_modules/@stellar/stellar-base/types/next.d.ts b/node_modules/@stellar/stellar-base/types/next.d.ts new file mode 100644 index 00000000..ced3636f --- /dev/null +++ b/node_modules/@stellar/stellar-base/types/next.d.ts @@ -0,0 +1,15884 @@ +// Automatically generated by xdrgen on 2024-09-12T11:09:00-08:00 +// DO NOT EDIT or your changes may be overwritten +import { Operation } from './index'; + +export {}; + +// Hidden namespace as hack to work around name collision. +declare namespace xdrHidden { + // tslint:disable-line:strict-export-declare-modifiers + class Operation2 { + constructor(attributes: { + sourceAccount: null | xdr.MuxedAccount; + body: xdr.OperationBody; + }); + + sourceAccount(value?: null | xdr.MuxedAccount): null | xdr.MuxedAccount; + + body(value?: xdr.OperationBody): xdr.OperationBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): xdr.Operation; + + static write(value: xdr.Operation, io: Buffer): void; + + static isValid(value: xdr.Operation): boolean; + + static toXDR(value: xdr.Operation): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): xdr.Operation; + + static fromXDR(input: string, format: 'hex' | 'base64'): xdr.Operation; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } +} + +export namespace xdr { + export import Operation = xdrHidden.Operation2; // tslint:disable-line:strict-export-declare-modifiers + + type Hash = Opaque[]; // workaround, cause unknown + + interface SignedInt { + readonly MAX_VALUE: 2147483647; + readonly MIN_VALUE: -2147483648; + read(io: Buffer): number; + write(value: number, io: Buffer): void; + isValid(value: number): boolean; + toXDR(value: number): Buffer; + fromXDR(input: Buffer, format?: 'raw'): number; + fromXDR(input: string, format: 'hex' | 'base64'): number; + validateXDR(input: Buffer, format?: 'raw'): boolean; + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + interface UnsignedInt { + readonly MAX_VALUE: 4294967295; + readonly MIN_VALUE: 0; + read(io: Buffer): number; + write(value: number, io: Buffer): void; + isValid(value: number): boolean; + toXDR(value: number): Buffer; + fromXDR(input: Buffer, format?: 'raw'): number; + fromXDR(input: string, format: 'hex' | 'base64'): number; + validateXDR(input: Buffer, format?: 'raw'): boolean; + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + interface Bool { + read(io: Buffer): boolean; + write(value: boolean, io: Buffer): void; + isValid(value: boolean): boolean; + toXDR(value: boolean): Buffer; + fromXDR(input: Buffer, format?: 'raw'): boolean; + fromXDR(input: string, format: 'hex' | 'base64'): boolean; + validateXDR(input: Buffer, format?: 'raw'): boolean; + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Hyper { + low: number; + + high: number; + + unsigned: boolean; + + constructor( + values: string | bigint | number | (string | bigint | number)[], + ); + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static toXDR(value: Hyper): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Hyper; + + static fromXDR(input: string, format: 'hex' | 'base64'): Hyper; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + + static readonly MAX_VALUE: Hyper; + + static readonly MIN_VALUE: Hyper; + + static read(io: Buffer): Hyper; + + static write(value: Hyper, io: Buffer): void; + + static fromString(input: string): Hyper; + + static fromBytes(low: number, high: number): Hyper; + + static isValid(value: Hyper): boolean; + + toBigInt(): bigint; + + toString(): string; + } + + class UnsignedHyper { + low: number; + + high: number; + + unsigned: boolean; + + constructor( + values: string | bigint | number | (string | bigint | number)[], + ); + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static toXDR(value: UnsignedHyper): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UnsignedHyper; + + static fromXDR(input: string, format: 'hex' | 'base64'): UnsignedHyper; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + + static readonly MAX_VALUE: UnsignedHyper; + + static readonly MIN_VALUE: UnsignedHyper; + + static read(io: Buffer): UnsignedHyper; + + static write(value: UnsignedHyper, io: Buffer): void; + + static fromString(input: string): UnsignedHyper; + + static fromBytes(low: number, high: number): UnsignedHyper; + + static isValid(value: UnsignedHyper): boolean; + + toBigInt(): bigint; + + toString(): string; + } + + class XDRString { + constructor(maxLength: 4294967295); + + read(io: Buffer): Buffer; + + readString(io: Buffer): string; + + write(value: string | Buffer, io: Buffer): void; + + isValid(value: string | number[] | Buffer): boolean; + + toXDR(value: string | Buffer): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): Buffer; + + fromXDR(input: string, format: 'hex' | 'base64'): Buffer; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class XDRArray { + read(io: Buffer): Buffer; + + write(value: T[], io: Buffer): void; + + isValid(value: T[]): boolean; + + toXDR(value: T[]): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): T[]; + + fromXDR(input: string, format: 'hex' | 'base64'): T[]; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Opaque { + constructor(length: number); + + read(io: Buffer): Buffer; + + write(value: Buffer, io: Buffer): void; + + isValid(value: Buffer): boolean; + + toXDR(value: Buffer): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): Buffer; + + fromXDR(input: string, format: 'hex' | 'base64'): Buffer; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class VarOpaque extends Opaque {} + + class Option { + constructor(childType: { + read(io: any): any; + write(value: any, io: Buffer): void; + isValid(value: any): boolean; + }); + + read(io: Buffer): any; + + write(value: any, io: Buffer): void; + + isValid(value: any): boolean; + + toXDR(value: any): Buffer; + + fromXDR(input: Buffer, format?: 'raw'): any; + + fromXDR(input: string, format: 'hex' | 'base64'): any; + + validateXDR(input: Buffer, format?: 'raw'): boolean; + + validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementType { + readonly name: + | 'scpStPrepare' + | 'scpStConfirm' + | 'scpStExternalize' + | 'scpStNominate'; + + readonly value: 0 | 1 | 2 | 3; + + static scpStPrepare(): ScpStatementType; + + static scpStConfirm(): ScpStatementType; + + static scpStExternalize(): ScpStatementType; + + static scpStNominate(): ScpStatementType; + } + + class AssetType { + readonly name: + | 'assetTypeNative' + | 'assetTypeCreditAlphanum4' + | 'assetTypeCreditAlphanum12' + | 'assetTypePoolShare'; + + readonly value: 0 | 1 | 2 | 3; + + static assetTypeNative(): AssetType; + + static assetTypeCreditAlphanum4(): AssetType; + + static assetTypeCreditAlphanum12(): AssetType; + + static assetTypePoolShare(): AssetType; + } + + class ThresholdIndices { + readonly name: + | 'thresholdMasterWeight' + | 'thresholdLow' + | 'thresholdMed' + | 'thresholdHigh'; + + readonly value: 0 | 1 | 2 | 3; + + static thresholdMasterWeight(): ThresholdIndices; + + static thresholdLow(): ThresholdIndices; + + static thresholdMed(): ThresholdIndices; + + static thresholdHigh(): ThresholdIndices; + } + + class LedgerEntryType { + readonly name: + | 'account' + | 'trustline' + | 'offer' + | 'data' + | 'claimableBalance' + | 'liquidityPool' + | 'contractData' + | 'contractCode' + | 'configSetting' + | 'ttl'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static account(): LedgerEntryType; + + static trustline(): LedgerEntryType; + + static offer(): LedgerEntryType; + + static data(): LedgerEntryType; + + static claimableBalance(): LedgerEntryType; + + static liquidityPool(): LedgerEntryType; + + static contractData(): LedgerEntryType; + + static contractCode(): LedgerEntryType; + + static configSetting(): LedgerEntryType; + + static ttl(): LedgerEntryType; + } + + class AccountFlags { + readonly name: + | 'authRequiredFlag' + | 'authRevocableFlag' + | 'authImmutableFlag' + | 'authClawbackEnabledFlag'; + + readonly value: 1 | 2 | 4 | 8; + + static authRequiredFlag(): AccountFlags; + + static authRevocableFlag(): AccountFlags; + + static authImmutableFlag(): AccountFlags; + + static authClawbackEnabledFlag(): AccountFlags; + } + + class TrustLineFlags { + readonly name: + | 'authorizedFlag' + | 'authorizedToMaintainLiabilitiesFlag' + | 'trustlineClawbackEnabledFlag'; + + readonly value: 1 | 2 | 4; + + static authorizedFlag(): TrustLineFlags; + + static authorizedToMaintainLiabilitiesFlag(): TrustLineFlags; + + static trustlineClawbackEnabledFlag(): TrustLineFlags; + } + + class LiquidityPoolType { + readonly name: 'liquidityPoolConstantProduct'; + + readonly value: 0; + + static liquidityPoolConstantProduct(): LiquidityPoolType; + } + + class OfferEntryFlags { + readonly name: 'passiveFlag'; + + readonly value: 1; + + static passiveFlag(): OfferEntryFlags; + } + + class ClaimPredicateType { + readonly name: + | 'claimPredicateUnconditional' + | 'claimPredicateAnd' + | 'claimPredicateOr' + | 'claimPredicateNot' + | 'claimPredicateBeforeAbsoluteTime' + | 'claimPredicateBeforeRelativeTime'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5; + + static claimPredicateUnconditional(): ClaimPredicateType; + + static claimPredicateAnd(): ClaimPredicateType; + + static claimPredicateOr(): ClaimPredicateType; + + static claimPredicateNot(): ClaimPredicateType; + + static claimPredicateBeforeAbsoluteTime(): ClaimPredicateType; + + static claimPredicateBeforeRelativeTime(): ClaimPredicateType; + } + + class ClaimantType { + readonly name: 'claimantTypeV0'; + + readonly value: 0; + + static claimantTypeV0(): ClaimantType; + } + + class ClaimableBalanceIdType { + readonly name: 'claimableBalanceIdTypeV0'; + + readonly value: 0; + + static claimableBalanceIdTypeV0(): ClaimableBalanceIdType; + } + + class ClaimableBalanceFlags { + readonly name: 'claimableBalanceClawbackEnabledFlag'; + + readonly value: 1; + + static claimableBalanceClawbackEnabledFlag(): ClaimableBalanceFlags; + } + + class ContractDataDurability { + readonly name: 'temporary' | 'persistent'; + + readonly value: 0 | 1; + + static temporary(): ContractDataDurability; + + static persistent(): ContractDataDurability; + } + + class EnvelopeType { + readonly name: + | 'envelopeTypeTxV0' + | 'envelopeTypeScp' + | 'envelopeTypeTx' + | 'envelopeTypeAuth' + | 'envelopeTypeScpvalue' + | 'envelopeTypeTxFeeBump' + | 'envelopeTypeOpId' + | 'envelopeTypePoolRevokeOpId' + | 'envelopeTypeContractId' + | 'envelopeTypeSorobanAuthorization'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static envelopeTypeTxV0(): EnvelopeType; + + static envelopeTypeScp(): EnvelopeType; + + static envelopeTypeTx(): EnvelopeType; + + static envelopeTypeAuth(): EnvelopeType; + + static envelopeTypeScpvalue(): EnvelopeType; + + static envelopeTypeTxFeeBump(): EnvelopeType; + + static envelopeTypeOpId(): EnvelopeType; + + static envelopeTypePoolRevokeOpId(): EnvelopeType; + + static envelopeTypeContractId(): EnvelopeType; + + static envelopeTypeSorobanAuthorization(): EnvelopeType; + } + + class BucketListType { + readonly name: 'live' | 'hotArchive' | 'coldArchive'; + + readonly value: 0 | 1 | 2; + + static live(): BucketListType; + + static hotArchive(): BucketListType; + + static coldArchive(): BucketListType; + } + + class BucketEntryType { + readonly name: 'metaentry' | 'liveentry' | 'deadentry' | 'initentry'; + + readonly value: -1 | 0 | 1 | 2; + + static metaentry(): BucketEntryType; + + static liveentry(): BucketEntryType; + + static deadentry(): BucketEntryType; + + static initentry(): BucketEntryType; + } + + class HotArchiveBucketEntryType { + readonly name: + | 'hotArchiveMetaentry' + | 'hotArchiveArchived' + | 'hotArchiveLive' + | 'hotArchiveDeleted'; + + readonly value: -1 | 0 | 1 | 2; + + static hotArchiveMetaentry(): HotArchiveBucketEntryType; + + static hotArchiveArchived(): HotArchiveBucketEntryType; + + static hotArchiveLive(): HotArchiveBucketEntryType; + + static hotArchiveDeleted(): HotArchiveBucketEntryType; + } + + class ColdArchiveBucketEntryType { + readonly name: + | 'coldArchiveMetaentry' + | 'coldArchiveArchivedLeaf' + | 'coldArchiveDeletedLeaf' + | 'coldArchiveBoundaryLeaf' + | 'coldArchiveHash'; + + readonly value: -1 | 0 | 1 | 2 | 3; + + static coldArchiveMetaentry(): ColdArchiveBucketEntryType; + + static coldArchiveArchivedLeaf(): ColdArchiveBucketEntryType; + + static coldArchiveDeletedLeaf(): ColdArchiveBucketEntryType; + + static coldArchiveBoundaryLeaf(): ColdArchiveBucketEntryType; + + static coldArchiveHash(): ColdArchiveBucketEntryType; + } + + class StellarValueType { + readonly name: 'stellarValueBasic' | 'stellarValueSigned'; + + readonly value: 0 | 1; + + static stellarValueBasic(): StellarValueType; + + static stellarValueSigned(): StellarValueType; + } + + class LedgerHeaderFlags { + readonly name: + | 'disableLiquidityPoolTradingFlag' + | 'disableLiquidityPoolDepositFlag' + | 'disableLiquidityPoolWithdrawalFlag'; + + readonly value: 1 | 2 | 4; + + static disableLiquidityPoolTradingFlag(): LedgerHeaderFlags; + + static disableLiquidityPoolDepositFlag(): LedgerHeaderFlags; + + static disableLiquidityPoolWithdrawalFlag(): LedgerHeaderFlags; + } + + class LedgerUpgradeType { + readonly name: + | 'ledgerUpgradeVersion' + | 'ledgerUpgradeBaseFee' + | 'ledgerUpgradeMaxTxSetSize' + | 'ledgerUpgradeBaseReserve' + | 'ledgerUpgradeFlags' + | 'ledgerUpgradeConfig' + | 'ledgerUpgradeMaxSorobanTxSetSize'; + + readonly value: 1 | 2 | 3 | 4 | 5 | 6 | 7; + + static ledgerUpgradeVersion(): LedgerUpgradeType; + + static ledgerUpgradeBaseFee(): LedgerUpgradeType; + + static ledgerUpgradeMaxTxSetSize(): LedgerUpgradeType; + + static ledgerUpgradeBaseReserve(): LedgerUpgradeType; + + static ledgerUpgradeFlags(): LedgerUpgradeType; + + static ledgerUpgradeConfig(): LedgerUpgradeType; + + static ledgerUpgradeMaxSorobanTxSetSize(): LedgerUpgradeType; + } + + class TxSetComponentType { + readonly name: 'txsetCompTxsMaybeDiscountedFee'; + + readonly value: 0; + + static txsetCompTxsMaybeDiscountedFee(): TxSetComponentType; + } + + class LedgerEntryChangeType { + readonly name: + | 'ledgerEntryCreated' + | 'ledgerEntryUpdated' + | 'ledgerEntryRemoved' + | 'ledgerEntryState'; + + readonly value: 0 | 1 | 2 | 3; + + static ledgerEntryCreated(): LedgerEntryChangeType; + + static ledgerEntryUpdated(): LedgerEntryChangeType; + + static ledgerEntryRemoved(): LedgerEntryChangeType; + + static ledgerEntryState(): LedgerEntryChangeType; + } + + class ContractEventType { + readonly name: 'system' | 'contract' | 'diagnostic'; + + readonly value: 0 | 1 | 2; + + static system(): ContractEventType; + + static contract(): ContractEventType; + + static diagnostic(): ContractEventType; + } + + class ErrorCode { + readonly name: 'errMisc' | 'errData' | 'errConf' | 'errAuth' | 'errLoad'; + + readonly value: 0 | 1 | 2 | 3 | 4; + + static errMisc(): ErrorCode; + + static errData(): ErrorCode; + + static errConf(): ErrorCode; + + static errAuth(): ErrorCode; + + static errLoad(): ErrorCode; + } + + class IpAddrType { + readonly name: 'iPv4' | 'iPv6'; + + readonly value: 0 | 1; + + static iPv4(): IpAddrType; + + static iPv6(): IpAddrType; + } + + class MessageType { + readonly name: + | 'errorMsg' + | 'auth' + | 'dontHave' + | 'getPeers' + | 'peers' + | 'getTxSet' + | 'txSet' + | 'generalizedTxSet' + | 'transaction' + | 'getScpQuorumset' + | 'scpQuorumset' + | 'scpMessage' + | 'getScpState' + | 'hello' + | 'surveyRequest' + | 'surveyResponse' + | 'sendMore' + | 'sendMoreExtended' + | 'floodAdvert' + | 'floodDemand' + | 'timeSlicedSurveyRequest' + | 'timeSlicedSurveyResponse' + | 'timeSlicedSurveyStartCollecting' + | 'timeSlicedSurveyStopCollecting'; + + readonly value: + | 0 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 17 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 20 + | 18 + | 19 + | 21 + | 22 + | 23 + | 24; + + static errorMsg(): MessageType; + + static auth(): MessageType; + + static dontHave(): MessageType; + + static getPeers(): MessageType; + + static peers(): MessageType; + + static getTxSet(): MessageType; + + static txSet(): MessageType; + + static generalizedTxSet(): MessageType; + + static transaction(): MessageType; + + static getScpQuorumset(): MessageType; + + static scpQuorumset(): MessageType; + + static scpMessage(): MessageType; + + static getScpState(): MessageType; + + static hello(): MessageType; + + static surveyRequest(): MessageType; + + static surveyResponse(): MessageType; + + static sendMore(): MessageType; + + static sendMoreExtended(): MessageType; + + static floodAdvert(): MessageType; + + static floodDemand(): MessageType; + + static timeSlicedSurveyRequest(): MessageType; + + static timeSlicedSurveyResponse(): MessageType; + + static timeSlicedSurveyStartCollecting(): MessageType; + + static timeSlicedSurveyStopCollecting(): MessageType; + } + + class SurveyMessageCommandType { + readonly name: 'surveyTopology' | 'timeSlicedSurveyTopology'; + + readonly value: 0 | 1; + + static surveyTopology(): SurveyMessageCommandType; + + static timeSlicedSurveyTopology(): SurveyMessageCommandType; + } + + class SurveyMessageResponseType { + readonly name: + | 'surveyTopologyResponseV0' + | 'surveyTopologyResponseV1' + | 'surveyTopologyResponseV2'; + + readonly value: 0 | 1 | 2; + + static surveyTopologyResponseV0(): SurveyMessageResponseType; + + static surveyTopologyResponseV1(): SurveyMessageResponseType; + + static surveyTopologyResponseV2(): SurveyMessageResponseType; + } + + class OperationType { + readonly name: + | 'createAccount' + | 'payment' + | 'pathPaymentStrictReceive' + | 'manageSellOffer' + | 'createPassiveSellOffer' + | 'setOptions' + | 'changeTrust' + | 'allowTrust' + | 'accountMerge' + | 'inflation' + | 'manageData' + | 'bumpSequence' + | 'manageBuyOffer' + | 'pathPaymentStrictSend' + | 'createClaimableBalance' + | 'claimClaimableBalance' + | 'beginSponsoringFutureReserves' + | 'endSponsoringFutureReserves' + | 'revokeSponsorship' + | 'clawback' + | 'clawbackClaimableBalance' + | 'setTrustLineFlags' + | 'liquidityPoolDeposit' + | 'liquidityPoolWithdraw' + | 'invokeHostFunction' + | 'extendFootprintTtl' + | 'restoreFootprint'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26; + + static createAccount(): OperationType; + + static payment(): OperationType; + + static pathPaymentStrictReceive(): OperationType; + + static manageSellOffer(): OperationType; + + static createPassiveSellOffer(): OperationType; + + static setOptions(): OperationType; + + static changeTrust(): OperationType; + + static allowTrust(): OperationType; + + static accountMerge(): OperationType; + + static inflation(): OperationType; + + static manageData(): OperationType; + + static bumpSequence(): OperationType; + + static manageBuyOffer(): OperationType; + + static pathPaymentStrictSend(): OperationType; + + static createClaimableBalance(): OperationType; + + static claimClaimableBalance(): OperationType; + + static beginSponsoringFutureReserves(): OperationType; + + static endSponsoringFutureReserves(): OperationType; + + static revokeSponsorship(): OperationType; + + static clawback(): OperationType; + + static clawbackClaimableBalance(): OperationType; + + static setTrustLineFlags(): OperationType; + + static liquidityPoolDeposit(): OperationType; + + static liquidityPoolWithdraw(): OperationType; + + static invokeHostFunction(): OperationType; + + static extendFootprintTtl(): OperationType; + + static restoreFootprint(): OperationType; + } + + class RevokeSponsorshipType { + readonly name: 'revokeSponsorshipLedgerEntry' | 'revokeSponsorshipSigner'; + + readonly value: 0 | 1; + + static revokeSponsorshipLedgerEntry(): RevokeSponsorshipType; + + static revokeSponsorshipSigner(): RevokeSponsorshipType; + } + + class HostFunctionType { + readonly name: + | 'hostFunctionTypeInvokeContract' + | 'hostFunctionTypeCreateContract' + | 'hostFunctionTypeUploadContractWasm' + | 'hostFunctionTypeCreateContractV2'; + + readonly value: 0 | 1 | 2 | 3; + + static hostFunctionTypeInvokeContract(): HostFunctionType; + + static hostFunctionTypeCreateContract(): HostFunctionType; + + static hostFunctionTypeUploadContractWasm(): HostFunctionType; + + static hostFunctionTypeCreateContractV2(): HostFunctionType; + } + + class ContractIdPreimageType { + readonly name: + | 'contractIdPreimageFromAddress' + | 'contractIdPreimageFromAsset'; + + readonly value: 0 | 1; + + static contractIdPreimageFromAddress(): ContractIdPreimageType; + + static contractIdPreimageFromAsset(): ContractIdPreimageType; + } + + class SorobanAuthorizedFunctionType { + readonly name: + | 'sorobanAuthorizedFunctionTypeContractFn' + | 'sorobanAuthorizedFunctionTypeCreateContractHostFn' + | 'sorobanAuthorizedFunctionTypeCreateContractV2HostFn'; + + readonly value: 0 | 1 | 2; + + static sorobanAuthorizedFunctionTypeContractFn(): SorobanAuthorizedFunctionType; + + static sorobanAuthorizedFunctionTypeCreateContractHostFn(): SorobanAuthorizedFunctionType; + + static sorobanAuthorizedFunctionTypeCreateContractV2HostFn(): SorobanAuthorizedFunctionType; + } + + class SorobanCredentialsType { + readonly name: + | 'sorobanCredentialsSourceAccount' + | 'sorobanCredentialsAddress'; + + readonly value: 0 | 1; + + static sorobanCredentialsSourceAccount(): SorobanCredentialsType; + + static sorobanCredentialsAddress(): SorobanCredentialsType; + } + + class MemoType { + readonly name: + | 'memoNone' + | 'memoText' + | 'memoId' + | 'memoHash' + | 'memoReturn'; + + readonly value: 0 | 1 | 2 | 3 | 4; + + static memoNone(): MemoType; + + static memoText(): MemoType; + + static memoId(): MemoType; + + static memoHash(): MemoType; + + static memoReturn(): MemoType; + } + + class PreconditionType { + readonly name: 'precondNone' | 'precondTime' | 'precondV2'; + + readonly value: 0 | 1 | 2; + + static precondNone(): PreconditionType; + + static precondTime(): PreconditionType; + + static precondV2(): PreconditionType; + } + + class ArchivalProofType { + readonly name: 'existence' | 'nonexistence'; + + readonly value: 0 | 1; + + static existence(): ArchivalProofType; + + static nonexistence(): ArchivalProofType; + } + + class ClaimAtomType { + readonly name: + | 'claimAtomTypeV0' + | 'claimAtomTypeOrderBook' + | 'claimAtomTypeLiquidityPool'; + + readonly value: 0 | 1 | 2; + + static claimAtomTypeV0(): ClaimAtomType; + + static claimAtomTypeOrderBook(): ClaimAtomType; + + static claimAtomTypeLiquidityPool(): ClaimAtomType; + } + + class CreateAccountResultCode { + readonly name: + | 'createAccountSuccess' + | 'createAccountMalformed' + | 'createAccountUnderfunded' + | 'createAccountLowReserve' + | 'createAccountAlreadyExist'; + + readonly value: 0 | -1 | -2 | -3 | -4; + + static createAccountSuccess(): CreateAccountResultCode; + + static createAccountMalformed(): CreateAccountResultCode; + + static createAccountUnderfunded(): CreateAccountResultCode; + + static createAccountLowReserve(): CreateAccountResultCode; + + static createAccountAlreadyExist(): CreateAccountResultCode; + } + + class PaymentResultCode { + readonly name: + | 'paymentSuccess' + | 'paymentMalformed' + | 'paymentUnderfunded' + | 'paymentSrcNoTrust' + | 'paymentSrcNotAuthorized' + | 'paymentNoDestination' + | 'paymentNoTrust' + | 'paymentNotAuthorized' + | 'paymentLineFull' + | 'paymentNoIssuer'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9; + + static paymentSuccess(): PaymentResultCode; + + static paymentMalformed(): PaymentResultCode; + + static paymentUnderfunded(): PaymentResultCode; + + static paymentSrcNoTrust(): PaymentResultCode; + + static paymentSrcNotAuthorized(): PaymentResultCode; + + static paymentNoDestination(): PaymentResultCode; + + static paymentNoTrust(): PaymentResultCode; + + static paymentNotAuthorized(): PaymentResultCode; + + static paymentLineFull(): PaymentResultCode; + + static paymentNoIssuer(): PaymentResultCode; + } + + class PathPaymentStrictReceiveResultCode { + readonly name: + | 'pathPaymentStrictReceiveSuccess' + | 'pathPaymentStrictReceiveMalformed' + | 'pathPaymentStrictReceiveUnderfunded' + | 'pathPaymentStrictReceiveSrcNoTrust' + | 'pathPaymentStrictReceiveSrcNotAuthorized' + | 'pathPaymentStrictReceiveNoDestination' + | 'pathPaymentStrictReceiveNoTrust' + | 'pathPaymentStrictReceiveNotAuthorized' + | 'pathPaymentStrictReceiveLineFull' + | 'pathPaymentStrictReceiveNoIssuer' + | 'pathPaymentStrictReceiveTooFewOffers' + | 'pathPaymentStrictReceiveOfferCrossSelf' + | 'pathPaymentStrictReceiveOverSendmax'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static pathPaymentStrictReceiveSuccess(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveMalformed(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveUnderfunded(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveSrcNoTrust(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveSrcNotAuthorized(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNoDestination(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNoTrust(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNotAuthorized(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveLineFull(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveNoIssuer(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveTooFewOffers(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveOfferCrossSelf(): PathPaymentStrictReceiveResultCode; + + static pathPaymentStrictReceiveOverSendmax(): PathPaymentStrictReceiveResultCode; + } + + class PathPaymentStrictSendResultCode { + readonly name: + | 'pathPaymentStrictSendSuccess' + | 'pathPaymentStrictSendMalformed' + | 'pathPaymentStrictSendUnderfunded' + | 'pathPaymentStrictSendSrcNoTrust' + | 'pathPaymentStrictSendSrcNotAuthorized' + | 'pathPaymentStrictSendNoDestination' + | 'pathPaymentStrictSendNoTrust' + | 'pathPaymentStrictSendNotAuthorized' + | 'pathPaymentStrictSendLineFull' + | 'pathPaymentStrictSendNoIssuer' + | 'pathPaymentStrictSendTooFewOffers' + | 'pathPaymentStrictSendOfferCrossSelf' + | 'pathPaymentStrictSendUnderDestmin'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static pathPaymentStrictSendSuccess(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendMalformed(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendUnderfunded(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendSrcNoTrust(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendSrcNotAuthorized(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNoDestination(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNoTrust(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNotAuthorized(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendLineFull(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendNoIssuer(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendTooFewOffers(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendOfferCrossSelf(): PathPaymentStrictSendResultCode; + + static pathPaymentStrictSendUnderDestmin(): PathPaymentStrictSendResultCode; + } + + class ManageSellOfferResultCode { + readonly name: + | 'manageSellOfferSuccess' + | 'manageSellOfferMalformed' + | 'manageSellOfferSellNoTrust' + | 'manageSellOfferBuyNoTrust' + | 'manageSellOfferSellNotAuthorized' + | 'manageSellOfferBuyNotAuthorized' + | 'manageSellOfferLineFull' + | 'manageSellOfferUnderfunded' + | 'manageSellOfferCrossSelf' + | 'manageSellOfferSellNoIssuer' + | 'manageSellOfferBuyNoIssuer' + | 'manageSellOfferNotFound' + | 'manageSellOfferLowReserve'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static manageSellOfferSuccess(): ManageSellOfferResultCode; + + static manageSellOfferMalformed(): ManageSellOfferResultCode; + + static manageSellOfferSellNoTrust(): ManageSellOfferResultCode; + + static manageSellOfferBuyNoTrust(): ManageSellOfferResultCode; + + static manageSellOfferSellNotAuthorized(): ManageSellOfferResultCode; + + static manageSellOfferBuyNotAuthorized(): ManageSellOfferResultCode; + + static manageSellOfferLineFull(): ManageSellOfferResultCode; + + static manageSellOfferUnderfunded(): ManageSellOfferResultCode; + + static manageSellOfferCrossSelf(): ManageSellOfferResultCode; + + static manageSellOfferSellNoIssuer(): ManageSellOfferResultCode; + + static manageSellOfferBuyNoIssuer(): ManageSellOfferResultCode; + + static manageSellOfferNotFound(): ManageSellOfferResultCode; + + static manageSellOfferLowReserve(): ManageSellOfferResultCode; + } + + class ManageOfferEffect { + readonly name: + | 'manageOfferCreated' + | 'manageOfferUpdated' + | 'manageOfferDeleted'; + + readonly value: 0 | 1 | 2; + + static manageOfferCreated(): ManageOfferEffect; + + static manageOfferUpdated(): ManageOfferEffect; + + static manageOfferDeleted(): ManageOfferEffect; + } + + class ManageBuyOfferResultCode { + readonly name: + | 'manageBuyOfferSuccess' + | 'manageBuyOfferMalformed' + | 'manageBuyOfferSellNoTrust' + | 'manageBuyOfferBuyNoTrust' + | 'manageBuyOfferSellNotAuthorized' + | 'manageBuyOfferBuyNotAuthorized' + | 'manageBuyOfferLineFull' + | 'manageBuyOfferUnderfunded' + | 'manageBuyOfferCrossSelf' + | 'manageBuyOfferSellNoIssuer' + | 'manageBuyOfferBuyNoIssuer' + | 'manageBuyOfferNotFound' + | 'manageBuyOfferLowReserve'; + + readonly value: + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12; + + static manageBuyOfferSuccess(): ManageBuyOfferResultCode; + + static manageBuyOfferMalformed(): ManageBuyOfferResultCode; + + static manageBuyOfferSellNoTrust(): ManageBuyOfferResultCode; + + static manageBuyOfferBuyNoTrust(): ManageBuyOfferResultCode; + + static manageBuyOfferSellNotAuthorized(): ManageBuyOfferResultCode; + + static manageBuyOfferBuyNotAuthorized(): ManageBuyOfferResultCode; + + static manageBuyOfferLineFull(): ManageBuyOfferResultCode; + + static manageBuyOfferUnderfunded(): ManageBuyOfferResultCode; + + static manageBuyOfferCrossSelf(): ManageBuyOfferResultCode; + + static manageBuyOfferSellNoIssuer(): ManageBuyOfferResultCode; + + static manageBuyOfferBuyNoIssuer(): ManageBuyOfferResultCode; + + static manageBuyOfferNotFound(): ManageBuyOfferResultCode; + + static manageBuyOfferLowReserve(): ManageBuyOfferResultCode; + } + + class SetOptionsResultCode { + readonly name: + | 'setOptionsSuccess' + | 'setOptionsLowReserve' + | 'setOptionsTooManySigners' + | 'setOptionsBadFlags' + | 'setOptionsInvalidInflation' + | 'setOptionsCantChange' + | 'setOptionsUnknownFlag' + | 'setOptionsThresholdOutOfRange' + | 'setOptionsBadSigner' + | 'setOptionsInvalidHomeDomain' + | 'setOptionsAuthRevocableRequired'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10; + + static setOptionsSuccess(): SetOptionsResultCode; + + static setOptionsLowReserve(): SetOptionsResultCode; + + static setOptionsTooManySigners(): SetOptionsResultCode; + + static setOptionsBadFlags(): SetOptionsResultCode; + + static setOptionsInvalidInflation(): SetOptionsResultCode; + + static setOptionsCantChange(): SetOptionsResultCode; + + static setOptionsUnknownFlag(): SetOptionsResultCode; + + static setOptionsThresholdOutOfRange(): SetOptionsResultCode; + + static setOptionsBadSigner(): SetOptionsResultCode; + + static setOptionsInvalidHomeDomain(): SetOptionsResultCode; + + static setOptionsAuthRevocableRequired(): SetOptionsResultCode; + } + + class ChangeTrustResultCode { + readonly name: + | 'changeTrustSuccess' + | 'changeTrustMalformed' + | 'changeTrustNoIssuer' + | 'changeTrustInvalidLimit' + | 'changeTrustLowReserve' + | 'changeTrustSelfNotAllowed' + | 'changeTrustTrustLineMissing' + | 'changeTrustCannotDelete' + | 'changeTrustNotAuthMaintainLiabilities'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8; + + static changeTrustSuccess(): ChangeTrustResultCode; + + static changeTrustMalformed(): ChangeTrustResultCode; + + static changeTrustNoIssuer(): ChangeTrustResultCode; + + static changeTrustInvalidLimit(): ChangeTrustResultCode; + + static changeTrustLowReserve(): ChangeTrustResultCode; + + static changeTrustSelfNotAllowed(): ChangeTrustResultCode; + + static changeTrustTrustLineMissing(): ChangeTrustResultCode; + + static changeTrustCannotDelete(): ChangeTrustResultCode; + + static changeTrustNotAuthMaintainLiabilities(): ChangeTrustResultCode; + } + + class AllowTrustResultCode { + readonly name: + | 'allowTrustSuccess' + | 'allowTrustMalformed' + | 'allowTrustNoTrustLine' + | 'allowTrustTrustNotRequired' + | 'allowTrustCantRevoke' + | 'allowTrustSelfNotAllowed' + | 'allowTrustLowReserve'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6; + + static allowTrustSuccess(): AllowTrustResultCode; + + static allowTrustMalformed(): AllowTrustResultCode; + + static allowTrustNoTrustLine(): AllowTrustResultCode; + + static allowTrustTrustNotRequired(): AllowTrustResultCode; + + static allowTrustCantRevoke(): AllowTrustResultCode; + + static allowTrustSelfNotAllowed(): AllowTrustResultCode; + + static allowTrustLowReserve(): AllowTrustResultCode; + } + + class AccountMergeResultCode { + readonly name: + | 'accountMergeSuccess' + | 'accountMergeMalformed' + | 'accountMergeNoAccount' + | 'accountMergeImmutableSet' + | 'accountMergeHasSubEntries' + | 'accountMergeSeqnumTooFar' + | 'accountMergeDestFull' + | 'accountMergeIsSponsor'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7; + + static accountMergeSuccess(): AccountMergeResultCode; + + static accountMergeMalformed(): AccountMergeResultCode; + + static accountMergeNoAccount(): AccountMergeResultCode; + + static accountMergeImmutableSet(): AccountMergeResultCode; + + static accountMergeHasSubEntries(): AccountMergeResultCode; + + static accountMergeSeqnumTooFar(): AccountMergeResultCode; + + static accountMergeDestFull(): AccountMergeResultCode; + + static accountMergeIsSponsor(): AccountMergeResultCode; + } + + class InflationResultCode { + readonly name: 'inflationSuccess' | 'inflationNotTime'; + + readonly value: 0 | -1; + + static inflationSuccess(): InflationResultCode; + + static inflationNotTime(): InflationResultCode; + } + + class ManageDataResultCode { + readonly name: + | 'manageDataSuccess' + | 'manageDataNotSupportedYet' + | 'manageDataNameNotFound' + | 'manageDataLowReserve' + | 'manageDataInvalidName'; + + readonly value: 0 | -1 | -2 | -3 | -4; + + static manageDataSuccess(): ManageDataResultCode; + + static manageDataNotSupportedYet(): ManageDataResultCode; + + static manageDataNameNotFound(): ManageDataResultCode; + + static manageDataLowReserve(): ManageDataResultCode; + + static manageDataInvalidName(): ManageDataResultCode; + } + + class BumpSequenceResultCode { + readonly name: 'bumpSequenceSuccess' | 'bumpSequenceBadSeq'; + + readonly value: 0 | -1; + + static bumpSequenceSuccess(): BumpSequenceResultCode; + + static bumpSequenceBadSeq(): BumpSequenceResultCode; + } + + class CreateClaimableBalanceResultCode { + readonly name: + | 'createClaimableBalanceSuccess' + | 'createClaimableBalanceMalformed' + | 'createClaimableBalanceLowReserve' + | 'createClaimableBalanceNoTrust' + | 'createClaimableBalanceNotAuthorized' + | 'createClaimableBalanceUnderfunded'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static createClaimableBalanceSuccess(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceMalformed(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceLowReserve(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceNoTrust(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceNotAuthorized(): CreateClaimableBalanceResultCode; + + static createClaimableBalanceUnderfunded(): CreateClaimableBalanceResultCode; + } + + class ClaimClaimableBalanceResultCode { + readonly name: + | 'claimClaimableBalanceSuccess' + | 'claimClaimableBalanceDoesNotExist' + | 'claimClaimableBalanceCannotClaim' + | 'claimClaimableBalanceLineFull' + | 'claimClaimableBalanceNoTrust' + | 'claimClaimableBalanceNotAuthorized'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static claimClaimableBalanceSuccess(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceDoesNotExist(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceCannotClaim(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceLineFull(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceNoTrust(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceNotAuthorized(): ClaimClaimableBalanceResultCode; + } + + class BeginSponsoringFutureReservesResultCode { + readonly name: + | 'beginSponsoringFutureReservesSuccess' + | 'beginSponsoringFutureReservesMalformed' + | 'beginSponsoringFutureReservesAlreadySponsored' + | 'beginSponsoringFutureReservesRecursive'; + + readonly value: 0 | -1 | -2 | -3; + + static beginSponsoringFutureReservesSuccess(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesMalformed(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesAlreadySponsored(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesRecursive(): BeginSponsoringFutureReservesResultCode; + } + + class EndSponsoringFutureReservesResultCode { + readonly name: + | 'endSponsoringFutureReservesSuccess' + | 'endSponsoringFutureReservesNotSponsored'; + + readonly value: 0 | -1; + + static endSponsoringFutureReservesSuccess(): EndSponsoringFutureReservesResultCode; + + static endSponsoringFutureReservesNotSponsored(): EndSponsoringFutureReservesResultCode; + } + + class RevokeSponsorshipResultCode { + readonly name: + | 'revokeSponsorshipSuccess' + | 'revokeSponsorshipDoesNotExist' + | 'revokeSponsorshipNotSponsor' + | 'revokeSponsorshipLowReserve' + | 'revokeSponsorshipOnlyTransferable' + | 'revokeSponsorshipMalformed'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static revokeSponsorshipSuccess(): RevokeSponsorshipResultCode; + + static revokeSponsorshipDoesNotExist(): RevokeSponsorshipResultCode; + + static revokeSponsorshipNotSponsor(): RevokeSponsorshipResultCode; + + static revokeSponsorshipLowReserve(): RevokeSponsorshipResultCode; + + static revokeSponsorshipOnlyTransferable(): RevokeSponsorshipResultCode; + + static revokeSponsorshipMalformed(): RevokeSponsorshipResultCode; + } + + class ClawbackResultCode { + readonly name: + | 'clawbackSuccess' + | 'clawbackMalformed' + | 'clawbackNotClawbackEnabled' + | 'clawbackNoTrust' + | 'clawbackUnderfunded'; + + readonly value: 0 | -1 | -2 | -3 | -4; + + static clawbackSuccess(): ClawbackResultCode; + + static clawbackMalformed(): ClawbackResultCode; + + static clawbackNotClawbackEnabled(): ClawbackResultCode; + + static clawbackNoTrust(): ClawbackResultCode; + + static clawbackUnderfunded(): ClawbackResultCode; + } + + class ClawbackClaimableBalanceResultCode { + readonly name: + | 'clawbackClaimableBalanceSuccess' + | 'clawbackClaimableBalanceDoesNotExist' + | 'clawbackClaimableBalanceNotIssuer' + | 'clawbackClaimableBalanceNotClawbackEnabled'; + + readonly value: 0 | -1 | -2 | -3; + + static clawbackClaimableBalanceSuccess(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceDoesNotExist(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceNotIssuer(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceNotClawbackEnabled(): ClawbackClaimableBalanceResultCode; + } + + class SetTrustLineFlagsResultCode { + readonly name: + | 'setTrustLineFlagsSuccess' + | 'setTrustLineFlagsMalformed' + | 'setTrustLineFlagsNoTrustLine' + | 'setTrustLineFlagsCantRevoke' + | 'setTrustLineFlagsInvalidState' + | 'setTrustLineFlagsLowReserve'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static setTrustLineFlagsSuccess(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsMalformed(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsNoTrustLine(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsCantRevoke(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsInvalidState(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsLowReserve(): SetTrustLineFlagsResultCode; + } + + class LiquidityPoolDepositResultCode { + readonly name: + | 'liquidityPoolDepositSuccess' + | 'liquidityPoolDepositMalformed' + | 'liquidityPoolDepositNoTrust' + | 'liquidityPoolDepositNotAuthorized' + | 'liquidityPoolDepositUnderfunded' + | 'liquidityPoolDepositLineFull' + | 'liquidityPoolDepositBadPrice' + | 'liquidityPoolDepositPoolFull'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7; + + static liquidityPoolDepositSuccess(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositMalformed(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositNoTrust(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositNotAuthorized(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositUnderfunded(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositLineFull(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositBadPrice(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositPoolFull(): LiquidityPoolDepositResultCode; + } + + class LiquidityPoolWithdrawResultCode { + readonly name: + | 'liquidityPoolWithdrawSuccess' + | 'liquidityPoolWithdrawMalformed' + | 'liquidityPoolWithdrawNoTrust' + | 'liquidityPoolWithdrawUnderfunded' + | 'liquidityPoolWithdrawLineFull' + | 'liquidityPoolWithdrawUnderMinimum'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static liquidityPoolWithdrawSuccess(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawMalformed(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawNoTrust(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawUnderfunded(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawLineFull(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawUnderMinimum(): LiquidityPoolWithdrawResultCode; + } + + class InvokeHostFunctionResultCode { + readonly name: + | 'invokeHostFunctionSuccess' + | 'invokeHostFunctionMalformed' + | 'invokeHostFunctionTrapped' + | 'invokeHostFunctionResourceLimitExceeded' + | 'invokeHostFunctionEntryArchived' + | 'invokeHostFunctionInsufficientRefundableFee'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5; + + static invokeHostFunctionSuccess(): InvokeHostFunctionResultCode; + + static invokeHostFunctionMalformed(): InvokeHostFunctionResultCode; + + static invokeHostFunctionTrapped(): InvokeHostFunctionResultCode; + + static invokeHostFunctionResourceLimitExceeded(): InvokeHostFunctionResultCode; + + static invokeHostFunctionEntryArchived(): InvokeHostFunctionResultCode; + + static invokeHostFunctionInsufficientRefundableFee(): InvokeHostFunctionResultCode; + } + + class ExtendFootprintTtlResultCode { + readonly name: + | 'extendFootprintTtlSuccess' + | 'extendFootprintTtlMalformed' + | 'extendFootprintTtlResourceLimitExceeded' + | 'extendFootprintTtlInsufficientRefundableFee'; + + readonly value: 0 | -1 | -2 | -3; + + static extendFootprintTtlSuccess(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlMalformed(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlResourceLimitExceeded(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlInsufficientRefundableFee(): ExtendFootprintTtlResultCode; + } + + class RestoreFootprintResultCode { + readonly name: + | 'restoreFootprintSuccess' + | 'restoreFootprintMalformed' + | 'restoreFootprintResourceLimitExceeded' + | 'restoreFootprintInsufficientRefundableFee'; + + readonly value: 0 | -1 | -2 | -3; + + static restoreFootprintSuccess(): RestoreFootprintResultCode; + + static restoreFootprintMalformed(): RestoreFootprintResultCode; + + static restoreFootprintResourceLimitExceeded(): RestoreFootprintResultCode; + + static restoreFootprintInsufficientRefundableFee(): RestoreFootprintResultCode; + } + + class OperationResultCode { + readonly name: + | 'opInner' + | 'opBadAuth' + | 'opNoAccount' + | 'opNotSupported' + | 'opTooManySubentries' + | 'opExceededWorkLimit' + | 'opTooManySponsoring'; + + readonly value: 0 | -1 | -2 | -3 | -4 | -5 | -6; + + static opInner(): OperationResultCode; + + static opBadAuth(): OperationResultCode; + + static opNoAccount(): OperationResultCode; + + static opNotSupported(): OperationResultCode; + + static opTooManySubentries(): OperationResultCode; + + static opExceededWorkLimit(): OperationResultCode; + + static opTooManySponsoring(): OperationResultCode; + } + + class TransactionResultCode { + readonly name: + | 'txFeeBumpInnerSuccess' + | 'txSuccess' + | 'txFailed' + | 'txTooEarly' + | 'txTooLate' + | 'txMissingOperation' + | 'txBadSeq' + | 'txBadAuth' + | 'txInsufficientBalance' + | 'txNoAccount' + | 'txInsufficientFee' + | 'txBadAuthExtra' + | 'txInternalError' + | 'txNotSupported' + | 'txFeeBumpInnerFailed' + | 'txBadSponsorship' + | 'txBadMinSeqAgeOrGap' + | 'txMalformed' + | 'txSorobanInvalid'; + + readonly value: + | 1 + | 0 + | -1 + | -2 + | -3 + | -4 + | -5 + | -6 + | -7 + | -8 + | -9 + | -10 + | -11 + | -12 + | -13 + | -14 + | -15 + | -16 + | -17; + + static txFeeBumpInnerSuccess(): TransactionResultCode; + + static txSuccess(): TransactionResultCode; + + static txFailed(): TransactionResultCode; + + static txTooEarly(): TransactionResultCode; + + static txTooLate(): TransactionResultCode; + + static txMissingOperation(): TransactionResultCode; + + static txBadSeq(): TransactionResultCode; + + static txBadAuth(): TransactionResultCode; + + static txInsufficientBalance(): TransactionResultCode; + + static txNoAccount(): TransactionResultCode; + + static txInsufficientFee(): TransactionResultCode; + + static txBadAuthExtra(): TransactionResultCode; + + static txInternalError(): TransactionResultCode; + + static txNotSupported(): TransactionResultCode; + + static txFeeBumpInnerFailed(): TransactionResultCode; + + static txBadSponsorship(): TransactionResultCode; + + static txBadMinSeqAgeOrGap(): TransactionResultCode; + + static txMalformed(): TransactionResultCode; + + static txSorobanInvalid(): TransactionResultCode; + } + + class CryptoKeyType { + readonly name: + | 'keyTypeEd25519' + | 'keyTypePreAuthTx' + | 'keyTypeHashX' + | 'keyTypeEd25519SignedPayload' + | 'keyTypeMuxedEd25519'; + + readonly value: 0 | 1 | 2 | 3 | 256; + + static keyTypeEd25519(): CryptoKeyType; + + static keyTypePreAuthTx(): CryptoKeyType; + + static keyTypeHashX(): CryptoKeyType; + + static keyTypeEd25519SignedPayload(): CryptoKeyType; + + static keyTypeMuxedEd25519(): CryptoKeyType; + } + + class PublicKeyType { + readonly name: 'publicKeyTypeEd25519'; + + readonly value: 0; + + static publicKeyTypeEd25519(): PublicKeyType; + } + + class SignerKeyType { + readonly name: + | 'signerKeyTypeEd25519' + | 'signerKeyTypePreAuthTx' + | 'signerKeyTypeHashX' + | 'signerKeyTypeEd25519SignedPayload'; + + readonly value: 0 | 1 | 2 | 3; + + static signerKeyTypeEd25519(): SignerKeyType; + + static signerKeyTypePreAuthTx(): SignerKeyType; + + static signerKeyTypeHashX(): SignerKeyType; + + static signerKeyTypeEd25519SignedPayload(): SignerKeyType; + } + + class BinaryFuseFilterType { + readonly name: + | 'binaryFuseFilter8Bit' + | 'binaryFuseFilter16Bit' + | 'binaryFuseFilter32Bit'; + + readonly value: 0 | 1 | 2; + + static binaryFuseFilter8Bit(): BinaryFuseFilterType; + + static binaryFuseFilter16Bit(): BinaryFuseFilterType; + + static binaryFuseFilter32Bit(): BinaryFuseFilterType; + } + + class ScValType { + readonly name: + | 'scvBool' + | 'scvVoid' + | 'scvError' + | 'scvU32' + | 'scvI32' + | 'scvU64' + | 'scvI64' + | 'scvTimepoint' + | 'scvDuration' + | 'scvU128' + | 'scvI128' + | 'scvU256' + | 'scvI256' + | 'scvBytes' + | 'scvString' + | 'scvSymbol' + | 'scvVec' + | 'scvMap' + | 'scvAddress' + | 'scvContractInstance' + | 'scvLedgerKeyContractInstance' + | 'scvLedgerKeyNonce'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21; + + static scvBool(): ScValType; + + static scvVoid(): ScValType; + + static scvError(): ScValType; + + static scvU32(): ScValType; + + static scvI32(): ScValType; + + static scvU64(): ScValType; + + static scvI64(): ScValType; + + static scvTimepoint(): ScValType; + + static scvDuration(): ScValType; + + static scvU128(): ScValType; + + static scvI128(): ScValType; + + static scvU256(): ScValType; + + static scvI256(): ScValType; + + static scvBytes(): ScValType; + + static scvString(): ScValType; + + static scvSymbol(): ScValType; + + static scvVec(): ScValType; + + static scvMap(): ScValType; + + static scvAddress(): ScValType; + + static scvContractInstance(): ScValType; + + static scvLedgerKeyContractInstance(): ScValType; + + static scvLedgerKeyNonce(): ScValType; + } + + class ScErrorType { + readonly name: + | 'sceContract' + | 'sceWasmVm' + | 'sceContext' + | 'sceStorage' + | 'sceObject' + | 'sceCrypto' + | 'sceEvents' + | 'sceBudget' + | 'sceValue' + | 'sceAuth'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static sceContract(): ScErrorType; + + static sceWasmVm(): ScErrorType; + + static sceContext(): ScErrorType; + + static sceStorage(): ScErrorType; + + static sceObject(): ScErrorType; + + static sceCrypto(): ScErrorType; + + static sceEvents(): ScErrorType; + + static sceBudget(): ScErrorType; + + static sceValue(): ScErrorType; + + static sceAuth(): ScErrorType; + } + + class ScErrorCode { + readonly name: + | 'scecArithDomain' + | 'scecIndexBounds' + | 'scecInvalidInput' + | 'scecMissingValue' + | 'scecExistingValue' + | 'scecExceededLimit' + | 'scecInvalidAction' + | 'scecInternalError' + | 'scecUnexpectedType' + | 'scecUnexpectedSize'; + + readonly value: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + + static scecArithDomain(): ScErrorCode; + + static scecIndexBounds(): ScErrorCode; + + static scecInvalidInput(): ScErrorCode; + + static scecMissingValue(): ScErrorCode; + + static scecExistingValue(): ScErrorCode; + + static scecExceededLimit(): ScErrorCode; + + static scecInvalidAction(): ScErrorCode; + + static scecInternalError(): ScErrorCode; + + static scecUnexpectedType(): ScErrorCode; + + static scecUnexpectedSize(): ScErrorCode; + } + + class ContractExecutableType { + readonly name: 'contractExecutableWasm' | 'contractExecutableStellarAsset'; + + readonly value: 0 | 1; + + static contractExecutableWasm(): ContractExecutableType; + + static contractExecutableStellarAsset(): ContractExecutableType; + } + + class ScAddressType { + readonly name: 'scAddressTypeAccount' | 'scAddressTypeContract'; + + readonly value: 0 | 1; + + static scAddressTypeAccount(): ScAddressType; + + static scAddressTypeContract(): ScAddressType; + } + + class ScEnvMetaKind { + readonly name: 'scEnvMetaKindInterfaceVersion'; + + readonly value: 0; + + static scEnvMetaKindInterfaceVersion(): ScEnvMetaKind; + } + + class ScMetaKind { + readonly name: 'scMetaV0'; + + readonly value: 0; + + static scMetaV0(): ScMetaKind; + } + + class ScSpecType { + readonly name: + | 'scSpecTypeVal' + | 'scSpecTypeBool' + | 'scSpecTypeVoid' + | 'scSpecTypeError' + | 'scSpecTypeU32' + | 'scSpecTypeI32' + | 'scSpecTypeU64' + | 'scSpecTypeI64' + | 'scSpecTypeTimepoint' + | 'scSpecTypeDuration' + | 'scSpecTypeU128' + | 'scSpecTypeI128' + | 'scSpecTypeU256' + | 'scSpecTypeI256' + | 'scSpecTypeBytes' + | 'scSpecTypeString' + | 'scSpecTypeSymbol' + | 'scSpecTypeAddress' + | 'scSpecTypeOption' + | 'scSpecTypeResult' + | 'scSpecTypeVec' + | 'scSpecTypeMap' + | 'scSpecTypeTuple' + | 'scSpecTypeBytesN' + | 'scSpecTypeUdt'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 16 + | 17 + | 19 + | 1000 + | 1001 + | 1002 + | 1004 + | 1005 + | 1006 + | 2000; + + static scSpecTypeVal(): ScSpecType; + + static scSpecTypeBool(): ScSpecType; + + static scSpecTypeVoid(): ScSpecType; + + static scSpecTypeError(): ScSpecType; + + static scSpecTypeU32(): ScSpecType; + + static scSpecTypeI32(): ScSpecType; + + static scSpecTypeU64(): ScSpecType; + + static scSpecTypeI64(): ScSpecType; + + static scSpecTypeTimepoint(): ScSpecType; + + static scSpecTypeDuration(): ScSpecType; + + static scSpecTypeU128(): ScSpecType; + + static scSpecTypeI128(): ScSpecType; + + static scSpecTypeU256(): ScSpecType; + + static scSpecTypeI256(): ScSpecType; + + static scSpecTypeBytes(): ScSpecType; + + static scSpecTypeString(): ScSpecType; + + static scSpecTypeSymbol(): ScSpecType; + + static scSpecTypeAddress(): ScSpecType; + + static scSpecTypeOption(): ScSpecType; + + static scSpecTypeResult(): ScSpecType; + + static scSpecTypeVec(): ScSpecType; + + static scSpecTypeMap(): ScSpecType; + + static scSpecTypeTuple(): ScSpecType; + + static scSpecTypeBytesN(): ScSpecType; + + static scSpecTypeUdt(): ScSpecType; + } + + class ScSpecUdtUnionCaseV0Kind { + readonly name: 'scSpecUdtUnionCaseVoidV0' | 'scSpecUdtUnionCaseTupleV0'; + + readonly value: 0 | 1; + + static scSpecUdtUnionCaseVoidV0(): ScSpecUdtUnionCaseV0Kind; + + static scSpecUdtUnionCaseTupleV0(): ScSpecUdtUnionCaseV0Kind; + } + + class ScSpecEntryKind { + readonly name: + | 'scSpecEntryFunctionV0' + | 'scSpecEntryUdtStructV0' + | 'scSpecEntryUdtUnionV0' + | 'scSpecEntryUdtEnumV0' + | 'scSpecEntryUdtErrorEnumV0'; + + readonly value: 0 | 1 | 2 | 3 | 4; + + static scSpecEntryFunctionV0(): ScSpecEntryKind; + + static scSpecEntryUdtStructV0(): ScSpecEntryKind; + + static scSpecEntryUdtUnionV0(): ScSpecEntryKind; + + static scSpecEntryUdtEnumV0(): ScSpecEntryKind; + + static scSpecEntryUdtErrorEnumV0(): ScSpecEntryKind; + } + + class ContractCostType { + readonly name: + | 'wasmInsnExec' + | 'memAlloc' + | 'memCpy' + | 'memCmp' + | 'dispatchHostFunction' + | 'visitObject' + | 'valSer' + | 'valDeser' + | 'computeSha256Hash' + | 'computeEd25519PubKey' + | 'verifyEd25519Sig' + | 'vmInstantiation' + | 'vmCachedInstantiation' + | 'invokeVmFunction' + | 'computeKeccak256Hash' + | 'decodeEcdsaCurve256Sig' + | 'recoverEcdsaSecp256k1Key' + | 'int256AddSub' + | 'int256Mul' + | 'int256Div' + | 'int256Pow' + | 'int256Shift' + | 'chaCha20DrawBytes' + | 'parseWasmInstructions' + | 'parseWasmFunctions' + | 'parseWasmGlobals' + | 'parseWasmTableEntries' + | 'parseWasmTypes' + | 'parseWasmDataSegments' + | 'parseWasmElemSegments' + | 'parseWasmImports' + | 'parseWasmExports' + | 'parseWasmDataSegmentBytes' + | 'instantiateWasmInstructions' + | 'instantiateWasmFunctions' + | 'instantiateWasmGlobals' + | 'instantiateWasmTableEntries' + | 'instantiateWasmTypes' + | 'instantiateWasmDataSegments' + | 'instantiateWasmElemSegments' + | 'instantiateWasmImports' + | 'instantiateWasmExports' + | 'instantiateWasmDataSegmentBytes' + | 'sec1DecodePointUncompressed' + | 'verifyEcdsaSecp256r1Sig' + | 'bls12381EncodeFp' + | 'bls12381DecodeFp' + | 'bls12381G1CheckPointOnCurve' + | 'bls12381G1CheckPointInSubgroup' + | 'bls12381G2CheckPointOnCurve' + | 'bls12381G2CheckPointInSubgroup' + | 'bls12381G1ProjectiveToAffine' + | 'bls12381G2ProjectiveToAffine' + | 'bls12381G1Add' + | 'bls12381G1Mul' + | 'bls12381G1Msm' + | 'bls12381MapFpToG1' + | 'bls12381HashToG1' + | 'bls12381G2Add' + | 'bls12381G2Mul' + | 'bls12381G2Msm' + | 'bls12381MapFp2ToG2' + | 'bls12381HashToG2' + | 'bls12381Pairing' + | 'bls12381FrFromU256' + | 'bls12381FrToU256' + | 'bls12381FrAddSub' + | 'bls12381FrMul' + | 'bls12381FrPow' + | 'bls12381FrInv'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26 + | 27 + | 28 + | 29 + | 30 + | 31 + | 32 + | 33 + | 34 + | 35 + | 36 + | 37 + | 38 + | 39 + | 40 + | 41 + | 42 + | 43 + | 44 + | 45 + | 46 + | 47 + | 48 + | 49 + | 50 + | 51 + | 52 + | 53 + | 54 + | 55 + | 56 + | 57 + | 58 + | 59 + | 60 + | 61 + | 62 + | 63 + | 64 + | 65 + | 66 + | 67 + | 68 + | 69; + + static wasmInsnExec(): ContractCostType; + + static memAlloc(): ContractCostType; + + static memCpy(): ContractCostType; + + static memCmp(): ContractCostType; + + static dispatchHostFunction(): ContractCostType; + + static visitObject(): ContractCostType; + + static valSer(): ContractCostType; + + static valDeser(): ContractCostType; + + static computeSha256Hash(): ContractCostType; + + static computeEd25519PubKey(): ContractCostType; + + static verifyEd25519Sig(): ContractCostType; + + static vmInstantiation(): ContractCostType; + + static vmCachedInstantiation(): ContractCostType; + + static invokeVmFunction(): ContractCostType; + + static computeKeccak256Hash(): ContractCostType; + + static decodeEcdsaCurve256Sig(): ContractCostType; + + static recoverEcdsaSecp256k1Key(): ContractCostType; + + static int256AddSub(): ContractCostType; + + static int256Mul(): ContractCostType; + + static int256Div(): ContractCostType; + + static int256Pow(): ContractCostType; + + static int256Shift(): ContractCostType; + + static chaCha20DrawBytes(): ContractCostType; + + static parseWasmInstructions(): ContractCostType; + + static parseWasmFunctions(): ContractCostType; + + static parseWasmGlobals(): ContractCostType; + + static parseWasmTableEntries(): ContractCostType; + + static parseWasmTypes(): ContractCostType; + + static parseWasmDataSegments(): ContractCostType; + + static parseWasmElemSegments(): ContractCostType; + + static parseWasmImports(): ContractCostType; + + static parseWasmExports(): ContractCostType; + + static parseWasmDataSegmentBytes(): ContractCostType; + + static instantiateWasmInstructions(): ContractCostType; + + static instantiateWasmFunctions(): ContractCostType; + + static instantiateWasmGlobals(): ContractCostType; + + static instantiateWasmTableEntries(): ContractCostType; + + static instantiateWasmTypes(): ContractCostType; + + static instantiateWasmDataSegments(): ContractCostType; + + static instantiateWasmElemSegments(): ContractCostType; + + static instantiateWasmImports(): ContractCostType; + + static instantiateWasmExports(): ContractCostType; + + static instantiateWasmDataSegmentBytes(): ContractCostType; + + static sec1DecodePointUncompressed(): ContractCostType; + + static verifyEcdsaSecp256r1Sig(): ContractCostType; + + static bls12381EncodeFp(): ContractCostType; + + static bls12381DecodeFp(): ContractCostType; + + static bls12381G1CheckPointOnCurve(): ContractCostType; + + static bls12381G1CheckPointInSubgroup(): ContractCostType; + + static bls12381G2CheckPointOnCurve(): ContractCostType; + + static bls12381G2CheckPointInSubgroup(): ContractCostType; + + static bls12381G1ProjectiveToAffine(): ContractCostType; + + static bls12381G2ProjectiveToAffine(): ContractCostType; + + static bls12381G1Add(): ContractCostType; + + static bls12381G1Mul(): ContractCostType; + + static bls12381G1Msm(): ContractCostType; + + static bls12381MapFpToG1(): ContractCostType; + + static bls12381HashToG1(): ContractCostType; + + static bls12381G2Add(): ContractCostType; + + static bls12381G2Mul(): ContractCostType; + + static bls12381G2Msm(): ContractCostType; + + static bls12381MapFp2ToG2(): ContractCostType; + + static bls12381HashToG2(): ContractCostType; + + static bls12381Pairing(): ContractCostType; + + static bls12381FrFromU256(): ContractCostType; + + static bls12381FrToU256(): ContractCostType; + + static bls12381FrAddSub(): ContractCostType; + + static bls12381FrMul(): ContractCostType; + + static bls12381FrPow(): ContractCostType; + + static bls12381FrInv(): ContractCostType; + } + + class ConfigSettingId { + readonly name: + | 'configSettingContractMaxSizeBytes' + | 'configSettingContractComputeV0' + | 'configSettingContractLedgerCostV0' + | 'configSettingContractHistoricalDataV0' + | 'configSettingContractEventsV0' + | 'configSettingContractBandwidthV0' + | 'configSettingContractCostParamsCpuInstructions' + | 'configSettingContractCostParamsMemoryBytes' + | 'configSettingContractDataKeySizeBytes' + | 'configSettingContractDataEntrySizeBytes' + | 'configSettingStateArchival' + | 'configSettingContractExecutionLanes' + | 'configSettingBucketlistSizeWindow' + | 'configSettingEvictionIterator' + | 'configSettingContractParallelComputeV0'; + + readonly value: + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14; + + static configSettingContractMaxSizeBytes(): ConfigSettingId; + + static configSettingContractComputeV0(): ConfigSettingId; + + static configSettingContractLedgerCostV0(): ConfigSettingId; + + static configSettingContractHistoricalDataV0(): ConfigSettingId; + + static configSettingContractEventsV0(): ConfigSettingId; + + static configSettingContractBandwidthV0(): ConfigSettingId; + + static configSettingContractCostParamsCpuInstructions(): ConfigSettingId; + + static configSettingContractCostParamsMemoryBytes(): ConfigSettingId; + + static configSettingContractDataKeySizeBytes(): ConfigSettingId; + + static configSettingContractDataEntrySizeBytes(): ConfigSettingId; + + static configSettingStateArchival(): ConfigSettingId; + + static configSettingContractExecutionLanes(): ConfigSettingId; + + static configSettingBucketlistSizeWindow(): ConfigSettingId; + + static configSettingEvictionIterator(): ConfigSettingId; + + static configSettingContractParallelComputeV0(): ConfigSettingId; + } + + const Value: VarOpaque; + + const Thresholds: Opaque; + + const String32: XDRString; + + const String64: XDRString; + + type SequenceNumber = Int64; + + const DataValue: VarOpaque; + + type PoolId = Hash; + + const AssetCode4: Opaque; + + const AssetCode12: Opaque; + + type SponsorshipDescriptor = undefined | AccountId; + + const UpgradeType: VarOpaque; + + const TxExecutionThread: XDRArray; + + const ParallelTxExecutionStage: XDRArray; + + const LedgerEntryChanges: XDRArray; + + const EncryptedBody: VarOpaque; + + const PeerStatList: XDRArray; + + const TimeSlicedPeerDataList: XDRArray; + + const TxAdvertVector: XDRArray; + + const TxDemandVector: XDRArray; + + const ProofLevel: XDRArray; + + const Hash: Opaque; + + const Uint256: Opaque; + + const Uint32: UnsignedInt; + + const Int32: SignedInt; + + class Uint64 extends UnsignedHyper {} + + class Int64 extends Hyper {} + + type TimePoint = Uint64; + + type Duration = Uint64; + + const Signature: VarOpaque; + + const SignatureHint: Opaque; + + type NodeId = PublicKey; + + type AccountId = PublicKey; + + const ScVec: XDRArray; + + const ScMap: XDRArray; + + const ScBytes: VarOpaque; + + const ScString: XDRString; + + const ScSymbol: XDRString; + + const ContractCostParams: XDRArray; + + class ScpBallot { + constructor(attributes: { counter: number; value: Buffer }); + + counter(value?: number): number; + + value(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpBallot; + + static write(value: ScpBallot, io: Buffer): void; + + static isValid(value: ScpBallot): boolean; + + static toXDR(value: ScpBallot): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpBallot; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpBallot; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpNomination { + constructor(attributes: { + quorumSetHash: Buffer; + votes: Buffer[]; + accepted: Buffer[]; + }); + + quorumSetHash(value?: Buffer): Buffer; + + votes(value?: Buffer[]): Buffer[]; + + accepted(value?: Buffer[]): Buffer[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpNomination; + + static write(value: ScpNomination, io: Buffer): void; + + static isValid(value: ScpNomination): boolean; + + static toXDR(value: ScpNomination): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpNomination; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpNomination; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementPrepare { + constructor(attributes: { + quorumSetHash: Buffer; + ballot: ScpBallot; + prepared: null | ScpBallot; + preparedPrime: null | ScpBallot; + nC: number; + nH: number; + }); + + quorumSetHash(value?: Buffer): Buffer; + + ballot(value?: ScpBallot): ScpBallot; + + prepared(value?: null | ScpBallot): null | ScpBallot; + + preparedPrime(value?: null | ScpBallot): null | ScpBallot; + + nC(value?: number): number; + + nH(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementPrepare; + + static write(value: ScpStatementPrepare, io: Buffer): void; + + static isValid(value: ScpStatementPrepare): boolean; + + static toXDR(value: ScpStatementPrepare): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementPrepare; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementPrepare; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementConfirm { + constructor(attributes: { + ballot: ScpBallot; + nPrepared: number; + nCommit: number; + nH: number; + quorumSetHash: Buffer; + }); + + ballot(value?: ScpBallot): ScpBallot; + + nPrepared(value?: number): number; + + nCommit(value?: number): number; + + nH(value?: number): number; + + quorumSetHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementConfirm; + + static write(value: ScpStatementConfirm, io: Buffer): void; + + static isValid(value: ScpStatementConfirm): boolean; + + static toXDR(value: ScpStatementConfirm): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementConfirm; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementConfirm; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementExternalize { + constructor(attributes: { + commit: ScpBallot; + nH: number; + commitQuorumSetHash: Buffer; + }); + + commit(value?: ScpBallot): ScpBallot; + + nH(value?: number): number; + + commitQuorumSetHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementExternalize; + + static write(value: ScpStatementExternalize, io: Buffer): void; + + static isValid(value: ScpStatementExternalize): boolean; + + static toXDR(value: ScpStatementExternalize): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementExternalize; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementExternalize; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatement { + constructor(attributes: { + nodeId: NodeId; + slotIndex: Uint64; + pledges: ScpStatementPledges; + }); + + nodeId(value?: NodeId): NodeId; + + slotIndex(value?: Uint64): Uint64; + + pledges(value?: ScpStatementPledges): ScpStatementPledges; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatement; + + static write(value: ScpStatement, io: Buffer): void; + + static isValid(value: ScpStatement): boolean; + + static toXDR(value: ScpStatement): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatement; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpStatement; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpEnvelope { + constructor(attributes: { statement: ScpStatement; signature: Buffer }); + + statement(value?: ScpStatement): ScpStatement; + + signature(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpEnvelope; + + static write(value: ScpEnvelope, io: Buffer): void; + + static isValid(value: ScpEnvelope): boolean; + + static toXDR(value: ScpEnvelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpEnvelope; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpEnvelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpQuorumSet { + constructor(attributes: { + threshold: number; + validators: NodeId[]; + innerSets: ScpQuorumSet[]; + }); + + threshold(value?: number): number; + + validators(value?: NodeId[]): NodeId[]; + + innerSets(value?: ScpQuorumSet[]): ScpQuorumSet[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpQuorumSet; + + static write(value: ScpQuorumSet, io: Buffer): void; + + static isValid(value: ScpQuorumSet): boolean; + + static toXDR(value: ScpQuorumSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpQuorumSet; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpQuorumSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AlphaNum4 { + constructor(attributes: { assetCode: Buffer; issuer: AccountId }); + + assetCode(value?: Buffer): Buffer; + + issuer(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AlphaNum4; + + static write(value: AlphaNum4, io: Buffer): void; + + static isValid(value: AlphaNum4): boolean; + + static toXDR(value: AlphaNum4): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AlphaNum4; + + static fromXDR(input: string, format: 'hex' | 'base64'): AlphaNum4; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AlphaNum12 { + constructor(attributes: { assetCode: Buffer; issuer: AccountId }); + + assetCode(value?: Buffer): Buffer; + + issuer(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AlphaNum12; + + static write(value: AlphaNum12, io: Buffer): void; + + static isValid(value: AlphaNum12): boolean; + + static toXDR(value: AlphaNum12): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AlphaNum12; + + static fromXDR(input: string, format: 'hex' | 'base64'): AlphaNum12; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Price { + constructor(attributes: { n: number; d: number }); + + n(value?: number): number; + + d(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Price; + + static write(value: Price, io: Buffer): void; + + static isValid(value: Price): boolean; + + static toXDR(value: Price): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Price; + + static fromXDR(input: string, format: 'hex' | 'base64'): Price; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Liabilities { + constructor(attributes: { buying: Int64; selling: Int64 }); + + buying(value?: Int64): Int64; + + selling(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Liabilities; + + static write(value: Liabilities, io: Buffer): void; + + static isValid(value: Liabilities): boolean; + + static toXDR(value: Liabilities): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Liabilities; + + static fromXDR(input: string, format: 'hex' | 'base64'): Liabilities; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Signer { + constructor(attributes: { key: SignerKey; weight: number }); + + key(value?: SignerKey): SignerKey; + + weight(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Signer; + + static write(value: Signer, io: Buffer): void; + + static isValid(value: Signer): boolean; + + static toXDR(value: Signer): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Signer; + + static fromXDR(input: string, format: 'hex' | 'base64'): Signer; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV3 { + constructor(attributes: { + ext: ExtensionPoint; + seqLedger: number; + seqTime: TimePoint; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + seqLedger(value?: number): number; + + seqTime(value?: TimePoint): TimePoint; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV3; + + static write(value: AccountEntryExtensionV3, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV3): boolean; + + static toXDR(value: AccountEntryExtensionV3): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV3; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV3; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV2 { + constructor(attributes: { + numSponsored: number; + numSponsoring: number; + signerSponsoringIDs: SponsorshipDescriptor[]; + ext: AccountEntryExtensionV2Ext; + }); + + numSponsored(value?: number): number; + + numSponsoring(value?: number): number; + + signerSponsoringIDs( + value?: SponsorshipDescriptor[], + ): SponsorshipDescriptor[]; + + ext(value?: AccountEntryExtensionV2Ext): AccountEntryExtensionV2Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV2; + + static write(value: AccountEntryExtensionV2, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV2): boolean; + + static toXDR(value: AccountEntryExtensionV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV1 { + constructor(attributes: { + liabilities: Liabilities; + ext: AccountEntryExtensionV1Ext; + }); + + liabilities(value?: Liabilities): Liabilities; + + ext(value?: AccountEntryExtensionV1Ext): AccountEntryExtensionV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV1; + + static write(value: AccountEntryExtensionV1, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV1): boolean; + + static toXDR(value: AccountEntryExtensionV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntry { + constructor(attributes: { + accountId: AccountId; + balance: Int64; + seqNum: SequenceNumber; + numSubEntries: number; + inflationDest: null | AccountId; + flags: number; + homeDomain: string | Buffer; + thresholds: Buffer; + signers: Signer[]; + ext: AccountEntryExt; + }); + + accountId(value?: AccountId): AccountId; + + balance(value?: Int64): Int64; + + seqNum(value?: SequenceNumber): SequenceNumber; + + numSubEntries(value?: number): number; + + inflationDest(value?: null | AccountId): null | AccountId; + + flags(value?: number): number; + + homeDomain(value?: string | Buffer): string | Buffer; + + thresholds(value?: Buffer): Buffer; + + signers(value?: Signer[]): Signer[]; + + ext(value?: AccountEntryExt): AccountEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntry; + + static write(value: AccountEntry, io: Buffer): void; + + static isValid(value: AccountEntry): boolean; + + static toXDR(value: AccountEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): AccountEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryExtensionV2 { + constructor(attributes: { + liquidityPoolUseCount: number; + ext: TrustLineEntryExtensionV2Ext; + }); + + liquidityPoolUseCount(value?: number): number; + + ext(value?: TrustLineEntryExtensionV2Ext): TrustLineEntryExtensionV2Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryExtensionV2; + + static write(value: TrustLineEntryExtensionV2, io: Buffer): void; + + static isValid(value: TrustLineEntryExtensionV2): boolean; + + static toXDR(value: TrustLineEntryExtensionV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryExtensionV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TrustLineEntryExtensionV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryV1 { + constructor(attributes: { + liabilities: Liabilities; + ext: TrustLineEntryV1Ext; + }); + + liabilities(value?: Liabilities): Liabilities; + + ext(value?: TrustLineEntryV1Ext): TrustLineEntryV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryV1; + + static write(value: TrustLineEntryV1, io: Buffer): void; + + static isValid(value: TrustLineEntryV1): boolean; + + static toXDR(value: TrustLineEntryV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineEntryV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntry { + constructor(attributes: { + accountId: AccountId; + asset: TrustLineAsset; + balance: Int64; + limit: Int64; + flags: number; + ext: TrustLineEntryExt; + }); + + accountId(value?: AccountId): AccountId; + + asset(value?: TrustLineAsset): TrustLineAsset; + + balance(value?: Int64): Int64; + + limit(value?: Int64): Int64; + + flags(value?: number): number; + + ext(value?: TrustLineEntryExt): TrustLineEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntry; + + static write(value: TrustLineEntry, io: Buffer): void; + + static isValid(value: TrustLineEntry): boolean; + + static toXDR(value: TrustLineEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OfferEntry { + constructor(attributes: { + sellerId: AccountId; + offerId: Int64; + selling: Asset; + buying: Asset; + amount: Int64; + price: Price; + flags: number; + ext: OfferEntryExt; + }); + + sellerId(value?: AccountId): AccountId; + + offerId(value?: Int64): Int64; + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + price(value?: Price): Price; + + flags(value?: number): number; + + ext(value?: OfferEntryExt): OfferEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OfferEntry; + + static write(value: OfferEntry, io: Buffer): void; + + static isValid(value: OfferEntry): boolean; + + static toXDR(value: OfferEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OfferEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): OfferEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DataEntry { + constructor(attributes: { + accountId: AccountId; + dataName: string | Buffer; + dataValue: Buffer; + ext: DataEntryExt; + }); + + accountId(value?: AccountId): AccountId; + + dataName(value?: string | Buffer): string | Buffer; + + dataValue(value?: Buffer): Buffer; + + ext(value?: DataEntryExt): DataEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DataEntry; + + static write(value: DataEntry, io: Buffer): void; + + static isValid(value: DataEntry): boolean; + + static toXDR(value: DataEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DataEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): DataEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimantV0 { + constructor(attributes: { + destination: AccountId; + predicate: ClaimPredicate; + }); + + destination(value?: AccountId): AccountId; + + predicate(value?: ClaimPredicate): ClaimPredicate; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimantV0; + + static write(value: ClaimantV0, io: Buffer): void; + + static isValid(value: ClaimantV0): boolean; + + static toXDR(value: ClaimantV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimantV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimantV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntryExtensionV1 { + constructor(attributes: { + ext: ClaimableBalanceEntryExtensionV1Ext; + flags: number; + }); + + ext( + value?: ClaimableBalanceEntryExtensionV1Ext, + ): ClaimableBalanceEntryExtensionV1Ext; + + flags(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntryExtensionV1; + + static write(value: ClaimableBalanceEntryExtensionV1, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntryExtensionV1): boolean; + + static toXDR(value: ClaimableBalanceEntryExtensionV1): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ClaimableBalanceEntryExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntryExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntry { + constructor(attributes: { + balanceId: ClaimableBalanceId; + claimants: Claimant[]; + asset: Asset; + amount: Int64; + ext: ClaimableBalanceEntryExt; + }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + claimants(value?: Claimant[]): Claimant[]; + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + ext(value?: ClaimableBalanceEntryExt): ClaimableBalanceEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntry; + + static write(value: ClaimableBalanceEntry, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntry): boolean; + + static toXDR(value: ClaimableBalanceEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimableBalanceEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolConstantProductParameters { + constructor(attributes: { assetA: Asset; assetB: Asset; fee: number }); + + assetA(value?: Asset): Asset; + + assetB(value?: Asset): Asset; + + fee(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolConstantProductParameters; + + static write( + value: LiquidityPoolConstantProductParameters, + io: Buffer, + ): void; + + static isValid(value: LiquidityPoolConstantProductParameters): boolean; + + static toXDR(value: LiquidityPoolConstantProductParameters): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): LiquidityPoolConstantProductParameters; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolConstantProductParameters; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolEntryConstantProduct { + constructor(attributes: { + params: LiquidityPoolConstantProductParameters; + reserveA: Int64; + reserveB: Int64; + totalPoolShares: Int64; + poolSharesTrustLineCount: Int64; + }); + + params( + value?: LiquidityPoolConstantProductParameters, + ): LiquidityPoolConstantProductParameters; + + reserveA(value?: Int64): Int64; + + reserveB(value?: Int64): Int64; + + totalPoolShares(value?: Int64): Int64; + + poolSharesTrustLineCount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolEntryConstantProduct; + + static write(value: LiquidityPoolEntryConstantProduct, io: Buffer): void; + + static isValid(value: LiquidityPoolEntryConstantProduct): boolean; + + static toXDR(value: LiquidityPoolEntryConstantProduct): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): LiquidityPoolEntryConstantProduct; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolEntryConstantProduct; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolEntry { + constructor(attributes: { + liquidityPoolId: PoolId; + body: LiquidityPoolEntryBody; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + body(value?: LiquidityPoolEntryBody): LiquidityPoolEntryBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolEntry; + + static write(value: LiquidityPoolEntry, io: Buffer): void; + + static isValid(value: LiquidityPoolEntry): boolean; + + static toXDR(value: LiquidityPoolEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): LiquidityPoolEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractDataEntry { + constructor(attributes: { + ext: ExtensionPoint; + contract: ScAddress; + key: ScVal; + durability: ContractDataDurability; + val: ScVal; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + contract(value?: ScAddress): ScAddress; + + key(value?: ScVal): ScVal; + + durability(value?: ContractDataDurability): ContractDataDurability; + + val(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractDataEntry; + + static write(value: ContractDataEntry, io: Buffer): void; + + static isValid(value: ContractDataEntry): boolean; + + static toXDR(value: ContractDataEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractDataEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractDataEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeCostInputs { + constructor(attributes: { + ext: ExtensionPoint; + nInstructions: number; + nFunctions: number; + nGlobals: number; + nTableEntries: number; + nTypes: number; + nDataSegments: number; + nElemSegments: number; + nImports: number; + nExports: number; + nDataSegmentBytes: number; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + nInstructions(value?: number): number; + + nFunctions(value?: number): number; + + nGlobals(value?: number): number; + + nTableEntries(value?: number): number; + + nTypes(value?: number): number; + + nDataSegments(value?: number): number; + + nElemSegments(value?: number): number; + + nImports(value?: number): number; + + nExports(value?: number): number; + + nDataSegmentBytes(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeCostInputs; + + static write(value: ContractCodeCostInputs, io: Buffer): void; + + static isValid(value: ContractCodeCostInputs): boolean; + + static toXDR(value: ContractCodeCostInputs): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeCostInputs; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCodeCostInputs; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeEntryV1 { + constructor(attributes: { + ext: ExtensionPoint; + costInputs: ContractCodeCostInputs; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + costInputs(value?: ContractCodeCostInputs): ContractCodeCostInputs; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeEntryV1; + + static write(value: ContractCodeEntryV1, io: Buffer): void; + + static isValid(value: ContractCodeEntryV1): boolean; + + static toXDR(value: ContractCodeEntryV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeEntryV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCodeEntryV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeEntry { + constructor(attributes: { + ext: ContractCodeEntryExt; + hash: Buffer; + code: Buffer; + }); + + ext(value?: ContractCodeEntryExt): ContractCodeEntryExt; + + hash(value?: Buffer): Buffer; + + code(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeEntry; + + static write(value: ContractCodeEntry, io: Buffer): void; + + static isValid(value: ContractCodeEntry): boolean; + + static toXDR(value: ContractCodeEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractCodeEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TtlEntry { + constructor(attributes: { keyHash: Buffer; liveUntilLedgerSeq: number }); + + keyHash(value?: Buffer): Buffer; + + liveUntilLedgerSeq(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TtlEntry; + + static write(value: TtlEntry, io: Buffer): void; + + static isValid(value: TtlEntry): boolean; + + static toXDR(value: TtlEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TtlEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): TtlEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryExtensionV1 { + constructor(attributes: { + sponsoringId: SponsorshipDescriptor; + ext: LedgerEntryExtensionV1Ext; + }); + + sponsoringId(value?: SponsorshipDescriptor): SponsorshipDescriptor; + + ext(value?: LedgerEntryExtensionV1Ext): LedgerEntryExtensionV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryExtensionV1; + + static write(value: LedgerEntryExtensionV1, io: Buffer): void; + + static isValid(value: LedgerEntryExtensionV1): boolean; + + static toXDR(value: LedgerEntryExtensionV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerEntryExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntry { + constructor(attributes: { + lastModifiedLedgerSeq: number; + data: LedgerEntryData; + ext: LedgerEntryExt; + }); + + lastModifiedLedgerSeq(value?: number): number; + + data(value?: LedgerEntryData): LedgerEntryData; + + ext(value?: LedgerEntryExt): LedgerEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntry; + + static write(value: LedgerEntry, io: Buffer): void; + + static isValid(value: LedgerEntry): boolean; + + static toXDR(value: LedgerEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyAccount { + constructor(attributes: { accountId: AccountId }); + + accountId(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyAccount; + + static write(value: LedgerKeyAccount, io: Buffer): void; + + static isValid(value: LedgerKeyAccount): boolean; + + static toXDR(value: LedgerKeyAccount): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyAccount; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyAccount; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyTrustLine { + constructor(attributes: { accountId: AccountId; asset: TrustLineAsset }); + + accountId(value?: AccountId): AccountId; + + asset(value?: TrustLineAsset): TrustLineAsset; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyTrustLine; + + static write(value: LedgerKeyTrustLine, io: Buffer): void; + + static isValid(value: LedgerKeyTrustLine): boolean; + + static toXDR(value: LedgerKeyTrustLine): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyTrustLine; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyTrustLine; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyOffer { + constructor(attributes: { sellerId: AccountId; offerId: Int64 }); + + sellerId(value?: AccountId): AccountId; + + offerId(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyOffer; + + static write(value: LedgerKeyOffer, io: Buffer): void; + + static isValid(value: LedgerKeyOffer): boolean; + + static toXDR(value: LedgerKeyOffer): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyOffer; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyOffer; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyData { + constructor(attributes: { + accountId: AccountId; + dataName: string | Buffer; + }); + + accountId(value?: AccountId): AccountId; + + dataName(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyData; + + static write(value: LedgerKeyData, io: Buffer): void; + + static isValid(value: LedgerKeyData): boolean; + + static toXDR(value: LedgerKeyData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyData; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyClaimableBalance { + constructor(attributes: { balanceId: ClaimableBalanceId }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyClaimableBalance; + + static write(value: LedgerKeyClaimableBalance, io: Buffer): void; + + static isValid(value: LedgerKeyClaimableBalance): boolean; + + static toXDR(value: LedgerKeyClaimableBalance): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyClaimableBalance; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyClaimableBalance; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyLiquidityPool { + constructor(attributes: { liquidityPoolId: PoolId }); + + liquidityPoolId(value?: PoolId): PoolId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyLiquidityPool; + + static write(value: LedgerKeyLiquidityPool, io: Buffer): void; + + static isValid(value: LedgerKeyLiquidityPool): boolean; + + static toXDR(value: LedgerKeyLiquidityPool): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyLiquidityPool; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyLiquidityPool; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyContractData { + constructor(attributes: { + contract: ScAddress; + key: ScVal; + durability: ContractDataDurability; + }); + + contract(value?: ScAddress): ScAddress; + + key(value?: ScVal): ScVal; + + durability(value?: ContractDataDurability): ContractDataDurability; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyContractData; + + static write(value: LedgerKeyContractData, io: Buffer): void; + + static isValid(value: LedgerKeyContractData): boolean; + + static toXDR(value: LedgerKeyContractData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyContractData; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyContractData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyContractCode { + constructor(attributes: { hash: Buffer }); + + hash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyContractCode; + + static write(value: LedgerKeyContractCode, io: Buffer): void; + + static isValid(value: LedgerKeyContractCode): boolean; + + static toXDR(value: LedgerKeyContractCode): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyContractCode; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyContractCode; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyConfigSetting { + constructor(attributes: { configSettingId: ConfigSettingId }); + + configSettingId(value?: ConfigSettingId): ConfigSettingId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyConfigSetting; + + static write(value: LedgerKeyConfigSetting, io: Buffer): void; + + static isValid(value: LedgerKeyConfigSetting): boolean; + + static toXDR(value: LedgerKeyConfigSetting): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyConfigSetting; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerKeyConfigSetting; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKeyTtl { + constructor(attributes: { keyHash: Buffer }); + + keyHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKeyTtl; + + static write(value: LedgerKeyTtl, io: Buffer): void; + + static isValid(value: LedgerKeyTtl): boolean; + + static toXDR(value: LedgerKeyTtl): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKeyTtl; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKeyTtl; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BucketMetadata { + constructor(attributes: { ledgerVersion: number; ext: BucketMetadataExt }); + + ledgerVersion(value?: number): number; + + ext(value?: BucketMetadataExt): BucketMetadataExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BucketMetadata; + + static write(value: BucketMetadata, io: Buffer): void; + + static isValid(value: BucketMetadata): boolean; + + static toXDR(value: BucketMetadata): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BucketMetadata; + + static fromXDR(input: string, format: 'hex' | 'base64'): BucketMetadata; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveArchivedLeaf { + constructor(attributes: { index: number; archivedEntry: LedgerEntry }); + + index(value?: number): number; + + archivedEntry(value?: LedgerEntry): LedgerEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveArchivedLeaf; + + static write(value: ColdArchiveArchivedLeaf, io: Buffer): void; + + static isValid(value: ColdArchiveArchivedLeaf): boolean; + + static toXDR(value: ColdArchiveArchivedLeaf): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveArchivedLeaf; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveArchivedLeaf; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveDeletedLeaf { + constructor(attributes: { index: number; deletedKey: LedgerKey }); + + index(value?: number): number; + + deletedKey(value?: LedgerKey): LedgerKey; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveDeletedLeaf; + + static write(value: ColdArchiveDeletedLeaf, io: Buffer): void; + + static isValid(value: ColdArchiveDeletedLeaf): boolean; + + static toXDR(value: ColdArchiveDeletedLeaf): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveDeletedLeaf; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveDeletedLeaf; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveBoundaryLeaf { + constructor(attributes: { index: number; isLowerBound: boolean }); + + index(value?: number): number; + + isLowerBound(value?: boolean): boolean; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveBoundaryLeaf; + + static write(value: ColdArchiveBoundaryLeaf, io: Buffer): void; + + static isValid(value: ColdArchiveBoundaryLeaf): boolean; + + static toXDR(value: ColdArchiveBoundaryLeaf): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveBoundaryLeaf; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveBoundaryLeaf; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveHashEntry { + constructor(attributes: { index: number; level: number; hash: Buffer }); + + index(value?: number): number; + + level(value?: number): number; + + hash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveHashEntry; + + static write(value: ColdArchiveHashEntry, io: Buffer): void; + + static isValid(value: ColdArchiveHashEntry): boolean; + + static toXDR(value: ColdArchiveHashEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveHashEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveHashEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseValueSignature { + constructor(attributes: { nodeId: NodeId; signature: Buffer }); + + nodeId(value?: NodeId): NodeId; + + signature(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseValueSignature; + + static write(value: LedgerCloseValueSignature, io: Buffer): void; + + static isValid(value: LedgerCloseValueSignature): boolean; + + static toXDR(value: LedgerCloseValueSignature): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseValueSignature; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerCloseValueSignature; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StellarValue { + constructor(attributes: { + txSetHash: Buffer; + closeTime: TimePoint; + upgrades: Buffer[]; + ext: StellarValueExt; + }); + + txSetHash(value?: Buffer): Buffer; + + closeTime(value?: TimePoint): TimePoint; + + upgrades(value?: Buffer[]): Buffer[]; + + ext(value?: StellarValueExt): StellarValueExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StellarValue; + + static write(value: StellarValue, io: Buffer): void; + + static isValid(value: StellarValue): boolean; + + static toXDR(value: StellarValue): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StellarValue; + + static fromXDR(input: string, format: 'hex' | 'base64'): StellarValue; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderExtensionV1 { + constructor(attributes: { flags: number; ext: LedgerHeaderExtensionV1Ext }); + + flags(value?: number): number; + + ext(value?: LedgerHeaderExtensionV1Ext): LedgerHeaderExtensionV1Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderExtensionV1; + + static write(value: LedgerHeaderExtensionV1, io: Buffer): void; + + static isValid(value: LedgerHeaderExtensionV1): boolean; + + static toXDR(value: LedgerHeaderExtensionV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderExtensionV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderExtensionV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeader { + constructor(attributes: { + ledgerVersion: number; + previousLedgerHash: Buffer; + scpValue: StellarValue; + txSetResultHash: Buffer; + bucketListHash: Buffer; + ledgerSeq: number; + totalCoins: Int64; + feePool: Int64; + inflationSeq: number; + idPool: Uint64; + baseFee: number; + baseReserve: number; + maxTxSetSize: number; + skipList: Buffer[]; + ext: LedgerHeaderExt; + }); + + ledgerVersion(value?: number): number; + + previousLedgerHash(value?: Buffer): Buffer; + + scpValue(value?: StellarValue): StellarValue; + + txSetResultHash(value?: Buffer): Buffer; + + bucketListHash(value?: Buffer): Buffer; + + ledgerSeq(value?: number): number; + + totalCoins(value?: Int64): Int64; + + feePool(value?: Int64): Int64; + + inflationSeq(value?: number): number; + + idPool(value?: Uint64): Uint64; + + baseFee(value?: number): number; + + baseReserve(value?: number): number; + + maxTxSetSize(value?: number): number; + + skipList(value?: Buffer[]): Buffer[]; + + ext(value?: LedgerHeaderExt): LedgerHeaderExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeader; + + static write(value: LedgerHeader, io: Buffer): void; + + static isValid(value: LedgerHeader): boolean; + + static toXDR(value: LedgerHeader): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeader; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerHeader; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigUpgradeSetKey { + constructor(attributes: { contractId: Buffer; contentHash: Buffer }); + + contractId(value?: Buffer): Buffer; + + contentHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigUpgradeSetKey; + + static write(value: ConfigUpgradeSetKey, io: Buffer): void; + + static isValid(value: ConfigUpgradeSetKey): boolean; + + static toXDR(value: ConfigUpgradeSetKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ConfigUpgradeSetKey; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigUpgradeSetKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigUpgradeSet { + constructor(attributes: { updatedEntry: ConfigSettingEntry[] }); + + updatedEntry(value?: ConfigSettingEntry[]): ConfigSettingEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigUpgradeSet; + + static write(value: ConfigUpgradeSet, io: Buffer): void; + + static isValid(value: ConfigUpgradeSet): boolean; + + static toXDR(value: ConfigUpgradeSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ConfigUpgradeSet; + + static fromXDR(input: string, format: 'hex' | 'base64'): ConfigUpgradeSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ParallelTxsComponent { + constructor(attributes: { + baseFee: null | Int64; + executionStages: TransactionEnvelope[][][]; + }); + + baseFee(value?: null | Int64): null | Int64; + + executionStages( + value?: TransactionEnvelope[][][], + ): TransactionEnvelope[][][]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ParallelTxsComponent; + + static write(value: ParallelTxsComponent, io: Buffer): void; + + static isValid(value: ParallelTxsComponent): boolean; + + static toXDR(value: ParallelTxsComponent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ParallelTxsComponent; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ParallelTxsComponent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TxSetComponentTxsMaybeDiscountedFee { + constructor(attributes: { + baseFee: null | Int64; + txes: TransactionEnvelope[]; + }); + + baseFee(value?: null | Int64): null | Int64; + + txes(value?: TransactionEnvelope[]): TransactionEnvelope[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TxSetComponentTxsMaybeDiscountedFee; + + static write(value: TxSetComponentTxsMaybeDiscountedFee, io: Buffer): void; + + static isValid(value: TxSetComponentTxsMaybeDiscountedFee): boolean; + + static toXDR(value: TxSetComponentTxsMaybeDiscountedFee): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TxSetComponentTxsMaybeDiscountedFee; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TxSetComponentTxsMaybeDiscountedFee; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSet { + constructor(attributes: { + previousLedgerHash: Buffer; + txes: TransactionEnvelope[]; + }); + + previousLedgerHash(value?: Buffer): Buffer; + + txes(value?: TransactionEnvelope[]): TransactionEnvelope[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSet; + + static write(value: TransactionSet, io: Buffer): void; + + static isValid(value: TransactionSet): boolean; + + static toXDR(value: TransactionSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionSet; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSetV1 { + constructor(attributes: { + previousLedgerHash: Buffer; + phases: TransactionPhase[]; + }); + + previousLedgerHash(value?: Buffer): Buffer; + + phases(value?: TransactionPhase[]): TransactionPhase[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSetV1; + + static write(value: TransactionSetV1, io: Buffer): void; + + static isValid(value: TransactionSetV1): boolean; + + static toXDR(value: TransactionSetV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionSetV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionSetV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultPair { + constructor(attributes: { + transactionHash: Buffer; + result: TransactionResult; + }); + + transactionHash(value?: Buffer): Buffer; + + result(value?: TransactionResult): TransactionResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultPair; + + static write(value: TransactionResultPair, io: Buffer): void; + + static isValid(value: TransactionResultPair): boolean; + + static toXDR(value: TransactionResultPair): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultPair; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultPair; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultSet { + constructor(attributes: { results: TransactionResultPair[] }); + + results(value?: TransactionResultPair[]): TransactionResultPair[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultSet; + + static write(value: TransactionResultSet, io: Buffer): void; + + static isValid(value: TransactionResultSet): boolean; + + static toXDR(value: TransactionResultSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultSet; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryEntry { + constructor(attributes: { + ledgerSeq: number; + txSet: TransactionSet; + ext: TransactionHistoryEntryExt; + }); + + ledgerSeq(value?: number): number; + + txSet(value?: TransactionSet): TransactionSet; + + ext(value?: TransactionHistoryEntryExt): TransactionHistoryEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryEntry; + + static write(value: TransactionHistoryEntry, io: Buffer): void; + + static isValid(value: TransactionHistoryEntry): boolean; + + static toXDR(value: TransactionHistoryEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionHistoryEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryResultEntry { + constructor(attributes: { + ledgerSeq: number; + txResultSet: TransactionResultSet; + ext: TransactionHistoryResultEntryExt; + }); + + ledgerSeq(value?: number): number; + + txResultSet(value?: TransactionResultSet): TransactionResultSet; + + ext( + value?: TransactionHistoryResultEntryExt, + ): TransactionHistoryResultEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryResultEntry; + + static write(value: TransactionHistoryResultEntry, io: Buffer): void; + + static isValid(value: TransactionHistoryResultEntry): boolean; + + static toXDR(value: TransactionHistoryResultEntry): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TransactionHistoryResultEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryResultEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderHistoryEntry { + constructor(attributes: { + hash: Buffer; + header: LedgerHeader; + ext: LedgerHeaderHistoryEntryExt; + }); + + hash(value?: Buffer): Buffer; + + header(value?: LedgerHeader): LedgerHeader; + + ext(value?: LedgerHeaderHistoryEntryExt): LedgerHeaderHistoryEntryExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderHistoryEntry; + + static write(value: LedgerHeaderHistoryEntry, io: Buffer): void; + + static isValid(value: LedgerHeaderHistoryEntry): boolean; + + static toXDR(value: LedgerHeaderHistoryEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderHistoryEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderHistoryEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerScpMessages { + constructor(attributes: { ledgerSeq: number; messages: ScpEnvelope[] }); + + ledgerSeq(value?: number): number; + + messages(value?: ScpEnvelope[]): ScpEnvelope[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerScpMessages; + + static write(value: LedgerScpMessages, io: Buffer): void; + + static isValid(value: LedgerScpMessages): boolean; + + static toXDR(value: LedgerScpMessages): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerScpMessages; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerScpMessages; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpHistoryEntryV0 { + constructor(attributes: { + quorumSets: ScpQuorumSet[]; + ledgerMessages: LedgerScpMessages; + }); + + quorumSets(value?: ScpQuorumSet[]): ScpQuorumSet[]; + + ledgerMessages(value?: LedgerScpMessages): LedgerScpMessages; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpHistoryEntryV0; + + static write(value: ScpHistoryEntryV0, io: Buffer): void; + + static isValid(value: ScpHistoryEntryV0): boolean; + + static toXDR(value: ScpHistoryEntryV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpHistoryEntryV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpHistoryEntryV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationMeta { + constructor(attributes: { changes: LedgerEntryChange[] }); + + changes(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationMeta; + + static write(value: OperationMeta, io: Buffer): void; + + static isValid(value: OperationMeta): boolean; + + static toXDR(value: OperationMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMetaV1 { + constructor(attributes: { + txChanges: LedgerEntryChange[]; + operations: OperationMeta[]; + }); + + txChanges(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + operations(value?: OperationMeta[]): OperationMeta[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMetaV1; + + static write(value: TransactionMetaV1, io: Buffer): void; + + static isValid(value: TransactionMetaV1): boolean; + + static toXDR(value: TransactionMetaV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMetaV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMetaV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMetaV2 { + constructor(attributes: { + txChangesBefore: LedgerEntryChange[]; + operations: OperationMeta[]; + txChangesAfter: LedgerEntryChange[]; + }); + + txChangesBefore(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + operations(value?: OperationMeta[]): OperationMeta[]; + + txChangesAfter(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMetaV2; + + static write(value: TransactionMetaV2, io: Buffer): void; + + static isValid(value: TransactionMetaV2): boolean; + + static toXDR(value: TransactionMetaV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMetaV2; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMetaV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractEventV0 { + constructor(attributes: { topics: ScVal[]; data: ScVal }); + + topics(value?: ScVal[]): ScVal[]; + + data(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractEventV0; + + static write(value: ContractEventV0, io: Buffer): void; + + static isValid(value: ContractEventV0): boolean; + + static toXDR(value: ContractEventV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractEventV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractEventV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractEvent { + constructor(attributes: { + ext: ExtensionPoint; + contractId: null | Buffer; + type: ContractEventType; + body: ContractEventBody; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + contractId(value?: null | Buffer): null | Buffer; + + type(value?: ContractEventType): ContractEventType; + + body(value?: ContractEventBody): ContractEventBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractEvent; + + static write(value: ContractEvent, io: Buffer): void; + + static isValid(value: ContractEvent): boolean; + + static toXDR(value: ContractEvent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractEvent; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractEvent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DiagnosticEvent { + constructor(attributes: { + inSuccessfulContractCall: boolean; + event: ContractEvent; + }); + + inSuccessfulContractCall(value?: boolean): boolean; + + event(value?: ContractEvent): ContractEvent; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DiagnosticEvent; + + static write(value: DiagnosticEvent, io: Buffer): void; + + static isValid(value: DiagnosticEvent): boolean; + + static toXDR(value: DiagnosticEvent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DiagnosticEvent; + + static fromXDR(input: string, format: 'hex' | 'base64'): DiagnosticEvent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionMetaExtV1 { + constructor(attributes: { + ext: ExtensionPoint; + totalNonRefundableResourceFeeCharged: Int64; + totalRefundableResourceFeeCharged: Int64; + rentFeeCharged: Int64; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + totalNonRefundableResourceFeeCharged(value?: Int64): Int64; + + totalRefundableResourceFeeCharged(value?: Int64): Int64; + + rentFeeCharged(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionMetaExtV1; + + static write(value: SorobanTransactionMetaExtV1, io: Buffer): void; + + static isValid(value: SorobanTransactionMetaExtV1): boolean; + + static toXDR(value: SorobanTransactionMetaExtV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionMetaExtV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionMetaExtV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionMeta { + constructor(attributes: { + ext: SorobanTransactionMetaExt; + events: ContractEvent[]; + returnValue: ScVal; + diagnosticEvents: DiagnosticEvent[]; + }); + + ext(value?: SorobanTransactionMetaExt): SorobanTransactionMetaExt; + + events(value?: ContractEvent[]): ContractEvent[]; + + returnValue(value?: ScVal): ScVal; + + diagnosticEvents(value?: DiagnosticEvent[]): DiagnosticEvent[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionMeta; + + static write(value: SorobanTransactionMeta, io: Buffer): void; + + static isValid(value: SorobanTransactionMeta): boolean; + + static toXDR(value: SorobanTransactionMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionMeta; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMetaV3 { + constructor(attributes: { + ext: ExtensionPoint; + txChangesBefore: LedgerEntryChange[]; + operations: OperationMeta[]; + txChangesAfter: LedgerEntryChange[]; + sorobanMeta: null | SorobanTransactionMeta; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + txChangesBefore(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + operations(value?: OperationMeta[]): OperationMeta[]; + + txChangesAfter(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + sorobanMeta( + value?: null | SorobanTransactionMeta, + ): null | SorobanTransactionMeta; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMetaV3; + + static write(value: TransactionMetaV3, io: Buffer): void; + + static isValid(value: TransactionMetaV3): boolean; + + static toXDR(value: TransactionMetaV3): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMetaV3; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMetaV3; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeHostFunctionSuccessPreImage { + constructor(attributes: { returnValue: ScVal; events: ContractEvent[] }); + + returnValue(value?: ScVal): ScVal; + + events(value?: ContractEvent[]): ContractEvent[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeHostFunctionSuccessPreImage; + + static write(value: InvokeHostFunctionSuccessPreImage, io: Buffer): void; + + static isValid(value: InvokeHostFunctionSuccessPreImage): boolean; + + static toXDR(value: InvokeHostFunctionSuccessPreImage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): InvokeHostFunctionSuccessPreImage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InvokeHostFunctionSuccessPreImage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultMeta { + constructor(attributes: { + result: TransactionResultPair; + feeProcessing: LedgerEntryChange[]; + txApplyProcessing: TransactionMeta; + }); + + result(value?: TransactionResultPair): TransactionResultPair; + + feeProcessing(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + txApplyProcessing(value?: TransactionMeta): TransactionMeta; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultMeta; + + static write(value: TransactionResultMeta, io: Buffer): void; + + static isValid(value: TransactionResultMeta): boolean; + + static toXDR(value: TransactionResultMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultMeta; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class UpgradeEntryMeta { + constructor(attributes: { + upgrade: LedgerUpgrade; + changes: LedgerEntryChange[]; + }); + + upgrade(value?: LedgerUpgrade): LedgerUpgrade; + + changes(value?: LedgerEntryChange[]): LedgerEntryChange[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): UpgradeEntryMeta; + + static write(value: UpgradeEntryMeta, io: Buffer): void; + + static isValid(value: UpgradeEntryMeta): boolean; + + static toXDR(value: UpgradeEntryMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UpgradeEntryMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): UpgradeEntryMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaV0 { + constructor(attributes: { + ledgerHeader: LedgerHeaderHistoryEntry; + txSet: TransactionSet; + txProcessing: TransactionResultMeta[]; + upgradesProcessing: UpgradeEntryMeta[]; + scpInfo: ScpHistoryEntry[]; + }); + + ledgerHeader(value?: LedgerHeaderHistoryEntry): LedgerHeaderHistoryEntry; + + txSet(value?: TransactionSet): TransactionSet; + + txProcessing(value?: TransactionResultMeta[]): TransactionResultMeta[]; + + upgradesProcessing(value?: UpgradeEntryMeta[]): UpgradeEntryMeta[]; + + scpInfo(value?: ScpHistoryEntry[]): ScpHistoryEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaV0; + + static write(value: LedgerCloseMetaV0, io: Buffer): void; + + static isValid(value: LedgerCloseMetaV0): boolean; + + static toXDR(value: LedgerCloseMetaV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMetaV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaExtV1 { + constructor(attributes: { ext: ExtensionPoint; sorobanFeeWrite1Kb: Int64 }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + sorobanFeeWrite1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaExtV1; + + static write(value: LedgerCloseMetaExtV1, io: Buffer): void; + + static isValid(value: LedgerCloseMetaExtV1): boolean; + + static toXDR(value: LedgerCloseMetaExtV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaExtV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerCloseMetaExtV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaV1 { + constructor(attributes: { + ext: LedgerCloseMetaExt; + ledgerHeader: LedgerHeaderHistoryEntry; + txSet: GeneralizedTransactionSet; + txProcessing: TransactionResultMeta[]; + upgradesProcessing: UpgradeEntryMeta[]; + scpInfo: ScpHistoryEntry[]; + totalByteSizeOfBucketList: Uint64; + evictedTemporaryLedgerKeys: LedgerKey[]; + evictedPersistentLedgerEntries: LedgerEntry[]; + }); + + ext(value?: LedgerCloseMetaExt): LedgerCloseMetaExt; + + ledgerHeader(value?: LedgerHeaderHistoryEntry): LedgerHeaderHistoryEntry; + + txSet(value?: GeneralizedTransactionSet): GeneralizedTransactionSet; + + txProcessing(value?: TransactionResultMeta[]): TransactionResultMeta[]; + + upgradesProcessing(value?: UpgradeEntryMeta[]): UpgradeEntryMeta[]; + + scpInfo(value?: ScpHistoryEntry[]): ScpHistoryEntry[]; + + totalByteSizeOfBucketList(value?: Uint64): Uint64; + + evictedTemporaryLedgerKeys(value?: LedgerKey[]): LedgerKey[]; + + evictedPersistentLedgerEntries(value?: LedgerEntry[]): LedgerEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaV1; + + static write(value: LedgerCloseMetaV1, io: Buffer): void; + + static isValid(value: LedgerCloseMetaV1): boolean; + + static toXDR(value: LedgerCloseMetaV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaV1; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMetaV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Error { + constructor(attributes: { code: ErrorCode; msg: string | Buffer }); + + code(value?: ErrorCode): ErrorCode; + + msg(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Error; + + static write(value: Error, io: Buffer): void; + + static isValid(value: Error): boolean; + + static toXDR(value: Error): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Error; + + static fromXDR(input: string, format: 'hex' | 'base64'): Error; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SendMore { + constructor(attributes: { numMessages: number }); + + numMessages(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SendMore; + + static write(value: SendMore, io: Buffer): void; + + static isValid(value: SendMore): boolean; + + static toXDR(value: SendMore): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SendMore; + + static fromXDR(input: string, format: 'hex' | 'base64'): SendMore; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SendMoreExtended { + constructor(attributes: { numMessages: number; numBytes: number }); + + numMessages(value?: number): number; + + numBytes(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SendMoreExtended; + + static write(value: SendMoreExtended, io: Buffer): void; + + static isValid(value: SendMoreExtended): boolean; + + static toXDR(value: SendMoreExtended): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SendMoreExtended; + + static fromXDR(input: string, format: 'hex' | 'base64'): SendMoreExtended; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AuthCert { + constructor(attributes: { + pubkey: Curve25519Public; + expiration: Uint64; + sig: Buffer; + }); + + pubkey(value?: Curve25519Public): Curve25519Public; + + expiration(value?: Uint64): Uint64; + + sig(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AuthCert; + + static write(value: AuthCert, io: Buffer): void; + + static isValid(value: AuthCert): boolean; + + static toXDR(value: AuthCert): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AuthCert; + + static fromXDR(input: string, format: 'hex' | 'base64'): AuthCert; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Hello { + constructor(attributes: { + ledgerVersion: number; + overlayVersion: number; + overlayMinVersion: number; + networkId: Buffer; + versionStr: string | Buffer; + listeningPort: number; + peerId: NodeId; + cert: AuthCert; + nonce: Buffer; + }); + + ledgerVersion(value?: number): number; + + overlayVersion(value?: number): number; + + overlayMinVersion(value?: number): number; + + networkId(value?: Buffer): Buffer; + + versionStr(value?: string | Buffer): string | Buffer; + + listeningPort(value?: number): number; + + peerId(value?: NodeId): NodeId; + + cert(value?: AuthCert): AuthCert; + + nonce(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Hello; + + static write(value: Hello, io: Buffer): void; + + static isValid(value: Hello): boolean; + + static toXDR(value: Hello): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Hello; + + static fromXDR(input: string, format: 'hex' | 'base64'): Hello; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Auth { + constructor(attributes: { flags: number }); + + flags(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Auth; + + static write(value: Auth, io: Buffer): void; + + static isValid(value: Auth): boolean; + + static toXDR(value: Auth): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Auth; + + static fromXDR(input: string, format: 'hex' | 'base64'): Auth; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PeerAddress { + constructor(attributes: { + ip: PeerAddressIp; + port: number; + numFailures: number; + }); + + ip(value?: PeerAddressIp): PeerAddressIp; + + port(value?: number): number; + + numFailures(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PeerAddress; + + static write(value: PeerAddress, io: Buffer): void; + + static isValid(value: PeerAddress): boolean; + + static toXDR(value: PeerAddress): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PeerAddress; + + static fromXDR(input: string, format: 'hex' | 'base64'): PeerAddress; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DontHave { + constructor(attributes: { type: MessageType; reqHash: Buffer }); + + type(value?: MessageType): MessageType; + + reqHash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DontHave; + + static write(value: DontHave, io: Buffer): void; + + static isValid(value: DontHave): boolean; + + static toXDR(value: DontHave): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DontHave; + + static fromXDR(input: string, format: 'hex' | 'base64'): DontHave; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyStartCollectingMessage { + constructor(attributes: { + surveyorId: NodeId; + nonce: number; + ledgerNum: number; + }); + + surveyorId(value?: NodeId): NodeId; + + nonce(value?: number): number; + + ledgerNum(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyStartCollectingMessage; + + static write( + value: TimeSlicedSurveyStartCollectingMessage, + io: Buffer, + ): void; + + static isValid(value: TimeSlicedSurveyStartCollectingMessage): boolean; + + static toXDR(value: TimeSlicedSurveyStartCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyStartCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyStartCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyStartCollectingMessage { + constructor(attributes: { + signature: Buffer; + startCollecting: TimeSlicedSurveyStartCollectingMessage; + }); + + signature(value?: Buffer): Buffer; + + startCollecting( + value?: TimeSlicedSurveyStartCollectingMessage, + ): TimeSlicedSurveyStartCollectingMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyStartCollectingMessage; + + static write( + value: SignedTimeSlicedSurveyStartCollectingMessage, + io: Buffer, + ): void; + + static isValid( + value: SignedTimeSlicedSurveyStartCollectingMessage, + ): boolean; + + static toXDR(value: SignedTimeSlicedSurveyStartCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyStartCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyStartCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyStopCollectingMessage { + constructor(attributes: { + surveyorId: NodeId; + nonce: number; + ledgerNum: number; + }); + + surveyorId(value?: NodeId): NodeId; + + nonce(value?: number): number; + + ledgerNum(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyStopCollectingMessage; + + static write( + value: TimeSlicedSurveyStopCollectingMessage, + io: Buffer, + ): void; + + static isValid(value: TimeSlicedSurveyStopCollectingMessage): boolean; + + static toXDR(value: TimeSlicedSurveyStopCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyStopCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyStopCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyStopCollectingMessage { + constructor(attributes: { + signature: Buffer; + stopCollecting: TimeSlicedSurveyStopCollectingMessage; + }); + + signature(value?: Buffer): Buffer; + + stopCollecting( + value?: TimeSlicedSurveyStopCollectingMessage, + ): TimeSlicedSurveyStopCollectingMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyStopCollectingMessage; + + static write( + value: SignedTimeSlicedSurveyStopCollectingMessage, + io: Buffer, + ): void; + + static isValid(value: SignedTimeSlicedSurveyStopCollectingMessage): boolean; + + static toXDR(value: SignedTimeSlicedSurveyStopCollectingMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyStopCollectingMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyStopCollectingMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SurveyRequestMessage { + constructor(attributes: { + surveyorPeerId: NodeId; + surveyedPeerId: NodeId; + ledgerNum: number; + encryptionKey: Curve25519Public; + commandType: SurveyMessageCommandType; + }); + + surveyorPeerId(value?: NodeId): NodeId; + + surveyedPeerId(value?: NodeId): NodeId; + + ledgerNum(value?: number): number; + + encryptionKey(value?: Curve25519Public): Curve25519Public; + + commandType(value?: SurveyMessageCommandType): SurveyMessageCommandType; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SurveyRequestMessage; + + static write(value: SurveyRequestMessage, io: Buffer): void; + + static isValid(value: SurveyRequestMessage): boolean; + + static toXDR(value: SurveyRequestMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyRequestMessage { + constructor(attributes: { + request: SurveyRequestMessage; + nonce: number; + inboundPeersIndex: number; + outboundPeersIndex: number; + }); + + request(value?: SurveyRequestMessage): SurveyRequestMessage; + + nonce(value?: number): number; + + inboundPeersIndex(value?: number): number; + + outboundPeersIndex(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyRequestMessage; + + static write(value: TimeSlicedSurveyRequestMessage, io: Buffer): void; + + static isValid(value: TimeSlicedSurveyRequestMessage): boolean; + + static toXDR(value: TimeSlicedSurveyRequestMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedSurveyRequestMessage { + constructor(attributes: { + requestSignature: Buffer; + request: SurveyRequestMessage; + }); + + requestSignature(value?: Buffer): Buffer; + + request(value?: SurveyRequestMessage): SurveyRequestMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedSurveyRequestMessage; + + static write(value: SignedSurveyRequestMessage, io: Buffer): void; + + static isValid(value: SignedSurveyRequestMessage): boolean; + + static toXDR(value: SignedSurveyRequestMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SignedSurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedSurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyRequestMessage { + constructor(attributes: { + requestSignature: Buffer; + request: TimeSlicedSurveyRequestMessage; + }); + + requestSignature(value?: Buffer): Buffer; + + request( + value?: TimeSlicedSurveyRequestMessage, + ): TimeSlicedSurveyRequestMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyRequestMessage; + + static write(value: SignedTimeSlicedSurveyRequestMessage, io: Buffer): void; + + static isValid(value: SignedTimeSlicedSurveyRequestMessage): boolean; + + static toXDR(value: SignedTimeSlicedSurveyRequestMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyRequestMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyRequestMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SurveyResponseMessage { + constructor(attributes: { + surveyorPeerId: NodeId; + surveyedPeerId: NodeId; + ledgerNum: number; + commandType: SurveyMessageCommandType; + encryptedBody: Buffer; + }); + + surveyorPeerId(value?: NodeId): NodeId; + + surveyedPeerId(value?: NodeId): NodeId; + + ledgerNum(value?: number): number; + + commandType(value?: SurveyMessageCommandType): SurveyMessageCommandType; + + encryptedBody(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SurveyResponseMessage; + + static write(value: SurveyResponseMessage, io: Buffer): void; + + static isValid(value: SurveyResponseMessage): boolean; + + static toXDR(value: SurveyResponseMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedSurveyResponseMessage { + constructor(attributes: { response: SurveyResponseMessage; nonce: number }); + + response(value?: SurveyResponseMessage): SurveyResponseMessage; + + nonce(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedSurveyResponseMessage; + + static write(value: TimeSlicedSurveyResponseMessage, io: Buffer): void; + + static isValid(value: TimeSlicedSurveyResponseMessage): boolean; + + static toXDR(value: TimeSlicedSurveyResponseMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TimeSlicedSurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TimeSlicedSurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedSurveyResponseMessage { + constructor(attributes: { + responseSignature: Buffer; + response: SurveyResponseMessage; + }); + + responseSignature(value?: Buffer): Buffer; + + response(value?: SurveyResponseMessage): SurveyResponseMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedSurveyResponseMessage; + + static write(value: SignedSurveyResponseMessage, io: Buffer): void; + + static isValid(value: SignedSurveyResponseMessage): boolean; + + static toXDR(value: SignedSurveyResponseMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SignedSurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedSurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignedTimeSlicedSurveyResponseMessage { + constructor(attributes: { + responseSignature: Buffer; + response: TimeSlicedSurveyResponseMessage; + }); + + responseSignature(value?: Buffer): Buffer; + + response( + value?: TimeSlicedSurveyResponseMessage, + ): TimeSlicedSurveyResponseMessage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignedTimeSlicedSurveyResponseMessage; + + static write( + value: SignedTimeSlicedSurveyResponseMessage, + io: Buffer, + ): void; + + static isValid(value: SignedTimeSlicedSurveyResponseMessage): boolean; + + static toXDR(value: SignedTimeSlicedSurveyResponseMessage): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignedTimeSlicedSurveyResponseMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignedTimeSlicedSurveyResponseMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PeerStats { + constructor(attributes: { + id: NodeId; + versionStr: string | Buffer; + messagesRead: Uint64; + messagesWritten: Uint64; + bytesRead: Uint64; + bytesWritten: Uint64; + secondsConnected: Uint64; + uniqueFloodBytesRecv: Uint64; + duplicateFloodBytesRecv: Uint64; + uniqueFetchBytesRecv: Uint64; + duplicateFetchBytesRecv: Uint64; + uniqueFloodMessageRecv: Uint64; + duplicateFloodMessageRecv: Uint64; + uniqueFetchMessageRecv: Uint64; + duplicateFetchMessageRecv: Uint64; + }); + + id(value?: NodeId): NodeId; + + versionStr(value?: string | Buffer): string | Buffer; + + messagesRead(value?: Uint64): Uint64; + + messagesWritten(value?: Uint64): Uint64; + + bytesRead(value?: Uint64): Uint64; + + bytesWritten(value?: Uint64): Uint64; + + secondsConnected(value?: Uint64): Uint64; + + uniqueFloodBytesRecv(value?: Uint64): Uint64; + + duplicateFloodBytesRecv(value?: Uint64): Uint64; + + uniqueFetchBytesRecv(value?: Uint64): Uint64; + + duplicateFetchBytesRecv(value?: Uint64): Uint64; + + uniqueFloodMessageRecv(value?: Uint64): Uint64; + + duplicateFloodMessageRecv(value?: Uint64): Uint64; + + uniqueFetchMessageRecv(value?: Uint64): Uint64; + + duplicateFetchMessageRecv(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PeerStats; + + static write(value: PeerStats, io: Buffer): void; + + static isValid(value: PeerStats): boolean; + + static toXDR(value: PeerStats): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PeerStats; + + static fromXDR(input: string, format: 'hex' | 'base64'): PeerStats; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedNodeData { + constructor(attributes: { + addedAuthenticatedPeers: number; + droppedAuthenticatedPeers: number; + totalInboundPeerCount: number; + totalOutboundPeerCount: number; + p75ScpFirstToSelfLatencyMs: number; + p75ScpSelfToOtherLatencyMs: number; + lostSyncCount: number; + isValidator: boolean; + maxInboundPeerCount: number; + maxOutboundPeerCount: number; + }); + + addedAuthenticatedPeers(value?: number): number; + + droppedAuthenticatedPeers(value?: number): number; + + totalInboundPeerCount(value?: number): number; + + totalOutboundPeerCount(value?: number): number; + + p75ScpFirstToSelfLatencyMs(value?: number): number; + + p75ScpSelfToOtherLatencyMs(value?: number): number; + + lostSyncCount(value?: number): number; + + isValidator(value?: boolean): boolean; + + maxInboundPeerCount(value?: number): number; + + maxOutboundPeerCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedNodeData; + + static write(value: TimeSlicedNodeData, io: Buffer): void; + + static isValid(value: TimeSlicedNodeData): boolean; + + static toXDR(value: TimeSlicedNodeData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TimeSlicedNodeData; + + static fromXDR(input: string, format: 'hex' | 'base64'): TimeSlicedNodeData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeSlicedPeerData { + constructor(attributes: { peerStats: PeerStats; averageLatencyMs: number }); + + peerStats(value?: PeerStats): PeerStats; + + averageLatencyMs(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeSlicedPeerData; + + static write(value: TimeSlicedPeerData, io: Buffer): void; + + static isValid(value: TimeSlicedPeerData): boolean; + + static toXDR(value: TimeSlicedPeerData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TimeSlicedPeerData; + + static fromXDR(input: string, format: 'hex' | 'base64'): TimeSlicedPeerData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TopologyResponseBodyV0 { + constructor(attributes: { + inboundPeers: PeerStats[]; + outboundPeers: PeerStats[]; + totalInboundPeerCount: number; + totalOutboundPeerCount: number; + }); + + inboundPeers(value?: PeerStats[]): PeerStats[]; + + outboundPeers(value?: PeerStats[]): PeerStats[]; + + totalInboundPeerCount(value?: number): number; + + totalOutboundPeerCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TopologyResponseBodyV0; + + static write(value: TopologyResponseBodyV0, io: Buffer): void; + + static isValid(value: TopologyResponseBodyV0): boolean; + + static toXDR(value: TopologyResponseBodyV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TopologyResponseBodyV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TopologyResponseBodyV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TopologyResponseBodyV1 { + constructor(attributes: { + inboundPeers: PeerStats[]; + outboundPeers: PeerStats[]; + totalInboundPeerCount: number; + totalOutboundPeerCount: number; + maxInboundPeerCount: number; + maxOutboundPeerCount: number; + }); + + inboundPeers(value?: PeerStats[]): PeerStats[]; + + outboundPeers(value?: PeerStats[]): PeerStats[]; + + totalInboundPeerCount(value?: number): number; + + totalOutboundPeerCount(value?: number): number; + + maxInboundPeerCount(value?: number): number; + + maxOutboundPeerCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TopologyResponseBodyV1; + + static write(value: TopologyResponseBodyV1, io: Buffer): void; + + static isValid(value: TopologyResponseBodyV1): boolean; + + static toXDR(value: TopologyResponseBodyV1): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TopologyResponseBodyV1; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TopologyResponseBodyV1; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TopologyResponseBodyV2 { + constructor(attributes: { + inboundPeers: TimeSlicedPeerData[]; + outboundPeers: TimeSlicedPeerData[]; + nodeData: TimeSlicedNodeData; + }); + + inboundPeers(value?: TimeSlicedPeerData[]): TimeSlicedPeerData[]; + + outboundPeers(value?: TimeSlicedPeerData[]): TimeSlicedPeerData[]; + + nodeData(value?: TimeSlicedNodeData): TimeSlicedNodeData; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TopologyResponseBodyV2; + + static write(value: TopologyResponseBodyV2, io: Buffer): void; + + static isValid(value: TopologyResponseBodyV2): boolean; + + static toXDR(value: TopologyResponseBodyV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TopologyResponseBodyV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TopologyResponseBodyV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FloodAdvert { + constructor(attributes: { txHashes: Hash[] }); + + txHashes(value?: Hash[]): Hash[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FloodAdvert; + + static write(value: FloodAdvert, io: Buffer): void; + + static isValid(value: FloodAdvert): boolean; + + static toXDR(value: FloodAdvert): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FloodAdvert; + + static fromXDR(input: string, format: 'hex' | 'base64'): FloodAdvert; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FloodDemand { + constructor(attributes: { txHashes: Hash[] }); + + txHashes(value?: Hash[]): Hash[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FloodDemand; + + static write(value: FloodDemand, io: Buffer): void; + + static isValid(value: FloodDemand): boolean; + + static toXDR(value: FloodDemand): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FloodDemand; + + static fromXDR(input: string, format: 'hex' | 'base64'): FloodDemand; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AuthenticatedMessageV0 { + constructor(attributes: { + sequence: Uint64; + message: StellarMessage; + mac: HmacSha256Mac; + }); + + sequence(value?: Uint64): Uint64; + + message(value?: StellarMessage): StellarMessage; + + mac(value?: HmacSha256Mac): HmacSha256Mac; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AuthenticatedMessageV0; + + static write(value: AuthenticatedMessageV0, io: Buffer): void; + + static isValid(value: AuthenticatedMessageV0): boolean; + + static toXDR(value: AuthenticatedMessageV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AuthenticatedMessageV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AuthenticatedMessageV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class MuxedAccountMed25519 { + constructor(attributes: { id: Uint64; ed25519: Buffer }); + + id(value?: Uint64): Uint64; + + ed25519(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): MuxedAccountMed25519; + + static write(value: MuxedAccountMed25519, io: Buffer): void; + + static isValid(value: MuxedAccountMed25519): boolean; + + static toXDR(value: MuxedAccountMed25519): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): MuxedAccountMed25519; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): MuxedAccountMed25519; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DecoratedSignature { + constructor(attributes: { hint: Buffer; signature: Buffer }); + + hint(value?: Buffer): Buffer; + + signature(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DecoratedSignature; + + static write(value: DecoratedSignature, io: Buffer): void; + + static isValid(value: DecoratedSignature): boolean; + + static toXDR(value: DecoratedSignature): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DecoratedSignature; + + static fromXDR(input: string, format: 'hex' | 'base64'): DecoratedSignature; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateAccountOp { + constructor(attributes: { destination: AccountId; startingBalance: Int64 }); + + destination(value?: AccountId): AccountId; + + startingBalance(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateAccountOp; + + static write(value: CreateAccountOp, io: Buffer): void; + + static isValid(value: CreateAccountOp): boolean; + + static toXDR(value: CreateAccountOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateAccountOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): CreateAccountOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PaymentOp { + constructor(attributes: { + destination: MuxedAccount; + asset: Asset; + amount: Int64; + }); + + destination(value?: MuxedAccount): MuxedAccount; + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PaymentOp; + + static write(value: PaymentOp, io: Buffer): void; + + static isValid(value: PaymentOp): boolean; + + static toXDR(value: PaymentOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PaymentOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): PaymentOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictReceiveOp { + constructor(attributes: { + sendAsset: Asset; + sendMax: Int64; + destination: MuxedAccount; + destAsset: Asset; + destAmount: Int64; + path: Asset[]; + }); + + sendAsset(value?: Asset): Asset; + + sendMax(value?: Int64): Int64; + + destination(value?: MuxedAccount): MuxedAccount; + + destAsset(value?: Asset): Asset; + + destAmount(value?: Int64): Int64; + + path(value?: Asset[]): Asset[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictReceiveOp; + + static write(value: PathPaymentStrictReceiveOp, io: Buffer): void; + + static isValid(value: PathPaymentStrictReceiveOp): boolean; + + static toXDR(value: PathPaymentStrictReceiveOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PathPaymentStrictReceiveOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictReceiveOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictSendOp { + constructor(attributes: { + sendAsset: Asset; + sendAmount: Int64; + destination: MuxedAccount; + destAsset: Asset; + destMin: Int64; + path: Asset[]; + }); + + sendAsset(value?: Asset): Asset; + + sendAmount(value?: Int64): Int64; + + destination(value?: MuxedAccount): MuxedAccount; + + destAsset(value?: Asset): Asset; + + destMin(value?: Int64): Int64; + + path(value?: Asset[]): Asset[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictSendOp; + + static write(value: PathPaymentStrictSendOp, io: Buffer): void; + + static isValid(value: PathPaymentStrictSendOp): boolean; + + static toXDR(value: PathPaymentStrictSendOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PathPaymentStrictSendOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictSendOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageSellOfferOp { + constructor(attributes: { + selling: Asset; + buying: Asset; + amount: Int64; + price: Price; + offerId: Int64; + }); + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + price(value?: Price): Price; + + offerId(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageSellOfferOp; + + static write(value: ManageSellOfferOp, io: Buffer): void; + + static isValid(value: ManageSellOfferOp): boolean; + + static toXDR(value: ManageSellOfferOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageSellOfferOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageSellOfferOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageBuyOfferOp { + constructor(attributes: { + selling: Asset; + buying: Asset; + buyAmount: Int64; + price: Price; + offerId: Int64; + }); + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + buyAmount(value?: Int64): Int64; + + price(value?: Price): Price; + + offerId(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageBuyOfferOp; + + static write(value: ManageBuyOfferOp, io: Buffer): void; + + static isValid(value: ManageBuyOfferOp): boolean; + + static toXDR(value: ManageBuyOfferOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageBuyOfferOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageBuyOfferOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreatePassiveSellOfferOp { + constructor(attributes: { + selling: Asset; + buying: Asset; + amount: Int64; + price: Price; + }); + + selling(value?: Asset): Asset; + + buying(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + price(value?: Price): Price; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreatePassiveSellOfferOp; + + static write(value: CreatePassiveSellOfferOp, io: Buffer): void; + + static isValid(value: CreatePassiveSellOfferOp): boolean; + + static toXDR(value: CreatePassiveSellOfferOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreatePassiveSellOfferOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreatePassiveSellOfferOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetOptionsOp { + constructor(attributes: { + inflationDest: null | AccountId; + clearFlags: null | number; + setFlags: null | number; + masterWeight: null | number; + lowThreshold: null | number; + medThreshold: null | number; + highThreshold: null | number; + homeDomain: null | string | Buffer; + signer: null | Signer; + }); + + inflationDest(value?: null | AccountId): null | AccountId; + + clearFlags(value?: null | number): null | number; + + setFlags(value?: null | number): null | number; + + masterWeight(value?: null | number): null | number; + + lowThreshold(value?: null | number): null | number; + + medThreshold(value?: null | number): null | number; + + highThreshold(value?: null | number): null | number; + + homeDomain(value?: null | string | Buffer): null | string | Buffer; + + signer(value?: null | Signer): null | Signer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetOptionsOp; + + static write(value: SetOptionsOp, io: Buffer): void; + + static isValid(value: SetOptionsOp): boolean; + + static toXDR(value: SetOptionsOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetOptionsOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): SetOptionsOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ChangeTrustOp { + constructor(attributes: { line: ChangeTrustAsset; limit: Int64 }); + + line(value?: ChangeTrustAsset): ChangeTrustAsset; + + limit(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ChangeTrustOp; + + static write(value: ChangeTrustOp, io: Buffer): void; + + static isValid(value: ChangeTrustOp): boolean; + + static toXDR(value: ChangeTrustOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ChangeTrustOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ChangeTrustOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AllowTrustOp { + constructor(attributes: { + trustor: AccountId; + asset: AssetCode; + authorize: number; + }); + + trustor(value?: AccountId): AccountId; + + asset(value?: AssetCode): AssetCode; + + authorize(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AllowTrustOp; + + static write(value: AllowTrustOp, io: Buffer): void; + + static isValid(value: AllowTrustOp): boolean; + + static toXDR(value: AllowTrustOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AllowTrustOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): AllowTrustOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageDataOp { + constructor(attributes: { + dataName: string | Buffer; + dataValue: null | Buffer; + }); + + dataName(value?: string | Buffer): string | Buffer; + + dataValue(value?: null | Buffer): null | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageDataOp; + + static write(value: ManageDataOp, io: Buffer): void; + + static isValid(value: ManageDataOp): boolean; + + static toXDR(value: ManageDataOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageDataOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageDataOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BumpSequenceOp { + constructor(attributes: { bumpTo: SequenceNumber }); + + bumpTo(value?: SequenceNumber): SequenceNumber; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BumpSequenceOp; + + static write(value: BumpSequenceOp, io: Buffer): void; + + static isValid(value: BumpSequenceOp): boolean; + + static toXDR(value: BumpSequenceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BumpSequenceOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): BumpSequenceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateClaimableBalanceOp { + constructor(attributes: { + asset: Asset; + amount: Int64; + claimants: Claimant[]; + }); + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + claimants(value?: Claimant[]): Claimant[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateClaimableBalanceOp; + + static write(value: CreateClaimableBalanceOp, io: Buffer): void; + + static isValid(value: CreateClaimableBalanceOp): boolean; + + static toXDR(value: CreateClaimableBalanceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateClaimableBalanceOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateClaimableBalanceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimClaimableBalanceOp { + constructor(attributes: { balanceId: ClaimableBalanceId }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimClaimableBalanceOp; + + static write(value: ClaimClaimableBalanceOp, io: Buffer): void; + + static isValid(value: ClaimClaimableBalanceOp): boolean; + + static toXDR(value: ClaimClaimableBalanceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimClaimableBalanceOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimClaimableBalanceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BeginSponsoringFutureReservesOp { + constructor(attributes: { sponsoredId: AccountId }); + + sponsoredId(value?: AccountId): AccountId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BeginSponsoringFutureReservesOp; + + static write(value: BeginSponsoringFutureReservesOp, io: Buffer): void; + + static isValid(value: BeginSponsoringFutureReservesOp): boolean; + + static toXDR(value: BeginSponsoringFutureReservesOp): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): BeginSponsoringFutureReservesOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): BeginSponsoringFutureReservesOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RevokeSponsorshipOpSigner { + constructor(attributes: { accountId: AccountId; signerKey: SignerKey }); + + accountId(value?: AccountId): AccountId; + + signerKey(value?: SignerKey): SignerKey; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RevokeSponsorshipOpSigner; + + static write(value: RevokeSponsorshipOpSigner, io: Buffer): void; + + static isValid(value: RevokeSponsorshipOpSigner): boolean; + + static toXDR(value: RevokeSponsorshipOpSigner): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RevokeSponsorshipOpSigner; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RevokeSponsorshipOpSigner; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackOp { + constructor(attributes: { + asset: Asset; + from: MuxedAccount; + amount: Int64; + }); + + asset(value?: Asset): Asset; + + from(value?: MuxedAccount): MuxedAccount; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackOp; + + static write(value: ClawbackOp, io: Buffer): void; + + static isValid(value: ClawbackOp): boolean; + + static toXDR(value: ClawbackOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClawbackOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClawbackOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackClaimableBalanceOp { + constructor(attributes: { balanceId: ClaimableBalanceId }); + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackClaimableBalanceOp; + + static write(value: ClawbackClaimableBalanceOp, io: Buffer): void; + + static isValid(value: ClawbackClaimableBalanceOp): boolean; + + static toXDR(value: ClawbackClaimableBalanceOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClawbackClaimableBalanceOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClawbackClaimableBalanceOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetTrustLineFlagsOp { + constructor(attributes: { + trustor: AccountId; + asset: Asset; + clearFlags: number; + setFlags: number; + }); + + trustor(value?: AccountId): AccountId; + + asset(value?: Asset): Asset; + + clearFlags(value?: number): number; + + setFlags(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetTrustLineFlagsOp; + + static write(value: SetTrustLineFlagsOp, io: Buffer): void; + + static isValid(value: SetTrustLineFlagsOp): boolean; + + static toXDR(value: SetTrustLineFlagsOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetTrustLineFlagsOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SetTrustLineFlagsOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolDepositOp { + constructor(attributes: { + liquidityPoolId: PoolId; + maxAmountA: Int64; + maxAmountB: Int64; + minPrice: Price; + maxPrice: Price; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + maxAmountA(value?: Int64): Int64; + + maxAmountB(value?: Int64): Int64; + + minPrice(value?: Price): Price; + + maxPrice(value?: Price): Price; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolDepositOp; + + static write(value: LiquidityPoolDepositOp, io: Buffer): void; + + static isValid(value: LiquidityPoolDepositOp): boolean; + + static toXDR(value: LiquidityPoolDepositOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolDepositOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolDepositOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolWithdrawOp { + constructor(attributes: { + liquidityPoolId: PoolId; + amount: Int64; + minAmountA: Int64; + minAmountB: Int64; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + amount(value?: Int64): Int64; + + minAmountA(value?: Int64): Int64; + + minAmountB(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolWithdrawOp; + + static write(value: LiquidityPoolWithdrawOp, io: Buffer): void; + + static isValid(value: LiquidityPoolWithdrawOp): boolean; + + static toXDR(value: LiquidityPoolWithdrawOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolWithdrawOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolWithdrawOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractIdPreimageFromAddress { + constructor(attributes: { address: ScAddress; salt: Buffer }); + + address(value?: ScAddress): ScAddress; + + salt(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractIdPreimageFromAddress; + + static write(value: ContractIdPreimageFromAddress, io: Buffer): void; + + static isValid(value: ContractIdPreimageFromAddress): boolean; + + static toXDR(value: ContractIdPreimageFromAddress): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ContractIdPreimageFromAddress; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractIdPreimageFromAddress; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateContractArgs { + constructor(attributes: { + contractIdPreimage: ContractIdPreimage; + executable: ContractExecutable; + }); + + contractIdPreimage(value?: ContractIdPreimage): ContractIdPreimage; + + executable(value?: ContractExecutable): ContractExecutable; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateContractArgs; + + static write(value: CreateContractArgs, io: Buffer): void; + + static isValid(value: CreateContractArgs): boolean; + + static toXDR(value: CreateContractArgs): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateContractArgs; + + static fromXDR(input: string, format: 'hex' | 'base64'): CreateContractArgs; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateContractArgsV2 { + constructor(attributes: { + contractIdPreimage: ContractIdPreimage; + executable: ContractExecutable; + constructorArgs: ScVal[]; + }); + + contractIdPreimage(value?: ContractIdPreimage): ContractIdPreimage; + + executable(value?: ContractExecutable): ContractExecutable; + + constructorArgs(value?: ScVal[]): ScVal[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateContractArgsV2; + + static write(value: CreateContractArgsV2, io: Buffer): void; + + static isValid(value: CreateContractArgsV2): boolean; + + static toXDR(value: CreateContractArgsV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateContractArgsV2; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateContractArgsV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeContractArgs { + constructor(attributes: { + contractAddress: ScAddress; + functionName: string | Buffer; + args: ScVal[]; + }); + + contractAddress(value?: ScAddress): ScAddress; + + functionName(value?: string | Buffer): string | Buffer; + + args(value?: ScVal[]): ScVal[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeContractArgs; + + static write(value: InvokeContractArgs, io: Buffer): void; + + static isValid(value: InvokeContractArgs): boolean; + + static toXDR(value: InvokeContractArgs): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InvokeContractArgs; + + static fromXDR(input: string, format: 'hex' | 'base64'): InvokeContractArgs; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAuthorizedInvocation { + constructor(attributes: { + function: SorobanAuthorizedFunction; + subInvocations: SorobanAuthorizedInvocation[]; + }); + + function(value?: SorobanAuthorizedFunction): SorobanAuthorizedFunction; + + subInvocations( + value?: SorobanAuthorizedInvocation[], + ): SorobanAuthorizedInvocation[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAuthorizedInvocation; + + static write(value: SorobanAuthorizedInvocation, io: Buffer): void; + + static isValid(value: SorobanAuthorizedInvocation): boolean; + + static toXDR(value: SorobanAuthorizedInvocation): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAuthorizedInvocation; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAuthorizedInvocation; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAddressCredentials { + constructor(attributes: { + address: ScAddress; + nonce: Int64; + signatureExpirationLedger: number; + signature: ScVal; + }); + + address(value?: ScAddress): ScAddress; + + nonce(value?: Int64): Int64; + + signatureExpirationLedger(value?: number): number; + + signature(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAddressCredentials; + + static write(value: SorobanAddressCredentials, io: Buffer): void; + + static isValid(value: SorobanAddressCredentials): boolean; + + static toXDR(value: SorobanAddressCredentials): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAddressCredentials; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAddressCredentials; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAuthorizationEntry { + constructor(attributes: { + credentials: SorobanCredentials; + rootInvocation: SorobanAuthorizedInvocation; + }); + + credentials(value?: SorobanCredentials): SorobanCredentials; + + rootInvocation( + value?: SorobanAuthorizedInvocation, + ): SorobanAuthorizedInvocation; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAuthorizationEntry; + + static write(value: SorobanAuthorizationEntry, io: Buffer): void; + + static isValid(value: SorobanAuthorizationEntry): boolean; + + static toXDR(value: SorobanAuthorizationEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAuthorizationEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAuthorizationEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeHostFunctionOp { + constructor(attributes: { + hostFunction: HostFunction; + auth: SorobanAuthorizationEntry[]; + }); + + hostFunction(value?: HostFunction): HostFunction; + + auth(value?: SorobanAuthorizationEntry[]): SorobanAuthorizationEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeHostFunctionOp; + + static write(value: InvokeHostFunctionOp, io: Buffer): void; + + static isValid(value: InvokeHostFunctionOp): boolean; + + static toXDR(value: InvokeHostFunctionOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InvokeHostFunctionOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InvokeHostFunctionOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExtendFootprintTtlOp { + constructor(attributes: { ext: ExtensionPoint; extendTo: number }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + extendTo(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExtendFootprintTtlOp; + + static write(value: ExtendFootprintTtlOp, io: Buffer): void; + + static isValid(value: ExtendFootprintTtlOp): boolean; + + static toXDR(value: ExtendFootprintTtlOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExtendFootprintTtlOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ExtendFootprintTtlOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RestoreFootprintOp { + constructor(attributes: { ext: ExtensionPoint }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RestoreFootprintOp; + + static write(value: RestoreFootprintOp, io: Buffer): void; + + static isValid(value: RestoreFootprintOp): boolean; + + static toXDR(value: RestoreFootprintOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RestoreFootprintOp; + + static fromXDR(input: string, format: 'hex' | 'base64'): RestoreFootprintOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Operation { + constructor(attributes: { + sourceAccount: null | MuxedAccount; + body: OperationBody; + }); + + sourceAccount(value?: null | MuxedAccount): null | MuxedAccount; + + body(value?: OperationBody): OperationBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Operation; + + static write(value: Operation, io: Buffer): void; + + static isValid(value: Operation): boolean; + + static toXDR(value: Operation): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Operation; + + static fromXDR(input: string, format: 'hex' | 'base64'): Operation; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageOperationId { + constructor(attributes: { + sourceAccount: AccountId; + seqNum: SequenceNumber; + opNum: number; + }); + + sourceAccount(value?: AccountId): AccountId; + + seqNum(value?: SequenceNumber): SequenceNumber; + + opNum(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageOperationId; + + static write(value: HashIdPreimageOperationId, io: Buffer): void; + + static isValid(value: HashIdPreimageOperationId): boolean; + + static toXDR(value: HashIdPreimageOperationId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimageOperationId; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageOperationId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageRevokeId { + constructor(attributes: { + sourceAccount: AccountId; + seqNum: SequenceNumber; + opNum: number; + liquidityPoolId: PoolId; + asset: Asset; + }); + + sourceAccount(value?: AccountId): AccountId; + + seqNum(value?: SequenceNumber): SequenceNumber; + + opNum(value?: number): number; + + liquidityPoolId(value?: PoolId): PoolId; + + asset(value?: Asset): Asset; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageRevokeId; + + static write(value: HashIdPreimageRevokeId, io: Buffer): void; + + static isValid(value: HashIdPreimageRevokeId): boolean; + + static toXDR(value: HashIdPreimageRevokeId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimageRevokeId; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageRevokeId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageContractId { + constructor(attributes: { + networkId: Buffer; + contractIdPreimage: ContractIdPreimage; + }); + + networkId(value?: Buffer): Buffer; + + contractIdPreimage(value?: ContractIdPreimage): ContractIdPreimage; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageContractId; + + static write(value: HashIdPreimageContractId, io: Buffer): void; + + static isValid(value: HashIdPreimageContractId): boolean; + + static toXDR(value: HashIdPreimageContractId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimageContractId; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageContractId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimageSorobanAuthorization { + constructor(attributes: { + networkId: Buffer; + nonce: Int64; + signatureExpirationLedger: number; + invocation: SorobanAuthorizedInvocation; + }); + + networkId(value?: Buffer): Buffer; + + nonce(value?: Int64): Int64; + + signatureExpirationLedger(value?: number): number; + + invocation( + value?: SorobanAuthorizedInvocation, + ): SorobanAuthorizedInvocation; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimageSorobanAuthorization; + + static write(value: HashIdPreimageSorobanAuthorization, io: Buffer): void; + + static isValid(value: HashIdPreimageSorobanAuthorization): boolean; + + static toXDR(value: HashIdPreimageSorobanAuthorization): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): HashIdPreimageSorobanAuthorization; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HashIdPreimageSorobanAuthorization; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TimeBounds { + constructor(attributes: { minTime: TimePoint; maxTime: TimePoint }); + + minTime(value?: TimePoint): TimePoint; + + maxTime(value?: TimePoint): TimePoint; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TimeBounds; + + static write(value: TimeBounds, io: Buffer): void; + + static isValid(value: TimeBounds): boolean; + + static toXDR(value: TimeBounds): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TimeBounds; + + static fromXDR(input: string, format: 'hex' | 'base64'): TimeBounds; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerBounds { + constructor(attributes: { minLedger: number; maxLedger: number }); + + minLedger(value?: number): number; + + maxLedger(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerBounds; + + static write(value: LedgerBounds, io: Buffer): void; + + static isValid(value: LedgerBounds): boolean; + + static toXDR(value: LedgerBounds): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerBounds; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerBounds; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PreconditionsV2 { + constructor(attributes: { + timeBounds: null | TimeBounds; + ledgerBounds: null | LedgerBounds; + minSeqNum: null | SequenceNumber; + minSeqAge: Duration; + minSeqLedgerGap: number; + extraSigners: SignerKey[]; + }); + + timeBounds(value?: null | TimeBounds): null | TimeBounds; + + ledgerBounds(value?: null | LedgerBounds): null | LedgerBounds; + + minSeqNum(value?: null | SequenceNumber): null | SequenceNumber; + + minSeqAge(value?: Duration): Duration; + + minSeqLedgerGap(value?: number): number; + + extraSigners(value?: SignerKey[]): SignerKey[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PreconditionsV2; + + static write(value: PreconditionsV2, io: Buffer): void; + + static isValid(value: PreconditionsV2): boolean; + + static toXDR(value: PreconditionsV2): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PreconditionsV2; + + static fromXDR(input: string, format: 'hex' | 'base64'): PreconditionsV2; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerFootprint { + constructor(attributes: { readOnly: LedgerKey[]; readWrite: LedgerKey[] }); + + readOnly(value?: LedgerKey[]): LedgerKey[]; + + readWrite(value?: LedgerKey[]): LedgerKey[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerFootprint; + + static write(value: LedgerFootprint, io: Buffer): void; + + static isValid(value: LedgerFootprint): boolean; + + static toXDR(value: LedgerFootprint): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerFootprint; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerFootprint; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ArchivalProofNode { + constructor(attributes: { index: number; hash: Buffer }); + + index(value?: number): number; + + hash(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ArchivalProofNode; + + static write(value: ArchivalProofNode, io: Buffer): void; + + static isValid(value: ArchivalProofNode): boolean; + + static toXDR(value: ArchivalProofNode): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ArchivalProofNode; + + static fromXDR(input: string, format: 'hex' | 'base64'): ArchivalProofNode; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class NonexistenceProofBody { + constructor(attributes: { + entriesToProve: ColdArchiveBucketEntry[]; + proofLevels: ArchivalProofNode[][]; + }); + + entriesToProve(value?: ColdArchiveBucketEntry[]): ColdArchiveBucketEntry[]; + + proofLevels(value?: ArchivalProofNode[][]): ArchivalProofNode[][]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): NonexistenceProofBody; + + static write(value: NonexistenceProofBody, io: Buffer): void; + + static isValid(value: NonexistenceProofBody): boolean; + + static toXDR(value: NonexistenceProofBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): NonexistenceProofBody; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): NonexistenceProofBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExistenceProofBody { + constructor(attributes: { + keysToProve: LedgerKey[]; + lowBoundEntries: ColdArchiveBucketEntry[]; + highBoundEntries: ColdArchiveBucketEntry[]; + proofLevels: ArchivalProofNode[][]; + }); + + keysToProve(value?: LedgerKey[]): LedgerKey[]; + + lowBoundEntries(value?: ColdArchiveBucketEntry[]): ColdArchiveBucketEntry[]; + + highBoundEntries( + value?: ColdArchiveBucketEntry[], + ): ColdArchiveBucketEntry[]; + + proofLevels(value?: ArchivalProofNode[][]): ArchivalProofNode[][]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExistenceProofBody; + + static write(value: ExistenceProofBody, io: Buffer): void; + + static isValid(value: ExistenceProofBody): boolean; + + static toXDR(value: ExistenceProofBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExistenceProofBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): ExistenceProofBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ArchivalProof { + constructor(attributes: { epoch: number; body: ArchivalProofBody }); + + epoch(value?: number): number; + + body(value?: ArchivalProofBody): ArchivalProofBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ArchivalProof; + + static write(value: ArchivalProof, io: Buffer): void; + + static isValid(value: ArchivalProof): boolean; + + static toXDR(value: ArchivalProof): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ArchivalProof; + + static fromXDR(input: string, format: 'hex' | 'base64'): ArchivalProof; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanResources { + constructor(attributes: { + footprint: LedgerFootprint; + instructions: number; + readBytes: number; + writeBytes: number; + }); + + footprint(value?: LedgerFootprint): LedgerFootprint; + + instructions(value?: number): number; + + readBytes(value?: number): number; + + writeBytes(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanResources; + + static write(value: SorobanResources, io: Buffer): void; + + static isValid(value: SorobanResources): boolean; + + static toXDR(value: SorobanResources): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanResources; + + static fromXDR(input: string, format: 'hex' | 'base64'): SorobanResources; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionData { + constructor(attributes: { + ext: SorobanTransactionDataExt; + resources: SorobanResources; + resourceFee: Int64; + }); + + ext(value?: SorobanTransactionDataExt): SorobanTransactionDataExt; + + resources(value?: SorobanResources): SorobanResources; + + resourceFee(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionData; + + static write(value: SorobanTransactionData, io: Buffer): void; + + static isValid(value: SorobanTransactionData): boolean; + + static toXDR(value: SorobanTransactionData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionData; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV0 { + constructor(attributes: { + sourceAccountEd25519: Buffer; + fee: number; + seqNum: SequenceNumber; + timeBounds: null | TimeBounds; + memo: Memo; + operations: Operation[]; + ext: TransactionV0Ext; + }); + + sourceAccountEd25519(value?: Buffer): Buffer; + + fee(value?: number): number; + + seqNum(value?: SequenceNumber): SequenceNumber; + + timeBounds(value?: null | TimeBounds): null | TimeBounds; + + memo(value?: Memo): Memo; + + operations(value?: Operation[]): Operation[]; + + ext(value?: TransactionV0Ext): TransactionV0Ext; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV0; + + static write(value: TransactionV0, io: Buffer): void; + + static isValid(value: TransactionV0): boolean; + + static toXDR(value: TransactionV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV0Envelope { + constructor(attributes: { + tx: TransactionV0; + signatures: DecoratedSignature[]; + }); + + tx(value?: TransactionV0): TransactionV0; + + signatures(value?: DecoratedSignature[]): DecoratedSignature[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV0Envelope; + + static write(value: TransactionV0Envelope, io: Buffer): void; + + static isValid(value: TransactionV0Envelope): boolean; + + static toXDR(value: TransactionV0Envelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV0Envelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionV0Envelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Transaction { + constructor(attributes: { + sourceAccount: MuxedAccount; + fee: number; + seqNum: SequenceNumber; + cond: Preconditions; + memo: Memo; + operations: Operation[]; + ext: TransactionExt; + }); + + sourceAccount(value?: MuxedAccount): MuxedAccount; + + fee(value?: number): number; + + seqNum(value?: SequenceNumber): SequenceNumber; + + cond(value?: Preconditions): Preconditions; + + memo(value?: Memo): Memo; + + operations(value?: Operation[]): Operation[]; + + ext(value?: TransactionExt): TransactionExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Transaction; + + static write(value: Transaction, io: Buffer): void; + + static isValid(value: Transaction): boolean; + + static toXDR(value: Transaction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Transaction; + + static fromXDR(input: string, format: 'hex' | 'base64'): Transaction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV1Envelope { + constructor(attributes: { + tx: Transaction; + signatures: DecoratedSignature[]; + }); + + tx(value?: Transaction): Transaction; + + signatures(value?: DecoratedSignature[]): DecoratedSignature[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV1Envelope; + + static write(value: TransactionV1Envelope, io: Buffer): void; + + static isValid(value: TransactionV1Envelope): boolean; + + static toXDR(value: TransactionV1Envelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV1Envelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionV1Envelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransaction { + constructor(attributes: { + feeSource: MuxedAccount; + fee: Int64; + innerTx: FeeBumpTransactionInnerTx; + ext: FeeBumpTransactionExt; + }); + + feeSource(value?: MuxedAccount): MuxedAccount; + + fee(value?: Int64): Int64; + + innerTx(value?: FeeBumpTransactionInnerTx): FeeBumpTransactionInnerTx; + + ext(value?: FeeBumpTransactionExt): FeeBumpTransactionExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransaction; + + static write(value: FeeBumpTransaction, io: Buffer): void; + + static isValid(value: FeeBumpTransaction): boolean; + + static toXDR(value: FeeBumpTransaction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransaction; + + static fromXDR(input: string, format: 'hex' | 'base64'): FeeBumpTransaction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransactionEnvelope { + constructor(attributes: { + tx: FeeBumpTransaction; + signatures: DecoratedSignature[]; + }); + + tx(value?: FeeBumpTransaction): FeeBumpTransaction; + + signatures(value?: DecoratedSignature[]): DecoratedSignature[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransactionEnvelope; + + static write(value: FeeBumpTransactionEnvelope, io: Buffer): void; + + static isValid(value: FeeBumpTransactionEnvelope): boolean; + + static toXDR(value: FeeBumpTransactionEnvelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransactionEnvelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): FeeBumpTransactionEnvelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSignaturePayload { + constructor(attributes: { + networkId: Buffer; + taggedTransaction: TransactionSignaturePayloadTaggedTransaction; + }); + + networkId(value?: Buffer): Buffer; + + taggedTransaction( + value?: TransactionSignaturePayloadTaggedTransaction, + ): TransactionSignaturePayloadTaggedTransaction; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSignaturePayload; + + static write(value: TransactionSignaturePayload, io: Buffer): void; + + static isValid(value: TransactionSignaturePayload): boolean; + + static toXDR(value: TransactionSignaturePayload): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionSignaturePayload; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionSignaturePayload; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimOfferAtomV0 { + constructor(attributes: { + sellerEd25519: Buffer; + offerId: Int64; + assetSold: Asset; + amountSold: Int64; + assetBought: Asset; + amountBought: Int64; + }); + + sellerEd25519(value?: Buffer): Buffer; + + offerId(value?: Int64): Int64; + + assetSold(value?: Asset): Asset; + + amountSold(value?: Int64): Int64; + + assetBought(value?: Asset): Asset; + + amountBought(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimOfferAtomV0; + + static write(value: ClaimOfferAtomV0, io: Buffer): void; + + static isValid(value: ClaimOfferAtomV0): boolean; + + static toXDR(value: ClaimOfferAtomV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimOfferAtomV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimOfferAtomV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimOfferAtom { + constructor(attributes: { + sellerId: AccountId; + offerId: Int64; + assetSold: Asset; + amountSold: Int64; + assetBought: Asset; + amountBought: Int64; + }); + + sellerId(value?: AccountId): AccountId; + + offerId(value?: Int64): Int64; + + assetSold(value?: Asset): Asset; + + amountSold(value?: Int64): Int64; + + assetBought(value?: Asset): Asset; + + amountBought(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimOfferAtom; + + static write(value: ClaimOfferAtom, io: Buffer): void; + + static isValid(value: ClaimOfferAtom): boolean; + + static toXDR(value: ClaimOfferAtom): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimOfferAtom; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimOfferAtom; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimLiquidityAtom { + constructor(attributes: { + liquidityPoolId: PoolId; + assetSold: Asset; + amountSold: Int64; + assetBought: Asset; + amountBought: Int64; + }); + + liquidityPoolId(value?: PoolId): PoolId; + + assetSold(value?: Asset): Asset; + + amountSold(value?: Int64): Int64; + + assetBought(value?: Asset): Asset; + + amountBought(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimLiquidityAtom; + + static write(value: ClaimLiquidityAtom, io: Buffer): void; + + static isValid(value: ClaimLiquidityAtom): boolean; + + static toXDR(value: ClaimLiquidityAtom): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimLiquidityAtom; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimLiquidityAtom; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SimplePaymentResult { + constructor(attributes: { + destination: AccountId; + asset: Asset; + amount: Int64; + }); + + destination(value?: AccountId): AccountId; + + asset(value?: Asset): Asset; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SimplePaymentResult; + + static write(value: SimplePaymentResult, io: Buffer): void; + + static isValid(value: SimplePaymentResult): boolean; + + static toXDR(value: SimplePaymentResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SimplePaymentResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SimplePaymentResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictReceiveResultSuccess { + constructor(attributes: { offers: ClaimAtom[]; last: SimplePaymentResult }); + + offers(value?: ClaimAtom[]): ClaimAtom[]; + + last(value?: SimplePaymentResult): SimplePaymentResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictReceiveResultSuccess; + + static write( + value: PathPaymentStrictReceiveResultSuccess, + io: Buffer, + ): void; + + static isValid(value: PathPaymentStrictReceiveResultSuccess): boolean; + + static toXDR(value: PathPaymentStrictReceiveResultSuccess): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): PathPaymentStrictReceiveResultSuccess; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictReceiveResultSuccess; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictSendResultSuccess { + constructor(attributes: { offers: ClaimAtom[]; last: SimplePaymentResult }); + + offers(value?: ClaimAtom[]): ClaimAtom[]; + + last(value?: SimplePaymentResult): SimplePaymentResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictSendResultSuccess; + + static write(value: PathPaymentStrictSendResultSuccess, io: Buffer): void; + + static isValid(value: PathPaymentStrictSendResultSuccess): boolean; + + static toXDR(value: PathPaymentStrictSendResultSuccess): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): PathPaymentStrictSendResultSuccess; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictSendResultSuccess; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageOfferSuccessResult { + constructor(attributes: { + offersClaimed: ClaimAtom[]; + offer: ManageOfferSuccessResultOffer; + }); + + offersClaimed(value?: ClaimAtom[]): ClaimAtom[]; + + offer(value?: ManageOfferSuccessResultOffer): ManageOfferSuccessResultOffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageOfferSuccessResult; + + static write(value: ManageOfferSuccessResult, io: Buffer): void; + + static isValid(value: ManageOfferSuccessResult): boolean; + + static toXDR(value: ManageOfferSuccessResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageOfferSuccessResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageOfferSuccessResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InflationPayout { + constructor(attributes: { destination: AccountId; amount: Int64 }); + + destination(value?: AccountId): AccountId; + + amount(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InflationPayout; + + static write(value: InflationPayout, io: Buffer): void; + + static isValid(value: InflationPayout): boolean; + + static toXDR(value: InflationPayout): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InflationPayout; + + static fromXDR(input: string, format: 'hex' | 'base64'): InflationPayout; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResult { + constructor(attributes: { + feeCharged: Int64; + result: InnerTransactionResultResult; + ext: InnerTransactionResultExt; + }); + + feeCharged(value?: Int64): Int64; + + result(value?: InnerTransactionResultResult): InnerTransactionResultResult; + + ext(value?: InnerTransactionResultExt): InnerTransactionResultExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResult; + + static write(value: InnerTransactionResult, io: Buffer): void; + + static isValid(value: InnerTransactionResult): boolean; + + static toXDR(value: InnerTransactionResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResultPair { + constructor(attributes: { + transactionHash: Buffer; + result: InnerTransactionResult; + }); + + transactionHash(value?: Buffer): Buffer; + + result(value?: InnerTransactionResult): InnerTransactionResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResultPair; + + static write(value: InnerTransactionResultPair, io: Buffer): void; + + static isValid(value: InnerTransactionResultPair): boolean; + + static toXDR(value: InnerTransactionResultPair): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResultPair; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResultPair; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResult { + constructor(attributes: { + feeCharged: Int64; + result: TransactionResultResult; + ext: TransactionResultExt; + }); + + feeCharged(value?: Int64): Int64; + + result(value?: TransactionResultResult): TransactionResultResult; + + ext(value?: TransactionResultExt): TransactionResultExt; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResult; + + static write(value: TransactionResult, io: Buffer): void; + + static isValid(value: TransactionResult): boolean; + + static toXDR(value: TransactionResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignerKeyEd25519SignedPayload { + constructor(attributes: { ed25519: Buffer; payload: Buffer }); + + ed25519(value?: Buffer): Buffer; + + payload(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignerKeyEd25519SignedPayload; + + static write(value: SignerKeyEd25519SignedPayload, io: Buffer): void; + + static isValid(value: SignerKeyEd25519SignedPayload): boolean; + + static toXDR(value: SignerKeyEd25519SignedPayload): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): SignerKeyEd25519SignedPayload; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SignerKeyEd25519SignedPayload; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Curve25519Secret { + constructor(attributes: { key: Buffer }); + + key(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Curve25519Secret; + + static write(value: Curve25519Secret, io: Buffer): void; + + static isValid(value: Curve25519Secret): boolean; + + static toXDR(value: Curve25519Secret): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Curve25519Secret; + + static fromXDR(input: string, format: 'hex' | 'base64'): Curve25519Secret; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Curve25519Public { + constructor(attributes: { key: Buffer }); + + key(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Curve25519Public; + + static write(value: Curve25519Public, io: Buffer): void; + + static isValid(value: Curve25519Public): boolean; + + static toXDR(value: Curve25519Public): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Curve25519Public; + + static fromXDR(input: string, format: 'hex' | 'base64'): Curve25519Public; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HmacSha256Key { + constructor(attributes: { key: Buffer }); + + key(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HmacSha256Key; + + static write(value: HmacSha256Key, io: Buffer): void; + + static isValid(value: HmacSha256Key): boolean; + + static toXDR(value: HmacSha256Key): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HmacSha256Key; + + static fromXDR(input: string, format: 'hex' | 'base64'): HmacSha256Key; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HmacSha256Mac { + constructor(attributes: { mac: Buffer }); + + mac(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HmacSha256Mac; + + static write(value: HmacSha256Mac, io: Buffer): void; + + static isValid(value: HmacSha256Mac): boolean; + + static toXDR(value: HmacSha256Mac): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HmacSha256Mac; + + static fromXDR(input: string, format: 'hex' | 'base64'): HmacSha256Mac; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ShortHashSeed { + constructor(attributes: { seed: Buffer }); + + seed(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ShortHashSeed; + + static write(value: ShortHashSeed, io: Buffer): void; + + static isValid(value: ShortHashSeed): boolean; + + static toXDR(value: ShortHashSeed): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ShortHashSeed; + + static fromXDR(input: string, format: 'hex' | 'base64'): ShortHashSeed; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SerializedBinaryFuseFilter { + constructor(attributes: { + type: BinaryFuseFilterType; + inputHashSeed: ShortHashSeed; + filterSeed: ShortHashSeed; + segmentLength: number; + segementLengthMask: number; + segmentCount: number; + segmentCountLength: number; + fingerprintLength: number; + fingerprints: Buffer; + }); + + type(value?: BinaryFuseFilterType): BinaryFuseFilterType; + + inputHashSeed(value?: ShortHashSeed): ShortHashSeed; + + filterSeed(value?: ShortHashSeed): ShortHashSeed; + + segmentLength(value?: number): number; + + segementLengthMask(value?: number): number; + + segmentCount(value?: number): number; + + segmentCountLength(value?: number): number; + + fingerprintLength(value?: number): number; + + fingerprints(value?: Buffer): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SerializedBinaryFuseFilter; + + static write(value: SerializedBinaryFuseFilter, io: Buffer): void; + + static isValid(value: SerializedBinaryFuseFilter): boolean; + + static toXDR(value: SerializedBinaryFuseFilter): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SerializedBinaryFuseFilter; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SerializedBinaryFuseFilter; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class UInt128Parts { + constructor(attributes: { hi: Uint64; lo: Uint64 }); + + hi(value?: Uint64): Uint64; + + lo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): UInt128Parts; + + static write(value: UInt128Parts, io: Buffer): void; + + static isValid(value: UInt128Parts): boolean; + + static toXDR(value: UInt128Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UInt128Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): UInt128Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Int128Parts { + constructor(attributes: { hi: Int64; lo: Uint64 }); + + hi(value?: Int64): Int64; + + lo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Int128Parts; + + static write(value: Int128Parts, io: Buffer): void; + + static isValid(value: Int128Parts): boolean; + + static toXDR(value: Int128Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Int128Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): Int128Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class UInt256Parts { + constructor(attributes: { + hiHi: Uint64; + hiLo: Uint64; + loHi: Uint64; + loLo: Uint64; + }); + + hiHi(value?: Uint64): Uint64; + + hiLo(value?: Uint64): Uint64; + + loHi(value?: Uint64): Uint64; + + loLo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): UInt256Parts; + + static write(value: UInt256Parts, io: Buffer): void; + + static isValid(value: UInt256Parts): boolean; + + static toXDR(value: UInt256Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): UInt256Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): UInt256Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Int256Parts { + constructor(attributes: { + hiHi: Int64; + hiLo: Uint64; + loHi: Uint64; + loLo: Uint64; + }); + + hiHi(value?: Int64): Int64; + + hiLo(value?: Uint64): Uint64; + + loHi(value?: Uint64): Uint64; + + loLo(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Int256Parts; + + static write(value: Int256Parts, io: Buffer): void; + + static isValid(value: Int256Parts): boolean; + + static toXDR(value: Int256Parts): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Int256Parts; + + static fromXDR(input: string, format: 'hex' | 'base64'): Int256Parts; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScNonceKey { + constructor(attributes: { nonce: Int64 }); + + nonce(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScNonceKey; + + static write(value: ScNonceKey, io: Buffer): void; + + static isValid(value: ScNonceKey): boolean; + + static toXDR(value: ScNonceKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScNonceKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScNonceKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScContractInstance { + constructor(attributes: { + executable: ContractExecutable; + storage: null | ScMapEntry[]; + }); + + executable(value?: ContractExecutable): ContractExecutable; + + storage(value?: null | ScMapEntry[]): null | ScMapEntry[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScContractInstance; + + static write(value: ScContractInstance, io: Buffer): void; + + static isValid(value: ScContractInstance): boolean; + + static toXDR(value: ScContractInstance): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScContractInstance; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScContractInstance; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScMapEntry { + constructor(attributes: { key: ScVal; val: ScVal }); + + key(value?: ScVal): ScVal; + + val(value?: ScVal): ScVal; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScMapEntry; + + static write(value: ScMapEntry, io: Buffer): void; + + static isValid(value: ScMapEntry): boolean; + + static toXDR(value: ScMapEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScMapEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScMapEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScEnvMetaEntryInterfaceVersion { + constructor(attributes: { protocol: number; preRelease: number }); + + protocol(value?: number): number; + + preRelease(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScEnvMetaEntryInterfaceVersion; + + static write(value: ScEnvMetaEntryInterfaceVersion, io: Buffer): void; + + static isValid(value: ScEnvMetaEntryInterfaceVersion): boolean; + + static toXDR(value: ScEnvMetaEntryInterfaceVersion): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ScEnvMetaEntryInterfaceVersion; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScEnvMetaEntryInterfaceVersion; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScMetaV0 { + constructor(attributes: { key: string | Buffer; val: string | Buffer }); + + key(value?: string | Buffer): string | Buffer; + + val(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScMetaV0; + + static write(value: ScMetaV0, io: Buffer): void; + + static isValid(value: ScMetaV0): boolean; + + static toXDR(value: ScMetaV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScMetaV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScMetaV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeOption { + constructor(attributes: { valueType: ScSpecTypeDef }); + + valueType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeOption; + + static write(value: ScSpecTypeOption, io: Buffer): void; + + static isValid(value: ScSpecTypeOption): boolean; + + static toXDR(value: ScSpecTypeOption): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeOption; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeOption; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeResult { + constructor(attributes: { + okType: ScSpecTypeDef; + errorType: ScSpecTypeDef; + }); + + okType(value?: ScSpecTypeDef): ScSpecTypeDef; + + errorType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeResult; + + static write(value: ScSpecTypeResult, io: Buffer): void; + + static isValid(value: ScSpecTypeResult): boolean; + + static toXDR(value: ScSpecTypeResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeVec { + constructor(attributes: { elementType: ScSpecTypeDef }); + + elementType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeVec; + + static write(value: ScSpecTypeVec, io: Buffer): void; + + static isValid(value: ScSpecTypeVec): boolean; + + static toXDR(value: ScSpecTypeVec): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeVec; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeVec; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeMap { + constructor(attributes: { + keyType: ScSpecTypeDef; + valueType: ScSpecTypeDef; + }); + + keyType(value?: ScSpecTypeDef): ScSpecTypeDef; + + valueType(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeMap; + + static write(value: ScSpecTypeMap, io: Buffer): void; + + static isValid(value: ScSpecTypeMap): boolean; + + static toXDR(value: ScSpecTypeMap): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeMap; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeMap; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeTuple { + constructor(attributes: { valueTypes: ScSpecTypeDef[] }); + + valueTypes(value?: ScSpecTypeDef[]): ScSpecTypeDef[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeTuple; + + static write(value: ScSpecTypeTuple, io: Buffer): void; + + static isValid(value: ScSpecTypeTuple): boolean; + + static toXDR(value: ScSpecTypeTuple): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeTuple; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeTuple; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeBytesN { + constructor(attributes: { n: number }); + + n(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeBytesN; + + static write(value: ScSpecTypeBytesN, io: Buffer): void; + + static isValid(value: ScSpecTypeBytesN): boolean; + + static toXDR(value: ScSpecTypeBytesN): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeBytesN; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeBytesN; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeUdt { + constructor(attributes: { name: string | Buffer }); + + name(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeUdt; + + static write(value: ScSpecTypeUdt, io: Buffer): void; + + static isValid(value: ScSpecTypeUdt): boolean; + + static toXDR(value: ScSpecTypeUdt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeUdt; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeUdt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtStructFieldV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + type: ScSpecTypeDef; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + type(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtStructFieldV0; + + static write(value: ScSpecUdtStructFieldV0, io: Buffer): void; + + static isValid(value: ScSpecUdtStructFieldV0): boolean; + + static toXDR(value: ScSpecUdtStructFieldV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtStructFieldV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtStructFieldV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtStructV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + fields: ScSpecUdtStructFieldV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + fields(value?: ScSpecUdtStructFieldV0[]): ScSpecUdtStructFieldV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtStructV0; + + static write(value: ScSpecUdtStructV0, io: Buffer): void; + + static isValid(value: ScSpecUdtStructV0): boolean; + + static toXDR(value: ScSpecUdtStructV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtStructV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecUdtStructV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionCaseVoidV0 { + constructor(attributes: { doc: string | Buffer; name: string | Buffer }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionCaseVoidV0; + + static write(value: ScSpecUdtUnionCaseVoidV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionCaseVoidV0): boolean; + + static toXDR(value: ScSpecUdtUnionCaseVoidV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionCaseVoidV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtUnionCaseVoidV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionCaseTupleV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + type: ScSpecTypeDef[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + type(value?: ScSpecTypeDef[]): ScSpecTypeDef[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionCaseTupleV0; + + static write(value: ScSpecUdtUnionCaseTupleV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionCaseTupleV0): boolean; + + static toXDR(value: ScSpecUdtUnionCaseTupleV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionCaseTupleV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtUnionCaseTupleV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + cases: ScSpecUdtUnionCaseV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + cases(value?: ScSpecUdtUnionCaseV0[]): ScSpecUdtUnionCaseV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionV0; + + static write(value: ScSpecUdtUnionV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionV0): boolean; + + static toXDR(value: ScSpecUdtUnionV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecUdtUnionV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtEnumCaseV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + value: number; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + value(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtEnumCaseV0; + + static write(value: ScSpecUdtEnumCaseV0, io: Buffer): void; + + static isValid(value: ScSpecUdtEnumCaseV0): boolean; + + static toXDR(value: ScSpecUdtEnumCaseV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtEnumCaseV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtEnumCaseV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtEnumV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + cases: ScSpecUdtEnumCaseV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + cases(value?: ScSpecUdtEnumCaseV0[]): ScSpecUdtEnumCaseV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtEnumV0; + + static write(value: ScSpecUdtEnumV0, io: Buffer): void; + + static isValid(value: ScSpecUdtEnumV0): boolean; + + static toXDR(value: ScSpecUdtEnumV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtEnumV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecUdtEnumV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtErrorEnumCaseV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + value: number; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + value(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtErrorEnumCaseV0; + + static write(value: ScSpecUdtErrorEnumCaseV0, io: Buffer): void; + + static isValid(value: ScSpecUdtErrorEnumCaseV0): boolean; + + static toXDR(value: ScSpecUdtErrorEnumCaseV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtErrorEnumCaseV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtErrorEnumCaseV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtErrorEnumV0 { + constructor(attributes: { + doc: string | Buffer; + lib: string | Buffer; + name: string | Buffer; + cases: ScSpecUdtErrorEnumCaseV0[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + lib(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + cases(value?: ScSpecUdtErrorEnumCaseV0[]): ScSpecUdtErrorEnumCaseV0[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtErrorEnumV0; + + static write(value: ScSpecUdtErrorEnumV0, io: Buffer): void; + + static isValid(value: ScSpecUdtErrorEnumV0): boolean; + + static toXDR(value: ScSpecUdtErrorEnumV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtErrorEnumV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtErrorEnumV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecFunctionInputV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + type: ScSpecTypeDef; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + type(value?: ScSpecTypeDef): ScSpecTypeDef; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecFunctionInputV0; + + static write(value: ScSpecFunctionInputV0, io: Buffer): void; + + static isValid(value: ScSpecFunctionInputV0): boolean; + + static toXDR(value: ScSpecFunctionInputV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecFunctionInputV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecFunctionInputV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecFunctionV0 { + constructor(attributes: { + doc: string | Buffer; + name: string | Buffer; + inputs: ScSpecFunctionInputV0[]; + outputs: ScSpecTypeDef[]; + }); + + doc(value?: string | Buffer): string | Buffer; + + name(value?: string | Buffer): string | Buffer; + + inputs(value?: ScSpecFunctionInputV0[]): ScSpecFunctionInputV0[]; + + outputs(value?: ScSpecTypeDef[]): ScSpecTypeDef[]; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecFunctionV0; + + static write(value: ScSpecFunctionV0, io: Buffer): void; + + static isValid(value: ScSpecFunctionV0): boolean; + + static toXDR(value: ScSpecFunctionV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecFunctionV0; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecFunctionV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractExecutionLanesV0 { + constructor(attributes: { ledgerMaxTxCount: number }); + + ledgerMaxTxCount(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractExecutionLanesV0; + + static write( + value: ConfigSettingContractExecutionLanesV0, + io: Buffer, + ): void; + + static isValid(value: ConfigSettingContractExecutionLanesV0): boolean; + + static toXDR(value: ConfigSettingContractExecutionLanesV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractExecutionLanesV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractExecutionLanesV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractComputeV0 { + constructor(attributes: { + ledgerMaxInstructions: Int64; + txMaxInstructions: Int64; + feeRatePerInstructionsIncrement: Int64; + txMemoryLimit: number; + }); + + ledgerMaxInstructions(value?: Int64): Int64; + + txMaxInstructions(value?: Int64): Int64; + + feeRatePerInstructionsIncrement(value?: Int64): Int64; + + txMemoryLimit(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractComputeV0; + + static write(value: ConfigSettingContractComputeV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractComputeV0): boolean; + + static toXDR(value: ConfigSettingContractComputeV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractComputeV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractComputeV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractParallelComputeV0 { + constructor(attributes: { ledgerMaxParallelThreads: number }); + + ledgerMaxParallelThreads(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractParallelComputeV0; + + static write( + value: ConfigSettingContractParallelComputeV0, + io: Buffer, + ): void; + + static isValid(value: ConfigSettingContractParallelComputeV0): boolean; + + static toXDR(value: ConfigSettingContractParallelComputeV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractParallelComputeV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractParallelComputeV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractLedgerCostV0 { + constructor(attributes: { + ledgerMaxReadLedgerEntries: number; + ledgerMaxReadBytes: number; + ledgerMaxWriteLedgerEntries: number; + ledgerMaxWriteBytes: number; + txMaxReadLedgerEntries: number; + txMaxReadBytes: number; + txMaxWriteLedgerEntries: number; + txMaxWriteBytes: number; + feeReadLedgerEntry: Int64; + feeWriteLedgerEntry: Int64; + feeRead1Kb: Int64; + bucketListTargetSizeBytes: Int64; + writeFee1KbBucketListLow: Int64; + writeFee1KbBucketListHigh: Int64; + bucketListWriteFeeGrowthFactor: number; + }); + + ledgerMaxReadLedgerEntries(value?: number): number; + + ledgerMaxReadBytes(value?: number): number; + + ledgerMaxWriteLedgerEntries(value?: number): number; + + ledgerMaxWriteBytes(value?: number): number; + + txMaxReadLedgerEntries(value?: number): number; + + txMaxReadBytes(value?: number): number; + + txMaxWriteLedgerEntries(value?: number): number; + + txMaxWriteBytes(value?: number): number; + + feeReadLedgerEntry(value?: Int64): Int64; + + feeWriteLedgerEntry(value?: Int64): Int64; + + feeRead1Kb(value?: Int64): Int64; + + bucketListTargetSizeBytes(value?: Int64): Int64; + + writeFee1KbBucketListLow(value?: Int64): Int64; + + writeFee1KbBucketListHigh(value?: Int64): Int64; + + bucketListWriteFeeGrowthFactor(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractLedgerCostV0; + + static write(value: ConfigSettingContractLedgerCostV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractLedgerCostV0): boolean; + + static toXDR(value: ConfigSettingContractLedgerCostV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractLedgerCostV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractLedgerCostV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractHistoricalDataV0 { + constructor(attributes: { feeHistorical1Kb: Int64 }); + + feeHistorical1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractHistoricalDataV0; + + static write( + value: ConfigSettingContractHistoricalDataV0, + io: Buffer, + ): void; + + static isValid(value: ConfigSettingContractHistoricalDataV0): boolean; + + static toXDR(value: ConfigSettingContractHistoricalDataV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractHistoricalDataV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractHistoricalDataV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractEventsV0 { + constructor(attributes: { + txMaxContractEventsSizeBytes: number; + feeContractEvents1Kb: Int64; + }); + + txMaxContractEventsSizeBytes(value?: number): number; + + feeContractEvents1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractEventsV0; + + static write(value: ConfigSettingContractEventsV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractEventsV0): boolean; + + static toXDR(value: ConfigSettingContractEventsV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractEventsV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractEventsV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingContractBandwidthV0 { + constructor(attributes: { + ledgerMaxTxsSizeBytes: number; + txMaxSizeBytes: number; + feeTxSize1Kb: Int64; + }); + + ledgerMaxTxsSizeBytes(value?: number): number; + + txMaxSizeBytes(value?: number): number; + + feeTxSize1Kb(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingContractBandwidthV0; + + static write(value: ConfigSettingContractBandwidthV0, io: Buffer): void; + + static isValid(value: ConfigSettingContractBandwidthV0): boolean; + + static toXDR(value: ConfigSettingContractBandwidthV0): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ConfigSettingContractBandwidthV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ConfigSettingContractBandwidthV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCostParamEntry { + constructor(attributes: { + ext: ExtensionPoint; + constTerm: Int64; + linearTerm: Int64; + }); + + ext(value?: ExtensionPoint): ExtensionPoint; + + constTerm(value?: Int64): Int64; + + linearTerm(value?: Int64): Int64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCostParamEntry; + + static write(value: ContractCostParamEntry, io: Buffer): void; + + static isValid(value: ContractCostParamEntry): boolean; + + static toXDR(value: ContractCostParamEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCostParamEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCostParamEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StateArchivalSettings { + constructor(attributes: { + maxEntryTtl: number; + minTemporaryTtl: number; + minPersistentTtl: number; + persistentRentRateDenominator: Int64; + tempRentRateDenominator: Int64; + maxEntriesToArchive: number; + bucketListSizeWindowSampleSize: number; + bucketListWindowSamplePeriod: number; + evictionScanSize: number; + startingEvictionScanLevel: number; + }); + + maxEntryTtl(value?: number): number; + + minTemporaryTtl(value?: number): number; + + minPersistentTtl(value?: number): number; + + persistentRentRateDenominator(value?: Int64): Int64; + + tempRentRateDenominator(value?: Int64): Int64; + + maxEntriesToArchive(value?: number): number; + + bucketListSizeWindowSampleSize(value?: number): number; + + bucketListWindowSamplePeriod(value?: number): number; + + evictionScanSize(value?: number): number; + + startingEvictionScanLevel(value?: number): number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StateArchivalSettings; + + static write(value: StateArchivalSettings, io: Buffer): void; + + static isValid(value: StateArchivalSettings): boolean; + + static toXDR(value: StateArchivalSettings): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StateArchivalSettings; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): StateArchivalSettings; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class EvictionIterator { + constructor(attributes: { + bucketListLevel: number; + isCurrBucket: boolean; + bucketFileOffset: Uint64; + }); + + bucketListLevel(value?: number): number; + + isCurrBucket(value?: boolean): boolean; + + bucketFileOffset(value?: Uint64): Uint64; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): EvictionIterator; + + static write(value: EvictionIterator, io: Buffer): void; + + static isValid(value: EvictionIterator): boolean; + + static toXDR(value: EvictionIterator): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): EvictionIterator; + + static fromXDR(input: string, format: 'hex' | 'base64'): EvictionIterator; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpStatementPledges { + switch(): ScpStatementType; + + prepare(value?: ScpStatementPrepare): ScpStatementPrepare; + + confirm(value?: ScpStatementConfirm): ScpStatementConfirm; + + externalize(value?: ScpStatementExternalize): ScpStatementExternalize; + + nominate(value?: ScpNomination): ScpNomination; + + static scpStPrepare(value: ScpStatementPrepare): ScpStatementPledges; + + static scpStConfirm(value: ScpStatementConfirm): ScpStatementPledges; + + static scpStExternalize( + value: ScpStatementExternalize, + ): ScpStatementPledges; + + static scpStNominate(value: ScpNomination): ScpStatementPledges; + + value(): + | ScpStatementPrepare + | ScpStatementConfirm + | ScpStatementExternalize + | ScpNomination; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpStatementPledges; + + static write(value: ScpStatementPledges, io: Buffer): void; + + static isValid(value: ScpStatementPledges): boolean; + + static toXDR(value: ScpStatementPledges): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpStatementPledges; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScpStatementPledges; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AssetCode { + switch(): AssetType; + + assetCode4(value?: Buffer): Buffer; + + assetCode12(value?: Buffer): Buffer; + + static assetTypeCreditAlphanum4(value: Buffer): AssetCode; + + static assetTypeCreditAlphanum12(value: Buffer): AssetCode; + + value(): Buffer | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AssetCode; + + static write(value: AssetCode, io: Buffer): void; + + static isValid(value: AssetCode): boolean; + + static toXDR(value: AssetCode): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AssetCode; + + static fromXDR(input: string, format: 'hex' | 'base64'): AssetCode; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Asset { + switch(): AssetType; + + alphaNum4(value?: AlphaNum4): AlphaNum4; + + alphaNum12(value?: AlphaNum12): AlphaNum12; + + static assetTypeNative(): Asset; + + static assetTypeCreditAlphanum4(value: AlphaNum4): Asset; + + static assetTypeCreditAlphanum12(value: AlphaNum12): Asset; + + value(): AlphaNum4 | AlphaNum12 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Asset; + + static write(value: Asset, io: Buffer): void; + + static isValid(value: Asset): boolean; + + static toXDR(value: Asset): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Asset; + + static fromXDR(input: string, format: 'hex' | 'base64'): Asset; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV2Ext { + switch(): number; + + v3(value?: AccountEntryExtensionV3): AccountEntryExtensionV3; + + static 0(): AccountEntryExtensionV2Ext; + + static 3(value: AccountEntryExtensionV3): AccountEntryExtensionV2Ext; + + value(): AccountEntryExtensionV3 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV2Ext; + + static write(value: AccountEntryExtensionV2Ext, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV2Ext): boolean; + + static toXDR(value: AccountEntryExtensionV2Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV2Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV2Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExtensionV1Ext { + switch(): number; + + v2(value?: AccountEntryExtensionV2): AccountEntryExtensionV2; + + static 0(): AccountEntryExtensionV1Ext; + + static 2(value: AccountEntryExtensionV2): AccountEntryExtensionV1Ext; + + value(): AccountEntryExtensionV2 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExtensionV1Ext; + + static write(value: AccountEntryExtensionV1Ext, io: Buffer): void; + + static isValid(value: AccountEntryExtensionV1Ext): boolean; + + static toXDR(value: AccountEntryExtensionV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AccountEntryExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountEntryExt { + switch(): number; + + v1(value?: AccountEntryExtensionV1): AccountEntryExtensionV1; + + static 0(): AccountEntryExt; + + static 1(value: AccountEntryExtensionV1): AccountEntryExt; + + value(): AccountEntryExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountEntryExt; + + static write(value: AccountEntryExt, io: Buffer): void; + + static isValid(value: AccountEntryExt): boolean; + + static toXDR(value: AccountEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): AccountEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineAsset { + switch(): AssetType; + + alphaNum4(value?: AlphaNum4): AlphaNum4; + + alphaNum12(value?: AlphaNum12): AlphaNum12; + + liquidityPoolId(value?: PoolId): PoolId; + + static assetTypeNative(): TrustLineAsset; + + static assetTypeCreditAlphanum4(value: AlphaNum4): TrustLineAsset; + + static assetTypeCreditAlphanum12(value: AlphaNum12): TrustLineAsset; + + static assetTypePoolShare(value: PoolId): TrustLineAsset; + + value(): AlphaNum4 | AlphaNum12 | PoolId | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineAsset; + + static write(value: TrustLineAsset, io: Buffer): void; + + static isValid(value: TrustLineAsset): boolean; + + static toXDR(value: TrustLineAsset): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineAsset; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineAsset; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryExtensionV2Ext { + switch(): number; + + static 0(): TrustLineEntryExtensionV2Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryExtensionV2Ext; + + static write(value: TrustLineEntryExtensionV2Ext, io: Buffer): void; + + static isValid(value: TrustLineEntryExtensionV2Ext): boolean; + + static toXDR(value: TrustLineEntryExtensionV2Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryExtensionV2Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TrustLineEntryExtensionV2Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryV1Ext { + switch(): number; + + v2(value?: TrustLineEntryExtensionV2): TrustLineEntryExtensionV2; + + static 0(): TrustLineEntryV1Ext; + + static 2(value: TrustLineEntryExtensionV2): TrustLineEntryV1Ext; + + value(): TrustLineEntryExtensionV2 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryV1Ext; + + static write(value: TrustLineEntryV1Ext, io: Buffer): void; + + static isValid(value: TrustLineEntryV1Ext): boolean; + + static toXDR(value: TrustLineEntryV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TrustLineEntryV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TrustLineEntryExt { + switch(): number; + + v1(value?: TrustLineEntryV1): TrustLineEntryV1; + + static 0(): TrustLineEntryExt; + + static 1(value: TrustLineEntryV1): TrustLineEntryExt; + + value(): TrustLineEntryV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TrustLineEntryExt; + + static write(value: TrustLineEntryExt, io: Buffer): void; + + static isValid(value: TrustLineEntryExt): boolean; + + static toXDR(value: TrustLineEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TrustLineEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): TrustLineEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OfferEntryExt { + switch(): number; + + static 0(): OfferEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OfferEntryExt; + + static write(value: OfferEntryExt, io: Buffer): void; + + static isValid(value: OfferEntryExt): boolean; + + static toXDR(value: OfferEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OfferEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): OfferEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class DataEntryExt { + switch(): number; + + static 0(): DataEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): DataEntryExt; + + static write(value: DataEntryExt, io: Buffer): void; + + static isValid(value: DataEntryExt): boolean; + + static toXDR(value: DataEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): DataEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): DataEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimPredicate { + switch(): ClaimPredicateType; + + andPredicates(value?: ClaimPredicate[]): ClaimPredicate[]; + + orPredicates(value?: ClaimPredicate[]): ClaimPredicate[]; + + notPredicate(value?: null | ClaimPredicate): null | ClaimPredicate; + + absBefore(value?: Int64): Int64; + + relBefore(value?: Int64): Int64; + + static claimPredicateUnconditional(): ClaimPredicate; + + static claimPredicateAnd(value: ClaimPredicate[]): ClaimPredicate; + + static claimPredicateOr(value: ClaimPredicate[]): ClaimPredicate; + + static claimPredicateNot(value: null | ClaimPredicate): ClaimPredicate; + + static claimPredicateBeforeAbsoluteTime(value: Int64): ClaimPredicate; + + static claimPredicateBeforeRelativeTime(value: Int64): ClaimPredicate; + + value(): + | ClaimPredicate[] + | ClaimPredicate[] + | null + | ClaimPredicate + | Int64 + | Int64 + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimPredicate; + + static write(value: ClaimPredicate, io: Buffer): void; + + static isValid(value: ClaimPredicate): boolean; + + static toXDR(value: ClaimPredicate): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimPredicate; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimPredicate; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Claimant { + switch(): ClaimantType; + + v0(value?: ClaimantV0): ClaimantV0; + + static claimantTypeV0(value: ClaimantV0): Claimant; + + value(): ClaimantV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Claimant; + + static write(value: Claimant, io: Buffer): void; + + static isValid(value: Claimant): boolean; + + static toXDR(value: Claimant): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Claimant; + + static fromXDR(input: string, format: 'hex' | 'base64'): Claimant; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceId { + switch(): ClaimableBalanceIdType; + + v0(value?: Buffer): Buffer; + + static claimableBalanceIdTypeV0(value: Buffer): ClaimableBalanceId; + + value(): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceId; + + static write(value: ClaimableBalanceId, io: Buffer): void; + + static isValid(value: ClaimableBalanceId): boolean; + + static toXDR(value: ClaimableBalanceId): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimableBalanceId; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimableBalanceId; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntryExtensionV1Ext { + switch(): number; + + static 0(): ClaimableBalanceEntryExtensionV1Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntryExtensionV1Ext; + + static write(value: ClaimableBalanceEntryExtensionV1Ext, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntryExtensionV1Ext): boolean; + + static toXDR(value: ClaimableBalanceEntryExtensionV1Ext): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ClaimableBalanceEntryExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntryExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimableBalanceEntryExt { + switch(): number; + + v1( + value?: ClaimableBalanceEntryExtensionV1, + ): ClaimableBalanceEntryExtensionV1; + + static 0(): ClaimableBalanceEntryExt; + + static 1(value: ClaimableBalanceEntryExtensionV1): ClaimableBalanceEntryExt; + + value(): ClaimableBalanceEntryExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimableBalanceEntryExt; + + static write(value: ClaimableBalanceEntryExt, io: Buffer): void; + + static isValid(value: ClaimableBalanceEntryExt): boolean; + + static toXDR(value: ClaimableBalanceEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimableBalanceEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimableBalanceEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolEntryBody { + switch(): LiquidityPoolType; + + constantProduct( + value?: LiquidityPoolEntryConstantProduct, + ): LiquidityPoolEntryConstantProduct; + + static liquidityPoolConstantProduct( + value: LiquidityPoolEntryConstantProduct, + ): LiquidityPoolEntryBody; + + value(): LiquidityPoolEntryConstantProduct; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolEntryBody; + + static write(value: LiquidityPoolEntryBody, io: Buffer): void; + + static isValid(value: LiquidityPoolEntryBody): boolean; + + static toXDR(value: LiquidityPoolEntryBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolEntryBody; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolEntryBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractCodeEntryExt { + switch(): number; + + v1(value?: ContractCodeEntryV1): ContractCodeEntryV1; + + static 0(): ContractCodeEntryExt; + + static 1(value: ContractCodeEntryV1): ContractCodeEntryExt; + + value(): ContractCodeEntryV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractCodeEntryExt; + + static write(value: ContractCodeEntryExt, io: Buffer): void; + + static isValid(value: ContractCodeEntryExt): boolean; + + static toXDR(value: ContractCodeEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractCodeEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ContractCodeEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryExtensionV1Ext { + switch(): number; + + static 0(): LedgerEntryExtensionV1Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryExtensionV1Ext; + + static write(value: LedgerEntryExtensionV1Ext, io: Buffer): void; + + static isValid(value: LedgerEntryExtensionV1Ext): boolean; + + static toXDR(value: LedgerEntryExtensionV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerEntryExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryData { + switch(): LedgerEntryType; + + account(value?: AccountEntry): AccountEntry; + + trustLine(value?: TrustLineEntry): TrustLineEntry; + + offer(value?: OfferEntry): OfferEntry; + + data(value?: DataEntry): DataEntry; + + claimableBalance(value?: ClaimableBalanceEntry): ClaimableBalanceEntry; + + liquidityPool(value?: LiquidityPoolEntry): LiquidityPoolEntry; + + contractData(value?: ContractDataEntry): ContractDataEntry; + + contractCode(value?: ContractCodeEntry): ContractCodeEntry; + + configSetting(value?: ConfigSettingEntry): ConfigSettingEntry; + + ttl(value?: TtlEntry): TtlEntry; + + static account(value: AccountEntry): LedgerEntryData; + + static trustline(value: TrustLineEntry): LedgerEntryData; + + static offer(value: OfferEntry): LedgerEntryData; + + static data(value: DataEntry): LedgerEntryData; + + static claimableBalance(value: ClaimableBalanceEntry): LedgerEntryData; + + static liquidityPool(value: LiquidityPoolEntry): LedgerEntryData; + + static contractData(value: ContractDataEntry): LedgerEntryData; + + static contractCode(value: ContractCodeEntry): LedgerEntryData; + + static configSetting(value: ConfigSettingEntry): LedgerEntryData; + + static ttl(value: TtlEntry): LedgerEntryData; + + value(): + | AccountEntry + | TrustLineEntry + | OfferEntry + | DataEntry + | ClaimableBalanceEntry + | LiquidityPoolEntry + | ContractDataEntry + | ContractCodeEntry + | ConfigSettingEntry + | TtlEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryData; + + static write(value: LedgerEntryData, io: Buffer): void; + + static isValid(value: LedgerEntryData): boolean; + + static toXDR(value: LedgerEntryData): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryData; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntryData; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryExt { + switch(): number; + + v1(value?: LedgerEntryExtensionV1): LedgerEntryExtensionV1; + + static 0(): LedgerEntryExt; + + static 1(value: LedgerEntryExtensionV1): LedgerEntryExt; + + value(): LedgerEntryExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryExt; + + static write(value: LedgerEntryExt, io: Buffer): void; + + static isValid(value: LedgerEntryExt): boolean; + + static toXDR(value: LedgerEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerKey { + switch(): LedgerEntryType; + + account(value?: LedgerKeyAccount): LedgerKeyAccount; + + trustLine(value?: LedgerKeyTrustLine): LedgerKeyTrustLine; + + offer(value?: LedgerKeyOffer): LedgerKeyOffer; + + data(value?: LedgerKeyData): LedgerKeyData; + + claimableBalance( + value?: LedgerKeyClaimableBalance, + ): LedgerKeyClaimableBalance; + + liquidityPool(value?: LedgerKeyLiquidityPool): LedgerKeyLiquidityPool; + + contractData(value?: LedgerKeyContractData): LedgerKeyContractData; + + contractCode(value?: LedgerKeyContractCode): LedgerKeyContractCode; + + configSetting(value?: LedgerKeyConfigSetting): LedgerKeyConfigSetting; + + ttl(value?: LedgerKeyTtl): LedgerKeyTtl; + + static account(value: LedgerKeyAccount): LedgerKey; + + static trustline(value: LedgerKeyTrustLine): LedgerKey; + + static offer(value: LedgerKeyOffer): LedgerKey; + + static data(value: LedgerKeyData): LedgerKey; + + static claimableBalance(value: LedgerKeyClaimableBalance): LedgerKey; + + static liquidityPool(value: LedgerKeyLiquidityPool): LedgerKey; + + static contractData(value: LedgerKeyContractData): LedgerKey; + + static contractCode(value: LedgerKeyContractCode): LedgerKey; + + static configSetting(value: LedgerKeyConfigSetting): LedgerKey; + + static ttl(value: LedgerKeyTtl): LedgerKey; + + value(): + | LedgerKeyAccount + | LedgerKeyTrustLine + | LedgerKeyOffer + | LedgerKeyData + | LedgerKeyClaimableBalance + | LedgerKeyLiquidityPool + | LedgerKeyContractData + | LedgerKeyContractCode + | LedgerKeyConfigSetting + | LedgerKeyTtl; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerKey; + + static write(value: LedgerKey, io: Buffer): void; + + static isValid(value: LedgerKey): boolean; + + static toXDR(value: LedgerKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BucketMetadataExt { + switch(): number; + + bucketListType(value?: BucketListType): BucketListType; + + static 0(): BucketMetadataExt; + + static 1(value: BucketListType): BucketMetadataExt; + + value(): BucketListType | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BucketMetadataExt; + + static write(value: BucketMetadataExt, io: Buffer): void; + + static isValid(value: BucketMetadataExt): boolean; + + static toXDR(value: BucketMetadataExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BucketMetadataExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): BucketMetadataExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BucketEntry { + switch(): BucketEntryType; + + liveEntry(value?: LedgerEntry): LedgerEntry; + + deadEntry(value?: LedgerKey): LedgerKey; + + metaEntry(value?: BucketMetadata): BucketMetadata; + + static liveentry(value: LedgerEntry): BucketEntry; + + static initentry(value: LedgerEntry): BucketEntry; + + static deadentry(value: LedgerKey): BucketEntry; + + static metaentry(value: BucketMetadata): BucketEntry; + + value(): LedgerEntry | LedgerKey | BucketMetadata; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BucketEntry; + + static write(value: BucketEntry, io: Buffer): void; + + static isValid(value: BucketEntry): boolean; + + static toXDR(value: BucketEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BucketEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): BucketEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HotArchiveBucketEntry { + switch(): HotArchiveBucketEntryType; + + archivedEntry(value?: LedgerEntry): LedgerEntry; + + key(value?: LedgerKey): LedgerKey; + + metaEntry(value?: BucketMetadata): BucketMetadata; + + static hotArchiveArchived(value: LedgerEntry): HotArchiveBucketEntry; + + static hotArchiveLive(value: LedgerKey): HotArchiveBucketEntry; + + static hotArchiveDeleted(value: LedgerKey): HotArchiveBucketEntry; + + static hotArchiveMetaentry(value: BucketMetadata): HotArchiveBucketEntry; + + value(): LedgerEntry | LedgerKey | BucketMetadata; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HotArchiveBucketEntry; + + static write(value: HotArchiveBucketEntry, io: Buffer): void; + + static isValid(value: HotArchiveBucketEntry): boolean; + + static toXDR(value: HotArchiveBucketEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HotArchiveBucketEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): HotArchiveBucketEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ColdArchiveBucketEntry { + switch(): ColdArchiveBucketEntryType; + + metaEntry(value?: BucketMetadata): BucketMetadata; + + archivedLeaf(value?: ColdArchiveArchivedLeaf): ColdArchiveArchivedLeaf; + + deletedLeaf(value?: ColdArchiveDeletedLeaf): ColdArchiveDeletedLeaf; + + boundaryLeaf(value?: ColdArchiveBoundaryLeaf): ColdArchiveBoundaryLeaf; + + hashEntry(value?: ColdArchiveHashEntry): ColdArchiveHashEntry; + + static coldArchiveMetaentry(value: BucketMetadata): ColdArchiveBucketEntry; + + static coldArchiveArchivedLeaf( + value: ColdArchiveArchivedLeaf, + ): ColdArchiveBucketEntry; + + static coldArchiveDeletedLeaf( + value: ColdArchiveDeletedLeaf, + ): ColdArchiveBucketEntry; + + static coldArchiveBoundaryLeaf( + value: ColdArchiveBoundaryLeaf, + ): ColdArchiveBucketEntry; + + static coldArchiveHash(value: ColdArchiveHashEntry): ColdArchiveBucketEntry; + + value(): + | BucketMetadata + | ColdArchiveArchivedLeaf + | ColdArchiveDeletedLeaf + | ColdArchiveBoundaryLeaf + | ColdArchiveHashEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ColdArchiveBucketEntry; + + static write(value: ColdArchiveBucketEntry, io: Buffer): void; + + static isValid(value: ColdArchiveBucketEntry): boolean; + + static toXDR(value: ColdArchiveBucketEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ColdArchiveBucketEntry; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ColdArchiveBucketEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StellarValueExt { + switch(): StellarValueType; + + lcValueSignature( + value?: LedgerCloseValueSignature, + ): LedgerCloseValueSignature; + + static stellarValueBasic(): StellarValueExt; + + static stellarValueSigned( + value: LedgerCloseValueSignature, + ): StellarValueExt; + + value(): LedgerCloseValueSignature | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StellarValueExt; + + static write(value: StellarValueExt, io: Buffer): void; + + static isValid(value: StellarValueExt): boolean; + + static toXDR(value: StellarValueExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StellarValueExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): StellarValueExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderExtensionV1Ext { + switch(): number; + + static 0(): LedgerHeaderExtensionV1Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderExtensionV1Ext; + + static write(value: LedgerHeaderExtensionV1Ext, io: Buffer): void; + + static isValid(value: LedgerHeaderExtensionV1Ext): boolean; + + static toXDR(value: LedgerHeaderExtensionV1Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderExtensionV1Ext; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderExtensionV1Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderExt { + switch(): number; + + v1(value?: LedgerHeaderExtensionV1): LedgerHeaderExtensionV1; + + static 0(): LedgerHeaderExt; + + static 1(value: LedgerHeaderExtensionV1): LedgerHeaderExt; + + value(): LedgerHeaderExtensionV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderExt; + + static write(value: LedgerHeaderExt, io: Buffer): void; + + static isValid(value: LedgerHeaderExt): boolean; + + static toXDR(value: LedgerHeaderExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerHeaderExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerUpgrade { + switch(): LedgerUpgradeType; + + newLedgerVersion(value?: number): number; + + newBaseFee(value?: number): number; + + newMaxTxSetSize(value?: number): number; + + newBaseReserve(value?: number): number; + + newFlags(value?: number): number; + + newConfig(value?: ConfigUpgradeSetKey): ConfigUpgradeSetKey; + + newMaxSorobanTxSetSize(value?: number): number; + + static ledgerUpgradeVersion(value: number): LedgerUpgrade; + + static ledgerUpgradeBaseFee(value: number): LedgerUpgrade; + + static ledgerUpgradeMaxTxSetSize(value: number): LedgerUpgrade; + + static ledgerUpgradeBaseReserve(value: number): LedgerUpgrade; + + static ledgerUpgradeFlags(value: number): LedgerUpgrade; + + static ledgerUpgradeConfig(value: ConfigUpgradeSetKey): LedgerUpgrade; + + static ledgerUpgradeMaxSorobanTxSetSize(value: number): LedgerUpgrade; + + value(): + | number + | number + | number + | number + | number + | ConfigUpgradeSetKey + | number; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerUpgrade; + + static write(value: LedgerUpgrade, io: Buffer): void; + + static isValid(value: LedgerUpgrade): boolean; + + static toXDR(value: LedgerUpgrade): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerUpgrade; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerUpgrade; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TxSetComponent { + switch(): TxSetComponentType; + + txsMaybeDiscountedFee( + value?: TxSetComponentTxsMaybeDiscountedFee, + ): TxSetComponentTxsMaybeDiscountedFee; + + static txsetCompTxsMaybeDiscountedFee( + value: TxSetComponentTxsMaybeDiscountedFee, + ): TxSetComponent; + + value(): TxSetComponentTxsMaybeDiscountedFee; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TxSetComponent; + + static write(value: TxSetComponent, io: Buffer): void; + + static isValid(value: TxSetComponent): boolean; + + static toXDR(value: TxSetComponent): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TxSetComponent; + + static fromXDR(input: string, format: 'hex' | 'base64'): TxSetComponent; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionPhase { + switch(): number; + + v0Components(value?: TxSetComponent[]): TxSetComponent[]; + + parallelTxsComponent(value?: ParallelTxsComponent): ParallelTxsComponent; + + static 0(value: TxSetComponent[]): TransactionPhase; + + static 1(value: ParallelTxsComponent): TransactionPhase; + + value(): TxSetComponent[] | ParallelTxsComponent; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionPhase; + + static write(value: TransactionPhase, io: Buffer): void; + + static isValid(value: TransactionPhase): boolean; + + static toXDR(value: TransactionPhase): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionPhase; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionPhase; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class GeneralizedTransactionSet { + switch(): number; + + v1TxSet(value?: TransactionSetV1): TransactionSetV1; + + static 1(value: TransactionSetV1): GeneralizedTransactionSet; + + value(): TransactionSetV1; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): GeneralizedTransactionSet; + + static write(value: GeneralizedTransactionSet, io: Buffer): void; + + static isValid(value: GeneralizedTransactionSet): boolean; + + static toXDR(value: GeneralizedTransactionSet): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): GeneralizedTransactionSet; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): GeneralizedTransactionSet; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryEntryExt { + switch(): number; + + generalizedTxSet( + value?: GeneralizedTransactionSet, + ): GeneralizedTransactionSet; + + static 0(): TransactionHistoryEntryExt; + + static 1(value: GeneralizedTransactionSet): TransactionHistoryEntryExt; + + value(): GeneralizedTransactionSet | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryEntryExt; + + static write(value: TransactionHistoryEntryExt, io: Buffer): void; + + static isValid(value: TransactionHistoryEntryExt): boolean; + + static toXDR(value: TransactionHistoryEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionHistoryEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionHistoryResultEntryExt { + switch(): number; + + static 0(): TransactionHistoryResultEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionHistoryResultEntryExt; + + static write(value: TransactionHistoryResultEntryExt, io: Buffer): void; + + static isValid(value: TransactionHistoryResultEntryExt): boolean; + + static toXDR(value: TransactionHistoryResultEntryExt): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TransactionHistoryResultEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionHistoryResultEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerHeaderHistoryEntryExt { + switch(): number; + + static 0(): LedgerHeaderHistoryEntryExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerHeaderHistoryEntryExt; + + static write(value: LedgerHeaderHistoryEntryExt, io: Buffer): void; + + static isValid(value: LedgerHeaderHistoryEntryExt): boolean; + + static toXDR(value: LedgerHeaderHistoryEntryExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerHeaderHistoryEntryExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LedgerHeaderHistoryEntryExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScpHistoryEntry { + switch(): number; + + v0(value?: ScpHistoryEntryV0): ScpHistoryEntryV0; + + static 0(value: ScpHistoryEntryV0): ScpHistoryEntry; + + value(): ScpHistoryEntryV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScpHistoryEntry; + + static write(value: ScpHistoryEntry, io: Buffer): void; + + static isValid(value: ScpHistoryEntry): boolean; + + static toXDR(value: ScpHistoryEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScpHistoryEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScpHistoryEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerEntryChange { + switch(): LedgerEntryChangeType; + + created(value?: LedgerEntry): LedgerEntry; + + updated(value?: LedgerEntry): LedgerEntry; + + removed(value?: LedgerKey): LedgerKey; + + state(value?: LedgerEntry): LedgerEntry; + + static ledgerEntryCreated(value: LedgerEntry): LedgerEntryChange; + + static ledgerEntryUpdated(value: LedgerEntry): LedgerEntryChange; + + static ledgerEntryRemoved(value: LedgerKey): LedgerEntryChange; + + static ledgerEntryState(value: LedgerEntry): LedgerEntryChange; + + value(): LedgerEntry | LedgerEntry | LedgerKey | LedgerEntry; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerEntryChange; + + static write(value: LedgerEntryChange, io: Buffer): void; + + static isValid(value: LedgerEntryChange): boolean; + + static toXDR(value: LedgerEntryChange): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerEntryChange; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerEntryChange; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractEventBody { + switch(): number; + + v0(value?: ContractEventV0): ContractEventV0; + + static 0(value: ContractEventV0): ContractEventBody; + + value(): ContractEventV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractEventBody; + + static write(value: ContractEventBody, io: Buffer): void; + + static isValid(value: ContractEventBody): boolean; + + static toXDR(value: ContractEventBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractEventBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractEventBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionMetaExt { + switch(): number; + + v1(value?: SorobanTransactionMetaExtV1): SorobanTransactionMetaExtV1; + + static 0(): SorobanTransactionMetaExt; + + static 1(value: SorobanTransactionMetaExtV1): SorobanTransactionMetaExt; + + value(): SorobanTransactionMetaExtV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionMetaExt; + + static write(value: SorobanTransactionMetaExt, io: Buffer): void; + + static isValid(value: SorobanTransactionMetaExt): boolean; + + static toXDR(value: SorobanTransactionMetaExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionMetaExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionMetaExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionMeta { + switch(): number; + + operations(value?: OperationMeta[]): OperationMeta[]; + + v1(value?: TransactionMetaV1): TransactionMetaV1; + + v2(value?: TransactionMetaV2): TransactionMetaV2; + + v3(value?: TransactionMetaV3): TransactionMetaV3; + + static 0(value: OperationMeta[]): TransactionMeta; + + static 1(value: TransactionMetaV1): TransactionMeta; + + static 2(value: TransactionMetaV2): TransactionMeta; + + static 3(value: TransactionMetaV3): TransactionMeta; + + value(): + | OperationMeta[] + | TransactionMetaV1 + | TransactionMetaV2 + | TransactionMetaV3; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionMeta; + + static write(value: TransactionMeta, io: Buffer): void; + + static isValid(value: TransactionMeta): boolean; + + static toXDR(value: TransactionMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMetaExt { + switch(): number; + + v1(value?: LedgerCloseMetaExtV1): LedgerCloseMetaExtV1; + + static 0(): LedgerCloseMetaExt; + + static 1(value: LedgerCloseMetaExtV1): LedgerCloseMetaExt; + + value(): LedgerCloseMetaExtV1 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMetaExt; + + static write(value: LedgerCloseMetaExt, io: Buffer): void; + + static isValid(value: LedgerCloseMetaExt): boolean; + + static toXDR(value: LedgerCloseMetaExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMetaExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMetaExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LedgerCloseMeta { + switch(): number; + + v0(value?: LedgerCloseMetaV0): LedgerCloseMetaV0; + + v1(value?: LedgerCloseMetaV1): LedgerCloseMetaV1; + + static 0(value: LedgerCloseMetaV0): LedgerCloseMeta; + + static 1(value: LedgerCloseMetaV1): LedgerCloseMeta; + + value(): LedgerCloseMetaV0 | LedgerCloseMetaV1; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LedgerCloseMeta; + + static write(value: LedgerCloseMeta, io: Buffer): void; + + static isValid(value: LedgerCloseMeta): boolean; + + static toXDR(value: LedgerCloseMeta): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LedgerCloseMeta; + + static fromXDR(input: string, format: 'hex' | 'base64'): LedgerCloseMeta; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PeerAddressIp { + switch(): IpAddrType; + + ipv4(value?: Buffer): Buffer; + + ipv6(value?: Buffer): Buffer; + + static iPv4(value: Buffer): PeerAddressIp; + + static iPv6(value: Buffer): PeerAddressIp; + + value(): Buffer | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PeerAddressIp; + + static write(value: PeerAddressIp, io: Buffer): void; + + static isValid(value: PeerAddressIp): boolean; + + static toXDR(value: PeerAddressIp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PeerAddressIp; + + static fromXDR(input: string, format: 'hex' | 'base64'): PeerAddressIp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SurveyResponseBody { + switch(): SurveyMessageResponseType; + + topologyResponseBodyV0( + value?: TopologyResponseBodyV0, + ): TopologyResponseBodyV0; + + topologyResponseBodyV1( + value?: TopologyResponseBodyV1, + ): TopologyResponseBodyV1; + + topologyResponseBodyV2( + value?: TopologyResponseBodyV2, + ): TopologyResponseBodyV2; + + static surveyTopologyResponseV0( + value: TopologyResponseBodyV0, + ): SurveyResponseBody; + + static surveyTopologyResponseV1( + value: TopologyResponseBodyV1, + ): SurveyResponseBody; + + static surveyTopologyResponseV2( + value: TopologyResponseBodyV2, + ): SurveyResponseBody; + + value(): + | TopologyResponseBodyV0 + | TopologyResponseBodyV1 + | TopologyResponseBodyV2; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SurveyResponseBody; + + static write(value: SurveyResponseBody, io: Buffer): void; + + static isValid(value: SurveyResponseBody): boolean; + + static toXDR(value: SurveyResponseBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SurveyResponseBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): SurveyResponseBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class StellarMessage { + switch(): MessageType; + + error(value?: Error): Error; + + hello(value?: Hello): Hello; + + auth(value?: Auth): Auth; + + dontHave(value?: DontHave): DontHave; + + peers(value?: PeerAddress[]): PeerAddress[]; + + txSetHash(value?: Buffer): Buffer; + + txSet(value?: TransactionSet): TransactionSet; + + generalizedTxSet( + value?: GeneralizedTransactionSet, + ): GeneralizedTransactionSet; + + transaction(value?: TransactionEnvelope): TransactionEnvelope; + + signedSurveyRequestMessage( + value?: SignedSurveyRequestMessage, + ): SignedSurveyRequestMessage; + + signedSurveyResponseMessage( + value?: SignedSurveyResponseMessage, + ): SignedSurveyResponseMessage; + + signedTimeSlicedSurveyRequestMessage( + value?: SignedTimeSlicedSurveyRequestMessage, + ): SignedTimeSlicedSurveyRequestMessage; + + signedTimeSlicedSurveyResponseMessage( + value?: SignedTimeSlicedSurveyResponseMessage, + ): SignedTimeSlicedSurveyResponseMessage; + + signedTimeSlicedSurveyStartCollectingMessage( + value?: SignedTimeSlicedSurveyStartCollectingMessage, + ): SignedTimeSlicedSurveyStartCollectingMessage; + + signedTimeSlicedSurveyStopCollectingMessage( + value?: SignedTimeSlicedSurveyStopCollectingMessage, + ): SignedTimeSlicedSurveyStopCollectingMessage; + + qSetHash(value?: Buffer): Buffer; + + qSet(value?: ScpQuorumSet): ScpQuorumSet; + + envelope(value?: ScpEnvelope): ScpEnvelope; + + getScpLedgerSeq(value?: number): number; + + sendMoreMessage(value?: SendMore): SendMore; + + sendMoreExtendedMessage(value?: SendMoreExtended): SendMoreExtended; + + floodAdvert(value?: FloodAdvert): FloodAdvert; + + floodDemand(value?: FloodDemand): FloodDemand; + + static errorMsg(value: Error): StellarMessage; + + static hello(value: Hello): StellarMessage; + + static auth(value: Auth): StellarMessage; + + static dontHave(value: DontHave): StellarMessage; + + static getPeers(): StellarMessage; + + static peers(value: PeerAddress[]): StellarMessage; + + static getTxSet(value: Buffer): StellarMessage; + + static txSet(value: TransactionSet): StellarMessage; + + static generalizedTxSet(value: GeneralizedTransactionSet): StellarMessage; + + static transaction(value: TransactionEnvelope): StellarMessage; + + static surveyRequest(value: SignedSurveyRequestMessage): StellarMessage; + + static surveyResponse(value: SignedSurveyResponseMessage): StellarMessage; + + static timeSlicedSurveyRequest( + value: SignedTimeSlicedSurveyRequestMessage, + ): StellarMessage; + + static timeSlicedSurveyResponse( + value: SignedTimeSlicedSurveyResponseMessage, + ): StellarMessage; + + static timeSlicedSurveyStartCollecting( + value: SignedTimeSlicedSurveyStartCollectingMessage, + ): StellarMessage; + + static timeSlicedSurveyStopCollecting( + value: SignedTimeSlicedSurveyStopCollectingMessage, + ): StellarMessage; + + static getScpQuorumset(value: Buffer): StellarMessage; + + static scpQuorumset(value: ScpQuorumSet): StellarMessage; + + static scpMessage(value: ScpEnvelope): StellarMessage; + + static getScpState(value: number): StellarMessage; + + static sendMore(value: SendMore): StellarMessage; + + static sendMoreExtended(value: SendMoreExtended): StellarMessage; + + static floodAdvert(value: FloodAdvert): StellarMessage; + + static floodDemand(value: FloodDemand): StellarMessage; + + value(): + | Error + | Hello + | Auth + | DontHave + | PeerAddress[] + | Buffer + | TransactionSet + | GeneralizedTransactionSet + | TransactionEnvelope + | SignedSurveyRequestMessage + | SignedSurveyResponseMessage + | SignedTimeSlicedSurveyRequestMessage + | SignedTimeSlicedSurveyResponseMessage + | SignedTimeSlicedSurveyStartCollectingMessage + | SignedTimeSlicedSurveyStopCollectingMessage + | Buffer + | ScpQuorumSet + | ScpEnvelope + | number + | SendMore + | SendMoreExtended + | FloodAdvert + | FloodDemand + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): StellarMessage; + + static write(value: StellarMessage, io: Buffer): void; + + static isValid(value: StellarMessage): boolean; + + static toXDR(value: StellarMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): StellarMessage; + + static fromXDR(input: string, format: 'hex' | 'base64'): StellarMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AuthenticatedMessage { + switch(): number; + + v0(value?: AuthenticatedMessageV0): AuthenticatedMessageV0; + + static 0(value: AuthenticatedMessageV0): AuthenticatedMessage; + + value(): AuthenticatedMessageV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AuthenticatedMessage; + + static write(value: AuthenticatedMessage, io: Buffer): void; + + static isValid(value: AuthenticatedMessage): boolean; + + static toXDR(value: AuthenticatedMessage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AuthenticatedMessage; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): AuthenticatedMessage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolParameters { + switch(): LiquidityPoolType; + + constantProduct( + value?: LiquidityPoolConstantProductParameters, + ): LiquidityPoolConstantProductParameters; + + static liquidityPoolConstantProduct( + value: LiquidityPoolConstantProductParameters, + ): LiquidityPoolParameters; + + value(): LiquidityPoolConstantProductParameters; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolParameters; + + static write(value: LiquidityPoolParameters, io: Buffer): void; + + static isValid(value: LiquidityPoolParameters): boolean; + + static toXDR(value: LiquidityPoolParameters): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolParameters; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolParameters; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class MuxedAccount { + switch(): CryptoKeyType; + + ed25519(value?: Buffer): Buffer; + + med25519(value?: MuxedAccountMed25519): MuxedAccountMed25519; + + static keyTypeEd25519(value: Buffer): MuxedAccount; + + static keyTypeMuxedEd25519(value: MuxedAccountMed25519): MuxedAccount; + + value(): Buffer | MuxedAccountMed25519; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): MuxedAccount; + + static write(value: MuxedAccount, io: Buffer): void; + + static isValid(value: MuxedAccount): boolean; + + static toXDR(value: MuxedAccount): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): MuxedAccount; + + static fromXDR(input: string, format: 'hex' | 'base64'): MuxedAccount; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ChangeTrustAsset { + switch(): AssetType; + + alphaNum4(value?: AlphaNum4): AlphaNum4; + + alphaNum12(value?: AlphaNum12): AlphaNum12; + + liquidityPool(value?: LiquidityPoolParameters): LiquidityPoolParameters; + + static assetTypeNative(): ChangeTrustAsset; + + static assetTypeCreditAlphanum4(value: AlphaNum4): ChangeTrustAsset; + + static assetTypeCreditAlphanum12(value: AlphaNum12): ChangeTrustAsset; + + static assetTypePoolShare(value: LiquidityPoolParameters): ChangeTrustAsset; + + value(): AlphaNum4 | AlphaNum12 | LiquidityPoolParameters | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ChangeTrustAsset; + + static write(value: ChangeTrustAsset, io: Buffer): void; + + static isValid(value: ChangeTrustAsset): boolean; + + static toXDR(value: ChangeTrustAsset): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ChangeTrustAsset; + + static fromXDR(input: string, format: 'hex' | 'base64'): ChangeTrustAsset; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RevokeSponsorshipOp { + switch(): RevokeSponsorshipType; + + ledgerKey(value?: LedgerKey): LedgerKey; + + signer(value?: RevokeSponsorshipOpSigner): RevokeSponsorshipOpSigner; + + static revokeSponsorshipLedgerEntry(value: LedgerKey): RevokeSponsorshipOp; + + static revokeSponsorshipSigner( + value: RevokeSponsorshipOpSigner, + ): RevokeSponsorshipOp; + + value(): LedgerKey | RevokeSponsorshipOpSigner; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RevokeSponsorshipOp; + + static write(value: RevokeSponsorshipOp, io: Buffer): void; + + static isValid(value: RevokeSponsorshipOp): boolean; + + static toXDR(value: RevokeSponsorshipOp): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RevokeSponsorshipOp; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RevokeSponsorshipOp; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractIdPreimage { + switch(): ContractIdPreimageType; + + fromAddress( + value?: ContractIdPreimageFromAddress, + ): ContractIdPreimageFromAddress; + + fromAsset(value?: Asset): Asset; + + static contractIdPreimageFromAddress( + value: ContractIdPreimageFromAddress, + ): ContractIdPreimage; + + static contractIdPreimageFromAsset(value: Asset): ContractIdPreimage; + + value(): ContractIdPreimageFromAddress | Asset; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractIdPreimage; + + static write(value: ContractIdPreimage, io: Buffer): void; + + static isValid(value: ContractIdPreimage): boolean; + + static toXDR(value: ContractIdPreimage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractIdPreimage; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractIdPreimage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HostFunction { + switch(): HostFunctionType; + + invokeContract(value?: InvokeContractArgs): InvokeContractArgs; + + createContract(value?: CreateContractArgs): CreateContractArgs; + + wasm(value?: Buffer): Buffer; + + createContractV2(value?: CreateContractArgsV2): CreateContractArgsV2; + + static hostFunctionTypeInvokeContract( + value: InvokeContractArgs, + ): HostFunction; + + static hostFunctionTypeCreateContract( + value: CreateContractArgs, + ): HostFunction; + + static hostFunctionTypeUploadContractWasm(value: Buffer): HostFunction; + + static hostFunctionTypeCreateContractV2( + value: CreateContractArgsV2, + ): HostFunction; + + value(): + | InvokeContractArgs + | CreateContractArgs + | Buffer + | CreateContractArgsV2; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HostFunction; + + static write(value: HostFunction, io: Buffer): void; + + static isValid(value: HostFunction): boolean; + + static toXDR(value: HostFunction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HostFunction; + + static fromXDR(input: string, format: 'hex' | 'base64'): HostFunction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanAuthorizedFunction { + switch(): SorobanAuthorizedFunctionType; + + contractFn(value?: InvokeContractArgs): InvokeContractArgs; + + createContractHostFn(value?: CreateContractArgs): CreateContractArgs; + + createContractV2HostFn(value?: CreateContractArgsV2): CreateContractArgsV2; + + static sorobanAuthorizedFunctionTypeContractFn( + value: InvokeContractArgs, + ): SorobanAuthorizedFunction; + + static sorobanAuthorizedFunctionTypeCreateContractHostFn( + value: CreateContractArgs, + ): SorobanAuthorizedFunction; + + static sorobanAuthorizedFunctionTypeCreateContractV2HostFn( + value: CreateContractArgsV2, + ): SorobanAuthorizedFunction; + + value(): InvokeContractArgs | CreateContractArgs | CreateContractArgsV2; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanAuthorizedFunction; + + static write(value: SorobanAuthorizedFunction, io: Buffer): void; + + static isValid(value: SorobanAuthorizedFunction): boolean; + + static toXDR(value: SorobanAuthorizedFunction): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanAuthorizedFunction; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanAuthorizedFunction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanCredentials { + switch(): SorobanCredentialsType; + + address(value?: SorobanAddressCredentials): SorobanAddressCredentials; + + static sorobanCredentialsSourceAccount(): SorobanCredentials; + + static sorobanCredentialsAddress( + value: SorobanAddressCredentials, + ): SorobanCredentials; + + value(): SorobanAddressCredentials | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanCredentials; + + static write(value: SorobanCredentials, io: Buffer): void; + + static isValid(value: SorobanCredentials): boolean; + + static toXDR(value: SorobanCredentials): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanCredentials; + + static fromXDR(input: string, format: 'hex' | 'base64'): SorobanCredentials; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationBody { + switch(): OperationType; + + createAccountOp(value?: CreateAccountOp): CreateAccountOp; + + paymentOp(value?: PaymentOp): PaymentOp; + + pathPaymentStrictReceiveOp( + value?: PathPaymentStrictReceiveOp, + ): PathPaymentStrictReceiveOp; + + manageSellOfferOp(value?: ManageSellOfferOp): ManageSellOfferOp; + + createPassiveSellOfferOp( + value?: CreatePassiveSellOfferOp, + ): CreatePassiveSellOfferOp; + + setOptionsOp(value?: SetOptionsOp): SetOptionsOp; + + changeTrustOp(value?: ChangeTrustOp): ChangeTrustOp; + + allowTrustOp(value?: AllowTrustOp): AllowTrustOp; + + destination(value?: MuxedAccount): MuxedAccount; + + manageDataOp(value?: ManageDataOp): ManageDataOp; + + bumpSequenceOp(value?: BumpSequenceOp): BumpSequenceOp; + + manageBuyOfferOp(value?: ManageBuyOfferOp): ManageBuyOfferOp; + + pathPaymentStrictSendOp( + value?: PathPaymentStrictSendOp, + ): PathPaymentStrictSendOp; + + createClaimableBalanceOp( + value?: CreateClaimableBalanceOp, + ): CreateClaimableBalanceOp; + + claimClaimableBalanceOp( + value?: ClaimClaimableBalanceOp, + ): ClaimClaimableBalanceOp; + + beginSponsoringFutureReservesOp( + value?: BeginSponsoringFutureReservesOp, + ): BeginSponsoringFutureReservesOp; + + revokeSponsorshipOp(value?: RevokeSponsorshipOp): RevokeSponsorshipOp; + + clawbackOp(value?: ClawbackOp): ClawbackOp; + + clawbackClaimableBalanceOp( + value?: ClawbackClaimableBalanceOp, + ): ClawbackClaimableBalanceOp; + + setTrustLineFlagsOp(value?: SetTrustLineFlagsOp): SetTrustLineFlagsOp; + + liquidityPoolDepositOp( + value?: LiquidityPoolDepositOp, + ): LiquidityPoolDepositOp; + + liquidityPoolWithdrawOp( + value?: LiquidityPoolWithdrawOp, + ): LiquidityPoolWithdrawOp; + + invokeHostFunctionOp(value?: InvokeHostFunctionOp): InvokeHostFunctionOp; + + extendFootprintTtlOp(value?: ExtendFootprintTtlOp): ExtendFootprintTtlOp; + + restoreFootprintOp(value?: RestoreFootprintOp): RestoreFootprintOp; + + static createAccount(value: CreateAccountOp): OperationBody; + + static payment(value: PaymentOp): OperationBody; + + static pathPaymentStrictReceive( + value: PathPaymentStrictReceiveOp, + ): OperationBody; + + static manageSellOffer(value: ManageSellOfferOp): OperationBody; + + static createPassiveSellOffer( + value: CreatePassiveSellOfferOp, + ): OperationBody; + + static setOptions(value: SetOptionsOp): OperationBody; + + static changeTrust(value: ChangeTrustOp): OperationBody; + + static allowTrust(value: AllowTrustOp): OperationBody; + + static accountMerge(value: MuxedAccount): OperationBody; + + static inflation(): OperationBody; + + static manageData(value: ManageDataOp): OperationBody; + + static bumpSequence(value: BumpSequenceOp): OperationBody; + + static manageBuyOffer(value: ManageBuyOfferOp): OperationBody; + + static pathPaymentStrictSend(value: PathPaymentStrictSendOp): OperationBody; + + static createClaimableBalance( + value: CreateClaimableBalanceOp, + ): OperationBody; + + static claimClaimableBalance(value: ClaimClaimableBalanceOp): OperationBody; + + static beginSponsoringFutureReserves( + value: BeginSponsoringFutureReservesOp, + ): OperationBody; + + static endSponsoringFutureReserves(): OperationBody; + + static revokeSponsorship(value: RevokeSponsorshipOp): OperationBody; + + static clawback(value: ClawbackOp): OperationBody; + + static clawbackClaimableBalance( + value: ClawbackClaimableBalanceOp, + ): OperationBody; + + static setTrustLineFlags(value: SetTrustLineFlagsOp): OperationBody; + + static liquidityPoolDeposit(value: LiquidityPoolDepositOp): OperationBody; + + static liquidityPoolWithdraw(value: LiquidityPoolWithdrawOp): OperationBody; + + static invokeHostFunction(value: InvokeHostFunctionOp): OperationBody; + + static extendFootprintTtl(value: ExtendFootprintTtlOp): OperationBody; + + static restoreFootprint(value: RestoreFootprintOp): OperationBody; + + value(): + | CreateAccountOp + | PaymentOp + | PathPaymentStrictReceiveOp + | ManageSellOfferOp + | CreatePassiveSellOfferOp + | SetOptionsOp + | ChangeTrustOp + | AllowTrustOp + | MuxedAccount + | ManageDataOp + | BumpSequenceOp + | ManageBuyOfferOp + | PathPaymentStrictSendOp + | CreateClaimableBalanceOp + | ClaimClaimableBalanceOp + | BeginSponsoringFutureReservesOp + | RevokeSponsorshipOp + | ClawbackOp + | ClawbackClaimableBalanceOp + | SetTrustLineFlagsOp + | LiquidityPoolDepositOp + | LiquidityPoolWithdrawOp + | InvokeHostFunctionOp + | ExtendFootprintTtlOp + | RestoreFootprintOp + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationBody; + + static write(value: OperationBody, io: Buffer): void; + + static isValid(value: OperationBody): boolean; + + static toXDR(value: OperationBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class HashIdPreimage { + switch(): EnvelopeType; + + operationId(value?: HashIdPreimageOperationId): HashIdPreimageOperationId; + + revokeId(value?: HashIdPreimageRevokeId): HashIdPreimageRevokeId; + + contractId(value?: HashIdPreimageContractId): HashIdPreimageContractId; + + sorobanAuthorization( + value?: HashIdPreimageSorobanAuthorization, + ): HashIdPreimageSorobanAuthorization; + + static envelopeTypeOpId(value: HashIdPreimageOperationId): HashIdPreimage; + + static envelopeTypePoolRevokeOpId( + value: HashIdPreimageRevokeId, + ): HashIdPreimage; + + static envelopeTypeContractId( + value: HashIdPreimageContractId, + ): HashIdPreimage; + + static envelopeTypeSorobanAuthorization( + value: HashIdPreimageSorobanAuthorization, + ): HashIdPreimage; + + value(): + | HashIdPreimageOperationId + | HashIdPreimageRevokeId + | HashIdPreimageContractId + | HashIdPreimageSorobanAuthorization; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): HashIdPreimage; + + static write(value: HashIdPreimage, io: Buffer): void; + + static isValid(value: HashIdPreimage): boolean; + + static toXDR(value: HashIdPreimage): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): HashIdPreimage; + + static fromXDR(input: string, format: 'hex' | 'base64'): HashIdPreimage; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Memo { + switch(): MemoType; + + text(value?: string | Buffer): string | Buffer; + + id(value?: Uint64): Uint64; + + hash(value?: Buffer): Buffer; + + retHash(value?: Buffer): Buffer; + + static memoNone(): Memo; + + static memoText(value: string | Buffer): Memo; + + static memoId(value: Uint64): Memo; + + static memoHash(value: Buffer): Memo; + + static memoReturn(value: Buffer): Memo; + + value(): string | Buffer | Uint64 | Buffer | Buffer | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Memo; + + static write(value: Memo, io: Buffer): void; + + static isValid(value: Memo): boolean; + + static toXDR(value: Memo): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Memo; + + static fromXDR(input: string, format: 'hex' | 'base64'): Memo; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class Preconditions { + switch(): PreconditionType; + + timeBounds(value?: TimeBounds): TimeBounds; + + v2(value?: PreconditionsV2): PreconditionsV2; + + static precondNone(): Preconditions; + + static precondTime(value: TimeBounds): Preconditions; + + static precondV2(value: PreconditionsV2): Preconditions; + + value(): TimeBounds | PreconditionsV2 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): Preconditions; + + static write(value: Preconditions, io: Buffer): void; + + static isValid(value: Preconditions): boolean; + + static toXDR(value: Preconditions): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): Preconditions; + + static fromXDR(input: string, format: 'hex' | 'base64'): Preconditions; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ArchivalProofBody { + switch(): ArchivalProofType; + + nonexistenceProof(value?: NonexistenceProofBody): NonexistenceProofBody; + + existenceProof(value?: ExistenceProofBody): ExistenceProofBody; + + static existence(value: NonexistenceProofBody): ArchivalProofBody; + + static nonexistence(value: ExistenceProofBody): ArchivalProofBody; + + value(): NonexistenceProofBody | ExistenceProofBody; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ArchivalProofBody; + + static write(value: ArchivalProofBody, io: Buffer): void; + + static isValid(value: ArchivalProofBody): boolean; + + static toXDR(value: ArchivalProofBody): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ArchivalProofBody; + + static fromXDR(input: string, format: 'hex' | 'base64'): ArchivalProofBody; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SorobanTransactionDataExt { + switch(): number; + + proofs(value?: ArchivalProof[]): ArchivalProof[]; + + static 0(): SorobanTransactionDataExt; + + static 1(value: ArchivalProof[]): SorobanTransactionDataExt; + + value(): ArchivalProof[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SorobanTransactionDataExt; + + static write(value: SorobanTransactionDataExt, io: Buffer): void; + + static isValid(value: SorobanTransactionDataExt): boolean; + + static toXDR(value: SorobanTransactionDataExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SorobanTransactionDataExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SorobanTransactionDataExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionV0Ext { + switch(): number; + + static 0(): TransactionV0Ext; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionV0Ext; + + static write(value: TransactionV0Ext, io: Buffer): void; + + static isValid(value: TransactionV0Ext): boolean; + + static toXDR(value: TransactionV0Ext): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionV0Ext; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionV0Ext; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionExt { + switch(): number; + + sorobanData(value?: SorobanTransactionData): SorobanTransactionData; + + static 0(): TransactionExt; + + static 1(value: SorobanTransactionData): TransactionExt; + + value(): SorobanTransactionData | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionExt; + + static write(value: TransactionExt, io: Buffer): void; + + static isValid(value: TransactionExt): boolean; + + static toXDR(value: TransactionExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionExt; + + static fromXDR(input: string, format: 'hex' | 'base64'): TransactionExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransactionInnerTx { + switch(): EnvelopeType; + + v1(value?: TransactionV1Envelope): TransactionV1Envelope; + + static envelopeTypeTx( + value: TransactionV1Envelope, + ): FeeBumpTransactionInnerTx; + + value(): TransactionV1Envelope; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransactionInnerTx; + + static write(value: FeeBumpTransactionInnerTx, io: Buffer): void; + + static isValid(value: FeeBumpTransactionInnerTx): boolean; + + static toXDR(value: FeeBumpTransactionInnerTx): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransactionInnerTx; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): FeeBumpTransactionInnerTx; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class FeeBumpTransactionExt { + switch(): number; + + static 0(): FeeBumpTransactionExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): FeeBumpTransactionExt; + + static write(value: FeeBumpTransactionExt, io: Buffer): void; + + static isValid(value: FeeBumpTransactionExt): boolean; + + static toXDR(value: FeeBumpTransactionExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): FeeBumpTransactionExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): FeeBumpTransactionExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionEnvelope { + switch(): EnvelopeType; + + v0(value?: TransactionV0Envelope): TransactionV0Envelope; + + v1(value?: TransactionV1Envelope): TransactionV1Envelope; + + feeBump(value?: FeeBumpTransactionEnvelope): FeeBumpTransactionEnvelope; + + static envelopeTypeTxV0(value: TransactionV0Envelope): TransactionEnvelope; + + static envelopeTypeTx(value: TransactionV1Envelope): TransactionEnvelope; + + static envelopeTypeTxFeeBump( + value: FeeBumpTransactionEnvelope, + ): TransactionEnvelope; + + value(): + | TransactionV0Envelope + | TransactionV1Envelope + | FeeBumpTransactionEnvelope; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionEnvelope; + + static write(value: TransactionEnvelope, io: Buffer): void; + + static isValid(value: TransactionEnvelope): boolean; + + static toXDR(value: TransactionEnvelope): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionEnvelope; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionEnvelope; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionSignaturePayloadTaggedTransaction { + switch(): EnvelopeType; + + tx(value?: Transaction): Transaction; + + feeBump(value?: FeeBumpTransaction): FeeBumpTransaction; + + static envelopeTypeTx( + value: Transaction, + ): TransactionSignaturePayloadTaggedTransaction; + + static envelopeTypeTxFeeBump( + value: FeeBumpTransaction, + ): TransactionSignaturePayloadTaggedTransaction; + + value(): Transaction | FeeBumpTransaction; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionSignaturePayloadTaggedTransaction; + + static write( + value: TransactionSignaturePayloadTaggedTransaction, + io: Buffer, + ): void; + + static isValid( + value: TransactionSignaturePayloadTaggedTransaction, + ): boolean; + + static toXDR(value: TransactionSignaturePayloadTaggedTransaction): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): TransactionSignaturePayloadTaggedTransaction; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionSignaturePayloadTaggedTransaction; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimAtom { + switch(): ClaimAtomType; + + v0(value?: ClaimOfferAtomV0): ClaimOfferAtomV0; + + orderBook(value?: ClaimOfferAtom): ClaimOfferAtom; + + liquidityPool(value?: ClaimLiquidityAtom): ClaimLiquidityAtom; + + static claimAtomTypeV0(value: ClaimOfferAtomV0): ClaimAtom; + + static claimAtomTypeOrderBook(value: ClaimOfferAtom): ClaimAtom; + + static claimAtomTypeLiquidityPool(value: ClaimLiquidityAtom): ClaimAtom; + + value(): ClaimOfferAtomV0 | ClaimOfferAtom | ClaimLiquidityAtom; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimAtom; + + static write(value: ClaimAtom, io: Buffer): void; + + static isValid(value: ClaimAtom): boolean; + + static toXDR(value: ClaimAtom): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimAtom; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClaimAtom; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateAccountResult { + switch(): CreateAccountResultCode; + + static createAccountSuccess(): CreateAccountResult; + + static createAccountMalformed(): CreateAccountResult; + + static createAccountUnderfunded(): CreateAccountResult; + + static createAccountLowReserve(): CreateAccountResult; + + static createAccountAlreadyExist(): CreateAccountResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateAccountResult; + + static write(value: CreateAccountResult, io: Buffer): void; + + static isValid(value: CreateAccountResult): boolean; + + static toXDR(value: CreateAccountResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateAccountResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateAccountResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PaymentResult { + switch(): PaymentResultCode; + + static paymentSuccess(): PaymentResult; + + static paymentMalformed(): PaymentResult; + + static paymentUnderfunded(): PaymentResult; + + static paymentSrcNoTrust(): PaymentResult; + + static paymentSrcNotAuthorized(): PaymentResult; + + static paymentNoDestination(): PaymentResult; + + static paymentNoTrust(): PaymentResult; + + static paymentNotAuthorized(): PaymentResult; + + static paymentLineFull(): PaymentResult; + + static paymentNoIssuer(): PaymentResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PaymentResult; + + static write(value: PaymentResult, io: Buffer): void; + + static isValid(value: PaymentResult): boolean; + + static toXDR(value: PaymentResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PaymentResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): PaymentResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictReceiveResult { + switch(): PathPaymentStrictReceiveResultCode; + + success( + value?: PathPaymentStrictReceiveResultSuccess, + ): PathPaymentStrictReceiveResultSuccess; + + noIssuer(value?: Asset): Asset; + + static pathPaymentStrictReceiveSuccess( + value: PathPaymentStrictReceiveResultSuccess, + ): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveMalformed(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveUnderfunded(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveSrcNoTrust(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveSrcNotAuthorized(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNoDestination(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNoTrust(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNotAuthorized(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveLineFull(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveNoIssuer( + value: Asset, + ): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveTooFewOffers(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveOfferCrossSelf(): PathPaymentStrictReceiveResult; + + static pathPaymentStrictReceiveOverSendmax(): PathPaymentStrictReceiveResult; + + value(): PathPaymentStrictReceiveResultSuccess | Asset | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictReceiveResult; + + static write(value: PathPaymentStrictReceiveResult, io: Buffer): void; + + static isValid(value: PathPaymentStrictReceiveResult): boolean; + + static toXDR(value: PathPaymentStrictReceiveResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): PathPaymentStrictReceiveResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictReceiveResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PathPaymentStrictSendResult { + switch(): PathPaymentStrictSendResultCode; + + success( + value?: PathPaymentStrictSendResultSuccess, + ): PathPaymentStrictSendResultSuccess; + + noIssuer(value?: Asset): Asset; + + static pathPaymentStrictSendSuccess( + value: PathPaymentStrictSendResultSuccess, + ): PathPaymentStrictSendResult; + + static pathPaymentStrictSendMalformed(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendUnderfunded(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendSrcNoTrust(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendSrcNotAuthorized(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNoDestination(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNoTrust(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNotAuthorized(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendLineFull(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendNoIssuer( + value: Asset, + ): PathPaymentStrictSendResult; + + static pathPaymentStrictSendTooFewOffers(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendOfferCrossSelf(): PathPaymentStrictSendResult; + + static pathPaymentStrictSendUnderDestmin(): PathPaymentStrictSendResult; + + value(): PathPaymentStrictSendResultSuccess | Asset | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PathPaymentStrictSendResult; + + static write(value: PathPaymentStrictSendResult, io: Buffer): void; + + static isValid(value: PathPaymentStrictSendResult): boolean; + + static toXDR(value: PathPaymentStrictSendResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PathPaymentStrictSendResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): PathPaymentStrictSendResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageOfferSuccessResultOffer { + switch(): ManageOfferEffect; + + offer(value?: OfferEntry): OfferEntry; + + static manageOfferCreated(value: OfferEntry): ManageOfferSuccessResultOffer; + + static manageOfferUpdated(value: OfferEntry): ManageOfferSuccessResultOffer; + + static manageOfferDeleted(): ManageOfferSuccessResultOffer; + + value(): OfferEntry | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageOfferSuccessResultOffer; + + static write(value: ManageOfferSuccessResultOffer, io: Buffer): void; + + static isValid(value: ManageOfferSuccessResultOffer): boolean; + + static toXDR(value: ManageOfferSuccessResultOffer): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ManageOfferSuccessResultOffer; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageOfferSuccessResultOffer; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageSellOfferResult { + switch(): ManageSellOfferResultCode; + + success(value?: ManageOfferSuccessResult): ManageOfferSuccessResult; + + static manageSellOfferSuccess( + value: ManageOfferSuccessResult, + ): ManageSellOfferResult; + + static manageSellOfferMalformed(): ManageSellOfferResult; + + static manageSellOfferSellNoTrust(): ManageSellOfferResult; + + static manageSellOfferBuyNoTrust(): ManageSellOfferResult; + + static manageSellOfferSellNotAuthorized(): ManageSellOfferResult; + + static manageSellOfferBuyNotAuthorized(): ManageSellOfferResult; + + static manageSellOfferLineFull(): ManageSellOfferResult; + + static manageSellOfferUnderfunded(): ManageSellOfferResult; + + static manageSellOfferCrossSelf(): ManageSellOfferResult; + + static manageSellOfferSellNoIssuer(): ManageSellOfferResult; + + static manageSellOfferBuyNoIssuer(): ManageSellOfferResult; + + static manageSellOfferNotFound(): ManageSellOfferResult; + + static manageSellOfferLowReserve(): ManageSellOfferResult; + + value(): ManageOfferSuccessResult | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageSellOfferResult; + + static write(value: ManageSellOfferResult, io: Buffer): void; + + static isValid(value: ManageSellOfferResult): boolean; + + static toXDR(value: ManageSellOfferResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageSellOfferResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageSellOfferResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageBuyOfferResult { + switch(): ManageBuyOfferResultCode; + + success(value?: ManageOfferSuccessResult): ManageOfferSuccessResult; + + static manageBuyOfferSuccess( + value: ManageOfferSuccessResult, + ): ManageBuyOfferResult; + + static manageBuyOfferMalformed(): ManageBuyOfferResult; + + static manageBuyOfferSellNoTrust(): ManageBuyOfferResult; + + static manageBuyOfferBuyNoTrust(): ManageBuyOfferResult; + + static manageBuyOfferSellNotAuthorized(): ManageBuyOfferResult; + + static manageBuyOfferBuyNotAuthorized(): ManageBuyOfferResult; + + static manageBuyOfferLineFull(): ManageBuyOfferResult; + + static manageBuyOfferUnderfunded(): ManageBuyOfferResult; + + static manageBuyOfferCrossSelf(): ManageBuyOfferResult; + + static manageBuyOfferSellNoIssuer(): ManageBuyOfferResult; + + static manageBuyOfferBuyNoIssuer(): ManageBuyOfferResult; + + static manageBuyOfferNotFound(): ManageBuyOfferResult; + + static manageBuyOfferLowReserve(): ManageBuyOfferResult; + + value(): ManageOfferSuccessResult | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageBuyOfferResult; + + static write(value: ManageBuyOfferResult, io: Buffer): void; + + static isValid(value: ManageBuyOfferResult): boolean; + + static toXDR(value: ManageBuyOfferResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageBuyOfferResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ManageBuyOfferResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetOptionsResult { + switch(): SetOptionsResultCode; + + static setOptionsSuccess(): SetOptionsResult; + + static setOptionsLowReserve(): SetOptionsResult; + + static setOptionsTooManySigners(): SetOptionsResult; + + static setOptionsBadFlags(): SetOptionsResult; + + static setOptionsInvalidInflation(): SetOptionsResult; + + static setOptionsCantChange(): SetOptionsResult; + + static setOptionsUnknownFlag(): SetOptionsResult; + + static setOptionsThresholdOutOfRange(): SetOptionsResult; + + static setOptionsBadSigner(): SetOptionsResult; + + static setOptionsInvalidHomeDomain(): SetOptionsResult; + + static setOptionsAuthRevocableRequired(): SetOptionsResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetOptionsResult; + + static write(value: SetOptionsResult, io: Buffer): void; + + static isValid(value: SetOptionsResult): boolean; + + static toXDR(value: SetOptionsResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetOptionsResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): SetOptionsResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ChangeTrustResult { + switch(): ChangeTrustResultCode; + + static changeTrustSuccess(): ChangeTrustResult; + + static changeTrustMalformed(): ChangeTrustResult; + + static changeTrustNoIssuer(): ChangeTrustResult; + + static changeTrustInvalidLimit(): ChangeTrustResult; + + static changeTrustLowReserve(): ChangeTrustResult; + + static changeTrustSelfNotAllowed(): ChangeTrustResult; + + static changeTrustTrustLineMissing(): ChangeTrustResult; + + static changeTrustCannotDelete(): ChangeTrustResult; + + static changeTrustNotAuthMaintainLiabilities(): ChangeTrustResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ChangeTrustResult; + + static write(value: ChangeTrustResult, io: Buffer): void; + + static isValid(value: ChangeTrustResult): boolean; + + static toXDR(value: ChangeTrustResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ChangeTrustResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ChangeTrustResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AllowTrustResult { + switch(): AllowTrustResultCode; + + static allowTrustSuccess(): AllowTrustResult; + + static allowTrustMalformed(): AllowTrustResult; + + static allowTrustNoTrustLine(): AllowTrustResult; + + static allowTrustTrustNotRequired(): AllowTrustResult; + + static allowTrustCantRevoke(): AllowTrustResult; + + static allowTrustSelfNotAllowed(): AllowTrustResult; + + static allowTrustLowReserve(): AllowTrustResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AllowTrustResult; + + static write(value: AllowTrustResult, io: Buffer): void; + + static isValid(value: AllowTrustResult): boolean; + + static toXDR(value: AllowTrustResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AllowTrustResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): AllowTrustResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class AccountMergeResult { + switch(): AccountMergeResultCode; + + sourceAccountBalance(value?: Int64): Int64; + + static accountMergeSuccess(value: Int64): AccountMergeResult; + + static accountMergeMalformed(): AccountMergeResult; + + static accountMergeNoAccount(): AccountMergeResult; + + static accountMergeImmutableSet(): AccountMergeResult; + + static accountMergeHasSubEntries(): AccountMergeResult; + + static accountMergeSeqnumTooFar(): AccountMergeResult; + + static accountMergeDestFull(): AccountMergeResult; + + static accountMergeIsSponsor(): AccountMergeResult; + + value(): Int64 | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): AccountMergeResult; + + static write(value: AccountMergeResult, io: Buffer): void; + + static isValid(value: AccountMergeResult): boolean; + + static toXDR(value: AccountMergeResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): AccountMergeResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): AccountMergeResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InflationResult { + switch(): InflationResultCode; + + payouts(value?: InflationPayout[]): InflationPayout[]; + + static inflationSuccess(value: InflationPayout[]): InflationResult; + + static inflationNotTime(): InflationResult; + + value(): InflationPayout[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InflationResult; + + static write(value: InflationResult, io: Buffer): void; + + static isValid(value: InflationResult): boolean; + + static toXDR(value: InflationResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InflationResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): InflationResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ManageDataResult { + switch(): ManageDataResultCode; + + static manageDataSuccess(): ManageDataResult; + + static manageDataNotSupportedYet(): ManageDataResult; + + static manageDataNameNotFound(): ManageDataResult; + + static manageDataLowReserve(): ManageDataResult; + + static manageDataInvalidName(): ManageDataResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ManageDataResult; + + static write(value: ManageDataResult, io: Buffer): void; + + static isValid(value: ManageDataResult): boolean; + + static toXDR(value: ManageDataResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ManageDataResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ManageDataResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BumpSequenceResult { + switch(): BumpSequenceResultCode; + + static bumpSequenceSuccess(): BumpSequenceResult; + + static bumpSequenceBadSeq(): BumpSequenceResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BumpSequenceResult; + + static write(value: BumpSequenceResult, io: Buffer): void; + + static isValid(value: BumpSequenceResult): boolean; + + static toXDR(value: BumpSequenceResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): BumpSequenceResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): BumpSequenceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class CreateClaimableBalanceResult { + switch(): CreateClaimableBalanceResultCode; + + balanceId(value?: ClaimableBalanceId): ClaimableBalanceId; + + static createClaimableBalanceSuccess( + value: ClaimableBalanceId, + ): CreateClaimableBalanceResult; + + static createClaimableBalanceMalformed(): CreateClaimableBalanceResult; + + static createClaimableBalanceLowReserve(): CreateClaimableBalanceResult; + + static createClaimableBalanceNoTrust(): CreateClaimableBalanceResult; + + static createClaimableBalanceNotAuthorized(): CreateClaimableBalanceResult; + + static createClaimableBalanceUnderfunded(): CreateClaimableBalanceResult; + + value(): ClaimableBalanceId | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): CreateClaimableBalanceResult; + + static write(value: CreateClaimableBalanceResult, io: Buffer): void; + + static isValid(value: CreateClaimableBalanceResult): boolean; + + static toXDR(value: CreateClaimableBalanceResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): CreateClaimableBalanceResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): CreateClaimableBalanceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClaimClaimableBalanceResult { + switch(): ClaimClaimableBalanceResultCode; + + static claimClaimableBalanceSuccess(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceDoesNotExist(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceCannotClaim(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceLineFull(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceNoTrust(): ClaimClaimableBalanceResult; + + static claimClaimableBalanceNotAuthorized(): ClaimClaimableBalanceResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClaimClaimableBalanceResult; + + static write(value: ClaimClaimableBalanceResult, io: Buffer): void; + + static isValid(value: ClaimClaimableBalanceResult): boolean; + + static toXDR(value: ClaimClaimableBalanceResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClaimClaimableBalanceResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClaimClaimableBalanceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class BeginSponsoringFutureReservesResult { + switch(): BeginSponsoringFutureReservesResultCode; + + static beginSponsoringFutureReservesSuccess(): BeginSponsoringFutureReservesResult; + + static beginSponsoringFutureReservesMalformed(): BeginSponsoringFutureReservesResult; + + static beginSponsoringFutureReservesAlreadySponsored(): BeginSponsoringFutureReservesResult; + + static beginSponsoringFutureReservesRecursive(): BeginSponsoringFutureReservesResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): BeginSponsoringFutureReservesResult; + + static write(value: BeginSponsoringFutureReservesResult, io: Buffer): void; + + static isValid(value: BeginSponsoringFutureReservesResult): boolean; + + static toXDR(value: BeginSponsoringFutureReservesResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): BeginSponsoringFutureReservesResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): BeginSponsoringFutureReservesResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class EndSponsoringFutureReservesResult { + switch(): EndSponsoringFutureReservesResultCode; + + static endSponsoringFutureReservesSuccess(): EndSponsoringFutureReservesResult; + + static endSponsoringFutureReservesNotSponsored(): EndSponsoringFutureReservesResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): EndSponsoringFutureReservesResult; + + static write(value: EndSponsoringFutureReservesResult, io: Buffer): void; + + static isValid(value: EndSponsoringFutureReservesResult): boolean; + + static toXDR(value: EndSponsoringFutureReservesResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): EndSponsoringFutureReservesResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): EndSponsoringFutureReservesResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RevokeSponsorshipResult { + switch(): RevokeSponsorshipResultCode; + + static revokeSponsorshipSuccess(): RevokeSponsorshipResult; + + static revokeSponsorshipDoesNotExist(): RevokeSponsorshipResult; + + static revokeSponsorshipNotSponsor(): RevokeSponsorshipResult; + + static revokeSponsorshipLowReserve(): RevokeSponsorshipResult; + + static revokeSponsorshipOnlyTransferable(): RevokeSponsorshipResult; + + static revokeSponsorshipMalformed(): RevokeSponsorshipResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RevokeSponsorshipResult; + + static write(value: RevokeSponsorshipResult, io: Buffer): void; + + static isValid(value: RevokeSponsorshipResult): boolean; + + static toXDR(value: RevokeSponsorshipResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RevokeSponsorshipResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RevokeSponsorshipResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackResult { + switch(): ClawbackResultCode; + + static clawbackSuccess(): ClawbackResult; + + static clawbackMalformed(): ClawbackResult; + + static clawbackNotClawbackEnabled(): ClawbackResult; + + static clawbackNoTrust(): ClawbackResult; + + static clawbackUnderfunded(): ClawbackResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackResult; + + static write(value: ClawbackResult, io: Buffer): void; + + static isValid(value: ClawbackResult): boolean; + + static toXDR(value: ClawbackResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ClawbackResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): ClawbackResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ClawbackClaimableBalanceResult { + switch(): ClawbackClaimableBalanceResultCode; + + static clawbackClaimableBalanceSuccess(): ClawbackClaimableBalanceResult; + + static clawbackClaimableBalanceDoesNotExist(): ClawbackClaimableBalanceResult; + + static clawbackClaimableBalanceNotIssuer(): ClawbackClaimableBalanceResult; + + static clawbackClaimableBalanceNotClawbackEnabled(): ClawbackClaimableBalanceResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ClawbackClaimableBalanceResult; + + static write(value: ClawbackClaimableBalanceResult, io: Buffer): void; + + static isValid(value: ClawbackClaimableBalanceResult): boolean; + + static toXDR(value: ClawbackClaimableBalanceResult): Buffer; + + static fromXDR( + input: Buffer, + format?: 'raw', + ): ClawbackClaimableBalanceResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ClawbackClaimableBalanceResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SetTrustLineFlagsResult { + switch(): SetTrustLineFlagsResultCode; + + static setTrustLineFlagsSuccess(): SetTrustLineFlagsResult; + + static setTrustLineFlagsMalformed(): SetTrustLineFlagsResult; + + static setTrustLineFlagsNoTrustLine(): SetTrustLineFlagsResult; + + static setTrustLineFlagsCantRevoke(): SetTrustLineFlagsResult; + + static setTrustLineFlagsInvalidState(): SetTrustLineFlagsResult; + + static setTrustLineFlagsLowReserve(): SetTrustLineFlagsResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SetTrustLineFlagsResult; + + static write(value: SetTrustLineFlagsResult, io: Buffer): void; + + static isValid(value: SetTrustLineFlagsResult): boolean; + + static toXDR(value: SetTrustLineFlagsResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SetTrustLineFlagsResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): SetTrustLineFlagsResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolDepositResult { + switch(): LiquidityPoolDepositResultCode; + + static liquidityPoolDepositSuccess(): LiquidityPoolDepositResult; + + static liquidityPoolDepositMalformed(): LiquidityPoolDepositResult; + + static liquidityPoolDepositNoTrust(): LiquidityPoolDepositResult; + + static liquidityPoolDepositNotAuthorized(): LiquidityPoolDepositResult; + + static liquidityPoolDepositUnderfunded(): LiquidityPoolDepositResult; + + static liquidityPoolDepositLineFull(): LiquidityPoolDepositResult; + + static liquidityPoolDepositBadPrice(): LiquidityPoolDepositResult; + + static liquidityPoolDepositPoolFull(): LiquidityPoolDepositResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolDepositResult; + + static write(value: LiquidityPoolDepositResult, io: Buffer): void; + + static isValid(value: LiquidityPoolDepositResult): boolean; + + static toXDR(value: LiquidityPoolDepositResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolDepositResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolDepositResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class LiquidityPoolWithdrawResult { + switch(): LiquidityPoolWithdrawResultCode; + + static liquidityPoolWithdrawSuccess(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawMalformed(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawNoTrust(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawUnderfunded(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawLineFull(): LiquidityPoolWithdrawResult; + + static liquidityPoolWithdrawUnderMinimum(): LiquidityPoolWithdrawResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): LiquidityPoolWithdrawResult; + + static write(value: LiquidityPoolWithdrawResult, io: Buffer): void; + + static isValid(value: LiquidityPoolWithdrawResult): boolean; + + static toXDR(value: LiquidityPoolWithdrawResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): LiquidityPoolWithdrawResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): LiquidityPoolWithdrawResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InvokeHostFunctionResult { + switch(): InvokeHostFunctionResultCode; + + success(value?: Buffer): Buffer; + + static invokeHostFunctionSuccess(value: Buffer): InvokeHostFunctionResult; + + static invokeHostFunctionMalformed(): InvokeHostFunctionResult; + + static invokeHostFunctionTrapped(): InvokeHostFunctionResult; + + static invokeHostFunctionResourceLimitExceeded(): InvokeHostFunctionResult; + + static invokeHostFunctionEntryArchived(): InvokeHostFunctionResult; + + static invokeHostFunctionInsufficientRefundableFee(): InvokeHostFunctionResult; + + value(): Buffer | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InvokeHostFunctionResult; + + static write(value: InvokeHostFunctionResult, io: Buffer): void; + + static isValid(value: InvokeHostFunctionResult): boolean; + + static toXDR(value: InvokeHostFunctionResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InvokeHostFunctionResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InvokeHostFunctionResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExtendFootprintTtlResult { + switch(): ExtendFootprintTtlResultCode; + + static extendFootprintTtlSuccess(): ExtendFootprintTtlResult; + + static extendFootprintTtlMalformed(): ExtendFootprintTtlResult; + + static extendFootprintTtlResourceLimitExceeded(): ExtendFootprintTtlResult; + + static extendFootprintTtlInsufficientRefundableFee(): ExtendFootprintTtlResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExtendFootprintTtlResult; + + static write(value: ExtendFootprintTtlResult, io: Buffer): void; + + static isValid(value: ExtendFootprintTtlResult): boolean; + + static toXDR(value: ExtendFootprintTtlResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExtendFootprintTtlResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ExtendFootprintTtlResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class RestoreFootprintResult { + switch(): RestoreFootprintResultCode; + + static restoreFootprintSuccess(): RestoreFootprintResult; + + static restoreFootprintMalformed(): RestoreFootprintResult; + + static restoreFootprintResourceLimitExceeded(): RestoreFootprintResult; + + static restoreFootprintInsufficientRefundableFee(): RestoreFootprintResult; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): RestoreFootprintResult; + + static write(value: RestoreFootprintResult, io: Buffer): void; + + static isValid(value: RestoreFootprintResult): boolean; + + static toXDR(value: RestoreFootprintResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): RestoreFootprintResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): RestoreFootprintResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationResultTr { + switch(): OperationType; + + createAccountResult(value?: CreateAccountResult): CreateAccountResult; + + paymentResult(value?: PaymentResult): PaymentResult; + + pathPaymentStrictReceiveResult( + value?: PathPaymentStrictReceiveResult, + ): PathPaymentStrictReceiveResult; + + manageSellOfferResult(value?: ManageSellOfferResult): ManageSellOfferResult; + + createPassiveSellOfferResult( + value?: ManageSellOfferResult, + ): ManageSellOfferResult; + + setOptionsResult(value?: SetOptionsResult): SetOptionsResult; + + changeTrustResult(value?: ChangeTrustResult): ChangeTrustResult; + + allowTrustResult(value?: AllowTrustResult): AllowTrustResult; + + accountMergeResult(value?: AccountMergeResult): AccountMergeResult; + + inflationResult(value?: InflationResult): InflationResult; + + manageDataResult(value?: ManageDataResult): ManageDataResult; + + bumpSeqResult(value?: BumpSequenceResult): BumpSequenceResult; + + manageBuyOfferResult(value?: ManageBuyOfferResult): ManageBuyOfferResult; + + pathPaymentStrictSendResult( + value?: PathPaymentStrictSendResult, + ): PathPaymentStrictSendResult; + + createClaimableBalanceResult( + value?: CreateClaimableBalanceResult, + ): CreateClaimableBalanceResult; + + claimClaimableBalanceResult( + value?: ClaimClaimableBalanceResult, + ): ClaimClaimableBalanceResult; + + beginSponsoringFutureReservesResult( + value?: BeginSponsoringFutureReservesResult, + ): BeginSponsoringFutureReservesResult; + + endSponsoringFutureReservesResult( + value?: EndSponsoringFutureReservesResult, + ): EndSponsoringFutureReservesResult; + + revokeSponsorshipResult( + value?: RevokeSponsorshipResult, + ): RevokeSponsorshipResult; + + clawbackResult(value?: ClawbackResult): ClawbackResult; + + clawbackClaimableBalanceResult( + value?: ClawbackClaimableBalanceResult, + ): ClawbackClaimableBalanceResult; + + setTrustLineFlagsResult( + value?: SetTrustLineFlagsResult, + ): SetTrustLineFlagsResult; + + liquidityPoolDepositResult( + value?: LiquidityPoolDepositResult, + ): LiquidityPoolDepositResult; + + liquidityPoolWithdrawResult( + value?: LiquidityPoolWithdrawResult, + ): LiquidityPoolWithdrawResult; + + invokeHostFunctionResult( + value?: InvokeHostFunctionResult, + ): InvokeHostFunctionResult; + + extendFootprintTtlResult( + value?: ExtendFootprintTtlResult, + ): ExtendFootprintTtlResult; + + restoreFootprintResult( + value?: RestoreFootprintResult, + ): RestoreFootprintResult; + + static createAccount(value: CreateAccountResult): OperationResultTr; + + static payment(value: PaymentResult): OperationResultTr; + + static pathPaymentStrictReceive( + value: PathPaymentStrictReceiveResult, + ): OperationResultTr; + + static manageSellOffer(value: ManageSellOfferResult): OperationResultTr; + + static createPassiveSellOffer( + value: ManageSellOfferResult, + ): OperationResultTr; + + static setOptions(value: SetOptionsResult): OperationResultTr; + + static changeTrust(value: ChangeTrustResult): OperationResultTr; + + static allowTrust(value: AllowTrustResult): OperationResultTr; + + static accountMerge(value: AccountMergeResult): OperationResultTr; + + static inflation(value: InflationResult): OperationResultTr; + + static manageData(value: ManageDataResult): OperationResultTr; + + static bumpSequence(value: BumpSequenceResult): OperationResultTr; + + static manageBuyOffer(value: ManageBuyOfferResult): OperationResultTr; + + static pathPaymentStrictSend( + value: PathPaymentStrictSendResult, + ): OperationResultTr; + + static createClaimableBalance( + value: CreateClaimableBalanceResult, + ): OperationResultTr; + + static claimClaimableBalance( + value: ClaimClaimableBalanceResult, + ): OperationResultTr; + + static beginSponsoringFutureReserves( + value: BeginSponsoringFutureReservesResult, + ): OperationResultTr; + + static endSponsoringFutureReserves( + value: EndSponsoringFutureReservesResult, + ): OperationResultTr; + + static revokeSponsorship(value: RevokeSponsorshipResult): OperationResultTr; + + static clawback(value: ClawbackResult): OperationResultTr; + + static clawbackClaimableBalance( + value: ClawbackClaimableBalanceResult, + ): OperationResultTr; + + static setTrustLineFlags(value: SetTrustLineFlagsResult): OperationResultTr; + + static liquidityPoolDeposit( + value: LiquidityPoolDepositResult, + ): OperationResultTr; + + static liquidityPoolWithdraw( + value: LiquidityPoolWithdrawResult, + ): OperationResultTr; + + static invokeHostFunction( + value: InvokeHostFunctionResult, + ): OperationResultTr; + + static extendFootprintTtl( + value: ExtendFootprintTtlResult, + ): OperationResultTr; + + static restoreFootprint(value: RestoreFootprintResult): OperationResultTr; + + value(): + | CreateAccountResult + | PaymentResult + | PathPaymentStrictReceiveResult + | ManageSellOfferResult + | ManageSellOfferResult + | SetOptionsResult + | ChangeTrustResult + | AllowTrustResult + | AccountMergeResult + | InflationResult + | ManageDataResult + | BumpSequenceResult + | ManageBuyOfferResult + | PathPaymentStrictSendResult + | CreateClaimableBalanceResult + | ClaimClaimableBalanceResult + | BeginSponsoringFutureReservesResult + | EndSponsoringFutureReservesResult + | RevokeSponsorshipResult + | ClawbackResult + | ClawbackClaimableBalanceResult + | SetTrustLineFlagsResult + | LiquidityPoolDepositResult + | LiquidityPoolWithdrawResult + | InvokeHostFunctionResult + | ExtendFootprintTtlResult + | RestoreFootprintResult; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationResultTr; + + static write(value: OperationResultTr, io: Buffer): void; + + static isValid(value: OperationResultTr): boolean; + + static toXDR(value: OperationResultTr): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationResultTr; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationResultTr; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class OperationResult { + switch(): OperationResultCode; + + tr(value?: OperationResultTr): OperationResultTr; + + static opInner(value: OperationResultTr): OperationResult; + + static opBadAuth(): OperationResult; + + static opNoAccount(): OperationResult; + + static opNotSupported(): OperationResult; + + static opTooManySubentries(): OperationResult; + + static opExceededWorkLimit(): OperationResult; + + static opTooManySponsoring(): OperationResult; + + value(): OperationResultTr | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): OperationResult; + + static write(value: OperationResult, io: Buffer): void; + + static isValid(value: OperationResult): boolean; + + static toXDR(value: OperationResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): OperationResult; + + static fromXDR(input: string, format: 'hex' | 'base64'): OperationResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResultResult { + switch(): TransactionResultCode; + + results(value?: OperationResult[]): OperationResult[]; + + static txSuccess(value: OperationResult[]): InnerTransactionResultResult; + + static txFailed(value: OperationResult[]): InnerTransactionResultResult; + + static txTooEarly(): InnerTransactionResultResult; + + static txTooLate(): InnerTransactionResultResult; + + static txMissingOperation(): InnerTransactionResultResult; + + static txBadSeq(): InnerTransactionResultResult; + + static txBadAuth(): InnerTransactionResultResult; + + static txInsufficientBalance(): InnerTransactionResultResult; + + static txNoAccount(): InnerTransactionResultResult; + + static txInsufficientFee(): InnerTransactionResultResult; + + static txBadAuthExtra(): InnerTransactionResultResult; + + static txInternalError(): InnerTransactionResultResult; + + static txNotSupported(): InnerTransactionResultResult; + + static txBadSponsorship(): InnerTransactionResultResult; + + static txBadMinSeqAgeOrGap(): InnerTransactionResultResult; + + static txMalformed(): InnerTransactionResultResult; + + static txSorobanInvalid(): InnerTransactionResultResult; + + value(): OperationResult[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResultResult; + + static write(value: InnerTransactionResultResult, io: Buffer): void; + + static isValid(value: InnerTransactionResultResult): boolean; + + static toXDR(value: InnerTransactionResultResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResultResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResultResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class InnerTransactionResultExt { + switch(): number; + + static 0(): InnerTransactionResultExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): InnerTransactionResultExt; + + static write(value: InnerTransactionResultExt, io: Buffer): void; + + static isValid(value: InnerTransactionResultExt): boolean; + + static toXDR(value: InnerTransactionResultExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): InnerTransactionResultExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): InnerTransactionResultExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultResult { + switch(): TransactionResultCode; + + innerResultPair( + value?: InnerTransactionResultPair, + ): InnerTransactionResultPair; + + results(value?: OperationResult[]): OperationResult[]; + + static txFeeBumpInnerSuccess( + value: InnerTransactionResultPair, + ): TransactionResultResult; + + static txFeeBumpInnerFailed( + value: InnerTransactionResultPair, + ): TransactionResultResult; + + static txSuccess(value: OperationResult[]): TransactionResultResult; + + static txFailed(value: OperationResult[]): TransactionResultResult; + + static txTooEarly(): TransactionResultResult; + + static txTooLate(): TransactionResultResult; + + static txMissingOperation(): TransactionResultResult; + + static txBadSeq(): TransactionResultResult; + + static txBadAuth(): TransactionResultResult; + + static txInsufficientBalance(): TransactionResultResult; + + static txNoAccount(): TransactionResultResult; + + static txInsufficientFee(): TransactionResultResult; + + static txBadAuthExtra(): TransactionResultResult; + + static txInternalError(): TransactionResultResult; + + static txNotSupported(): TransactionResultResult; + + static txBadSponsorship(): TransactionResultResult; + + static txBadMinSeqAgeOrGap(): TransactionResultResult; + + static txMalformed(): TransactionResultResult; + + static txSorobanInvalid(): TransactionResultResult; + + value(): InnerTransactionResultPair | OperationResult[] | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultResult; + + static write(value: TransactionResultResult, io: Buffer): void; + + static isValid(value: TransactionResultResult): boolean; + + static toXDR(value: TransactionResultResult): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultResult; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultResult; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class TransactionResultExt { + switch(): number; + + static 0(): TransactionResultExt; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): TransactionResultExt; + + static write(value: TransactionResultExt, io: Buffer): void; + + static isValid(value: TransactionResultExt): boolean; + + static toXDR(value: TransactionResultExt): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): TransactionResultExt; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): TransactionResultExt; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ExtensionPoint { + switch(): number; + + static 0(): ExtensionPoint; + + value(): void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ExtensionPoint; + + static write(value: ExtensionPoint, io: Buffer): void; + + static isValid(value: ExtensionPoint): boolean; + + static toXDR(value: ExtensionPoint): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ExtensionPoint; + + static fromXDR(input: string, format: 'hex' | 'base64'): ExtensionPoint; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class PublicKey { + switch(): PublicKeyType; + + ed25519(value?: Buffer): Buffer; + + static publicKeyTypeEd25519(value: Buffer): PublicKey; + + value(): Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): PublicKey; + + static write(value: PublicKey, io: Buffer): void; + + static isValid(value: PublicKey): boolean; + + static toXDR(value: PublicKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): PublicKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): PublicKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class SignerKey { + switch(): SignerKeyType; + + ed25519(value?: Buffer): Buffer; + + preAuthTx(value?: Buffer): Buffer; + + hashX(value?: Buffer): Buffer; + + ed25519SignedPayload( + value?: SignerKeyEd25519SignedPayload, + ): SignerKeyEd25519SignedPayload; + + static signerKeyTypeEd25519(value: Buffer): SignerKey; + + static signerKeyTypePreAuthTx(value: Buffer): SignerKey; + + static signerKeyTypeHashX(value: Buffer): SignerKey; + + static signerKeyTypeEd25519SignedPayload( + value: SignerKeyEd25519SignedPayload, + ): SignerKey; + + value(): Buffer | Buffer | Buffer | SignerKeyEd25519SignedPayload; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): SignerKey; + + static write(value: SignerKey, io: Buffer): void; + + static isValid(value: SignerKey): boolean; + + static toXDR(value: SignerKey): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): SignerKey; + + static fromXDR(input: string, format: 'hex' | 'base64'): SignerKey; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScError { + switch(): ScErrorType; + + contractCode(value?: number): number; + + code(value?: ScErrorCode): ScErrorCode; + + static sceContract(value: number): ScError; + + static sceWasmVm(value: ScErrorCode): ScError; + + static sceContext(value: ScErrorCode): ScError; + + static sceStorage(value: ScErrorCode): ScError; + + static sceObject(value: ScErrorCode): ScError; + + static sceCrypto(value: ScErrorCode): ScError; + + static sceEvents(value: ScErrorCode): ScError; + + static sceBudget(value: ScErrorCode): ScError; + + static sceValue(value: ScErrorCode): ScError; + + static sceAuth(value: ScErrorCode): ScError; + + value(): number | ScErrorCode; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScError; + + static write(value: ScError, io: Buffer): void; + + static isValid(value: ScError): boolean; + + static toXDR(value: ScError): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScError; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScError; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ContractExecutable { + switch(): ContractExecutableType; + + wasmHash(value?: Buffer): Buffer; + + static contractExecutableWasm(value: Buffer): ContractExecutable; + + static contractExecutableStellarAsset(): ContractExecutable; + + value(): Buffer | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ContractExecutable; + + static write(value: ContractExecutable, io: Buffer): void; + + static isValid(value: ContractExecutable): boolean; + + static toXDR(value: ContractExecutable): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ContractExecutable; + + static fromXDR(input: string, format: 'hex' | 'base64'): ContractExecutable; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScAddress { + switch(): ScAddressType; + + accountId(value?: AccountId): AccountId; + + contractId(value?: Buffer): Buffer; + + static scAddressTypeAccount(value: AccountId): ScAddress; + + static scAddressTypeContract(value: Buffer): ScAddress; + + value(): AccountId | Buffer; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScAddress; + + static write(value: ScAddress, io: Buffer): void; + + static isValid(value: ScAddress): boolean; + + static toXDR(value: ScAddress): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScAddress; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScAddress; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScVal { + switch(): ScValType; + + b(value?: boolean): boolean; + + error(value?: ScError): ScError; + + u32(value?: number): number; + + i32(value?: number): number; + + u64(value?: Uint64): Uint64; + + i64(value?: Int64): Int64; + + timepoint(value?: TimePoint): TimePoint; + + duration(value?: Duration): Duration; + + u128(value?: UInt128Parts): UInt128Parts; + + i128(value?: Int128Parts): Int128Parts; + + u256(value?: UInt256Parts): UInt256Parts; + + i256(value?: Int256Parts): Int256Parts; + + bytes(value?: Buffer): Buffer; + + str(value?: string | Buffer): string | Buffer; + + sym(value?: string | Buffer): string | Buffer; + + vec(value?: null | ScVal[]): null | ScVal[]; + + map(value?: null | ScMapEntry[]): null | ScMapEntry[]; + + address(value?: ScAddress): ScAddress; + + nonceKey(value?: ScNonceKey): ScNonceKey; + + instance(value?: ScContractInstance): ScContractInstance; + + static scvBool(value: boolean): ScVal; + + static scvVoid(): ScVal; + + static scvError(value: ScError): ScVal; + + static scvU32(value: number): ScVal; + + static scvI32(value: number): ScVal; + + static scvU64(value: Uint64): ScVal; + + static scvI64(value: Int64): ScVal; + + static scvTimepoint(value: TimePoint): ScVal; + + static scvDuration(value: Duration): ScVal; + + static scvU128(value: UInt128Parts): ScVal; + + static scvI128(value: Int128Parts): ScVal; + + static scvU256(value: UInt256Parts): ScVal; + + static scvI256(value: Int256Parts): ScVal; + + static scvBytes(value: Buffer): ScVal; + + static scvString(value: string | Buffer): ScVal; + + static scvSymbol(value: string | Buffer): ScVal; + + static scvVec(value: null | ScVal[]): ScVal; + + static scvMap(value: null | ScMapEntry[]): ScVal; + + static scvAddress(value: ScAddress): ScVal; + + static scvLedgerKeyContractInstance(): ScVal; + + static scvLedgerKeyNonce(value: ScNonceKey): ScVal; + + static scvContractInstance(value: ScContractInstance): ScVal; + + value(): + | boolean + | ScError + | number + | number + | Uint64 + | Int64 + | TimePoint + | Duration + | UInt128Parts + | Int128Parts + | UInt256Parts + | Int256Parts + | Buffer + | string + | Buffer + | string + | Buffer + | null + | ScVal[] + | null + | ScMapEntry[] + | ScAddress + | ScNonceKey + | ScContractInstance + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScVal; + + static write(value: ScVal, io: Buffer): void; + + static isValid(value: ScVal): boolean; + + static toXDR(value: ScVal): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScVal; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScVal; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScEnvMetaEntry { + switch(): ScEnvMetaKind; + + interfaceVersion( + value?: ScEnvMetaEntryInterfaceVersion, + ): ScEnvMetaEntryInterfaceVersion; + + static scEnvMetaKindInterfaceVersion( + value: ScEnvMetaEntryInterfaceVersion, + ): ScEnvMetaEntry; + + value(): ScEnvMetaEntryInterfaceVersion; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScEnvMetaEntry; + + static write(value: ScEnvMetaEntry, io: Buffer): void; + + static isValid(value: ScEnvMetaEntry): boolean; + + static toXDR(value: ScEnvMetaEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScEnvMetaEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScEnvMetaEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScMetaEntry { + switch(): ScMetaKind; + + v0(value?: ScMetaV0): ScMetaV0; + + static scMetaV0(value: ScMetaV0): ScMetaEntry; + + value(): ScMetaV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScMetaEntry; + + static write(value: ScMetaEntry, io: Buffer): void; + + static isValid(value: ScMetaEntry): boolean; + + static toXDR(value: ScMetaEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScMetaEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScMetaEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecTypeDef { + switch(): ScSpecType; + + option(value?: ScSpecTypeOption): ScSpecTypeOption; + + result(value?: ScSpecTypeResult): ScSpecTypeResult; + + vec(value?: ScSpecTypeVec): ScSpecTypeVec; + + map(value?: ScSpecTypeMap): ScSpecTypeMap; + + tuple(value?: ScSpecTypeTuple): ScSpecTypeTuple; + + bytesN(value?: ScSpecTypeBytesN): ScSpecTypeBytesN; + + udt(value?: ScSpecTypeUdt): ScSpecTypeUdt; + + static scSpecTypeVal(): ScSpecTypeDef; + + static scSpecTypeBool(): ScSpecTypeDef; + + static scSpecTypeVoid(): ScSpecTypeDef; + + static scSpecTypeError(): ScSpecTypeDef; + + static scSpecTypeU32(): ScSpecTypeDef; + + static scSpecTypeI32(): ScSpecTypeDef; + + static scSpecTypeU64(): ScSpecTypeDef; + + static scSpecTypeI64(): ScSpecTypeDef; + + static scSpecTypeTimepoint(): ScSpecTypeDef; + + static scSpecTypeDuration(): ScSpecTypeDef; + + static scSpecTypeU128(): ScSpecTypeDef; + + static scSpecTypeI128(): ScSpecTypeDef; + + static scSpecTypeU256(): ScSpecTypeDef; + + static scSpecTypeI256(): ScSpecTypeDef; + + static scSpecTypeBytes(): ScSpecTypeDef; + + static scSpecTypeString(): ScSpecTypeDef; + + static scSpecTypeSymbol(): ScSpecTypeDef; + + static scSpecTypeAddress(): ScSpecTypeDef; + + static scSpecTypeOption(value: ScSpecTypeOption): ScSpecTypeDef; + + static scSpecTypeResult(value: ScSpecTypeResult): ScSpecTypeDef; + + static scSpecTypeVec(value: ScSpecTypeVec): ScSpecTypeDef; + + static scSpecTypeMap(value: ScSpecTypeMap): ScSpecTypeDef; + + static scSpecTypeTuple(value: ScSpecTypeTuple): ScSpecTypeDef; + + static scSpecTypeBytesN(value: ScSpecTypeBytesN): ScSpecTypeDef; + + static scSpecTypeUdt(value: ScSpecTypeUdt): ScSpecTypeDef; + + value(): + | ScSpecTypeOption + | ScSpecTypeResult + | ScSpecTypeVec + | ScSpecTypeMap + | ScSpecTypeTuple + | ScSpecTypeBytesN + | ScSpecTypeUdt + | void; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecTypeDef; + + static write(value: ScSpecTypeDef, io: Buffer): void; + + static isValid(value: ScSpecTypeDef): boolean; + + static toXDR(value: ScSpecTypeDef): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecTypeDef; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecTypeDef; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecUdtUnionCaseV0 { + switch(): ScSpecUdtUnionCaseV0Kind; + + voidCase(value?: ScSpecUdtUnionCaseVoidV0): ScSpecUdtUnionCaseVoidV0; + + tupleCase(value?: ScSpecUdtUnionCaseTupleV0): ScSpecUdtUnionCaseTupleV0; + + static scSpecUdtUnionCaseVoidV0( + value: ScSpecUdtUnionCaseVoidV0, + ): ScSpecUdtUnionCaseV0; + + static scSpecUdtUnionCaseTupleV0( + value: ScSpecUdtUnionCaseTupleV0, + ): ScSpecUdtUnionCaseV0; + + value(): ScSpecUdtUnionCaseVoidV0 | ScSpecUdtUnionCaseTupleV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecUdtUnionCaseV0; + + static write(value: ScSpecUdtUnionCaseV0, io: Buffer): void; + + static isValid(value: ScSpecUdtUnionCaseV0): boolean; + + static toXDR(value: ScSpecUdtUnionCaseV0): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecUdtUnionCaseV0; + + static fromXDR( + input: string, + format: 'hex' | 'base64', + ): ScSpecUdtUnionCaseV0; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ScSpecEntry { + switch(): ScSpecEntryKind; + + functionV0(value?: ScSpecFunctionV0): ScSpecFunctionV0; + + udtStructV0(value?: ScSpecUdtStructV0): ScSpecUdtStructV0; + + udtUnionV0(value?: ScSpecUdtUnionV0): ScSpecUdtUnionV0; + + udtEnumV0(value?: ScSpecUdtEnumV0): ScSpecUdtEnumV0; + + udtErrorEnumV0(value?: ScSpecUdtErrorEnumV0): ScSpecUdtErrorEnumV0; + + static scSpecEntryFunctionV0(value: ScSpecFunctionV0): ScSpecEntry; + + static scSpecEntryUdtStructV0(value: ScSpecUdtStructV0): ScSpecEntry; + + static scSpecEntryUdtUnionV0(value: ScSpecUdtUnionV0): ScSpecEntry; + + static scSpecEntryUdtEnumV0(value: ScSpecUdtEnumV0): ScSpecEntry; + + static scSpecEntryUdtErrorEnumV0(value: ScSpecUdtErrorEnumV0): ScSpecEntry; + + value(): + | ScSpecFunctionV0 + | ScSpecUdtStructV0 + | ScSpecUdtUnionV0 + | ScSpecUdtEnumV0 + | ScSpecUdtErrorEnumV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ScSpecEntry; + + static write(value: ScSpecEntry, io: Buffer): void; + + static isValid(value: ScSpecEntry): boolean; + + static toXDR(value: ScSpecEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ScSpecEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ScSpecEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } + + class ConfigSettingEntry { + switch(): ConfigSettingId; + + contractMaxSizeBytes(value?: number): number; + + contractCompute( + value?: ConfigSettingContractComputeV0, + ): ConfigSettingContractComputeV0; + + contractLedgerCost( + value?: ConfigSettingContractLedgerCostV0, + ): ConfigSettingContractLedgerCostV0; + + contractHistoricalData( + value?: ConfigSettingContractHistoricalDataV0, + ): ConfigSettingContractHistoricalDataV0; + + contractEvents( + value?: ConfigSettingContractEventsV0, + ): ConfigSettingContractEventsV0; + + contractBandwidth( + value?: ConfigSettingContractBandwidthV0, + ): ConfigSettingContractBandwidthV0; + + contractCostParamsCpuInsns( + value?: ContractCostParamEntry[], + ): ContractCostParamEntry[]; + + contractCostParamsMemBytes( + value?: ContractCostParamEntry[], + ): ContractCostParamEntry[]; + + contractDataKeySizeBytes(value?: number): number; + + contractDataEntrySizeBytes(value?: number): number; + + stateArchivalSettings(value?: StateArchivalSettings): StateArchivalSettings; + + contractExecutionLanes( + value?: ConfigSettingContractExecutionLanesV0, + ): ConfigSettingContractExecutionLanesV0; + + bucketListSizeWindow(value?: Uint64[]): Uint64[]; + + evictionIterator(value?: EvictionIterator): EvictionIterator; + + contractParallelCompute( + value?: ConfigSettingContractParallelComputeV0, + ): ConfigSettingContractParallelComputeV0; + + static configSettingContractMaxSizeBytes(value: number): ConfigSettingEntry; + + static configSettingContractComputeV0( + value: ConfigSettingContractComputeV0, + ): ConfigSettingEntry; + + static configSettingContractLedgerCostV0( + value: ConfigSettingContractLedgerCostV0, + ): ConfigSettingEntry; + + static configSettingContractHistoricalDataV0( + value: ConfigSettingContractHistoricalDataV0, + ): ConfigSettingEntry; + + static configSettingContractEventsV0( + value: ConfigSettingContractEventsV0, + ): ConfigSettingEntry; + + static configSettingContractBandwidthV0( + value: ConfigSettingContractBandwidthV0, + ): ConfigSettingEntry; + + static configSettingContractCostParamsCpuInstructions( + value: ContractCostParamEntry[], + ): ConfigSettingEntry; + + static configSettingContractCostParamsMemoryBytes( + value: ContractCostParamEntry[], + ): ConfigSettingEntry; + + static configSettingContractDataKeySizeBytes( + value: number, + ): ConfigSettingEntry; + + static configSettingContractDataEntrySizeBytes( + value: number, + ): ConfigSettingEntry; + + static configSettingStateArchival( + value: StateArchivalSettings, + ): ConfigSettingEntry; + + static configSettingContractExecutionLanes( + value: ConfigSettingContractExecutionLanesV0, + ): ConfigSettingEntry; + + static configSettingBucketlistSizeWindow( + value: Uint64[], + ): ConfigSettingEntry; + + static configSettingEvictionIterator( + value: EvictionIterator, + ): ConfigSettingEntry; + + static configSettingContractParallelComputeV0( + value: ConfigSettingContractParallelComputeV0, + ): ConfigSettingEntry; + + value(): + | number + | ConfigSettingContractComputeV0 + | ConfigSettingContractLedgerCostV0 + | ConfigSettingContractHistoricalDataV0 + | ConfigSettingContractEventsV0 + | ConfigSettingContractBandwidthV0 + | ContractCostParamEntry[] + | ContractCostParamEntry[] + | number + | number + | StateArchivalSettings + | ConfigSettingContractExecutionLanesV0 + | Uint64[] + | EvictionIterator + | ConfigSettingContractParallelComputeV0; + + toXDR(format?: 'raw'): Buffer; + + toXDR(format: 'hex' | 'base64'): string; + + static read(io: Buffer): ConfigSettingEntry; + + static write(value: ConfigSettingEntry, io: Buffer): void; + + static isValid(value: ConfigSettingEntry): boolean; + + static toXDR(value: ConfigSettingEntry): Buffer; + + static fromXDR(input: Buffer, format?: 'raw'): ConfigSettingEntry; + + static fromXDR(input: string, format: 'hex' | 'base64'): ConfigSettingEntry; + + static validateXDR(input: Buffer, format?: 'raw'): boolean; + + static validateXDR(input: string, format: 'hex' | 'base64'): boolean; + } +} diff --git a/node_modules/@stellar/stellar-base/types/xdr.d.ts b/node_modules/@stellar/stellar-base/types/xdr.d.ts new file mode 100644 index 00000000..2eb8791b --- /dev/null +++ b/node_modules/@stellar/stellar-base/types/xdr.d.ts @@ -0,0 +1 @@ +export * from './curr'; diff --git a/node_modules/asynckit/LICENSE b/node_modules/asynckit/LICENSE new file mode 100644 index 00000000..c9eca5dd --- /dev/null +++ b/node_modules/asynckit/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Alex Indigo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/asynckit/README.md b/node_modules/asynckit/README.md new file mode 100644 index 00000000..ddcc7e6b --- /dev/null +++ b/node_modules/asynckit/README.md @@ -0,0 +1,233 @@ +# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit) + +Minimal async jobs utility library, with streams support. + +[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit) + +[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master) +[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit) +[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit) + + + +AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. +Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. + +It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. + +| compression | size | +| :----------------- | -------: | +| asynckit.js | 12.34 kB | +| asynckit.min.js | 4.11 kB | +| asynckit.min.js.gz | 1.47 kB | + + +## Install + +```sh +$ npm install --save asynckit +``` + +## Examples + +### Parallel Jobs + +Runs iterator over provided array in parallel. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will terminate rest of the active jobs (if abort function is provided) +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var parallel = require('asynckit').parallel + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , target = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// async job accepts one element from the array +// and a callback function +function asyncJob(item, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var parallel = require('asynckit/parallel') + , assert = require('assert') + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] + , target = [] + , keys = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); + assert.deepEqual(keys, expectedKeys); +}); + +// supports full value, key, callback (shortcut) interface +function asyncJob(item, key, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + keys.push(key); + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). + +### Serial Jobs + +Runs iterator over provided array sequentially. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will not proceed to the rest of the items in the list +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var serial = require('asynckit/serial') + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// extended interface (item, key, callback) +// also supported for arrays +function asyncJob(item, key, cb) +{ + target.push(key); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var serial = require('asynckit').serial + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , target = [] + ; + + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// shortcut interface (item, callback) +// works for object as well as for the arrays +function asyncJob(item, cb) +{ + target.push(item); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). + +_Note: Since _object_ is an _unordered_ collection of properties, +it may produce unexpected results with sequential iterations. +Whenever order of the jobs' execution is important please use `serialOrdered` method._ + +### Ordered Serial Iterations + +TBD + +For example [compare-property](compare-property) package. + +### Streaming interface + +TBD + +## Want to Know More? + +More examples can be found in [test folder](test/). + +Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. + +## License + +AsyncKit is licensed under the MIT license. diff --git a/node_modules/asynckit/bench.js b/node_modules/asynckit/bench.js new file mode 100644 index 00000000..c612f1a5 --- /dev/null +++ b/node_modules/asynckit/bench.js @@ -0,0 +1,76 @@ +/* eslint no-console: "off" */ + +var asynckit = require('./') + , async = require('async') + , assert = require('assert') + , expected = 0 + ; + +var Benchmark = require('benchmark'); +var suite = new Benchmark.Suite; + +var source = []; +for (var z = 1; z < 100; z++) +{ + source.push(z); + expected += z; +} + +suite +// add tests + +.add('async.map', function(deferred) +{ + var total = 0; + + async.map(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +.add('asynckit.parallel', function(deferred) +{ + var total = 0; + + asynckit.parallel(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +// add listeners +.on('cycle', function(ev) +{ + console.log(String(ev.target)); +}) +.on('complete', function() +{ + console.log('Fastest is ' + this.filter('fastest').map('name')); +}) +// run async +.run({ 'async': true }); diff --git a/node_modules/asynckit/index.js b/node_modules/asynckit/index.js new file mode 100644 index 00000000..455f9454 --- /dev/null +++ b/node_modules/asynckit/index.js @@ -0,0 +1,6 @@ +module.exports = +{ + parallel : require('./parallel.js'), + serial : require('./serial.js'), + serialOrdered : require('./serialOrdered.js') +}; diff --git a/node_modules/asynckit/lib/abort.js b/node_modules/asynckit/lib/abort.js new file mode 100644 index 00000000..114367e5 --- /dev/null +++ b/node_modules/asynckit/lib/abort.js @@ -0,0 +1,29 @@ +// API +module.exports = abort; + +/** + * Aborts leftover active jobs + * + * @param {object} state - current state object + */ +function abort(state) +{ + Object.keys(state.jobs).forEach(clean.bind(state)); + + // reset leftover jobs + state.jobs = {}; +} + +/** + * Cleans up leftover job by invoking abort function for the provided job id + * + * @this state + * @param {string|number} key - job id to abort + */ +function clean(key) +{ + if (typeof this.jobs[key] == 'function') + { + this.jobs[key](); + } +} diff --git a/node_modules/asynckit/lib/async.js b/node_modules/asynckit/lib/async.js new file mode 100644 index 00000000..7f1288a4 --- /dev/null +++ b/node_modules/asynckit/lib/async.js @@ -0,0 +1,34 @@ +var defer = require('./defer.js'); + +// API +module.exports = async; + +/** + * Runs provided callback asynchronously + * even if callback itself is not + * + * @param {function} callback - callback to invoke + * @returns {function} - augmented callback + */ +function async(callback) +{ + var isAsync = false; + + // check if async happened + defer(function() { isAsync = true; }); + + return function async_callback(err, result) + { + if (isAsync) + { + callback(err, result); + } + else + { + defer(function nextTick_callback() + { + callback(err, result); + }); + } + }; +} diff --git a/node_modules/asynckit/lib/defer.js b/node_modules/asynckit/lib/defer.js new file mode 100644 index 00000000..b67110c7 --- /dev/null +++ b/node_modules/asynckit/lib/defer.js @@ -0,0 +1,26 @@ +module.exports = defer; + +/** + * Runs provided function on next iteration of the event loop + * + * @param {function} fn - function to run + */ +function defer(fn) +{ + var nextTick = typeof setImmediate == 'function' + ? setImmediate + : ( + typeof process == 'object' && typeof process.nextTick == 'function' + ? process.nextTick + : null + ); + + if (nextTick) + { + nextTick(fn); + } + else + { + setTimeout(fn, 0); + } +} diff --git a/node_modules/asynckit/lib/iterate.js b/node_modules/asynckit/lib/iterate.js new file mode 100644 index 00000000..5d2839a5 --- /dev/null +++ b/node_modules/asynckit/lib/iterate.js @@ -0,0 +1,75 @@ +var async = require('./async.js') + , abort = require('./abort.js') + ; + +// API +module.exports = iterate; + +/** + * Iterates over each job object + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {object} state - current job status + * @param {function} callback - invoked when all elements processed + */ +function iterate(list, iterator, state, callback) +{ + // store current index + var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; + + state.jobs[key] = runJob(iterator, key, list[key], function(error, output) + { + // don't repeat yourself + // skip secondary callbacks + if (!(key in state.jobs)) + { + return; + } + + // clean up jobs + delete state.jobs[key]; + + if (error) + { + // don't process rest of the results + // stop still active jobs + // and reset the list + abort(state); + } + else + { + state.results[key] = output; + } + + // return salvaged results + callback(error, state.results); + }); +} + +/** + * Runs iterator over provided job element + * + * @param {function} iterator - iterator to invoke + * @param {string|number} key - key/index of the element in the list of jobs + * @param {mixed} item - job description + * @param {function} callback - invoked after iterator is done with the job + * @returns {function|mixed} - job abort function or something else + */ +function runJob(iterator, key, item, callback) +{ + var aborter; + + // allow shortcut if iterator expects only two arguments + if (iterator.length == 2) + { + aborter = iterator(item, async(callback)); + } + // otherwise go with full three arguments + else + { + aborter = iterator(item, key, async(callback)); + } + + return aborter; +} diff --git a/node_modules/asynckit/lib/readable_asynckit.js b/node_modules/asynckit/lib/readable_asynckit.js new file mode 100644 index 00000000..78ad240f --- /dev/null +++ b/node_modules/asynckit/lib/readable_asynckit.js @@ -0,0 +1,91 @@ +var streamify = require('./streamify.js') + , defer = require('./defer.js') + ; + +// API +module.exports = ReadableAsyncKit; + +/** + * Base constructor for all streams + * used to hold properties/methods + */ +function ReadableAsyncKit() +{ + ReadableAsyncKit.super_.apply(this, arguments); + + // list of active jobs + this.jobs = {}; + + // add stream methods + this.destroy = destroy; + this._start = _start; + this._read = _read; +} + +/** + * Destroys readable stream, + * by aborting outstanding jobs + * + * @returns {void} + */ +function destroy() +{ + if (this.destroyed) + { + return; + } + + this.destroyed = true; + + if (typeof this.terminator == 'function') + { + this.terminator(); + } +} + +/** + * Starts provided jobs in async manner + * + * @private + */ +function _start() +{ + // first argument – runner function + var runner = arguments[0] + // take away first argument + , args = Array.prototype.slice.call(arguments, 1) + // second argument - input data + , input = args[0] + // last argument - result callback + , endCb = streamify.callback.call(this, args[args.length - 1]) + ; + + args[args.length - 1] = endCb; + // third argument - iterator + args[1] = streamify.iterator.call(this, args[1]); + + // allow time for proper setup + defer(function() + { + if (!this.destroyed) + { + this.terminator = runner.apply(null, args); + } + else + { + endCb(null, Array.isArray(input) ? [] : {}); + } + }.bind(this)); +} + + +/** + * Implement _read to comply with Readable streams + * Doesn't really make sense for flowing object mode + * + * @private + */ +function _read() +{ + +} diff --git a/node_modules/asynckit/lib/readable_parallel.js b/node_modules/asynckit/lib/readable_parallel.js new file mode 100644 index 00000000..5d2929f7 --- /dev/null +++ b/node_modules/asynckit/lib/readable_parallel.js @@ -0,0 +1,25 @@ +var parallel = require('../parallel.js'); + +// API +module.exports = ReadableParallel; + +/** + * Streaming wrapper to `asynckit.parallel` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableParallel(list, iterator, callback) +{ + if (!(this instanceof ReadableParallel)) + { + return new ReadableParallel(list, iterator, callback); + } + + // turn on object mode + ReadableParallel.super_.call(this, {objectMode: true}); + + this._start(parallel, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial.js b/node_modules/asynckit/lib/readable_serial.js new file mode 100644 index 00000000..78226982 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial.js @@ -0,0 +1,25 @@ +var serial = require('../serial.js'); + +// API +module.exports = ReadableSerial; + +/** + * Streaming wrapper to `asynckit.serial` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerial(list, iterator, callback) +{ + if (!(this instanceof ReadableSerial)) + { + return new ReadableSerial(list, iterator, callback); + } + + // turn on object mode + ReadableSerial.super_.call(this, {objectMode: true}); + + this._start(serial, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial_ordered.js b/node_modules/asynckit/lib/readable_serial_ordered.js new file mode 100644 index 00000000..3de89c47 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial_ordered.js @@ -0,0 +1,29 @@ +var serialOrdered = require('../serialOrdered.js'); + +// API +module.exports = ReadableSerialOrdered; +// expose sort helpers +module.exports.ascending = serialOrdered.ascending; +module.exports.descending = serialOrdered.descending; + +/** + * Streaming wrapper to `asynckit.serialOrdered` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerialOrdered(list, iterator, sortMethod, callback) +{ + if (!(this instanceof ReadableSerialOrdered)) + { + return new ReadableSerialOrdered(list, iterator, sortMethod, callback); + } + + // turn on object mode + ReadableSerialOrdered.super_.call(this, {objectMode: true}); + + this._start(serialOrdered, list, iterator, sortMethod, callback); +} diff --git a/node_modules/asynckit/lib/state.js b/node_modules/asynckit/lib/state.js new file mode 100644 index 00000000..cbea7ad8 --- /dev/null +++ b/node_modules/asynckit/lib/state.js @@ -0,0 +1,37 @@ +// API +module.exports = state; + +/** + * Creates initial state object + * for iteration over list + * + * @param {array|object} list - list to iterate over + * @param {function|null} sortMethod - function to use for keys sort, + * or `null` to keep them as is + * @returns {object} - initial state object + */ +function state(list, sortMethod) +{ + var isNamedList = !Array.isArray(list) + , initState = + { + index : 0, + keyedList: isNamedList || sortMethod ? Object.keys(list) : null, + jobs : {}, + results : isNamedList ? {} : [], + size : isNamedList ? Object.keys(list).length : list.length + } + ; + + if (sortMethod) + { + // sort array keys based on it's values + // sort object's keys just on own merit + initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) + { + return sortMethod(list[a], list[b]); + }); + } + + return initState; +} diff --git a/node_modules/asynckit/lib/streamify.js b/node_modules/asynckit/lib/streamify.js new file mode 100644 index 00000000..f56a1c92 --- /dev/null +++ b/node_modules/asynckit/lib/streamify.js @@ -0,0 +1,141 @@ +var async = require('./async.js'); + +// API +module.exports = { + iterator: wrapIterator, + callback: wrapCallback +}; + +/** + * Wraps iterators with long signature + * + * @this ReadableAsyncKit# + * @param {function} iterator - function to wrap + * @returns {function} - wrapped function + */ +function wrapIterator(iterator) +{ + var stream = this; + + return function(item, key, cb) + { + var aborter + , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) + ; + + stream.jobs[key] = wrappedCb; + + // it's either shortcut (item, cb) + if (iterator.length == 2) + { + aborter = iterator(item, wrappedCb); + } + // or long format (item, key, cb) + else + { + aborter = iterator(item, key, wrappedCb); + } + + return aborter; + }; +} + +/** + * Wraps provided callback function + * allowing to execute snitch function before + * real callback + * + * @this ReadableAsyncKit# + * @param {function} callback - function to wrap + * @returns {function} - wrapped function + */ +function wrapCallback(callback) +{ + var stream = this; + + var wrapped = function(error, result) + { + return finisher.call(stream, error, result, callback); + }; + + return wrapped; +} + +/** + * Wraps provided iterator callback function + * makes sure snitch only called once, + * but passes secondary calls to the original callback + * + * @this ReadableAsyncKit# + * @param {function} callback - callback to wrap + * @param {number|string} key - iteration key + * @returns {function} wrapped callback + */ +function wrapIteratorCallback(callback, key) +{ + var stream = this; + + return function(error, output) + { + // don't repeat yourself + if (!(key in stream.jobs)) + { + callback(error, output); + return; + } + + // clean up jobs + delete stream.jobs[key]; + + return streamer.call(stream, error, {key: key, value: output}, callback); + }; +} + +/** + * Stream wrapper for iterator callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects iterator results + */ +function streamer(error, output, callback) +{ + if (error && !this.error) + { + this.error = error; + this.pause(); + this.emit('error', error); + // send back value only, as expected + callback(error, output && output.value); + return; + } + + // stream stuff + this.push(output); + + // back to original track + // send back value only, as expected + callback(error, output && output.value); +} + +/** + * Stream wrapper for finishing callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects final results + */ +function finisher(error, output, callback) +{ + // signal end of the stream + // only for successfully finished streams + if (!error) + { + this.push(null); + } + + // back to original track + callback(error, output); +} diff --git a/node_modules/asynckit/lib/terminator.js b/node_modules/asynckit/lib/terminator.js new file mode 100644 index 00000000..d6eb9921 --- /dev/null +++ b/node_modules/asynckit/lib/terminator.js @@ -0,0 +1,29 @@ +var abort = require('./abort.js') + , async = require('./async.js') + ; + +// API +module.exports = terminator; + +/** + * Terminates jobs in the attached state context + * + * @this AsyncKitState# + * @param {function} callback - final callback to invoke after termination + */ +function terminator(callback) +{ + if (!Object.keys(this.jobs).length) + { + return; + } + + // fast forward iteration index + this.index = this.size; + + // abort jobs + abort(this); + + // send back results we have so far + async(callback)(null, this.results); +} diff --git a/node_modules/asynckit/package.json b/node_modules/asynckit/package.json new file mode 100644 index 00000000..51147d65 --- /dev/null +++ b/node_modules/asynckit/package.json @@ -0,0 +1,63 @@ +{ + "name": "asynckit", + "version": "0.4.0", + "description": "Minimal async jobs utility library, with streams support", + "main": "index.js", + "scripts": { + "clean": "rimraf coverage", + "lint": "eslint *.js lib/*.js test/*.js", + "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", + "win-test": "tape test/test-*.js", + "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", + "report": "istanbul report", + "size": "browserify index.js | size-table asynckit", + "debug": "tape test/test-*.js" + }, + "pre-commit": [ + "clean", + "lint", + "test", + "browser", + "report", + "size" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/alexindigo/asynckit.git" + }, + "keywords": [ + "async", + "jobs", + "parallel", + "serial", + "iterator", + "array", + "object", + "stream", + "destroy", + "terminate", + "abort" + ], + "author": "Alex Indigo ", + "license": "MIT", + "bugs": { + "url": "https://github.com/alexindigo/asynckit/issues" + }, + "homepage": "https://github.com/alexindigo/asynckit#readme", + "devDependencies": { + "browserify": "^13.0.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^2.11.9", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.7", + "pre-commit": "^1.1.3", + "reamde": "^1.1.0", + "rimraf": "^2.5.2", + "size-table": "^0.2.0", + "tap-spec": "^4.1.1", + "tape": "^4.5.1" + }, + "dependencies": {} +} diff --git a/node_modules/asynckit/parallel.js b/node_modules/asynckit/parallel.js new file mode 100644 index 00000000..3c50344d --- /dev/null +++ b/node_modules/asynckit/parallel.js @@ -0,0 +1,43 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = parallel; + +/** + * Runs iterator over provided array elements in parallel + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function parallel(list, iterator, callback) +{ + var state = initState(list); + + while (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, function(error, result) + { + if (error) + { + callback(error, result); + return; + } + + // looks like it's the last one + if (Object.keys(state.jobs).length === 0) + { + callback(null, state.results); + return; + } + }); + + state.index++; + } + + return terminator.bind(state, callback); +} diff --git a/node_modules/asynckit/serial.js b/node_modules/asynckit/serial.js new file mode 100644 index 00000000..6cd949a6 --- /dev/null +++ b/node_modules/asynckit/serial.js @@ -0,0 +1,17 @@ +var serialOrdered = require('./serialOrdered.js'); + +// Public API +module.exports = serial; + +/** + * Runs iterator over provided array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serial(list, iterator, callback) +{ + return serialOrdered(list, iterator, null, callback); +} diff --git a/node_modules/asynckit/serialOrdered.js b/node_modules/asynckit/serialOrdered.js new file mode 100644 index 00000000..607eafea --- /dev/null +++ b/node_modules/asynckit/serialOrdered.js @@ -0,0 +1,75 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = serialOrdered; +// sorting helpers +module.exports.ascending = ascending; +module.exports.descending = descending; + +/** + * Runs iterator over provided sorted array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serialOrdered(list, iterator, sortMethod, callback) +{ + var state = initState(list, sortMethod); + + iterate(list, iterator, state, function iteratorHandler(error, result) + { + if (error) + { + callback(error, result); + return; + } + + state.index++; + + // are we there yet? + if (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, iteratorHandler); + return; + } + + // done here + callback(null, state.results); + }); + + return terminator.bind(state, callback); +} + +/* + * -- Sort methods + */ + +/** + * sort helper to sort array elements in ascending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function ascending(a, b) +{ + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * sort helper to sort array elements in descending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function descending(a, b) +{ + return -1 * ascending(a, b); +} diff --git a/node_modules/asynckit/stream.js b/node_modules/asynckit/stream.js new file mode 100644 index 00000000..d43465f9 --- /dev/null +++ b/node_modules/asynckit/stream.js @@ -0,0 +1,21 @@ +var inherits = require('util').inherits + , Readable = require('stream').Readable + , ReadableAsyncKit = require('./lib/readable_asynckit.js') + , ReadableParallel = require('./lib/readable_parallel.js') + , ReadableSerial = require('./lib/readable_serial.js') + , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') + ; + +// API +module.exports = +{ + parallel : ReadableParallel, + serial : ReadableSerial, + serialOrdered : ReadableSerialOrdered, +}; + +inherits(ReadableAsyncKit, Readable); + +inherits(ReadableParallel, ReadableAsyncKit); +inherits(ReadableSerial, ReadableAsyncKit); +inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/node_modules/available-typed-arrays/.eslintrc b/node_modules/available-typed-arrays/.eslintrc new file mode 100644 index 00000000..3b5d9e90 --- /dev/null +++ b/node_modules/available-typed-arrays/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/available-typed-arrays/.github/FUNDING.yml b/node_modules/available-typed-arrays/.github/FUNDING.yml new file mode 100644 index 00000000..14abc725 --- /dev/null +++ b/node_modules/available-typed-arrays/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/available-typed-arrays +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/available-typed-arrays/.nycrc b/node_modules/available-typed-arrays/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/node_modules/available-typed-arrays/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/available-typed-arrays/CHANGELOG.md b/node_modules/available-typed-arrays/CHANGELOG.md new file mode 100644 index 00000000..f5ade9a2 --- /dev/null +++ b/node_modules/available-typed-arrays/CHANGELOG.md @@ -0,0 +1,100 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.7](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.6...v1.0.7) - 2024-02-19 + +### Commits + +- [Refactor] use `possible-typed-array-names` [`ac86abf`](https://github.com/inspect-js/available-typed-arrays/commit/ac86abfd64c4b633fd6523cc4193f1913fd22666) + +## [v1.0.6](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.5...v1.0.6) - 2024-01-31 + +### Commits + +- [actions] reuse common workflows [`1850353`](https://github.com/inspect-js/available-typed-arrays/commit/1850353ded0ceb4d02d9d05649da5b7f3a28c89f) +- [meta] use `npmignore` to autogenerate an npmignore file [`5c7de12`](https://github.com/inspect-js/available-typed-arrays/commit/5c7de120d22a5c35f703ba3f0b5287e5c5f38af6) +- [patch] add types [`fcfb0ea`](https://github.com/inspect-js/available-typed-arrays/commit/fcfb0ea21c9dc8459d68f8bb26679abb0bec71ca) +- [actions] update codecov uploader [`d844945`](https://github.com/inspect-js/available-typed-arrays/commit/d84494596881a298aabde9bd87e538ce10c6cd01) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.every`, `safe-publish-latest`, `tape` [`a2be6f4`](https://github.com/inspect-js/available-typed-arrays/commit/a2be6f482010e920692d8f65fe1f193dbb73004d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`b283a3e`](https://github.com/inspect-js/available-typed-arrays/commit/b283a3e2176fbe8e431a27e20df21c831f216d5a) +- [actions] update rebase action to use reusable workflow [`0ad1f2d`](https://github.com/inspect-js/available-typed-arrays/commit/0ad1f2d82b11713ee48d9b37cb73fcc891bd9f4a) +- [Dev Deps] update `@ljharb/eslint-config`, `array.prototype.every`, `aud`, `tape` [`cd36e81`](https://github.com/inspect-js/available-typed-arrays/commit/cd36e8131076dd4e67a88b259f829067fa56c139) +- [meta] simplify "exports" [`f696e5f`](https://github.com/inspect-js/available-typed-arrays/commit/f696e5ff9ded838e192ade4e8550a890c4f35eb0) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`bf20080`](https://github.com/inspect-js/available-typed-arrays/commit/bf200809aea3107b31fc8817122c693e099be30e) + +## [v1.0.5](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.4...v1.0.5) - 2021-08-30 + +### Fixed + +- [Refactor] use `globalThis` if available [`#12`](https://github.com/inspect-js/available-typed-arrays/issues/12) + +### Commits + +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`1199790`](https://github.com/inspect-js/available-typed-arrays/commit/1199790ab5841517ad04827fab3f135d2dc5cfb7) + +## [v1.0.4](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.3...v1.0.4) - 2021-05-25 + +### Commits + +- [Refactor] Remove `array.prototype.filter` dependency [`f39c90e`](https://github.com/inspect-js/available-typed-arrays/commit/f39c90ecb1907de28ee2d3577b7da37ae12aac56) +- [Dev Deps] update `eslint`, `auto-changelog` [`b2e3a03`](https://github.com/inspect-js/available-typed-arrays/commit/b2e3a035e8cd3ddfd7b565249e1651c6419a34d0) +- [meta] create `FUNDING.yml` [`8c0e758`](https://github.com/inspect-js/available-typed-arrays/commit/8c0e758c6ec80adbb3770554653cdc3aa16beb55) +- [Tests] fix harmony test matrix [`ef96549`](https://github.com/inspect-js/available-typed-arrays/commit/ef96549df171776267529413240a2219cb59d5ce) +- [meta] add `sideEffects` flag [`288cca0`](https://github.com/inspect-js/available-typed-arrays/commit/288cca0fbd214bec706447851bb8bccc4b899a48) + +## [v1.0.3](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.2...v1.0.3) - 2021-05-19 + +### Commits + +- [Tests] migrate tests to Github Actions [`3ef082c`](https://github.com/inspect-js/available-typed-arrays/commit/3ef082caaa153b49f4c37c85bbd5c4b13fe4f638) +- [meta] do not publish github action workflow files [`fd95ffd`](https://github.com/inspect-js/available-typed-arrays/commit/fd95ffdaca759eca81cb4c5d5772ee863dfea501) +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`eb6bd65`](https://github.com/inspect-js/available-typed-arrays/commit/eb6bd659a31c92a6a178c71a89fe0d5261413e6c) +- [Tests] run `nyc` on all tests [`636c946`](https://github.com/inspect-js/available-typed-arrays/commit/636c94657b532599ef90a214aaa12639d11b0161) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`70a3b61`](https://github.com/inspect-js/available-typed-arrays/commit/70a3b61367b318fb883c2f35b8f2d539849a23b6) +- [actions] add "Allow Edits" workflow [`bd09c45`](https://github.com/inspect-js/available-typed-arrays/commit/bd09c45299e396fa5bbd5be4c58b1aedcb372a82) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.every`, `aud`, `tape` [`8f97523`](https://github.com/inspect-js/available-typed-arrays/commit/8f9752308390a79068cd431436bbfd77bca15647) +- [readme] fix URLs [`75418e2`](https://github.com/inspect-js/available-typed-arrays/commit/75418e20b57f4ad5e65d8c2e1864efd14eaa2e65) +- [readme] add actions and codecov badges [`4a8bc30`](https://github.com/inspect-js/available-typed-arrays/commit/4a8bc30af2ce1f48e2b28ab3db5be9589bd6f2d0) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud` [`65198ac`](https://github.com/inspect-js/available-typed-arrays/commit/65198ace335a013ef49b6bd722bc80bbbc6be784) +- [actions] update workflows [`7f816eb`](https://github.com/inspect-js/available-typed-arrays/commit/7f816eb231131e53ced2572ba6c6c6a00f975789) +- [Refactor] use `array.prototype.filter` instead of `array-filter` [`2dd1038`](https://github.com/inspect-js/available-typed-arrays/commit/2dd1038d71ce48b5650687691cf8fe09795a6d30) +- [actions] switch Automatic Rease workflow to `pull_request_target` event [`9b45e91`](https://github.com/inspect-js/available-typed-arrays/commit/9b45e914fcb08bdaaaa0166b41716e51f400d1c6) +- [Dev Deps] update `auto-changelog`, `tape` [`0003a5b`](https://github.com/inspect-js/available-typed-arrays/commit/0003a5b122a0724db5499c114104eeeb396b2f67) +- [meta] use `prepublishOnly` script for npm 7+ [`d884dd1`](https://github.com/inspect-js/available-typed-arrays/commit/d884dd1c1117411f35d9fbc07f513a1a85ccdead) +- [readme] remove travis badge [`9da2b3c`](https://github.com/inspect-js/available-typed-arrays/commit/9da2b3c29706340fada995137aba12cfae4d6f37) +- [Dev Deps] update `auto-changelog`; add `aud` [`41b1336`](https://github.com/inspect-js/available-typed-arrays/commit/41b13369c71b0e3e57b9de0f4fb1e4d67950d74a) +- [Tests] only audit prod deps [`2571826`](https://github.com/inspect-js/available-typed-arrays/commit/2571826a5d121eeeeccf4c711e3f9e4616685d50) + +## [v1.0.2](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.1...v1.0.2) - 2020-01-26 + +### Commits + +- [actions] add automatic rebasing / merge commit blocking [`3229a74`](https://github.com/inspect-js/available-typed-arrays/commit/3229a74bda60f24e2257efc40ddff9a3ce98de76) +- [Dev Deps] update `@ljharb/eslint-config` [`9579abe`](https://github.com/inspect-js/available-typed-arrays/commit/9579abecc196088561d3aedf27cad45b56f8e18b) +- [Fix] remove `require` condition to avoid experimental warning [`2cade6b`](https://github.com/inspect-js/available-typed-arrays/commit/2cade6b56d6a508a950c7da27d038bee496e716b) + +## [v1.0.1](https://github.com/inspect-js/available-typed-arrays/compare/v1.0.0...v1.0.1) - 2020-01-24 + +### Commits + +- [meta] add "exports" [`5942917`](https://github.com/inspect-js/available-typed-arrays/commit/5942917aafb56c6bce80f01b7ae6a9b46bc72c69) + +## v1.0.0 - 2020-01-24 + +### Commits + +- Initial commit [`2bc5144`](https://github.com/inspect-js/available-typed-arrays/commit/2bc514459c9f65756adfbd9964abf433183d78f6) +- readme [`31e4796`](https://github.com/inspect-js/available-typed-arrays/commit/31e4796379eba4a16d3c6a8e9baf6eb3f39e33d1) +- npm init [`9194266`](https://github.com/inspect-js/available-typed-arrays/commit/9194266b471a2a2dd5e6969bc40358ceb346e21e) +- Tests [`b539830`](https://github.com/inspect-js/available-typed-arrays/commit/b539830c3213f90de42b4d6e62803f52daf61a6d) +- Implementation [`6577df2`](https://github.com/inspect-js/available-typed-arrays/commit/6577df244ea146ef5ec16858044c8955e0fc445c) +- [meta] add `auto-changelog` [`7b43310`](https://github.com/inspect-js/available-typed-arrays/commit/7b43310be76f00fe60b74a2fd6d0e46ac1d01f3e) +- [Tests] add `npm run lint` [`dedfbc1`](https://github.com/inspect-js/available-typed-arrays/commit/dedfbc1592f86ac1636267d3965f2345df43815b) +- [Tests] use shared travis-ci configs [`c459d78`](https://github.com/inspect-js/available-typed-arrays/commit/c459d78bf2efa9d777f88599ae71a796dbfcb70f) +- Only apps should have lockfiles [`d294668`](https://github.com/inspect-js/available-typed-arrays/commit/d294668422cf35f5e7716a85bfd204e62b01c056) +- [meta] add `funding` field [`6e70bc1`](https://github.com/inspect-js/available-typed-arrays/commit/6e70bc1fb199c7898165aaf05c25bb49f4062e53) +- [meta] add `safe-publish-latest` [`dd89ca2`](https://github.com/inspect-js/available-typed-arrays/commit/dd89ca2c6842f0f3e82958df2b2bd0fc0c929c51) diff --git a/node_modules/available-typed-arrays/LICENSE b/node_modules/available-typed-arrays/LICENSE new file mode 100644 index 00000000..707437b5 --- /dev/null +++ b/node_modules/available-typed-arrays/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/available-typed-arrays/README.md b/node_modules/available-typed-arrays/README.md new file mode 100644 index 00000000..df6f5864 --- /dev/null +++ b/node_modules/available-typed-arrays/README.md @@ -0,0 +1,55 @@ +# available-typed-arrays [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Returns an array of Typed Array names that are available in the current environment. + +## Example + +```js +var availableTypedArrays = require('available-typed-arrays'); +var assert = require('assert'); + +assert.deepStrictEqual( + availableTypedArrays().sort(), + [ + 'Int8Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Int16Array', + 'Uint16Array', + 'Int32Array', + 'Uint32Array', + 'Float32Array', + 'Float64Array', + 'BigInt64Array', + 'BigUint64Array' + ].sort() +); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/available-typed-arrays +[2]: https://versionbadg.es/inspect-js/available-typed-arrays.svg +[5]: https://david-dm.org/inspect-js/available-typed-arrays.svg +[6]: https://david-dm.org/inspect-js/available-typed-arrays +[7]: https://david-dm.org/inspect-js/available-typed-arrays/dev-status.svg +[8]: https://david-dm.org/inspect-js/available-typed-arrays#info=devDependencies +[11]: https://nodei.co/npm/available-typed-arrays.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/available-typed-arrays.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/available-typed-arrays.svg +[downloads-url]: https://npm-stat.com/charts.html?package=available-typed-arrays +[codecov-image]: https://codecov.io/gh/inspect-js/available-typed-arrays/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/available-typed-arrays/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/available-typed-arrays +[actions-url]: https://github.com/inspect-js/available-typed-arrays/actions diff --git a/node_modules/available-typed-arrays/index.d.ts b/node_modules/available-typed-arrays/index.d.ts new file mode 100644 index 00000000..c21e1c49 --- /dev/null +++ b/node_modules/available-typed-arrays/index.d.ts @@ -0,0 +1,8 @@ +type AllPossibleTypedArrays = typeof import('possible-typed-array-names'); + +declare function availableTypedArrays(): + | [] + | AllPossibleTypedArrays + | Omit; + +export = availableTypedArrays; diff --git a/node_modules/available-typed-arrays/index.js b/node_modules/available-typed-arrays/index.js new file mode 100644 index 00000000..125f000c --- /dev/null +++ b/node_modules/available-typed-arrays/index.js @@ -0,0 +1,17 @@ +'use strict'; + +var possibleNames = require('possible-typed-array-names'); + +var g = typeof globalThis === 'undefined' ? global : globalThis; + +/** @type {import('.')} */ +module.exports = function availableTypedArrays() { + var /** @type {ReturnType} */ out = []; + for (var i = 0; i < possibleNames.length; i++) { + if (typeof g[possibleNames[i]] === 'function') { + // @ts-expect-error + out[out.length] = possibleNames[i]; + } + } + return out; +}; diff --git a/node_modules/available-typed-arrays/package.json b/node_modules/available-typed-arrays/package.json new file mode 100644 index 00000000..9b4e245e --- /dev/null +++ b/node_modules/available-typed-arrays/package.json @@ -0,0 +1,93 @@ +{ + "name": "available-typed-arrays", + "version": "1.0.7", + "description": "Returns an array of Typed Array names that are available in the current environment", + "main": "index.js", + "type": "commonjs", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "types": "./index.d.ts", + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test:harmony": "nyc node --harmony --es-staging test", + "test": "npm run tests-only && npm run test:harmony", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/available-typed-arrays.git" + }, + "keywords": [ + "typed", + "arrays", + "Float32Array", + "Float64Array", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "BigInt64Array", + "BigUint64Array" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/inspect-js/available-typed-arrays/issues" + }, + "homepage": "https://github.com/inspect-js/available-typed-arrays#readme", + "engines": { + "node": ">= 0.4" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/array.prototype.every": "^1.1.1", + "@types/isarray": "^2.0.2", + "@types/tape": "^5.6.4", + "array.prototype.every": "^1.1.5", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "isarray": "^2.0.5", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "^5.4.0-dev.20240131" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + } +} diff --git a/node_modules/available-typed-arrays/test/index.js b/node_modules/available-typed-arrays/test/index.js new file mode 100644 index 00000000..21c986dc --- /dev/null +++ b/node_modules/available-typed-arrays/test/index.js @@ -0,0 +1,18 @@ +'use strict'; + +var test = require('tape'); +var isArray = require('isarray'); +var every = require('array.prototype.every'); + +var availableTypedArrays = require('../'); + +test('available typed arrays', function (t) { + t.equal(typeof availableTypedArrays, 'function', 'is a function'); + + var arrays = availableTypedArrays(); + t.equal(isArray(arrays), true, 'returns an array'); + + t.equal(every(arrays, function (array) { return typeof array === 'string'; }), true, 'contains only strings'); + + t.end(); +}); diff --git a/node_modules/available-typed-arrays/tsconfig.json b/node_modules/available-typed-arrays/tsconfig.json new file mode 100644 index 00000000..fdab34fe --- /dev/null +++ b/node_modules/available-typed-arrays/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/axios/CHANGELOG.md b/node_modules/axios/CHANGELOG.md new file mode 100644 index 00000000..fbbcd1d8 --- /dev/null +++ b/node_modules/axios/CHANGELOG.md @@ -0,0 +1,1416 @@ +# Changelog + +## [1.13.3](https://github.com/axios/axios/compare/v1.13.2...v1.13.3) (2026-01-20) + +### Bug Fixes + +- **http2:** Use port 443 for HTTPS connections by default. ([#7256](https://github.com/axios/axios/issues/7256)) ([d7e6065](https://github.com/axios/axios/commit/d7e60653460480ffacecf85383012ca1baa6263e)) +- **interceptor:** handle the error in the same interceptor ([#6269](https://github.com/axios/axios/issues/6269)) ([5945e40](https://github.com/axios/axios/commit/5945e40bb171d4ac4fc195df276cf952244f0f89)) +- main field in package.json should correspond to cjs artifacts ([#5756](https://github.com/axios/axios/issues/5756)) ([7373fbf](https://github.com/axios/axios/commit/7373fbff24cd92ce650d99ff6f7fe08c2e2a0a04)) +- **package.json:** add 'bun' package.json 'exports' condition. Load the Node.js build in Bun instead of the browser build ([#5754](https://github.com/axios/axios/issues/5754)) ([b89217e](https://github.com/axios/axios/commit/b89217e3e91de17a3d55e2b8f39ceb0e9d8aeda8)) +- silentJSONParsing=false should throw on invalid JSON ([#7253](https://github.com/axios/axios/issues/7253)) ([#7257](https://github.com/axios/axios/issues/7257)) ([7d19335](https://github.com/axios/axios/commit/7d19335e43d6754a1a9a66e424f7f7da259895bf)) +- turn AxiosError into a native error ([#5394](https://github.com/axios/axios/issues/5394)) ([#5558](https://github.com/axios/axios/issues/5558)) ([1c6a86d](https://github.com/axios/axios/commit/1c6a86dd2c0623ee1af043a8491dbc96d40e883b)) +- **types:** add handlers to AxiosInterceptorManager interface ([#5551](https://github.com/axios/axios/issues/5551)) ([8d1271b](https://github.com/axios/axios/commit/8d1271b49fc226ed7defd07cd577bd69a55bb13a)) +- **types:** restore AxiosError.cause type from unknown to Error ([#7327](https://github.com/axios/axios/issues/7327)) ([d8233d9](https://github.com/axios/axios/commit/d8233d9e8e9a64bfba9bbe01d475ba417510b82b)) +- unclear error message is thrown when specifying an empty proxy authorization ([#6314](https://github.com/axios/axios/issues/6314)) ([6ef867e](https://github.com/axios/axios/commit/6ef867e684adf7fb2343e3b29a79078a3c76dc29)) + +### Features + +- add `undefined` as a value in AxiosRequestConfig ([#5560](https://github.com/axios/axios/issues/5560)) ([095033c](https://github.com/axios/axios/commit/095033c626895ecdcda2288050b63dcf948db3bd)) +- add automatic minor and patch upgrades to dependabot ([#6053](https://github.com/axios/axios/issues/6053)) ([65a7584](https://github.com/axios/axios/commit/65a7584eda6164980ddb8cf5372f0afa2a04c1ed)) +- add Node.js coverage script using c8 (closes [#7289](https://github.com/axios/axios/issues/7289)) ([#7294](https://github.com/axios/axios/issues/7294)) ([ec9d94e](https://github.com/axios/axios/commit/ec9d94e9f88da13e9219acadf65061fb38ce080a)) +- added copilot instructions ([3f83143](https://github.com/axios/axios/commit/3f83143bfe617eec17f9d7dcf8bafafeeae74c26)) +- compatibility with frozen prototypes ([#6265](https://github.com/axios/axios/issues/6265)) ([860e033](https://github.com/axios/axios/commit/860e03396a536e9b926dacb6570732489c9d7012)) +- enhance pipeFileToResponse with error handling ([#7169](https://github.com/axios/axios/issues/7169)) ([88d7884](https://github.com/axios/axios/commit/88d78842541610692a04282233933d078a8a2552)) +- **types:** Intellisense for string literals in a widened union ([#6134](https://github.com/axios/axios/issues/6134)) ([f73474d](https://github.com/axios/axios/commit/f73474d02c5aa957b2daeecee65508557fd3c6e5)), closes [/github.com/microsoft/TypeScript/issues/33471#issuecomment-1376364329](https://github.com//github.com/microsoft/TypeScript/issues/33471/issues/issuecomment-1376364329) + +### Reverts + +- Revert "fix: silentJSONParsing=false should throw on invalid JSON (#7253) (#7…" (#7298) ([a4230f5](https://github.com/axios/axios/commit/a4230f5581b3f58b6ff531b6dbac377a4fd7942a)), closes [#7253](https://github.com/axios/axios/issues/7253) [#7](https://github.com/axios/axios/issues/7) [#7298](https://github.com/axios/axios/issues/7298) +- **deps:** bump peter-evans/create-pull-request from 7 to 8 in the github-actions group ([#7334](https://github.com/axios/axios/issues/7334)) ([2d6ad5e](https://github.com/axios/axios/commit/2d6ad5e48bd29b0b2b5e7e95fb473df98301543a)) + +### Contributors to this release + +- avatar [Ashvin Tiwari](https://github.com/ashvin2005 "+1752/-4 (#7218 #7218 )") +- avatar [Nikunj Mochi](https://github.com/mochinikunj "+940/-12 (#7294 #7294 )") +- avatar [Anchal Singh](https://github.com/imanchalsingh "+544/-102 (#7169 #7185 )") +- avatar [jasonsaayman](https://github.com/jasonsaayman "+317/-73 (#7334 #7298 )") +- avatar [Julian Dax](https://github.com/brodo "+99/-120 (#5558 )") +- avatar [Akash Dhar Dubey](https://github.com/AKASHDHARDUBEY "+167/-0 (#7287 #7288 )") +- avatar [Madhumita](https://github.com/madhumitaaa "+20/-68 (#7198 )") +- avatar [Tackoil](https://github.com/Tackoil "+80/-2 (#6269 )") +- avatar [Justin Dhillon](https://github.com/justindhillon "+41/-41 (#6324 #6315 )") +- avatar [Rudransh](https://github.com/Rudrxxx "+71/-2 (#7257 )") +- avatar [WuMingDao](https://github.com/WuMingDao "+36/-36 (#7215 )") +- avatar [codenomnom](https://github.com/codenomnom "+70/-0 (#7201 #7201 )") +- avatar [Nandan Acharya](https://github.com/Nandann018-ux "+60/-10 (#7272 )") +- avatar [Eric Dubé](https://github.com/KernelDeimos "+22/-40 (#7042 )") +- avatar [Tibor Pilz](https://github.com/tiborpilz "+40/-4 (#5551 )") +- avatar [Gabriel Quaresma](https://github.com/joaoGabriel55 "+31/-4 (#6314 )") +- avatar [Turadg Aleahmad](https://github.com/turadg "+23/-6 (#6265 )") +- avatar [JohnTitor](https://github.com/kiritosan "+14/-14 (#6155 )") +- avatar [rohit miryala](https://github.com/rohitmiryala "+22/-0 (#7250 )") +- avatar [Wilson Mun](https://github.com/wmundev "+20/-0 (#6053 )") +- avatar [techcodie](https://github.com/techcodie "+7/-7 (#7236 )") +- avatar [Ved Vadnere](https://github.com/Archis009 "+5/-6 (#7283 )") +- avatar [svihpinc](https://github.com/svihpinc "+5/-3 (#6134 )") +- avatar [SANDESH LENDVE](https://github.com/mrsandy1965 "+3/-3 (#7246 )") +- avatar [Lubos](https://github.com/mrlubos "+5/-1 (#7312 )") +- avatar [Jarred Sumner](https://github.com/Jarred-Sumner "+5/-1 (#5754 )") +- avatar [Adam Hines](https://github.com/thebanjomatic "+2/-1 (#5756 )") +- avatar [Subhan Kumar Rai](https://github.com/Subhan030 "+2/-1 (#7256 )") +- avatar [Joseph Frazier](https://github.com/josephfrazier "+1/-1 (#7311 )") +- avatar [KT0803](https://github.com/KT0803 "+0/-2 (#7229 )") +- avatar [Albie](https://github.com/AlbertoSadoc "+1/-1 (#5560 )") +- avatar [Jake Hayes](https://github.com/thejayhaykid "+1/-0 (#5999 )") + +## [1.13.2](https://github.com/axios/axios/compare/v1.13.1...v1.13.2) (2025-11-04) + +### Bug Fixes + +- **http:** fix 'socket hang up' bug for keep-alive requests when using timeouts; ([#7206](https://github.com/axios/axios/issues/7206)) ([8d37233](https://github.com/axios/axios/commit/8d372335f5c50ecd01e8615f2468a9eb19703117)) +- **http:** use default export for http2 module to support stubs; ([#7196](https://github.com/axios/axios/issues/7196)) ([0588880](https://github.com/axios/axios/commit/0588880ac7ddba7594ef179930493884b7e90bf5)) + +### Performance Improvements + +- **http:** fix early loop exit; ([#7202](https://github.com/axios/axios/issues/7202)) ([12c314b](https://github.com/axios/axios/commit/12c314b603e7852a157e93e47edb626a471ba6c5)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+28/-9 (#7206 #7202 )") +- avatar [Kasper Isager Dalsgarð](https://github.com/kasperisager "+9/-9 (#7196 )") + +## [1.13.1](https://github.com/axios/axios/compare/v1.13.0...v1.13.1) (2025-10-28) + +### Bug Fixes + +- **http:** fixed a regression that caused the data stream to be interrupted for responses with non-OK HTTP statuses; ([#7193](https://github.com/axios/axios/issues/7193)) ([bcd5581](https://github.com/axios/axios/commit/bcd5581d208cd372055afdcb2fd10b68ca40613c)) + +### Contributors to this release + +- avatar [Anchal Singh](https://github.com/imanchalsingh "+220/-111 (#7173 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+18/-1 (#7193 )") + +# [1.13.0](https://github.com/axios/axios/compare/v1.12.2...v1.13.0) (2025-10-27) + +### Bug Fixes + +- **fetch:** prevent TypeError when config.env is undefined ([#7155](https://github.com/axios/axios/issues/7155)) ([015faec](https://github.com/axios/axios/commit/015faeca9f26db76f9562760f04bb9f8229f4db1)) +- resolve issue [#7131](https://github.com/axios/axios/issues/7131) (added spacing in mergeConfig.js) ([#7133](https://github.com/axios/axios/issues/7133)) ([9b9ec98](https://github.com/axios/axios/commit/9b9ec98548d93e9f2204deea10a5f1528bf3ce62)) + +### Features + +- **http:** add HTTP2 support; ([#7150](https://github.com/axios/axios/issues/7150)) ([d676df7](https://github.com/axios/axios/commit/d676df772244726533ca320f42e967f5af056bac)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+794/-180 (#7186 #7150 #7039 )") +- avatar [Noritaka Kobayashi](https://github.com/noritaka1166 "+24/-509 (#7032 )") +- avatar [Aviraj2929](https://github.com/Aviraj2929 "+211/-93 (#7136 #7135 #7134 #7112 )") +- avatar [prasoon patel](https://github.com/Prasoon52 "+167/-6 (#7099 )") +- avatar [Samyak Dandge](https://github.com/Samy-in "+134/-0 (#7171 )") +- avatar [Anchal Singh](https://github.com/imanchalsingh "+53/-56 (#7170 )") +- avatar [Rahul Kumar](https://github.com/jaiyankargupta "+28/-28 (#7073 )") +- avatar [Amit Verma](https://github.com/Amitverma0509 "+24/-13 (#7129 )") +- avatar [Abhishek3880](https://github.com/abhishekmaniy "+23/-4 (#7119 #7117 #7116 #7115 )") +- avatar [Dhvani Maktuporia](https://github.com/Dhvani365 "+14/-5 (#7175 )") +- avatar [Usama Ayoub](https://github.com/sam3690 "+4/-4 (#7133 )") +- avatar [ikuy1203](https://github.com/ikuy1203 "+3/-3 (#7166 )") +- avatar [Nikhil Simon Toppo](https://github.com/Kirito-Excalibur "+1/-1 (#7172 )") +- avatar [Jane Wangari](https://github.com/Wangarijane "+1/-1 (#7155 )") +- avatar [Supakorn Ieamgomol](https://github.com/Supakornn "+1/-1 (#7065 )") +- avatar [Kian-Meng Ang](https://github.com/kianmeng "+1/-1 (#7046 )") +- avatar [UTSUMI Keiji](https://github.com/k-utsumi "+1/-1 (#7037 )") + +## [1.12.2](https://github.com/axios/axios/compare/v1.12.1...v1.12.2) (2025-09-14) + +### Bug Fixes + +- **fetch:** use current global fetch instead of cached one when env fetch is not specified to keep MSW support; ([#7030](https://github.com/axios/axios/issues/7030)) ([cf78825](https://github.com/axios/axios/commit/cf78825e1229b60d1629ad0bbc8a752ff43c3f53)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+247/-16 (#7030 #7022 #7024 )") +- avatar [Noritaka Kobayashi](https://github.com/noritaka1166 "+2/-6 (#7028 #7029 )") + +## [1.12.1](https://github.com/axios/axios/compare/v1.12.0...v1.12.1) (2025-09-12) + +### Bug Fixes + +- **types:** fixed env config types; ([#7020](https://github.com/axios/axios/issues/7020)) ([b5f26b7](https://github.com/axios/axios/commit/b5f26b75bdd9afa95016fb67d0cab15fc74cbf05)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+10/-4 (#7020 )") + +# [1.12.0](https://github.com/axios/axios/compare/v1.11.0...v1.12.0) (2025-09-11) + +### Bug Fixes + +- adding build artifacts ([9ec86de](https://github.com/axios/axios/commit/9ec86de257bfa33856571036279169f385ed92bd)) +- dont add dist on release ([a2edc36](https://github.com/axios/axios/commit/a2edc3606a4f775d868a67bb3461ff18ce7ecd11)) +- **fetch-adapter:** set correct Content-Type for Node FormData ([#6998](https://github.com/axios/axios/issues/6998)) ([a9f47af](https://github.com/axios/axios/commit/a9f47afbf3224d2ca987dbd8188789c7ea853c5d)) +- **node:** enforce maxContentLength for data: URLs ([#7011](https://github.com/axios/axios/issues/7011)) ([945435f](https://github.com/axios/axios/commit/945435fc51467303768202250debb8d4ae892593)) +- package exports ([#5627](https://github.com/axios/axios/issues/5627)) ([aa78ac2](https://github.com/axios/axios/commit/aa78ac23fc9036163308c0f6bd2bb885e7af3f36)) +- **params:** removing '[' and ']' from URL encode exclude characters ([#3316](https://github.com/axios/axios/issues/3316)) ([#5715](https://github.com/axios/axios/issues/5715)) ([6d84189](https://github.com/axios/axios/commit/6d84189349c43b1dcdd977b522610660cc4c7042)) +- release pr run ([fd7f404](https://github.com/axios/axios/commit/fd7f404488b2c4f238c2fbe635b58026a634bfd2)) +- **types:** change the type guard on isCancel ([#5595](https://github.com/axios/axios/issues/5595)) ([0dbb7fd](https://github.com/axios/axios/commit/0dbb7fd4f61dc568498cd13a681fa7f907d6ec7e)) + +### Features + +- **adapter:** surface low‑level network error details; attach original error via cause ([#6982](https://github.com/axios/axios/issues/6982)) ([78b290c](https://github.com/axios/axios/commit/78b290c57c978ed2ab420b90d97350231c9e5d74)) +- **fetch:** add fetch, Request, Response env config variables for the adapter; ([#7003](https://github.com/axios/axios/issues/7003)) ([c959ff2](https://github.com/axios/axios/commit/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b)) +- support reviver on JSON.parse ([#5926](https://github.com/axios/axios/issues/5926)) ([2a97634](https://github.com/axios/axios/commit/2a9763426e43d996fd60d01afe63fa6e1f5b4fca)), closes [#5924](https://github.com/axios/axios/issues/5924) +- **types:** extend AxiosResponse interface to include custom headers type ([#6782](https://github.com/axios/axios/issues/6782)) ([7960d34](https://github.com/axios/axios/commit/7960d34eded2de66ffd30b4687f8da0e46c4903e)) + +### Contributors to this release + +- avatar [Willian Agostini](https://github.com/WillianAgostini "+132/-16760 (#7002 #5926 #6782 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+4263/-293 (#7006 #7003 )") +- avatar [khani](https://github.com/mkhani01 "+111/-15 (#6982 )") +- avatar [Ameer Assadi](https://github.com/AmeerAssadi "+123/-0 (#7011 )") +- avatar [Emiedonmokumo Dick-Boro](https://github.com/emiedonmokumo "+55/-35 (#6998 )") +- avatar [Zeroday BYTE](https://github.com/opsysdebug "+8/-8 (#6980 )") +- avatar [Jason Saayman](https://github.com/jasonsaayman "+7/-7 (#6985 #6985 )") +- avatar [최예찬](https://github.com/HealGaren "+5/-7 (#5715 )") +- avatar [Gligor Kotushevski](https://github.com/gligorkot "+3/-1 (#5627 )") +- avatar [Aleksandar Dimitrov](https://github.com/adimit "+2/-1 (#5595 )") + +# [1.11.0](https://github.com/axios/axios/compare/v1.10.0...v1.11.0) (2025-07-22) + +### Bug Fixes + +- form-data npm pakcage ([#6970](https://github.com/axios/axios/issues/6970)) ([e72c193](https://github.com/axios/axios/commit/e72c193722530db538b19e5ddaaa4544d226b253)) +- prevent RangeError when using large Buffers ([#6961](https://github.com/axios/axios/issues/6961)) ([a2214ca](https://github.com/axios/axios/commit/a2214ca1bc60540baf2c80573cea3a0ff91ba9d1)) +- **types:** resolve type discrepancies between ESM and CJS TypeScript declaration files ([#6956](https://github.com/axios/axios/issues/6956)) ([8517aa1](https://github.com/axios/axios/commit/8517aa16f8d082fc1d5309c642220fa736159110)) + +### Contributors to this release + +- avatar [izzy goldman](https://github.com/izzygld "+186/-93 (#6970 )") +- avatar [Manish Sahani](https://github.com/manishsahanidev "+70/-0 (#6961 )") +- avatar [Noritaka Kobayashi](https://github.com/noritaka1166 "+12/-10 (#6938 #6939 )") +- avatar [James Nail](https://github.com/jrnail23 "+13/-2 (#6956 )") +- avatar [Tejaswi1305](https://github.com/Tejaswi1305 "+1/-1 (#6894 )") + +# [1.10.0](https://github.com/axios/axios/compare/v1.9.0...v1.10.0) (2025-06-14) + +### Bug Fixes + +- **adapter:** pass fetchOptions to fetch function ([#6883](https://github.com/axios/axios/issues/6883)) ([0f50af8](https://github.com/axios/axios/commit/0f50af8e076b7fb403844789bd5e812dedcaf4ed)) +- **form-data:** convert boolean values to strings in FormData serialization ([#6917](https://github.com/axios/axios/issues/6917)) ([5064b10](https://github.com/axios/axios/commit/5064b108de336ff34862650709761b8a96d26be0)) +- **package:** add module entry point for React Native; ([#6933](https://github.com/axios/axios/issues/6933)) ([3d343b8](https://github.com/axios/axios/commit/3d343b86dc4fd0eea0987059c5af04327c7ae304)) + +### Features + +- **types:** improved fetchOptions interface ([#6867](https://github.com/axios/axios/issues/6867)) ([63f1fce](https://github.com/axios/axios/commit/63f1fce233009f5db1abf2586c145825ac98c3d7)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+30/-19 (#6933 #6920 #6893 #6892 )") +- avatar [Noritaka Kobayashi](https://github.com/noritaka1166 "+2/-6 (#6922 #6923 )") +- avatar [Dimitrios Lazanas](https://github.com/dimitry-lzs "+4/-0 (#6917 )") +- avatar [Adrian Knapp](https://github.com/AdrianKnapp "+2/-2 (#6867 )") +- avatar [Howie Zhao](https://github.com/howiezhao "+3/-1 (#6872 )") +- avatar [Uhyeon Park](https://github.com/warpdev "+1/-1 (#6883 )") +- avatar [Sampo Silvennoinen](https://github.com/stscoundrel "+1/-1 (#6913 )") + +# [1.9.0](https://github.com/axios/axios/compare/v1.8.4...v1.9.0) (2025-04-24) + +### Bug Fixes + +- **core:** fix the Axios constructor implementation to treat the config argument as optional; ([#6881](https://github.com/axios/axios/issues/6881)) ([6c5d4cd](https://github.com/axios/axios/commit/6c5d4cd69286868059c5e52d45085cb9a894a983)) +- **fetch:** fixed ERR_NETWORK mapping for Safari browsers; ([#6767](https://github.com/axios/axios/issues/6767)) ([dfe8411](https://github.com/axios/axios/commit/dfe8411c9a082c3d068bdd1f8d6e73054f387f45)) +- **headers:** allow iterable objects to be a data source for the set method; ([#6873](https://github.com/axios/axios/issues/6873)) ([1b1f9cc](https://github.com/axios/axios/commit/1b1f9ccdc15f1ea745160ec9a5223de9db4673bc)) +- **headers:** fix `getSetCookie` by using 'get' method for caseless access; ([#6874](https://github.com/axios/axios/issues/6874)) ([d4f7df4](https://github.com/axios/axios/commit/d4f7df4b304af8b373488fdf8e830793ff843eb9)) +- **headers:** fixed support for setting multiple header values from an iterated source; ([#6885](https://github.com/axios/axios/issues/6885)) ([f7a3b5e](https://github.com/axios/axios/commit/f7a3b5e0f7e5e127b97defa92a132fbf1b55cf15)) +- **http:** send minimal end multipart boundary ([#6661](https://github.com/axios/axios/issues/6661)) ([987d2e2](https://github.com/axios/axios/commit/987d2e2dd3b362757550f36eab875e60640b6ddc)) +- **types:** fix autocomplete for adapter config ([#6855](https://github.com/axios/axios/issues/6855)) ([e61a893](https://github.com/axios/axios/commit/e61a8934d8f94dd429a2f309b48c67307c700df0)) + +### Features + +- **AxiosHeaders:** add getSetCookie method to retrieve set-cookie headers values ([#5707](https://github.com/axios/axios/issues/5707)) ([80ea756](https://github.com/axios/axios/commit/80ea756e72bcf53110fa792f5d7ab76e8b11c996)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+200/-34 (#6890 #6889 #6888 #6885 #6881 #6767 #6874 #6873 )") +- avatar [Jay](https://github.com/jasonsaayman "+26/-1 ()") +- avatar [Willian Agostini](https://github.com/WillianAgostini "+21/-0 (#5707 )") +- avatar [George Cheng](https://github.com/Gerhut "+3/-3 (#5096 )") +- avatar [FatahChan](https://github.com/FatahChan "+2/-2 (#6855 )") +- avatar [Ionuț G. Stan](https://github.com/igstan "+1/-1 (#6661 )") + +## [1.8.4](https://github.com/axios/axios/compare/v1.8.3...v1.8.4) (2025-03-19) + +### Bug Fixes + +- **buildFullPath:** handle `allowAbsoluteUrls: false` without `baseURL` ([#6833](https://github.com/axios/axios/issues/6833)) ([f10c2e0](https://github.com/axios/axios/commit/f10c2e0de7fde0051f848609a29c2906d0caa1d9)) + +### Contributors to this release + +- avatar [Marc Hassan](https://github.com/mhassan1 "+5/-1 (#6833 )") + +## [1.8.3](https://github.com/axios/axios/compare/v1.8.2...v1.8.3) (2025-03-10) + +### Bug Fixes + +- add missing type for allowAbsoluteUrls ([#6818](https://github.com/axios/axios/issues/6818)) ([10fa70e](https://github.com/axios/axios/commit/10fa70ef14fe39558b15a179f0e82f5f5e5d11b2)) +- **xhr/fetch:** pass `allowAbsoluteUrls` to `buildFullPath` in `xhr` and `fetch` adapters ([#6814](https://github.com/axios/axios/issues/6814)) ([ec159e5](https://github.com/axios/axios/commit/ec159e507bdf08c04ba1a10fe7710094e9e50ec9)) + +### Contributors to this release + +- avatar [Ashcon Partovi](https://github.com/Electroid "+6/-0 (#6811 )") +- avatar [StefanBRas](https://github.com/StefanBRas "+4/-0 (#6818 )") +- avatar [Marc Hassan](https://github.com/mhassan1 "+2/-2 (#6814 )") + +## [1.8.2](https://github.com/axios/axios/compare/v1.8.1...v1.8.2) (2025-03-07) + +### Bug Fixes + +- **http-adapter:** add allowAbsoluteUrls to path building ([#6810](https://github.com/axios/axios/issues/6810)) ([fb8eec2](https://github.com/axios/axios/commit/fb8eec214ce7744b5ca787f2c3b8339b2f54b00f)) + +### Contributors to this release + +- avatar [Fasoro-Joseph Alexander](https://github.com/lexcorp16 "+1/-1 (#6810 )") + +## [1.8.1](https://github.com/axios/axios/compare/v1.8.0...v1.8.1) (2025-02-26) + +### Bug Fixes + +- **utils:** move `generateString` to platform utils to avoid importing crypto module into client builds; ([#6789](https://github.com/axios/axios/issues/6789)) ([36a5a62](https://github.com/axios/axios/commit/36a5a620bec0b181451927f13ac85b9888b86cec)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+51/-47 (#6789 )") + +# [1.8.0](https://github.com/axios/axios/compare/v1.7.9...v1.8.0) (2025-02-25) + +### Bug Fixes + +- **examples:** application crashed when navigating examples in browser ([#5938](https://github.com/axios/axios/issues/5938)) ([1260ded](https://github.com/axios/axios/commit/1260ded634ec101dd5ed05d3b70f8e8f899dba6c)) +- missing word in SUPPORT_QUESTION.yml ([#6757](https://github.com/axios/axios/issues/6757)) ([1f890b1](https://github.com/axios/axios/commit/1f890b13f2c25a016f3c84ae78efb769f244133e)) +- **utils:** replace getRandomValues with crypto module ([#6788](https://github.com/axios/axios/issues/6788)) ([23a25af](https://github.com/axios/axios/commit/23a25af0688d1db2c396deb09229d2271cc24f6c)) + +### Features + +- Add config for ignoring absolute URLs ([#5902](https://github.com/axios/axios/issues/5902)) ([#6192](https://github.com/axios/axios/issues/6192)) ([32c7bcc](https://github.com/axios/axios/commit/32c7bcc0f233285ba27dec73a4b1e81fb7a219b3)) + +### Reverts + +- Revert "chore: expose fromDataToStream to be consumable (#6731)" (#6732) ([1317261](https://github.com/axios/axios/commit/1317261125e9c419fe9f126867f64d28f9c1efda)), closes [#6731](https://github.com/axios/axios/issues/6731) [#6732](https://github.com/axios/axios/issues/6732) + +### BREAKING CHANGES + +- code relying on the above will now combine the URLs instead of prefer request URL + +- feat: add config option for allowing absolute URLs + +- fix: add default value for allowAbsoluteUrls in buildFullPath + +- fix: typo in flow control when setting allowAbsoluteUrls + +### Contributors to this release + +- avatar [Michael Toscano](https://github.com/GethosTheWalrus "+42/-8 (#6192 )") +- avatar [Willian Agostini](https://github.com/WillianAgostini "+26/-3 (#6788 #6777 )") +- avatar [Naron](https://github.com/naronchen "+27/-0 (#5901 )") +- avatar [shravan || श्रvan](https://github.com/shravan20 "+7/-3 (#6116 )") +- avatar [Justin Dhillon](https://github.com/justindhillon "+0/-7 (#6312 )") +- avatar [yionr](https://github.com/yionr "+5/-1 (#6129 )") +- avatar [Shin'ya Ueoka](https://github.com/ueokande "+3/-3 (#5935 )") +- avatar [Dan Dascalescu](https://github.com/dandv "+3/-3 (#5908 #6757 )") +- avatar [Nitin Ramnani](https://github.com/NitinRamnani "+2/-2 (#5938 )") +- avatar [Shay Molcho](https://github.com/shaymolcho "+2/-2 (#6770 )") +- avatar [Jay](https://github.com/jasonsaayman "+0/-3 (#6732 )") +- fancy45daddy +- avatar [Habip Akyol](https://github.com/habipakyol "+1/-1 (#6030 )") +- avatar [Bailey Lissington](https://github.com/llamington "+1/-1 (#6771 )") +- avatar [Bernardo da Eira Duarte](https://github.com/bernardoduarte "+1/-1 (#6480 )") +- avatar [Shivam Batham](https://github.com/Shivam-Batham "+1/-1 (#5949 )") +- avatar [Lipin Kariappa](https://github.com/lipinnnnn "+1/-1 (#5936 )") + +## [1.7.9](https://github.com/axios/axios/compare/v1.7.8...v1.7.9) (2024-12-04) + +### Reverts + +- Revert "fix(types): export CJS types from ESM (#6218)" (#6729) ([c44d2f2](https://github.com/axios/axios/commit/c44d2f2316ad289b38997657248ba10de11deb6c)), closes [#6218](https://github.com/axios/axios/issues/6218) [#6729](https://github.com/axios/axios/issues/6729) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+596/-108 (#6729 )") + +## [1.7.8](https://github.com/axios/axios/compare/v1.7.7...v1.7.8) (2024-11-25) + +### Bug Fixes + +- allow passing a callback as paramsSerializer to buildURL ([#6680](https://github.com/axios/axios/issues/6680)) ([eac4619](https://github.com/axios/axios/commit/eac4619fe2e0926e876cd260ee21e3690381dbb5)) +- **core:** fixed config merging bug ([#6668](https://github.com/axios/axios/issues/6668)) ([5d99fe4](https://github.com/axios/axios/commit/5d99fe4491202a6268c71e5dcc09192359d73cea)) +- fixed width form to not shrink after 'Send Request' button is clicked ([#6644](https://github.com/axios/axios/issues/6644)) ([7ccd5fd](https://github.com/axios/axios/commit/7ccd5fd42402102d38712c32707bf055be72ab54)) +- **http:** add support for File objects as payload in http adapter ([#6588](https://github.com/axios/axios/issues/6588)) ([#6605](https://github.com/axios/axios/issues/6605)) ([6841d8d](https://github.com/axios/axios/commit/6841d8d18ddc71cc1bd202ffcfddb3f95622eef3)) +- **http:** fixed proxy-from-env module import ([#5222](https://github.com/axios/axios/issues/5222)) ([12b3295](https://github.com/axios/axios/commit/12b32957f1258aee94ef859809ed39f8f88f9dfa)) +- **http:** use `globalThis.TextEncoder` when available ([#6634](https://github.com/axios/axios/issues/6634)) ([df956d1](https://github.com/axios/axios/commit/df956d18febc9100a563298dfdf0f102c3d15410)) +- ios11 breaks when build ([#6608](https://github.com/axios/axios/issues/6608)) ([7638952](https://github.com/axios/axios/commit/763895270f7b50c7c780c3c9807ae8635de952cd)) +- **types:** add missing types for mergeConfig function ([#6590](https://github.com/axios/axios/issues/6590)) ([00de614](https://github.com/axios/axios/commit/00de614cd07b7149af335e202aef0e076c254f49)) +- **types:** export CJS types from ESM ([#6218](https://github.com/axios/axios/issues/6218)) ([c71811b](https://github.com/axios/axios/commit/c71811b00f2fcff558e4382ba913bdac4ad7200e)) +- updated stream aborted error message to be more clear ([#6615](https://github.com/axios/axios/issues/6615)) ([cc3217a](https://github.com/axios/axios/commit/cc3217a612024d83a663722a56d7a98d8759c6d5)) +- use URL API instead of DOM to fix a potential vulnerability warning; ([#6714](https://github.com/axios/axios/issues/6714)) ([0a8d6e1](https://github.com/axios/axios/commit/0a8d6e19da5b9899a2abafaaa06a75ee548597db)) + +### Contributors to this release + +- avatar [Remco Haszing](https://github.com/remcohaszing "+108/-596 (#6218 )") +- avatar [Jay](https://github.com/jasonsaayman "+281/-19 (#6640 #6619 )") +- avatar [Aayush Yadav](https://github.com/aayushyadav020 "+124/-111 (#6617 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+12/-65 (#6714 )") +- avatar [Ell Bradshaw](https://github.com/cincodenada "+29/-0 (#6489 )") +- avatar [Amit Saini](https://github.com/amitsainii "+13/-3 (#5237 )") +- avatar [Tommaso Paulon](https://github.com/guuido "+14/-1 (#6680 )") +- avatar [Akki](https://github.com/Aakash-Rana "+5/-5 (#6668 )") +- avatar [Sampo Silvennoinen](https://github.com/stscoundrel "+3/-3 (#6633 )") +- avatar [Kasper Isager Dalsgarð](https://github.com/kasperisager "+2/-2 (#6634 )") +- avatar [Christian Clauss](https://github.com/cclauss "+4/-0 (#6683 )") +- avatar [Pavan Welihinda](https://github.com/pavan168 "+2/-2 (#5222 )") +- avatar [Taylor Flatt](https://github.com/taylorflatt "+2/-2 (#6615 )") +- avatar [Kenzo Wada](https://github.com/Kenzo-Wada "+2/-2 (#6608 )") +- avatar [Ngole Lawson](https://github.com/echelonnought "+3/-0 (#6644 )") +- avatar [Haven](https://github.com/Baoyx007 "+3/-0 (#6590 )") +- avatar [Shrivali Dutt](https://github.com/shrivalidutt "+1/-1 (#6637 )") +- avatar [Henco Appel](https://github.com/hencoappel "+1/-1 (#6605 )") + +## [1.7.7](https://github.com/axios/axios/compare/v1.7.6...v1.7.7) (2024-08-31) + +### Bug Fixes + +- **fetch:** fix stream handling in Safari by fallback to using a stream reader instead of an async iterator; ([#6584](https://github.com/axios/axios/issues/6584)) ([d198085](https://github.com/axios/axios/commit/d1980854fee1765cd02fa0787adf5d6e34dd9dcf)) +- **http:** fixed support for IPv6 literal strings in url ([#5731](https://github.com/axios/axios/issues/5731)) ([364993f](https://github.com/axios/axios/commit/364993f0d8bc6e0e06f76b8a35d2d0a35cab054c)) + +### Contributors to this release + +- avatar [Rishi556](https://github.com/Rishi556 "+39/-1 (#5731 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+27/-7 (#6584 )") + +## [1.7.6](https://github.com/axios/axios/compare/v1.7.5...v1.7.6) (2024-08-30) + +### Bug Fixes + +- **fetch:** fix content length calculation for FormData payload; ([#6524](https://github.com/axios/axios/issues/6524)) ([085f568](https://github.com/axios/axios/commit/085f56861a83e9ac02c140ad9d68dac540dfeeaa)) +- **fetch:** optimize signals composing logic; ([#6582](https://github.com/axios/axios/issues/6582)) ([df9889b](https://github.com/axios/axios/commit/df9889b83c2cc37e9e6189675a73ab70c60f031f)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+98/-46 (#6582 )") +- avatar [Jacques Germishuys](https://github.com/jacquesg "+5/-1 (#6524 )") +- avatar [kuroino721](https://github.com/kuroino721 "+3/-1 (#6575 )") + +## [1.7.5](https://github.com/axios/axios/compare/v1.7.4...v1.7.5) (2024-08-23) + +### Bug Fixes + +- **adapter:** fix undefined reference to hasBrowserEnv ([#6572](https://github.com/axios/axios/issues/6572)) ([7004707](https://github.com/axios/axios/commit/7004707c4180b416341863bd86913fe4fc2f1df1)) +- **core:** add the missed implementation of AxiosError#status property; ([#6573](https://github.com/axios/axios/issues/6573)) ([6700a8a](https://github.com/axios/axios/commit/6700a8adac06942205f6a7a21421ecb36c4e0852)) +- **core:** fix `ReferenceError: navigator is not defined` for custom environments; ([#6567](https://github.com/axios/axios/issues/6567)) ([fed1a4b](https://github.com/axios/axios/commit/fed1a4b2d78ed4a588c84e09d32749ed01dc2794)) +- **fetch:** fix credentials handling in Cloudflare workers ([#6533](https://github.com/axios/axios/issues/6533)) ([550d885](https://github.com/axios/axios/commit/550d885eb90fd156add7b93bbdc54d30d2f9a98d)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+187/-83 (#6573 #6567 #6566 #6564 #6563 #6557 #6556 #6555 #6554 #6552 )") +- avatar [Antonin Bas](https://github.com/antoninbas "+6/-6 (#6572 )") +- avatar [Hans Otto Wirtz](https://github.com/hansottowirtz "+4/-1 (#6533 )") + +## [1.7.4](https://github.com/axios/axios/compare/v1.7.3...v1.7.4) (2024-08-13) + +### Bug Fixes + +- **sec:** CVE-2024-39338 ([#6539](https://github.com/axios/axios/issues/6539)) ([#6543](https://github.com/axios/axios/issues/6543)) ([6b6b605](https://github.com/axios/axios/commit/6b6b605eaf73852fb2dae033f1e786155959de3a)) +- **sec:** disregard protocol-relative URL to remediate SSRF ([#6539](https://github.com/axios/axios/issues/6539)) ([07a661a](https://github.com/axios/axios/commit/07a661a2a6b9092c4aa640dcc7f724ec5e65bdda)) + +### Contributors to this release + +- avatar [Lev Pachmanov](https://github.com/levpachmanov "+47/-11 (#6543 )") +- avatar [Đỗ Trọng Hải](https://github.com/hainenber "+49/-4 (#6539 )") + +## [1.7.3](https://github.com/axios/axios/compare/v1.7.2...v1.7.3) (2024-08-01) + +### Bug Fixes + +- **adapter:** fix progress event emitting; ([#6518](https://github.com/axios/axios/issues/6518)) ([e3c76fc](https://github.com/axios/axios/commit/e3c76fc9bdd03aa4d98afaf211df943e2031453f)) +- **fetch:** fix withCredentials request config ([#6505](https://github.com/axios/axios/issues/6505)) ([85d4d0e](https://github.com/axios/axios/commit/85d4d0ea0aae91082f04e303dec46510d1b4e787)) +- **xhr:** return original config on errors from XHR adapter ([#6515](https://github.com/axios/axios/issues/6515)) ([8966ee7](https://github.com/axios/axios/commit/8966ee7ea62ecbd6cfb39a905939bcdab5cf6388)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+211/-159 (#6518 #6519 )") +- avatar [Valerii Sidorenko](https://github.com/ValeraS "+3/-3 (#6515 )") +- avatar [prianYu](https://github.com/prianyu "+2/-2 (#6505 )") + +## [1.7.2](https://github.com/axios/axios/compare/v1.7.1...v1.7.2) (2024-05-21) + +### Bug Fixes + +- **fetch:** enhance fetch API detection; ([#6413](https://github.com/axios/axios/issues/6413)) ([4f79aef](https://github.com/axios/axios/commit/4f79aef81b7c4644328365bfc33acf0a9ef595bc)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+3/-3 (#6413 )") + +## [1.7.1](https://github.com/axios/axios/compare/v1.7.0...v1.7.1) (2024-05-20) + +### Bug Fixes + +- **fetch:** fixed ReferenceError issue when TextEncoder is not available in the environment; ([#6410](https://github.com/axios/axios/issues/6410)) ([733f15f](https://github.com/axios/axios/commit/733f15fe5bd2d67e1fadaee82e7913b70d45dc5e)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+14/-9 (#6410 )") + +# [1.7.0](https://github.com/axios/axios/compare/v1.7.0-beta.2...v1.7.0) (2024-05-19) + +### Features + +- **adapter:** add fetch adapter; ([#6371](https://github.com/axios/axios/issues/6371)) ([a3ff99b](https://github.com/axios/axios/commit/a3ff99b59d8ec2ab5dd049e68c043617a4072e42)) + +### Bug Fixes + +- **core/axios:** handle un-writable error stack ([#6362](https://github.com/axios/axios/issues/6362)) ([81e0455](https://github.com/axios/axios/commit/81e0455b7b57fbaf2be16a73ebe0e6591cc6d8f9)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+1015/-127 (#6371 )") +- avatar [Jay](https://github.com/jasonsaayman "+30/-14 ()") +- avatar [Alexandre ABRIOUX](https://github.com/alexandre-abrioux "+56/-6 (#6362 )") + +# [1.7.0-beta.2](https://github.com/axios/axios/compare/v1.7.0-beta.1...v1.7.0-beta.2) (2024-05-19) + +### Bug Fixes + +- **fetch:** capitalize HTTP method names; ([#6395](https://github.com/axios/axios/issues/6395)) ([ad3174a](https://github.com/axios/axios/commit/ad3174a3515c3c2573f4bcb94818d582826f3914)) +- **fetch:** fix & optimize progress capturing for cases when the request data has a nullish value or zero data length ([#6400](https://github.com/axios/axios/issues/6400)) ([95a3e8e](https://github.com/axios/axios/commit/95a3e8e346cfd6a5548e171f2341df3235d0e26b)) +- **fetch:** fix headers getting from a stream response; ([#6401](https://github.com/axios/axios/issues/6401)) ([870e0a7](https://github.com/axios/axios/commit/870e0a76f60d0094774a6a63fa606eec52a381af)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+99/-46 (#6405 #6404 #6401 #6400 #6395 )") + +# [1.7.0-beta.1](https://github.com/axios/axios/compare/v1.7.0-beta.0...v1.7.0-beta.1) (2024-05-07) + +### Bug Fixes + +- **core/axios:** handle un-writable error stack ([#6362](https://github.com/axios/axios/issues/6362)) ([81e0455](https://github.com/axios/axios/commit/81e0455b7b57fbaf2be16a73ebe0e6591cc6d8f9)) +- **fetch:** fix cases when ReadableStream or Response.body are not available; ([#6377](https://github.com/axios/axios/issues/6377)) ([d1d359d](https://github.com/axios/axios/commit/d1d359da347704e8b28d768e61515a3e96c5b072)) +- **fetch:** treat fetch-related TypeError as an AxiosError.ERR_NETWORK error; ([#6380](https://github.com/axios/axios/issues/6380)) ([bb5f9a5](https://github.com/axios/axios/commit/bb5f9a5ab768452de9e166dc28d0ffc234245ef1)) + +### Contributors to this release + +- avatar [Alexandre ABRIOUX](https://github.com/alexandre-abrioux "+56/-6 (#6362 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+42/-17 (#6380 #6377 )") + +# [1.7.0-beta.0](https://github.com/axios/axios/compare/v1.6.8...v1.7.0-beta.0) (2024-04-28) + +### Features + +- **adapter:** add fetch adapter; ([#6371](https://github.com/axios/axios/issues/6371)) ([a3ff99b](https://github.com/axios/axios/commit/a3ff99b59d8ec2ab5dd049e68c043617a4072e42)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+1015/-127 (#6371 )") +- avatar [Jay](https://github.com/jasonsaayman "+30/-14 ()") + +## [1.6.8](https://github.com/axios/axios/compare/v1.6.7...v1.6.8) (2024-03-15) + +### Bug Fixes + +- **AxiosHeaders:** fix AxiosHeaders conversion to an object during config merging ([#6243](https://github.com/axios/axios/issues/6243)) ([2656612](https://github.com/axios/axios/commit/2656612bc10fe2757e9832b708ed773ab340b5cb)) +- **import:** use named export for EventEmitter; ([7320430](https://github.com/axios/axios/commit/7320430aef2e1ba2b89488a0eaf42681165498b1)) +- **vulnerability:** update follow-redirects to 1.15.6 ([#6300](https://github.com/axios/axios/issues/6300)) ([8786e0f](https://github.com/axios/axios/commit/8786e0ff55a8c68d4ca989801ad26df924042e27)) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+4572/-3446 (#6238 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+30/-0 (#6231 )") +- avatar [Mitchell](https://github.com/Creaous "+9/-9 (#6300 )") +- avatar [Emmanuel](https://github.com/mannoeu "+2/-2 (#6196 )") +- avatar [Lucas Keller](https://github.com/ljkeller "+3/-0 (#6194 )") +- avatar [Aditya Mogili](https://github.com/ADITYA-176 "+1/-1 ()") +- avatar [Miroslav Petrov](https://github.com/petrovmiroslav "+1/-1 (#6243 )") + +## [1.6.7](https://github.com/axios/axios/compare/v1.6.6...v1.6.7) (2024-01-25) + +### Bug Fixes + +- capture async stack only for rejections with native error objects; ([#6203](https://github.com/axios/axios/issues/6203)) ([1a08f90](https://github.com/axios/axios/commit/1a08f90f402336e4d00e9ee82f211c6adb1640b0)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+30/-26 (#6203 )") +- avatar [zhoulixiang](https://github.com/zh-lx "+0/-3 (#6186 )") + +## [1.6.6](https://github.com/axios/axios/compare/v1.6.5...v1.6.6) (2024-01-24) + +### Bug Fixes + +- fixed missed dispatchBeforeRedirect argument ([#5778](https://github.com/axios/axios/issues/5778)) ([a1938ff](https://github.com/axios/axios/commit/a1938ff073fcb0f89011f001dfbc1fa1dc995e39)) +- wrap errors to improve async stack trace ([#5987](https://github.com/axios/axios/issues/5987)) ([123f354](https://github.com/axios/axios/commit/123f354b920f154a209ea99f76b7b2ef3d9ebbab)) + +### Contributors to this release + +- avatar [Ilya Priven](https://github.com/ikonst "+91/-8 (#5987 )") +- avatar [Zao Soula](https://github.com/zaosoula "+6/-6 (#5778 )") + +## [1.6.5](https://github.com/axios/axios/compare/v1.6.4...v1.6.5) (2024-01-05) + +### Bug Fixes + +- **ci:** refactor notify action as a job of publish action; ([#6176](https://github.com/axios/axios/issues/6176)) ([0736f95](https://github.com/axios/axios/commit/0736f95ce8776366dc9ca569f49ba505feb6373c)) +- **dns:** fixed lookup error handling; ([#6175](https://github.com/axios/axios/issues/6175)) ([f4f2b03](https://github.com/axios/axios/commit/f4f2b039dd38eb4829e8583caede4ed6d2dd59be)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+41/-6 (#6176 #6175 )") +- avatar [Jay](https://github.com/jasonsaayman "+6/-1 ()") + +## [1.6.4](https://github.com/axios/axios/compare/v1.6.3...v1.6.4) (2024-01-03) + +### Bug Fixes + +- **security:** fixed formToJSON prototype pollution vulnerability; ([#6167](https://github.com/axios/axios/issues/6167)) ([3c0c11c](https://github.com/axios/axios/commit/3c0c11cade045c4412c242b5727308cff9897a0e)) +- **security:** fixed security vulnerability in follow-redirects ([#6163](https://github.com/axios/axios/issues/6163)) ([75af1cd](https://github.com/axios/axios/commit/75af1cdff5b3a6ca3766d3d3afbc3115bb0811b8)) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+34/-6 ()") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+34/-3 (#6172 #6167 )") +- avatar [Guy Nesher](https://github.com/gnesher "+10/-10 (#6163 )") + +## [1.6.3](https://github.com/axios/axios/compare/v1.6.2...v1.6.3) (2023-12-26) + +### Bug Fixes + +- Regular Expression Denial of Service (ReDoS) ([#6132](https://github.com/axios/axios/issues/6132)) ([5e7ad38](https://github.com/axios/axios/commit/5e7ad38fb0f819fceb19fb2ee5d5d38f56aa837d)) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+15/-6 (#6145 )") +- avatar [Willian Agostini](https://github.com/WillianAgostini "+17/-2 (#6132 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+3/-0 (#6084 )") + +## [1.6.2](https://github.com/axios/axios/compare/v1.6.1...v1.6.2) (2023-11-14) + +### Features + +- **withXSRFToken:** added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ([#6046](https://github.com/axios/axios/issues/6046)) ([cff9967](https://github.com/axios/axios/commit/cff996779b272a5e94c2b52f5503ccf668bc42dc)) + +### PRs + +- feat(withXSRFToken): added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ( [#6046](https://api.github.com/repos/axios/axios/pulls/6046) ) + +``` + +📢 This PR added 'withXSRFToken' option as a replacement for old withCredentials behaviour. +You should now use withXSRFToken along with withCredential to get the old behavior. +This functionality is considered as a fix. +``` + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+271/-146 (#6081 #6080 #6079 #6078 #6046 #6064 #6063 )") +- avatar [Ng Choon Khon (CK)](https://github.com/ckng0221 "+4/-4 (#6073 )") +- avatar [Muhammad Noman](https://github.com/mnomanmemon "+2/-2 (#6048 )") + +## [1.6.1](https://github.com/axios/axios/compare/v1.6.0...v1.6.1) (2023-11-08) + +### Bug Fixes + +- **formdata:** fixed content-type header normalization for non-standard browser environments; ([#6056](https://github.com/axios/axios/issues/6056)) ([dd465ab](https://github.com/axios/axios/commit/dd465ab22bbfa262c6567be6574bf46a057d5288)) +- **platform:** fixed emulated browser detection in node.js environment; ([#6055](https://github.com/axios/axios/issues/6055)) ([3dc8369](https://github.com/axios/axios/commit/3dc8369e505e32a4e12c22f154c55fd63ac67fbb)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+432/-65 (#6059 #6056 #6055 )") +- avatar [Fabian Meyer](https://github.com/meyfa "+5/-2 (#5835 )") + +### PRs + +- feat(withXSRFToken): added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ( [#6046](https://api.github.com/repos/axios/axios/pulls/6046) ) + +``` + +📢 This PR added 'withXSRFToken' option as a replacement for old withCredentials behaviour. +You should now use withXSRFToken along with withCredential to get the old behavior. +This functionality is considered as a fix. +``` + +# [1.6.0](https://github.com/axios/axios/compare/v1.5.1...v1.6.0) (2023-10-26) + +### Bug Fixes + +- **CSRF:** fixed CSRF vulnerability CVE-2023-45857 ([#6028](https://github.com/axios/axios/issues/6028)) ([96ee232](https://github.com/axios/axios/commit/96ee232bd3ee4de2e657333d4d2191cd389e14d0)) +- **dns:** fixed lookup function decorator to work properly in node v20; ([#6011](https://github.com/axios/axios/issues/6011)) ([5aaff53](https://github.com/axios/axios/commit/5aaff532a6b820bb9ab6a8cd0f77131b47e2adb8)) +- **types:** fix AxiosHeaders types; ([#5931](https://github.com/axios/axios/issues/5931)) ([a1c8ad0](https://github.com/axios/axios/commit/a1c8ad008b3c13d53e135bbd0862587fb9d3fc09)) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+449/-114 (#6032 #6021 #6011 #5932 #5931 )") +- avatar [Valentin Panov](https://github.com/valentin-panov "+4/-4 (#6028 )") +- avatar [Rinku Chaudhari](https://github.com/therealrinku "+1/-1 (#5889 )") + +## [1.5.1](https://github.com/axios/axios/compare/v1.5.0...v1.5.1) (2023-09-26) + +### Bug Fixes + +- **adapters:** improved adapters loading logic to have clear error messages; ([#5919](https://github.com/axios/axios/issues/5919)) ([e410779](https://github.com/axios/axios/commit/e4107797a7a1376f6209fbecfbbce73d3faa7859)) +- **formdata:** fixed automatic addition of the `Content-Type` header for FormData in non-browser environments; ([#5917](https://github.com/axios/axios/issues/5917)) ([bc9af51](https://github.com/axios/axios/commit/bc9af51b1886d1b3529617702f2a21a6c0ed5d92)) +- **headers:** allow `content-encoding` header to handle case-insensitive values ([#5890](https://github.com/axios/axios/issues/5890)) ([#5892](https://github.com/axios/axios/issues/5892)) ([4c89f25](https://github.com/axios/axios/commit/4c89f25196525e90a6e75eda9cb31ae0a2e18acd)) +- **types:** removed duplicated code ([9e62056](https://github.com/axios/axios/commit/9e6205630e1c9cf863adf141c0edb9e6d8d4b149)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+89/-18 (#5919 #5917 )") +- avatar [David Dallas](https://github.com/DavidJDallas "+11/-5 ()") +- avatar [Sean Sattler](https://github.com/fb-sean "+2/-8 ()") +- avatar [Mustafa Ateş Uzun](https://github.com/0o001 "+4/-4 ()") +- avatar [Przemyslaw Motacki](https://github.com/sfc-gh-pmotacki "+2/-1 (#5892 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+1/-1 ()") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +# [1.5.0](https://github.com/axios/axios/compare/v1.4.0...v1.5.0) (2023-08-26) + +### Bug Fixes + +- **adapter:** make adapter loading error more clear by using platform-specific adapters explicitly ([#5837](https://github.com/axios/axios/issues/5837)) ([9a414bb](https://github.com/axios/axios/commit/9a414bb6c81796a95c6c7fe668637825458e8b6d)) +- **dns:** fixed `cacheable-lookup` integration; ([#5836](https://github.com/axios/axios/issues/5836)) ([b3e327d](https://github.com/axios/axios/commit/b3e327dcc9277bdce34c7ef57beedf644b00d628)) +- **headers:** added support for setting header names that overlap with class methods; ([#5831](https://github.com/axios/axios/issues/5831)) ([d8b4ca0](https://github.com/axios/axios/commit/d8b4ca0ea5f2f05efa4edfe1e7684593f9f68273)) +- **headers:** fixed common Content-Type header merging; ([#5832](https://github.com/axios/axios/issues/5832)) ([8fda276](https://github.com/axios/axios/commit/8fda2766b1e6bcb72c3fabc146223083ef13ce17)) + +### Features + +- export getAdapter function ([#5324](https://github.com/axios/axios/issues/5324)) ([ca73eb8](https://github.com/axios/axios/commit/ca73eb878df0ae2dace81fe3a7f1fb5986231bf1)) +- **export:** export adapters without `unsafe` prefix ([#5839](https://github.com/axios/axios/issues/5839)) ([1601f4a](https://github.com/axios/axios/commit/1601f4a27a81ab47fea228f1e244b2c4e3ce28bf)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+66/-29 (#5839 #5837 #5836 #5832 #5831 )") +- avatar [夜葬](https://github.com/geekact "+42/-0 (#5324 )") +- avatar [Jonathan Budiman](https://github.com/JBudiman00 "+30/-0 (#5788 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+3/-5 (#5791 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +# [1.4.0](https://github.com/axios/axios/compare/v1.3.6...v1.4.0) (2023-04-27) + +### Bug Fixes + +- **formdata:** add `multipart/form-data` content type for FormData payload on custom client environments; ([#5678](https://github.com/axios/axios/issues/5678)) ([bbb61e7](https://github.com/axios/axios/commit/bbb61e70cb1185adfb1cbbb86eaf6652c48d89d1)) +- **package:** export package internals with unsafe path prefix; ([#5677](https://github.com/axios/axios/issues/5677)) ([df38c94](https://github.com/axios/axios/commit/df38c949f26414d88ba29ec1e353c4d4f97eaf09)) + +### Features + +- **dns:** added support for a custom lookup function; ([#5339](https://github.com/axios/axios/issues/5339)) ([2701911](https://github.com/axios/axios/commit/2701911260a1faa5cc5e1afe437121b330a3b7bb)) +- **types:** export `AxiosHeaderValue` type. ([#5525](https://github.com/axios/axios/issues/5525)) ([726f1c8](https://github.com/axios/axios/commit/726f1c8e00cffa0461a8813a9bdcb8f8b9d762cf)) + +### Performance Improvements + +- **merge-config:** optimize mergeConfig performance by avoiding duplicate key visits; ([#5679](https://github.com/axios/axios/issues/5679)) ([e6f7053](https://github.com/axios/axios/commit/e6f7053bf1a3e87cf1f9da8677e12e3fe829d68e)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+151/-16 (#5684 #5339 #5679 #5678 #5677 )") +- avatar [Arthur Fiorette](https://github.com/arthurfiorette "+19/-19 (#5525 )") +- avatar [PIYUSH NEGI](https://github.com/npiyush97 "+2/-18 (#5670 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.6](https://github.com/axios/axios/compare/v1.3.5...v1.3.6) (2023-04-19) + +### Bug Fixes + +- **types:** added transport to RawAxiosRequestConfig ([#5445](https://github.com/axios/axios/issues/5445)) ([6f360a2](https://github.com/axios/axios/commit/6f360a2531d8d70363fd9becef6a45a323f170e2)) +- **utils:** make isFormData detection logic stricter to avoid unnecessary calling of the `toString` method on the target; ([#5661](https://github.com/axios/axios/issues/5661)) ([aa372f7](https://github.com/axios/axios/commit/aa372f7306295dfd1100c1c2c77ce95c95808e76)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+48/-10 (#5665 #5661 #5663 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+2/-0 (#5445 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.5](https://github.com/axios/axios/compare/v1.3.4...v1.3.5) (2023-04-05) + +### Bug Fixes + +- **headers:** fixed isValidHeaderName to support full list of allowed characters; ([#5584](https://github.com/axios/axios/issues/5584)) ([e7decef](https://github.com/axios/axios/commit/e7decef6a99f4627e27ed9ea5b00ce8e201c3841)) +- **params:** re-added the ability to set the function as `paramsSerializer` config; ([#5633](https://github.com/axios/axios/issues/5633)) ([a56c866](https://github.com/axios/axios/commit/a56c8661209d5ce5a645a05f294a0e08a6c1f6b3)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+28/-10 (#5633 #5584 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.4](https://github.com/axios/axios/compare/v1.3.3...v1.3.4) (2023-02-22) + +### Bug Fixes + +- **blob:** added a check to make sure the Blob class is available in the browser's global scope; ([#5548](https://github.com/axios/axios/issues/5548)) ([3772c8f](https://github.com/axios/axios/commit/3772c8fe74112a56e3e9551f894d899bc3a9443a)) +- **http:** fixed regression bug when handling synchronous errors inside the adapter; ([#5564](https://github.com/axios/axios/issues/5564)) ([a3b246c](https://github.com/axios/axios/commit/a3b246c9de5c3bc4b5a742e15add55b375479451)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+38/-26 (#5564 )") +- avatar [lcysgsg](https://github.com/lcysgsg "+4/-0 (#5548 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+3/-0 (#5444 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.3](https://github.com/axios/axios/compare/v1.3.2...v1.3.3) (2023-02-13) + +### Bug Fixes + +- **formdata:** added a check to make sure the FormData class is available in the browser's global scope; ([#5545](https://github.com/axios/axios/issues/5545)) ([a6dfa72](https://github.com/axios/axios/commit/a6dfa72010db5ad52db8bd13c0f98e537e8fd05d)) +- **formdata:** fixed setting NaN as Content-Length for form payload in some cases; ([#5535](https://github.com/axios/axios/issues/5535)) ([c19f7bf](https://github.com/axios/axios/commit/c19f7bf770f90ae8307f4ea3104f227056912da1)) +- **headers:** fixed the filtering logic of the clear method; ([#5542](https://github.com/axios/axios/issues/5542)) ([ea87ebf](https://github.com/axios/axios/commit/ea87ebfe6d1699af072b9e7cd40faf8f14b0ab93)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+11/-7 (#5545 #5535 #5542 )") +- avatar [陈若枫](https://github.com/ruofee "+2/-2 (#5467 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.2](https://github.com/axios/axios/compare/v1.3.1...v1.3.2) (2023-02-03) + +### Bug Fixes + +- **http:** treat http://localhost as base URL for relative paths to avoid `ERR_INVALID_URL` error; ([#5528](https://github.com/axios/axios/issues/5528)) ([128d56f](https://github.com/axios/axios/commit/128d56f4a0fb8f5f2ed6e0dd80bc9225fee9538c)) +- **http:** use explicit import instead of TextEncoder global; ([#5530](https://github.com/axios/axios/issues/5530)) ([6b3c305](https://github.com/axios/axios/commit/6b3c305fc40c56428e0afabedc6f4d29c2830f6f)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+2/-1 (#5530 #5528 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.1](https://github.com/axios/axios/compare/v1.3.0...v1.3.1) (2023-02-01) + +### Bug Fixes + +- **formdata:** add hotfix to use the asynchronous API to compute the content-length header value; ([#5521](https://github.com/axios/axios/issues/5521)) ([96d336f](https://github.com/axios/axios/commit/96d336f527619f21da012fe1f117eeb53e5a2120)) +- **serializer:** fixed serialization of array-like objects; ([#5518](https://github.com/axios/axios/issues/5518)) ([08104c0](https://github.com/axios/axios/commit/08104c028c0f9353897b1b6691d74c440fd0c32d)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+27/-8 (#5521 #5518 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +# [1.3.0](https://github.com/axios/axios/compare/v1.2.6...v1.3.0) (2023-01-31) + +### Bug Fixes + +- **headers:** fixed & optimized clear method; ([#5507](https://github.com/axios/axios/issues/5507)) ([9915635](https://github.com/axios/axios/commit/9915635c69d0ab70daca5738488421f67ca60959)) +- **http:** add zlib headers if missing ([#5497](https://github.com/axios/axios/issues/5497)) ([65e8d1e](https://github.com/axios/axios/commit/65e8d1e28ce829f47a837e45129730e541950d3c)) + +### Features + +- **fomdata:** added support for spec-compliant FormData & Blob types; ([#5316](https://github.com/axios/axios/issues/5316)) ([6ac574e](https://github.com/axios/axios/commit/6ac574e00a06731288347acea1e8246091196953)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+352/-67 (#5514 #5512 #5510 #5509 #5508 #5316 #5507 )") +- avatar [ItsNotGoodName](https://github.com/ItsNotGoodName "+43/-2 (#5497 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.6](https://github.com/axios/axios/compare/v1.2.5...v1.2.6) (2023-01-28) + +### Bug Fixes + +- **headers:** added missed Authorization accessor; ([#5502](https://github.com/axios/axios/issues/5502)) ([342c0ba](https://github.com/axios/axios/commit/342c0ba9a16ea50f5ed7d2366c5c1a2c877e3f26)) +- **types:** fixed `CommonRequestHeadersList` & `CommonResponseHeadersList` types to be private in commonJS; ([#5503](https://github.com/axios/axios/issues/5503)) ([5a3d0a3](https://github.com/axios/axios/commit/5a3d0a3234d77361a1bc7cedee2da1e11df08e2c)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+24/-9 (#5503 #5502 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.5](https://github.com/axios/axios/compare/v1.2.4...v1.2.5) (2023-01-26) + +### Bug Fixes + +- **types:** fixed AxiosHeaders to handle spread syntax by making all methods non-enumerable; ([#5499](https://github.com/axios/axios/issues/5499)) ([580f1e8](https://github.com/axios/axios/commit/580f1e8033a61baa38149d59fd16019de3932c22)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+82/-54 (#5499 )") +- ![avatar](https://avatars.githubusercontent.com/u/20516159?v=4&s=16) [Elliot Ford](https://github.com/EFord36 "+1/-1 (#5462 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.4](https://github.com/axios/axios/compare/v1.2.3...v1.2.4) (2023-01-22) + +### Bug Fixes + +- **types:** renamed `RawAxiosRequestConfig` back to `AxiosRequestConfig`; ([#5486](https://github.com/axios/axios/issues/5486)) ([2a71f49](https://github.com/axios/axios/commit/2a71f49bc6c68495fa419003a3107ed8bd703ad0)) +- **types:** fix `AxiosRequestConfig` generic; ([#5478](https://github.com/axios/axios/issues/5478)) ([9bce81b](https://github.com/axios/axios/commit/186ea062da8b7d578ae78b1a5c220986b9bce81b)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+242/-108 (#5486 #5482 )") +- ![avatar](https://avatars.githubusercontent.com/u/9430821?v=4&s=16) [Daniel Hillmann](https://github.com/hilleer "+1/-1 (#5478 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.3](https://github.com/axios/axios/compare/1.2.2...1.2.3) (2023-01-10) + +### Bug Fixes + +- **types:** fixed AxiosRequestConfig header interface by refactoring it to RawAxiosRequestConfig; ([#5420](https://github.com/axios/axios/issues/5420)) ([0811963](https://github.com/axios/axios/commit/08119634a22f1d5b19f5c9ea0adccb6d3eebc3bc)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+938/-442 (#5456 #5455 #5453 #5451 #5449 #5447 #5446 #5443 #5442 #5439 #5420 )") + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.2] - 2022-12-29 + +### Fixed + +- fix(ci): fix release script inputs [#5392](https://github.com/axios/axios/pull/5392) +- fix(ci): prerelease scipts [#5377](https://github.com/axios/axios/pull/5377) +- fix(ci): release scripts [#5376](https://github.com/axios/axios/pull/5376) +- fix(ci): typescript tests [#5375](https://github.com/axios/axios/pull/5375) +- fix: Brotli decompression [#5353](https://github.com/axios/axios/pull/5353) +- fix: add missing HttpStatusCode [#5345](https://github.com/axios/axios/pull/5345) + +### Chores + +- chore(ci): set conventional-changelog header config [#5406](https://github.com/axios/axios/pull/5406) +- chore(ci): fix automatic contributors resolving [#5403](https://github.com/axios/axios/pull/5403) +- chore(ci): improved logging for the contributors list generator [#5398](https://github.com/axios/axios/pull/5398) +- chore(ci): fix release action [#5397](https://github.com/axios/axios/pull/5397) +- chore(ci): fix version bump script by adding bump argument for target version [#5393](https://github.com/axios/axios/pull/5393) +- chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 [#5342](https://github.com/axios/axios/pull/5342) +- chore(ci): GitHub Actions Release script [#5384](https://github.com/axios/axios/pull/5384) +- chore(ci): release scripts [#5364](https://github.com/axios/axios/pull/5364) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- ![avatar](https://avatars.githubusercontent.com/u/1652293?v=4&s=16) [Winnie](https://github.com/winniehell) + +## [1.2.1] - 2022-12-05 + +### Changed + +- feat(exports): export mergeConfig [#5151](https://github.com/axios/axios/pull/5151) + +### Fixed + +- fix(CancelledError): include config [#4922](https://github.com/axios/axios/pull/4922) +- fix(general): removing multiple/trailing/leading whitespace [#5022](https://github.com/axios/axios/pull/5022) +- fix(headers): decompression for responses without Content-Length header [#5306](https://github.com/axios/axios/pull/5306) +- fix(webWorker): exception to sending form data in web worker [#5139](https://github.com/axios/axios/pull/5139) + +### Refactors + +- refactor(types): AxiosProgressEvent.event type to any [#5308](https://github.com/axios/axios/pull/5308) +- refactor(types): add missing types for static AxiosError.from method [#4956](https://github.com/axios/axios/pull/4956) + +### Chores + +- chore(docs): remove README link to non-existent upgrade guide [#5307](https://github.com/axios/axios/pull/5307) +- chore(docs): typo in issue template name [#5159](https://github.com/axios/axios/pull/5159) + +### Contributors to this release + +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Zachary Lysobey](https://github.com/zachlysobey) +- [Kevin Ennis](https://github.com/kevincennis) +- [Philipp Loose](https://github.com/phloose) +- [secondl1ght](https://github.com/secondl1ght) +- [wenzheng](https://github.com/0x30) +- [Ivan Barsukov](https://github.com/ovarn) +- [Arthur Fiorette](https://github.com/arthurfiorette) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.0] - 2022-11-10 + +### Changed + +- changed: refactored module exports [#5162](https://github.com/axios/axios/pull/5162) +- change: re-added support for loading Axios with require('axios').default [#5225](https://github.com/axios/axios/pull/5225) + +### Fixed + +- fix: improve AxiosHeaders class [#5224](https://github.com/axios/axios/pull/5224) +- fix: TypeScript type definitions for commonjs [#5196](https://github.com/axios/axios/pull/5196) +- fix: type definition of use method on AxiosInterceptorManager to match the the README [#5071](https://github.com/axios/axios/pull/5071) +- fix: \_\_dirname is not defined in the sandbox [#5269](https://github.com/axios/axios/pull/5269) +- fix: AxiosError.toJSON method to avoid circular references [#5247](https://github.com/axios/axios/pull/5247) +- fix: Z_BUF_ERROR when content-encoding is set but the response body is empty [#5250](https://github.com/axios/axios/pull/5250) + +### Refactors + +- refactor: allowing adapters to be loaded by name [#5277](https://github.com/axios/axios/pull/5277) + +### Chores + +- chore: force CI restart [#5243](https://github.com/axios/axios/pull/5243) +- chore: update ECOSYSTEM.md [#5077](https://github.com/axios/axios/pull/5077) +- chore: update get/index.html [#5116](https://github.com/axios/axios/pull/5116) +- chore: update Sandbox UI/UX [#5205](https://github.com/axios/axios/pull/5205) +- chore:(actions): remove git credentials after checkout [#5235](https://github.com/axios/axios/pull/5235) +- chore(actions): bump actions/dependency-review-action from 2 to 3 [#5266](https://github.com/axios/axios/pull/5266) +- chore(packages): bump loader-utils from 1.4.1 to 1.4.2 [#5295](https://github.com/axios/axios/pull/5295) +- chore(packages): bump engine.io from 6.2.0 to 6.2.1 [#5294](https://github.com/axios/axios/pull/5294) +- chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 [#5241](https://github.com/axios/axios/pull/5241) +- chore(packages): bump loader-utils from 1.4.0 to 1.4.1 [#5245](https://github.com/axios/axios/pull/5245) +- chore(docs): update Resources links in README [#5119](https://github.com/axios/axios/pull/5119) +- chore(docs): update the link for JSON url [#5265](https://github.com/axios/axios/pull/5265) +- chore(docs): fix broken links [#5218](https://github.com/axios/axios/pull/5218) +- chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md [#5170](https://github.com/axios/axios/pull/5170) +- chore(docs): typo fix line #856 and #920 [#5194](https://github.com/axios/axios/pull/5194) +- chore(docs): typo fix #800 [#5193](https://github.com/axios/axios/pull/5193) +- chore(docs): fix typos [#5184](https://github.com/axios/axios/pull/5184) +- chore(docs): fix punctuation in README.md [#5197](https://github.com/axios/axios/pull/5197) +- chore(docs): update readme in the Handling Errors section - issue reference #5260 [#5261](https://github.com/axios/axios/pull/5261) +- chore: remove \b from filename [#5207](https://github.com/axios/axios/pull/5207) +- chore(docs): update CHANGELOG.md [#5137](https://github.com/axios/axios/pull/5137) +- chore: add sideEffects false to package.json [#5025](https://github.com/axios/axios/pull/5025) + +### Contributors to this release + +- [Maddy Miller](https://github.com/me4502) +- [Amit Saini](https://github.com/amitsainii) +- [ecyrbe](https://github.com/ecyrbe) +- [Ikko Ashimine](https://github.com/eltociear) +- [Geeth Gunnampalli](https://github.com/thetechie7) +- [Shreem Asati](https://github.com/shreem-123) +- [Frieder Bluemle](https://github.com/friederbluemle) +- [윤세영](https://github.com/yunseyeong) +- [Claudio Busatto](https://github.com/cjcbusatto) +- [Remco Haszing](https://github.com/remcohaszing) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Csaba Maulis](https://github.com/om4csaba) +- [MoPaMo](https://github.com/MoPaMo) +- [Daniel Fjeldstad](https://github.com/w3bdesign) +- [Adrien Brunet](https://github.com/adrien-may) +- [Frazer Smith](https://github.com/Fdawgs) +- [HaiTao](https://github.com/836334258) +- [AZM](https://github.com/aziyatali) +- [relbns](https://github.com/relbns) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.3] - 2022-10-15 + +### Added + +- Added custom params serializer support [#5113](https://github.com/axios/axios/pull/5113) + +### Fixed + +- Fixed top-level export to keep them in-line with static properties [#5109](https://github.com/axios/axios/pull/5109) +- Stopped including null values to query string. [#5108](https://github.com/axios/axios/pull/5108) +- Restored proxy config backwards compatibility with 0.x [#5097](https://github.com/axios/axios/pull/5097) +- Added back AxiosHeaders in AxiosHeaderValue [#5103](https://github.com/axios/axios/pull/5103) +- Pin CDN install instructions to a specific version [#5060](https://github.com/axios/axios/pull/5060) +- Handling of array values fixed for AxiosHeaders [#5085](https://github.com/axios/axios/pull/5085) + +### Chores + +- docs: match badge style, add link to them [#5046](https://github.com/axios/axios/pull/5046) +- chore: fixing comments typo [#5054](https://github.com/axios/axios/pull/5054) +- chore: update issue template [#5061](https://github.com/axios/axios/pull/5061) +- chore: added progress capturing section to the docs; [#5084](https://github.com/axios/axios/pull/5084) + +### Contributors to this release + +- [Jason Saayman](https://github.com/jasonsaayman) +- [scarf](https://github.com/scarf005) +- [Lenz Weber-Tronic](https://github.com/phryneas) +- [Arvindh](https://github.com/itsarvindh) +- [Félix Legrelle](https://github.com/FelixLgr) +- [Patrick Petrovic](https://github.com/ppati000) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [littledian](https://github.com/littledian) +- [ChronosMasterOfAllTime](https://github.com/ChronosMasterOfAllTime) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.2] - 2022-10-07 + +### Fixed + +- Fixed broken exports for UMD builds. + +### Contributors to this release + +- [Jason Saayman](https://github.com/jasonsaayman) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.1] - 2022-10-07 + +### Fixed + +- Fixed broken exports for common js. This fix breaks a prior fix, I will fix both issues ASAP but the commonJS use is more impactful. + +### Contributors to this release + +- [Jason Saayman](https://github.com/jasonsaayman) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.0] - 2022-10-06 + +### Fixed + +- Fixed missing exports in type definition index.d.ts [#5003](https://github.com/axios/axios/pull/5003) +- Fixed query params composing [#5018](https://github.com/axios/axios/pull/5018) +- Fixed GenericAbortSignal interface by making it more generic [#5021](https://github.com/axios/axios/pull/5021) +- Fixed adding "clear" to AxiosInterceptorManager [#5010](https://github.com/axios/axios/pull/5010) +- Fixed commonjs & umd exports [#5030](https://github.com/axios/axios/pull/5030) +- Fixed inability to access response headers when using axios 1.x with Jest [#5036](https://github.com/axios/axios/pull/5036) + +### Contributors to this release + +- [Trim21](https://github.com/trim21) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [shingo.sasaki](https://github.com/s-sasaki-0529) +- [Ivan Pepelko](https://github.com/ivanpepelko) +- [Richard Kořínek](https://github.com/risa) + +### PRs + +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) + +``` + +⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.0.0] - 2022-10-04 + +### Added + +- Added stack trace to AxiosError [#4624](https://github.com/axios/axios/pull/4624) +- Add AxiosError to AxiosStatic [#4654](https://github.com/axios/axios/pull/4654) +- Replaced Rollup as our build runner [#4596](https://github.com/axios/axios/pull/4596) +- Added generic TS types for the exposed toFormData helper [#4668](https://github.com/axios/axios/pull/4668) +- Added listen callback function [#4096](https://github.com/axios/axios/pull/4096) +- Added instructions for installing using PNPM [#4207](https://github.com/axios/axios/pull/4207) +- Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill [#4229](https://github.com/axios/axios/pull/4229) +- Added axios-url-template in ECOSYSTEM.md [#4238](https://github.com/axios/axios/pull/4238) +- Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an axios instance [#4248](https://github.com/axios/axios/pull/4248) +- Added react hook plugin [#4319](https://github.com/axios/axios/pull/4319) +- Adding HTTP status code for transformResponse [#4580](https://github.com/axios/axios/pull/4580) +- Added blob to the list of protocols supported by the browser [#4678](https://github.com/axios/axios/pull/4678) +- Resolving proxy from env on redirect [#4436](https://github.com/axios/axios/pull/4436) +- Added enhanced toFormData implementation with additional options [4704](https://github.com/axios/axios/pull/4704) +- Adding Canceler parameters config and request [#4711](https://github.com/axios/axios/pull/4711) +- Added automatic payload serialization to application/x-www-form-urlencoded [#4714](https://github.com/axios/axios/pull/4714) +- Added the ability for webpack users to overwrite built-ins [#4715](https://github.com/axios/axios/pull/4715) +- Added string[] to AxiosRequestHeaders type [#4322](https://github.com/axios/axios/pull/4322) +- Added the ability for the url-encoded-form serializer to respect the formSerializer config [#4721](https://github.com/axios/axios/pull/4721) +- Added isCancel type assert [#4293](https://github.com/axios/axios/pull/4293) +- Added data URL support for node.js [#4725](https://github.com/axios/axios/pull/4725) +- Adding types for progress event callbacks [#4675](https://github.com/axios/axios/pull/4675) +- URL params serializer [#4734](https://github.com/axios/axios/pull/4734) +- Added axios.formToJSON method [#4735](https://github.com/axios/axios/pull/4735) +- Bower platform add data protocol [#4804](https://github.com/axios/axios/pull/4804) +- Use WHATWG URL API instead of url.parse() [#4852](https://github.com/axios/axios/pull/4852) +- Add ENUM containing Http Status Codes to typings [#4903](https://github.com/axios/axios/pull/4903) +- Improve typing of timeout in index.d.ts [#4934](https://github.com/axios/axios/pull/4934) + +### Changed + +- Updated AxiosError.config to be optional in the type definition [#4665](https://github.com/axios/axios/pull/4665) +- Updated README emphasizing the URLSearchParam built-in interface over other solutions [#4590](https://github.com/axios/axios/pull/4590) +- Include request and config when creating a CanceledError instance [#4659](https://github.com/axios/axios/pull/4659) +- Changed func-names eslint rule to as-needed [#4492](https://github.com/axios/axios/pull/4492) +- Replacing deprecated substr() with slice() as substr() is deprecated [#4468](https://github.com/axios/axios/pull/4468) +- Updating HTTP links in README.md to use HTTPS [#4387](https://github.com/axios/axios/pull/4387) +- Updated to a better trim() polyfill [#4072](https://github.com/axios/axios/pull/4072) +- Updated types to allow specifying partial default headers on instance create [#4185](https://github.com/axios/axios/pull/4185) +- Expanded isAxiosError types [#4344](https://github.com/axios/axios/pull/4344) +- Updated type definition for axios instance methods [#4224](https://github.com/axios/axios/pull/4224) +- Updated eslint config [#4722](https://github.com/axios/axios/pull/4722) +- Updated Docs [#4742](https://github.com/axios/axios/pull/4742) +- Refactored Axios to use ES2017 [#4787](https://github.com/axios/axios/pull/4787) + +### Deprecated + +- There are multiple deprecations, refactors and fixes provided in this release. Please read through the full release notes to see how this may impact your project and use case. + +### Removed + +- Removed incorrect argument for NetworkError constructor [#4656](https://github.com/axios/axios/pull/4656) +- Removed Webpack [#4596](https://github.com/axios/axios/pull/4596) +- Removed function that transform arguments to array [#4544](https://github.com/axios/axios/pull/4544) + +### Fixed + +- Fixed grammar in README [#4649](https://github.com/axios/axios/pull/4649) +- Fixed code error in README [#4599](https://github.com/axios/axios/pull/4599) +- Optimized the code that checks cancellation [#4587](https://github.com/axios/axios/pull/4587) +- Fix url pointing to defaults.js in README [#4532](https://github.com/axios/axios/pull/4532) +- Use type alias instead of interface for AxiosPromise [#4505](https://github.com/axios/axios/pull/4505) +- Fix some word spelling and lint style in code comments [#4500](https://github.com/axios/axios/pull/4500) +- Edited readme with 3 updated browser icons of Chrome, FireFox and Safari [#4414](https://github.com/axios/axios/pull/4414) +- Bump follow-redirects from 1.14.9 to 1.15.0 [#4673](https://github.com/axios/axios/pull/4673) +- Fixing http tests to avoid hanging when assertions fail [#4435](https://github.com/axios/axios/pull/4435) +- Fix TS definition for AxiosRequestTransformer [#4201](https://github.com/axios/axios/pull/4201) +- Fix grammatical issues in README [#4232](https://github.com/axios/axios/pull/4232) +- Fixing instance.defaults.headers type [#4557](https://github.com/axios/axios/pull/4557) +- Fixed race condition on immediate requests cancellation [#4261](https://github.com/axios/axios/pull/4261) +- Fixing Z_BUF_ERROR when no content [#4701](https://github.com/axios/axios/pull/4701) +- Fixing proxy beforeRedirect regression [#4708](https://github.com/axios/axios/pull/4708) +- Fixed AxiosError status code type [#4717](https://github.com/axios/axios/pull/4717) +- Fixed AxiosError stack capturing [#4718](https://github.com/axios/axios/pull/4718) +- Fixing AxiosRequestHeaders typings [#4334](https://github.com/axios/axios/pull/4334) +- Fixed max body length defaults [#4731](https://github.com/axios/axios/pull/4731) +- Fixed toFormData Blob issue on node>v17 [#4728](https://github.com/axios/axios/pull/4728) +- Bump grunt from 1.5.2 to 1.5.3 [#4743](https://github.com/axios/axios/pull/4743) +- Fixing content-type header repeated [#4745](https://github.com/axios/axios/pull/4745) +- Fixed timeout error message for http [4738](https://github.com/axios/axios/pull/4738) +- Request ignores false, 0 and empty string as body values [#4785](https://github.com/axios/axios/pull/4785) +- Added back missing minified builds [#4805](https://github.com/axios/axios/pull/4805) +- Fixed a type error [#4815](https://github.com/axios/axios/pull/4815) +- Fixed a regression bug with unsubscribing from cancel token; [#4819](https://github.com/axios/axios/pull/4819) +- Remove repeated compression algorithm [#4820](https://github.com/axios/axios/pull/4820) +- The error of calling extend to pass parameters [#4857](https://github.com/axios/axios/pull/4857) +- SerializerOptions.indexes allows boolean | null | undefined [#4862](https://github.com/axios/axios/pull/4862) +- Require interceptors to return values [#4874](https://github.com/axios/axios/pull/4874) +- Removed unused imports [#4949](https://github.com/axios/axios/pull/4949) +- Allow null indexes on formSerializer and paramsSerializer [#4960](https://github.com/axios/axios/pull/4960) + +### Chores + +- Set permissions for GitHub actions [#4765](https://github.com/axios/axios/pull/4765) +- Included githubactions in the dependabot config [#4770](https://github.com/axios/axios/pull/4770) +- Included dependency review [#4771](https://github.com/axios/axios/pull/4771) +- Update security.md [#4784](https://github.com/axios/axios/pull/4784) +- Remove unnecessary spaces [#4854](https://github.com/axios/axios/pull/4854) +- Simplify the import path of AxiosError [#4875](https://github.com/axios/axios/pull/4875) +- Fix Gitpod dead link [#4941](https://github.com/axios/axios/pull/4941) +- Enable syntax highlighting for a code block [#4970](https://github.com/axios/axios/pull/4970) +- Using Logo Axios in Readme.md [#4993](https://github.com/axios/axios/pull/4993) +- Fix markup for note in README [#4825](https://github.com/axios/axios/pull/4825) +- Fix typo and formatting, add colons [#4853](https://github.com/axios/axios/pull/4853) +- Fix typo in readme [#4942](https://github.com/axios/axios/pull/4942) + +### Security + +- Update SECURITY.md [#4687](https://github.com/axios/axios/pull/4687) + +### Contributors to this release + +- [Bertrand Marron](https://github.com/tusbar) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Dan Mooney](https://github.com/danmooney) +- [Michael Li](https://github.com/xiaoyu-tamu) +- [aong](https://github.com/yxwzaxns) +- [Des Preston](https://github.com/despreston) +- [Ted Robertson](https://github.com/tredondo) +- [zhoulixiang](https://github.com/zh-lx) +- [Arthur Fiorette](https://github.com/arthurfiorette) +- [Kumar Shanu](https://github.com/Kr-Shanu) +- [JALAL](https://github.com/JLL32) +- [Jingyi Lin](https://github.com/MageeLin) +- [Philipp Loose](https://github.com/phloose) +- [Alexander Shchukin](https://github.com/sashsvamir) +- [Dave Cardwell](https://github.com/davecardwell) +- [Cat Scarlet](https://github.com/catscarlet) +- [Luca Pizzini](https://github.com/lpizzinidev) +- [Kai](https://github.com/Schweinepriester) +- [Maxime Bargiel](https://github.com/mbargiel) +- [Brian Helba](https://github.com/brianhelba) +- [reslear](https://github.com/reslear) +- [Jamie Slome](https://github.com/JamieSlome) +- [Landro3](https://github.com/Landro3) +- [rafw87](https://github.com/rafw87) +- [Afzal Sayed](https://github.com/afzalsayed96) +- [Koki Oyatsu](https://github.com/kaishuu0123) +- [Dave](https://github.com/wangcch) +- [暴走老七](https://github.com/baozouai) +- [Spencer](https://github.com/spalger) +- [Adrian Wieprzkowicz](https://github.com/Argeento) +- [Jamie Telin](https://github.com/lejahmie) +- [毛呆](https://github.com/aweikalee) +- [Kirill Shakirov](https://github.com/turisap) +- [Rraji Abdelbari](https://github.com/estarossa0) +- [Jelle Schutter](https://github.com/jelleschutter) +- [Tom Ceuppens](https://github.com/KyorCode) +- [Johann Cooper](https://github.com/JohannCooper) +- [Dimitris Halatsis](https://github.com/mitsos1os) +- [chenjigeng](https://github.com/chenjigeng) +- [João Gabriel Quaresma](https://github.com/joaoGabriel55) +- [Victor Augusto](https://github.com/VictorAugDB) +- [neilnaveen](https://github.com/neilnaveen) +- [Pavlos](https://github.com/psmoros) +- [Kiryl Valkovich](https://github.com/visortelle) +- [Naveen](https://github.com/naveensrinivasan) +- [wenzheng](https://github.com/0x30) +- [hcwhan](https://github.com/hcwhan) +- [Bassel Rachid](https://github.com/basselworkforce) +- [Grégoire Pineau](https://github.com/lyrixx) +- [felipedamin](https://github.com/felipedamin) +- [Karl Horky](https://github.com/karlhorky) +- [Yue JIN](https://github.com/kingyue737) +- [Usman Ali Siddiqui](https://github.com/usman250994) +- [WD](https://github.com/techbirds) +- [Günther Foidl](https://github.com/gfoidl) +- [Stephen Jennings](https://github.com/jennings) +- [C.T.Lin](https://github.com/chentsulin) +- [mia-z](https://github.com/mia-z) +- [Parth Banathia](https://github.com/Parth0105) +- [parth0105pluang](https://github.com/parth0105pluang) +- [Marco Weber](https://github.com/mrcwbr) +- [Luca Pizzini](https://github.com/lpizzinidev) +- [Willian Agostini](https://github.com/WillianAgostini) + +- [Huyen Nguyen](https://github.com/huyenltnguyen) diff --git a/node_modules/axios/LICENSE b/node_modules/axios/LICENSE new file mode 100644 index 00000000..05006a51 --- /dev/null +++ b/node_modules/axios/LICENSE @@ -0,0 +1,7 @@ +# Copyright (c) 2014-present Matt Zabriskie & Collaborators + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/axios/MIGRATION_GUIDE.md b/node_modules/axios/MIGRATION_GUIDE.md new file mode 100644 index 00000000..2e59d9d4 --- /dev/null +++ b/node_modules/axios/MIGRATION_GUIDE.md @@ -0,0 +1,877 @@ +# Axios Migration Guide + +> **Migrating from Axios 0.x to 1.x** +> +> This guide helps developers upgrade from Axios 0.x to 1.x by documenting breaking changes, providing migration strategies, and offering solutions to common upgrade challenges. + +## Table of Contents + +- [Overview](#overview) +- [Breaking Changes](#breaking-changes) +- [Error Handling Migration](#error-handling-migration) +- [API Changes](#api-changes) +- [Configuration Changes](#configuration-changes) +- [Migration Strategies](#migration-strategies) +- [Common Patterns](#common-patterns) +- [Troubleshooting](#troubleshooting) +- [Resources](#resources) + +## Overview + +Axios 1.x introduced several breaking changes to improve consistency, security, and developer experience. While these changes provide better error handling and more predictable behavior, they require code updates when migrating from 0.x versions. + +### Key Changes Summary + +| Area | 0.x Behavior | 1.x Behavior | Impact | +|------|--------------|--------------|--------| +| Error Handling | Selective throwing | Consistent throwing | High | +| JSON Parsing | Lenient | Strict | Medium | +| Browser Support | IE11+ | Modern browsers | Low-Medium | +| TypeScript | Partial | Full support | Low | + +### Migration Complexity + +- **Simple applications**: 1-2 hours +- **Medium applications**: 1-2 days +- **Large applications with complex error handling**: 3-5 days + +## Breaking Changes + +### 1. Error Handling Changes + +**The most significant change in Axios 1.x is how errors are handled.** + +#### 0.x Behavior +```javascript +// Axios 0.x - Some HTTP error codes didn't throw +axios.get('/api/data') + .then(response => { + // Response interceptor could handle all errors + console.log('Success:', response.data); + }); + +// Response interceptor handled everything +axios.interceptors.response.use( + response => response, + error => { + handleError(error); + // Error was "handled" and didn't propagate + } +); +``` + +#### 1.x Behavior +```javascript +// Axios 1.x - All HTTP errors throw consistently +axios.get('/api/data') + .then(response => { + console.log('Success:', response.data); + }) + .catch(error => { + // Must handle errors at call site or they propagate + console.error('Request failed:', error); + }); + +// Response interceptor must re-throw or return rejected promise +axios.interceptors.response.use( + response => response, + error => { + handleError(error); + // Must explicitly handle propagation + return Promise.reject(error); // or throw error; + } +); +``` + +#### Impact +- **Response interceptors** can no longer "swallow" errors silently +- **Every API call** must handle errors explicitly or they become unhandled promise rejections +- **Centralized error handling** requires new patterns + +### 2. JSON Parsing Changes + +#### 0.x Behavior +```javascript +// Axios 0.x - Lenient JSON parsing +// Would attempt to parse even invalid JSON +response.data; // Might contain partial data or fallbacks +``` + +#### 1.x Behavior +```javascript +// Axios 1.x - Strict JSON parsing +// Throws clear errors for invalid JSON +try { + const data = response.data; +} catch (error) { + // Handle JSON parsing errors explicitly +} +``` + +### 3. Request/Response Transform Changes + +#### 0.x Behavior +```javascript +// Implicit transformations with some edge cases +transformRequest: [function (data) { + // Less predictable behavior + return data; +}] +``` + +#### 1.x Behavior +```javascript +// More consistent transformation pipeline +transformRequest: [function (data, headers) { + // Headers parameter always available + // More predictable behavior + return data; +}] +``` + +### 4. Browser Support Changes + +- **0.x**: Supported IE11 and older browsers +- **1.x**: Requires modern browsers with Promise support +- **Polyfills**: May be needed for older browser support + +## Error Handling Migration + +The error handling changes are the most complex part of migrating to Axios 1.x. Here are proven strategies: + +### Strategy 1: Centralized Error Handling with Error Boundary + +```javascript +// Create a centralized error handler +class ApiErrorHandler { + constructor() { + this.setupInterceptors(); + } + + setupInterceptors() { + axios.interceptors.response.use( + response => response, + error => { + // Centralized error processing + this.processError(error); + + // Return a resolved promise with error info for handled errors + if (this.isHandledError(error)) { + return Promise.resolve({ + data: null, + error: this.normalizeError(error), + handled: true + }); + } + + // Re-throw unhandled errors + return Promise.reject(error); + } + ); + } + + processError(error) { + // Log errors + console.error('API Error:', error); + + // Show user notifications + if (error.response?.status === 401) { + this.handleAuthError(); + } else if (error.response?.status >= 500) { + this.showErrorNotification('Server error occurred'); + } + } + + isHandledError(error) { + // Define which errors are "handled" centrally + const handledStatuses = [401, 403, 404, 422, 500, 502, 503]; + return handledStatuses.includes(error.response?.status); + } + + normalizeError(error) { + return { + status: error.response?.status, + message: error.response?.data?.message || error.message, + code: error.response?.data?.code || error.code + }; + } + + handleAuthError() { + // Redirect to login, clear tokens, etc. + localStorage.removeItem('token'); + window.location.href = '/login'; + } + + showErrorNotification(message) { + // Show user-friendly error message + console.error(message); // Replace with your notification system + } +} + +// Initialize globally +const errorHandler = new ApiErrorHandler(); + +// Usage in components/services +async function fetchUserData(userId) { + try { + const response = await axios.get(`/api/users/${userId}`); + + // Check if error was handled centrally + if (response.handled) { + return { data: null, error: response.error }; + } + + return { data: response.data, error: null }; + } catch (error) { + // Unhandled errors still need local handling + return { data: null, error: { message: 'Unexpected error occurred' } }; + } +} +``` + +### Strategy 2: Wrapper Function Pattern + +```javascript +// Create a wrapper that provides 0.x-like behavior +function createApiWrapper() { + const api = axios.create(); + + // Add response interceptor for centralized handling + api.interceptors.response.use( + response => response, + error => { + // Handle common errors centrally + if (error.response?.status === 401) { + // Handle auth errors + handleAuthError(); + } + + if (error.response?.status >= 500) { + // Handle server errors + showServerErrorNotification(); + } + + // Always reject to maintain error propagation + return Promise.reject(error); + } + ); + + // Wrapper function that mimics 0.x behavior + function safeRequest(requestConfig, options = {}) { + return api(requestConfig) + .then(response => response) + .catch(error => { + if (options.suppressErrors) { + // Return error info instead of throwing + return { + data: null, + error: { + status: error.response?.status, + message: error.response?.data?.message || error.message + } + }; + } + throw error; + }); + } + + return { safeRequest, axios: api }; +} + +// Usage +const { safeRequest } = createApiWrapper(); + +// For calls where you want centralized error handling +const result = await safeRequest( + { method: 'get', url: '/api/data' }, + { suppressErrors: true } +); + +if (result.error) { + // Handle error case + console.log('Request failed:', result.error.message); +} else { + // Handle success case + console.log('Data:', result.data); +} +``` + +### Strategy 3: Global Error Handler with Custom Events + +```javascript +// Set up global error handling with events +class GlobalErrorHandler extends EventTarget { + constructor() { + super(); + this.setupInterceptors(); + } + + setupInterceptors() { + axios.interceptors.response.use( + response => response, + error => { + // Emit custom event for global handling + this.dispatchEvent(new CustomEvent('apiError', { + detail: { error, timestamp: new Date() } + })); + + // Always reject to maintain proper error flow + return Promise.reject(error); + } + ); + } +} + +const globalErrorHandler = new GlobalErrorHandler(); + +// Set up global listeners +globalErrorHandler.addEventListener('apiError', (event) => { + const { error } = event.detail; + + // Centralized error logic + if (error.response?.status === 401) { + handleAuthError(); + } + + if (error.response?.status >= 500) { + showErrorNotification('Server error occurred'); + } +}); + +// Usage remains clean +async function apiCall() { + try { + const response = await axios.get('/api/data'); + return response.data; + } catch (error) { + // Error was already handled globally + // Just handle component-specific logic + return null; + } +} +``` + +## API Changes + +### Request Configuration + +#### 0.x to 1.x Changes +```javascript +// 0.x - Some properties had different defaults +const config = { + timeout: 0, // No timeout by default + maxContentLength: -1, // No limit +}; + +// 1.x - More secure defaults +const config = { + timeout: 0, // Still no timeout, but easier to configure + maxContentLength: 2000, // Default limit for security + maxBodyLength: 2000, // New property +}; +``` + +### Response Object + +The response object structure remains largely the same, but error responses are more consistent: + +```javascript +// Both 0.x and 1.x +response = { + data: {}, // Response body + status: 200, // HTTP status + statusText: 'OK', // HTTP status message + headers: {}, // Response headers + config: {}, // Request config + request: {} // Request object +}; + +// Error responses are more consistent in 1.x +error.response = { + data: {}, // Error response body + status: 404, // HTTP error status + statusText: 'Not Found', + headers: {}, + config: {}, + request: {} +}; +``` + +## Configuration Changes + +### Default Configuration Updates + +```javascript +// 0.x defaults +axios.defaults.timeout = 0; // No timeout +axios.defaults.maxContentLength = -1; // No limit + +// 1.x defaults (more secure) +axios.defaults.timeout = 0; // Still no timeout +axios.defaults.maxContentLength = 2000; // 2MB limit +axios.defaults.maxBodyLength = 2000; // 2MB limit +``` + +### Instance Configuration + +```javascript +// 0.x - Instance creation +const api = axios.create({ + baseURL: 'https://api.example.com', + timeout: 1000, +}); + +// 1.x - Same API, but more options available +const api = axios.create({ + baseURL: 'https://api.example.com', + timeout: 1000, + maxBodyLength: Infinity, // Override default if needed + maxContentLength: Infinity, +}); +``` + +## Migration Strategies + +### Step-by-Step Migration Process + +#### Phase 1: Preparation +1. **Audit Current Error Handling** + ```bash + # Find all axios usage + grep -r "axios\." src/ + grep -r "\.catch" src/ + grep -r "interceptors" src/ + ``` + +2. **Identify Patterns** + - Response interceptors that handle errors + - Components that rely on centralized error handling + - Authentication and retry logic + +3. **Create Test Cases** + ```javascript + // Test current error handling behavior + describe('Error Handling Migration', () => { + it('should handle 401 errors consistently', async () => { + // Test authentication error flows + }); + + it('should handle 500 errors with user feedback', async () => { + // Test server error handling + }); + }); + ``` + +#### Phase 2: Implementation +1. **Update Dependencies** + ```bash + npm update axios + ``` + +2. **Implement New Error Handling** + - Choose one of the strategies above + - Update response interceptors + - Add error handling to API calls + +3. **Update Authentication Logic** + ```javascript + // 0.x pattern + axios.interceptors.response.use(null, error => { + if (error.response?.status === 401) { + logout(); + // Error was "handled" + } + }); + + // 1.x pattern + axios.interceptors.response.use( + response => response, + error => { + if (error.response?.status === 401) { + logout(); + } + return Promise.reject(error); // Always propagate + } + ); + ``` + +#### Phase 3: Testing and Validation +1. **Test Error Scenarios** + - Network failures + - HTTP error codes (401, 403, 404, 500, etc.) + - Timeout errors + - JSON parsing errors + +2. **Validate User Experience** + - Error messages are shown appropriately + - Authentication redirects work + - Loading states are handled correctly + +### Gradual Migration Approach + +For large applications, consider gradual migration: + +```javascript +// Create a compatibility layer +const axiosCompat = { + // Use new axios instance for new code + v1: axios.create({ + // 1.x configuration + }), + + // Wrapper for legacy code + legacy: createLegacyWrapper(axios.create({ + // Configuration that mimics 0.x behavior + })) +}; + +function createLegacyWrapper(axiosInstance) { + // Add interceptors that provide 0.x-like behavior + axiosInstance.interceptors.response.use( + response => response, + error => { + // Handle errors in 0.x style for legacy code + handleLegacyError(error); + // Don't propagate certain errors + if (shouldSuppressError(error)) { + return Promise.resolve({ data: null, error: true }); + } + return Promise.reject(error); + } + ); + + return axiosInstance; +} +``` + +## Common Patterns + +### Authentication Interceptors + +#### Updated Authentication Pattern +```javascript +// Token refresh interceptor for 1.x +let isRefreshing = false; +let refreshSubscribers = []; + +function subscribeTokenRefresh(cb) { + refreshSubscribers.push(cb); +} + +function onTokenRefreshed(token) { + refreshSubscribers.forEach(cb => cb(token)); + refreshSubscribers = []; +} + +axios.interceptors.response.use( + response => response, + async error => { + const originalRequest = error.config; + + if (error.response?.status === 401 && !originalRequest._retry) { + if (isRefreshing) { + // Wait for token refresh + return new Promise(resolve => { + subscribeTokenRefresh(token => { + originalRequest.headers.Authorization = `Bearer ${token}`; + resolve(axios(originalRequest)); + }); + }); + } + + originalRequest._retry = true; + isRefreshing = true; + + try { + const newToken = await refreshToken(); + onTokenRefreshed(newToken); + isRefreshing = false; + + originalRequest.headers.Authorization = `Bearer ${newToken}`; + return axios(originalRequest); + } catch (refreshError) { + isRefreshing = false; + logout(); + return Promise.reject(refreshError); + } + } + + return Promise.reject(error); + } +); +``` + +### Retry Logic + +```javascript +// Retry interceptor for 1.x +function createRetryInterceptor(maxRetries = 3, retryDelay = 1000) { + return axios.interceptors.response.use( + response => response, + async error => { + const config = error.config; + + if (!config || !config.retry) { + return Promise.reject(error); + } + + config.__retryCount = config.__retryCount || 0; + + if (config.__retryCount >= maxRetries) { + return Promise.reject(error); + } + + config.__retryCount += 1; + + // Exponential backoff + const delay = retryDelay * Math.pow(2, config.__retryCount - 1); + await new Promise(resolve => setTimeout(resolve, delay)); + + return axios(config); + } + ); +} + +// Usage +const api = axios.create(); +createRetryInterceptor(3, 1000); + +// Make request with retry +api.get('/api/data', { retry: true }); +``` + +### Loading State Management + +```javascript +// Loading interceptor for 1.x +class LoadingManager { + constructor() { + this.requests = new Set(); + this.setupInterceptors(); + } + + setupInterceptors() { + axios.interceptors.request.use(config => { + this.requests.add(config); + this.updateLoadingState(); + return config; + }); + + axios.interceptors.response.use( + response => { + this.requests.delete(response.config); + this.updateLoadingState(); + return response; + }, + error => { + this.requests.delete(error.config); + this.updateLoadingState(); + return Promise.reject(error); + } + ); + } + + updateLoadingState() { + const isLoading = this.requests.size > 0; + // Update your loading UI + document.body.classList.toggle('loading', isLoading); + } +} + +const loadingManager = new LoadingManager(); +``` + +## Troubleshooting + +### Common Migration Issues + +#### Issue 1: Unhandled Promise Rejections + +**Problem:** +```javascript +// This pattern worked in 0.x but causes unhandled rejections in 1.x +axios.get('/api/data'); // No .catch() handler +``` + +**Solution:** +```javascript +// Always handle promises +axios.get('/api/data') + .catch(error => { + // Handle error appropriately + console.error('Request failed:', error.message); + }); + +// Or use async/await with try/catch +async function fetchData() { + try { + const response = await axios.get('/api/data'); + return response.data; + } catch (error) { + console.error('Request failed:', error.message); + return null; + } +} +``` + +#### Issue 2: Response Interceptors Not "Handling" Errors + +**Problem:** +```javascript +// 0.x style - interceptor "handled" errors +axios.interceptors.response.use(null, error => { + showErrorMessage(error.message); + // Error was considered "handled" +}); +``` + +**Solution:** +```javascript +// 1.x style - explicitly control error propagation +axios.interceptors.response.use( + response => response, + error => { + showErrorMessage(error.message); + + // Choose whether to propagate the error + if (shouldPropagateError(error)) { + return Promise.reject(error); + } + + // Return success-like response for "handled" errors + return Promise.resolve({ + data: null, + handled: true, + error: normalizeError(error) + }); + } +); +``` + +#### Issue 3: JSON Parsing Errors + +**Problem:** +```javascript +// 1.x is stricter about JSON parsing +// This might throw where 0.x was lenient +const data = response.data; +``` + +**Solution:** +```javascript +// Add response transformer for better error handling +axios.defaults.transformResponse = [ + function (data) { + if (typeof data === 'string') { + try { + return JSON.parse(data); + } catch (e) { + // Handle JSON parsing errors gracefully + console.warn('Invalid JSON response:', data); + return { error: 'Invalid JSON', rawData: data }; + } + } + return data; + } +]; +``` + +#### Issue 4: TypeScript Errors After Upgrade + +**Problem:** +```typescript +// TypeScript errors after upgrade +const response = await axios.get('/api/data'); +// Property 'someProperty' does not exist on type 'any' +``` + +**Solution:** +```typescript +// Define proper interfaces +interface ApiResponse { + data: any; + message: string; + success: boolean; +} + +const response = await axios.get('/api/data'); +// Now properly typed +console.log(response.data.data); +``` + +### Debug Migration Issues + +#### Enable Debug Logging +```javascript +// Add request/response logging +axios.interceptors.request.use(config => { + console.log('Request:', config); + return config; +}); + +axios.interceptors.response.use( + response => { + console.log('Response:', response); + return response; + }, + error => { + console.log('Error:', error); + return Promise.reject(error); + } +); +``` + +#### Compare Behavior +```javascript +// Create side-by-side comparison during migration +const axios0x = require('axios-0x'); // Keep old version for testing +const axios1x = require('axios'); + +async function compareRequests(config) { + try { + const [result0x, result1x] = await Promise.allSettled([ + axios0x(config), + axios1x(config) + ]); + + console.log('0.x result:', result0x); + console.log('1.x result:', result1x); + } catch (error) { + console.log('Comparison error:', error); + } +} +``` + +## Resources + +### Official Documentation +- [Axios 1.x Documentation](https://axios-http.com/) +- [Axios GitHub Repository](https://github.com/axios/axios) +- [Axios Changelog](https://github.com/axios/axios/blob/main/CHANGELOG.md) + +### Migration Tools +- [Axios Migration Codemod](https://github.com/axios/axios-migration-codemod) *(if available)* +- [ESLint Rules for Axios 1.x](https://github.com/axios/eslint-plugin-axios) *(if available)* + +### Community Resources +- [Stack Overflow - Axios Migration Questions](https://stackoverflow.com/questions/tagged/axios+migration) +- [GitHub Discussions](https://github.com/axios/axios/discussions) +- [Axios Discord Community](https://discord.gg/axios) *(if available)* + +### Related Issues +- [Error Handling Changes Discussion](https://github.com/axios/axios/issues/7208) +- [Migration Guide Request](https://github.com/axios/axios/issues/xxxx) *(link to related issues)* + +--- + +## Need Help? + +If you encounter issues during migration that aren't covered in this guide: + +1. **Search existing issues** in the [Axios GitHub repository](https://github.com/axios/axios/issues) +2. **Ask questions** in [GitHub Discussions](https://github.com/axios/axios/discussions) +3. **Contribute improvements** to this migration guide + +--- + +*This migration guide is maintained by the community. If you find errors or have suggestions, please [open an issue](https://github.com/axios/axios/issues) or submit a pull request.* \ No newline at end of file diff --git a/node_modules/axios/README.md b/node_modules/axios/README.md new file mode 100644 index 00000000..23172253 --- /dev/null +++ b/node_modules/axios/README.md @@ -0,0 +1,1921 @@ +

🥇 Gold sponsors

Principal Financial Group

We’re bound by one common purpose: to give you the financial tools, resources and information you ne...

www.principal.com

+
Buy Instagram Followers Twicsy

Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site...

twicsy.com

+
Descope

Hi, we're Descope! We are building something in the authentication space for app developers and...

Website | Docs | Community

+
Route4Me

Best Route Planning And Route Optimization Software

Explore | Free Trial | Contact

+
Buzzoid - Buy Instagram Followers

At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rate...

buzzoid.com

+
Poprey - Buy Instagram Likes

Buy Instagram Likes

poprey.com

+
Requestly

A lightweight open-source API Development, Testing & Mocking platform

requestly.com

+
💜 Become a sponsor + 💜 Become a sponsor +
+ + + +

+ +
+ Axios
+
+ +

Promise based HTTP client for the browser and node.js

+ +

+ Website • + Documentation +

+ +
+ +[![npm version](https://img.shields.io/npm/v/axios.svg?style=flat-square)](https://www.npmjs.org/package/axios) +[![CDNJS](https://img.shields.io/cdnjs/v/axios.svg?style=flat-square)](https://cdnjs.com/libraries/axios) +[![Build status](https://img.shields.io/github/actions/workflow/status/axios/axios/ci.yml?branch=v1.x&label=CI&logo=github&style=flat-square)](https://github.com/axios/axios/actions/workflows/ci.yml) +[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod&style=flat-square)](https://gitpod.io/#https://github.com/axios/axios) +[![code coverage](https://img.shields.io/coveralls/mzabriskie/axios.svg?style=flat-square)](https://coveralls.io/r/mzabriskie/axios) +[![install size](https://img.shields.io/badge/dynamic/json?url=https://packagephobia.com/v2/api.json?p=axios&query=$.install.pretty&label=install%20size&style=flat-square)](https://packagephobia.now.sh/result?p=axios) +[![npm bundle size](https://img.shields.io/bundlephobia/minzip/axios?style=flat-square)](https://bundlephobia.com/package/axios@latest) +[![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](https://npm-stat.com/charts.html?package=axios) +[![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios) +[![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios) +[![Known Vulnerabilities](https://snyk.io/test/npm/axios/badge.svg)](https://snyk.io/test/npm/axios) +[![Contributors](https://img.shields.io/github/contributors/axios/axios.svg?style=flat-square)](CONTRIBUTORS.md) + +
+ +## Table of Contents + +- [Features](#features) +- [Browser Support](#browser-support) +- [Installing](#installing) + - [Package manager](#package-manager) + - [CDN](#cdn) +- [Example](#example) +- [Axios API](#axios-api) +- [Request method aliases](#request-method-aliases) +- [Concurrency 👎](#concurrency-deprecated) +- [Creating an instance](#creating-an-instance) +- [Instance methods](#instance-methods) +- [Request Config](#request-config) +- [Response Schema](#response-schema) +- [Config Defaults](#config-defaults) + - [Global axios defaults](#global-axios-defaults) + - [Custom instance defaults](#custom-instance-defaults) + - [Config order of precedence](#config-order-of-precedence) +- [Interceptors](#interceptors) + - [Multiple Interceptors](#multiple-interceptors) +- [Handling Errors](#handling-errors) +- [Handling Timeouts](#handling-timeouts) +- [Cancellation](#cancellation) + - [AbortController](#abortcontroller) + - [CancelToken 👎](#canceltoken-deprecated) +- [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format) + - [URLSearchParams](#urlsearchparams) + - [Query string](#query-string-older-browsers) + - [🆕 Automatic serialization](#-automatic-serialization-to-urlsearchparams) +- [Using multipart/form-data format](#using-multipartform-data-format) + - [FormData](#formdata) + - [🆕 Automatic serialization](#-automatic-serialization-to-formdata) +- [Files Posting](#files-posting) +- [HTML Form Posting](#-html-form-posting-browser) +- [🆕 Progress capturing](#-progress-capturing) +- [🆕 Rate limiting](#-rate-limiting) +- [🆕 AxiosHeaders](#-axiosheaders) +- [🔥 Fetch adapter](#-fetch-adapter) + - [🔥 Custom fetch](#-custom-fetch) + - [🔥 Using with Tauri](#-using-with-tauri) + - [🔥 Using with SvelteKit](#-using-with-sveltekit-) +- [🔥 HTTP2](#-http2) +- [Semver](#semver) +- [Promises](#promises) +- [TypeScript](#typescript) +- [Resources](#resources) +- [Credits](#credits) +- [License](#license) + +## Features + +- **Browser Requests:** Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) directly from the browser. +- **Node.js Requests:** Make [http](https://nodejs.org/api/http.html) requests from Node.js environments. +- **Promise-based:** Fully supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API for easier asynchronous code. +- **Interceptors:** Intercept requests and responses to add custom logic or transform data. +- **Data Transformation:** Transform request and response data automatically. +- **Request Cancellation:** Cancel requests using built-in mechanisms. +- **Automatic JSON Handling:** Automatically serializes and parses [JSON](https://www.json.org/json-en.html) data. +- **Form Serialization:** 🆕 Automatically serializes data objects to `multipart/form-data` or `x-www-form-urlencoded` formats. +- **XSRF Protection:** Client-side support to protect against [Cross-Site Request Forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery). + +## Browser Support + +| Chrome | Firefox | Safari | Opera | Edge | +| :------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------: | +| ![Chrome browser logo](https://raw.githubusercontent.com/alrra/browser-logos/main/src/chrome/chrome_48x48.png) | ![Firefox browser logo](https://raw.githubusercontent.com/alrra/browser-logos/main/src/firefox/firefox_48x48.png) | ![Safari browser logo](https://raw.githubusercontent.com/alrra/browser-logos/main/src/safari/safari_48x48.png) | ![Opera browser logo](https://raw.githubusercontent.com/alrra/browser-logos/main/src/opera/opera_48x48.png) | ![Edge browser logo](https://raw.githubusercontent.com/alrra/browser-logos/main/src/edge/edge_48x48.png) | +| Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | + +[![Browser Matrix](https://saucelabs.com/open_sauce/build_matrix/axios.svg)](https://saucelabs.com/u/axios) + +## Installing + +### Package manager + +Using npm: + +```bash +$ npm install axios +``` + +Using bower: + +```bash +$ bower install axios +``` + +Using yarn: + +```bash +$ yarn add axios +``` + +Using pnpm: + +```bash +$ pnpm add axios +``` + +Using bun: + +```bash +$ bun add axios +``` + +Once the package is installed, you can import the library using `import` or `require` approach: + +```js +import axios, { isCancel, AxiosError } from "axios"; +``` + +You can also use the default export, since the named export is just a re-export from the Axios factory: + +```js +import axios from "axios"; + +console.log(axios.isCancel("something")); +``` + +If you use `require` for importing, **only the default export is available**: + +```js +const axios = require("axios"); + +console.log(axios.isCancel("something")); +``` + +For some bundlers and some ES6 linters you may need to do the following: + +```js +import { default as axios } from "axios"; +``` + +For cases where something went wrong when trying to import a module into a custom or legacy environment, +you can try importing the module package directly: + +```js +const axios = require("axios/dist/browser/axios.cjs"); // browser commonJS bundle (ES2017) +// const axios = require('axios/dist/node/axios.cjs'); // node commonJS bundle (ES2017) +``` + +### CDN + +Using jsDelivr CDN (ES5 UMD browser module): + +```html + +``` + +Using unpkg CDN: + +```html + +``` + +## Example + +```js +import axios from "axios"; +//const axios = require('axios'); // legacy way + +try { + const response = await axios.get("/user?ID=12345"); + console.log(response); +} catch (error) { + console.error(error); +} + +// Optionally the request above could also be done as +axios + .get("/user", { + params: { + ID: 12345, + }, + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }) + .finally(function () { + // always executed + }); + +// Want to use async/await? Add the `async` keyword to your outer function/method. +async function getUser() { + try { + const response = await axios.get("/user?ID=12345"); + console.log(response); + } catch (error) { + console.error(error); + } +} +``` + +> **Note**: `async/await` is part of ECMAScript 2017 and is not supported in Internet +> Explorer and older browsers, so use with caution. + +Performing a `POST` request + +```js +const response = await axios.post("/user", { + firstName: "Fred", + lastName: "Flintstone", +}); +console.log(response); +``` + +Performing multiple concurrent requests + +```js +function getUserAccount() { + return axios.get("/user/12345"); +} + +function getUserPermissions() { + return axios.get("/user/12345/permissions"); +} + +Promise.all([getUserAccount(), getUserPermissions()]).then(function (results) { + const acct = results[0]; + const perm = results[1]; +}); +``` + +## axios API + +Requests can be made by passing the relevant config to `axios`. + +##### axios(config) + +```js +// Send a POST request +axios({ + method: "post", + url: "/user/12345", + data: { + firstName: "Fred", + lastName: "Flintstone", + }, +}); +``` + +```js +// GET request for remote image in node.js +const response = await axios({ + method: "get", + url: "https://bit.ly/2mTM3nY", + responseType: "stream", +}); +response.data.pipe(fs.createWriteStream("ada_lovelace.jpg")); +``` + +##### axios(url[, config]) + +```js +// Send a GET request (default method) +axios("/user/12345"); +``` + +### Request method aliases + +For convenience, aliases have been provided for all common request methods. + +##### axios.request(config) + +##### axios.get(url[, config]) + +##### axios.delete(url[, config]) + +##### axios.head(url[, config]) + +##### axios.options(url[, config]) + +##### axios.post(url[, data[, config]]) + +##### axios.put(url[, data[, config]]) + +##### axios.patch(url[, data[, config]]) + +###### NOTE + +When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config. + +### Concurrency (Deprecated) + +Please use `Promise.all` to replace the below functions. + +Helper functions for dealing with concurrent requests. + +axios.all(iterable) +axios.spread(callback) + +### Creating an instance + +You can create a new instance of axios with a custom config. + +##### axios.create([config]) + +```js +const instance = axios.create({ + baseURL: "https://some-domain.com/api/", + timeout: 1000, + headers: { "X-Custom-Header": "foobar" }, +}); +``` + +### Instance methods + +The available instance methods are listed below. The specified config will be merged with the instance config. + +##### axios#request(config) + +##### axios#get(url[, config]) + +##### axios#delete(url[, config]) + +##### axios#head(url[, config]) + +##### axios#options(url[, config]) + +##### axios#post(url[, data[, config]]) + +##### axios#put(url[, data[, config]]) + +##### axios#patch(url[, data[, config]]) + +##### axios#getUri([config]) + +## Request Config + +These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified. + +```js +{ + // `url` is the server URL that will be used for the request + url: '/user', + + // `method` is the request method to be used when making the request + method: 'get', // default + + // `baseURL` will be prepended to `url` unless `url` is absolute and the option `allowAbsoluteUrls` is set to true. + // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs + // to the methods of that instance. + baseURL: 'https://some-domain.com/api/', + + // `allowAbsoluteUrls` determines whether or not absolute URLs will override a configured `baseUrl`. + // When set to true (default), absolute values for `url` will override `baseUrl`. + // When set to false, absolute values for `url` will always be prepended by `baseUrl`. + allowAbsoluteUrls: true, + + // `transformRequest` allows changes to the request data before it is sent to the server + // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE' + // The last function in the array must return a string or an instance of Buffer, ArrayBuffer, + // FormData or Stream + // You may modify the headers object. + transformRequest: [function (data, headers) { + // Do whatever you want to transform the data + + return data; + }], + + // `transformResponse` allows changes to the response data to be made before + // it is passed to then/catch + transformResponse: [function (data) { + // Do whatever you want to transform the data + + return data; + }], + + // `headers` are custom headers to be sent + headers: {'X-Requested-With': 'XMLHttpRequest'}, + + // `params` are the URL parameters to be sent with the request + // Must be a plain object or a URLSearchParams object + params: { + ID: 12345 + }, + + // `paramsSerializer` is an optional config that allows you to customize serializing `params`. + paramsSerializer: { + + // Custom encoder function which sends key/value pairs in an iterative fashion. + encode?: (param: string): string => { /* Do custom operations here and return transformed string */ }, + + // Custom serializer function for the entire parameter. Allows the user to mimic pre 1.x behaviour. + serialize?: (params: Record, options?: ParamsSerializerOptions ), + + // Configuration for formatting array indexes in the params. + indexes: false // Three available options: (1) indexes: null (leads to no brackets), (2) (default) indexes: false (leads to empty brackets), (3) indexes: true (leads to brackets with indexes). + }, + + // `data` is the data to be sent as the request body + // Only applicable for request methods 'PUT', 'POST', 'DELETE', and 'PATCH' + // When no `transformRequest` is set, it must be of one of the following types: + // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams + // - Browser only: FormData, File, Blob + // - Node only: Stream, Buffer, FormData (form-data package) + data: { + firstName: 'Fred' + }, + + // syntax alternative to send data into the body + // method post + // only the value is sent, not the key + data: 'Country=Brasil&City=Belo Horizonte', + + // `timeout` specifies the number of milliseconds before the request times out. + // If the request takes longer than `timeout`, the request will be aborted. + timeout: 1000, // default is `0` (no timeout) + + // `withCredentials` indicates whether or not cross-site Access-Control requests + // should be made using credentials + withCredentials: false, // default + + // `adapter` allows custom handling of requests which makes testing easier. + // Return a promise and supply a valid response (see lib/adapters/README.md) + adapter: function (config) { + /* ... */ + }, + // Also, you can set the name of the built-in adapter, or provide an array with their names + // to choose the first available in the environment + adapter: 'xhr', // 'fetch' | 'http' | ['xhr', 'http', 'fetch'] + + // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. + // This will set an `Authorization` header, overwriting any existing + // `Authorization` custom headers you have set using `headers`. + // Please note that only HTTP Basic auth is configurable through this parameter. + // For Bearer tokens and such, use `Authorization` custom headers instead. + auth: { + username: 'janedoe', + password: 's00pers3cret' + }, + + // `responseType` indicates the type of data that the server will respond with + // options are: 'arraybuffer', 'document', 'json', 'text', 'stream' + // browser only: 'blob' + responseType: 'json', // default + + // `responseEncoding` indicates encoding to use for decoding responses (Node.js only) + // Note: Ignored for `responseType` of 'stream' or client-side requests + // options are: 'ascii', 'ASCII', 'ansi', 'ANSI', 'binary', 'BINARY', 'base64', 'BASE64', 'base64url', + // 'BASE64URL', 'hex', 'HEX', 'latin1', 'LATIN1', 'ucs-2', 'UCS-2', 'ucs2', 'UCS2', 'utf-8', 'UTF-8', + // 'utf8', 'UTF8', 'utf16le', 'UTF16LE' + responseEncoding: 'utf8', // default + + // `xsrfCookieName` is the name of the cookie to use as a value for the xsrf token + xsrfCookieName: 'XSRF-TOKEN', // default + + // `xsrfHeaderName` is the name of the http header that carries the xsrf token value + xsrfHeaderName: 'X-XSRF-TOKEN', // default + + // `undefined` (default) - set XSRF header only for the same origin requests + withXSRFToken: boolean | undefined | ((config: InternalAxiosRequestConfig) => boolean | undefined), + + // `onUploadProgress` allows handling of progress events for uploads + // browser & node.js + onUploadProgress: function ({loaded, total, progress, bytes, estimated, rate, upload = true}) { + // Do whatever you want with the Axios progress event + }, + + // `onDownloadProgress` allows handling of progress events for downloads + // browser & node.js + onDownloadProgress: function ({loaded, total, progress, bytes, estimated, rate, download = true}) { + // Do whatever you want with the Axios progress event + }, + + // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js + maxContentLength: 2000, + + // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed + maxBodyLength: 2000, + + // `validateStatus` defines whether to resolve or reject the promise for a given + // HTTP response status code. If `validateStatus` returns `true` (or is set to `null` + // or `undefined`), the promise will be resolved; otherwise, the promise will be + // rejected. + validateStatus: function (status) { + return status >= 200 && status < 300; // default + }, + + // `maxRedirects` defines the maximum number of redirects to follow in node.js. + // If set to 0, no redirects will be followed. + maxRedirects: 21, // default + + // `beforeRedirect` defines a function that will be called before redirect. + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + // If maxRedirects is set to 0, `beforeRedirect` is not used. + beforeRedirect: (options, { headers }) => { + if (options.hostname === "example.com") { + options.auth = "user:password"; + } + }, + + // `socketPath` defines a UNIX Socket to be used in node.js. + // e.g. '/var/run/docker.sock' to send requests to the docker daemon. + // Only either `socketPath` or `proxy` can be specified. + // If both are specified, `socketPath` is used. + socketPath: null, // default + + // `transport` determines the transport method that will be used to make the request. + // If defined, it will be used. Otherwise, if `maxRedirects` is 0, + // the default `http` or `https` library will be used, depending on the protocol specified in `protocol`. + // Otherwise, the `httpFollow` or `httpsFollow` library will be used, again depending on the protocol, + // which can handle redirects. + transport: undefined, // default + + // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http + // and https requests, respectively, in node.js. This allows options to be added like + // `keepAlive` that are not enabled by default before Node.js v19.0.0. After Node.js + // v19.0.0, you no longer need to customize the agent to enable `keepAlive` because + // `http.globalAgent` has `keepAlive` enabled by default. + httpAgent: new http.Agent({ keepAlive: true }), + httpsAgent: new https.Agent({ keepAlive: true }), + + // `proxy` defines the hostname, port, and protocol of the proxy server. + // You can also define your proxy using the conventional `http_proxy` and + // `https_proxy` environment variables. If you are using environment variables + // for your proxy configuration, you can also define a `no_proxy` environment + // variable as a comma-separated list of domains that should not be proxied. + // Use `false` to disable proxies, ignoring environment variables. + // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and + // supplies credentials. + // This will set a `Proxy-Authorization` header, overwriting any existing + // `Proxy-Authorization` custom headers you have set using `headers`. + // If the proxy server uses HTTPS, then you must set the protocol to `https`. + proxy: { + protocol: 'https', + host: '127.0.0.1', + // hostname: '127.0.0.1' // Takes precedence over 'host' if both are defined + port: 9000, + auth: { + username: 'mikeymike', + password: 'rapunz3l' + } + }, + + // `cancelToken` specifies a cancel token that can be used to cancel the request + // (see Cancellation section below for details) + cancelToken: new CancelToken(function (cancel) { + }), + + // an alternative way to cancel Axios requests using AbortController + signal: new AbortController().signal, + + // `decompress` indicates whether or not the response body should be decompressed + // automatically. If set to `true` will also remove the 'content-encoding' header + // from the responses objects of all decompressed responses + // - Node only (XHR cannot turn off decompression) + decompress: true, // default + + // `insecureHTTPParser` boolean. + // Indicates where to use an insecure HTTP parser that accepts invalid HTTP headers. + // This may allow interoperability with non-conformant HTTP implementations. + // Using the insecure parser should be avoided. + // see options https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_url_options_callback + // see also https://nodejs.org/en/blog/vulnerability/february-2020-security-releases/#strict-http-header-parsing-none + insecureHTTPParser: undefined, // default + + // transitional options for backward compatibility that may be removed in the newer versions + transitional: { + // silent JSON parsing mode + // `true` - ignore JSON parsing errors and set response.data to null if parsing failed (old behaviour) + // `false` - throw SyntaxError if JSON parsing failed (Note: responseType must be set to 'json') + silentJSONParsing: true, // default value for the current Axios version + + // try to parse the response string as JSON even if `responseType` is not 'json' + forcedJSONParsing: true, + + // throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts + clarifyTimeoutError: false, + + // use the legacy interceptor request/response ordering + legacyInterceptorReqResOrdering: true, // default + }, + + env: { + // The FormData class to be used to automatically serialize the payload into a FormData object + FormData: window?.FormData || global?.FormData + }, + + formSerializer: { + visitor: (value, key, path, helpers) => {}; // custom visitor function to serialize form values + dots: boolean; // use dots instead of brackets format + metaTokens: boolean; // keep special endings like {} in parameter key + indexes: boolean; // array indexes format null - no brackets, false - empty brackets, true - brackets with indexes + }, + + // http adapter only (node.js) + maxRate: [ + 100 * 1024, // 100KB/s upload limit, + 100 * 1024 // 100KB/s download limit + ] +} +``` + +## Response Schema + +The response to a request contains the following information. + +```js +{ + // `data` is the response that was provided by the server + data: {}, + + // `status` is the HTTP status code from the server response + status: 200, + + // `statusText` is the HTTP status message from the server response + statusText: 'OK', + + // `headers` the HTTP headers that the server responded with + // All header names are lowercase and can be accessed using the bracket notation. + // Example: `response.headers['content-type']` + headers: {}, + + // `config` is the config that was provided to `axios` for the request + config: {}, + + // `request` is the request that generated this response + // It is the last ClientRequest instance in node.js (in redirects) + // and an XMLHttpRequest instance in the browser + request: {} +} +``` + +When using `then`, you will receive the response as follows: + +```js +const response = await axios.get("/user/12345"); +console.log(response.data); +console.log(response.status); +console.log(response.statusText); +console.log(response.headers); +console.log(response.config); +``` + +When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section. + +## Config Defaults + +You can specify config defaults that will be applied to every request. + +### Global axios defaults + +```js +axios.defaults.baseURL = "https://api.example.com"; + +// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them. +// See below for an example using Custom instance defaults instead. +axios.defaults.headers.common["Authorization"] = AUTH_TOKEN; + +axios.defaults.headers.post["Content-Type"] = + "application/x-www-form-urlencoded"; +``` + +### Custom instance defaults + +```js +// Set config defaults when creating the instance +const instance = axios.create({ + baseURL: "https://api.example.com", +}); + +// Alter defaults after instance has been created +instance.defaults.headers.common["Authorization"] = AUTH_TOKEN; +``` + +### Config order of precedence + +Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults/index.js](https://github.com/axios/axios/blob/main/lib/defaults/index.js#L49), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example. + +```js +// Create an instance using the config defaults provided by the library +// At this point the timeout config value is `0` as is the default for the library +const instance = axios.create(); + +// Override timeout default for the library +// Now all requests using this instance will wait 2.5 seconds before timing out +instance.defaults.timeout = 2500; + +// Override timeout for this request as it's known to take a long time +instance.get("/longRequest", { + timeout: 5000, +}); +``` + +## Interceptors + +You can intercept requests or responses before methods like `.get()` or `.post()` +resolve their promises (before code inside `then` or `catch`, or after `await`) + +```js +const instance = axios.create(); + +// Add a request interceptor +instance.interceptors.request.use( + function (config) { + // Do something before the request is sent + return config; + }, + function (error) { + // Do something with the request error + return Promise.reject(error); + }, +); + +// Add a response interceptor +instance.interceptors.response.use( + function (response) { + // Any status code that lies within the range of 2xx causes this function to trigger + // Do something with response data + return response; + }, + function (error) { + // Any status codes that fall outside the range of 2xx cause this function to trigger + // Do something with response error + return Promise.reject(error); + }, +); +``` + +If you need to remove an interceptor later you can. + +```js +const instance = axios.create(); +const myInterceptor = instance.interceptors.request.use(function () { + /*...*/ +}); +axios.interceptors.request.eject(myInterceptor); +``` + +You can also clear all interceptors for requests or responses. + +```js +const instance = axios.create(); +instance.interceptors.request.use(function () { + /*...*/ +}); +instance.interceptors.request.clear(); // Removes interceptors from requests +instance.interceptors.response.use(function () { + /*...*/ +}); +instance.interceptors.response.clear(); // Removes interceptors from responses +``` + +You can add interceptors to a custom instance of axios. + +```js +const instance = axios.create(); +instance.interceptors.request.use(function () { + /*...*/ +}); +``` + +When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay +in the execution of your axios request when the main thread is blocked (a promise is created under the hood for +the interceptor and your request gets put at the bottom of the call stack). If your request interceptors are synchronous you can add a flag +to the options object that will tell axios to run the code synchronously and avoid any delays in request execution. + +```js +axios.interceptors.request.use( + function (config) { + config.headers.test = "I am only a header!"; + return config; + }, + null, + { synchronous: true }, +); +``` + +If you want to execute a particular interceptor based on a runtime check, +you can add a `runWhen` function to the options object. The request interceptor will not be executed **if and only if** the return +of `runWhen` is `false`. The function will be called with the config +object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an +asynchronous request interceptor that only needs to run at certain times. + +```js +function onGetCall(config) { + return config.method === "get"; +} +axios.interceptors.request.use( + function (config) { + config.headers.test = "special get headers"; + return config; + }, + null, + { runWhen: onGetCall }, +); +``` + +> **Note:** The options parameter(having `synchronous` and `runWhen` properties) is only supported for request interceptors at the moment. + +### Interceptor Execution Order + +**Important:** Interceptors have different execution orders depending on their type! + +Request interceptors are executed in **reverse order** (LIFO - Last In, First Out). This means the _last_ interceptor added is executed **first**. + +Response interceptors are executed in the **order they were added** (FIFO - First In, First Out). This means the _first_ interceptor added is executed **first**. + +Example: + +```js +const instance = axios.create(); + +const interceptor = (id) => (base) => { + console.log(id); + return base; +}; + +instance.interceptors.request.use(interceptor("Request Interceptor 1")); +instance.interceptors.request.use(interceptor("Request Interceptor 2")); +instance.interceptors.request.use(interceptor("Request Interceptor 3")); +instance.interceptors.response.use(interceptor("Response Interceptor 1")); +instance.interceptors.response.use(interceptor("Response Interceptor 2")); +instance.interceptors.response.use(interceptor("Response Interceptor 3")); + +// Console output: +// Request Interceptor 3 +// Request Interceptor 2 +// Request Interceptor 1 +// [HTTP request is made] +// Response Interceptor 1 +// Response Interceptor 2 +// Response Interceptor 3 +``` + +### Multiple Interceptors + +Given that you add multiple response interceptors +and when the response was fulfilled + +- then each interceptor is executed +- then they are executed in the order they were added +- then only the last interceptor's result is returned +- then every interceptor receives the result of its predecessor +- and when the fulfillment-interceptor throws + - then the following fulfillment-interceptor is not called + - then the following rejection-interceptor is called + - once caught, another following fulfill-interceptor is called again (just like in a promise chain). + +Read [the interceptor tests](./test/specs/interceptors.spec.js) to see all this in code. + +## Error Types + +There are many different axios error messages that can appear which can provide basic information about the specifics of the error and where opportunities may lie in debugging. + +The general structure of axios errors is as follows: +| Property | Definition | +| -------- | ---------- | +| message | A quick summary of the error message and the status it failed with. | +| name | This defines where the error originated from. For axios, it will always be an 'AxiosError'. | +| stack | Provides the stack trace of the error. | +| config | An axios config object with specific instance configurations defined by the user from when the request was made | +| code | Represents an axios identified error. The table below lists specific definitions for internal axios error. | +| status | HTTP response status code. See [here](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) for common HTTP response status code meanings. + +Below is a list of potential axios identified error: + +| Code | Definition | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ERR_BAD_OPTION_VALUE | Invalid value provided in axios configuration. | +| ERR_BAD_OPTION | Invalid option provided in axios configuration. | +| ERR_NOT_SUPPORT | Feature or method not supported in the current axios environment. | +| ERR_DEPRECATED | Deprecated feature or method used in axios. | +| ERR_INVALID_URL | Invalid URL provided for axios request. | +| ECONNABORTED | Typically indicates that the request has been timed out (unless `transitional.clarifyTimeoutError` is set) or aborted by the browser or its plugin. | +| ERR_CANCELED | Feature or method is canceled explicitly by the user using an AbortSignal (or a CancelToken). | +| ETIMEDOUT | Request timed out due to exceeding the default axios timelimit. `transitional.clarifyTimeoutError` must be set to `true`, otherwise a generic `ECONNABORTED` error will be thrown instead. | +| ERR_NETWORK | Network-related issue. In the browser, this error can also be caused by a [CORS](https://developer.mozilla.org/ru/docs/Web/HTTP/Guides/CORS) or [Mixed Content](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content) policy violation. The browser does not allow the JS code to clarify the real reason for the error caused by security issues, so please check the console. | +| ERR_FR_TOO_MANY_REDIRECTS | Request is redirected too many times; exceeds max redirects specified in axios configuration. | +| ERR_BAD_RESPONSE | Response cannot be parsed properly or is in an unexpected format. Usually related to a response with `5xx` status code. | +| ERR_BAD_REQUEST | The request has an unexpected format or is missing required parameters. Usually related to a response with `4xx` status code. | + +## Handling Errors + +The default behavior is to reject every response that returns with a status code that falls out of the range of 2xx and treat it as an error. + +```js +axios.get("/user/12345").catch(function (error) { + if (error.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + console.log(error.response.data); + console.log(error.response.status); + console.log(error.response.headers); + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + console.log(error.request); + } else { + // Something happened in setting up the request that triggered an Error + console.log("Error", error.message); + } + console.log(error.config); +}); +``` + +Using the `validateStatus` config option, you can override the default condition (status >= 200 && status < 300) and define HTTP code(s) that should throw an error. + +```js +axios.get("/user/12345", { + validateStatus: function (status) { + return status < 500; // Resolve only if the status code is less than 500 + }, +}); +``` + +Using `toJSON` you get an object with more information about the HTTP error. + +```js +axios.get("/user/12345").catch(function (error) { + console.log(error.toJSON()); +}); +``` + +## Handling Timeouts + +```js +async function fetchWithTimeout() { + try { + const response = await axios.get("https://example.com/data", { + timeout: 5000, // 5 seconds + }); + + console.log("Response:", response.data); + } catch (error) { + if (axios.isAxiosError(error) && error.code === "ECONNABORTED") { + console.error("❌ Request timed out!"); + } else { + console.error("❌ Error:", error.message); + } + } +} +``` + +## Cancellation + +### AbortController + +Starting from `v0.22.0` Axios supports AbortController to cancel requests in a fetch API way: + +```js +const controller = new AbortController(); + +axios + .get("/foo/bar", { + signal: controller.signal, + }) + .then(function (response) { + //... + }); +// cancel the request +controller.abort(); +``` + +### CancelToken `👎deprecated` + +You can also cancel a request using a _CancelToken_. + +> The axios cancel token API is based on the withdrawn [cancellable promises proposal](https://github.com/tc39/proposal-cancelable-promises). + +> This API is deprecated since v0.22.0 and shouldn't be used in new projects + +You can create a cancel token using the `CancelToken.source` factory as shown below: + +```js +const CancelToken = axios.CancelToken; +const source = CancelToken.source(); + +axios + .get("/user/12345", { + cancelToken: source.token, + }) + .catch(function (thrown) { + if (axios.isCancel(thrown)) { + console.log("Request canceled", thrown.message); + } else { + // handle error + } + }); + +axios.post( + "/user/12345", + { + name: "new name", + }, + { + cancelToken: source.token, + }, +); + +// cancel the request (the message parameter is optional) +source.cancel("Operation canceled by the user."); +``` + +You can also create a cancel token by passing an executor function to the `CancelToken` constructor: + +```js +const CancelToken = axios.CancelToken; +let cancel; + +axios.get("/user/12345", { + cancelToken: new CancelToken(function executor(c) { + // An executor function receives a cancel function as a parameter + cancel = c; + }), +}); + +// cancel the request +cancel(); +``` + +> **Note:** you can cancel several requests with the same cancel token/abort controller. +> If a cancellation token is already cancelled at the moment of starting an Axios request, then the request is cancelled immediately, without any attempts to make a real request. + +> During the transition period, you can use both cancellation APIs, even for the same request: + +## Using `application/x-www-form-urlencoded` format + +### URLSearchParams + +By default, axios serializes JavaScript objects to `JSON`. To send data in the [`application/x-www-form-urlencoded`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) format instead, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API, which is [supported](http://www.caniuse.com/#feat=urlsearchparams) in the vast majority of browsers, and [Node](https://nodejs.org/api/url.html#url_class_urlsearchparams) starting with v10 (released in 2018). + +```js +const params = new URLSearchParams({ foo: "bar" }); +params.append("extraparam", "value"); +axios.post("/foo", params); +``` + +### Query string (Older browsers) + +For compatibility with very old browsers, there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment). + +Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library: + +```js +const qs = require("qs"); +axios.post("/foo", qs.stringify({ bar: 123 })); +``` + +Or in another way (ES6), + +```js +import qs from "qs"; +const data = { bar: 123 }; +const options = { + method: "POST", + headers: { "content-type": "application/x-www-form-urlencoded" }, + data: qs.stringify(data), + url, +}; +axios(options); +``` + +### Older Node.js versions + +For older Node.js engines, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows: + +```js +const querystring = require("querystring"); +axios.post("https://something.com/", querystring.stringify({ foo: "bar" })); +``` + +You can also use the [`qs`](https://github.com/ljharb/qs) library. + +> **Note**: The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case. + +### 🆕 Automatic serialization to URLSearchParams + +Axios will automatically serialize the data object to urlencoded format if the content-type header is set to "application/x-www-form-urlencoded". + +```js +const data = { + x: 1, + arr: [1, 2, 3], + arr2: [1, [2], 3], + users: [ + { name: "Peter", surname: "Griffin" }, + { name: "Thomas", surname: "Anderson" }, + ], +}; + +await axios.postForm("https://postman-echo.com/post", data, { + headers: { "content-type": "application/x-www-form-urlencoded" }, +}); +``` + +The server will handle it as: + +```js + { + x: '1', + 'arr[]': [ '1', '2', '3' ], + 'arr2[0]': '1', + 'arr2[1][0]': '2', + 'arr2[2]': '3', + 'arr3[]': [ '1', '2', '3' ], + 'users[0][name]': 'Peter', + 'users[0][surname]': 'griffin', + 'users[1][name]': 'Thomas', + 'users[1][surname]': 'Anderson' + } +``` + +If your backend body-parser (like `body-parser` of `express.js`) supports nested objects decoding, you will get the same object on the server-side automatically + +```js +const app = express(); + +app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies + +app.post("/", function (req, res, next) { + // echo body as JSON + res.send(JSON.stringify(req.body)); +}); + +server = app.listen(3000); +``` + +## Using `multipart/form-data` format + +### FormData + +To send the data as a `multipart/form-data` you need to pass a formData instance as a payload. +Setting the `Content-Type` header is not required as Axios guesses it based on the payload type. + +```js +const formData = new FormData(); +formData.append("foo", "bar"); + +axios.post("https://httpbin.org/post", formData); +``` + +In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows: + +```js +const FormData = require("form-data"); + +const form = new FormData(); +form.append("my_field", "my value"); +form.append("my_buffer", Buffer.alloc(10)); +form.append("my_file", fs.createReadStream("/foo/bar.jpg")); + +axios.post("https://example.com", form); +``` + +### 🆕 Automatic serialization to FormData + +Starting from `v0.27.0`, Axios supports automatic object serialization to a FormData object if the request `Content-Type` +header is set to `multipart/form-data`. + +The following request will submit the data in a FormData format (Browser & Node.js): + +```js +import axios from "axios"; + +axios + .post( + "https://httpbin.org/post", + { x: 1 }, + { + headers: { + "Content-Type": "multipart/form-data", + }, + }, + ) + .then(({ data }) => console.log(data)); +``` + +In the `node.js` build, the ([`form-data`](https://github.com/form-data/form-data)) polyfill is used by default. + +You can overload the FormData class by setting the `env.FormData` config variable, +but you probably won't need it in most cases: + +```js +const axios = require("axios"); +var FormData = require("form-data"); + +axios + .post( + "https://httpbin.org/post", + { x: 1, buf: Buffer.alloc(10) }, + { + headers: { + "Content-Type": "multipart/form-data", + }, + }, + ) + .then(({ data }) => console.log(data)); +``` + +Axios FormData serializer supports some special endings to perform the following operations: + +- `{}` - serialize the value with JSON.stringify +- `[]` - unwrap the array-like object as separate fields with the same key + +> **Note**: unwrap/expand operation will be used by default on arrays and FileList objects + +FormData serializer supports additional options via `config.formSerializer: object` property to handle rare cases: + +- `visitor: Function` - user-defined visitor function that will be called recursively to serialize the data object + to a `FormData` object by following custom rules. + +- `dots: boolean = false` - use dot notation instead of brackets to serialize arrays and objects; + +- `metaTokens: boolean = true` - add the special ending (e.g `user{}: '{"name": "John"}'`) in the FormData key. + The back-end body-parser could potentially use this meta-information to automatically parse the value as JSON. + +- `indexes: null|false|true = false` - controls how indexes will be added to unwrapped keys of `flat` array-like objects. + - `null` - don't add brackets (`arr: 1`, `arr: 2`, `arr: 3`) + - `false`(default) - add empty brackets (`arr[]: 1`, `arr[]: 2`, `arr[]: 3`) + - `true` - add brackets with indexes (`arr[0]: 1`, `arr[1]: 2`, `arr[2]: 3`) + +Let's say we have an object like this one: + +```js +const obj = { + x: 1, + arr: [1, 2, 3], + arr2: [1, [2], 3], + users: [ + { name: "Peter", surname: "Griffin" }, + { name: "Thomas", surname: "Anderson" }, + ], + "obj2{}": [{ x: 1 }], +}; +``` + +The following steps will be executed by the Axios serializer internally: + +```js +const formData = new FormData(); +formData.append("x", "1"); +formData.append("arr[]", "1"); +formData.append("arr[]", "2"); +formData.append("arr[]", "3"); +formData.append("arr2[0]", "1"); +formData.append("arr2[1][0]", "2"); +formData.append("arr2[2]", "3"); +formData.append("users[0][name]", "Peter"); +formData.append("users[0][surname]", "Griffin"); +formData.append("users[1][name]", "Thomas"); +formData.append("users[1][surname]", "Anderson"); +formData.append("obj2{}", '[{"x":1}]'); +``` + +Axios supports the following shortcut methods: `postForm`, `putForm`, `patchForm` +which are just the corresponding http methods with the `Content-Type` header preset to `multipart/form-data`. + +## Files Posting + +You can easily submit a single file: + +```js +await axios.postForm("https://httpbin.org/post", { + myVar: "foo", + file: document.querySelector("#fileInput").files[0], +}); +``` + +or multiple files as `multipart/form-data`: + +```js +await axios.postForm("https://httpbin.org/post", { + "files[]": document.querySelector("#fileInput").files, +}); +``` + +`FileList` object can be passed directly: + +```js +await axios.postForm( + "https://httpbin.org/post", + document.querySelector("#fileInput").files, +); +``` + +All files will be sent with the same field names: `files[]`. + +## 🆕 HTML Form Posting (browser) + +Pass an HTML Form element as a payload to submit it as `multipart/form-data` content. + +```js +await axios.postForm( + "https://httpbin.org/post", + document.querySelector("#htmlForm"), +); +``` + +`FormData` and `HTMLForm` objects can also be posted as `JSON` by explicitly setting the `Content-Type` header to `application/json`: + +```js +await axios.post( + "https://httpbin.org/post", + document.querySelector("#htmlForm"), + { + headers: { + "Content-Type": "application/json", + }, + }, +); +``` + +For example, the Form + +```html +
+ + + + + + + + + +
+``` + +will be submitted as the following JSON object: + +```js +{ + "foo": "1", + "deep": { + "prop": { + "spaced": "3" + } + }, + "baz": [ + "4", + "5" + ], + "user": { + "age": "value2" + } +} +``` + +Sending `Blobs`/`Files` as JSON (`base64`) is not currently supported. + +## 🆕 Progress capturing + +Axios supports both browser and node environments to capture request upload/download progress. +The frequency of progress events is forced to be limited to `3` times per second. + +```js +await axios.post(url, data, { + onUploadProgress: function (axiosProgressEvent) { + /*{ + loaded: number; + total?: number; + progress?: number; // in range [0..1] + bytes: number; // how many bytes have been transferred since the last trigger (delta) + estimated?: number; // estimated time in seconds + rate?: number; // upload speed in bytes + upload: true; // upload sign + }*/ + }, + + onDownloadProgress: function (axiosProgressEvent) { + /*{ + loaded: number; + total?: number; + progress?: number; + bytes: number; + estimated?: number; + rate?: number; // download speed in bytes + download: true; // download sign + }*/ + }, +}); +``` + +You can also track stream upload/download progress in node.js: + +```js +const { data } = await axios.post(SERVER_URL, readableStream, { + onUploadProgress: ({ progress }) => { + console.log((progress * 100).toFixed(2)); + }, + + headers: { + "Content-Length": contentLength, + }, + + maxRedirects: 0, // avoid buffering the entire stream +}); +``` + +> **Note:** +> Capturing FormData upload progress is not currently supported in node.js environments. + +> **⚠️ Warning** +> It is recommended to disable redirects by setting maxRedirects: 0 to upload the stream in the **node.js** environment, +> as the follow-redirects package will buffer the entire stream in RAM without following the "backpressure" algorithm. + +## 🆕 Rate limiting + +Download and upload rate limits can only be set for the http adapter (node.js): + +```js +const { data } = await axios.post(LOCAL_SERVER_URL, myBuffer, { + onUploadProgress: ({ progress, rate }) => { + console.log( + `Upload [${(progress * 100).toFixed(2)}%]: ${(rate / 1024).toFixed(2)}KB/s`, + ); + }, + + maxRate: [100 * 1024], // 100KB/s limit +}); +``` + +## 🆕 AxiosHeaders + +Axios has its own `AxiosHeaders` class to manipulate headers using a Map-like API that guarantees caseless work. +Although HTTP is case-insensitive in headers, Axios will retain the case of the original header for stylistic reasons +and as a workaround when servers mistakenly consider the header's case. +The old approach of directly manipulating the headers object is still available, but deprecated and not recommended for future usage. + +### Working with headers + +An AxiosHeaders object instance can contain different types of internal values. that control setting and merging logic. +The final headers object with string values is obtained by Axios by calling the `toJSON` method. + +> Note: By JSON here we mean an object consisting only of string values intended to be sent over the network. + +The header value can be one of the following types: + +- `string` - normal string value that will be sent to the server +- `null` - skip header when rendering to JSON +- `false` - skip header when rendering to JSON, additionally indicates that `set` method must be called with `rewrite` option set to `true` + to overwrite this value (Axios uses this internally to allow users to opt out of installing certain headers like `User-Agent` or `Content-Type`) +- `undefined` - value is not set + +> Note: The header value is considered set if it is not equal to undefined. + +The headers object is always initialized inside interceptors and transformers: + +```ts +axios.interceptors.request.use((request: InternalAxiosRequestConfig) => { + request.headers.set("My-header", "value"); + + request.headers.set({ + "My-set-header1": "my-set-value1", + "My-set-header2": "my-set-value2", + }); + + request.headers.set("User-Agent", false); // disable subsequent setting the header by Axios + + request.headers.setContentType("text/plain"); + + request.headers["My-set-header2"] = "newValue"; // direct access is deprecated + + return request; +}); +``` + +You can iterate over an `AxiosHeaders` instance using a `for...of` statement: + +```js +const headers = new AxiosHeaders({ + foo: "1", + bar: "2", + baz: "3", +}); + +for (const [header, value] of headers) { + console.log(header, value); +} + +// foo 1 +// bar 2 +// baz 3 +``` + +### new AxiosHeaders(headers?) + +Constructs a new `AxiosHeaders` instance. + +``` +constructor(headers?: RawAxiosHeaders | AxiosHeaders | string); +``` + +If the headers object is a string, it will be parsed as RAW HTTP headers. + +```js +const headers = new AxiosHeaders(` +Host: www.bing.com +User-Agent: curl/7.54.0 +Accept: */*`); + +console.log(headers); + +// Object [AxiosHeaders] { +// host: 'www.bing.com', +// 'user-agent': 'curl/7.54.0', +// accept: '*/*' +// } +``` + +### AxiosHeaders#set + +```ts +set(headerName, value: Axios, rewrite?: boolean); +set(headerName, value, rewrite?: (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean); +set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean); +``` + +The `rewrite` argument controls the overwriting behavior: + +- `false` - do not overwrite if the header's value is set (is not `undefined`) +- `undefined` (default) - overwrite the header unless its value is set to `false` +- `true` - rewrite anyway + +The option can also accept a user-defined function that determines whether the value should be overwritten or not. + +Returns `this`. + +### AxiosHeaders#get(header) + +``` + get(headerName: string, matcher?: true | AxiosHeaderMatcher): AxiosHeaderValue; + get(headerName: string, parser: RegExp): RegExpExecArray | null; +``` + +Returns the internal value of the header. It can take an extra argument to parse the header's value with `RegExp.exec`, +matcher function or internal key-value parser. + +```ts +const headers = new AxiosHeaders({ + "Content-Type": "multipart/form-data; boundary=Asrf456BGe4h", +}); + +console.log(headers.get("Content-Type")); +// multipart/form-data; boundary=Asrf456BGe4h + +console.log(headers.get("Content-Type", true)); // parse key-value pairs from a string separated with \s,;= delimiters: +// [Object: null prototype] { +// 'multipart/form-data': undefined, +// boundary: 'Asrf456BGe4h' +// } + +console.log( + headers.get("Content-Type", (value, name, headers) => { + return String(value).replace(/a/g, "ZZZ"); + }), +); +// multipZZZrt/form-dZZZtZZZ; boundZZZry=Asrf456BGe4h + +console.log(headers.get("Content-Type", /boundary=(\w+)/)?.[0]); +// boundary=Asrf456BGe4h +``` + +Returns the value of the header. + +### AxiosHeaders#has(header, matcher?) + +``` +has(header: string, matcher?: AxiosHeaderMatcher): boolean; +``` + +Returns `true` if the header is set (has no `undefined` value). + +### AxiosHeaders#delete(header, matcher?) + +``` +delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; +``` + +Returns `true` if at least one header has been removed. + +### AxiosHeaders#clear(matcher?) + +``` +clear(matcher?: AxiosHeaderMatcher): boolean; +``` + +Removes all headers. +Unlike the `delete` method matcher, this optional matcher will be used to match against the header name rather than the value. + +```ts +const headers = new AxiosHeaders({ + foo: "1", + "x-foo": "2", + "x-bar": "3", +}); + +console.log(headers.clear(/^x-/)); // true + +console.log(headers.toJSON()); // [Object: null prototype] { foo: '1' } +``` + +Returns `true` if at least one header has been cleared. + +### AxiosHeaders#normalize(format); + +If the headers object was changed directly, it can have duplicates with the same name but in different cases. +This method normalizes the headers object by combining duplicate keys into one. +Axios uses this method internally after calling each interceptor. +Set `format` to true for converting header names to lowercase and capitalizing the initial letters (`cOntEnt-type` => `Content-Type`) + +```js +const headers = new AxiosHeaders({ + foo: "1", +}); + +headers.Foo = "2"; +headers.FOO = "3"; + +console.log(headers.toJSON()); // [Object: null prototype] { foo: '1', Foo: '2', FOO: '3' } +console.log(headers.normalize().toJSON()); // [Object: null prototype] { foo: '3' } +console.log(headers.normalize(true).toJSON()); // [Object: null prototype] { Foo: '3' } +``` + +Returns `this`. + +### AxiosHeaders#concat(...targets) + +``` +concat(...targets: Array): AxiosHeaders; +``` + +Merges the instance with targets into a new `AxiosHeaders` instance. If the target is a string, it will be parsed as RAW HTTP headers. + +Returns a new `AxiosHeaders` instance. + +### AxiosHeaders#toJSON(asStrings?) + +``` +toJSON(asStrings?: boolean): RawAxiosHeaders; +``` + +Resolve all internal header values into a new null prototype object. +Set `asStrings` to true to resolve arrays as a string containing all elements, separated by commas. + +### AxiosHeaders.from(thing?) + +``` +from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; +``` + +Returns a new `AxiosHeaders` instance created from the raw headers passed in, +or simply returns the given headers object if it's an `AxiosHeaders` instance. + +### AxiosHeaders.concat(...targets) + +``` +concat(...targets: Array): AxiosHeaders; +``` + +Returns a new `AxiosHeaders` instance created by merging the target objects. + +### Shortcuts + +The following shortcuts are available: + +- `setContentType`, `getContentType`, `hasContentType` + +- `setContentLength`, `getContentLength`, `hasContentLength` + +- `setAccept`, `getAccept`, `hasAccept` + +- `setUserAgent`, `getUserAgent`, `hasUserAgent` + +- `setContentEncoding`, `getContentEncoding`, `hasContentEncoding` + +## 🔥 Fetch adapter + +Fetch adapter was introduced in `v1.7.0`. By default, it will be used if `xhr` and `http` adapters are not available in the build, +or not supported by the environment. +To use it by default, it must be selected explicitly: + +```js +const { data } = axios.get(url, { + adapter: "fetch", // by default ['xhr', 'http', 'fetch'] +}); +``` + +You can create a separate instance for this: + +```js +const fetchAxios = axios.create({ + adapter: "fetch", +}); + +const { data } = fetchAxios.get(url); +``` + +The adapter supports the same functionality as the `xhr` adapter, **including upload and download progress capturing**. +Also, it supports additional response types such as `stream` and `formdata` (if supported by the environment). + +### 🔥 Custom fetch + +Starting from `v1.12.0`, you can customize the fetch adapter to use a custom fetch API instead of environment globals. +You can pass a custom `fetch` function, `Request`, and `Response` constructors via env config. +This can be helpful in case of custom environments & app frameworks. + +Also, when using a custom fetch, you may need to set custom Request and Response too. If you don't set them, global objects will be used. +If your custom fetch api does not have these objects, and the globals are incompatible with a custom fetch, +you must disable their use inside the fetch adapter by passing null. + +> Note: Setting `Request` & `Response` to `null` will make it impossible for the fetch adapter to capture the upload & download progress. + +Basic example: + +```js +import customFetchFunction from "customFetchModule"; + +const instance = axios.create({ + adapter: "fetch", + onDownloadProgress(e) { + console.log("downloadProgress", e); + }, + env: { + fetch: customFetchFunction, + Request: null, // undefined -> use the global constructor + Response: null, + }, +}); +``` + +#### 🔥 Using with Tauri + +A minimal example of setting up Axios for use in a [Tauri](https://tauri.app/plugin/http-client/) app with a platform fetch function that ignores CORS policy for requests. + +```js +import { fetch } from "@tauri-apps/plugin-http"; +import axios from "axios"; + +const instance = axios.create({ + adapter: "fetch", + onDownloadProgress(e) { + console.log("downloadProgress", e); + }, + env: { + fetch, + }, +}); + +const { data } = await instance.get("https://google.com"); +``` + +#### 🔥 Using with SvelteKit + +[SvelteKit](https://svelte.dev/docs/kit/web-standards#Fetch-APIs) framework has a custom implementation of the fetch function for server rendering (so called `load` functions), and also uses relative paths, +which makes it incompatible with the standard URL API. So, Axios must be configured to use the custom fetch API: + +```js +export async function load({ fetch }) { + const { data: post } = await axios.get( + "https://jsonplaceholder.typicode.com/posts/1", + { + adapter: "fetch", + env: { + fetch, + Request: null, + Response: null, + }, + }, + ); + + return { post }; +} +``` + +## 🔥 HTTP2 + +In version `1.13.0`, experimental `HTTP2` support was added to the `http` adapter. +The `httpVersion` option is now available to select the protocol version used. +Additional native options for the internal `session.request()` call can be passed via the `http2Options` config. +This config also includes the custom `sessionTimeout` parameter, which defaults to `1000ms`. + +```js +const form = new FormData(); + +form.append("foo", "123"); + +const { data, headers, status } = await axios.post( + "https://httpbin.org/post", + form, + { + httpVersion: 2, + http2Options: { + // rejectUnauthorized: false, + // sessionTimeout: 1000 + }, + onUploadProgress(e) { + console.log("upload progress", e); + }, + onDownloadProgress(e) { + console.log("download progress", e); + }, + responseType: "arraybuffer", + }, +); +``` + +## Semver + +Since Axios has reached a `v.1.0.0` we will fully embrace semver as per the spec [here](https://semver.org/) + +## Promises + +axios depends on a native ES6 Promise implementation to be [supported](https://caniuse.com/promises). +If your environment doesn't support ES6 Promises, you can [polyfill](https://github.com/jakearchibald/es6-promise). + +## TypeScript + +axios includes [TypeScript](https://typescriptlang.org) definitions and a type guard for axios errors. + +```typescript +let user: User = null; +try { + const { data } = await axios.get("/user?ID=12345"); + user = data.userDetails; +} catch (error) { + if (axios.isAxiosError(error)) { + handleAxiosError(error); + } else { + handleUnexpectedError(error); + } +} +``` + +Because axios dual publishes with an ESM default export and a CJS `module.exports`, there are some caveats. +The recommended setting is to use `"moduleResolution": "node16"` (this is implied by `"module": "node16"`). Note that this requires TypeScript 4.7 or greater. +If use ESM, your settings should be fine. +If you compile TypeScript to CJS and you can’t use `"moduleResolution": "node 16"`, you have to enable `esModuleInterop`. +If you use TypeScript to type check CJS JavaScript code, your only option is to use `"moduleResolution": "node16"`. + +You can also create a custom instance with typed interceptors: + +```typescript +import axios, { AxiosInstance, InternalAxiosRequestConfig } from "axios"; + +const apiClient: AxiosInstance = axios.create({ + baseURL: "https://api.example.com", + timeout: 10000, +}); + +apiClient.interceptors.request.use((config: InternalAxiosRequestConfig) => { + // Add auth token + return config; +}); +``` + +## Online one-click setup + +You can use Gitpod, an online IDE(which is free for Open Source) for contributing or running the examples online. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/axios/axios/blob/main/examples/server.js) + +## Resources + +- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) +- [Ecosystem](https://github.com/axios/axios/blob/v1.x/ECOSYSTEM.md) +- [Contributing Guide](https://github.com/axios/axios/blob/v1.x/CONTRIBUTING.md) +- [Code of Conduct](https://github.com/axios/axios/blob/v1.x/CODE_OF_CONDUCT.md) + +## Credits + +axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [AngularJS](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of AngularJS. + +## License + +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) diff --git a/node_modules/axios/dist/axios.js b/node_modules/axios/dist/axios.js new file mode 100644 index 00000000..c79be96c --- /dev/null +++ b/node_modules/axios/dist/axios.js @@ -0,0 +1,4353 @@ +/*! Axios v1.13.5 Copyright (c) 2026 Matt Zabriskie and contributors */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.axios = factory()); +})(this, (function () { 'use strict'; + + function _OverloadYield(e, d) { + this.v = e, this.k = d; + } + function _arrayLikeToArray(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; + } + function _arrayWithHoles(r) { + if (Array.isArray(r)) return r; + } + function _arrayWithoutHoles(r) { + if (Array.isArray(r)) return _arrayLikeToArray(r); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _asyncGeneratorDelegate(t) { + var e = {}, + n = !1; + function pump(e, r) { + return n = !0, r = new Promise(function (n) { + n(t[e](r)); + }), { + done: !1, + value: new _OverloadYield(r, 1) + }; + } + return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () { + return this; + }, e.next = function (t) { + return n ? (n = !1, t) : pump("next", t); + }, "function" == typeof t.throw && (e.throw = function (t) { + if (n) throw n = !1, t; + return pump("throw", t); + }), "function" == typeof t.return && (e.return = function (t) { + return n ? (n = !1, t) : pump("return", t); + }), e; + } + function _asyncIterator(r) { + var n, + t, + o, + e = 2; + for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { + if (t && null != (n = r[t])) return n.call(r); + if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); + t = "@@asyncIterator", o = "@@iterator"; + } + throw new TypeError("Object is not async iterable"); + } + function AsyncFromSyncIterator(r) { + function AsyncFromSyncIteratorContinuation(r) { + if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); + var n = r.done; + return Promise.resolve(r.value).then(function (r) { + return { + value: r, + done: n + }; + }); + } + return AsyncFromSyncIterator = function (r) { + this.s = r, this.n = r.next; + }, AsyncFromSyncIterator.prototype = { + s: null, + n: null, + next: function () { + return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); + }, + return: function (r) { + var n = this.s.return; + return void 0 === n ? Promise.resolve({ + value: r, + done: !0 + }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); + }, + throw: function (r) { + var n = this.s.return; + return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); + } + }, new AsyncFromSyncIterator(r); + } + function asyncGeneratorStep(n, t, e, r, o, a, c) { + try { + var i = n[a](c), + u = i.value; + } catch (n) { + return void e(n); + } + i.done ? t(u) : Promise.resolve(u).then(r, o); + } + function _asyncToGenerator(n) { + return function () { + var t = this, + e = arguments; + return new Promise(function (r, o) { + var a = n.apply(t, e); + function _next(n) { + asyncGeneratorStep(a, r, o, _next, _throw, "next", n); + } + function _throw(n) { + asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); + } + _next(void 0); + }); + }; + } + function _awaitAsyncGenerator(e) { + return new _OverloadYield(e, 0); + } + function _callSuper(t, o, e) { + return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); + } + function _classCallCheck(a, n) { + if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); + } + function _construct(t, e, r) { + if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); + var o = [null]; + o.push.apply(o, e); + var p = new (t.bind.apply(t, o))(); + return r && _setPrototypeOf(p, r.prototype), p; + } + function _defineProperties(e, r) { + for (var t = 0; t < r.length; t++) { + var o = r[t]; + o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); + } + } + function _createClass(e, r, t) { + return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { + writable: !1 + }), e; + } + function _createForOfIteratorHelper(r, e) { + var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (!t) { + if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { + t && (r = t); + var n = 0, + F = function () {}; + return { + s: F, + n: function () { + return n >= r.length ? { + done: !0 + } : { + done: !1, + value: r[n++] + }; + }, + e: function (r) { + throw r; + }, + f: F + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var o, + a = !0, + u = !1; + return { + s: function () { + t = t.call(r); + }, + n: function () { + var r = t.next(); + return a = r.done, r; + }, + e: function (r) { + u = !0, o = r; + }, + f: function () { + try { + a || null == t.return || t.return(); + } finally { + if (u) throw o; + } + } + }; + } + function _defineProperty(e, r, t) { + return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { + value: t, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[r] = t, e; + } + function _getPrototypeOf(t) { + return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { + return t.__proto__ || Object.getPrototypeOf(t); + }, _getPrototypeOf(t); + } + function _inherits(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + writable: !0, + configurable: !0 + } + }), Object.defineProperty(t, "prototype", { + writable: !1 + }), e && _setPrototypeOf(t, e); + } + function _isNativeFunction(t) { + try { + return -1 !== Function.toString.call(t).indexOf("[native code]"); + } catch (n) { + return "function" == typeof t; + } + } + function _isNativeReflectConstruct() { + try { + var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + } catch (t) {} + return (_isNativeReflectConstruct = function () { + return !!t; + })(); + } + function _iterableToArray(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); + } + function _iterableToArrayLimit(r, l) { + var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t) { + var e, + n, + i, + u, + a = [], + f = !0, + o = !1; + try { + if (i = (t = t.call(r)).next, 0 === l) { + if (Object(t) !== t) return; + f = !1; + } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); + } catch (r) { + o = !0, n = r; + } finally { + try { + if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; + } finally { + if (o) throw n; + } + } + return a; + } + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); + } + return t; + } + function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); + } + return e; + } + function _possibleConstructorReturn(t, e) { + if (e && ("object" == typeof e || "function" == typeof e)) return e; + if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); + return _assertThisInitialized(t); + } + function _regenerator() { + /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ + var e, + t, + r = "function" == typeof Symbol ? Symbol : {}, + n = r.iterator || "@@iterator", + o = r.toStringTag || "@@toStringTag"; + function i(r, n, o, i) { + var c = n && n.prototype instanceof Generator ? n : Generator, + u = Object.create(c.prototype); + return _regeneratorDefine(u, "_invoke", function (r, n, o) { + var i, + c, + u, + f = 0, + p = o || [], + y = !1, + G = { + p: 0, + n: 0, + v: e, + a: d, + f: d.bind(e, 4), + d: function (t, r) { + return i = t, c = 0, u = e, G.n = r, a; + } + }; + function d(r, n) { + for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { + var o, + i = p[t], + d = G.p, + l = i[2]; + r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); + } + if (o || r > 1) return a; + throw y = !0, n; + } + return function (o, p, l) { + if (f > 1) throw TypeError("Generator is already running"); + for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { + i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); + try { + if (f = 2, i) { + if (c || (o = "next"), t = i[o]) { + if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); + if (!t.done) return t; + u = t.value, c < 2 && (c = 0); + } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); + i = e; + } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; + } catch (t) { + i = e, c = 1, u = t; + } finally { + f = 1; + } + } + return { + value: t, + done: y + }; + }; + }(r, o, i), !0), u; + } + var a = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + t = Object.getPrototypeOf; + var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () { + return this; + }), t), + u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); + function f(e) { + return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; + } + return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine(u), _regeneratorDefine(u, o, "Generator"), _regeneratorDefine(u, n, function () { + return this; + }), _regeneratorDefine(u, "toString", function () { + return "[object Generator]"; + }), (_regenerator = function () { + return { + w: i, + m: f + }; + })(); + } + function _regeneratorDefine(e, r, n, t) { + var i = Object.defineProperty; + try { + i({}, "", {}); + } catch (e) { + i = 0; + } + _regeneratorDefine = function (e, r, n, t) { + function o(r, n) { + _regeneratorDefine(e, r, function (e) { + return this._invoke(r, n, e); + }); + } + r ? i ? i(e, r, { + value: n, + enumerable: !t, + configurable: !t, + writable: !t + }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); + }, _regeneratorDefine(e, r, n, t); + } + function _regeneratorValues(e) { + if (null != e) { + var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], + r = 0; + if (t) return t.call(e); + if ("function" == typeof e.next) return e; + if (!isNaN(e.length)) return { + next: function () { + return e && r >= e.length && (e = void 0), { + value: e && e[r++], + done: !e + }; + } + }; + } + throw new TypeError(typeof e + " is not iterable"); + } + function _setPrototypeOf(t, e) { + return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { + return t.__proto__ = e, t; + }, _setPrototypeOf(t, e); + } + function _slicedToArray(r, e) { + return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); + } + function _toConsumableArray(r) { + return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); + } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : i + ""; + } + function _typeof(o) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } + function _unsupportedIterableToArray(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray(r, a); + var t = {}.toString.call(r).slice(8, -1); + return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; + } + } + function _wrapAsyncGenerator(e) { + return function () { + return new AsyncGenerator(e.apply(this, arguments)); + }; + } + function AsyncGenerator(e) { + var r, t; + function resume(r, t) { + try { + var n = e[r](t), + o = n.value, + u = o instanceof _OverloadYield; + Promise.resolve(u ? o.v : o).then(function (t) { + if (u) { + var i = "return" === r ? "return" : "next"; + if (!o.k || t.done) return resume(i, t); + t = e[i](t).value; + } + settle(n.done ? "return" : "normal", t); + }, function (e) { + resume("throw", e); + }); + } catch (e) { + settle("throw", e); + } + } + function settle(e, n) { + switch (e) { + case "return": + r.resolve({ + value: n, + done: !0 + }); + break; + case "throw": + r.reject(n); + break; + default: + r.resolve({ + value: n, + done: !1 + }); + } + (r = r.next) ? resume(r.key, r.arg) : t = null; + } + this._invoke = function (e, n) { + return new Promise(function (o, u) { + var i = { + key: e, + arg: n, + resolve: o, + reject: u, + next: null + }; + t ? t = t.next = i : (r = t = i, resume(e, n)); + }); + }, "function" != typeof e.return && (this.return = void 0); + } + AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () { + return this; + }, AsyncGenerator.prototype.next = function (e) { + return this._invoke("next", e); + }, AsyncGenerator.prototype.throw = function (e) { + return this._invoke("throw", e); + }, AsyncGenerator.prototype.return = function (e) { + return this._invoke("return", e); + }; + function _wrapNativeSuper(t) { + var r = "function" == typeof Map ? new Map() : void 0; + return _wrapNativeSuper = function (t) { + if (null === t || !_isNativeFunction(t)) return t; + if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function"); + if (void 0 !== r) { + if (r.has(t)) return r.get(t); + r.set(t, Wrapper); + } + function Wrapper() { + return _construct(t, arguments, _getPrototypeOf(this).constructor); + } + return Wrapper.prototype = Object.create(t.prototype, { + constructor: { + value: Wrapper, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), _setPrototypeOf(Wrapper, t); + }, _wrapNativeSuper(t); + } + + /** + * Create a bound version of a function with a specified `this` context + * + * @param {Function} fn - The function to bind + * @param {*} thisArg - The value to be passed as the `this` parameter + * @returns {Function} A new function that will call the original function with the specified `this` context + */ + function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; + } + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + var getPrototypeOf = Object.getPrototypeOf; + var iterator = Symbol.iterator, + toStringTag = Symbol.toStringTag; + var kindOf = function (cache) { + return function (thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; + }(Object.create(null)); + var kindOfTest = function kindOfTest(type) { + type = type.toLowerCase(); + return function (thing) { + return kindOf(thing) === type; + }; + }; + var typeOfTest = function typeOfTest(type) { + return function (thing) { + return _typeof(thing) === type; + }; + }; + + /** + * Determine if a value is a non-null object + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ + var isArray = Array.isArray; + + /** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ + var isUndefined = typeOfTest("undefined"); + + /** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ + function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction$1(val.constructor.isBuffer) && val.constructor.isBuffer(val); + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + var isArrayBuffer = kindOfTest("ArrayBuffer"); + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val); + } else { + result = val && val.buffer && isArrayBuffer(val.buffer); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ + var isString = typeOfTest("string"); + + /** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + var isFunction$1 = typeOfTest("function"); + + /** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ + var isNumber = typeOfTest("number"); + + /** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ + var isObject = function isObject(thing) { + return thing !== null && _typeof(thing) === "object"; + }; + + /** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ + var isBoolean = function isBoolean(thing) { + return thing === true || thing === false; + }; + + /** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ + var isPlainObject = function isPlainObject(val) { + if (kindOf(val) !== "object") { + return false; + } + var prototype = getPrototypeOf(val); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); + }; + + /** + * Determine if a value is an empty object (safely handles Buffers) + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an empty object, otherwise false + */ + var isEmptyObject = function isEmptyObject(val) { + // Early return for non-objects or Buffers to prevent RangeError + if (!isObject(val) || isBuffer(val)) { + return false; + } + try { + return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; + } catch (e) { + // Fallback for any other objects that might cause RangeError with Object.keys() + return false; + } + }; + + /** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ + var isDate = kindOfTest("Date"); + + /** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ + var isFile = kindOfTest("File"); + + /** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ + var isBlob = kindOfTest("Blob"); + + /** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ + var isFileList = kindOfTest("FileList"); + + /** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ + var isStream = function isStream(val) { + return isObject(val) && isFunction$1(val.pipe); + }; + + /** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ + var isFormData = function isFormData(thing) { + var kind; + return thing && (typeof FormData === "function" && thing instanceof FormData || isFunction$1(thing.append) && ((kind = kindOf(thing)) === "formdata" || + // detect form-data instance + kind === "object" && isFunction$1(thing.toString) && thing.toString() === "[object FormData]")); + }; + + /** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + var isURLSearchParams = kindOfTest("URLSearchParams"); + var _map = ["ReadableStream", "Request", "Response", "Headers"].map(kindOfTest), + _map2 = _slicedToArray(_map, 4), + isReadableStream = _map2[0], + isRequest = _map2[1], + isResponse = _map2[2], + isHeaders = _map2[3]; + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ + var trim = function trim(str) { + return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); + }; + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys = false] + * @returns {any} + */ + function forEach(obj, fn) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref$allOwnKeys = _ref.allOwnKeys, + allOwnKeys = _ref$allOwnKeys === void 0 ? false : _ref$allOwnKeys; + // Don't bother if no value provided + if (obj === null || typeof obj === "undefined") { + return; + } + var i; + var l; + + // Force an array if not already something iterable + if (_typeof(obj) !== "object") { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Buffer check + if (isBuffer(obj)) { + return; + } + + // Iterate over object keys + var keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } + } + function findKey(obj, key) { + if (isBuffer(obj)) { + return null; + } + key = key.toLowerCase(); + var keys = Object.keys(obj); + var i = keys.length; + var _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; + } + var _global = function () { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global; + }(); + var isContextDefined = function isContextDefined(context) { + return !isUndefined(context) && context !== _global; + }; + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * const result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ + function merge(/* obj1, obj2, obj3, ... */ + ) { + var _ref2 = isContextDefined(this) && this || {}, + caseless = _ref2.caseless, + skipUndefined = _ref2.skipUndefined; + var result = {}; + var assignValue = function assignValue(val, key) { + // Skip dangerous property names to prevent prototype pollution + if (key === "__proto__" || key === "constructor" || key === "prototype") { + return; + } + var targetKey = caseless && findKey(result, key) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else if (!skipUndefined || !isUndefined(val)) { + result[targetKey] = val; + } + }; + for (var i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; + } + + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys] + * @returns {Object} The resulting value of object a + */ + var extend = function extend(a, b, thisArg) { + var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, + allOwnKeys = _ref3.allOwnKeys; + forEach(b, function (val, key) { + if (thisArg && isFunction$1(val)) { + Object.defineProperty(a, key, { + value: bind(val, thisArg), + writable: true, + enumerable: true, + configurable: true + }); + } else { + Object.defineProperty(a, key, { + value: val, + writable: true, + enumerable: true, + configurable: true + }); + } + }, { + allOwnKeys: allOwnKeys + }); + return a; + }; + + /** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ + var stripBOM = function stripBOM(content) { + if (content.charCodeAt(0) === 0xfeff) { + content = content.slice(1); + } + return content; + }; + + /** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ + var inherits = function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + Object.defineProperty(constructor.prototype, "constructor", { + value: constructor, + writable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(constructor, "super", { + value: superConstructor.prototype + }); + props && Object.assign(constructor.prototype, props); + }; + + /** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ + var toFlatObject = function toFlatObject(sourceObj, destObj, filter, propFilter) { + var props; + var i; + var prop; + var merged = {}; + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + return destObj; + }; + + /** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ + var endsWith = function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }; + + /** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ + var toArray = function toArray(thing) { + if (!thing) return null; + if (isArray(thing)) return thing; + var i = thing.length; + if (!isNumber(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; + }; + + /** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ + // eslint-disable-next-line func-names + var isTypedArray = function (TypedArray) { + // eslint-disable-next-line func-names + return function (thing) { + return TypedArray && thing instanceof TypedArray; + }; + }(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)); + + /** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ + var forEachEntry = function forEachEntry(obj, fn) { + var generator = obj && obj[iterator]; + var _iterator = generator.call(obj); + var result; + while ((result = _iterator.next()) && !result.done) { + var pair = result.value; + fn.call(obj, pair[0], pair[1]); + } + }; + + /** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ + var matchAll = function matchAll(regExp, str) { + var matches; + var arr = []; + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + return arr; + }; + + /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ + var isHTMLForm = kindOfTest("HTMLFormElement"); + var toCamelCase = function toCamelCase(str) { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + }); + }; + + /* Creating a function that will check if an object has a property. */ + var hasOwnProperty = function (_ref4) { + var hasOwnProperty = _ref4.hasOwnProperty; + return function (obj, prop) { + return hasOwnProperty.call(obj, prop); + }; + }(Object.prototype); + + /** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ + var isRegExp = kindOfTest("RegExp"); + var reduceDescriptors = function reduceDescriptors(obj, reducer) { + var descriptors = Object.getOwnPropertyDescriptors(obj); + var reducedDescriptors = {}; + forEach(descriptors, function (descriptor, name) { + var ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + Object.defineProperties(obj, reducedDescriptors); + }; + + /** + * Makes all methods read-only + * @param {Object} obj + */ + + var freezeMethods = function freezeMethods(obj) { + reduceDescriptors(obj, function (descriptor, name) { + // skip restricted props in strict mode + if (isFunction$1(obj) && ["arguments", "caller", "callee"].indexOf(name) !== -1) { + return false; + } + var value = obj[name]; + if (!isFunction$1(value)) return; + descriptor.enumerable = false; + if ("writable" in descriptor) { + descriptor.writable = false; + return; + } + if (!descriptor.set) { + descriptor.set = function () { + throw Error("Can not rewrite read-only method '" + name + "'"); + }; + } + }); + }; + var toObjectSet = function toObjectSet(arrayOrString, delimiter) { + var obj = {}; + var define = function define(arr) { + arr.forEach(function (value) { + obj[value] = true; + }); + }; + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); + return obj; + }; + var noop = function noop() {}; + var toFiniteNumber = function toFiniteNumber(value, defaultValue) { + return value != null && Number.isFinite(value = +value) ? value : defaultValue; + }; + + /** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ + function isSpecCompliantForm(thing) { + return !!(thing && isFunction$1(thing.append) && thing[toStringTag] === "FormData" && thing[iterator]); + } + var toJSONObject = function toJSONObject(obj) { + var stack = new Array(10); + var _visit = function visit(source, i) { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + //Buffer check + if (isBuffer(source)) { + return source; + } + if (!("toJSON" in source)) { + stack[i] = source; + var target = isArray(source) ? [] : {}; + forEach(source, function (value, key) { + var reducedValue = _visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + stack[i] = undefined; + return target; + } + } + return source; + }; + return _visit(obj, 0); + }; + var isAsyncFn = kindOfTest("AsyncFunction"); + var isThenable = function isThenable(thing) { + return thing && (isObject(thing) || isFunction$1(thing)) && isFunction$1(thing.then) && isFunction$1(thing["catch"]); + }; + + // original code + // https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + + var _setImmediate = function (setImmediateSupported, postMessageSupported) { + if (setImmediateSupported) { + return setImmediate; + } + return postMessageSupported ? function (token, callbacks) { + _global.addEventListener("message", function (_ref5) { + var source = _ref5.source, + data = _ref5.data; + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + return function (cb) { + callbacks.push(cb); + _global.postMessage(token, "*"); + }; + }("axios@".concat(Math.random()), []) : function (cb) { + return setTimeout(cb); + }; + }(typeof setImmediate === "function", isFunction$1(_global.postMessage)); + var asap = typeof queueMicrotask !== "undefined" ? queueMicrotask.bind(_global) : typeof process !== "undefined" && process.nextTick || _setImmediate; + + // ********************* + + var isIterable = function isIterable(thing) { + return thing != null && isFunction$1(thing[iterator]); + }; + var utils$1 = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isBoolean: isBoolean, + isObject: isObject, + isPlainObject: isPlainObject, + isEmptyObject: isEmptyObject, + isReadableStream: isReadableStream, + isRequest: isRequest, + isResponse: isResponse, + isHeaders: isHeaders, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isRegExp: isRegExp, + isFunction: isFunction$1, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isTypedArray: isTypedArray, + isFileList: isFileList, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + forEachEntry: forEachEntry, + matchAll: matchAll, + isHTMLForm: isHTMLForm, + hasOwnProperty: hasOwnProperty, + hasOwnProp: hasOwnProperty, + // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors: reduceDescriptors, + freezeMethods: freezeMethods, + toObjectSet: toObjectSet, + toCamelCase: toCamelCase, + noop: noop, + toFiniteNumber: toFiniteNumber, + findKey: findKey, + global: _global, + isContextDefined: isContextDefined, + isSpecCompliantForm: isSpecCompliantForm, + toJSONObject: toJSONObject, + isAsyncFn: isAsyncFn, + isThenable: isThenable, + setImmediate: _setImmediate, + asap: asap, + isIterable: isIterable + }; + + var AxiosError = /*#__PURE__*/function (_Error) { + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + function AxiosError(message, code, config, request, response) { + var _this; + _classCallCheck(this, AxiosError); + _this = _callSuper(this, AxiosError, [message]); + _this.name = 'AxiosError'; + _this.isAxiosError = true; + code && (_this.code = code); + config && (_this.config = config); + request && (_this.request = request); + if (response) { + _this.response = response; + _this.status = response.status; + } + return _this; + } + _inherits(AxiosError, _Error); + return _createClass(AxiosError, [{ + key: "toJSON", + value: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status + }; + } + }], [{ + key: "from", + value: function from(error, code, config, request, response, customProps) { + var axiosError = new AxiosError(error.message, code || error.code, config, request, response); + axiosError.cause = error; + axiosError.name = error.name; + customProps && Object.assign(axiosError, customProps); + return axiosError; + } + }]); + }(/*#__PURE__*/_wrapNativeSuper(Error)); // This can be changed to static properties as soon as the parser options in .eslint.cjs are updated. + AxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE'; + AxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION'; + AxiosError.ECONNABORTED = 'ECONNABORTED'; + AxiosError.ETIMEDOUT = 'ETIMEDOUT'; + AxiosError.ERR_NETWORK = 'ERR_NETWORK'; + AxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS'; + AxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED'; + AxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE'; + AxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST'; + AxiosError.ERR_CANCELED = 'ERR_CANCELED'; + AxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT'; + AxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL'; + var AxiosError$1 = AxiosError; + + // eslint-disable-next-line strict + var httpAdapter = null; + + /** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ + function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); + } + + /** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ + function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; + } + + /** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ + function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); + } + + /** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ + function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); + } + var predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); + }); + + /** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + + /** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ + function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + var metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + var visitor = options.visitor || defaultVisitor; + var dots = options.dots; + var indexes = options.indexes; + var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + var useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + function convertValue(value) { + if (value === null) return ''; + if (utils$1.isDate(value)) { + return value.toISOString(); + } + if (utils$1.isBoolean(value)) { + return value.toString(); + } + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError$1('Blob is not supported. Use a Buffer instead.'); + } + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + var arr = value; + if (value && !path && _typeof(value) === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if (utils$1.isArray(value) && isFlatArray(value) || (utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el)); + }); + return false; + } + } + if (isVisitable(value)) { + return true; + } + formData.append(renderKey(path, key, dots), convertValue(value)); + return false; + } + var stack = []; + var exposedHelpers = Object.assign(predicates, { + defaultVisitor: defaultVisitor, + convertValue: convertValue, + isVisitable: isVisitable + }); + function build(value, path) { + if (utils$1.isUndefined(value)) return; + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + stack.push(value); + utils$1.forEach(value, function each(el, key) { + var result = !(utils$1.isUndefined(el) || el === null) && visitor.call(formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers); + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + stack.pop(); + } + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + build(obj); + return formData; + } + + /** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ + function encode$1(str) { + var charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); + } + + /** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ + function AxiosURLSearchParams(params, options) { + this._pairs = []; + params && toFormData(params, this, options); + } + var prototype = AxiosURLSearchParams.prototype; + prototype.append = function append(name, value) { + this._pairs.push([name, value]); + }; + prototype.toString = function toString(encoder) { + var _encode = encoder ? function (value) { + return encoder.call(this, value, encode$1); + } : encode$1; + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); + }; + + /** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ + function encode(val) { + return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ + function buildURL(url, params, options) { + if (!params) { + return url; + } + var _encode = options && options.encode || encode; + var _options = utils$1.isFunction(options) ? { + serialize: options + } : options; + var serializeFn = _options && _options.serialize; + var serializedParams; + if (serializeFn) { + serializedParams = serializeFn(params, _options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams(params, _options).toString(_encode); + } + if (serializedParams) { + var hashmarkIndex = url.indexOf("#"); + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + return url; + } + + var InterceptorManager = /*#__PURE__*/function () { + function InterceptorManager() { + _classCallCheck(this, InterceptorManager); + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * @param {Object} options The options for the interceptor, synchronous and runWhen + * + * @return {Number} An ID used to remove interceptor later + */ + return _createClass(InterceptorManager, [{ + key: "use", + value: function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {void} + */ + }, { + key: "eject", + value: function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + }, { + key: "clear", + value: function clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + }, { + key: "forEach", + value: function forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } + }]); + }(); + var InterceptorManager$1 = InterceptorManager; + + var transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false, + legacyInterceptorReqResOrdering: true + }; + + var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; + + var FormData$1 = typeof FormData !== 'undefined' ? FormData : null; + + var Blob$1 = typeof Blob !== 'undefined' ? Blob : null; + + var platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] + }; + + var hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + var _navigator = (typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) === 'object' && navigator || undefined; + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ + var hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + + /** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ + var hasStandardBrowserWebWorkerEnv = function () { + return typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && typeof self.importScripts === 'function'; + }(); + var origin = hasBrowserEnv && window.location.href || 'http://localhost'; + + var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin + }); + + var platform = _objectSpread2(_objectSpread2({}, utils), platform$1); + + function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), _objectSpread2({ + visitor: function visitor(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); + } + + /** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ + function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(function (match) { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); + } + + /** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ + function arrayToObject(arr) { + var obj = {}; + var keys = Object.keys(arr); + var i; + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; + } + + /** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ + function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + var name = path[index++]; + if (name === '__proto__') return true; + var isNumericKey = Number.isFinite(+name); + var isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + return !isNumericKey; + } + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + var result = buildPath(path, value, target[name], index); + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + return !isNumericKey; + } + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + var obj = {}; + utils$1.forEachEntry(formData, function (name, value) { + buildPath(parsePropPath(name), value, obj, 0); + }); + return obj; + } + return null; + } + + /** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ + function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + return (encoder || JSON.stringify)(rawValue); + } + var defaults = { + transitional: transitionalDefaults, + adapter: ['xhr', 'http', 'fetch'], + transformRequest: [function transformRequest(data, headers) { + var contentType = headers.getContentType() || ''; + var hasJSONContentType = contentType.indexOf('application/json') > -1; + var isObjectPayload = utils$1.isObject(data); + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + var isFormData = utils$1.isFormData(data); + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + if (utils$1.isArrayBuffer(data) || utils$1.isBuffer(data) || utils$1.isStream(data) || utils$1.isFile(data) || utils$1.isBlob(data) || utils$1.isReadableStream(data)) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + var isFileList; + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + var _FormData = this.env && this.env.FormData; + return toFormData(isFileList ? { + 'files[]': data + } : data, _FormData && new _FormData(), this.formSerializer); + } + } + if (isObjectPayload || hasJSONContentType) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + return data; + }], + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var JSONRequested = this.responseType === 'json'; + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + if (data && utils$1.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) { + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var strictJSONParsing = !silentJSONParsing && JSONRequested; + try { + return JSON.parse(data, this.parseReviver); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + return data; + }], + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + maxContentLength: -1, + maxBodyLength: -1, + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } + }; + utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], function (method) { + defaults.headers[method] = {}; + }); + var defaults$1 = defaults; + + // RawAxiosHeaders whose duplicates are ignored by node + // c.f. https://nodejs.org/api/http.html#http_message_headers + var ignoreDuplicateOf = utils$1.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']); + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ + var parseHeaders = (function (rawHeaders) { + var parsed = {}; + var key; + var val; + var i; + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + if (!key || parsed[key] && ignoreDuplicateOf[key]) { + return; + } + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + return parsed; + }); + + var $internals = Symbol('internals'); + function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); + } + function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); + } + function parseTokens(str) { + var tokens = Object.create(null); + var tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + var match; + while (match = tokensRE.exec(str)) { + tokens[match[1]] = match[2]; + } + return tokens; + } + var isValidHeaderName = function isValidHeaderName(str) { + return /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + }; + function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + if (isHeaderNameFilter) { + value = header; + } + if (!utils$1.isString(value)) return; + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } + } + function formatHeader(header) { + return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, function (w, _char, str) { + return _char.toUpperCase() + str; + }); + } + function buildAccessors(obj, header) { + var accessorName = utils$1.toCamelCase(' ' + header); + ['get', 'set', 'has'].forEach(function (methodName) { + Object.defineProperty(obj, methodName + accessorName, { + value: function value(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); + } + var AxiosHeaders = /*#__PURE__*/function () { + function AxiosHeaders(headers) { + _classCallCheck(this, AxiosHeaders); + headers && this.set(headers); + } + return _createClass(AxiosHeaders, [{ + key: "set", + value: function set(header, valueOrRewrite, rewrite) { + var self = this; + function setHeader(_value, _header, _rewrite) { + var lHeader = normalizeHeader(_header); + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + var key = utils$1.findKey(self, lHeader); + if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) { + self[key || _header] = normalizeValue(_value); + } + } + var setHeaders = function setHeaders(headers, _rewrite) { + return utils$1.forEach(headers, function (_value, _header) { + return setHeader(_value, _header, _rewrite); + }); + }; + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if (utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + var obj = {}, + dest, + key; + var _iterator = _createForOfIteratorHelper(header), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var entry = _step.value; + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + obj[key = entry[0]] = (dest = obj[key]) ? utils$1.isArray(dest) ? [].concat(_toConsumableArray(dest), [entry[1]]) : [dest, entry[1]] : entry[1]; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + return this; + } + }, { + key: "get", + value: function get(header, parser) { + header = normalizeHeader(header); + if (header) { + var key = utils$1.findKey(this, header); + if (key) { + var value = this[key]; + if (!parser) { + return value; + } + if (parser === true) { + return parseTokens(value); + } + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + }, { + key: "has", + value: function has(header, matcher) { + header = normalizeHeader(header); + if (header) { + var key = utils$1.findKey(this, header); + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + return false; + } + }, { + key: "delete", + value: function _delete(header, matcher) { + var self = this; + var deleted = false; + function deleteHeader(_header) { + _header = normalizeHeader(_header); + if (_header) { + var key = utils$1.findKey(self, _header); + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + deleted = true; + } + } + } + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + return deleted; + } + }, { + key: "clear", + value: function clear(matcher) { + var keys = Object.keys(this); + var i = keys.length; + var deleted = false; + while (i--) { + var key = keys[i]; + if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + return deleted; + } + }, { + key: "normalize", + value: function normalize(format) { + var self = this; + var headers = {}; + utils$1.forEach(this, function (value, header) { + var key = utils$1.findKey(headers, header); + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + var normalized = format ? formatHeader(header) : String(header).trim(); + if (normalized !== header) { + delete self[header]; + } + self[normalized] = normalizeValue(value); + headers[normalized] = true; + }); + return this; + } + }, { + key: "concat", + value: function concat() { + var _this$constructor; + for (var _len = arguments.length, targets = new Array(_len), _key = 0; _key < _len; _key++) { + targets[_key] = arguments[_key]; + } + return (_this$constructor = this.constructor).concat.apply(_this$constructor, [this].concat(targets)); + } + }, { + key: "toJSON", + value: function toJSON(asStrings) { + var obj = Object.create(null); + utils$1.forEach(this, function (value, header) { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + return obj; + } + }, { + key: Symbol.iterator, + value: function value() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + }, { + key: "toString", + value: function toString() { + return Object.entries(this.toJSON()).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + header = _ref2[0], + value = _ref2[1]; + return header + ': ' + value; + }).join('\n'); + } + }, { + key: "getSetCookie", + value: function getSetCookie() { + return this.get("set-cookie") || []; + } + }, { + key: Symbol.toStringTag, + get: function get() { + return 'AxiosHeaders'; + } + }], [{ + key: "from", + value: function from(thing) { + return thing instanceof this ? thing : new this(thing); + } + }, { + key: "concat", + value: function concat(first) { + var computed = new this(first); + for (var _len2 = arguments.length, targets = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + targets[_key2 - 1] = arguments[_key2]; + } + targets.forEach(function (target) { + return computed.set(target); + }); + return computed; + } + }, { + key: "accessor", + value: function accessor(header) { + var internals = this[$internals] = this[$internals] = { + accessors: {} + }; + var accessors = internals.accessors; + var prototype = this.prototype; + function defineAccessor(_header) { + var lHeader = normalizeHeader(_header); + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + return this; + } + }]); + }(); + AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + + // reserved names hotfix + utils$1.reduceDescriptors(AxiosHeaders.prototype, function (_ref3, key) { + var value = _ref3.value; + var mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: function get() { + return value; + }, + set: function set(headerValue) { + this[mapped] = headerValue; + } + }; + }); + utils$1.freezeMethods(AxiosHeaders); + var AxiosHeaders$1 = AxiosHeaders; + + /** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ + function transformData(fns, response) { + var config = this || defaults$1; + var context = response || config; + var headers = AxiosHeaders$1.from(context.headers); + var data = context.data; + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + headers.normalize(); + return data; + } + + function isCancel(value) { + return !!(value && value.__CANCEL__); + } + + var CanceledError = /*#__PURE__*/function (_AxiosError) { + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + function CanceledError(message, config, request) { + var _this; + _classCallCheck(this, CanceledError); + _this = _callSuper(this, CanceledError, [message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request]); + _this.name = 'CanceledError'; + _this.__CANCEL__ = true; + return _this; + } + _inherits(CanceledError, _AxiosError); + return _createClass(CanceledError); + }(AxiosError$1); + var CanceledError$1 = CanceledError; + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ + function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError$1('Request failed with status code ' + response.status, [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response)); + } + } + + function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; + } + + /** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ + function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + var bytes = new Array(samplesCount); + var timestamps = new Array(samplesCount); + var head = 0; + var tail = 0; + var firstSampleTS; + min = min !== undefined ? min : 1000; + return function push(chunkLength) { + var now = Date.now(); + var startedAt = timestamps[tail]; + if (!firstSampleTS) { + firstSampleTS = now; + } + bytes[head] = chunkLength; + timestamps[head] = now; + var i = tail; + var bytesCount = 0; + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + head = (head + 1) % samplesCount; + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + if (now - firstSampleTS < min) { + return; + } + var passed = startedAt && now - startedAt; + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; + } + + /** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ + function throttle(fn, freq) { + var timestamp = 0; + var threshold = 1000 / freq; + var lastArgs; + var timer; + var invoke = function invoke(args) { + var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Date.now(); + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(void 0, _toConsumableArray(args)); + }; + var throttled = function throttled() { + var now = Date.now(); + var passed = now - timestamp; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + if (passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(function () { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + var flush = function flush() { + return lastArgs && invoke(lastArgs); + }; + return [throttled, flush]; + } + + var progressEventReducer = function progressEventReducer(listener, isDownloadStream) { + var freq = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3; + var bytesNotified = 0; + var _speedometer = speedometer(50, 250); + return throttle(function (e) { + var loaded = e.loaded; + var total = e.lengthComputable ? e.total : undefined; + var progressBytes = loaded - bytesNotified; + var rate = _speedometer(progressBytes); + var inRange = loaded <= total; + bytesNotified = loaded; + var data = _defineProperty({ + loaded: loaded, + total: total, + progress: total ? loaded / total : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null + }, isDownloadStream ? 'download' : 'upload', true); + listener(data); + }, freq); + }; + var progressEventDecorator = function progressEventDecorator(total, throttled) { + var lengthComputable = total != null; + return [function (loaded) { + return throttled[0]({ + lengthComputable: lengthComputable, + total: total, + loaded: loaded + }); + }, throttled[1]]; + }; + var asyncDecorator = function asyncDecorator(fn) { + return function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return utils$1.asap(function () { + return fn.apply(void 0, args); + }); + }; + }; + + var isURLSameOrigin = platform.hasStandardBrowserEnv ? function (origin, isMSIE) { + return function (url) { + url = new URL(url, platform.origin); + return origin.protocol === url.protocol && origin.host === url.host && (isMSIE || origin.port === url.port); + }; + }(new URL(platform.origin), platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)) : function () { + return true; + }; + + var cookies = platform.hasStandardBrowserEnv ? + // Standard browser envs support document.cookie + { + write: function write(name, value, expires, path, domain, secure, sameSite) { + if (typeof document === 'undefined') return; + var cookie = ["".concat(name, "=").concat(encodeURIComponent(value))]; + if (utils$1.isNumber(expires)) { + cookie.push("expires=".concat(new Date(expires).toUTCString())); + } + if (utils$1.isString(path)) { + cookie.push("path=".concat(path)); + } + if (utils$1.isString(domain)) { + cookie.push("domain=".concat(domain)); + } + if (secure === true) { + cookie.push('secure'); + } + if (utils$1.isString(sameSite)) { + cookie.push("SameSite=".concat(sameSite)); + } + document.cookie = cookie.join('; '); + }, + read: function read(name) { + if (typeof document === 'undefined') return null; + var match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); + return match ? decodeURIComponent(match[1]) : null; + }, + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000, '/'); + } + } : + // Non-standard browser env (web workers, react-native) lack needed support. + { + write: function write() {}, + read: function read() { + return null; + }, + remove: function remove() {} + }; + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + if (typeof url !== 'string') { + return false; + } + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); + } + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ + function combineURLs(baseURL, relativeURL) { + return relativeURL ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; + } + + /** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ + function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + var isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; + } + + var headersToObject = function headersToObject(thing) { + return thing instanceof AxiosHeaders$1 ? _objectSpread2({}, thing) : thing; + }; + + /** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ + function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({ + caseless: caseless + }, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + function mergeDeepProperties(a, b, prop, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop, caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + var mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: function headers(a, b, prop) { + return mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true); + } + }; + utils$1.forEach(Object.keys(_objectSpread2(_objectSpread2({}, config1), config2)), function computeConfigValue(prop) { + if (prop === "__proto__" || prop === "constructor" || prop === "prototype") return; + var merge = utils$1.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties; + var configValue = merge(config1[prop], config2[prop], prop); + utils$1.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue); + }); + return config; + } + + var resolveConfig = (function (config) { + var newConfig = mergeConfig({}, config); + var data = newConfig.data, + withXSRFToken = newConfig.withXSRFToken, + xsrfHeaderName = newConfig.xsrfHeaderName, + xsrfCookieName = newConfig.xsrfCookieName, + headers = newConfig.headers, + auth = newConfig.auth; + newConfig.headers = headers = AxiosHeaders$1.from(headers); + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))); + } + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // browser handles it + } else if (utils$1.isFunction(data.getHeaders)) { + // Node.js FormData (like form-data package) + var formHeaders = data.getHeaders(); + // Only set safe headers to avoid overwriting security headers + var allowedHeaders = ['content-type', 'content-length']; + Object.entries(formHeaders).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + val = _ref2[1]; + if (allowedHeaders.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(newConfig.url)) { + // Add xsrf header + var xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + return newConfig; + }); + + var isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + var xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var _config = resolveConfig(config); + var requestData = _config.data; + var requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + var responseType = _config.responseType, + onUploadProgress = _config.onUploadProgress, + onDownloadProgress = _config.onDownloadProgress; + var onCanceled; + var uploadThrottled, downloadThrottled; + var flushUpload, flushDownload; + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + var request = new XMLHttpRequest(); + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = AxiosHeaders$1.from('getAllResponseHeaders' in request && request.getAllResponseHeaders()); + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError(event) { + // Browsers deliver a ProgressEvent in XHR onerror + // (message may be empty; when present, surface it) + // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event + var msg = event && event.message ? event.message : 'Network Error'; + var err = new AxiosError$1(msg, AxiosError$1.ERR_NETWORK, config, request); + // attach the underlying event for consumers who want details + err.event = event || null; + reject(err); + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError$1(timeoutErrorMessage, transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + var _progressEventReducer = progressEventReducer(onDownloadProgress, true); + var _progressEventReducer2 = _slicedToArray(_progressEventReducer, 2); + downloadThrottled = _progressEventReducer2[0]; + flushDownload = _progressEventReducer2[1]; + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + var _progressEventReducer3 = progressEventReducer(onUploadProgress); + var _progressEventReducer4 = _slicedToArray(_progressEventReducer3, 2); + uploadThrottled = _progressEventReducer4[0]; + flushUpload = _progressEventReducer4[1]; + request.upload.addEventListener('progress', uploadThrottled); + request.upload.addEventListener('loadend', flushUpload); + } + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function onCanceled(cancel) { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel); + request.abort(); + request = null; + }; + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + var protocol = parseProtocol(_config.url); + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config)); + return; + } + + // Send the request + request.send(requestData || null); + }); + }; + + var composeSignals = function composeSignals(signals, timeout) { + var _signals = signals = signals ? signals.filter(Boolean) : [], + length = _signals.length; + if (timeout || length) { + var controller = new AbortController(); + var aborted; + var onabort = function onabort(reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + var err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err)); + } + }; + var timer = timeout && setTimeout(function () { + timer = null; + onabort(new AxiosError$1("timeout of ".concat(timeout, "ms exceeded"), AxiosError$1.ETIMEDOUT)); + }, timeout); + var unsubscribe = function unsubscribe() { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(function (signal) { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + signals.forEach(function (signal) { + return signal.addEventListener('abort', onabort); + }); + var signal = controller.signal; + signal.unsubscribe = function () { + return utils$1.asap(unsubscribe); + }; + return signal; + } + }; + var composeSignals$1 = composeSignals; + + var streamChunk = /*#__PURE__*/_regenerator().m(function streamChunk(chunk, chunkSize) { + var len, pos, end; + return _regenerator().w(function (_context) { + while (1) switch (_context.n) { + case 0: + len = chunk.byteLength; + if (!(!chunkSize || len < chunkSize)) { + _context.n = 2; + break; + } + _context.n = 1; + return chunk; + case 1: + return _context.a(2); + case 2: + pos = 0; + case 3: + if (!(pos < len)) { + _context.n = 5; + break; + } + end = pos + chunkSize; + _context.n = 4; + return chunk.slice(pos, end); + case 4: + pos = end; + _context.n = 3; + break; + case 5: + return _context.a(2); + } + }, streamChunk); + }); + var readBytes = /*#__PURE__*/function () { + var _ref = _wrapAsyncGenerator(/*#__PURE__*/_regenerator().m(function _callee(iterable, chunkSize) { + var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, chunk, _t; + return _regenerator().w(function (_context2) { + while (1) switch (_context2.p = _context2.n) { + case 0: + _iteratorAbruptCompletion = false; + _didIteratorError = false; + _context2.p = 1; + _iterator = _asyncIterator(readStream(iterable)); + case 2: + _context2.n = 3; + return _awaitAsyncGenerator(_iterator.next()); + case 3: + if (!(_iteratorAbruptCompletion = !(_step = _context2.v).done)) { + _context2.n = 5; + break; + } + chunk = _step.value; + return _context2.d(_regeneratorValues(_asyncGeneratorDelegate(_asyncIterator(streamChunk(chunk, chunkSize)))), 4); + case 4: + _iteratorAbruptCompletion = false; + _context2.n = 2; + break; + case 5: + _context2.n = 7; + break; + case 6: + _context2.p = 6; + _t = _context2.v; + _didIteratorError = true; + _iteratorError = _t; + case 7: + _context2.p = 7; + _context2.p = 8; + if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) { + _context2.n = 9; + break; + } + _context2.n = 9; + return _awaitAsyncGenerator(_iterator["return"]()); + case 9: + _context2.p = 9; + if (!_didIteratorError) { + _context2.n = 10; + break; + } + throw _iteratorError; + case 10: + return _context2.f(9); + case 11: + return _context2.f(7); + case 12: + return _context2.a(2); + } + }, _callee, null, [[8,, 9, 11], [1, 6, 7, 12]]); + })); + return function readBytes(_x, _x2) { + return _ref.apply(this, arguments); + }; + }(); + var readStream = /*#__PURE__*/function () { + var _ref2 = _wrapAsyncGenerator(/*#__PURE__*/_regenerator().m(function _callee2(stream) { + var reader, _yield$_awaitAsyncGen, done, value; + return _regenerator().w(function (_context3) { + while (1) switch (_context3.p = _context3.n) { + case 0: + if (!stream[Symbol.asyncIterator]) { + _context3.n = 2; + break; + } + return _context3.d(_regeneratorValues(_asyncGeneratorDelegate(_asyncIterator(stream))), 1); + case 1: + return _context3.a(2); + case 2: + reader = stream.getReader(); + _context3.p = 3; + case 4: + _context3.n = 5; + return _awaitAsyncGenerator(reader.read()); + case 5: + _yield$_awaitAsyncGen = _context3.v; + done = _yield$_awaitAsyncGen.done; + value = _yield$_awaitAsyncGen.value; + if (!done) { + _context3.n = 6; + break; + } + return _context3.a(3, 8); + case 6: + _context3.n = 7; + return value; + case 7: + _context3.n = 4; + break; + case 8: + _context3.p = 8; + _context3.n = 9; + return _awaitAsyncGenerator(reader.cancel()); + case 9: + return _context3.f(8); + case 10: + return _context3.a(2); + } + }, _callee2, null, [[3,, 8, 10]]); + })); + return function readStream(_x3) { + return _ref2.apply(this, arguments); + }; + }(); + var trackStream = function trackStream(stream, chunkSize, onProgress, onFinish) { + var iterator = readBytes(stream, chunkSize); + var bytes = 0; + var done; + var _onFinish = function _onFinish(e) { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + return new ReadableStream({ + pull: function pull(controller) { + return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() { + var _yield$iterator$next, _done, value, len, loadedBytes, _t2; + return _regenerator().w(function (_context4) { + while (1) switch (_context4.p = _context4.n) { + case 0: + _context4.p = 0; + _context4.n = 1; + return iterator.next(); + case 1: + _yield$iterator$next = _context4.v; + _done = _yield$iterator$next.done; + value = _yield$iterator$next.value; + if (!_done) { + _context4.n = 2; + break; + } + _onFinish(); + controller.close(); + return _context4.a(2); + case 2: + len = value.byteLength; + if (onProgress) { + loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + _context4.n = 4; + break; + case 3: + _context4.p = 3; + _t2 = _context4.v; + _onFinish(_t2); + throw _t2; + case 4: + return _context4.a(2); + } + }, _callee3, null, [[0, 3]]); + }))(); + }, + cancel: function cancel(reason) { + _onFinish(reason); + return iterator["return"](); + } + }, { + highWaterMark: 2 + }); + }; + + var DEFAULT_CHUNK_SIZE = 64 * 1024; + var isFunction = utils$1.isFunction; + var globalFetchAPI = function (_ref) { + var Request = _ref.Request, + Response = _ref.Response; + return { + Request: Request, + Response: Response + }; + }(utils$1.global); + var _utils$global = utils$1.global, + ReadableStream$1 = _utils$global.ReadableStream, + TextEncoder = _utils$global.TextEncoder; + var test = function test(fn) { + try { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + return !!fn.apply(void 0, args); + } catch (e) { + return false; + } + }; + var factory = function factory(env) { + env = utils$1.merge.call({ + skipUndefined: true + }, globalFetchAPI, env); + var _env = env, + envFetch = _env.fetch, + Request = _env.Request, + Response = _env.Response; + var isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function'; + var isRequestSupported = isFunction(Request); + var isResponseSupported = isFunction(Response); + if (!isFetchSupported) { + return false; + } + var isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream$1); + var encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? function (encoder) { + return function (str) { + return encoder.encode(str); + }; + }(new TextEncoder()) : (/*#__PURE__*/function () { + var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(str) { + var _t, _t2; + return _regenerator().w(function (_context) { + while (1) switch (_context.n) { + case 0: + _t = Uint8Array; + _context.n = 1; + return new Request(str).arrayBuffer(); + case 1: + _t2 = _context.v; + return _context.a(2, new _t(_t2)); + } + }, _callee); + })); + return function (_x) { + return _ref2.apply(this, arguments); + }; + }())); + var supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(function () { + var duplexAccessed = false; + var hasContentType = new Request(platform.origin, { + body: new ReadableStream$1(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + } + }).headers.has('Content-Type'); + return duplexAccessed && !hasContentType; + }); + var supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(function () { + return utils$1.isReadableStream(new Response('').body); + }); + var resolvers = { + stream: supportsResponseStream && function (res) { + return res.body; + } + }; + isFetchSupported && function () { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(function (type) { + !resolvers[type] && (resolvers[type] = function (res, config) { + var method = res && res[type]; + if (method) { + return method.call(res); + } + throw new AxiosError$1("Response type '".concat(type, "' is not supported"), AxiosError$1.ERR_NOT_SUPPORT, config); + }); + }); + }(); + var getBodyLength = /*#__PURE__*/function () { + var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(body) { + var _request; + return _regenerator().w(function (_context2) { + while (1) switch (_context2.n) { + case 0: + if (!(body == null)) { + _context2.n = 1; + break; + } + return _context2.a(2, 0); + case 1: + if (!utils$1.isBlob(body)) { + _context2.n = 2; + break; + } + return _context2.a(2, body.size); + case 2: + if (!utils$1.isSpecCompliantForm(body)) { + _context2.n = 4; + break; + } + _request = new Request(platform.origin, { + method: 'POST', + body: body + }); + _context2.n = 3; + return _request.arrayBuffer(); + case 3: + return _context2.a(2, _context2.v.byteLength); + case 4: + if (!(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body))) { + _context2.n = 5; + break; + } + return _context2.a(2, body.byteLength); + case 5: + if (utils$1.isURLSearchParams(body)) { + body = body + ''; + } + if (!utils$1.isString(body)) { + _context2.n = 7; + break; + } + _context2.n = 6; + return encodeText(body); + case 6: + return _context2.a(2, _context2.v.byteLength); + case 7: + return _context2.a(2); + } + }, _callee2); + })); + return function getBodyLength(_x2) { + return _ref3.apply(this, arguments); + }; + }(); + var resolveBodyLength = /*#__PURE__*/function () { + var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(headers, body) { + var length; + return _regenerator().w(function (_context3) { + while (1) switch (_context3.n) { + case 0: + length = utils$1.toFiniteNumber(headers.getContentLength()); + return _context3.a(2, length == null ? getBodyLength(body) : length); + } + }, _callee3); + })); + return function resolveBodyLength(_x3, _x4) { + return _ref4.apply(this, arguments); + }; + }(); + return /*#__PURE__*/function () { + var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(config) { + var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, _fetch, composedSignal, request, unsubscribe, requestContentLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, resolvedOptions, response, isStreamResponse, options, responseContentLength, _ref6, _ref7, _onProgress, _flush, responseData, _t3, _t4, _t5; + return _regenerator().w(function (_context4) { + while (1) switch (_context4.p = _context4.n) { + case 0: + _resolveConfig = resolveConfig(config), url = _resolveConfig.url, method = _resolveConfig.method, data = _resolveConfig.data, signal = _resolveConfig.signal, cancelToken = _resolveConfig.cancelToken, timeout = _resolveConfig.timeout, onDownloadProgress = _resolveConfig.onDownloadProgress, onUploadProgress = _resolveConfig.onUploadProgress, responseType = _resolveConfig.responseType, headers = _resolveConfig.headers, _resolveConfig$withCr = _resolveConfig.withCredentials, withCredentials = _resolveConfig$withCr === void 0 ? 'same-origin' : _resolveConfig$withCr, fetchOptions = _resolveConfig.fetchOptions; + _fetch = envFetch || fetch; + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + request = null; + unsubscribe = composedSignal && composedSignal.unsubscribe && function () { + composedSignal.unsubscribe(); + }; + _context4.p = 1; + _t3 = onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head'; + if (!_t3) { + _context4.n = 3; + break; + } + _context4.n = 2; + return resolveBodyLength(headers, data); + case 2: + _t4 = requestContentLength = _context4.v; + _t3 = _t4 !== 0; + case 3: + if (!_t3) { + _context4.n = 4; + break; + } + _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + if (_request.body) { + _progressEventDecorat = progressEventDecorator(requestContentLength, progressEventReducer(asyncDecorator(onUploadProgress))), _progressEventDecorat2 = _slicedToArray(_progressEventDecorat, 2), onProgress = _progressEventDecorat2[0], flush = _progressEventDecorat2[1]; + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + case 4: + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype; + resolvedOptions = _objectSpread2(_objectSpread2({}, fetchOptions), {}, { + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }); + request = isRequestSupported && new Request(url, resolvedOptions); + _context4.n = 5; + return isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions); + case 5: + response = _context4.v; + isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) { + options = {}; + ['status', 'statusText', 'headers'].forEach(function (prop) { + options[prop] = response[prop]; + }); + responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + _ref6 = onDownloadProgress && progressEventDecorator(responseContentLength, progressEventReducer(asyncDecorator(onDownloadProgress), true)) || [], _ref7 = _slicedToArray(_ref6, 2), _onProgress = _ref7[0], _flush = _ref7[1]; + response = new Response(trackStream(response.body, DEFAULT_CHUNK_SIZE, _onProgress, function () { + _flush && _flush(); + unsubscribe && unsubscribe(); + }), options); + } + responseType = responseType || 'text'; + _context4.n = 6; + return resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + case 6: + responseData = _context4.v; + !isStreamResponse && unsubscribe && unsubscribe(); + _context4.n = 7; + return new Promise(function (resolve, reject) { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config: config, + request: request + }); + }); + case 7: + return _context4.a(2, _context4.v); + case 8: + _context4.p = 8; + _t5 = _context4.v; + unsubscribe && unsubscribe(); + if (!(_t5 && _t5.name === 'TypeError' && /Load failed|fetch/i.test(_t5.message))) { + _context4.n = 9; + break; + } + throw Object.assign(new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request, _t5 && _t5.response), { + cause: _t5.cause || _t5 + }); + case 9: + throw AxiosError$1.from(_t5, _t5 && _t5.code, config, request, _t5 && _t5.response); + case 10: + return _context4.a(2); + } + }, _callee4, null, [[1, 8]]); + })); + return function (_x5) { + return _ref5.apply(this, arguments); + }; + }(); + }; + var seedCache = new Map(); + var getFetch = function getFetch(config) { + var env = config && config.env || {}; + var fetch = env.fetch, + Request = env.Request, + Response = env.Response; + var seeds = [Request, Response, fetch]; + var len = seeds.length, + i = len, + seed, + target, + map = seedCache; + while (i--) { + seed = seeds[i]; + target = map.get(seed); + target === undefined && map.set(seed, target = i ? new Map() : factory(env)); + map = target; + } + return target; + }; + getFetch(); + + /** + * Known adapters mapping. + * Provides environment-specific adapters for Axios: + * - `http` for Node.js + * - `xhr` for browsers + * - `fetch` for fetch API-based requests + * + * @type {Object} + */ + var knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: { + get: getFetch + } + }; + + // Assign adapter names for easier debugging and identification + utils$1.forEach(knownAdapters, function (fn, value) { + if (fn) { + try { + Object.defineProperty(fn, 'name', { + value: value + }); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', { + value: value + }); + } + }); + + /** + * Render a rejection reason string for unknown or unsupported adapters + * + * @param {string} reason + * @returns {string} + */ + var renderReason = function renderReason(reason) { + return "- ".concat(reason); + }; + + /** + * Check if the adapter is resolved (function, null, or false) + * + * @param {Function|null|false} adapter + * @returns {boolean} + */ + var isResolvedHandle = function isResolvedHandle(adapter) { + return utils$1.isFunction(adapter) || adapter === null || adapter === false; + }; + + /** + * Get the first suitable adapter from the provided list. + * Tries each adapter in order until a supported one is found. + * Throws an AxiosError if no adapter is suitable. + * + * @param {Array|string|Function} adapters - Adapter(s) by name or function. + * @param {Object} config - Axios request configuration + * @throws {AxiosError} If no suitable adapter is available + * @returns {Function} The resolved adapter function + */ + function getAdapter(adapters, config) { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + var _adapters = adapters, + length = _adapters.length; + var nameOrAdapter; + var adapter; + var rejectedReasons = {}; + for (var i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + var id = void 0; + adapter = nameOrAdapter; + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + if (adapter === undefined) { + throw new AxiosError$1("Unknown adapter '".concat(id, "'")); + } + } + if (adapter && (utils$1.isFunction(adapter) || (adapter = adapter.get(config)))) { + break; + } + rejectedReasons[id || '#' + i] = adapter; + } + if (!adapter) { + var reasons = Object.entries(rejectedReasons).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + id = _ref2[0], + state = _ref2[1]; + return "adapter ".concat(id, " ") + (state === false ? 'is not supported by the environment' : 'is not available in the build'); + }); + var s = length ? reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified'; + throw new AxiosError$1("There is no suitable adapter to dispatch the request " + s, 'ERR_NOT_SUPPORT'); + } + return adapter; + } + + /** + * Exports Axios adapters and utility to resolve an adapter + */ + var adapters = { + /** + * Resolve an adapter from a list of adapter names or functions. + * @type {Function} + */ + getAdapter: getAdapter, + /** + * Exposes all known adapters + * @type {Object} + */ + adapters: knownAdapters + }; + + /** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ + function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + if (config.signal && config.signal.aborted) { + throw new CanceledError$1(null, config); + } + } + + /** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ + function dispatchRequest(config) { + throwIfCancellationRequested(config); + config.headers = AxiosHeaders$1.from(config.headers); + + // Transform request data + config.data = transformData.call(config, config.transformRequest); + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + var adapter = adapters.getAdapter(config.adapter || defaults$1.adapter, config); + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call(config, config.transformResponse, response); + response.headers = AxiosHeaders$1.from(response.headers); + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call(config, config.transformResponse, reason.response); + reason.response.headers = AxiosHeaders$1.from(reason.response.headers); + } + } + return Promise.reject(reason); + }); + } + + var VERSION = "1.13.5"; + + var validators$1 = {}; + + // eslint-disable-next-line func-names + ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function (type, i) { + validators$1[type] = function validator(thing) { + return _typeof(thing) === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; + }); + var deprecatedWarnings = {}; + + /** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ + validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function (value, opt, opts) { + if (validator === false) { + throw new AxiosError$1(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), AxiosError$1.ERR_DEPRECATED); + } + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future')); + } + return validator ? validator(value, opt, opts) : true; + }; + }; + validators$1.spelling = function spelling(correctSpelling) { + return function (value, opt) { + // eslint-disable-next-line no-console + console.warn("".concat(opt, " is likely a misspelling of ").concat(correctSpelling)); + return true; + }; + }; + + /** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + + function assertOptions(options, schema, allowUnknown) { + if (_typeof(options) !== 'object') { + throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION); + } + } + } + var validator = { + assertOptions: assertOptions, + validators: validators$1 + }; + + var validators = validator.validators; + + /** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ + var Axios = /*#__PURE__*/function () { + function Axios(instanceConfig) { + _classCallCheck(this, Axios); + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + return _createClass(Axios, [{ + key: "request", + value: (function () { + var _request2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(configOrUrl, config) { + var dummy, stack, _t; + return _regenerator().w(function (_context) { + while (1) switch (_context.p = _context.n) { + case 0: + _context.p = 0; + _context.n = 1; + return this._request(configOrUrl, config); + case 1: + return _context.a(2, _context.v); + case 2: + _context.p = 2; + _t = _context.v; + if (_t instanceof Error) { + dummy = {}; + Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error(); + + // slice off the Error: ... line + stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!_t.stack) { + _t.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(_t.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + _t.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + throw _t; + case 3: + return _context.a(2); + } + }, _callee, this, [[0, 2]]); + })); + function request(_x, _x2) { + return _request2.apply(this, arguments); + } + return request; + }()) + }, { + key: "_request", + value: function _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + config = mergeConfig(this.defaults, config); + var _config = config, + transitional = _config.transitional, + paramsSerializer = _config.paramsSerializer, + headers = _config.headers; + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators["boolean"]), + forcedJSONParsing: validators.transitional(validators["boolean"]), + clarifyTimeoutError: validators.transitional(validators["boolean"]), + legacyInterceptorReqResOrdering: validators.transitional(validators["boolean"]) + }, false); + } + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators["function"], + serialize: validators["function"] + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + var contextHeaders = headers && utils$1.merge(headers.common, headers[config.method]); + headers && utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function (method) { + delete headers[method]; + }); + config.headers = AxiosHeaders$1.concat(contextHeaders, headers); + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + var transitional = config.transitional || transitionalDefaults; + var legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering; + if (legacyInterceptorReqResOrdering) { + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + } else { + requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + } + }); + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + var promise; + var i = 0; + var len; + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest.bind(this), undefined]; + chain.unshift.apply(chain, requestInterceptorChain); + chain.push.apply(chain, responseInterceptorChain); + len = chain.length; + promise = Promise.resolve(config); + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + return promise; + } + len = requestInterceptorChain.length; + var newConfig = config; + while (i < len) { + var onFulfilled = requestInterceptorChain[i++]; + var onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + i = 0; + len = responseInterceptorChain.length; + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + return promise; + } + }, { + key: "getUri", + value: function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } + }]); + }(); // Provide aliases for supported request methods + utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function (url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; + }); + utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + Axios.prototype[method] = generateHTTPMethod(); + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); + }); + var Axios$1 = Axios; + + /** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ + var CancelToken = /*#__PURE__*/function () { + function CancelToken(executor) { + _classCallCheck(this, CancelToken); + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + var resolvePromise; + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function (cancel) { + if (!token._listeners) return; + var i = token._listeners.length; + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function (onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function (resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + return promise; + }; + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + token.reason = new CanceledError$1(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + return _createClass(CancelToken, [{ + key: "throwIfRequested", + value: function throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + }, { + key: "subscribe", + value: function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + }, { + key: "unsubscribe", + value: function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + }, { + key: "toAbortSignal", + value: function toAbortSignal() { + var _this = this; + var controller = new AbortController(); + var abort = function abort(err) { + controller.abort(err); + }; + this.subscribe(abort); + controller.signal.unsubscribe = function () { + return _this.unsubscribe(abort); + }; + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + }], [{ + key: "source", + value: function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; + } + }]); + }(); + var CancelToken$1 = CancelToken; + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * const args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ + function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + } + + /** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ + function isAxiosError(payload) { + return utils$1.isObject(payload) && payload.isAxiosError === true; + } + + var HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, + WebServerIsDown: 521, + ConnectionTimedOut: 522, + OriginIsUnreachable: 523, + TimeoutOccurred: 524, + SslHandshakeFailed: 525, + InvalidSslCertificate: 526 + }; + Object.entries(HttpStatusCode).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + HttpStatusCode[value] = key; + }); + var HttpStatusCode$1 = HttpStatusCode; + + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios$1(defaultConfig); + var instance = bind(Axios$1.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, { + allOwnKeys: true + }); + + // Copy context to instance + utils$1.extend(instance, context, null, { + allOwnKeys: true + }); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + return instance; + } + + // Create the default instance to be exported + var axios = createInstance(defaults$1); + + // Expose Axios class to allow class inheritance + axios.Axios = Axios$1; + + // Expose Cancel & CancelToken + axios.CanceledError = CanceledError$1; + axios.CancelToken = CancelToken$1; + axios.isCancel = isCancel; + axios.VERSION = VERSION; + axios.toFormData = toFormData; + + // Expose AxiosError class + axios.AxiosError = AxiosError$1; + + // alias for CanceledError for backward compatibility + axios.Cancel = axios.CanceledError; + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = spread; + + // Expose isAxiosError + axios.isAxiosError = isAxiosError; + + // Expose mergeConfig + axios.mergeConfig = mergeConfig; + axios.AxiosHeaders = AxiosHeaders$1; + axios.formToJSON = function (thing) { + return formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + }; + axios.getAdapter = adapters.getAdapter; + axios.HttpStatusCode = HttpStatusCode$1; + axios["default"] = axios; + + return axios; + +})); +//# sourceMappingURL=axios.js.map diff --git a/node_modules/axios/dist/axios.js.map b/node_modules/axios/dist/axios.js.map new file mode 100644 index 00000000..7f64b6f6 --- /dev/null +++ b/node_modules/axios/dist/axios.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../lib/helpers/null.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/defaults/transitional.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/platform/browser/classes/Blob.js","../lib/platform/browser/index.js","../lib/platform/common/utils.js","../lib/platform/index.js","../lib/helpers/toURLEncodedForm.js","../lib/helpers/formDataToJSON.js","../lib/defaults/index.js","../lib/helpers/parseHeaders.js","../lib/core/AxiosHeaders.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/cancel/CanceledError.js","../lib/core/settle.js","../lib/helpers/parseProtocol.js","../lib/helpers/speedometer.js","../lib/helpers/throttle.js","../lib/helpers/progressEventReducer.js","../lib/helpers/isURLSameOrigin.js","../lib/helpers/cookies.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/core/buildFullPath.js","../lib/core/mergeConfig.js","../lib/helpers/resolveConfig.js","../lib/adapters/xhr.js","../lib/helpers/composeSignals.js","../lib/helpers/trackStream.js","../lib/adapters/fetch.js","../lib/adapters/adapters.js","../lib/core/dispatchRequest.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js","../lib/helpers/HttpStatusCode.js","../lib/axios.js"],"sourcesContent":["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return (\n val !== null &&\n !isUndefined(val) &&\n val.constructor !== null &&\n !isUndefined(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(toStringTag in val) &&\n !(iterator in val)\n );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return (\n Object.keys(val).length === 0 &&\n Object.getPrototypeOf(val) === Object.prototype\n );\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n (isFunction(thing.append) &&\n ((kind = kindOf(thing)) === \"formdata\" ||\n // detect form-data instance\n (kind === \"object\" &&\n isFunction(thing.toString) &&\n thing.toString() === \"[object FormData]\"))))\n );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== \"object\") {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys\n ? Object.getOwnPropertyNames(obj)\n : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\"\n ? self\n : typeof window !== \"undefined\"\n ? window\n : global;\n})();\n\nconst isContextDefined = (context) =>\n !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n const result = {};\n const assignValue = (val, key) => {\n // Skip dangerous property names to prevent prototype pollution\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return;\n }\n\n const targetKey = (caseless && findKey(result, key)) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n forEach(\n b,\n (val, key) => {\n if (thisArg && isFunction(val)) {\n Object.defineProperty(a, key, {\n value: bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n Object.defineProperty(a, key, {\n value: val,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n },\n { allOwnKeys },\n );\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors,\n );\n Object.defineProperty(constructor.prototype, \"constructor\", {\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(constructor, \"super\", {\n value: superConstructor.prototype,\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n // eslint-disable-next-line func-names\n return (thing) => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n ({ hasOwnProperty }) =>\n (obj, prop) =>\n hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (\n isFunction(obj) &&\n [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n ) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if (\"writable\" in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach((value) => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString)\n ? define(arrayOrString)\n : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite((value = +value))\n ? value\n : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(\n thing &&\n isFunction(thing.append) &&\n thing[toStringTag] === \"FormData\" &&\n thing[iterator]\n );\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if (!(\"toJSON\" in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n thing &&\n (isObject(thing) || isFunction(thing)) &&\n isFunction(thing.then) &&\n isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported\n ? ((token, callbacks) => {\n _global.addEventListener(\n \"message\",\n ({ source, data }) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n },\n false,\n );\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n };\n })(`axios@${Math.random()}`, [])\n : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n typeof queueMicrotask !== \"undefined\"\n ? queueMicrotask.bind(_global)\n : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n static from(error, code, config, request, response, customProps) {\n const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n constructor(message, code, config, request, response) {\n super(message);\n this.name = 'AxiosError';\n this.isAxiosError = true;\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status;\n }\n }\n\n toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status,\n };\n }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n\n const _encode = options && options.encode || encode;\n\n const _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n\n const serializeFn = _options && _options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, _options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n constructor(message, config, request) {\n super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n this.__CANCEL__ = true;\n }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({ caseless }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) =>\n mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n };\n\n utils.forEach(\n Object.keys({ ...config1, ...config2 }),\n function computeConfigValue(prop) {\n if (\n prop === \"__proto__\" ||\n prop === \"constructor\" ||\n prop === \"prototype\"\n )\n return;\n const merge = utils.hasOwnProp(mergeMap, prop)\n ? mergeMap[prop]\n : mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n },\n );\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.5\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean),\n legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n const transitional = config.transitional || transitionalDefaults;\n const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["bind","fn","thisArg","wrap","apply","arguments","toString","Object","prototype","getPrototypeOf","iterator","Symbol","toStringTag","kindOf","cache","thing","str","call","slice","toLowerCase","create","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isArrayBufferView","result","ArrayBuffer","isView","buffer","isString","isNumber","isObject","isBoolean","isPlainObject","isEmptyObject","keys","length","e","isDate","isFile","isBlob","isFileList","isStream","pipe","isFormData","kind","FormData","append","isURLSearchParams","_map","map","_map2","_slicedToArray","isReadableStream","isRequest","isResponse","isHeaders","trim","replace","forEach","obj","_ref","undefined","_ref$allOwnKeys","allOwnKeys","i","l","getOwnPropertyNames","len","key","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","merge","_ref2","caseless","skipUndefined","assignValue","targetKey","extend","a","b","_ref3","defineProperty","value","writable","enumerable","configurable","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","assign","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","isTypedArray","TypedArray","Uint8Array","forEachEntry","generator","_iterator","next","done","pair","matchAll","regExp","matches","exec","push","isHTMLForm","toCamelCase","replacer","m","p1","p2","toUpperCase","hasOwnProperty","_ref4","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","freezeMethods","set","Error","toObjectSet","arrayOrString","delimiter","define","split","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","then","_setImmediate","setImmediateSupported","postMessageSupported","setImmediate","token","callbacks","addEventListener","_ref5","data","shift","cb","postMessage","concat","Math","random","setTimeout","asap","queueMicrotask","process","nextTick","isIterable","hasOwnProp","AxiosError","_Error","message","code","config","request","response","_this","_classCallCheck","_callSuper","isAxiosError","status","_inherits","_createClass","toJSON","description","number","fileName","lineNumber","columnNumber","utils","from","error","customProps","axiosError","cause","_wrapNativeSuper","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL","isVisitable","removeBrackets","renderKey","path","dots","each","join","isFlatArray","some","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","defined","option","visitor","defaultVisitor","_Blob","Blob","useBlob","convertValue","toISOString","Buffer","JSON","stringify","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","encoder","_encode","buildURL","url","_options","serialize","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","forEachHandler","h","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","legacyInterceptorReqResOrdering","URLSearchParams","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","toURLEncodedForm","helpers","isNode","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","entries","stringifySafely","rawValue","parser","parse","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","formSerializer","_FormData","env","transformResponse","JSONRequested","responseType","strictJSONParsing","parseReviver","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","ignoreDuplicateOf","rawHeaders","parsed","line","substring","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","parseHeaders","dest","_createForOfIteratorHelper","_step","s","n","entry","_toConsumableArray","err","f","get","has","matcher","delete","deleted","deleteHeader","normalize","format","normalized","_this$constructor","_len","targets","asStrings","getSetCookie","first","computed","_len2","_key2","accessor","internals","accessors","defineAccessor","mapped","headerValue","transformData","fns","transform","isCancel","__CANCEL__","CanceledError","_AxiosError","settle","resolve","reject","floor","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","Date","startedAt","bytesCount","passed","round","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","args","clearTimeout","throttled","flush","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","lengthComputable","progressBytes","rate","inRange","_defineProperty","progress","estimated","event","progressEventDecorator","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","sameSite","cookie","toUTCString","read","RegExp","decodeURIComponent","remove","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","computeConfigValue","configValue","newConfig","auth","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","isURLSameOrigin","xsrfValue","cookies","isXHRAdapterSupported","XMLHttpRequest","Promise","dispatchXhrRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","open","onloadend","responseHeaders","getAllResponseHeaders","responseData","responseText","statusText","_resolve","_reject","onreadystatechange","handleLoad","readyState","responseURL","onabort","handleAbort","onerror","handleError","msg","ontimeout","handleTimeout","timeoutErrorMessage","setRequestHeader","_progressEventReducer","_progressEventReducer2","upload","_progressEventReducer3","_progressEventReducer4","cancel","abort","subscribe","aborted","send","composeSignals","signals","_signals","Boolean","controller","AbortController","reason","streamChunk","_regenerator","chunk","chunkSize","pos","end","_context","byteLength","readBytes","_wrapAsyncGenerator","_callee","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_t","_context2","p","_asyncIterator","readStream","_awaitAsyncGenerator","v","d","_regeneratorValues","_asyncGeneratorDelegate","_x","_x2","_callee2","stream","reader","_yield$_awaitAsyncGen","_context3","asyncIterator","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","_callee3","_yield$iterator$next","_done","loadedBytes","_t2","_context4","close","enqueue","highWaterMark","DEFAULT_CHUNK_SIZE","globalFetchAPI","Request","Response","_utils$global","TextEncoder","factory","_env","envFetch","fetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","getBodyLength","_request","size","resolveBodyLength","getContentLength","_x4","_callee4","_resolveConfig","_resolveConfig$withCr","fetchOptions","_fetch","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","isCredentialsSupported","resolvedOptions","isStreamResponse","responseContentLength","_ref6","_ref7","_onProgress","_flush","_t3","_t4","_t5","toAbortSignal","credentials","_x5","seedCache","Map","getFetch","seeds","seed","knownAdapters","http","httpAdapter","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","getAdapter","adapters","_adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","onAdapterResolution","onAdapterRejection","VERSION","validators","validator","deprecatedWarnings","version","formatMessage","opt","desc","opts","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","captureStackTrace","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","unshiftRequestInterceptors","interceptor","unshift","responseInterceptorChain","pushResponseInterceptors","promise","chain","onFulfilled","onRejected","getUri","fullPath","forEachMethodNoData","forEachMethodWithData","generateHTTPMethod","isForm","httpMethod","CancelToken","executor","resolvePromise","promiseExecutor","_listeners","onfulfilled","splice","c","spread","callback","payload","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","WebServerIsDown","ConnectionTimedOut","OriginIsUnreachable","TimeoutOccurred","SslHandshakeFailed","InvalidSslCertificate","createInstance","defaultConfig","instance","axios","Cancel","all","promises","formToJSON"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/axios.min.js b/node_modules/axios/dist/axios.min.js new file mode 100644 index 00000000..d97e5ed9 --- /dev/null +++ b/node_modules/axios/dist/axios.min.js @@ -0,0 +1,5 @@ +/*! Axios v1.13.5 Copyright (c) 2026 Matt Zabriskie and contributors */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).axios=t()}(this,function(){"use strict";function e(e,t){this.v=e,this.k=t}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n3?(o=h===r)&&(s=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=p&&((o=n<2&&pr||r>h)&&(i[4]=n,i[5]=r,d.n=h,u=0))}if(o||n>1)return a;throw l=!0,r}return function(o,f,h){if(c>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,h),u=f,s=h;(t=u<2?e:s)||!l;){i||(u?u<3?(u>1&&(d.n=-1),p(u,s)):d.n=s:d.v=s);try{if(c=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(l=d.n<0)?s:n.call(r,d))!==a)break}catch(t){i=e,u=1,s=t}finally{c=1}}return{value:t,done:l}}}(n,o,i),!0),c}var a={};function u(){}function s(){}function c(){}t=Object.getPrototypeOf;var f=[][r]?t(t([][r]())):(g(t={},r,function(){return this}),t),l=c.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,g(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return s.prototype=c,g(l,"constructor",c),g(c,"constructor",s),s.displayName="GeneratorFunction",g(c,o,"GeneratorFunction"),g(l),g(l,o,"Generator"),g(l,r,function(){return this}),g(l,"toString",function(){return"[object Generator]"}),(m=function(){return{w:i,m:d}})()}function g(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}g=function(e,t,n,r){function i(t,n){g(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(i("next",0),i("throw",1),i("return",2))},g(e,t,n,r)}function w(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(typeof e+" is not iterable")}function O(e,t){return O=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},O(e,t)}function E(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,u=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){c=!0,o=e}finally{try{if(!s&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(e,t)||A(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||A(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function T(e){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},T(e)}function A(e,n){if(e){if("string"==typeof e)return t(e,n);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}function j(e){return function(){return new k(e.apply(this,arguments))}}function k(t){var n,r;function o(n,r){try{var a=t[n](r),u=a.value,s=u instanceof e;Promise.resolve(s?u.v:u).then(function(e){if(s){var r="return"===n?"return":"next";if(!u.k||e.done)return o(r,e);e=t[r](e).value}i(a.done?"return":"normal",e)},function(e){o("throw",e)})}catch(e){i("throw",e)}}function i(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?o(n.key,n.arg):r=null}this._invoke=function(e,t){return new Promise(function(i,a){var u={key:e,arg:t,resolve:i,reject:a,next:null};r?r=r.next=u:(n=r=u,o(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}function P(e){var t="function"==typeof Map?new Map:void 0;return P=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(y())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var o=new(e.bind.apply(e,r));return n&&O(o,n.prototype),o}(e,arguments,p(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),O(n,e)},P(e)}function _(e,t){return function(){return e.apply(t,arguments)}}k.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},k.prototype.next=function(e){return this._invoke("next",e)},k.prototype.throw=function(e){return this._invoke("throw",e)},k.prototype.return=function(e){return this._invoke("return",e)};var x,N=Object.prototype.toString,C=Object.getPrototypeOf,U=Symbol.iterator,F=Symbol.toStringTag,D=(x=Object.create(null),function(e){var t=N.call(e);return x[t]||(x[t]=t.slice(8,-1).toLowerCase())}),L=function(e){return e=e.toLowerCase(),function(t){return D(t)===e}},B=function(e){return function(t){return T(t)===e}},I=Array.isArray,q=B("undefined");function M(e){return null!==e&&!q(e)&&null!==e.constructor&&!q(e.constructor)&&J(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var z=L("ArrayBuffer");var H=B("string"),J=B("function"),W=B("number"),K=function(e){return null!==e&&"object"===T(e)},V=function(e){if("object"!==D(e))return!1;var t=C(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||F in e||U in e)},G=L("Date"),X=L("File"),$=L("Blob"),Q=L("FileList"),Y=L("URLSearchParams"),Z=E(["ReadableStream","Request","Response","Headers"].map(L),4),ee=Z[0],te=Z[1],ne=Z[2],re=Z[3];function oe(e,t){var n,r,o=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).allOwnKeys,i=void 0!==o&&o;if(null!=e)if("object"!==T(e)&&(e=[e]),I(e))for(n=0,r=e.length;n0;)if(t===(n=r[o]).toLowerCase())return n;return null}var ae="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,ue=function(e){return!q(e)&&e!==ae};var se,ce=(se="undefined"!=typeof Uint8Array&&C(Uint8Array),function(e){return se&&e instanceof se}),fe=L("HTMLFormElement"),le=function(){var e=Object.prototype.hasOwnProperty;return function(t,n){return e.call(t,n)}}(),de=L("RegExp"),pe=function(e,t){var n=Object.getOwnPropertyDescriptors(e),r={};oe(n,function(n,o){var i;!1!==(i=t(n,o,e))&&(r[o]=i||n)}),Object.defineProperties(e,r)};var he,ye,ve,be,me=L("AsyncFunction"),ge=(he="function"==typeof setImmediate,ye=J(ae.postMessage),he?setImmediate:ye?(ve="axios@".concat(Math.random()),be=[],ae.addEventListener("message",function(e){var t=e.source,n=e.data;t===ae&&n===ve&&be.length&&be.shift()()},!1),function(e){be.push(e),ae.postMessage(ve,"*")}):function(e){return setTimeout(e)}),we="undefined"!=typeof queueMicrotask?queueMicrotask.bind(ae):"undefined"!=typeof process&&process.nextTick||ge,Oe={isArray:I,isArrayBuffer:z,isBuffer:M,isFormData:function(e){var t;return e&&("function"==typeof FormData&&e instanceof FormData||J(e.append)&&("formdata"===(t=D(e))||"object"===t&&J(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&z(e.buffer)},isString:H,isNumber:W,isBoolean:function(e){return!0===e||!1===e},isObject:K,isPlainObject:V,isEmptyObject:function(e){if(!K(e)||M(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:ee,isRequest:te,isResponse:ne,isHeaders:re,isUndefined:q,isDate:G,isFile:X,isBlob:$,isRegExp:de,isFunction:J,isStream:function(e){return K(e)&&J(e.pipe)},isURLSearchParams:Y,isTypedArray:ce,isFileList:Q,forEach:oe,merge:function e(){for(var t=ue(this)&&this||{},n=t.caseless,r=t.skipUndefined,o={},i=function(t,i){if("__proto__"!==i&&"constructor"!==i&&"prototype"!==i){var a=n&&ie(o,i)||i;V(o[a])&&V(t)?o[a]=e(o[a],t):V(t)?o[a]=e({},t):I(t)?o[a]=t.slice():r&&q(t)||(o[a]=t)}},a=0,u=arguments.length;a3&&void 0!==arguments[3]?arguments[3]:{}).allOwnKeys}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var o,i,a,u={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],r&&!r(a,e,t)||u[a]||(t[a]=e[a],u[a]=!0);e=!1!==n&&C(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:D,kindOfTest:L,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(I(e))return e;var t=e.length;if(!W(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},forEachEntry:function(e,t){for(var n,r=(e&&e[U]).call(e);(n=r.next())&&!n.done;){var o=n.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:fe,hasOwnProperty:le,hasOwnProp:le,reduceDescriptors:pe,freezeMethods:function(e){pe(e,function(t,n){if(J(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;var r=e[n];J(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=function(){throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:function(e,t){var n={},r=function(e){e.forEach(function(e){n[e]=!0})};return I(e)?r(e):r(String(e).split(t)),n},toCamelCase:function(e){return e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n})},noop:function(){},toFiniteNumber:function(e,t){return null!=e&&Number.isFinite(e=+e)?e:t},findKey:ie,global:ae,isContextDefined:ue,isSpecCompliantForm:function(e){return!!(e&&J(e.append)&&"FormData"===e[F]&&e[U])},toJSONObject:function(e){var t=new Array(10),n=function(e,r){if(K(e)){if(t.indexOf(e)>=0)return;if(M(e))return e;if(!("toJSON"in e)){t[r]=e;var o=I(e)?[]:{};return oe(e,function(e,t){var i=n(e,r+1);!q(i)&&(o[t]=i)}),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:me,isThenable:function(e){return e&&(K(e)||J(e))&&J(e.then)&&J(e.catch)},setImmediate:ge,asap:we,isIterable:function(e){return null!=e&&J(e[U])}},Ee=function(e){function t(e,n,r,o,i){var a;return c(this,t),(a=s(this,t,[e])).name="AxiosError",a.isAxiosError=!0,n&&(a.code=n),r&&(a.config=r),o&&(a.request=o),i&&(a.response=i,a.status=i.status),a}return h(t,e),l(t,[{key:"toJSON",value:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Oe.toJSONObject(this.config),code:this.code,status:this.status}}}],[{key:"from",value:function(e,n,r,o,i,a){var u=new t(e.message,n||e.code,r,o,i);return u.cause=e,u.name=e.name,a&&Object.assign(u,a),u}}])}(P(Error));Ee.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Ee.ERR_BAD_OPTION="ERR_BAD_OPTION",Ee.ECONNABORTED="ECONNABORTED",Ee.ETIMEDOUT="ETIMEDOUT",Ee.ERR_NETWORK="ERR_NETWORK",Ee.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Ee.ERR_DEPRECATED="ERR_DEPRECATED",Ee.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Ee.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Ee.ERR_CANCELED="ERR_CANCELED",Ee.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Ee.ERR_INVALID_URL="ERR_INVALID_URL";var Re=Ee;function Se(e){return Oe.isPlainObject(e)||Oe.isArray(e)}function Te(e){return Oe.endsWith(e,"[]")?e.slice(0,-2):e}function Ae(e,t,n){return e?e.concat(t).map(function(e,t){return e=Te(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}var je=Oe.toFlatObject(Oe,{},null,function(e){return/^is[A-Z]/.test(e)});function ke(e,t,n){if(!Oe.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;var r=(n=Oe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!Oe.isUndefined(t[e])})).metaTokens,o=n.visitor||c,i=n.dots,a=n.indexes,u=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Oe.isSpecCompliantForm(t);if(!Oe.isFunction(o))throw new TypeError("visitor must be a function");function s(e){if(null===e)return"";if(Oe.isDate(e))return e.toISOString();if(Oe.isBoolean(e))return e.toString();if(!u&&Oe.isBlob(e))throw new Re("Blob is not supported. Use a Buffer instead.");return Oe.isArrayBuffer(e)||Oe.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){var u=e;if(e&&!o&&"object"===T(e))if(Oe.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(Oe.isArray(e)&&function(e){return Oe.isArray(e)&&!e.some(Se)}(e)||(Oe.isFileList(e)||Oe.endsWith(n,"[]"))&&(u=Oe.toArray(e)))return n=Te(n),u.forEach(function(e,r){!Oe.isUndefined(e)&&null!==e&&t.append(!0===a?Ae([n],r,i):null===a?n:n+"[]",s(e))}),!1;return!!Se(e)||(t.append(Ae(o,n,i),s(e)),!1)}var f=[],l=Object.assign(je,{defaultVisitor:c,convertValue:s,isVisitable:Se});if(!Oe.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!Oe.isUndefined(n)){if(-1!==f.indexOf(n))throw Error("Circular reference detected in "+r.join("."));f.push(n),Oe.forEach(n,function(n,i){!0===(!(Oe.isUndefined(n)||null===n)&&o.call(t,n,Oe.isString(i)?i.trim():i,r,l))&&e(n,r?r.concat(i):[i])}),f.pop()}}(e),t}function Pe(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function _e(e,t){this._pairs=[],e&&ke(e,this,t)}var xe=_e.prototype;function Ne(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ce(e,t,n){if(!t)return e;var r,o=n&&n.encode||Ne,i=Oe.isFunction(n)?{serialize:n}:n,a=i&&i.serialize;if(r=a?a(t,i):Oe.isURLSearchParams(t)?t.toString():new _e(t,i).toString(o)){var u=e.indexOf("#");-1!==u&&(e=e.slice(0,u)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e}xe.append=function(e,t){this._pairs.push([e,t])},xe.toString=function(e){var t=e?function(t){return e.call(this,t,Pe)}:Pe;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var Ue=function(){return l(function e(){c(this,e),this.handlers=[]},[{key:"use",value:function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(e){Oe.forEach(this.handlers,function(t){null!==t&&e(t)})}}])}(),Fe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},De={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:_e,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Le="undefined"!=typeof window&&"undefined"!=typeof document,Be="object"===("undefined"==typeof navigator?"undefined":T(navigator))&&navigator||void 0,Ie=Le&&(!Be||["ReactNative","NativeScript","NS"].indexOf(Be.product)<0),qe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Me=Le&&window.location.href||"http://localhost",ze=b(b({},Object.freeze({__proto__:null,hasBrowserEnv:Le,hasStandardBrowserWebWorkerEnv:qe,hasStandardBrowserEnv:Ie,navigator:Be,origin:Me})),De);function He(e){function t(e,n,r,o){var i=e[o++];if("__proto__"===i)return!0;var a=Number.isFinite(+i),u=o>=e.length;return i=!i&&Oe.isArray(r)?r.length:i,u?(Oe.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a):(r[i]&&Oe.isObject(r[i])||(r[i]=[]),t(e,n,r[i],o)&&Oe.isArray(r[i])&&(r[i]=function(e){var t,n,r={},o=Object.keys(e),i=o.length;for(t=0;t-1,i=Oe.isObject(e);if(i&&Oe.isHTMLForm(e)&&(e=new FormData(e)),Oe.isFormData(e))return o?JSON.stringify(He(e)):e;if(Oe.isArrayBuffer(e)||Oe.isBuffer(e)||Oe.isStream(e)||Oe.isFile(e)||Oe.isBlob(e)||Oe.isReadableStream(e))return e;if(Oe.isArrayBufferView(e))return e.buffer;if(Oe.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return ke(e,new ze.classes.URLSearchParams,b({visitor:function(e,t,n,r){return ze.isNode&&Oe.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((n=Oe.isFileList(e))||r.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return ke(n?{"files[]":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType("application/json",!1),function(e,t,n){if(Oe.isString(e))try{return(t||JSON.parse)(e),Oe.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||Je.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(Oe.isResponse(e)||Oe.isReadableStream(e))return e;if(e&&Oe.isString(e)&&(n&&!this.responseType||r)){var o=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(o){if("SyntaxError"===e.name)throw Re.from(e,Re.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ze.classes.FormData,Blob:ze.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Oe.forEach(["delete","get","head","post","put","patch"],function(e){Je.headers[e]={}});var We=Je,Ke=Oe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ve=Symbol("internals");function Ge(e){return e&&String(e).trim().toLowerCase()}function Xe(e){return!1===e||null==e?e:Oe.isArray(e)?e.map(Xe):String(e)}function $e(e,t,n,r,o){return Oe.isFunction(r)?r.call(this,t,n):(o&&(t=n),Oe.isString(t)?Oe.isString(r)?-1!==t.indexOf(r):Oe.isRegExp(r)?r.test(t):void 0:void 0)}var Qe=function(){return l(function e(t){c(this,e),t&&this.set(t)},[{key:"set",value:function(e,t,n){var r=this;function o(e,t,n){var o=Ge(t);if(!o)throw new Error("header name must be a non-empty string");var i=Oe.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=Xe(e))}var i=function(e,t){return Oe.forEach(e,function(e,n){return o(e,n,t)})};if(Oe.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(Oe.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i(function(e){var t,n,r,o={};return e&&e.split("\n").forEach(function(e){r=e.indexOf(":"),t=e.substring(0,r).trim().toLowerCase(),n=e.substring(r+1).trim(),!t||o[t]&&Ke[t]||("set-cookie"===t?o[t]?o[t].push(n):o[t]=[n]:o[t]=o[t]?o[t]+", "+n:n)}),o}(e),t);else if(Oe.isObject(e)&&Oe.isIterable(e)){var a,u,s,c={},f=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=A(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}(e);try{for(f.s();!(s=f.n()).done;){var l=s.value;if(!Oe.isArray(l))throw TypeError("Object iterator must return a key-value pair");c[u=l[0]]=(a=c[u])?Oe.isArray(a)?[].concat(R(a),[l[1]]):[a,l[1]]:l[1]}}catch(e){f.e(e)}finally{f.f()}i(c,t)}else null!=e&&o(t,e,n);return this}},{key:"get",value:function(e,t){if(e=Ge(e)){var n=Oe.findKey(this,e);if(n){var r=this[n];if(!t)return r;if(!0===t)return function(e){for(var t,n=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;t=r.exec(e);)n[t[1]]=t[2];return n}(r);if(Oe.isFunction(t))return t.call(this,r,n);if(Oe.isRegExp(t))return t.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(e,t){if(e=Ge(e)){var n=Oe.findKey(this,e);return!(!n||void 0===this[n]||t&&!$e(0,this[n],n,t))}return!1}},{key:"delete",value:function(e,t){var n=this,r=!1;function o(e){if(e=Ge(e)){var o=Oe.findKey(n,e);!o||t&&!$e(0,n[o],o,t)||(delete n[o],r=!0)}}return Oe.isArray(e)?e.forEach(o):o(e),r}},{key:"clear",value:function(e){for(var t=Object.keys(this),n=t.length,r=!1;n--;){var o=t[n];e&&!$e(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}},{key:"normalize",value:function(e){var t=this,n={};return Oe.forEach(this,function(r,o){var i=Oe.findKey(n,o);if(i)return t[i]=Xe(r),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n})}(o):String(o).trim();a!==o&&delete t[o],t[a]=Xe(r),n[a]=!0}),this}},{key:"concat",value:function(){for(var e,t=arguments.length,n=new Array(t),r=0;r1?n-1:0),o=1;o2&&void 0!==arguments[2]?arguments[2]:3,r=0,o=function(e,t){e=e||10;var n,r=new Array(e),o=new Array(e),i=0,a=0;return t=void 0!==t?t:1e3,function(u){var s=Date.now(),c=o[a];n||(n=s),r[i]=u,o[i]=s;for(var f=a,l=0;f!==i;)l+=r[f++],f%=e;if((i=(i+1)%e)===a&&(a=(a+1)%e),!(s-n1&&void 0!==arguments[1]?arguments[1]:Date.now();o=i,n=null,r&&(clearTimeout(r),r=null),e.apply(void 0,R(t))};return[function(){for(var e=Date.now(),t=e-o,u=arguments.length,s=new Array(u),c=0;c=i?a(s,e):(n=s,r||(r=setTimeout(function(){r=null,a(n)},i-t)))},function(){return n&&a(n)}]}(function(n){var i=n.loaded,a=n.lengthComputable?n.total:void 0,u=i-r,s=o(u);r=i;var c=d({loaded:i,total:a,progress:a?i/a:void 0,bytes:u,rate:s||void 0,estimated:s&&a&&i<=a?(a-i)/s:void 0,event:n,lengthComputable:null!=a},t?"download":"upload",!0);e(c)},n)},ot=function(e,t){var n=null!=e;return[function(r){return t[0]({lengthComputable:n,total:e,loaded:r})},t[1]]},it=function(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r1?t-1:0),r=1;r1?"since :\n"+s.map(Pt).join("\n"):" "+Pt(s[0]):"as no adapter specified";throw new Re("There is no suitable adapter to dispatch the request "+c,"ERR_NOT_SUPPORT")}return r},adapters:kt};function Nt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new tt(null,e)}function Ct(e){return Nt(e),e.headers=Ye.from(e.headers),e.data=Ze.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),xt.getAdapter(e.adapter||We.adapter,e)(e).then(function(t){return Nt(e),t.data=Ze.call(e,e.transformResponse,t),t.headers=Ye.from(t.headers),t},function(t){return et(t)||(Nt(e),t&&t.response&&(t.response.data=Ze.call(e,e.transformResponse,t.response),t.response.headers=Ye.from(t.response.headers))),Promise.reject(t)})}var Ut="1.13.5",Ft={};["object","boolean","number","function","string","symbol"].forEach(function(e,t){Ft[e]=function(n){return T(n)===e||"a"+(t<1?"n ":" ")+e}});var Dt={};Ft.transitional=function(e,t,n){function r(e,t){return"[Axios v"+Ut+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,o,i){if(!1===e)throw new Re(r(o," has been removed"+(t?" in "+t:"")),Re.ERR_DEPRECATED);return t&&!Dt[o]&&(Dt[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}},Ft.spelling=function(e){return function(t,n){return console.warn("".concat(n," is likely a misspelling of ").concat(e)),!0}};var Lt={assertOptions:function(e,t,n){if("object"!==T(e))throw new Re("options must be an object",Re.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),o=r.length;o-- >0;){var i=r[o],a=t[i];if(a){var u=e[i],s=void 0===u||a(u,i,e);if(!0!==s)throw new Re("option "+i+" must be "+s,Re.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new Re("Unknown option "+i,Re.ERR_BAD_OPTION)}},validators:Ft},Bt=Lt.validators,It=function(){return l(function e(t){c(this,e),this.defaults=t||{},this.interceptors={request:new Ue,response:new Ue}},[{key:"request",value:(e=a(m().m(function e(t,n){var r,o,i;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this._request(t,n);case 1:return e.a(2,e.v);case 2:if(e.p=2,(i=e.v)instanceof Error){r={},Error.captureStackTrace?Error.captureStackTrace(r):r=new Error,o=r.stack?r.stack.replace(/^.+\n/,""):"";try{i.stack?o&&!String(i.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(i.stack+="\n"+o):i.stack=o}catch(e){}}throw i;case 3:return e.a(2)}},e,this,[[0,2]])})),function(t,n){return e.apply(this,arguments)})},{key:"_request",value:function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{};var n=t=ft(this.defaults,t),r=n.transitional,o=n.paramsSerializer,i=n.headers;void 0!==r&&Lt.assertOptions(r,{silentJSONParsing:Bt.transitional(Bt.boolean),forcedJSONParsing:Bt.transitional(Bt.boolean),clarifyTimeoutError:Bt.transitional(Bt.boolean),legacyInterceptorReqResOrdering:Bt.transitional(Bt.boolean)},!1),null!=o&&(Oe.isFunction(o)?t.paramsSerializer={serialize:o}:Lt.assertOptions(o,{encode:Bt.function,serialize:Bt.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Lt.assertOptions(t,{baseUrl:Bt.spelling("baseURL"),withXsrfToken:Bt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();var a=i&&Oe.merge(i.common,i[t.method]);i&&Oe.forEach(["delete","get","head","post","put","patch","common"],function(e){delete i[e]}),t.headers=Ye.concat(a,i);var u=[],s=!0;this.interceptors.request.forEach(function(e){if("function"!=typeof e.runWhen||!1!==e.runWhen(t)){s=s&&e.synchronous;var n=t.transitional||Fe;n&&n.legacyInterceptorReqResOrdering?u.unshift(e.fulfilled,e.rejected):u.push(e.fulfilled,e.rejected)}});var c,f=[];this.interceptors.response.forEach(function(e){f.push(e.fulfilled,e.rejected)});var l,d=0;if(!s){var p=[Ct.bind(this),void 0];for(p.unshift.apply(p,u),p.push.apply(p,f),l=p.length,c=Promise.resolve(t);d0;)r._listeners[t](e);r._listeners=null}}),this.promise.then=function(e){var t,n=new Promise(function(e){r.subscribe(e),t=e}).then(e);return n.cancel=function(){r.unsubscribe(t)},n},t(function(e,t,o){r.reason||(r.reason=new tt(e,t,o),n(r.reason))})}return l(e,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:"unsubscribe",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}},{key:"toAbortSignal",value:function(){var e=this,t=new AbortController,n=function(e){t.abort(e)};return this.subscribe(n),t.signal.unsubscribe=function(){return e.unsubscribe(n)},t.signal}}],[{key:"source",value:function(){var t;return{token:new e(function(e){t=e}),cancel:t}}}])}(),zt=Mt;var Ht={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ht).forEach(function(e){var t=E(e,2),n=t[0],r=t[1];Ht[r]=n});var Jt=Ht;var Wt=function e(t){var n=new qt(t),r=_(qt.prototype.request,n);return Oe.extend(r,qt.prototype,n,{allOwnKeys:!0}),Oe.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(ft(t,n))},r}(We);return Wt.Axios=qt,Wt.CanceledError=tt,Wt.CancelToken=zt,Wt.isCancel=et,Wt.VERSION=Ut,Wt.toFormData=ke,Wt.AxiosError=Re,Wt.Cancel=Wt.CanceledError,Wt.all=function(e){return Promise.all(e)},Wt.spread=function(e){return function(t){return e.apply(null,t)}},Wt.isAxiosError=function(e){return Oe.isObject(e)&&!0===e.isAxiosError},Wt.mergeConfig=ft,Wt.AxiosHeaders=Ye,Wt.formToJSON=function(e){return He(Oe.isHTMLForm(e)?new FormData(e):e)},Wt.getAdapter=xt.getAdapter,Wt.HttpStatusCode=Jt,Wt.default=Wt,Wt}); +//# sourceMappingURL=axios.min.js.map diff --git a/node_modules/axios/dist/axios.min.js.map b/node_modules/axios/dist/axios.min.js.map new file mode 100644 index 00000000..f1b20c2c --- /dev/null +++ b/node_modules/axios/dist/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/defaults/transitional.js","../lib/platform/browser/index.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/platform/browser/classes/Blob.js","../lib/platform/common/utils.js","../lib/platform/index.js","../lib/helpers/formDataToJSON.js","../lib/defaults/index.js","../lib/helpers/toURLEncodedForm.js","../lib/helpers/parseHeaders.js","../lib/core/AxiosHeaders.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/cancel/CanceledError.js","../lib/core/settle.js","../lib/helpers/progressEventReducer.js","../lib/helpers/speedometer.js","../lib/helpers/throttle.js","../lib/helpers/isURLSameOrigin.js","../lib/helpers/cookies.js","../lib/core/buildFullPath.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/core/mergeConfig.js","../lib/helpers/resolveConfig.js","../lib/adapters/fetch.js","../lib/adapters/xhr.js","../lib/helpers/parseProtocol.js","../lib/helpers/composeSignals.js","../lib/helpers/trackStream.js","../lib/adapters/adapters.js","../lib/helpers/null.js","../lib/core/dispatchRequest.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/helpers/HttpStatusCode.js","../lib/axios.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js"],"sourcesContent":["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return (\n val !== null &&\n !isUndefined(val) &&\n val.constructor !== null &&\n !isUndefined(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(toStringTag in val) &&\n !(iterator in val)\n );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return (\n Object.keys(val).length === 0 &&\n Object.getPrototypeOf(val) === Object.prototype\n );\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n (isFunction(thing.append) &&\n ((kind = kindOf(thing)) === \"formdata\" ||\n // detect form-data instance\n (kind === \"object\" &&\n isFunction(thing.toString) &&\n thing.toString() === \"[object FormData]\"))))\n );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== \"object\") {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys\n ? Object.getOwnPropertyNames(obj)\n : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\"\n ? self\n : typeof window !== \"undefined\"\n ? window\n : global;\n})();\n\nconst isContextDefined = (context) =>\n !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n const result = {};\n const assignValue = (val, key) => {\n // Skip dangerous property names to prevent prototype pollution\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return;\n }\n\n const targetKey = (caseless && findKey(result, key)) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n forEach(\n b,\n (val, key) => {\n if (thisArg && isFunction(val)) {\n Object.defineProperty(a, key, {\n value: bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n Object.defineProperty(a, key, {\n value: val,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n },\n { allOwnKeys },\n );\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors,\n );\n Object.defineProperty(constructor.prototype, \"constructor\", {\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(constructor, \"super\", {\n value: superConstructor.prototype,\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n // eslint-disable-next-line func-names\n return (thing) => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n ({ hasOwnProperty }) =>\n (obj, prop) =>\n hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (\n isFunction(obj) &&\n [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n ) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if (\"writable\" in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach((value) => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString)\n ? define(arrayOrString)\n : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite((value = +value))\n ? value\n : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(\n thing &&\n isFunction(thing.append) &&\n thing[toStringTag] === \"FormData\" &&\n thing[iterator]\n );\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if (!(\"toJSON\" in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n thing &&\n (isObject(thing) || isFunction(thing)) &&\n isFunction(thing.then) &&\n isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported\n ? ((token, callbacks) => {\n _global.addEventListener(\n \"message\",\n ({ source, data }) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n },\n false,\n );\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n };\n })(`axios@${Math.random()}`, [])\n : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n typeof queueMicrotask !== \"undefined\"\n ? queueMicrotask.bind(_global)\n : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n static from(error, code, config, request, response, customProps) {\n const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n constructor(message, code, config, request, response) {\n super(message);\n this.name = 'AxiosError';\n this.isAxiosError = true;\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status;\n }\n }\n\n toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status,\n };\n }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n\n const _encode = options && options.encode || encode;\n\n const _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n\n const serializeFn = _options && _options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, _options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n constructor(message, config, request) {\n super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n this.__CANCEL__ = true;\n }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({ caseless }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) =>\n mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n };\n\n utils.forEach(\n Object.keys({ ...config1, ...config2 }),\n function computeConfigValue(prop) {\n if (\n prop === \"__proto__\" ||\n prop === \"constructor\" ||\n prop === \"prototype\"\n )\n return;\n const merge = utils.hasOwnProp(mergeMap, prop)\n ? mergeMap[prop]\n : mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n },\n );\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.5\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean),\n legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n const transitional = config.transitional || transitionalDefaults;\n const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n"],"names":["bind","fn","thisArg","apply","arguments","cache","toString","Object","prototype","getPrototypeOf","iterator","Symbol","toStringTag","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isString","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","_slicedToArray","map","isReadableStream","isRequest","isResponse","isHeaders","forEach","obj","i","l","_ref$allOwnKeys","length","undefined","allOwnKeys","key","keys","getOwnPropertyNames","len","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","concat","Math","random","addEventListener","_ref5","source","data","shift","cb","push","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isEmptyObject","e","isStream","pipe","merge","_ref2","this","caseless","skipUndefined","result","assignValue","targetKey","extend","a","b","defineProperty","value","writable","enumerable","configurable","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","forEachEntry","_iterator","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","then","isIterable","AxiosError","_Error","message","code","config","request","response","_this","_classCallCheck","_callSuper","isAxiosError","status","_inherits","_createClass","description","number","fileName","lineNumber","columnNumber","utils","error","customProps","axiosError","cause","_wrapNativeSuper","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL","AxiosError$1","isVisitable","removeBrackets","renderKey","path","dots","join","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","from","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","serializedParams","_encode","_options","serialize","serializeFn","hashmarkIndex","encoder","InterceptorManager$1","InterceptorManager","handlers","fulfilled","rejected","synchronous","runWhen","id","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","legacyInterceptorReqResOrdering","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","parseReviver","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","_step","_createForOfIteratorHelper","s","n","entry","_toConsumableArray","err","f","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","_len","targets","asStrings","toJSON","_ref","get","first","computed","_len2","_key2","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","buildAccessors","accessor","_ref3","mapped","headerValue","AxiosHeaders$1","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError$1","_AxiosError","CanceledError","settle","resolve","reject","floor","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","_defineProperty","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","sameSite","cookie","toUTCString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","Promise","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","onerror","msg","ontimeout","timeoutErrorMessage","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","cancel","abort","subscribe","aborted","send","composeSignals$1","signals","Boolean","controller","AbortController","reason","streamChunk","_regenerator","chunk","chunkSize","pos","end","_context","byteLength","readBytes","_wrapAsyncGenerator","_callee","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_t","_context2","p","_asyncIterator","readStream","_awaitAsyncGenerator","v","d","_regeneratorValues","_asyncGeneratorDelegate","_x","_x2","_callee2","stream","reader","_yield$_awaitAsyncGen","_context3","asyncIterator","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","_callee3","_yield$iterator$next","_done","loadedBytes","_t2","_context4","close","enqueue","highWaterMark","globalFetchAPI","Request","Response","_utils$global","TextEncoder","factory","_env","envFetch","fetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","has","supportsResponseStream","resolvers","res","getBodyLength","_request","size","resolveBodyLength","_ref4","getContentLength","_x4","_callee4","_resolveConfig","_resolveConfig$withCr","fetchOptions","_fetch","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","resolvedOptions","isStreamResponse","responseContentLength","_ref6","_ref7","_onProgress","_flush","responseData","_t3","_t4","_t5","composeSignals","toAbortSignal","credentials","_x5","seedCache","Map","getFetch","seed","seeds","knownAdapters","http","xhr","fetchAdapter","renderReason","isResolvedHandle","adapters","getAdapter","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validators$1","validator","version","formatMessage","opt","desc","opts","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","captureStackTrace","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","c","CancelToken$1","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","WebServerIsDown","ConnectionTimedOut","OriginIsUnreachable","TimeoutOccurred","SslHandshakeFailed","InvalidSslCertificate","HttpStatusCode$1","axios","createInstance","defaultConfig","instance","Cancel","all","promises","spread","callback","payload","formToJSON"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/browser/axios.cjs b/node_modules/axios/dist/browser/axios.cjs new file mode 100644 index 00000000..afa6f388 --- /dev/null +++ b/node_modules/axios/dist/browser/axios.cjs @@ -0,0 +1,3979 @@ +/*! Axios v1.13.5 Copyright (c) 2026 Matt Zabriskie and contributors */ +'use strict'; + +/** + * Create a bound version of a function with a specified `this` context + * + * @param {Function} fn - The function to bind + * @param {*} thisArg - The value to be passed as the `this` parameter + * @returns {Function} A new function that will call the original function with the specified `this` context + */ +function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} + +// utils is a library of generic helper functions non-specific to axios + +const { toString } = Object.prototype; +const { getPrototypeOf } = Object; +const { iterator, toStringTag } = Symbol; + +const kindOf = ((cache) => (thing) => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type; +}; + +const typeOfTest = (type) => (thing) => typeof thing === type; + +/** + * Determine if a value is a non-null object + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const { isArray } = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest("undefined"); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return ( + val !== null && + !isUndefined(val) && + val.constructor !== null && + !isUndefined(val.constructor) && + isFunction$1(val.constructor.isBuffer) && + val.constructor.isBuffer(val) + ); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest("ArrayBuffer"); + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val); + } else { + result = val && val.buffer && isArrayBuffer(val.buffer); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest("string"); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction$1 = typeOfTest("function"); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest("number"); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === "object"; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = (thing) => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== "object") { + return false; + } + + const prototype = getPrototypeOf(val); + return ( + (prototype === null || + prototype === Object.prototype || + Object.getPrototypeOf(prototype) === null) && + !(toStringTag in val) && + !(iterator in val) + ); +}; + +/** + * Determine if a value is an empty object (safely handles Buffers) + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an empty object, otherwise false + */ +const isEmptyObject = (val) => { + // Early return for non-objects or Buffers to prevent RangeError + if (!isObject(val) || isBuffer(val)) { + return false; + } + + try { + return ( + Object.keys(val).length === 0 && + Object.getPrototypeOf(val) === Object.prototype + ); + } catch (e) { + // Fallback for any other objects that might cause RangeError with Object.keys() + return false; + } +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest("Date"); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest("File"); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest("Blob"); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest("FileList"); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction$1(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return ( + thing && + ((typeof FormData === "function" && thing instanceof FormData) || + (isFunction$1(thing.append) && + ((kind = kindOf(thing)) === "formdata" || + // detect form-data instance + (kind === "object" && + isFunction$1(thing.toString) && + thing.toString() === "[object FormData]")))) + ); +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest("URLSearchParams"); + +const [isReadableStream, isRequest, isResponse, isHeaders] = [ + "ReadableStream", + "Request", + "Response", + "Headers", +].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => + str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, { allOwnKeys = false } = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === "undefined") { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== "object") { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Buffer check + if (isBuffer(obj)) { + return; + } + + // Iterate over object keys + const keys = allOwnKeys + ? Object.getOwnPropertyNames(obj) + : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + if (isBuffer(obj)) { + return null; + } + + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" + ? self + : typeof window !== "undefined" + ? window + : global; +})(); + +const isContextDefined = (context) => + !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * const result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const { caseless, skipUndefined } = (isContextDefined(this) && this) || {}; + const result = {}; + const assignValue = (val, key) => { + // Skip dangerous property names to prevent prototype pollution + if (key === "__proto__" || key === "constructor" || key === "prototype") { + return; + } + + const targetKey = (caseless && findKey(result, key)) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else if (!skipUndefined || !isUndefined(val)) { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, { allOwnKeys } = {}) => { + forEach( + b, + (val, key) => { + if (thisArg && isFunction$1(val)) { + Object.defineProperty(a, key, { + value: bind(val, thisArg), + writable: true, + enumerable: true, + configurable: true, + }); + } else { + Object.defineProperty(a, key, { + value: val, + writable: true, + enumerable: true, + configurable: true, + }); + } + }, + { allOwnKeys }, + ); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xfeff) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create( + superConstructor.prototype, + descriptors, + ); + Object.defineProperty(constructor.prototype, "constructor", { + value: constructor, + writable: true, + enumerable: false, + configurable: true, + }); + Object.defineProperty(constructor, "super", { + value: superConstructor.prototype, + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ( + (!propFilter || propFilter(prop, sourceObj, destObj)) && + !merged[prop] + ) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while ( + sourceObj && + (!filter || filter(sourceObj, destObj)) && + sourceObj !== Object.prototype + ); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = ((TypedArray) => { + // eslint-disable-next-line func-names + return (thing) => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest("HTMLFormElement"); + +const toCamelCase = (str) => { + return str + .toLowerCase() + .replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + }); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = ( + ({ hasOwnProperty }) => + (obj, prop) => + hasOwnProperty.call(obj, prop) +)(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest("RegExp"); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if ( + isFunction$1(obj) && + ["arguments", "caller", "callee"].indexOf(name) !== -1 + ) { + return false; + } + + const value = obj[name]; + + if (!isFunction$1(value)) return; + + descriptor.enumerable = false; + + if ("writable" in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error("Can not rewrite read-only method '" + name + "'"); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach((value) => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) + ? define(arrayOrString) + : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite((value = +value)) + ? value + : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!( + thing && + isFunction$1(thing.append) && + thing[toStringTag] === "FormData" && + thing[iterator] + ); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + //Buffer check + if (isBuffer(source)) { + return source; + } + + if (!("toJSON" in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest("AsyncFunction"); + +const isThenable = (thing) => + thing && + (isObject(thing) || isFunction$1(thing)) && + isFunction$1(thing.then) && + isFunction$1(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported + ? ((token, callbacks) => { + _global.addEventListener( + "message", + ({ source, data }) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, + false, + ); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + }; + })(`axios@${Math.random()}`, []) + : (cb) => setTimeout(cb); +})(typeof setImmediate === "function", isFunction$1(_global.postMessage)); + +const asap = + typeof queueMicrotask !== "undefined" + ? queueMicrotask.bind(_global) + : (typeof process !== "undefined" && process.nextTick) || _setImmediate; + +// ********************* + +const isIterable = (thing) => thing != null && isFunction$1(thing[iterator]); + +var utils$1 = { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isEmptyObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction: isFunction$1, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable, +}; + +class AxiosError extends Error { + static from(error, code, config, request, response, customProps) { + const axiosError = new AxiosError(error.message, code || error.code, config, request, response); + axiosError.cause = error; + axiosError.name = error.name; + customProps && Object.assign(axiosError, customProps); + return axiosError; + } + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + constructor(message, code, config, request, response) { + super(message); + this.name = 'AxiosError'; + this.isAxiosError = true; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status; + } + } + + toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status, + }; + } +} + +// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated. +AxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE'; +AxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION'; +AxiosError.ECONNABORTED = 'ECONNABORTED'; +AxiosError.ETIMEDOUT = 'ETIMEDOUT'; +AxiosError.ERR_NETWORK = 'ERR_NETWORK'; +AxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS'; +AxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED'; +AxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE'; +AxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST'; +AxiosError.ERR_CANCELED = 'ERR_CANCELED'; +AxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT'; +AxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL'; + +var AxiosError$1 = AxiosError; + +// eslint-disable-next-line strict +var httpAdapter = null; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils$1.isDate(value)) { + return value.toISOString(); + } + + if (utils$1.isBoolean(value)) { + return value.toString(); + } + + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError$1('Blob is not supported. Use a Buffer instead.'); + } + + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils$1.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode$1(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +function buildURL(url, params, options) { + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + const _options = utils$1.isFunction(options) ? { + serialize: options + } : options; + + const serializeFn = _options && _options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, _options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, _options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * @param {Object} options The options for the interceptor, synchronous and runWhen + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {void} + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +var InterceptorManager$1 = InterceptorManager; + +var transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false, + legacyInterceptorReqResOrdering: true +}; + +var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; + +var FormData$1 = typeof FormData !== 'undefined' ? FormData : null; + +var Blob$1 = typeof Blob !== 'undefined' ? Blob : null; + +var platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; + +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin +}); + +var platform = { + ...utils, + ...platform$1 +}; + +function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), { + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + }, + ...options + }); +} + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + const obj = {}; + + utils$1.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils$1.isObject(data); + + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils$1.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) || + utils$1.isReadableStream(data) + ) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data, this.parseReviver); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +var defaults$1 = defaults; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils$1.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +var parseHeaders = rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils$1.isString(value)) return; + + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils$1.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils$1.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils$1.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders); + +var AxiosHeaders$1 = AxiosHeaders; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +function transformData(fns, response) { + const config = this || defaults$1; + const context = response || config; + const headers = AxiosHeaders$1.from(context.headers); + let data = context.data; + + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} + +function isCancel(value) { + return !!(value && value.__CANCEL__); +} + +class CanceledError extends AxiosError$1 { + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + constructor(message, config, request) { + super(message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request); + this.name = 'CanceledError'; + this.__CANCEL__ = true; + } +} + +var CanceledError$1 = CanceledError; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError$1( + 'Request failed with status code ' + response.status, + [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} + +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn(...args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + +var isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; + +var cookies = platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure, sameSite) { + if (typeof document === 'undefined') return; + + const cookie = [`${name}=${encodeURIComponent(value)}`]; + + if (utils$1.isNumber(expires)) { + cookie.push(`expires=${new Date(expires).toUTCString()}`); + } + if (utils$1.isString(path)) { + cookie.push(`path=${path}`); + } + if (utils$1.isString(domain)) { + cookie.push(`domain=${domain}`); + } + if (secure === true) { + cookie.push('secure'); + } + if (utils$1.isString(sameSite)) { + cookie.push(`SameSite=${sameSite}`); + } + + document.cookie = cookie.join('; '); + }, + + read(name) { + if (typeof document === 'undefined') return null; + const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); + return match ? decodeURIComponent(match[1]) : null; + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000, '/'); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + if (typeof url !== 'string') { + return false; + } + + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} + +const headersToObject = (thing) => + thing instanceof AxiosHeaders$1 ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({ caseless }, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + function mergeDeepProperties(a, b, prop, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop, caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b, prop) => + mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true), + }; + + utils$1.forEach( + Object.keys({ ...config1, ...config2 }), + function computeConfigValue(prop) { + if ( + prop === "__proto__" || + prop === "constructor" || + prop === "prototype" + ) + return; + const merge = utils$1.hasOwnProp(mergeMap, prop) + ? mergeMap[prop] + : mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || + (config[prop] = configValue); + }, + ); + + return config; +} + +var resolveConfig = (config) => { + const newConfig = mergeConfig({}, config); + + let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig; + + newConfig.headers = headers = AxiosHeaders$1.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // browser handles it + } else if (utils$1.isFunction(data.getHeaders)) { + // Node.js FormData (like form-data package) + const formHeaders = data.getHeaders(); + // Only set safe headers to avoid overwriting security headers + const allowedHeaders = ['content-type', 'content-length']; + Object.entries(formHeaders).forEach(([key, val]) => { + if (allowedHeaders.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +var xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders$1.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError(event) { + // Browsers deliver a ProgressEvent in XHR onerror + // (message may be empty; when present, surface it) + // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event + const msg = event && event.message ? event.message : 'Network Error'; + const err = new AxiosError$1(msg, AxiosError$1.ERR_NETWORK, config, request); + // attach the underlying event for consumers who want details + err.event = event || null; + reject(err); + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError$1( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +}; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError$1(`timeout of ${timeout}ms exceeded`, AxiosError$1.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +var composeSignals$1 = composeSignals; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const {isFunction} = utils$1; + +const globalFetchAPI = (({Request, Response}) => ({ + Request, Response +}))(utils$1.global); + +const { + ReadableStream: ReadableStream$1, TextEncoder +} = utils$1.global; + + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const factory = (env) => { + env = utils$1.merge.call({ + skipUndefined: true + }, globalFetchAPI, env); + + const {fetch: envFetch, Request, Response} = env; + const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function'; + const isRequestSupported = isFunction(Request); + const isResponseSupported = isFunction(Response); + + if (!isFetchSupported) { + return false; + } + + const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream$1); + + const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Request(str).arrayBuffer()) + ); + + const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream$1(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; + }); + + const supportsResponseStream = isResponseSupported && isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + const resolvers = { + stream: supportsResponseStream && ((res) => res.body) + }; + + isFetchSupported && ((() => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = (res, config) => { + let method = res && res[type]; + + if (method) { + return method.call(res); + } + + throw new AxiosError$1(`Response type '${type}' is not supported`, AxiosError$1.ERR_NOT_SUPPORT, config); + }); + }); + })()); + + const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if (utils$1.isBlob(body)) { + return body.size; + } + + if (utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if (utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if (utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if (utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } + }; + + const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; + }; + + return async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + let _fetch = envFetch || fetch; + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request = null; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype; + + const resolvedOptions = { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }; + + request = isRequestSupported && new Request(url, resolvedOptions); + + let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions)); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request, err && err.response), + { + cause: err.cause || err + } + ) + } + + throw AxiosError$1.from(err, err && err.code, config, request, err && err.response); + } + } +}; + +const seedCache = new Map(); + +const getFetch = (config) => { + let env = (config && config.env) || {}; + const {fetch, Request, Response} = env; + const seeds = [ + Request, Response, fetch + ]; + + let len = seeds.length, i = len, + seed, target, map = seedCache; + + while (i--) { + seed = seeds[i]; + target = map.get(seed); + + target === undefined && map.set(seed, target = (i ? new Map() : factory(env))); + + map = target; + } + + return target; +}; + +getFetch(); + +/** + * Known adapters mapping. + * Provides environment-specific adapters for Axios: + * - `http` for Node.js + * - `xhr` for browsers + * - `fetch` for fetch API-based requests + * + * @type {Object} + */ +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: { + get: getFetch, + } +}; + +// Assign adapter names for easier debugging and identification +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', { value }); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', { value }); + } +}); + +/** + * Render a rejection reason string for unknown or unsupported adapters + * + * @param {string} reason + * @returns {string} + */ +const renderReason = (reason) => `- ${reason}`; + +/** + * Check if the adapter is resolved (function, null, or false) + * + * @param {Function|null|false} adapter + * @returns {boolean} + */ +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + +/** + * Get the first suitable adapter from the provided list. + * Tries each adapter in order until a supported one is found. + * Throws an AxiosError if no adapter is suitable. + * + * @param {Array|string|Function} adapters - Adapter(s) by name or function. + * @param {Object} config - Axios request configuration + * @throws {AxiosError} If no suitable adapter is available + * @returns {Function} The resolved adapter function + */ +function getAdapter(adapters, config) { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + + const { length } = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError$1(`Unknown adapter '${id}'`); + } + } + + if (adapter && (utils$1.isFunction(adapter) || (adapter = adapter.get(config)))) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError$1( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; +} + +/** + * Exports Axios adapters and utility to resolve an adapter + */ +var adapters = { + /** + * Resolve an adapter from a list of adapter names or functions. + * @type {Function} + */ + getAdapter, + + /** + * Exposes all known adapters + * @type {Object} + */ + adapters: knownAdapters +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError$1(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders$1.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter, config); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders$1.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders$1.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} + +const VERSION = "1.13.5"; + +const validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError$1( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError$1.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators$1.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION); + } + } +} + +var validator = { + assertOptions, + validators: validators$1 +}; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean), + legacyInterceptorReqResOrdering: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils$1.merge( + headers.common, + headers[config.method] + ); + + headers && utils$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders$1.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + const transitional = config.transitional || transitionalDefaults; + const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering; + + if (legacyInterceptorReqResOrdering) { + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + } else { + requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + } + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift(...requestInterceptorChain); + chain.push(...responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +var Axios$1 = Axios; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError$1(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +var CancelToken$1 = CancelToken; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * const args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +function isAxiosError(payload) { + return utils$1.isObject(payload) && (payload.isAxiosError === true); +} + +const HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, + WebServerIsDown: 521, + ConnectionTimedOut: 522, + OriginIsUnreachable: 523, + TimeoutOccurred: 524, + SslHandshakeFailed: 525, + InvalidSslCertificate: 526, +}; + +Object.entries(HttpStatusCode).forEach(([key, value]) => { + HttpStatusCode[value] = key; +}); + +var HttpStatusCode$1 = HttpStatusCode; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios$1(defaultConfig); + const instance = bind(Axios$1.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils$1.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults$1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios$1; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError$1; +axios.CancelToken = CancelToken$1; +axios.isCancel = isCancel; +axios.VERSION = VERSION; +axios.toFormData = toFormData; + +// Expose AxiosError class +axios.AxiosError = AxiosError$1; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig; + +axios.AxiosHeaders = AxiosHeaders$1; + +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode$1; + +axios.default = axios; + +module.exports = axios; +//# sourceMappingURL=axios.cjs.map diff --git a/node_modules/axios/dist/browser/axios.cjs.map b/node_modules/axios/dist/browser/axios.cjs.map new file mode 100644 index 00000000..5a9dd5cf --- /dev/null +++ b/node_modules/axios/dist/browser/axios.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.cjs","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/null.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/classes/Blob.js","../../lib/platform/browser/index.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/core/dispatchRequest.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js"],"sourcesContent":["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return (\n val !== null &&\n !isUndefined(val) &&\n val.constructor !== null &&\n !isUndefined(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(toStringTag in val) &&\n !(iterator in val)\n );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return (\n Object.keys(val).length === 0 &&\n Object.getPrototypeOf(val) === Object.prototype\n );\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n (isFunction(thing.append) &&\n ((kind = kindOf(thing)) === \"formdata\" ||\n // detect form-data instance\n (kind === \"object\" &&\n isFunction(thing.toString) &&\n thing.toString() === \"[object FormData]\"))))\n );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== \"object\") {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys\n ? Object.getOwnPropertyNames(obj)\n : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\"\n ? self\n : typeof window !== \"undefined\"\n ? window\n : global;\n})();\n\nconst isContextDefined = (context) =>\n !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n const result = {};\n const assignValue = (val, key) => {\n // Skip dangerous property names to prevent prototype pollution\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return;\n }\n\n const targetKey = (caseless && findKey(result, key)) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n forEach(\n b,\n (val, key) => {\n if (thisArg && isFunction(val)) {\n Object.defineProperty(a, key, {\n value: bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n Object.defineProperty(a, key, {\n value: val,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n },\n { allOwnKeys },\n );\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors,\n );\n Object.defineProperty(constructor.prototype, \"constructor\", {\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(constructor, \"super\", {\n value: superConstructor.prototype,\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n // eslint-disable-next-line func-names\n return (thing) => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n ({ hasOwnProperty }) =>\n (obj, prop) =>\n hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (\n isFunction(obj) &&\n [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n ) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if (\"writable\" in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach((value) => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString)\n ? define(arrayOrString)\n : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite((value = +value))\n ? value\n : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(\n thing &&\n isFunction(thing.append) &&\n thing[toStringTag] === \"FormData\" &&\n thing[iterator]\n );\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if (!(\"toJSON\" in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n thing &&\n (isObject(thing) || isFunction(thing)) &&\n isFunction(thing.then) &&\n isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported\n ? ((token, callbacks) => {\n _global.addEventListener(\n \"message\",\n ({ source, data }) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n },\n false,\n );\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n };\n })(`axios@${Math.random()}`, [])\n : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n typeof queueMicrotask !== \"undefined\"\n ? queueMicrotask.bind(_global)\n : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n static from(error, code, config, request, response, customProps) {\n const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n constructor(message, code, config, request, response) {\n super(message);\n this.name = 'AxiosError';\n this.isAxiosError = true;\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status;\n }\n }\n\n toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status,\n };\n }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n\n const _encode = options && options.encode || encode;\n\n const _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n\n const serializeFn = _options && _options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, _options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n constructor(message, config, request) {\n super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n this.__CANCEL__ = true;\n }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({ caseless }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) =>\n mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n };\n\n utils.forEach(\n Object.keys({ ...config1, ...config2 }),\n function computeConfigValue(prop) {\n if (\n prop === \"__proto__\" ||\n prop === \"constructor\" ||\n prop === \"prototype\"\n )\n return;\n const merge = utils.hasOwnProp(mergeMap, prop)\n ? mergeMap[prop]\n : mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n },\n );\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.5\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean),\n legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n const transitional = config.transitional || transitionalDefaults;\n const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["isFunction","utils","AxiosError","encode","URLSearchParams","FormData","Blob","platform","defaults","AxiosHeaders","CanceledError","ReadableStream","composeSignals","fetchAdapter.getFetch","validators","InterceptorManager","Axios","CancelToken","HttpStatusCode"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/esm/axios.js b/node_modules/axios/dist/esm/axios.js new file mode 100644 index 00000000..5d27ed19 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.js @@ -0,0 +1,4002 @@ +/*! Axios v1.13.5 Copyright (c) 2026 Matt Zabriskie and contributors */ +/** + * Create a bound version of a function with a specified `this` context + * + * @param {Function} fn - The function to bind + * @param {*} thisArg - The value to be passed as the `this` parameter + * @returns {Function} A new function that will call the original function with the specified `this` context + */ +function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} + +// utils is a library of generic helper functions non-specific to axios + +const { toString } = Object.prototype; +const { getPrototypeOf } = Object; +const { iterator, toStringTag } = Symbol; + +const kindOf = ((cache) => (thing) => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type; +}; + +const typeOfTest = (type) => (thing) => typeof thing === type; + +/** + * Determine if a value is a non-null object + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const { isArray } = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest("undefined"); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return ( + val !== null && + !isUndefined(val) && + val.constructor !== null && + !isUndefined(val.constructor) && + isFunction$1(val.constructor.isBuffer) && + val.constructor.isBuffer(val) + ); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest("ArrayBuffer"); + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val); + } else { + result = val && val.buffer && isArrayBuffer(val.buffer); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest("string"); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction$1 = typeOfTest("function"); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest("number"); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === "object"; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = (thing) => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== "object") { + return false; + } + + const prototype = getPrototypeOf(val); + return ( + (prototype === null || + prototype === Object.prototype || + Object.getPrototypeOf(prototype) === null) && + !(toStringTag in val) && + !(iterator in val) + ); +}; + +/** + * Determine if a value is an empty object (safely handles Buffers) + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an empty object, otherwise false + */ +const isEmptyObject = (val) => { + // Early return for non-objects or Buffers to prevent RangeError + if (!isObject(val) || isBuffer(val)) { + return false; + } + + try { + return ( + Object.keys(val).length === 0 && + Object.getPrototypeOf(val) === Object.prototype + ); + } catch (e) { + // Fallback for any other objects that might cause RangeError with Object.keys() + return false; + } +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest("Date"); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest("File"); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest("Blob"); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest("FileList"); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction$1(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return ( + thing && + ((typeof FormData === "function" && thing instanceof FormData) || + (isFunction$1(thing.append) && + ((kind = kindOf(thing)) === "formdata" || + // detect form-data instance + (kind === "object" && + isFunction$1(thing.toString) && + thing.toString() === "[object FormData]")))) + ); +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest("URLSearchParams"); + +const [isReadableStream, isRequest, isResponse, isHeaders] = [ + "ReadableStream", + "Request", + "Response", + "Headers", +].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => + str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, { allOwnKeys = false } = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === "undefined") { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== "object") { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Buffer check + if (isBuffer(obj)) { + return; + } + + // Iterate over object keys + const keys = allOwnKeys + ? Object.getOwnPropertyNames(obj) + : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + if (isBuffer(obj)) { + return null; + } + + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" + ? self + : typeof window !== "undefined" + ? window + : global; +})(); + +const isContextDefined = (context) => + !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * const result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const { caseless, skipUndefined } = (isContextDefined(this) && this) || {}; + const result = {}; + const assignValue = (val, key) => { + // Skip dangerous property names to prevent prototype pollution + if (key === "__proto__" || key === "constructor" || key === "prototype") { + return; + } + + const targetKey = (caseless && findKey(result, key)) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else if (!skipUndefined || !isUndefined(val)) { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, { allOwnKeys } = {}) => { + forEach( + b, + (val, key) => { + if (thisArg && isFunction$1(val)) { + Object.defineProperty(a, key, { + value: bind(val, thisArg), + writable: true, + enumerable: true, + configurable: true, + }); + } else { + Object.defineProperty(a, key, { + value: val, + writable: true, + enumerable: true, + configurable: true, + }); + } + }, + { allOwnKeys }, + ); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xfeff) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create( + superConstructor.prototype, + descriptors, + ); + Object.defineProperty(constructor.prototype, "constructor", { + value: constructor, + writable: true, + enumerable: false, + configurable: true, + }); + Object.defineProperty(constructor, "super", { + value: superConstructor.prototype, + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ( + (!propFilter || propFilter(prop, sourceObj, destObj)) && + !merged[prop] + ) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while ( + sourceObj && + (!filter || filter(sourceObj, destObj)) && + sourceObj !== Object.prototype + ); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = ((TypedArray) => { + // eslint-disable-next-line func-names + return (thing) => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest("HTMLFormElement"); + +const toCamelCase = (str) => { + return str + .toLowerCase() + .replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + }); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = ( + ({ hasOwnProperty }) => + (obj, prop) => + hasOwnProperty.call(obj, prop) +)(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest("RegExp"); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if ( + isFunction$1(obj) && + ["arguments", "caller", "callee"].indexOf(name) !== -1 + ) { + return false; + } + + const value = obj[name]; + + if (!isFunction$1(value)) return; + + descriptor.enumerable = false; + + if ("writable" in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error("Can not rewrite read-only method '" + name + "'"); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach((value) => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) + ? define(arrayOrString) + : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite((value = +value)) + ? value + : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!( + thing && + isFunction$1(thing.append) && + thing[toStringTag] === "FormData" && + thing[iterator] + ); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + //Buffer check + if (isBuffer(source)) { + return source; + } + + if (!("toJSON" in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest("AsyncFunction"); + +const isThenable = (thing) => + thing && + (isObject(thing) || isFunction$1(thing)) && + isFunction$1(thing.then) && + isFunction$1(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported + ? ((token, callbacks) => { + _global.addEventListener( + "message", + ({ source, data }) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, + false, + ); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + }; + })(`axios@${Math.random()}`, []) + : (cb) => setTimeout(cb); +})(typeof setImmediate === "function", isFunction$1(_global.postMessage)); + +const asap = + typeof queueMicrotask !== "undefined" + ? queueMicrotask.bind(_global) + : (typeof process !== "undefined" && process.nextTick) || _setImmediate; + +// ********************* + +const isIterable = (thing) => thing != null && isFunction$1(thing[iterator]); + +const utils$1 = { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isEmptyObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction: isFunction$1, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable, +}; + +class AxiosError$1 extends Error { + static from(error, code, config, request, response, customProps) { + const axiosError = new AxiosError$1(error.message, code || error.code, config, request, response); + axiosError.cause = error; + axiosError.name = error.name; + customProps && Object.assign(axiosError, customProps); + return axiosError; + } + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + constructor(message, code, config, request, response) { + super(message); + this.name = 'AxiosError'; + this.isAxiosError = true; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status; + } + } + + toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status, + }; + } +} + +// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated. +AxiosError$1.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE'; +AxiosError$1.ERR_BAD_OPTION = 'ERR_BAD_OPTION'; +AxiosError$1.ECONNABORTED = 'ECONNABORTED'; +AxiosError$1.ETIMEDOUT = 'ETIMEDOUT'; +AxiosError$1.ERR_NETWORK = 'ERR_NETWORK'; +AxiosError$1.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS'; +AxiosError$1.ERR_DEPRECATED = 'ERR_DEPRECATED'; +AxiosError$1.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE'; +AxiosError$1.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST'; +AxiosError$1.ERR_CANCELED = 'ERR_CANCELED'; +AxiosError$1.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT'; +AxiosError$1.ERR_INVALID_URL = 'ERR_INVALID_URL'; + +const AxiosError$2 = AxiosError$1; + +// eslint-disable-next-line strict +const httpAdapter = null; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData$1(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils$1.isDate(value)) { + return value.toISOString(); + } + + if (utils$1.isBoolean(value)) { + return value.toString(); + } + + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError$2('Blob is not supported. Use a Buffer instead.'); + } + + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils$1.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode$1(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData$1(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +function buildURL(url, params, options) { + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + const _options = utils$1.isFunction(options) ? { + serialize: options + } : options; + + const serializeFn = _options && _options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, _options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, _options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * @param {Object} options The options for the interceptor, synchronous and runWhen + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {void} + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +const InterceptorManager$1 = InterceptorManager; + +const transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false, + legacyInterceptorReqResOrdering: true +}; + +const URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; + +const FormData$1 = typeof FormData !== 'undefined' ? FormData : null; + +const Blob$1 = typeof Blob !== 'undefined' ? Blob : null; + +const platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; + +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +const utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin +}); + +const platform = { + ...utils, + ...platform$1 +}; + +function toURLEncodedForm(data, options) { + return toFormData$1(data, new platform.classes.URLSearchParams(), { + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + }, + ...options + }); +} + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + const obj = {}; + + utils$1.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils$1.isObject(data); + + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils$1.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) || + utils$1.isReadableStream(data) + ) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData$1( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data, this.parseReviver); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError$2.from(e, AxiosError$2.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +const defaults$1 = defaults; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils$1.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +const parseHeaders = rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils$1.isString(value)) return; + + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils$1.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders$1 { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils$1.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils$1.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders$1.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders$1.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders$1); + +const AxiosHeaders$2 = AxiosHeaders$1; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +function transformData(fns, response) { + const config = this || defaults$1; + const context = response || config; + const headers = AxiosHeaders$2.from(context.headers); + let data = context.data; + + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} + +function isCancel$1(value) { + return !!(value && value.__CANCEL__); +} + +class CanceledError$1 extends AxiosError$2 { + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + constructor(message, config, request) { + super(message == null ? 'canceled' : message, AxiosError$2.ERR_CANCELED, config, request); + this.name = 'CanceledError'; + this.__CANCEL__ = true; + } +} + +const CanceledError$2 = CanceledError$1; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError$2( + 'Request failed with status code ' + response.status, + [AxiosError$2.ERR_BAD_REQUEST, AxiosError$2.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} + +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn(...args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + +const isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; + +const cookies = platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure, sameSite) { + if (typeof document === 'undefined') return; + + const cookie = [`${name}=${encodeURIComponent(value)}`]; + + if (utils$1.isNumber(expires)) { + cookie.push(`expires=${new Date(expires).toUTCString()}`); + } + if (utils$1.isString(path)) { + cookie.push(`path=${path}`); + } + if (utils$1.isString(domain)) { + cookie.push(`domain=${domain}`); + } + if (secure === true) { + cookie.push('secure'); + } + if (utils$1.isString(sameSite)) { + cookie.push(`SameSite=${sameSite}`); + } + + document.cookie = cookie.join('; '); + }, + + read(name) { + if (typeof document === 'undefined') return null; + const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); + return match ? decodeURIComponent(match[1]) : null; + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000, '/'); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + if (typeof url !== 'string') { + return false; + } + + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} + +const headersToObject = (thing) => + thing instanceof AxiosHeaders$2 ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig$1(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({ caseless }, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + function mergeDeepProperties(a, b, prop, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop, caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b, prop) => + mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true), + }; + + utils$1.forEach( + Object.keys({ ...config1, ...config2 }), + function computeConfigValue(prop) { + if ( + prop === "__proto__" || + prop === "constructor" || + prop === "prototype" + ) + return; + const merge = utils$1.hasOwnProp(mergeMap, prop) + ? mergeMap[prop] + : mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || + (config[prop] = configValue); + }, + ); + + return config; +} + +const resolveConfig = (config) => { + const newConfig = mergeConfig$1({}, config); + + let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig; + + newConfig.headers = headers = AxiosHeaders$2.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // browser handles it + } else if (utils$1.isFunction(data.getHeaders)) { + // Node.js FormData (like form-data package) + const formHeaders = data.getHeaders(); + // Only set safe headers to avoid overwriting security headers + const allowedHeaders = ['content-type', 'content-length']; + Object.entries(formHeaders).forEach(([key, val]) => { + if (allowedHeaders.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +const xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$2.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders$2.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError$2('Request aborted', AxiosError$2.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError(event) { + // Browsers deliver a ProgressEvent in XHR onerror + // (message may be empty; when present, surface it) + // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event + const msg = event && event.message ? event.message : 'Network Error'; + const err = new AxiosError$2(msg, AxiosError$2.ERR_NETWORK, config, request); + // attach the underlying event for consumers who want details + err.event = event || null; + reject(err); + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError$2( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError$2.ETIMEDOUT : AxiosError$2.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError$2(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError$2('Unsupported protocol ' + protocol + ':', AxiosError$2.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +}; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError$2 ? err : new CanceledError$2(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError$2(`timeout of ${timeout}ms exceeded`, AxiosError$2.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +const composeSignals$1 = composeSignals; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const {isFunction} = utils$1; + +const globalFetchAPI = (({Request, Response}) => ({ + Request, Response +}))(utils$1.global); + +const { + ReadableStream: ReadableStream$1, TextEncoder +} = utils$1.global; + + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const factory = (env) => { + env = utils$1.merge.call({ + skipUndefined: true + }, globalFetchAPI, env); + + const {fetch: envFetch, Request, Response} = env; + const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function'; + const isRequestSupported = isFunction(Request); + const isResponseSupported = isFunction(Response); + + if (!isFetchSupported) { + return false; + } + + const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream$1); + + const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Request(str).arrayBuffer()) + ); + + const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream$1(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; + }); + + const supportsResponseStream = isResponseSupported && isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + const resolvers = { + stream: supportsResponseStream && ((res) => res.body) + }; + + isFetchSupported && ((() => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = (res, config) => { + let method = res && res[type]; + + if (method) { + return method.call(res); + } + + throw new AxiosError$2(`Response type '${type}' is not supported`, AxiosError$2.ERR_NOT_SUPPORT, config); + }); + }); + })()); + + const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if (utils$1.isBlob(body)) { + return body.size; + } + + if (utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if (utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if (utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if (utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } + }; + + const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; + }; + + return async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + let _fetch = envFetch || fetch; + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request = null; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype; + + const resolvedOptions = { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }; + + request = isRequestSupported && new Request(url, resolvedOptions); + + let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions)); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$2.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError$2('Network Error', AxiosError$2.ERR_NETWORK, config, request, err && err.response), + { + cause: err.cause || err + } + ) + } + + throw AxiosError$2.from(err, err && err.code, config, request, err && err.response); + } + } +}; + +const seedCache = new Map(); + +const getFetch = (config) => { + let env = (config && config.env) || {}; + const {fetch, Request, Response} = env; + const seeds = [ + Request, Response, fetch + ]; + + let len = seeds.length, i = len, + seed, target, map = seedCache; + + while (i--) { + seed = seeds[i]; + target = map.get(seed); + + target === undefined && map.set(seed, target = (i ? new Map() : factory(env))); + + map = target; + } + + return target; +}; + +getFetch(); + +/** + * Known adapters mapping. + * Provides environment-specific adapters for Axios: + * - `http` for Node.js + * - `xhr` for browsers + * - `fetch` for fetch API-based requests + * + * @type {Object} + */ +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: { + get: getFetch, + } +}; + +// Assign adapter names for easier debugging and identification +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', { value }); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', { value }); + } +}); + +/** + * Render a rejection reason string for unknown or unsupported adapters + * + * @param {string} reason + * @returns {string} + */ +const renderReason = (reason) => `- ${reason}`; + +/** + * Check if the adapter is resolved (function, null, or false) + * + * @param {Function|null|false} adapter + * @returns {boolean} + */ +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + +/** + * Get the first suitable adapter from the provided list. + * Tries each adapter in order until a supported one is found. + * Throws an AxiosError if no adapter is suitable. + * + * @param {Array|string|Function} adapters - Adapter(s) by name or function. + * @param {Object} config - Axios request configuration + * @throws {AxiosError} If no suitable adapter is available + * @returns {Function} The resolved adapter function + */ +function getAdapter$1(adapters, config) { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + + const { length } = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError$2(`Unknown adapter '${id}'`); + } + } + + if (adapter && (utils$1.isFunction(adapter) || (adapter = adapter.get(config)))) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError$2( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; +} + +/** + * Exports Axios adapters and utility to resolve an adapter + */ +const adapters = { + /** + * Resolve an adapter from a list of adapter names or functions. + * @type {Function} + */ + getAdapter: getAdapter$1, + + /** + * Exposes all known adapters + * @type {Object} + */ + adapters: knownAdapters +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError$2(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders$2.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter, config); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders$2.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel$1(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders$2.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} + +const VERSION$1 = "1.13.5"; + +const validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION$1 + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError$2( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError$2.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators$1.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError$2('options must be an object', AxiosError$2.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError$2('option ' + opt + ' must be ' + result, AxiosError$2.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError$2('Unknown option ' + opt, AxiosError$2.ERR_BAD_OPTION); + } + } +} + +const validator = { + assertOptions, + validators: validators$1 +}; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios$1 { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig$1(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean), + legacyInterceptorReqResOrdering: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils$1.merge( + headers.common, + headers[config.method] + ); + + headers && utils$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders$2.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + const transitional = config.transitional || transitionalDefaults; + const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering; + + if (legacyInterceptorReqResOrdering) { + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + } else { + requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + } + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift(...requestInterceptorChain); + chain.push(...responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig$1(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios$1.prototype[method] = function(url, config) { + return this.request(mergeConfig$1(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig$1(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios$1.prototype[method] = generateHTTPMethod(); + + Axios$1.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +const Axios$2 = Axios$1; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken$1 { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError$2(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken$1(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +const CancelToken$2 = CancelToken$1; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * const args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +function spread$1(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +function isAxiosError$1(payload) { + return utils$1.isObject(payload) && (payload.isAxiosError === true); +} + +const HttpStatusCode$1 = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, + WebServerIsDown: 521, + ConnectionTimedOut: 522, + OriginIsUnreachable: 523, + TimeoutOccurred: 524, + SslHandshakeFailed: 525, + InvalidSslCertificate: 526, +}; + +Object.entries(HttpStatusCode$1).forEach(([key, value]) => { + HttpStatusCode$1[value] = key; +}); + +const HttpStatusCode$2 = HttpStatusCode$1; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios$2(defaultConfig); + const instance = bind(Axios$2.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$2.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils$1.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig$1(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults$1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios$2; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError$2; +axios.CancelToken = CancelToken$2; +axios.isCancel = isCancel$1; +axios.VERSION = VERSION$1; +axios.toFormData = toFormData$1; + +// Expose AxiosError class +axios.AxiosError = AxiosError$2; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread$1; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError$1; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig$1; + +axios.AxiosHeaders = AxiosHeaders$2; + +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode$2; + +axios.default = axios; + +// this module should only have a default export +const axios$1 = axios; + +// This module is intended to unwrap Axios default export as named. +// Keep top-level export same with static properties +// so that it can keep same with es module or cjs +const { + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} = axios$1; + +export { Axios, AxiosError, AxiosHeaders, Cancel, CancelToken, CanceledError, HttpStatusCode, VERSION, all, axios$1 as default, formToJSON, getAdapter, isAxiosError, isCancel, mergeConfig, spread, toFormData }; +//# sourceMappingURL=axios.js.map diff --git a/node_modules/axios/dist/esm/axios.js.map b/node_modules/axios/dist/esm/axios.js.map new file mode 100644 index 00000000..61602cdc --- /dev/null +++ b/node_modules/axios/dist/esm/axios.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.js","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/null.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/classes/Blob.js","../../lib/platform/browser/index.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/core/dispatchRequest.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js","../../index.js"],"sourcesContent":["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return (\n val !== null &&\n !isUndefined(val) &&\n val.constructor !== null &&\n !isUndefined(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(toStringTag in val) &&\n !(iterator in val)\n );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return (\n Object.keys(val).length === 0 &&\n Object.getPrototypeOf(val) === Object.prototype\n );\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n (isFunction(thing.append) &&\n ((kind = kindOf(thing)) === \"formdata\" ||\n // detect form-data instance\n (kind === \"object\" &&\n isFunction(thing.toString) &&\n thing.toString() === \"[object FormData]\"))))\n );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== \"object\") {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys\n ? Object.getOwnPropertyNames(obj)\n : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\"\n ? self\n : typeof window !== \"undefined\"\n ? window\n : global;\n})();\n\nconst isContextDefined = (context) =>\n !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n const result = {};\n const assignValue = (val, key) => {\n // Skip dangerous property names to prevent prototype pollution\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return;\n }\n\n const targetKey = (caseless && findKey(result, key)) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n forEach(\n b,\n (val, key) => {\n if (thisArg && isFunction(val)) {\n Object.defineProperty(a, key, {\n value: bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n Object.defineProperty(a, key, {\n value: val,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n },\n { allOwnKeys },\n );\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors,\n );\n Object.defineProperty(constructor.prototype, \"constructor\", {\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(constructor, \"super\", {\n value: superConstructor.prototype,\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n // eslint-disable-next-line func-names\n return (thing) => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n ({ hasOwnProperty }) =>\n (obj, prop) =>\n hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (\n isFunction(obj) &&\n [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n ) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if (\"writable\" in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach((value) => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString)\n ? define(arrayOrString)\n : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite((value = +value))\n ? value\n : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(\n thing &&\n isFunction(thing.append) &&\n thing[toStringTag] === \"FormData\" &&\n thing[iterator]\n );\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if (!(\"toJSON\" in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n thing &&\n (isObject(thing) || isFunction(thing)) &&\n isFunction(thing.then) &&\n isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported\n ? ((token, callbacks) => {\n _global.addEventListener(\n \"message\",\n ({ source, data }) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n },\n false,\n );\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n };\n })(`axios@${Math.random()}`, [])\n : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n typeof queueMicrotask !== \"undefined\"\n ? queueMicrotask.bind(_global)\n : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n static from(error, code, config, request, response, customProps) {\n const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n constructor(message, code, config, request, response) {\n super(message);\n this.name = 'AxiosError';\n this.isAxiosError = true;\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status;\n }\n }\n\n toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status,\n };\n }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n\n const _encode = options && options.encode || encode;\n\n const _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n\n const serializeFn = _options && _options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, _options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n constructor(message, config, request) {\n super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n this.__CANCEL__ = true;\n }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({ caseless }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) =>\n mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n };\n\n utils.forEach(\n Object.keys({ ...config1, ...config2 }),\n function computeConfigValue(prop) {\n if (\n prop === \"__proto__\" ||\n prop === \"constructor\" ||\n prop === \"prototype\"\n )\n return;\n const merge = utils.hasOwnProp(mergeMap, prop)\n ? mergeMap[prop]\n : mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n },\n );\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.5\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean),\n legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n const transitional = config.transitional || transitionalDefaults;\n const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n"],"names":["isFunction","AxiosError","utils","toFormData","encode","URLSearchParams","FormData","Blob","platform","AxiosHeaders","defaults","isCancel","CanceledError","mergeConfig","ReadableStream","composeSignals","fetchAdapter.getFetch","getAdapter","VERSION","validators","Axios","InterceptorManager","CancelToken","spread","isAxiosError","HttpStatusCode","axios"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/esm/axios.min.js b/node_modules/axios/dist/esm/axios.min.js new file mode 100644 index 00000000..6670bac6 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.min.js @@ -0,0 +1,3 @@ +/*! Axios v1.13.5 Copyright (c) 2026 Matt Zabriskie and contributors */ +function e(e,t){return function(){return e.apply(t,arguments)}}const{toString:t}=Object.prototype,{getPrototypeOf:n}=Object,{iterator:r,toStringTag:o}=Symbol,s=(i=Object.create(null),e=>{const n=t.call(e);return i[n]||(i[n]=n.slice(8,-1).toLowerCase())});var i;const a=e=>(e=e.toLowerCase(),t=>s(t)===e),c=e=>t=>typeof t===e,{isArray:l}=Array,u=c("undefined");function f(e){return null!==e&&!u(e)&&null!==e.constructor&&!u(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const d=a("ArrayBuffer");const p=c("string"),h=c("function"),m=c("number"),b=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==s(e))return!1;const t=n(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||o in e||r in e)},g=a("Date"),w=a("File"),E=a("Blob"),R=a("FileList"),O=a("URLSearchParams"),[S,T,A,v]=["ReadableStream","Request","Response","Headers"].map(a);function C(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),l(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const N="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,x=e=>!u(e)&&e!==N;const j=(U="undefined"!=typeof Uint8Array&&n(Uint8Array),e=>U&&e instanceof U);var U;const P=a("HTMLFormElement"),F=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),L=a("RegExp"),D=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};C(n,(n,o)=>{let s;!1!==(s=t(n,o,e))&&(r[o]=s||n)}),Object.defineProperties(e,r)};const B=a("AsyncFunction"),k=(q="function"==typeof setImmediate,I=h(N.postMessage),q?setImmediate:I?(M=`axios@${Math.random()}`,z=[],N.addEventListener("message",({source:e,data:t})=>{e===N&&t===M&&z.length&&z.shift()()},!1),e=>{z.push(e),N.postMessage(M,"*")}):e=>setTimeout(e));var q,I,M,z;const H="undefined"!=typeof queueMicrotask?queueMicrotask.bind(N):"undefined"!=typeof process&&process.nextTick||k,J={isArray:l,isArrayBuffer:d,isBuffer:f,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=s(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&d(e.buffer),t},isString:p,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:b,isPlainObject:y,isEmptyObject:e=>{if(!b(e)||f(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:S,isRequest:T,isResponse:A,isHeaders:v,isUndefined:u,isDate:g,isFile:w,isBlob:E,isRegExp:L,isFunction:h,isStream:e=>b(e)&&h(e.pipe),isURLSearchParams:O,isTypedArray:j,isFileList:R,forEach:C,merge:function e(){const{caseless:t,skipUndefined:n}=x(this)&&this||{},r={},o=(o,s)=>{if("__proto__"===s||"constructor"===s||"prototype"===s)return;const i=t&&_(r,s)||s;y(r[i])&&y(o)?r[i]=e(r[i],o):y(o)?r[i]=e({},o):l(o)?r[i]=o.slice():n&&u(o)||(r[i]=o)};for(let e=0,t=arguments.length;e(C(n,(n,o)=>{r&&h(n)?Object.defineProperty(t,o,{value:e(n,r),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(t,o,{value:n,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:o}),t),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,r,o)=>{let s,i,a;const c={};if(t=t||{},null==e)return t;do{for(s=Object.getOwnPropertyNames(e),i=s.length;i-- >0;)a=s[i],o&&!o(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==r&&n(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(l(e))return e;let t=e.length;if(!m(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[r]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:P,hasOwnProperty:F,hasOwnProp:F,reduceDescriptors:D,freezeMethods:e=>{D(e,(t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];h(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return l(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:_,global:N,isContextDefined:x,isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[o]&&e[r])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(b(e)){if(t.indexOf(e)>=0)return;if(f(e))return e;if(!("toJSON"in e)){t[r]=e;const o=l(e)?[]:{};return C(e,(e,t)=>{const s=n(e,r+1);!u(s)&&(o[t]=s)}),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:B,isThenable:e=>e&&(b(e)||h(e))&&h(e.then)&&h(e.catch),setImmediate:k,asap:H,isIterable:e=>null!=e&&h(e[r])};class W extends Error{static from(e,t,n,r,o,s){const i=new W(e.message,t||e.code,n,r,o);return i.cause=e,i.name=e.name,s&&Object.assign(i,s),i}constructor(e,t,n,r,o){super(e),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:J.toJSONObject(this.config),code:this.code,status:this.status}}}W.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",W.ERR_BAD_OPTION="ERR_BAD_OPTION",W.ECONNABORTED="ECONNABORTED",W.ETIMEDOUT="ETIMEDOUT",W.ERR_NETWORK="ERR_NETWORK",W.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",W.ERR_DEPRECATED="ERR_DEPRECATED",W.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",W.ERR_BAD_REQUEST="ERR_BAD_REQUEST",W.ERR_CANCELED="ERR_CANCELED",W.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",W.ERR_INVALID_URL="ERR_INVALID_URL";const V=W;function $(e){return J.isPlainObject(e)||J.isArray(e)}function K(e){return J.endsWith(e,"[]")?e.slice(0,-2):e}function X(e,t,n){return e?e.concat(t).map(function(e,t){return e=K(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const G=J.toFlatObject(J,{},null,function(e){return/^is[A-Z]/.test(e)});function Q(e,t,n){if(!J.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=J.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!J.isUndefined(t[e])})).metaTokens,o=n.visitor||l,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&J.isSpecCompliantForm(t);if(!J.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(J.isDate(e))return e.toISOString();if(J.isBoolean(e))return e.toString();if(!a&&J.isBlob(e))throw new V("Blob is not supported. Use a Buffer instead.");return J.isArrayBuffer(e)||J.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(J.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(J.isArray(e)&&function(e){return J.isArray(e)&&!e.some($)}(e)||(J.isFileList(e)||J.endsWith(n,"[]"))&&(a=J.toArray(e)))return n=K(n),a.forEach(function(e,r){!J.isUndefined(e)&&null!==e&&t.append(!0===i?X([n],r,s):null===i?n:n+"[]",c(e))}),!1;return!!$(e)||(t.append(X(o,n,s),c(e)),!1)}const u=[],f=Object.assign(G,{defaultVisitor:l,convertValue:c,isVisitable:$});if(!J.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!J.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),J.forEach(n,function(n,s){!0===(!(J.isUndefined(n)||null===n)&&o.call(t,n,J.isString(s)?s.trim():s,r,f))&&e(n,r?r.concat(s):[s])}),u.pop()}}(e),t}function Y(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function Z(e,t){this._pairs=[],e&&Q(e,this,t)}const ee=Z.prototype;function te(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function ne(e,t,n){if(!t)return e;const r=n&&n.encode||te,o=J.isFunction(n)?{serialize:n}:n,s=o&&o.serialize;let i;if(i=s?s(t,o):J.isURLSearchParams(t)?t.toString():new Z(t,o).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}ee.append=function(e,t){this._pairs.push([e,t])},ee.toString=function(e){const t=e?function(t){return e.call(this,t,Y)}:Y;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};const re=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){J.forEach(this.handlers,function(t){null!==t&&e(t)})}},oe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},se={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Z,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},ie="undefined"!=typeof window&&"undefined"!=typeof document,ae="object"==typeof navigator&&navigator||void 0,ce=ie&&(!ae||["ReactNative","NativeScript","NS"].indexOf(ae.product)<0),le="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ue=ie&&window.location.href||"http://localhost",fe={...Object.freeze({__proto__:null,hasBrowserEnv:ie,hasStandardBrowserWebWorkerEnv:le,hasStandardBrowserEnv:ce,navigator:ae,origin:ue}),...se};function de(e){function t(e,n,r,o){let s=e[o++];if("__proto__"===s)return!0;const i=Number.isFinite(+s),a=o>=e.length;if(s=!s&&J.isArray(r)?r.length:s,a)return J.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!i;r[s]&&J.isObject(r[s])||(r[s]=[]);return t(e,n,r[s],o)&&J.isArray(r[s])&&(r[s]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let s;for(r=0;r{t(function(e){return J.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const pe={transitional:oe,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=J.isObject(e);o&&J.isHTMLForm(e)&&(e=new FormData(e));if(J.isFormData(e))return r?JSON.stringify(de(e)):e;if(J.isArrayBuffer(e)||J.isBuffer(e)||J.isStream(e)||J.isFile(e)||J.isBlob(e)||J.isReadableStream(e))return e;if(J.isArrayBufferView(e))return e.buffer;if(J.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Q(e,new fe.classes.URLSearchParams,{visitor:function(e,t,n,r){return fe.isNode&&J.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((s=J.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Q(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(J.isString(e))try{return(t||JSON.parse)(e),J.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||pe.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(J.isResponse(e)||J.isReadableStream(e))return e;if(e&&J.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw V.from(e,V.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:fe.classes.FormData,Blob:fe.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};J.forEach(["delete","get","head","post","put","patch"],e=>{pe.headers[e]={}});const he=pe,me=J.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),be=Symbol("internals");function ye(e){return e&&String(e).trim().toLowerCase()}function ge(e){return!1===e||null==e?e:J.isArray(e)?e.map(ge):String(e)}function we(e,t,n,r,o){return J.isFunction(r)?r.call(this,t,n):(o&&(t=n),J.isString(t)?J.isString(r)?-1!==t.indexOf(r):J.isRegExp(r)?r.test(t):void 0:void 0)}class Ee{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=ye(t);if(!o)throw new Error("header name must be a non-empty string");const s=J.findKey(r,o);(!s||void 0===r[s]||!0===n||void 0===n&&!1!==r[s])&&(r[s||t]=ge(e))}const s=(e,t)=>J.forEach(e,(e,n)=>o(e,n,t));if(J.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(J.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&me[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(J.isObject(e)&&J.isIterable(e)){let n,r,o={};for(const t of e){if(!J.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?J.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}s(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=ye(e)){const n=J.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(J.isFunction(t))return t.call(this,e,n);if(J.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=ye(e)){const n=J.findKey(this,e);return!(!n||void 0===this[n]||t&&!we(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=ye(e)){const o=J.findKey(n,e);!o||t&&!we(0,n[o],o,t)||(delete n[o],r=!0)}}return J.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!we(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return J.forEach(this,(r,o)=>{const s=J.findKey(n,o);if(s)return t[s]=ge(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=ge(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return J.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&J.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[be]=this[be]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=ye(e);t[r]||(!function(e,t){const n=J.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return J.isArray(e)?e.forEach(r):r(e),this}}Ee.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),J.reduceDescriptors(Ee.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),J.freezeMethods(Ee);const Re=Ee;function Oe(e,t){const n=this||he,r=t||n,o=Re.from(r.headers);let s=r.data;return J.forEach(e,function(e){s=e.call(n,s,o.normalize(),t?t.status:void 0)}),o.normalize(),s}function Se(e){return!(!e||!e.__CANCEL__)}const Te=class extends V{constructor(e,t,n){super(null==e?"canceled":e,V.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function Ae(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new V("Request failed with status code "+n.status,[V.ERR_BAD_REQUEST,V.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const ve=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),l=r[i];o||(o=c),n[s]=a,r[s]=c;let u=i,f=0;for(;u!==s;)f+=n[u++],u%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-o{o=s,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=s?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},s-a)))},()=>n&&i(n)]}(n=>{const s=n.loaded,i=n.lengthComputable?n.total:void 0,a=s-r,c=o(a);r=s;e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},Ce=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},_e=e=>(...t)=>J.asap(()=>e(...t)),Ne=fe.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,fe.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(fe.origin),fe.navigator&&/(msie|trident)/i.test(fe.navigator.userAgent)):()=>!0,xe=fe.hasStandardBrowserEnv?{write(e,t,n,r,o,s,i){if("undefined"==typeof document)return;const a=[`${e}=${encodeURIComponent(t)}`];J.isNumber(n)&&a.push(`expires=${new Date(n).toUTCString()}`),J.isString(r)&&a.push(`path=${r}`),J.isString(o)&&a.push(`domain=${o}`),!0===s&&a.push("secure"),J.isString(i)&&a.push(`SameSite=${i}`),document.cookie=a.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function je(e,t,n){let r=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ue=e=>e instanceof Re?{...e}:e;function Pe(e,t){t=t||{};const n={};function r(e,t,n,r){return J.isPlainObject(e)&&J.isPlainObject(t)?J.merge.call({caseless:r},e,t):J.isPlainObject(t)?J.merge({},t):J.isArray(t)?t.slice():t}function o(e,t,n,o){return J.isUndefined(t)?J.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function s(e,t){if(!J.isUndefined(t))return r(void 0,t)}function i(e,t){return J.isUndefined(t)?J.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,s){return s in t?r(n,o):s in e?r(void 0,n):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t,n)=>o(Ue(e),Ue(t),0,!0)};return J.forEach(Object.keys({...e,...t}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const s=J.hasOwnProp(c,r)?c[r]:o,i=s(e[r],t[r],r);J.isUndefined(i)&&s!==a||(n[r]=i)}),n}const Fe=e=>{const t=Pe({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:s,headers:i,auth:a}=t;if(t.headers=i=Re.from(i),t.url=ne(je(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),a&&i.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),J.isFormData(n))if(fe.hasStandardBrowserEnv||fe.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(J.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&i.set(e,n)})}if(fe.hasStandardBrowserEnv&&(r&&J.isFunction(r)&&(r=r(t)),r||!1!==r&&Ne(t.url))){const e=o&&s&&xe.read(s);e&&i.set(o,e)}return t},Le="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=Fe(e);let o=r.data;const s=Re.from(r.headers).normalize();let i,a,c,l,u,{responseType:f,onUploadProgress:d,onDownloadProgress:p}=r;function h(){l&&l(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function b(){if(!m)return;const r=Re.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Ae(function(e){t(e),h()},function(e){n(e),h()},{data:f&&"text"!==f&&"json"!==f?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=b:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(b)},m.onabort=function(){m&&(n(new V("Request aborted",V.ECONNABORTED,e,m)),m=null)},m.onerror=function(t){const r=t&&t.message?t.message:"Network Error",o=new V(r,V.ERR_NETWORK,e,m);o.event=t||null,n(o),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||oe;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new V(t,o.clarifyTimeoutError?V.ETIMEDOUT:V.ECONNABORTED,e,m)),m=null},void 0===o&&s.setContentType(null),"setRequestHeader"in m&&J.forEach(s.toJSON(),function(e,t){m.setRequestHeader(t,e)}),J.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),f&&"json"!==f&&(m.responseType=r.responseType),p&&([c,u]=ve(p,!0),m.addEventListener("progress",c)),d&&m.upload&&([a,l]=ve(d),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",l)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new Te(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===fe.protocols.indexOf(y)?n(new V("Unsupported protocol "+y+":",V.ERR_BAD_REQUEST,e)):m.send(o||null)})},De=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof V?t:new Te(t instanceof Error?t.message:t))}};let s=t&&setTimeout(()=>{s=null,o(new V(`timeout of ${t}ms exceeded`,V.ETIMEDOUT))},t);const i=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:a}=r;return a.unsubscribe=()=>J.asap(i),a}},Be=function*(e,t){let n=e.byteLength;if(!t||n{const o=async function*(e,t){for await(const n of ke(e))yield*Be(n,t)}(e,t);let s,i=0,a=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return a(),void e.close();let s=r.byteLength;if(n){let e=i+=s;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw a(e),e}},cancel:e=>(a(e),o.return())},{highWaterMark:2})},{isFunction:Ie}=J,Me=(({Request:e,Response:t})=>({Request:e,Response:t}))(J.global),{ReadableStream:ze,TextEncoder:He}=J.global,Je=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},We=e=>{e=J.merge.call({skipUndefined:!0},Me,e);const{fetch:t,Request:n,Response:r}=e,o=t?Ie(t):"function"==typeof fetch,s=Ie(n),i=Ie(r);if(!o)return!1;const a=o&&Ie(ze),c=o&&("function"==typeof He?(l=new He,e=>l.encode(e)):async e=>new Uint8Array(await new n(e).arrayBuffer()));var l;const u=s&&a&&Je(()=>{let e=!1;const t=new n(fe.origin,{body:new ze,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),f=i&&a&&Je(()=>J.isReadableStream(new r("").body)),d={stream:f&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new V(`Response type '${e}' is not supported`,V.ERR_NOT_SUPPORT,n)})});const p=async(e,t)=>{const r=J.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(J.isBlob(e))return e.size;if(J.isSpecCompliantForm(e)){const t=new n(fe.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return J.isArrayBufferView(e)||J.isArrayBuffer(e)?e.byteLength:(J.isURLSearchParams(e)&&(e+=""),J.isString(e)?(await c(e)).byteLength:void 0)})(t):r};return async e=>{let{url:o,method:i,data:a,signal:c,cancelToken:l,timeout:h,onDownloadProgress:m,onUploadProgress:b,responseType:y,headers:g,withCredentials:w="same-origin",fetchOptions:E}=Fe(e),R=t||fetch;y=y?(y+"").toLowerCase():"text";let O=De([c,l&&l.toAbortSignal()],h),S=null;const T=O&&O.unsubscribe&&(()=>{O.unsubscribe()});let A;try{if(b&&u&&"get"!==i&&"head"!==i&&0!==(A=await p(g,a))){let e,t=new n(o,{method:"POST",body:a,duplex:"half"});if(J.isFormData(a)&&(e=t.headers.get("content-type"))&&g.setContentType(e),t.body){const[e,n]=Ce(A,ve(_e(b)));a=qe(t.body,65536,e,n)}}J.isString(w)||(w=w?"include":"omit");const t=s&&"credentials"in n.prototype,c={...E,signal:O,method:i.toUpperCase(),headers:g.normalize().toJSON(),body:a,duplex:"half",credentials:t?w:void 0};S=s&&new n(o,c);let l=await(s?R(S,E):R(o,c));const h=f&&("stream"===y||"response"===y);if(f&&(m||h&&T)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=l[t]});const t=J.toFiniteNumber(l.headers.get("content-length")),[n,o]=m&&Ce(t,ve(_e(m),!0))||[];l=new r(qe(l.body,65536,n,()=>{o&&o(),T&&T()}),e)}y=y||"text";let v=await d[J.findKey(d,y)||"text"](l,e);return!h&&T&&T(),await new Promise((t,n)=>{Ae(t,n,{data:v,headers:Re.from(l.headers),status:l.status,statusText:l.statusText,config:e,request:S})})}catch(t){if(T&&T(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new V("Network Error",V.ERR_NETWORK,e,S,t&&t.response),{cause:t.cause||t});throw V.from(t,t&&t.code,e,S,t&&t.response)}}},Ve=new Map,$e=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:o}=t,s=[r,o,n];let i,a,c=s.length,l=Ve;for(;c--;)i=s[c],a=l.get(i),void 0===a&&l.set(i,a=c?new Map:We(t)),l=a;return a};$e();const Ke={http:null,xhr:Le,fetch:{get:$e}};J.forEach(Ke,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const Xe=e=>`- ${e}`,Ge=e=>J.isFunction(e)||null===e||!1===e;const Qe={getAdapter:function(e,t){e=J.isArray(e)?e:[e];const{length:n}=e;let r,o;const s={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(Xe).join("\n"):" "+Xe(e[0]):"as no adapter specified";throw new V("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:Ke};function Ye(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Te(null,e)}function Ze(e){Ye(e),e.headers=Re.from(e.headers),e.data=Oe.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Qe.getAdapter(e.adapter||he.adapter,e)(e).then(function(t){return Ye(e),t.data=Oe.call(e,e.transformResponse,t),t.headers=Re.from(t.headers),t},function(t){return Se(t)||(Ye(e),t&&t.response&&(t.response.data=Oe.call(e,e.transformResponse,t.response),t.response.headers=Re.from(t.response.headers))),Promise.reject(t)})}const et="1.13.5",tt={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{tt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const nt={};tt.transitional=function(e,t,n){function r(e,t){return"[Axios v"+et+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,s)=>{if(!1===e)throw new V(r(o," has been removed"+(t?" in "+t:"")),V.ERR_DEPRECATED);return t&&!nt[o]&&(nt[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,s)}},tt.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};const rt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new V("options must be an object",V.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],i=t[s];if(i){const t=e[s],n=void 0===t||i(t,s,e);if(!0!==n)throw new V("option "+s+" must be "+n,V.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new V("Unknown option "+s,V.ERR_BAD_OPTION)}},validators:tt},ot=rt.validators;class st{constructor(e){this.defaults=e||{},this.interceptors={request:new re,response:new re}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Pe(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&rt.assertOptions(n,{silentJSONParsing:ot.transitional(ot.boolean),forcedJSONParsing:ot.transitional(ot.boolean),clarifyTimeoutError:ot.transitional(ot.boolean),legacyInterceptorReqResOrdering:ot.transitional(ot.boolean)},!1),null!=r&&(J.isFunction(r)?t.paramsSerializer={serialize:r}:rt.assertOptions(r,{encode:ot.function,serialize:ot.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),rt.assertOptions(t,{baseUrl:ot.spelling("baseURL"),withXsrfToken:ot.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=o&&J.merge(o.common,o[t.method]);o&&J.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=Re.concat(s,o);const i=[];let a=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;a=a&&e.synchronous;const n=t.transitional||oe;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const c=[];let l;this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let u,f=0;if(!a){const e=[Ze.bind(this),void 0];for(e.unshift(...i),e.push(...c),u=e.length,l=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new Te(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new at(function(t){e=t}),cancel:e}}}const ct=at;const lt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(lt).forEach(([e,t])=>{lt[t]=e});const ut=lt;const ft=function t(n){const r=new it(n),o=e(it.prototype.request,r);return J.extend(o,it.prototype,r,{allOwnKeys:!0}),J.extend(o,r,null,{allOwnKeys:!0}),o.create=function(e){return t(Pe(n,e))},o}(he);ft.Axios=it,ft.CanceledError=Te,ft.CancelToken=ct,ft.isCancel=Se,ft.VERSION=et,ft.toFormData=Q,ft.AxiosError=V,ft.Cancel=ft.CanceledError,ft.all=function(e){return Promise.all(e)},ft.spread=function(e){return function(t){return e.apply(null,t)}},ft.isAxiosError=function(e){return J.isObject(e)&&!0===e.isAxiosError},ft.mergeConfig=Pe,ft.AxiosHeaders=Re,ft.formToJSON=e=>de(J.isHTMLForm(e)?new FormData(e):e),ft.getAdapter=Qe.getAdapter,ft.HttpStatusCode=ut,ft.default=ft;const dt=ft,{Axios:pt,AxiosError:ht,CanceledError:mt,isCancel:bt,CancelToken:yt,VERSION:gt,all:wt,Cancel:Et,isAxiosError:Rt,spread:Ot,toFormData:St,AxiosHeaders:Tt,HttpStatusCode:At,formToJSON:vt,getAdapter:Ct,mergeConfig:_t}=dt;export{pt as Axios,ht as AxiosError,Tt as AxiosHeaders,Et as Cancel,yt as CancelToken,mt as CanceledError,At as HttpStatusCode,gt as VERSION,wt as all,dt as default,vt as formToJSON,Ct as getAdapter,Rt as isAxiosError,bt as isCancel,_t as mergeConfig,Ot as spread,St as toFormData}; +//# sourceMappingURL=axios.min.js.map diff --git a/node_modules/axios/dist/esm/axios.min.js.map b/node_modules/axios/dist/esm/axios.min.js.map new file mode 100644 index 00000000..217b0d5a --- /dev/null +++ b/node_modules/axios/dist/esm/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/browser/index.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/classes/Blob.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/core/buildFullPath.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/helpers/null.js","../../lib/core/dispatchRequest.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../index.js"],"sourcesContent":["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return (\n val !== null &&\n !isUndefined(val) &&\n val.constructor !== null &&\n !isUndefined(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(toStringTag in val) &&\n !(iterator in val)\n );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return (\n Object.keys(val).length === 0 &&\n Object.getPrototypeOf(val) === Object.prototype\n );\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n (isFunction(thing.append) &&\n ((kind = kindOf(thing)) === \"formdata\" ||\n // detect form-data instance\n (kind === \"object\" &&\n isFunction(thing.toString) &&\n thing.toString() === \"[object FormData]\"))))\n );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== \"object\") {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys\n ? Object.getOwnPropertyNames(obj)\n : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\"\n ? self\n : typeof window !== \"undefined\"\n ? window\n : global;\n})();\n\nconst isContextDefined = (context) =>\n !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n const result = {};\n const assignValue = (val, key) => {\n // Skip dangerous property names to prevent prototype pollution\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return;\n }\n\n const targetKey = (caseless && findKey(result, key)) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n forEach(\n b,\n (val, key) => {\n if (thisArg && isFunction(val)) {\n Object.defineProperty(a, key, {\n value: bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n Object.defineProperty(a, key, {\n value: val,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n },\n { allOwnKeys },\n );\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors,\n );\n Object.defineProperty(constructor.prototype, \"constructor\", {\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(constructor, \"super\", {\n value: superConstructor.prototype,\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n // eslint-disable-next-line func-names\n return (thing) => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n ({ hasOwnProperty }) =>\n (obj, prop) =>\n hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (\n isFunction(obj) &&\n [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n ) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if (\"writable\" in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach((value) => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString)\n ? define(arrayOrString)\n : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite((value = +value))\n ? value\n : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(\n thing &&\n isFunction(thing.append) &&\n thing[toStringTag] === \"FormData\" &&\n thing[iterator]\n );\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if (!(\"toJSON\" in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n thing &&\n (isObject(thing) || isFunction(thing)) &&\n isFunction(thing.then) &&\n isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported\n ? ((token, callbacks) => {\n _global.addEventListener(\n \"message\",\n ({ source, data }) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n },\n false,\n );\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n };\n })(`axios@${Math.random()}`, [])\n : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n typeof queueMicrotask !== \"undefined\"\n ? queueMicrotask.bind(_global)\n : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n static from(error, code, config, request, response, customProps) {\n const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n constructor(message, code, config, request, response) {\n super(message);\n this.name = 'AxiosError';\n this.isAxiosError = true;\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status;\n }\n }\n\n toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status,\n };\n }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n\n const _encode = options && options.encode || encode;\n\n const _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n\n const serializeFn = _options && _options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, _options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n constructor(message, config, request) {\n super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n this.__CANCEL__ = true;\n }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({ caseless }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) =>\n mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n };\n\n utils.forEach(\n Object.keys({ ...config1, ...config2 }),\n function computeConfigValue(prop) {\n if (\n prop === \"__proto__\" ||\n prop === \"constructor\" ||\n prop === \"prototype\"\n )\n return;\n const merge = utils.hasOwnProp(mergeMap, prop)\n ? mergeMap[prop]\n : mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n },\n );\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.5\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean),\n legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n const transitional = config.transitional || transitionalDefaults;\n const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n"],"names":["bind","fn","thisArg","apply","arguments","toString","Object","prototype","getPrototypeOf","iterator","toStringTag","Symbol","kindOf","cache","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isString","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","map","forEach","obj","allOwnKeys","i","l","length","keys","getOwnPropertyNames","len","key","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","isTypedArray","TypedArray","Uint8Array","isHTMLForm","hasOwnProperty","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","Math","random","callbacks","addEventListener","source","data","shift","cb","push","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","isFormData","kind","FormData","append","isArrayBufferView","result","ArrayBuffer","isView","buffer","isBoolean","isEmptyObject","e","isStream","pipe","merge","caseless","skipUndefined","this","assignValue","targetKey","extend","a","b","defineProperty","value","writable","enumerable","configurable","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","undefined","lastIndex","indexOf","toArray","arr","forEachEntry","_iterator","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","then","catch","isIterable","AxiosError","from","error","code","config","request","response","customProps","axiosError","message","cause","super","isAxiosError","status","toJSON","description","number","fileName","lineNumber","columnNumber","utils","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL","AxiosError$2","isVisitable","removeBrackets","renderKey","path","dots","concat","join","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","_encode","_options","serialize","serializeFn","serializedParams","hashmarkIndex","encoder","InterceptorManager$1","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","legacyInterceptorReqResOrdering","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","parseReviver","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","entry","get","tokens","tokensRE","parseTokens","has","matcher","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","getSetCookie","first","computed","accessor","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","buildAccessors","mapped","headerValue","AxiosHeaders$2","transformData","fns","isCancel","__CANCEL__","CanceledError$2","settle","resolve","reject","floor","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","bytes","timestamps","firstSampleTS","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","isMSIE","URL","protocol","host","port","userAgent","cookies","write","expires","domain","secure","sameSite","cookie","toUTCString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","xsrfValue","xhrAdapter","XMLHttpRequest","Promise","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","err","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","onerror","msg","ontimeout","timeoutErrorMessage","setRequestHeader","upload","cancel","CanceledError","abort","subscribe","aborted","parseProtocol","send","composeSignals$1","signals","Boolean","controller","AbortController","reason","streamChunk","chunk","chunkSize","byteLength","end","pos","readStream","async","stream","asyncIterator","reader","getReader","trackStream","onProgress","onFinish","iterable","readBytes","_onFinish","ReadableStream","pull","close","loadedBytes","enqueue","return","highWaterMark","globalFetchAPI","Request","Response","TextEncoder","factory","fetch","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","resolveBodyLength","getContentLength","size","_request","getBodyLength","fetchOptions","_fetch","composedSignal","composeSignals","toAbortSignal","requestContentLength","contentTypeHeader","flush","isCredentialsSupported","resolvedOptions","credentials","isStreamResponse","responseContentLength","responseData","seedCache","Map","getFetch","seeds","seed","knownAdapters","http","xhr","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapters","getAdapter","nameOrAdapter","rejectedReasons","reasons","state","s","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","captureStackTrace","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","Axios$2","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","c","CancelToken$2","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","WebServerIsDown","ConnectionTimedOut","OriginIsUnreachable","TimeoutOccurred","SslHandshakeFailed","InvalidSslCertificate","HttpStatusCode$2","axios","createInstance","defaultConfig","instance","Cancel","all","promises","spread","callback","payload","formToJSON","default","axios$1"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/node/axios.cjs b/node_modules/axios/dist/node/axios.cjs new file mode 100644 index 00000000..c7493f42 --- /dev/null +++ b/node_modules/axios/dist/node/axios.cjs @@ -0,0 +1,5315 @@ +/*! Axios v1.13.5 Copyright (c) 2026 Matt Zabriskie and contributors */ +'use strict'; + +const FormData$1 = require('form-data'); +const crypto = require('crypto'); +const url = require('url'); +const proxyFromEnv = require('proxy-from-env'); +const http = require('http'); +const https = require('https'); +const http2 = require('http2'); +const util = require('util'); +const followRedirects = require('follow-redirects'); +const zlib = require('zlib'); +const stream = require('stream'); +const events = require('events'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +const FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData$1); +const crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto); +const url__default = /*#__PURE__*/_interopDefaultLegacy(url); +const proxyFromEnv__default = /*#__PURE__*/_interopDefaultLegacy(proxyFromEnv); +const http__default = /*#__PURE__*/_interopDefaultLegacy(http); +const https__default = /*#__PURE__*/_interopDefaultLegacy(https); +const http2__default = /*#__PURE__*/_interopDefaultLegacy(http2); +const util__default = /*#__PURE__*/_interopDefaultLegacy(util); +const followRedirects__default = /*#__PURE__*/_interopDefaultLegacy(followRedirects); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); +const stream__default = /*#__PURE__*/_interopDefaultLegacy(stream); + +/** + * Create a bound version of a function with a specified `this` context + * + * @param {Function} fn - The function to bind + * @param {*} thisArg - The value to be passed as the `this` parameter + * @returns {Function} A new function that will call the original function with the specified `this` context + */ +function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} + +// utils is a library of generic helper functions non-specific to axios + +const { toString } = Object.prototype; +const { getPrototypeOf } = Object; +const { iterator, toStringTag } = Symbol; + +const kindOf = ((cache) => (thing) => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type; +}; + +const typeOfTest = (type) => (thing) => typeof thing === type; + +/** + * Determine if a value is a non-null object + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const { isArray } = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest("undefined"); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return ( + val !== null && + !isUndefined(val) && + val.constructor !== null && + !isUndefined(val.constructor) && + isFunction$1(val.constructor.isBuffer) && + val.constructor.isBuffer(val) + ); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest("ArrayBuffer"); + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val); + } else { + result = val && val.buffer && isArrayBuffer(val.buffer); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest("string"); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction$1 = typeOfTest("function"); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest("number"); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === "object"; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = (thing) => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== "object") { + return false; + } + + const prototype = getPrototypeOf(val); + return ( + (prototype === null || + prototype === Object.prototype || + Object.getPrototypeOf(prototype) === null) && + !(toStringTag in val) && + !(iterator in val) + ); +}; + +/** + * Determine if a value is an empty object (safely handles Buffers) + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an empty object, otherwise false + */ +const isEmptyObject = (val) => { + // Early return for non-objects or Buffers to prevent RangeError + if (!isObject(val) || isBuffer(val)) { + return false; + } + + try { + return ( + Object.keys(val).length === 0 && + Object.getPrototypeOf(val) === Object.prototype + ); + } catch (e) { + // Fallback for any other objects that might cause RangeError with Object.keys() + return false; + } +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest("Date"); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest("File"); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest("Blob"); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest("FileList"); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction$1(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return ( + thing && + ((typeof FormData === "function" && thing instanceof FormData) || + (isFunction$1(thing.append) && + ((kind = kindOf(thing)) === "formdata" || + // detect form-data instance + (kind === "object" && + isFunction$1(thing.toString) && + thing.toString() === "[object FormData]")))) + ); +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest("URLSearchParams"); + +const [isReadableStream, isRequest, isResponse, isHeaders] = [ + "ReadableStream", + "Request", + "Response", + "Headers", +].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => + str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, { allOwnKeys = false } = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === "undefined") { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== "object") { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Buffer check + if (isBuffer(obj)) { + return; + } + + // Iterate over object keys + const keys = allOwnKeys + ? Object.getOwnPropertyNames(obj) + : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + if (isBuffer(obj)) { + return null; + } + + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" + ? self + : typeof window !== "undefined" + ? window + : global; +})(); + +const isContextDefined = (context) => + !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * const result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const { caseless, skipUndefined } = (isContextDefined(this) && this) || {}; + const result = {}; + const assignValue = (val, key) => { + // Skip dangerous property names to prevent prototype pollution + if (key === "__proto__" || key === "constructor" || key === "prototype") { + return; + } + + const targetKey = (caseless && findKey(result, key)) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else if (!skipUndefined || !isUndefined(val)) { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, { allOwnKeys } = {}) => { + forEach( + b, + (val, key) => { + if (thisArg && isFunction$1(val)) { + Object.defineProperty(a, key, { + value: bind(val, thisArg), + writable: true, + enumerable: true, + configurable: true, + }); + } else { + Object.defineProperty(a, key, { + value: val, + writable: true, + enumerable: true, + configurable: true, + }); + } + }, + { allOwnKeys }, + ); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xfeff) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create( + superConstructor.prototype, + descriptors, + ); + Object.defineProperty(constructor.prototype, "constructor", { + value: constructor, + writable: true, + enumerable: false, + configurable: true, + }); + Object.defineProperty(constructor, "super", { + value: superConstructor.prototype, + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ( + (!propFilter || propFilter(prop, sourceObj, destObj)) && + !merged[prop] + ) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while ( + sourceObj && + (!filter || filter(sourceObj, destObj)) && + sourceObj !== Object.prototype + ); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = ((TypedArray) => { + // eslint-disable-next-line func-names + return (thing) => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest("HTMLFormElement"); + +const toCamelCase = (str) => { + return str + .toLowerCase() + .replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + }); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = ( + ({ hasOwnProperty }) => + (obj, prop) => + hasOwnProperty.call(obj, prop) +)(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest("RegExp"); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if ( + isFunction$1(obj) && + ["arguments", "caller", "callee"].indexOf(name) !== -1 + ) { + return false; + } + + const value = obj[name]; + + if (!isFunction$1(value)) return; + + descriptor.enumerable = false; + + if ("writable" in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error("Can not rewrite read-only method '" + name + "'"); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach((value) => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) + ? define(arrayOrString) + : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite((value = +value)) + ? value + : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!( + thing && + isFunction$1(thing.append) && + thing[toStringTag] === "FormData" && + thing[iterator] + ); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + //Buffer check + if (isBuffer(source)) { + return source; + } + + if (!("toJSON" in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest("AsyncFunction"); + +const isThenable = (thing) => + thing && + (isObject(thing) || isFunction$1(thing)) && + isFunction$1(thing.then) && + isFunction$1(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported + ? ((token, callbacks) => { + _global.addEventListener( + "message", + ({ source, data }) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, + false, + ); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + }; + })(`axios@${Math.random()}`, []) + : (cb) => setTimeout(cb); +})(typeof setImmediate === "function", isFunction$1(_global.postMessage)); + +const asap = + typeof queueMicrotask !== "undefined" + ? queueMicrotask.bind(_global) + : (typeof process !== "undefined" && process.nextTick) || _setImmediate; + +// ********************* + +const isIterable = (thing) => thing != null && isFunction$1(thing[iterator]); + +const utils$1 = { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isEmptyObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction: isFunction$1, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable, +}; + +class AxiosError extends Error { + static from(error, code, config, request, response, customProps) { + const axiosError = new AxiosError(error.message, code || error.code, config, request, response); + axiosError.cause = error; + axiosError.name = error.name; + customProps && Object.assign(axiosError, customProps); + return axiosError; + } + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + constructor(message, code, config, request, response) { + super(message); + this.name = 'AxiosError'; + this.isAxiosError = true; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status; + } + } + + toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status, + }; + } +} + +// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated. +AxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE'; +AxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION'; +AxiosError.ECONNABORTED = 'ECONNABORTED'; +AxiosError.ETIMEDOUT = 'ETIMEDOUT'; +AxiosError.ERR_NETWORK = 'ERR_NETWORK'; +AxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS'; +AxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED'; +AxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE'; +AxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST'; +AxiosError.ERR_CANCELED = 'ERR_CANCELED'; +AxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT'; +AxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL'; + +const AxiosError$1 = AxiosError; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData__default["default"] || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils$1.isDate(value)) { + return value.toISOString(); + } + + if (utils$1.isBoolean(value)) { + return value.toString(); + } + + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError$1('Blob is not supported. Use a Buffer instead.'); + } + + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils$1.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode$1(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +function buildURL(url, params, options) { + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + const _options = utils$1.isFunction(options) ? { + serialize: options + } : options; + + const serializeFn = _options && _options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, _options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, _options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * @param {Object} options The options for the interceptor, synchronous and runWhen + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {void} + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +const InterceptorManager$1 = InterceptorManager; + +const transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false, + legacyInterceptorReqResOrdering: true +}; + +const URLSearchParams = url__default["default"].URLSearchParams; + +const ALPHA = 'abcdefghijklmnopqrstuvwxyz'; + +const DIGIT = '0123456789'; + +const ALPHABET = { + DIGIT, + ALPHA, + ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT +}; + +const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { + let str = ''; + const {length} = alphabet; + const randomValues = new Uint32Array(size); + crypto__default["default"].randomFillSync(randomValues); + for (let i = 0; i < size; i++) { + str += alphabet[randomValues[i] % length]; + } + + return str; +}; + + +const platform$1 = { + isNode: true, + classes: { + URLSearchParams, + FormData: FormData__default["default"], + Blob: typeof Blob !== 'undefined' && Blob || null + }, + ALPHABET, + generateString, + protocols: [ 'http', 'https', 'file', 'data' ] +}; + +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +const utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin +}); + +const platform = { + ...utils, + ...platform$1 +}; + +function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), { + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + }, + ...options + }); +} + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + const obj = {}; + + utils$1.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils$1.isObject(data); + + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils$1.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) || + utils$1.isReadableStream(data) + ) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data, this.parseReviver); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +const defaults$1 = defaults; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils$1.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +const parseHeaders = rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils$1.isString(value)) return; + + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils$1.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils$1.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils$1.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders); + +const AxiosHeaders$1 = AxiosHeaders; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +function transformData(fns, response) { + const config = this || defaults$1; + const context = response || config; + const headers = AxiosHeaders$1.from(context.headers); + let data = context.data; + + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} + +function isCancel(value) { + return !!(value && value.__CANCEL__); +} + +class CanceledError extends AxiosError$1 { + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + constructor(message, config, request) { + super(message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request); + this.name = 'CanceledError'; + this.__CANCEL__ = true; + } +} + +const CanceledError$1 = CanceledError; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError$1( + 'Request failed with status code ' + response.status, + [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + if (typeof url !== 'string') { + return false; + } + + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} + +const VERSION = "1.13.5"; + +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} + +const DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/; + +/** + * Parse data uri to a Buffer or Blob + * + * @param {String} uri + * @param {?Boolean} asBlob + * @param {?Object} options + * @param {?Function} options.Blob + * + * @returns {Buffer|Blob} + */ +function fromDataURI(uri, asBlob, options) { + const _Blob = options && options.Blob || platform.classes.Blob; + const protocol = parseProtocol(uri); + + if (asBlob === undefined && _Blob) { + asBlob = true; + } + + if (protocol === 'data') { + uri = protocol.length ? uri.slice(protocol.length + 1) : uri; + + const match = DATA_URL_PATTERN.exec(uri); + + if (!match) { + throw new AxiosError$1('Invalid URL', AxiosError$1.ERR_INVALID_URL); + } + + const mime = match[1]; + const isBase64 = match[2]; + const body = match[3]; + const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8'); + + if (asBlob) { + if (!_Blob) { + throw new AxiosError$1('Blob is not supported', AxiosError$1.ERR_NOT_SUPPORT); + } + + return new _Blob([buffer], {type: mime}); + } + + return buffer; + } + + throw new AxiosError$1('Unsupported protocol ' + protocol, AxiosError$1.ERR_NOT_SUPPORT); +} + +const kInternals = Symbol('internals'); + +class AxiosTransformStream extends stream__default["default"].Transform{ + constructor(options) { + options = utils$1.toFlatObject(options, { + maxRate: 0, + chunkSize: 64 * 1024, + minChunkSize: 100, + timeWindow: 500, + ticksRate: 2, + samplesCount: 15 + }, null, (prop, source) => { + return !utils$1.isUndefined(source[prop]); + }); + + super({ + readableHighWaterMark: options.chunkSize + }); + + const internals = this[kInternals] = { + timeWindow: options.timeWindow, + chunkSize: options.chunkSize, + maxRate: options.maxRate, + minChunkSize: options.minChunkSize, + bytesSeen: 0, + isCaptured: false, + notifiedBytesLoaded: 0, + ts: Date.now(), + bytes: 0, + onReadCallback: null + }; + + this.on('newListener', event => { + if (event === 'progress') { + if (!internals.isCaptured) { + internals.isCaptured = true; + } + } + }); + } + + _read(size) { + const internals = this[kInternals]; + + if (internals.onReadCallback) { + internals.onReadCallback(); + } + + return super._read(size); + } + + _transform(chunk, encoding, callback) { + const internals = this[kInternals]; + const maxRate = internals.maxRate; + + const readableHighWaterMark = this.readableHighWaterMark; + + const timeWindow = internals.timeWindow; + + const divider = 1000 / timeWindow; + const bytesThreshold = (maxRate / divider); + const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0; + + const pushChunk = (_chunk, _callback) => { + const bytes = Buffer.byteLength(_chunk); + internals.bytesSeen += bytes; + internals.bytes += bytes; + + internals.isCaptured && this.emit('progress', internals.bytesSeen); + + if (this.push(_chunk)) { + process.nextTick(_callback); + } else { + internals.onReadCallback = () => { + internals.onReadCallback = null; + process.nextTick(_callback); + }; + } + }; + + const transformChunk = (_chunk, _callback) => { + const chunkSize = Buffer.byteLength(_chunk); + let chunkRemainder = null; + let maxChunkSize = readableHighWaterMark; + let bytesLeft; + let passed = 0; + + if (maxRate) { + const now = Date.now(); + + if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) { + internals.ts = now; + bytesLeft = bytesThreshold - internals.bytes; + internals.bytes = bytesLeft < 0 ? -bytesLeft : 0; + passed = 0; + } + + bytesLeft = bytesThreshold - internals.bytes; + } + + if (maxRate) { + if (bytesLeft <= 0) { + // next time window + return setTimeout(() => { + _callback(null, _chunk); + }, timeWindow - passed); + } + + if (bytesLeft < maxChunkSize) { + maxChunkSize = bytesLeft; + } + } + + if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) { + chunkRemainder = _chunk.subarray(maxChunkSize); + _chunk = _chunk.subarray(0, maxChunkSize); + } + + pushChunk(_chunk, chunkRemainder ? () => { + process.nextTick(_callback, null, chunkRemainder); + } : _callback); + }; + + transformChunk(chunk, function transformNextChunk(err, _chunk) { + if (err) { + return callback(err); + } + + if (_chunk) { + transformChunk(_chunk, transformNextChunk); + } else { + callback(null); + } + }); + } +} + +const AxiosTransformStream$1 = AxiosTransformStream; + +const {asyncIterator} = Symbol; + +const readBlob = async function* (blob) { + if (blob.stream) { + yield* blob.stream(); + } else if (blob.arrayBuffer) { + yield await blob.arrayBuffer(); + } else if (blob[asyncIterator]) { + yield* blob[asyncIterator](); + } else { + yield blob; + } +}; + +const readBlob$1 = readBlob; + +const BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_'; + +const textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util__default["default"].TextEncoder(); + +const CRLF = '\r\n'; +const CRLF_BYTES = textEncoder.encode(CRLF); +const CRLF_BYTES_COUNT = 2; + +class FormDataPart { + constructor(name, value) { + const {escapeName} = this.constructor; + const isStringValue = utils$1.isString(value); + + let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${ + !isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : '' + }${CRLF}`; + + if (isStringValue) { + value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF)); + } else { + headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}`; + } + + this.headers = textEncoder.encode(headers + CRLF); + + this.contentLength = isStringValue ? value.byteLength : value.size; + + this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT; + + this.name = name; + this.value = value; + } + + async *encode(){ + yield this.headers; + + const {value} = this; + + if(utils$1.isTypedArray(value)) { + yield value; + } else { + yield* readBlob$1(value); + } + + yield CRLF_BYTES; + } + + static escapeName(name) { + return String(name).replace(/[\r\n"]/g, (match) => ({ + '\r' : '%0D', + '\n' : '%0A', + '"' : '%22', + }[match])); + } +} + +const formDataToStream = (form, headersHandler, options) => { + const { + tag = 'form-data-boundary', + size = 25, + boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET) + } = options || {}; + + if(!utils$1.isFormData(form)) { + throw TypeError('FormData instance required'); + } + + if (boundary.length < 1 || boundary.length > 70) { + throw Error('boundary must be 10-70 characters long') + } + + const boundaryBytes = textEncoder.encode('--' + boundary + CRLF); + const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF); + let contentLength = footerBytes.byteLength; + + const parts = Array.from(form.entries()).map(([name, value]) => { + const part = new FormDataPart(name, value); + contentLength += part.size; + return part; + }); + + contentLength += boundaryBytes.byteLength * parts.length; + + contentLength = utils$1.toFiniteNumber(contentLength); + + const computedHeaders = { + 'Content-Type': `multipart/form-data; boundary=${boundary}` + }; + + if (Number.isFinite(contentLength)) { + computedHeaders['Content-Length'] = contentLength; + } + + headersHandler && headersHandler(computedHeaders); + + return stream.Readable.from((async function *() { + for(const part of parts) { + yield boundaryBytes; + yield* part.encode(); + } + + yield footerBytes; + })()); +}; + +const formDataToStream$1 = formDataToStream; + +class ZlibHeaderTransformStream extends stream__default["default"].Transform { + __transform(chunk, encoding, callback) { + this.push(chunk); + callback(); + } + + _transform(chunk, encoding, callback) { + if (chunk.length !== 0) { + this._transform = this.__transform; + + // Add Default Compression headers if no zlib headers are present + if (chunk[0] !== 120) { // Hex: 78 + const header = Buffer.alloc(2); + header[0] = 120; // Hex: 78 + header[1] = 156; // Hex: 9C + this.push(header, encoding); + } + } + + this.__transform(chunk, encoding, callback); + } +} + +const ZlibHeaderTransformStream$1 = ZlibHeaderTransformStream; + +const callbackify = (fn, reducer) => { + return utils$1.isAsyncFn(fn) ? function (...args) { + const cb = args.pop(); + fn.apply(this, args).then((value) => { + try { + reducer ? cb(null, ...reducer(value)) : cb(null, value); + } catch (err) { + cb(err); + } + }, cb); + } : fn; +}; + +const callbackify$1 = callbackify; + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn(...args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + +/** + * Estimate decoded byte length of a data:// URL *without* allocating large buffers. + * - For base64: compute exact decoded size using length and padding; + * handle %XX at the character-count level (no string allocation). + * - For non-base64: use UTF-8 byteLength of the encoded body as a safe upper bound. + * + * @param {string} url + * @returns {number} + */ +function estimateDataURLDecodedBytes(url) { + if (!url || typeof url !== 'string') return 0; + if (!url.startsWith('data:')) return 0; + + const comma = url.indexOf(','); + if (comma < 0) return 0; + + const meta = url.slice(5, comma); + const body = url.slice(comma + 1); + const isBase64 = /;base64/i.test(meta); + + if (isBase64) { + let effectiveLen = body.length; + const len = body.length; // cache length + + for (let i = 0; i < len; i++) { + if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) { + const a = body.charCodeAt(i + 1); + const b = body.charCodeAt(i + 2); + const isHex = + ((a >= 48 && a <= 57) || (a >= 65 && a <= 70) || (a >= 97 && a <= 102)) && + ((b >= 48 && b <= 57) || (b >= 65 && b <= 70) || (b >= 97 && b <= 102)); + + if (isHex) { + effectiveLen -= 2; + i += 2; + } + } + } + + let pad = 0; + let idx = len - 1; + + const tailIsPct3D = (j) => + j >= 2 && + body.charCodeAt(j - 2) === 37 && // '%' + body.charCodeAt(j - 1) === 51 && // '3' + (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100); // 'D' or 'd' + + if (idx >= 0) { + if (body.charCodeAt(idx) === 61 /* '=' */) { + pad++; + idx--; + } else if (tailIsPct3D(idx)) { + pad++; + idx -= 3; + } + } + + if (pad === 1 && idx >= 0) { + if (body.charCodeAt(idx) === 61 /* '=' */) { + pad++; + } else if (tailIsPct3D(idx)) { + pad++; + } + } + + const groups = Math.floor(effectiveLen / 4); + const bytes = groups * 3 - (pad || 0); + return bytes > 0 ? bytes : 0; + } + + return Buffer.byteLength(body, 'utf8'); +} + +const zlibOptions = { + flush: zlib__default["default"].constants.Z_SYNC_FLUSH, + finishFlush: zlib__default["default"].constants.Z_SYNC_FLUSH +}; + +const brotliOptions = { + flush: zlib__default["default"].constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib__default["default"].constants.BROTLI_OPERATION_FLUSH +}; + +const isBrotliSupported = utils$1.isFunction(zlib__default["default"].createBrotliDecompress); + +const {http: httpFollow, https: httpsFollow} = followRedirects__default["default"]; + +const isHttps = /https:?/; + +const supportedProtocols = platform.protocols.map(protocol => { + return protocol + ':'; +}); + + +const flushOnFinish = (stream, [throttled, flush]) => { + stream + .on('end', flush) + .on('error', flush); + + return throttled; +}; + +class Http2Sessions { + constructor() { + this.sessions = Object.create(null); + } + + getSession(authority, options) { + options = Object.assign({ + sessionTimeout: 1000 + }, options); + + let authoritySessions = this.sessions[authority]; + + if (authoritySessions) { + let len = authoritySessions.length; + + for (let i = 0; i < len; i++) { + const [sessionHandle, sessionOptions] = authoritySessions[i]; + if (!sessionHandle.destroyed && !sessionHandle.closed && util__default["default"].isDeepStrictEqual(sessionOptions, options)) { + return sessionHandle; + } + } + } + + const session = http2__default["default"].connect(authority, options); + + let removed; + + const removeSession = () => { + if (removed) { + return; + } + + removed = true; + + let entries = authoritySessions, len = entries.length, i = len; + + while (i--) { + if (entries[i][0] === session) { + if (len === 1) { + delete this.sessions[authority]; + } else { + entries.splice(i, 1); + } + return; + } + } + }; + + const originalRequestFn = session.request; + + const {sessionTimeout} = options; + + if(sessionTimeout != null) { + + let timer; + let streamsCount = 0; + + session.request = function () { + const stream = originalRequestFn.apply(this, arguments); + + streamsCount++; + + if (timer) { + clearTimeout(timer); + timer = null; + } + + stream.once('close', () => { + if (!--streamsCount) { + timer = setTimeout(() => { + timer = null; + removeSession(); + }, sessionTimeout); + } + }); + + return stream; + }; + } + + session.once('close', removeSession); + + let entry = [ + session, + options + ]; + + authoritySessions ? authoritySessions.push(entry) : authoritySessions = this.sessions[authority] = [entry]; + + return session; + } +} + +const http2Sessions = new Http2Sessions(); + + +/** + * If the proxy or config beforeRedirects functions are defined, call them with the options + * object. + * + * @param {Object} options - The options object that was passed to the request. + * + * @returns {Object} + */ +function dispatchBeforeRedirect(options, responseDetails) { + if (options.beforeRedirects.proxy) { + options.beforeRedirects.proxy(options); + } + if (options.beforeRedirects.config) { + options.beforeRedirects.config(options, responseDetails); + } +} + +/** + * If the proxy or config afterRedirects functions are defined, call them with the options + * + * @param {http.ClientRequestArgs} options + * @param {AxiosProxyConfig} configProxy configuration from Axios options object + * @param {string} location + * + * @returns {http.ClientRequestArgs} + */ +function setProxy(options, configProxy, location) { + let proxy = configProxy; + if (!proxy && proxy !== false) { + const proxyUrl = proxyFromEnv__default["default"].getProxyForUrl(location); + if (proxyUrl) { + proxy = new URL(proxyUrl); + } + } + if (proxy) { + // Basic proxy authorization + if (proxy.username) { + proxy.auth = (proxy.username || '') + ':' + (proxy.password || ''); + } + + if (proxy.auth) { + // Support proxy auth object form + const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password); + + if (validProxyAuth) { + proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || ''); + } else if (typeof proxy.auth === 'object') { + throw new AxiosError$1('Invalid proxy authorization', AxiosError$1.ERR_BAD_OPTION, { proxy }); + } + + const base64 = Buffer.from(proxy.auth, 'utf8').toString('base64'); + + options.headers['Proxy-Authorization'] = 'Basic ' + base64; + } + + options.headers.host = options.hostname + (options.port ? ':' + options.port : ''); + const proxyHost = proxy.hostname || proxy.host; + options.hostname = proxyHost; + // Replace 'host' since options is not a URL object + options.host = proxyHost; + options.port = proxy.port; + options.path = location; + if (proxy.protocol) { + options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`; + } + } + + options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) { + // Configure proxy for redirected request, passing the original config proxy to apply + // the exact same logic as if the redirected request was performed by axios directly. + setProxy(redirectOptions, configProxy, redirectOptions.href); + }; +} + +const isHttpAdapterSupported = typeof process !== 'undefined' && utils$1.kindOf(process) === 'process'; + +// temporary hotfix + +const wrapAsync = (asyncExecutor) => { + return new Promise((resolve, reject) => { + let onDone; + let isDone; + + const done = (value, isRejected) => { + if (isDone) return; + isDone = true; + onDone && onDone(value, isRejected); + }; + + const _resolve = (value) => { + done(value); + resolve(value); + }; + + const _reject = (reason) => { + done(reason, true); + reject(reason); + }; + + asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject); + }) +}; + +const resolveFamily = ({address, family}) => { + if (!utils$1.isString(address)) { + throw TypeError('address must be a string'); + } + return ({ + address, + family: family || (address.indexOf('.') < 0 ? 6 : 4) + }); +}; + +const buildAddressEntry = (address, family) => resolveFamily(utils$1.isObject(address) ? address : {address, family}); + +const http2Transport = { + request(options, cb) { + const authority = options.protocol + '//' + options.hostname + ':' + (options.port ||(options.protocol === 'https:' ? 443 : 80)); + + + const {http2Options, headers} = options; + + const session = http2Sessions.getSession(authority, http2Options); + + const { + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_STATUS + } = http2__default["default"].constants; + + const http2Headers = { + [HTTP2_HEADER_SCHEME]: options.protocol.replace(':', ''), + [HTTP2_HEADER_METHOD]: options.method, + [HTTP2_HEADER_PATH]: options.path, + }; + + utils$1.forEach(headers, (header, name) => { + name.charAt(0) !== ':' && (http2Headers[name] = header); + }); + + const req = session.request(http2Headers); + + req.once('response', (responseHeaders) => { + const response = req; //duplex + + responseHeaders = Object.assign({}, responseHeaders); + + const status = responseHeaders[HTTP2_HEADER_STATUS]; + + delete responseHeaders[HTTP2_HEADER_STATUS]; + + response.headers = responseHeaders; + + response.statusCode = +status; + + cb(response); + }); + + return req; + } +}; + +/*eslint consistent-return:0*/ +const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { + return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) { + let {data, lookup, family, httpVersion = 1, http2Options} = config; + const {responseType, responseEncoding} = config; + const method = config.method.toUpperCase(); + let isDone; + let rejected = false; + let req; + + httpVersion = +httpVersion; + + if (Number.isNaN(httpVersion)) { + throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`); + } + + if (httpVersion !== 1 && httpVersion !== 2) { + throw TypeError(`Unsupported protocol version '${httpVersion}'`); + } + + const isHttp2 = httpVersion === 2; + + if (lookup) { + const _lookup = callbackify$1(lookup, (value) => utils$1.isArray(value) ? value : [value]); + // hotfix to support opt.all option which is required for node 20.x + lookup = (hostname, opt, cb) => { + _lookup(hostname, opt, (err, arg0, arg1) => { + if (err) { + return cb(err); + } + + const addresses = utils$1.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)]; + + opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family); + }); + }; + } + + const abortEmitter = new events.EventEmitter(); + + function abort(reason) { + try { + abortEmitter.emit('abort', !reason || reason.type ? new CanceledError$1(null, config, req) : reason); + } catch(err) { + console.warn('emit error', err); + } + } + + abortEmitter.once('abort', reject); + + const onFinished = () => { + if (config.cancelToken) { + config.cancelToken.unsubscribe(abort); + } + + if (config.signal) { + config.signal.removeEventListener('abort', abort); + } + + abortEmitter.removeAllListeners(); + }; + + if (config.cancelToken || config.signal) { + config.cancelToken && config.cancelToken.subscribe(abort); + if (config.signal) { + config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort); + } + } + + onDone((response, isRejected) => { + isDone = true; + + if (isRejected) { + rejected = true; + onFinished(); + return; + } + + const {data} = response; + + if (data instanceof stream__default["default"].Readable || data instanceof stream__default["default"].Duplex) { + const offListeners = stream__default["default"].finished(data, () => { + offListeners(); + onFinished(); + }); + } else { + onFinished(); + } + }); + + + + + + // Parse url + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined); + const protocol = parsed.protocol || supportedProtocols[0]; + + if (protocol === 'data:') { + // Apply the same semantics as HTTP: only enforce if a finite, non-negative cap is set. + if (config.maxContentLength > -1) { + // Use the exact string passed to fromDataURI (config.url); fall back to fullPath if needed. + const dataUrl = String(config.url || fullPath || ''); + const estimated = estimateDataURLDecodedBytes(dataUrl); + + if (estimated > config.maxContentLength) { + return reject(new AxiosError$1( + 'maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError$1.ERR_BAD_RESPONSE, + config + )); + } + } + + let convertedData; + + if (method !== 'GET') { + return settle(resolve, reject, { + status: 405, + statusText: 'method not allowed', + headers: {}, + config + }); + } + + try { + convertedData = fromDataURI(config.url, responseType === 'blob', { + Blob: config.env && config.env.Blob + }); + } catch (err) { + throw AxiosError$1.from(err, AxiosError$1.ERR_BAD_REQUEST, config); + } + + if (responseType === 'text') { + convertedData = convertedData.toString(responseEncoding); + + if (!responseEncoding || responseEncoding === 'utf8') { + convertedData = utils$1.stripBOM(convertedData); + } + } else if (responseType === 'stream') { + convertedData = stream__default["default"].Readable.from(convertedData); + } + + return settle(resolve, reject, { + data: convertedData, + status: 200, + statusText: 'OK', + headers: new AxiosHeaders$1(), + config + }); + } + + if (supportedProtocols.indexOf(protocol) === -1) { + return reject(new AxiosError$1( + 'Unsupported protocol ' + protocol, + AxiosError$1.ERR_BAD_REQUEST, + config + )); + } + + const headers = AxiosHeaders$1.from(config.headers).normalize(); + + // Set User-Agent (required by some servers) + // See https://github.com/axios/axios/issues/69 + // User-Agent is specified; handle case where no UA header is desired + // Only set header if it hasn't been set in config + headers.set('User-Agent', 'axios/' + VERSION, false); + + const {onUploadProgress, onDownloadProgress} = config; + const maxRate = config.maxRate; + let maxUploadRate = undefined; + let maxDownloadRate = undefined; + + // support for spec compliant FormData objects + if (utils$1.isSpecCompliantForm(data)) { + const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i); + + data = formDataToStream$1(data, (formHeaders) => { + headers.set(formHeaders); + }, { + tag: `axios-${VERSION}-boundary`, + boundary: userBoundary && userBoundary[1] || undefined + }); + // support for https://www.npmjs.com/package/form-data api + } else if (utils$1.isFormData(data) && utils$1.isFunction(data.getHeaders)) { + headers.set(data.getHeaders()); + + if (!headers.hasContentLength()) { + try { + const knownLength = await util__default["default"].promisify(data.getLength).call(data); + Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength); + /*eslint no-empty:0*/ + } catch (e) { + } + } + } else if (utils$1.isBlob(data) || utils$1.isFile(data)) { + data.size && headers.setContentType(data.type || 'application/octet-stream'); + headers.setContentLength(data.size || 0); + data = stream__default["default"].Readable.from(readBlob$1(data)); + } else if (data && !utils$1.isStream(data)) { + if (Buffer.isBuffer(data)) ; else if (utils$1.isArrayBuffer(data)) { + data = Buffer.from(new Uint8Array(data)); + } else if (utils$1.isString(data)) { + data = Buffer.from(data, 'utf-8'); + } else { + return reject(new AxiosError$1( + 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', + AxiosError$1.ERR_BAD_REQUEST, + config + )); + } + + // Add Content-Length header if data exists + headers.setContentLength(data.length, false); + + if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { + return reject(new AxiosError$1( + 'Request body larger than maxBodyLength limit', + AxiosError$1.ERR_BAD_REQUEST, + config + )); + } + } + + const contentLength = utils$1.toFiniteNumber(headers.getContentLength()); + + if (utils$1.isArray(maxRate)) { + maxUploadRate = maxRate[0]; + maxDownloadRate = maxRate[1]; + } else { + maxUploadRate = maxDownloadRate = maxRate; + } + + if (data && (onUploadProgress || maxUploadRate)) { + if (!utils$1.isStream(data)) { + data = stream__default["default"].Readable.from(data, {objectMode: false}); + } + + data = stream__default["default"].pipeline([data, new AxiosTransformStream$1({ + maxRate: utils$1.toFiniteNumber(maxUploadRate) + })], utils$1.noop); + + onUploadProgress && data.on('progress', flushOnFinish( + data, + progressEventDecorator( + contentLength, + progressEventReducer(asyncDecorator(onUploadProgress), false, 3) + ) + )); + } + + // HTTP basic authentication + let auth = undefined; + if (config.auth) { + const username = config.auth.username || ''; + const password = config.auth.password || ''; + auth = username + ':' + password; + } + + if (!auth && parsed.username) { + const urlUsername = parsed.username; + const urlPassword = parsed.password; + auth = urlUsername + ':' + urlPassword; + } + + auth && headers.delete('authorization'); + + let path; + + try { + path = buildURL( + parsed.pathname + parsed.search, + config.params, + config.paramsSerializer + ).replace(/^\?/, ''); + } catch (err) { + const customErr = new Error(err.message); + customErr.config = config; + customErr.url = config.url; + customErr.exists = true; + return reject(customErr); + } + + headers.set( + 'Accept-Encoding', + 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false + ); + + const options = { + path, + method: method, + headers: headers.toJSON(), + agents: { http: config.httpAgent, https: config.httpsAgent }, + auth, + protocol, + family, + beforeRedirect: dispatchBeforeRedirect, + beforeRedirects: {}, + http2Options + }; + + // cacheable-lookup integration hotfix + !utils$1.isUndefined(lookup) && (options.lookup = lookup); + + if (config.socketPath) { + options.socketPath = config.socketPath; + } else { + options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname; + options.port = parsed.port; + setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); + } + + let transport; + const isHttpsRequest = isHttps.test(options.protocol); + options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; + + if (isHttp2) { + transport = http2Transport; + } else { + if (config.transport) { + transport = config.transport; + } else if (config.maxRedirects === 0) { + transport = isHttpsRequest ? https__default["default"] : http__default["default"]; + } else { + if (config.maxRedirects) { + options.maxRedirects = config.maxRedirects; + } + if (config.beforeRedirect) { + options.beforeRedirects.config = config.beforeRedirect; + } + transport = isHttpsRequest ? httpsFollow : httpFollow; + } + } + + if (config.maxBodyLength > -1) { + options.maxBodyLength = config.maxBodyLength; + } else { + // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited + options.maxBodyLength = Infinity; + } + + if (config.insecureHTTPParser) { + options.insecureHTTPParser = config.insecureHTTPParser; + } + + // Create the request + req = transport.request(options, function handleResponse(res) { + if (req.destroyed) return; + + const streams = [res]; + + const responseLength = utils$1.toFiniteNumber(res.headers['content-length']); + + if (onDownloadProgress || maxDownloadRate) { + const transformStream = new AxiosTransformStream$1({ + maxRate: utils$1.toFiniteNumber(maxDownloadRate) + }); + + onDownloadProgress && transformStream.on('progress', flushOnFinish( + transformStream, + progressEventDecorator( + responseLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true, 3) + ) + )); + + streams.push(transformStream); + } + + // decompress the response body transparently if required + let responseStream = res; + + // return the last request in case of redirects + const lastRequest = res.req || req; + + // if decompress disabled we should not decompress + if (config.decompress !== false && res.headers['content-encoding']) { + // if no content, but headers still say that it is encoded, + // remove the header not confuse downstream operations + if (method === 'HEAD' || res.statusCode === 204) { + delete res.headers['content-encoding']; + } + + switch ((res.headers['content-encoding'] || '').toLowerCase()) { + /*eslint default-case:0*/ + case 'gzip': + case 'x-gzip': + case 'compress': + case 'x-compress': + // add the unzipper to the body stream processing pipeline + streams.push(zlib__default["default"].createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'deflate': + streams.push(new ZlibHeaderTransformStream$1()); + + // add the unzipper to the body stream processing pipeline + streams.push(zlib__default["default"].createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'br': + if (isBrotliSupported) { + streams.push(zlib__default["default"].createBrotliDecompress(brotliOptions)); + delete res.headers['content-encoding']; + } + } + } + + responseStream = streams.length > 1 ? stream__default["default"].pipeline(streams, utils$1.noop) : streams[0]; + + + + const response = { + status: res.statusCode, + statusText: res.statusMessage, + headers: new AxiosHeaders$1(res.headers), + config, + request: lastRequest + }; + + if (responseType === 'stream') { + response.data = responseStream; + settle(resolve, reject, response); + } else { + const responseBuffer = []; + let totalResponseBytes = 0; + + responseStream.on('data', function handleStreamData(chunk) { + responseBuffer.push(chunk); + totalResponseBytes += chunk.length; + + // make sure the content length is not over the maxContentLength if specified + if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { + // stream.destroy() emit aborted event before calling reject() on Node.js v16 + rejected = true; + responseStream.destroy(); + abort(new AxiosError$1('maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError$1.ERR_BAD_RESPONSE, config, lastRequest)); + } + }); + + responseStream.on('aborted', function handlerStreamAborted() { + if (rejected) { + return; + } + + const err = new AxiosError$1( + 'stream has been aborted', + AxiosError$1.ERR_BAD_RESPONSE, + config, + lastRequest + ); + responseStream.destroy(err); + reject(err); + }); + + responseStream.on('error', function handleStreamError(err) { + if (req.destroyed) return; + reject(AxiosError$1.from(err, null, config, lastRequest)); + }); + + responseStream.on('end', function handleStreamEnd() { + try { + let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); + if (responseType !== 'arraybuffer') { + responseData = responseData.toString(responseEncoding); + if (!responseEncoding || responseEncoding === 'utf8') { + responseData = utils$1.stripBOM(responseData); + } + } + response.data = responseData; + } catch (err) { + return reject(AxiosError$1.from(err, null, config, response.request, response)); + } + settle(resolve, reject, response); + }); + } + + abortEmitter.once('abort', err => { + if (!responseStream.destroyed) { + responseStream.emit('error', err); + responseStream.destroy(); + } + }); + }); + + abortEmitter.once('abort', err => { + if (req.close) { + req.close(); + } else { + req.destroy(err); + } + }); + + // Handle errors + req.on('error', function handleRequestError(err) { + reject(AxiosError$1.from(err, null, config, req)); + }); + + // set tcp keep alive to prevent drop connection by peer + req.on('socket', function handleRequestSocket(socket) { + // default interval of sending ack packet is 1 minute + socket.setKeepAlive(true, 1000 * 60); + }); + + // Handle request timeout + if (config.timeout) { + // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. + const timeout = parseInt(config.timeout, 10); + + if (Number.isNaN(timeout)) { + abort(new AxiosError$1( + 'error trying to parse `config.timeout` to int', + AxiosError$1.ERR_BAD_OPTION_VALUE, + config, + req + )); + + return; + } + + // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. + // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. + // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. + // And then these socket which be hang up will devouring CPU little by little. + // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. + req.setTimeout(timeout, function handleRequestTimeout() { + if (isDone) return; + let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + abort(new AxiosError$1( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, + config, + req + )); + }); + } else { + // explicitly reset the socket timeout value for a possible `keep-alive` request + req.setTimeout(0); + } + + + // Send the request + if (utils$1.isStream(data)) { + let ended = false; + let errored = false; + + data.on('end', () => { + ended = true; + }); + + data.once('error', err => { + errored = true; + req.destroy(err); + }); + + data.on('close', () => { + if (!ended && !errored) { + abort(new CanceledError$1('Request stream has been aborted', config, req)); + } + }); + + data.pipe(req); + } else { + data && req.write(data); + req.end(); + } + }); +}; + +const isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; + +const cookies = platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure, sameSite) { + if (typeof document === 'undefined') return; + + const cookie = [`${name}=${encodeURIComponent(value)}`]; + + if (utils$1.isNumber(expires)) { + cookie.push(`expires=${new Date(expires).toUTCString()}`); + } + if (utils$1.isString(path)) { + cookie.push(`path=${path}`); + } + if (utils$1.isString(domain)) { + cookie.push(`domain=${domain}`); + } + if (secure === true) { + cookie.push('secure'); + } + if (utils$1.isString(sameSite)) { + cookie.push(`SameSite=${sameSite}`); + } + + document.cookie = cookie.join('; '); + }, + + read(name) { + if (typeof document === 'undefined') return null; + const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); + return match ? decodeURIComponent(match[1]) : null; + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000, '/'); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +const headersToObject = (thing) => + thing instanceof AxiosHeaders$1 ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({ caseless }, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + function mergeDeepProperties(a, b, prop, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop, caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b, prop) => + mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true), + }; + + utils$1.forEach( + Object.keys({ ...config1, ...config2 }), + function computeConfigValue(prop) { + if ( + prop === "__proto__" || + prop === "constructor" || + prop === "prototype" + ) + return; + const merge = utils$1.hasOwnProp(mergeMap, prop) + ? mergeMap[prop] + : mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || + (config[prop] = configValue); + }, + ); + + return config; +} + +const resolveConfig = (config) => { + const newConfig = mergeConfig({}, config); + + let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig; + + newConfig.headers = headers = AxiosHeaders$1.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // browser handles it + } else if (utils$1.isFunction(data.getHeaders)) { + // Node.js FormData (like form-data package) + const formHeaders = data.getHeaders(); + // Only set safe headers to avoid overwriting security headers + const allowedHeaders = ['content-type', 'content-length']; + Object.entries(formHeaders).forEach(([key, val]) => { + if (allowedHeaders.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +const xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders$1.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError(event) { + // Browsers deliver a ProgressEvent in XHR onerror + // (message may be empty; when present, surface it) + // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event + const msg = event && event.message ? event.message : 'Network Error'; + const err = new AxiosError$1(msg, AxiosError$1.ERR_NETWORK, config, request); + // attach the underlying event for consumers who want details + err.event = event || null; + reject(err); + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError$1( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +}; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError$1(`timeout of ${timeout}ms exceeded`, AxiosError$1.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +const composeSignals$1 = composeSignals; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const {isFunction} = utils$1; + +const globalFetchAPI = (({Request, Response}) => ({ + Request, Response +}))(utils$1.global); + +const { + ReadableStream: ReadableStream$1, TextEncoder: TextEncoder$1 +} = utils$1.global; + + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const factory = (env) => { + env = utils$1.merge.call({ + skipUndefined: true + }, globalFetchAPI, env); + + const {fetch: envFetch, Request, Response} = env; + const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function'; + const isRequestSupported = isFunction(Request); + const isResponseSupported = isFunction(Response); + + if (!isFetchSupported) { + return false; + } + + const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream$1); + + const encodeText = isFetchSupported && (typeof TextEncoder$1 === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder$1()) : + async (str) => new Uint8Array(await new Request(str).arrayBuffer()) + ); + + const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream$1(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; + }); + + const supportsResponseStream = isResponseSupported && isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + const resolvers = { + stream: supportsResponseStream && ((res) => res.body) + }; + + isFetchSupported && ((() => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = (res, config) => { + let method = res && res[type]; + + if (method) { + return method.call(res); + } + + throw new AxiosError$1(`Response type '${type}' is not supported`, AxiosError$1.ERR_NOT_SUPPORT, config); + }); + }); + })()); + + const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if (utils$1.isBlob(body)) { + return body.size; + } + + if (utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if (utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if (utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if (utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } + }; + + const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; + }; + + return async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + let _fetch = envFetch || fetch; + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request = null; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype; + + const resolvedOptions = { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }; + + request = isRequestSupported && new Request(url, resolvedOptions); + + let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions)); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request, err && err.response), + { + cause: err.cause || err + } + ) + } + + throw AxiosError$1.from(err, err && err.code, config, request, err && err.response); + } + } +}; + +const seedCache = new Map(); + +const getFetch = (config) => { + let env = (config && config.env) || {}; + const {fetch, Request, Response} = env; + const seeds = [ + Request, Response, fetch + ]; + + let len = seeds.length, i = len, + seed, target, map = seedCache; + + while (i--) { + seed = seeds[i]; + target = map.get(seed); + + target === undefined && map.set(seed, target = (i ? new Map() : factory(env))); + + map = target; + } + + return target; +}; + +getFetch(); + +/** + * Known adapters mapping. + * Provides environment-specific adapters for Axios: + * - `http` for Node.js + * - `xhr` for browsers + * - `fetch` for fetch API-based requests + * + * @type {Object} + */ +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: { + get: getFetch, + } +}; + +// Assign adapter names for easier debugging and identification +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', { value }); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', { value }); + } +}); + +/** + * Render a rejection reason string for unknown or unsupported adapters + * + * @param {string} reason + * @returns {string} + */ +const renderReason = (reason) => `- ${reason}`; + +/** + * Check if the adapter is resolved (function, null, or false) + * + * @param {Function|null|false} adapter + * @returns {boolean} + */ +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + +/** + * Get the first suitable adapter from the provided list. + * Tries each adapter in order until a supported one is found. + * Throws an AxiosError if no adapter is suitable. + * + * @param {Array|string|Function} adapters - Adapter(s) by name or function. + * @param {Object} config - Axios request configuration + * @throws {AxiosError} If no suitable adapter is available + * @returns {Function} The resolved adapter function + */ +function getAdapter(adapters, config) { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + + const { length } = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError$1(`Unknown adapter '${id}'`); + } + } + + if (adapter && (utils$1.isFunction(adapter) || (adapter = adapter.get(config)))) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError$1( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; +} + +/** + * Exports Axios adapters and utility to resolve an adapter + */ +const adapters = { + /** + * Resolve an adapter from a list of adapter names or functions. + * @type {Function} + */ + getAdapter, + + /** + * Exposes all known adapters + * @type {Object} + */ + adapters: knownAdapters +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError$1(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders$1.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter, config); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders$1.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders$1.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} + +const validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError$1( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError$1.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators$1.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION); + } + } +} + +const validator = { + assertOptions, + validators: validators$1 +}; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean), + legacyInterceptorReqResOrdering: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils$1.merge( + headers.common, + headers[config.method] + ); + + headers && utils$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders$1.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + const transitional = config.transitional || transitionalDefaults; + const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering; + + if (legacyInterceptorReqResOrdering) { + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + } else { + requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + } + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift(...requestInterceptorChain); + chain.push(...responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +const Axios$1 = Axios; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError$1(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +const CancelToken$1 = CancelToken; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * const args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +function isAxiosError(payload) { + return utils$1.isObject(payload) && (payload.isAxiosError === true); +} + +const HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, + WebServerIsDown: 521, + ConnectionTimedOut: 522, + OriginIsUnreachable: 523, + TimeoutOccurred: 524, + SslHandshakeFailed: 525, + InvalidSslCertificate: 526, +}; + +Object.entries(HttpStatusCode).forEach(([key, value]) => { + HttpStatusCode[value] = key; +}); + +const HttpStatusCode$1 = HttpStatusCode; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios$1(defaultConfig); + const instance = bind(Axios$1.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils$1.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults$1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios$1; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError$1; +axios.CancelToken = CancelToken$1; +axios.isCancel = isCancel; +axios.VERSION = VERSION; +axios.toFormData = toFormData; + +// Expose AxiosError class +axios.AxiosError = AxiosError$1; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig; + +axios.AxiosHeaders = AxiosHeaders$1; + +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode$1; + +axios.default = axios; + +module.exports = axios; +//# sourceMappingURL=axios.cjs.map diff --git a/node_modules/axios/dist/node/axios.cjs.map b/node_modules/axios/dist/node/axios.cjs.map new file mode 100644 index 00000000..625adab6 --- /dev/null +++ b/node_modules/axios/dist/node/axios.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.cjs","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/node/classes/URLSearchParams.js","../../lib/platform/node/index.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/env/data.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/fromDataURI.js","../../lib/helpers/AxiosTransformStream.js","../../lib/helpers/readBlob.js","../../lib/helpers/formDataToStream.js","../../lib/helpers/ZlibHeaderTransformStream.js","../../lib/helpers/callbackify.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/estimateDataURLDecodedBytes.js","../../lib/adapters/http.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/core/dispatchRequest.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js"],"sourcesContent":["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return (\n val !== null &&\n !isUndefined(val) &&\n val.constructor !== null &&\n !isUndefined(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(toStringTag in val) &&\n !(iterator in val)\n );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return (\n Object.keys(val).length === 0 &&\n Object.getPrototypeOf(val) === Object.prototype\n );\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n (isFunction(thing.append) &&\n ((kind = kindOf(thing)) === \"formdata\" ||\n // detect form-data instance\n (kind === \"object\" &&\n isFunction(thing.toString) &&\n thing.toString() === \"[object FormData]\"))))\n );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== \"object\") {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys\n ? Object.getOwnPropertyNames(obj)\n : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\"\n ? self\n : typeof window !== \"undefined\"\n ? window\n : global;\n})();\n\nconst isContextDefined = (context) =>\n !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n const result = {};\n const assignValue = (val, key) => {\n // Skip dangerous property names to prevent prototype pollution\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return;\n }\n\n const targetKey = (caseless && findKey(result, key)) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n forEach(\n b,\n (val, key) => {\n if (thisArg && isFunction(val)) {\n Object.defineProperty(a, key, {\n value: bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n Object.defineProperty(a, key, {\n value: val,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n },\n { allOwnKeys },\n );\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors,\n );\n Object.defineProperty(constructor.prototype, \"constructor\", {\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(constructor, \"super\", {\n value: superConstructor.prototype,\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n // eslint-disable-next-line func-names\n return (thing) => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n ({ hasOwnProperty }) =>\n (obj, prop) =>\n hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (\n isFunction(obj) &&\n [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n ) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if (\"writable\" in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach((value) => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString)\n ? define(arrayOrString)\n : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite((value = +value))\n ? value\n : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(\n thing &&\n isFunction(thing.append) &&\n thing[toStringTag] === \"FormData\" &&\n thing[iterator]\n );\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if (!(\"toJSON\" in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n thing &&\n (isObject(thing) || isFunction(thing)) &&\n isFunction(thing.then) &&\n isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported\n ? ((token, callbacks) => {\n _global.addEventListener(\n \"message\",\n ({ source, data }) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n },\n false,\n );\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n };\n })(`axios@${Math.random()}`, [])\n : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n typeof queueMicrotask !== \"undefined\"\n ? queueMicrotask.bind(_global)\n : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n static from(error, code, config, request, response, customProps) {\n const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n constructor(message, code, config, request, response) {\n super(message);\n this.name = 'AxiosError';\n this.isAxiosError = true;\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status;\n }\n }\n\n toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status,\n };\n }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n\n const _encode = options && options.encode || encode;\n\n const _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n\n const serializeFn = _options && _options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, _options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n};\n","'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n","import crypto from 'crypto';\nimport URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n const randomValues = new Uint32Array(size);\n crypto.randomFillSync(randomValues);\n for (let i = 0; i < size; i++) {\n str += alphabet[randomValues[i] % length];\n }\n\n return str;\n}\n\n\nexport default {\n isNode: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n ALPHABET,\n generateString,\n protocols: [ 'http', 'https', 'file', 'data' ]\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n constructor(message, config, request) {\n super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n this.__CANCEL__ = true;\n }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","export const VERSION = \"1.13.5\";","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || platform.classes.Blob;\n const protocol = parseProtocol(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n","'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform{\n constructor(options) {\n options = utils.toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !utils.isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const internals = this[kInternals] = {\n timeWindow: options.timeWindow,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n const pushChunk = (_chunk, _callback) => {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n internals.isCaptured && this.emit('progress', internals.bytesSeen);\n\n if (this.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n}\n\nexport default AxiosTransformStream;\n","const {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\nexport default readBlob;\n","import util from 'util';\nimport {Readable} from 'stream';\nimport utils from \"../utils.js\";\nimport readBlob from \"./readBlob.js\";\nimport platform from \"../platform/index.js\";\n\nconst BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = utils.isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(utils.isTypedArray(value)) {\n yield value;\n } else {\n yield* readBlob(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!utils.isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = utils.toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\nexport default formDataToStream;\n","\"use strict\";\n\nimport stream from \"stream\";\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\nexport default ZlibHeaderTransformStream;\n","import utils from \"../utils.js\";\n\nconst callbackify = (fn, reducer) => {\n return utils.isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\nexport default callbackify;\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","/**\n * Estimate decoded byte length of a data:// URL *without* allocating large buffers.\n * - For base64: compute exact decoded size using length and padding;\n * handle %XX at the character-count level (no string allocation).\n * - For non-base64: use UTF-8 byteLength of the encoded body as a safe upper bound.\n *\n * @param {string} url\n * @returns {number}\n */\nexport default function estimateDataURLDecodedBytes(url) {\n if (!url || typeof url !== 'string') return 0;\n if (!url.startsWith('data:')) return 0;\n\n const comma = url.indexOf(',');\n if (comma < 0) return 0;\n\n const meta = url.slice(5, comma);\n const body = url.slice(comma + 1);\n const isBase64 = /;base64/i.test(meta);\n\n if (isBase64) {\n let effectiveLen = body.length;\n const len = body.length; // cache length\n\n for (let i = 0; i < len; i++) {\n if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) {\n const a = body.charCodeAt(i + 1);\n const b = body.charCodeAt(i + 2);\n const isHex =\n ((a >= 48 && a <= 57) || (a >= 65 && a <= 70) || (a >= 97 && a <= 102)) &&\n ((b >= 48 && b <= 57) || (b >= 65 && b <= 70) || (b >= 97 && b <= 102));\n\n if (isHex) {\n effectiveLen -= 2;\n i += 2;\n }\n }\n }\n\n let pad = 0;\n let idx = len - 1;\n\n const tailIsPct3D = (j) =>\n j >= 2 &&\n body.charCodeAt(j - 2) === 37 && // '%'\n body.charCodeAt(j - 1) === 51 && // '3'\n (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100); // 'D' or 'd'\n\n if (idx >= 0) {\n if (body.charCodeAt(idx) === 61 /* '=' */) {\n pad++;\n idx--;\n } else if (tailIsPct3D(idx)) {\n pad++;\n idx -= 3;\n }\n }\n\n if (pad === 1 && idx >= 0) {\n if (body.charCodeAt(idx) === 61 /* '=' */) {\n pad++;\n } else if (tailIsPct3D(idx)) {\n pad++;\n }\n }\n\n const groups = Math.floor(effectiveLen / 4);\n const bytes = groups * 3 - (pad || 0);\n return bytes > 0 ? bytes : 0;\n }\n\n return Buffer.byteLength(body, 'utf8');\n}\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from '../helpers/buildURL.js';\nimport proxyFromEnv from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport http2 from 'http2';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport {VERSION} from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport {EventEmitter} from 'events';\nimport formDataToStream from \"../helpers/formDataToStream.js\";\nimport readBlob from \"../helpers/readBlob.js\";\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from \"../helpers/callbackify.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';\n\nconst zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map(protocol => {\n return protocol + ':';\n});\n\n\nconst flushOnFinish = (stream, [throttled, flush]) => {\n stream\n .on('end', flush)\n .on('error', flush);\n\n return throttled;\n}\n\nclass Http2Sessions {\n constructor() {\n this.sessions = Object.create(null);\n }\n\n getSession(authority, options) {\n options = Object.assign({\n sessionTimeout: 1000\n }, options);\n\n let authoritySessions = this.sessions[authority];\n\n if (authoritySessions) {\n let len = authoritySessions.length;\n\n for (let i = 0; i < len; i++) {\n const [sessionHandle, sessionOptions] = authoritySessions[i];\n if (!sessionHandle.destroyed && !sessionHandle.closed && util.isDeepStrictEqual(sessionOptions, options)) {\n return sessionHandle;\n }\n }\n }\n\n const session = http2.connect(authority, options);\n\n let removed;\n\n const removeSession = () => {\n if (removed) {\n return;\n }\n\n removed = true;\n\n let entries = authoritySessions, len = entries.length, i = len;\n\n while (i--) {\n if (entries[i][0] === session) {\n if (len === 1) {\n delete this.sessions[authority];\n } else {\n entries.splice(i, 1);\n }\n return;\n }\n }\n };\n\n const originalRequestFn = session.request;\n\n const {sessionTimeout} = options;\n\n if(sessionTimeout != null) {\n\n let timer;\n let streamsCount = 0;\n\n session.request = function () {\n const stream = originalRequestFn.apply(this, arguments);\n\n streamsCount++;\n\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n\n stream.once('close', () => {\n if (!--streamsCount) {\n timer = setTimeout(() => {\n timer = null;\n removeSession();\n }, sessionTimeout);\n }\n });\n\n return stream;\n }\n }\n\n session.once('close', removeSession);\n\n let entry = [\n session,\n options\n ];\n\n authoritySessions ? authoritySessions.push(entry) : authoritySessions = this.sessions[authority] = [entry];\n\n return session;\n }\n}\n\nconst http2Sessions = new Http2Sessions();\n\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object} options - The options object that was passed to the request.\n *\n * @returns {Object}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = proxyFromEnv.getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password);\n\n if (validProxyAuth) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n } else if (typeof proxy.auth === 'object') {\n throw new AxiosError('Invalid proxy authorization', AxiosError.ERR_BAD_OPTION, { proxy });\n }\n\n const base64 = Buffer.from(proxy.auth, 'utf8').toString('base64');\n\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!utils.isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});\n\nconst http2Transport = {\n request(options, cb) {\n const authority = options.protocol + '//' + options.hostname + ':' + (options.port ||(options.protocol === 'https:' ? 443 : 80));\n\n\n const {http2Options, headers} = options;\n\n const session = http2Sessions.getSession(authority, http2Options);\n\n const {\n HTTP2_HEADER_SCHEME,\n HTTP2_HEADER_METHOD,\n HTTP2_HEADER_PATH,\n HTTP2_HEADER_STATUS\n } = http2.constants;\n\n const http2Headers = {\n [HTTP2_HEADER_SCHEME]: options.protocol.replace(':', ''),\n [HTTP2_HEADER_METHOD]: options.method,\n [HTTP2_HEADER_PATH]: options.path,\n }\n\n utils.forEach(headers, (header, name) => {\n name.charAt(0) !== ':' && (http2Headers[name] = header);\n });\n\n const req = session.request(http2Headers);\n\n req.once('response', (responseHeaders) => {\n const response = req; //duplex\n\n responseHeaders = Object.assign({}, responseHeaders);\n\n const status = responseHeaders[HTTP2_HEADER_STATUS];\n\n delete responseHeaders[HTTP2_HEADER_STATUS];\n\n response.headers = responseHeaders;\n\n response.statusCode = +status;\n\n cb(response);\n })\n\n return req;\n }\n}\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family, httpVersion = 1, http2Options} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n httpVersion = +httpVersion;\n\n if (Number.isNaN(httpVersion)) {\n throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`);\n }\n\n if (httpVersion !== 1 && httpVersion !== 2) {\n throw TypeError(`Unsupported protocol version '${httpVersion}'`);\n }\n\n const isHttp2 = httpVersion === 2;\n\n if (lookup) {\n const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n const abortEmitter = new EventEmitter();\n\n function abort(reason) {\n try {\n abortEmitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);\n } catch(err) {\n console.warn('emit error', err);\n }\n }\n\n abortEmitter.once('abort', reject);\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n abortEmitter.removeAllListeners();\n }\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n onDone((response, isRejected) => {\n isDone = true;\n\n if (isRejected) {\n rejected = true;\n onFinished();\n return;\n }\n\n const {data} = response;\n\n if (data instanceof stream.Readable || data instanceof stream.Duplex) {\n const offListeners = stream.finished(data, () => {\n offListeners();\n onFinished();\n });\n } else {\n onFinished();\n }\n });\n\n\n\n\n\n // Parse url\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined);\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n // Apply the same semantics as HTTP: only enforce if a finite, non-negative cap is set.\n if (config.maxContentLength > -1) {\n // Use the exact string passed to fromDataURI (config.url); fall back to fullPath if needed.\n const dataUrl = String(config.url || fullPath || '');\n const estimated = estimateDataURLDecodedBytes(dataUrl);\n\n if (estimated > config.maxContentLength) {\n return reject(new AxiosError(\n 'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE,\n config\n ));\n }\n }\n\n let convertedData;\n\n if (method !== 'GET') {\n return settle(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = fromDataURI(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = utils.stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream.Readable.from(convertedData);\n }\n\n return settle(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new AxiosHeaders(),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = AxiosHeaders.from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + VERSION, false);\n\n const {onUploadProgress, onDownloadProgress} = config;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (utils.isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = formDataToStream(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (utils.isBlob(data) || utils.isFile(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream.Readable.from(readBlob(data));\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n if (utils.isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!utils.isStream(data)) {\n data = stream.Readable.from(data, {objectMode: false});\n }\n\n data = stream.pipeline([data, new AxiosTransformStream({\n maxRate: utils.toFiniteNumber(maxUploadRate)\n })], utils.noop);\n\n onUploadProgress && data.on('progress', flushOnFinish(\n data,\n progressEventDecorator(\n contentLength,\n progressEventReducer(asyncDecorator(onUploadProgress), false, 3)\n )\n ));\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = buildURL(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {},\n http2Options\n };\n\n // cacheable-lookup integration hotfix\n !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname.startsWith(\"[\") ? parsed.hostname.slice(1, -1) : parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n if (isHttp2) {\n transport = http2Transport;\n } else {\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = utils.toFiniteNumber(res.headers['content-length']);\n\n if (onDownloadProgress || maxDownloadRate) {\n const transformStream = new AxiosTransformStream({\n maxRate: utils.toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', flushOnFinish(\n transformStream,\n progressEventDecorator(\n responseLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)\n )\n ));\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new ZlibHeaderTransformStream());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new AxiosHeaders(res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n settle(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n abort(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new AxiosError(\n 'stream has been aborted',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n\n abortEmitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n abortEmitter.once('abort', err => {\n if (req.close) {\n req.close();\n } else {\n req.destroy(err);\n }\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n abort(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n abort(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n req\n ));\n });\n } else {\n // explicitly reset the socket timeout value for a possible `keep-alive` request\n req.setTimeout(0);\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new CanceledError('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n data && req.write(data);\n req.end();\n }\n });\n}\n\nexport const __setProxy = setProxy;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({ caseless }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) =>\n mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n };\n\n utils.forEach(\n Object.keys({ ...config1, ...config2 }),\n function computeConfigValue(prop) {\n if (\n prop === \"__proto__\" ||\n prop === \"constructor\" ||\n prop === \"prototype\"\n )\n return;\n const merge = utils.hasOwnProp(mergeMap, prop)\n ? mergeMap[prop]\n : mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n },\n );\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean),\n legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n const transitional = config.transitional || transitionalDefaults;\n const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["isFunction","utils","PlatformFormData","AxiosError","encode","url","crypto","FormData","platform","defaults","AxiosHeaders","stream","util","readBlob","Readable","zlib","followRedirects","http2","proxyFromEnv","callbackify","EventEmitter","CanceledError","formDataToStream","AxiosTransformStream","https","http","ZlibHeaderTransformStream","ReadableStream","TextEncoder","composeSignals","fetchAdapter.getFetch","validators","InterceptorManager","Axios","CancelToken","HttpStatusCode"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/index.d.cts b/node_modules/axios/index.d.cts new file mode 100644 index 00000000..7a4eff94 --- /dev/null +++ b/node_modules/axios/index.d.cts @@ -0,0 +1,591 @@ +interface RawAxiosHeaders { + [key: string]: axios.AxiosHeaderValue; +} + +type MethodsHeaders = Partial<{ + [Key in axios.Method as Lowercase]: AxiosHeaders; +} & {common: AxiosHeaders}>; + +type AxiosHeaderMatcher = string | RegExp | ((this: AxiosHeaders, value: string, name: string) => boolean); + +type AxiosHeaderParser = (this: AxiosHeaders, value: axios.AxiosHeaderValue, header: string) => any; + +type CommonRequestHeadersList = 'Accept' | 'Content-Length' | 'User-Agent'| 'Content-Encoding' | 'Authorization'; + +type ContentType = axios.AxiosHeaderValue | 'text/html' | 'text/plain' | 'multipart/form-data' | 'application/json' | 'application/x-www-form-urlencoded' | 'application/octet-stream'; + +type CommonResponseHeadersList = 'Server' | 'Content-Type' | 'Content-Length' | 'Cache-Control'| 'Content-Encoding'; + +type BrowserProgressEvent = any; + +declare class AxiosHeaders { + constructor( + headers?: RawAxiosHeaders | AxiosHeaders | string + ); + + [key: string]: any; + + set(headerName?: string, value?: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean): AxiosHeaders; + + get(headerName: string, parser: RegExp): RegExpExecArray | null; + get(headerName: string, matcher?: true | AxiosHeaderParser): axios.AxiosHeaderValue; + + has(header: string, matcher?: AxiosHeaderMatcher): boolean; + + delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; + + clear(matcher?: AxiosHeaderMatcher): boolean; + + normalize(format: boolean): AxiosHeaders; + + concat(...targets: Array): AxiosHeaders; + + toJSON(asStrings?: boolean): RawAxiosHeaders; + + static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; + + static accessor(header: string | string[]): AxiosHeaders; + + static concat(...targets: Array): AxiosHeaders; + + setContentType(value: ContentType, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentType(parser?: RegExp): RegExpExecArray | null; + getContentType(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasContentType(matcher?: AxiosHeaderMatcher): boolean; + + setContentLength(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentLength(parser?: RegExp): RegExpExecArray | null; + getContentLength(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasContentLength(matcher?: AxiosHeaderMatcher): boolean; + + setAccept(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getAccept(parser?: RegExp): RegExpExecArray | null; + getAccept(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasAccept(matcher?: AxiosHeaderMatcher): boolean; + + setUserAgent(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getUserAgent(parser?: RegExp): RegExpExecArray | null; + getUserAgent(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasUserAgent(matcher?: AxiosHeaderMatcher): boolean; + + setContentEncoding(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentEncoding(parser?: RegExp): RegExpExecArray | null; + getContentEncoding(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasContentEncoding(matcher?: AxiosHeaderMatcher): boolean; + + setAuthorization(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getAuthorization(parser?: RegExp): RegExpExecArray | null; + getAuthorization(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasAuthorization(matcher?: AxiosHeaderMatcher): boolean; + + getSetCookie(): string[]; + + [Symbol.iterator](): IterableIterator<[string, axios.AxiosHeaderValue]>; +} + +declare class AxiosError extends Error { + constructor( + message?: string, + code?: string, + config?: axios.InternalAxiosRequestConfig, + request?: any, + response?: axios.AxiosResponse + ); + + config?: axios.InternalAxiosRequestConfig; + code?: string; + request?: any; + response?: axios.AxiosResponse; + isAxiosError: boolean; + status?: number; + toJSON: () => object; + cause?: Error; + event?: BrowserProgressEvent; + static from( + error: Error | unknown, + code?: string, + config?: axios.InternalAxiosRequestConfig, + request?: any, + response?: axios.AxiosResponse, + customProps?: object, +): AxiosError; + static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_DEPRECATED = "ERR_DEPRECATED"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} + +declare class CanceledError extends AxiosError { +} + +declare class Axios { + constructor(config?: axios.AxiosRequestConfig); + defaults: axios.AxiosDefaults; + interceptors: { + request: axios.AxiosInterceptorManager; + response: axios.AxiosInterceptorManager; + }; + getUri(config?: axios.AxiosRequestConfig): string; + request, D = any>(config: axios.AxiosRequestConfig): Promise; + get, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + delete, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + head, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + options, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + post, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + put, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + patch, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + postForm, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + putForm, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + patchForm, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; +} + +declare enum HttpStatusCode { + Continue = 100, + SwitchingProtocols = 101, + Processing = 102, + EarlyHints = 103, + Ok = 200, + Created = 201, + Accepted = 202, + NonAuthoritativeInformation = 203, + NoContent = 204, + ResetContent = 205, + PartialContent = 206, + MultiStatus = 207, + AlreadyReported = 208, + ImUsed = 226, + MultipleChoices = 300, + MovedPermanently = 301, + Found = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + Unused = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + LengthRequired = 411, + PreconditionFailed = 412, + PayloadTooLarge = 413, + UriTooLong = 414, + UnsupportedMediaType = 415, + RangeNotSatisfiable = 416, + ExpectationFailed = 417, + ImATeapot = 418, + MisdirectedRequest = 421, + UnprocessableEntity = 422, + Locked = 423, + FailedDependency = 424, + TooEarly = 425, + UpgradeRequired = 426, + PreconditionRequired = 428, + TooManyRequests = 429, + RequestHeaderFieldsTooLarge = 431, + UnavailableForLegalReasons = 451, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504, + HttpVersionNotSupported = 505, + VariantAlsoNegotiates = 506, + InsufficientStorage = 507, + LoopDetected = 508, + NotExtended = 510, + NetworkAuthenticationRequired = 511, +} + +type InternalAxiosError = AxiosError; + +declare namespace axios { + type AxiosError = InternalAxiosError; + + type RawAxiosRequestHeaders = Partial; + + type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders; + + type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null; + + type RawCommonResponseHeaders = { + [Key in CommonResponseHeadersList]: AxiosHeaderValue; + } & { + "set-cookie": string[]; + }; + + type RawAxiosResponseHeaders = Partial; + + type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders; + + interface AxiosRequestTransformer { + (this: InternalAxiosRequestConfig, data: any, headers: AxiosRequestHeaders): any; + } + + interface AxiosResponseTransformer { + (this: InternalAxiosRequestConfig, data: any, headers: AxiosResponseHeaders, status?: number): any; + } + + interface AxiosAdapter { + (config: InternalAxiosRequestConfig): AxiosPromise; + } + + interface AxiosBasicCredentials { + username: string; + password: string; + } + + interface AxiosProxyConfig { + host: string; + port: number; + auth?: AxiosBasicCredentials; + protocol?: string; + } + + type Method = + | 'get' | 'GET' + | 'delete' | 'DELETE' + | 'head' | 'HEAD' + | 'options' | 'OPTIONS' + | 'post' | 'POST' + | 'put' | 'PUT' + | 'patch' | 'PATCH' + | 'purge' | 'PURGE' + | 'link' | 'LINK' + | 'unlink' | 'UNLINK'; + + type ResponseType = + | 'arraybuffer' + | 'blob' + | 'document' + | 'json' + | 'text' + | 'stream' + | 'formdata'; + + type responseEncoding = + | 'ascii' | 'ASCII' + | 'ansi' | 'ANSI' + | 'binary' | 'BINARY' + | 'base64' | 'BASE64' + | 'base64url' | 'BASE64URL' + | 'hex' | 'HEX' + | 'latin1' | 'LATIN1' + | 'ucs-2' | 'UCS-2' + | 'ucs2' | 'UCS2' + | 'utf-8' | 'UTF-8' + | 'utf8' | 'UTF8' + | 'utf16le' | 'UTF16LE'; + + interface TransitionalOptions { + silentJSONParsing?: boolean; + forcedJSONParsing?: boolean; + clarifyTimeoutError?: boolean; + legacyInterceptorReqResOrdering?: boolean; + } + + interface GenericAbortSignal { + readonly aborted: boolean; + onabort?: ((...args: any) => any) | null; + addEventListener?: (...args: any) => any; + removeEventListener?: (...args: any) => any; + } + + interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; + } + + interface SerializerVisitor { + ( + this: GenericFormData, + value: any, + key: string | number, + path: null | Array, + helpers: FormDataVisitorHelpers + ): boolean; + } + + interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; + } + + // tslint:disable-next-line + interface FormSerializerOptions extends SerializerOptions { + } + + interface ParamEncoder { + (value: any, defaultEncoder: (value: any) => any): any; + } + + interface CustomParamsSerializer { + (params: Record, options?: ParamsSerializerOptions): string; + } + + interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; + } + + type MaxUploadRate = number; + + type MaxDownloadRate = number; + + interface AxiosProgressEvent { + loaded: number; + total?: number; + progress?: number; + bytes: number; + rate?: number; + estimated?: number; + upload?: boolean; + download?: boolean; + event?: BrowserProgressEvent; + lengthComputable: boolean; + } + + type Milliseconds = number; + + type AxiosAdapterName = 'fetch' | 'xhr' | 'http' | (string & {}); + + type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName; + + type AddressFamily = 4 | 6 | undefined; + + interface LookupAddressEntry { + address: string; + family?: AddressFamily; + } + + type LookupAddress = string | LookupAddressEntry; + + interface AxiosRequestConfig { + url?: string; + method?: Method | string; + baseURL?: string; + allowAbsoluteUrls?: boolean; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: (RawAxiosRequestHeaders & MethodsHeaders) | AxiosHeaders; + params?: any; + paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer; + data?: D; + timeout?: Milliseconds; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapterConfig | AxiosAdapterConfig[]; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + responseEncoding?: responseEncoding | string; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; + onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void; + maxContentLength?: number; + validateStatus?: ((status: number) => boolean) | null; + maxBodyLength?: number; + maxRedirects?: number; + maxRate?: number | [MaxUploadRate, MaxDownloadRate]; + beforeRedirect?: (options: Record, responseDetails: {headers: Record, statusCode: HttpStatusCode}) => void; + socketPath?: string | null; + transport?: any; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken; + decompress?: boolean; + transitional?: TransitionalOptions; + signal?: GenericAbortSignal; + insecureHTTPParser?: boolean; + env?: { + FormData?: new (...args: any[]) => object; + fetch?: (input: URL | Request | string, init?: RequestInit) => Promise; + Request?: new (input: URL | Request | string, init?: RequestInit) => Request; + Response?: new ( + body?: ArrayBuffer | ArrayBufferView | Blob | FormData | URLSearchParams | string | null, + init?: ResponseInit + ) => Response; + }; + formSerializer?: FormSerializerOptions; + family?: AddressFamily; + lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: LookupAddress | LookupAddress[], family?: AddressFamily) => void) => void) | + ((hostname: string, options: object) => Promise<[address: LookupAddressEntry | LookupAddressEntry[], family?: AddressFamily] | LookupAddress>); + withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | undefined); + fetchOptions?: Omit | Record; + httpVersion?: 1 | 2; + http2Options?: Record & { + sessionTimeout?: number; + }; + } + + // Alias + type RawAxiosRequestConfig = AxiosRequestConfig; + + interface InternalAxiosRequestConfig extends AxiosRequestConfig { + headers: AxiosRequestHeaders; + } + + interface HeadersDefaults { + common: RawAxiosRequestHeaders; + delete: RawAxiosRequestHeaders; + get: RawAxiosRequestHeaders; + head: RawAxiosRequestHeaders; + post: RawAxiosRequestHeaders; + put: RawAxiosRequestHeaders; + patch: RawAxiosRequestHeaders; + options?: RawAxiosRequestHeaders; + purge?: RawAxiosRequestHeaders; + link?: RawAxiosRequestHeaders; + unlink?: RawAxiosRequestHeaders; + } + + interface AxiosDefaults extends Omit, 'headers'> { + headers: HeadersDefaults; + } + + interface CreateAxiosDefaults extends Omit, 'headers'> { + headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial; + } + + interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: H & RawAxiosResponseHeaders | AxiosResponseHeaders; + config: InternalAxiosRequestConfig; + request?: any; + } + + type AxiosPromise = Promise>; + + interface CancelStatic { + new (message?: string): Cancel; + } + + interface Cancel { + message: string | undefined; + } + + interface Canceler { + (message?: string, config?: AxiosRequestConfig, request?: any): void; + } + + interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; + } + + interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; + } + + interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; + } + + interface AxiosInterceptorOptions { + synchronous?: boolean; + runWhen?: (config: InternalAxiosRequestConfig) => boolean; + } + + type AxiosInterceptorFulfilled = (value: T) => T | Promise; + type AxiosInterceptorRejected = (error: any) => any; + + type AxiosRequestInterceptorUse = ( + onFulfilled?: AxiosInterceptorFulfilled | null, + onRejected?: AxiosInterceptorRejected | null, + options?: AxiosInterceptorOptions + ) => number; + + type AxiosResponseInterceptorUse = ( + onFulfilled?: AxiosInterceptorFulfilled | null, + onRejected?: AxiosInterceptorRejected | null + ) => number; + + interface AxiosInterceptorHandler { + fulfilled: AxiosInterceptorFulfilled; + rejected?: AxiosInterceptorRejected; + synchronous: boolean; + runWhen?: (config: AxiosRequestConfig) => boolean; + } + + interface AxiosInterceptorManager { + use: V extends AxiosResponse ? AxiosResponseInterceptorUse : AxiosRequestInterceptorUse; + eject(id: number): void; + clear(): void; + handlers?: Array>; + } + + interface AxiosInstance extends Axios { + , D = any>(config: AxiosRequestConfig): Promise; + , D = any>(url: string, config?: AxiosRequestConfig): Promise; + + create(config?: CreateAxiosDefaults): AxiosInstance; + defaults: Omit & { + headers: HeadersDefaults & { + [key: string]: AxiosHeaderValue + } + }; + } + + interface GenericFormData { + append(name: string, value: any, options?: any): any; + } + + interface GenericHTMLFormElement { + name: string; + method: string; + submit(): void; + } + + interface AxiosStatic extends AxiosInstance { + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + Axios: typeof Axios; + AxiosError: typeof AxiosError; + CanceledError: typeof CanceledError; + HttpStatusCode: typeof HttpStatusCode; + readonly VERSION: string; + isCancel(value: any): value is Cancel; + all(values: Array>): Promise; + spread(callback: (...args: T[]) => R): (array: T[]) => R; + isAxiosError(payload: any): payload is AxiosError; + toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; + formToJSON(form: GenericFormData|GenericHTMLFormElement): object; + getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; + AxiosHeaders: typeof AxiosHeaders; + mergeConfig(config1: AxiosRequestConfig, config2: AxiosRequestConfig): AxiosRequestConfig; + } +} + +declare const axios: axios.AxiosStatic; + +export = axios; diff --git a/node_modules/axios/index.d.ts b/node_modules/axios/index.d.ts new file mode 100644 index 00000000..e9bdcd75 --- /dev/null +++ b/node_modules/axios/index.d.ts @@ -0,0 +1,810 @@ +// TypeScript Version: 4.7 +type StringLiteralsOrString = Literals | (string & {}); + +export type AxiosHeaderValue = + | AxiosHeaders + | string + | string[] + | number + | boolean + | null; + +interface RawAxiosHeaders { + [key: string]: AxiosHeaderValue; +} + +type MethodsHeaders = Partial< + { + [Key in Method as Lowercase]: AxiosHeaders; + } & { common: AxiosHeaders } +>; + +type AxiosHeaderMatcher = + | string + | RegExp + | ((this: AxiosHeaders, value: string, name: string) => boolean); + +type AxiosHeaderParser = ( + this: AxiosHeaders, + value: AxiosHeaderValue, + header: string, +) => any; + +export class AxiosHeaders { + constructor(headers?: RawAxiosHeaders | AxiosHeaders | string); + + [key: string]: any; + + set( + headerName?: string, + value?: AxiosHeaderValue, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + set( + headers?: RawAxiosHeaders | AxiosHeaders | string, + rewrite?: boolean, + ): AxiosHeaders; + + get(headerName: string, parser: RegExp): RegExpExecArray | null; + get(headerName: string, matcher?: true | AxiosHeaderParser): AxiosHeaderValue; + + has(header: string, matcher?: AxiosHeaderMatcher): boolean; + + delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; + + clear(matcher?: AxiosHeaderMatcher): boolean; + + normalize(format: boolean): AxiosHeaders; + + concat( + ...targets: Array< + AxiosHeaders | RawAxiosHeaders | string | undefined | null + > + ): AxiosHeaders; + + toJSON(asStrings?: boolean): RawAxiosHeaders; + + static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; + + static accessor(header: string | string[]): AxiosHeaders; + + static concat( + ...targets: Array< + AxiosHeaders | RawAxiosHeaders | string | undefined | null + > + ): AxiosHeaders; + + setContentType( + value: ContentType, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + getContentType(parser?: RegExp): RegExpExecArray | null; + getContentType(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasContentType(matcher?: AxiosHeaderMatcher): boolean; + + setContentLength( + value: AxiosHeaderValue, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + getContentLength(parser?: RegExp): RegExpExecArray | null; + getContentLength(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasContentLength(matcher?: AxiosHeaderMatcher): boolean; + + setAccept( + value: AxiosHeaderValue, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + getAccept(parser?: RegExp): RegExpExecArray | null; + getAccept(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasAccept(matcher?: AxiosHeaderMatcher): boolean; + + setUserAgent( + value: AxiosHeaderValue, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + getUserAgent(parser?: RegExp): RegExpExecArray | null; + getUserAgent(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasUserAgent(matcher?: AxiosHeaderMatcher): boolean; + + setContentEncoding( + value: AxiosHeaderValue, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + getContentEncoding(parser?: RegExp): RegExpExecArray | null; + getContentEncoding(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasContentEncoding(matcher?: AxiosHeaderMatcher): boolean; + + setAuthorization( + value: AxiosHeaderValue, + rewrite?: boolean | AxiosHeaderMatcher, + ): AxiosHeaders; + getAuthorization(parser?: RegExp): RegExpExecArray | null; + getAuthorization(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasAuthorization(matcher?: AxiosHeaderMatcher): boolean; + + getSetCookie(): string[]; + + [Symbol.iterator](): IterableIterator<[string, AxiosHeaderValue]>; +} + +type CommonRequestHeadersList = + | "Accept" + | "Content-Length" + | "User-Agent" + | "Content-Encoding" + | "Authorization"; + +type ContentType = + | AxiosHeaderValue + | "text/html" + | "text/plain" + | "multipart/form-data" + | "application/json" + | "application/x-www-form-urlencoded" + | "application/octet-stream"; + +export type RawAxiosRequestHeaders = Partial< + RawAxiosHeaders & { + [Key in CommonRequestHeadersList]: AxiosHeaderValue; + } & { + "Content-Type": ContentType; + } +>; + +export type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders; + +type CommonResponseHeadersList = + | "Server" + | "Content-Type" + | "Content-Length" + | "Cache-Control" + | "Content-Encoding"; + +type RawCommonResponseHeaders = { + [Key in CommonResponseHeadersList]: AxiosHeaderValue; +} & { + "set-cookie": string[]; +}; + +export type RawAxiosResponseHeaders = Partial< + RawAxiosHeaders & RawCommonResponseHeaders +>; + +export type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders; + +export interface AxiosRequestTransformer { + ( + this: InternalAxiosRequestConfig, + data: any, + headers: AxiosRequestHeaders, + ): any; +} + +export interface AxiosResponseTransformer { + ( + this: InternalAxiosRequestConfig, + data: any, + headers: AxiosResponseHeaders, + status?: number, + ): any; +} + +export interface AxiosAdapter { + (config: InternalAxiosRequestConfig): AxiosPromise; +} + +export interface AxiosBasicCredentials { + username: string; + password: string; +} + +export interface AxiosProxyConfig { + host: string; + port: number; + auth?: AxiosBasicCredentials; + protocol?: string; +} + +export enum HttpStatusCode { + Continue = 100, + SwitchingProtocols = 101, + Processing = 102, + EarlyHints = 103, + Ok = 200, + Created = 201, + Accepted = 202, + NonAuthoritativeInformation = 203, + NoContent = 204, + ResetContent = 205, + PartialContent = 206, + MultiStatus = 207, + AlreadyReported = 208, + ImUsed = 226, + MultipleChoices = 300, + MovedPermanently = 301, + Found = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + Unused = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + LengthRequired = 411, + PreconditionFailed = 412, + PayloadTooLarge = 413, + UriTooLong = 414, + UnsupportedMediaType = 415, + RangeNotSatisfiable = 416, + ExpectationFailed = 417, + ImATeapot = 418, + MisdirectedRequest = 421, + UnprocessableEntity = 422, + Locked = 423, + FailedDependency = 424, + TooEarly = 425, + UpgradeRequired = 426, + PreconditionRequired = 428, + TooManyRequests = 429, + RequestHeaderFieldsTooLarge = 431, + UnavailableForLegalReasons = 451, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504, + HttpVersionNotSupported = 505, + VariantAlsoNegotiates = 506, + InsufficientStorage = 507, + LoopDetected = 508, + NotExtended = 510, + NetworkAuthenticationRequired = 511, +} + +export type Method = + | "get" + | "GET" + | "delete" + | "DELETE" + | "head" + | "HEAD" + | "options" + | "OPTIONS" + | "post" + | "POST" + | "put" + | "PUT" + | "patch" + | "PATCH" + | "purge" + | "PURGE" + | "link" + | "LINK" + | "unlink" + | "UNLINK"; + +export type ResponseType = + | "arraybuffer" + | "blob" + | "document" + | "json" + | "text" + | "stream" + | "formdata"; + +export type responseEncoding = + | "ascii" + | "ASCII" + | "ansi" + | "ANSI" + | "binary" + | "BINARY" + | "base64" + | "BASE64" + | "base64url" + | "BASE64URL" + | "hex" + | "HEX" + | "latin1" + | "LATIN1" + | "ucs-2" + | "UCS-2" + | "ucs2" + | "UCS2" + | "utf-8" + | "UTF-8" + | "utf8" + | "UTF8" + | "utf16le" + | "UTF16LE"; + +export interface TransitionalOptions { + silentJSONParsing?: boolean; + forcedJSONParsing?: boolean; + clarifyTimeoutError?: boolean; + legacyInterceptorReqResOrdering?: boolean; +} + +export interface GenericAbortSignal { + readonly aborted: boolean; + onabort?: ((...args: any) => any) | null; + addEventListener?: (...args: any) => any; + removeEventListener?: (...args: any) => any; +} + +export interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; +} + +export interface SerializerVisitor { + ( + this: GenericFormData, + value: any, + key: string | number, + path: null | Array, + helpers: FormDataVisitorHelpers, + ): boolean; +} + +export interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; +} + +// tslint:disable-next-line +export interface FormSerializerOptions extends SerializerOptions {} + +export interface ParamEncoder { + (value: any, defaultEncoder: (value: any) => any): any; +} + +export interface CustomParamsSerializer { + (params: Record, options?: ParamsSerializerOptions): string; +} + +export interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; +} + +type MaxUploadRate = number; + +type MaxDownloadRate = number; + +type BrowserProgressEvent = any; + +export interface AxiosProgressEvent { + loaded: number; + total?: number; + progress?: number; + bytes: number; + rate?: number; + estimated?: number; + upload?: boolean; + download?: boolean; + event?: BrowserProgressEvent; + lengthComputable: boolean; +} + +type Milliseconds = number; + +type AxiosAdapterName = StringLiteralsOrString<"xhr" | "http" | "fetch">; + +type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName; + +export type AddressFamily = 4 | 6 | undefined; + +export interface LookupAddressEntry { + address: string; + family?: AddressFamily; +} + +export type LookupAddress = string | LookupAddressEntry; + +export interface AxiosRequestConfig { + url?: string; + method?: StringLiteralsOrString; + baseURL?: string; + allowAbsoluteUrls?: boolean; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: (RawAxiosRequestHeaders & MethodsHeaders) | AxiosHeaders; + params?: any; + paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer; + data?: D; + timeout?: Milliseconds; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapterConfig | AxiosAdapterConfig[]; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + responseEncoding?: StringLiteralsOrString; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; + onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void; + maxContentLength?: number; + validateStatus?: ((status: number) => boolean) | null; + maxBodyLength?: number; + maxRedirects?: number; + maxRate?: number | [MaxUploadRate, MaxDownloadRate]; + beforeRedirect?: ( + options: Record, + responseDetails: { + headers: Record; + statusCode: HttpStatusCode; + }, + ) => void; + socketPath?: string | null; + transport?: any; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken | undefined; + decompress?: boolean; + transitional?: TransitionalOptions; + signal?: GenericAbortSignal; + insecureHTTPParser?: boolean; + env?: { + FormData?: new (...args: any[]) => object; + fetch?: ( + input: URL | Request | string, + init?: RequestInit, + ) => Promise; + Request?: new ( + input: URL | Request | string, + init?: RequestInit, + ) => Request; + Response?: new ( + body?: + | ArrayBuffer + | ArrayBufferView + | Blob + | FormData + | URLSearchParams + | string + | null, + init?: ResponseInit, + ) => Response; + }; + formSerializer?: FormSerializerOptions; + family?: AddressFamily; + lookup?: + | (( + hostname: string, + options: object, + cb: ( + err: Error | null, + address: LookupAddress | LookupAddress[], + family?: AddressFamily, + ) => void, + ) => void) + | (( + hostname: string, + options: object, + ) => Promise< + | [ + address: LookupAddressEntry | LookupAddressEntry[], + family?: AddressFamily, + ] + | LookupAddress + >); + withXSRFToken?: + | boolean + | ((config: InternalAxiosRequestConfig) => boolean | undefined); + parseReviver?: (this: any, key: string, value: any) => any; + fetchOptions?: + | Omit + | Record; + httpVersion?: 1 | 2; + http2Options?: Record & { + sessionTimeout?: number; + }; +} + +// Alias +export type RawAxiosRequestConfig = AxiosRequestConfig; + +export interface InternalAxiosRequestConfig< + D = any, +> extends AxiosRequestConfig { + headers: AxiosRequestHeaders; +} + +export interface HeadersDefaults { + common: RawAxiosRequestHeaders; + delete: RawAxiosRequestHeaders; + get: RawAxiosRequestHeaders; + head: RawAxiosRequestHeaders; + post: RawAxiosRequestHeaders; + put: RawAxiosRequestHeaders; + patch: RawAxiosRequestHeaders; + options?: RawAxiosRequestHeaders; + purge?: RawAxiosRequestHeaders; + link?: RawAxiosRequestHeaders; + unlink?: RawAxiosRequestHeaders; +} + +export interface AxiosDefaults extends Omit< + AxiosRequestConfig, + "headers" +> { + headers: HeadersDefaults; +} + +export interface CreateAxiosDefaults extends Omit< + AxiosRequestConfig, + "headers" +> { + headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial; +} + +export interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: (H & RawAxiosResponseHeaders) | AxiosResponseHeaders; + config: InternalAxiosRequestConfig; + request?: any; +} + +export class AxiosError extends Error { + constructor( + message?: string, + code?: string, + config?: InternalAxiosRequestConfig, + request?: any, + response?: AxiosResponse, + ); + + config?: InternalAxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + isAxiosError: boolean; + status?: number; + toJSON: () => object; + cause?: Error; + event?: BrowserProgressEvent; + static from( + error: Error | unknown, + code?: string, + config?: InternalAxiosRequestConfig, + request?: any, + response?: AxiosResponse, + customProps?: object, + ): AxiosError; + static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_DEPRECATED = "ERR_DEPRECATED"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} + +export class CanceledError extends AxiosError { + readonly name: "CanceledError"; +} + +export type AxiosPromise = Promise>; + +export interface CancelStatic { + new (message?: string): Cancel; +} + +export interface Cancel { + message: string | undefined; +} + +export interface Canceler { + (message?: string, config?: AxiosRequestConfig, request?: any): void; +} + +export interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; +} + +export interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; +} + +export interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; +} + +export interface AxiosInterceptorOptions { + synchronous?: boolean; + runWhen?: (config: InternalAxiosRequestConfig) => boolean; +} + +type AxiosInterceptorFulfilled = (value: T) => T | Promise; +type AxiosInterceptorRejected = (error: any) => any; + +type AxiosRequestInterceptorUse = ( + onFulfilled?: AxiosInterceptorFulfilled | null, + onRejected?: AxiosInterceptorRejected | null, + options?: AxiosInterceptorOptions, +) => number; + +type AxiosResponseInterceptorUse = ( + onFulfilled?: AxiosInterceptorFulfilled | null, + onRejected?: AxiosInterceptorRejected | null, +) => number; + +interface AxiosInterceptorHandler { + fulfilled: AxiosInterceptorFulfilled; + rejected?: AxiosInterceptorRejected; + synchronous: boolean; + runWhen: (config: AxiosRequestConfig) => boolean | null; +} + +export interface AxiosInterceptorManager { + use: V extends AxiosResponse + ? AxiosResponseInterceptorUse + : AxiosRequestInterceptorUse; + eject(id: number): void; + clear(): void; + handlers?: Array>; +} + +export class Axios { + constructor(config?: AxiosRequestConfig); + defaults: AxiosDefaults; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri(config?: AxiosRequestConfig): string; + request, D = any>( + config: AxiosRequestConfig, + ): Promise; + get, D = any>( + url: string, + config?: AxiosRequestConfig, + ): Promise; + delete, D = any>( + url: string, + config?: AxiosRequestConfig, + ): Promise; + head, D = any>( + url: string, + config?: AxiosRequestConfig, + ): Promise; + options, D = any>( + url: string, + config?: AxiosRequestConfig, + ): Promise; + post, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise; + put, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise; + patch, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise; + postForm, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise; + putForm, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise; + patchForm, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise; +} + +export interface AxiosInstance extends Axios { + , D = any>( + config: AxiosRequestConfig, + ): Promise; + , D = any>( + url: string, + config?: AxiosRequestConfig, + ): Promise; + + create(config?: CreateAxiosDefaults): AxiosInstance; + defaults: Omit & { + headers: HeadersDefaults & { + [key: string]: AxiosHeaderValue; + }; + }; +} + +export interface GenericFormData { + append(name: string, value: any, options?: any): any; +} + +export interface GenericHTMLFormElement { + name: string; + method: string; + submit(): void; +} + +export function getAdapter( + adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined, +): AxiosAdapter; + +export function toFormData( + sourceObj: object, + targetFormData?: GenericFormData, + options?: FormSerializerOptions, +): GenericFormData; + +export function formToJSON( + form: GenericFormData | GenericHTMLFormElement, +): object; + +export function isAxiosError( + payload: any, +): payload is AxiosError; + +export function spread(callback: (...args: T[]) => R): (array: T[]) => R; + +export function isCancel(value: any): value is CanceledError; + +export function all(values: Array>): Promise; + +export function mergeConfig( + config1: AxiosRequestConfig, + config2: AxiosRequestConfig, +): AxiosRequestConfig; + +export interface AxiosStatic extends AxiosInstance { + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + Axios: typeof Axios; + AxiosError: typeof AxiosError; + HttpStatusCode: typeof HttpStatusCode; + readonly VERSION: string; + isCancel: typeof isCancel; + all: typeof all; + spread: typeof spread; + isAxiosError: typeof isAxiosError; + toFormData: typeof toFormData; + formToJSON: typeof formToJSON; + getAdapter: typeof getAdapter; + CanceledError: typeof CanceledError; + AxiosHeaders: typeof AxiosHeaders; + mergeConfig: typeof mergeConfig; +} + +declare const axios: AxiosStatic; + +export default axios; diff --git a/node_modules/axios/index.js b/node_modules/axios/index.js new file mode 100644 index 00000000..fba3990d --- /dev/null +++ b/node_modules/axios/index.js @@ -0,0 +1,43 @@ +import axios from './lib/axios.js'; + +// This module is intended to unwrap Axios default export as named. +// Keep top-level export same with static properties +// so that it can keep same with es module or cjs +const { + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} = axios; + +export { + axios as default, + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} diff --git a/node_modules/axios/lib/adapters/README.md b/node_modules/axios/lib/adapters/README.md new file mode 100644 index 00000000..13afdc79 --- /dev/null +++ b/node_modules/axios/lib/adapters/README.md @@ -0,0 +1,37 @@ +# axios // adapters + +The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received. + +## Example + +```js +var settle = require('../core/settle'); + +module.exports = function myAdapter(config) { + // At this point: + // - config has been merged with defaults + // - request transformers have already run + // - request interceptors have already run + + // Make the request using config provided + // Upon response settle the Promise + + return new Promise(function(resolve, reject) { + + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // From here: + // - response transformers will run + // - response interceptors will run + }); +} +``` diff --git a/node_modules/axios/lib/adapters/adapters.js b/node_modules/axios/lib/adapters/adapters.js new file mode 100644 index 00000000..2e117db3 --- /dev/null +++ b/node_modules/axios/lib/adapters/adapters.js @@ -0,0 +1,126 @@ +import utils from '../utils.js'; +import httpAdapter from './http.js'; +import xhrAdapter from './xhr.js'; +import * as fetchAdapter from './fetch.js'; +import AxiosError from "../core/AxiosError.js"; + +/** + * Known adapters mapping. + * Provides environment-specific adapters for Axios: + * - `http` for Node.js + * - `xhr` for browsers + * - `fetch` for fetch API-based requests + * + * @type {Object} + */ +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: { + get: fetchAdapter.getFetch, + } +}; + +// Assign adapter names for easier debugging and identification +utils.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', { value }); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', { value }); + } +}); + +/** + * Render a rejection reason string for unknown or unsupported adapters + * + * @param {string} reason + * @returns {string} + */ +const renderReason = (reason) => `- ${reason}`; + +/** + * Check if the adapter is resolved (function, null, or false) + * + * @param {Function|null|false} adapter + * @returns {boolean} + */ +const isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false; + +/** + * Get the first suitable adapter from the provided list. + * Tries each adapter in order until a supported one is found. + * Throws an AxiosError if no adapter is suitable. + * + * @param {Array|string|Function} adapters - Adapter(s) by name or function. + * @param {Object} config - Axios request configuration + * @throws {AxiosError} If no suitable adapter is available + * @returns {Function} The resolved adapter function + */ +function getAdapter(adapters, config) { + adapters = utils.isArray(adapters) ? adapters : [adapters]; + + const { length } = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError(`Unknown adapter '${id}'`); + } + } + + if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; +} + +/** + * Exports Axios adapters and utility to resolve an adapter + */ +export default { + /** + * Resolve an adapter from a list of adapter names or functions. + * @type {Function} + */ + getAdapter, + + /** + * Exposes all known adapters + * @type {Object} + */ + adapters: knownAdapters +}; diff --git a/node_modules/axios/lib/adapters/fetch.js b/node_modules/axios/lib/adapters/fetch.js new file mode 100644 index 00000000..db1795db --- /dev/null +++ b/node_modules/axios/lib/adapters/fetch.js @@ -0,0 +1,288 @@ +import platform from "../platform/index.js"; +import utils from "../utils.js"; +import AxiosError from "../core/AxiosError.js"; +import composeSignals from "../helpers/composeSignals.js"; +import {trackStream} from "../helpers/trackStream.js"; +import AxiosHeaders from "../core/AxiosHeaders.js"; +import {progressEventReducer, progressEventDecorator, asyncDecorator} from "../helpers/progressEventReducer.js"; +import resolveConfig from "../helpers/resolveConfig.js"; +import settle from "../core/settle.js"; + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const {isFunction} = utils; + +const globalFetchAPI = (({Request, Response}) => ({ + Request, Response +}))(utils.global); + +const { + ReadableStream, TextEncoder +} = utils.global; + + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +} + +const factory = (env) => { + env = utils.merge.call({ + skipUndefined: true + }, globalFetchAPI, env); + + const {fetch: envFetch, Request, Response} = env; + const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function'; + const isRequestSupported = isFunction(Request); + const isResponseSupported = isFunction(Response); + + if (!isFetchSupported) { + return false; + } + + const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream); + + const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Request(str).arrayBuffer()) + ); + + const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; + }); + + const supportsResponseStream = isResponseSupported && isReadableStreamSupported && + test(() => utils.isReadableStream(new Response('').body)); + + const resolvers = { + stream: supportsResponseStream && ((res) => res.body) + }; + + isFetchSupported && ((() => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = (res, config) => { + let method = res && res[type]; + + if (method) { + return method.call(res); + } + + throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config); + }) + }); + })()); + + const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if (utils.isBlob(body)) { + return body.size; + } + + if (utils.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) { + return body.byteLength; + } + + if (utils.isURLSearchParams(body)) { + body = body + ''; + } + + if (utils.isString(body)) { + return (await encodeText(body)).byteLength; + } + } + + const resolveBodyLength = async (headers, body) => { + const length = utils.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; + } + + return async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + let _fetch = envFetch || fetch; + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request = null; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader) + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype; + + const resolvedOptions = { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }; + + request = isRequestSupported && new Request(url, resolvedOptions); + + let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions)); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }) + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response), + { + cause: err.cause || err + } + ) + } + + throw AxiosError.from(err, err && err.code, config, request, err && err.response); + } + } +} + +const seedCache = new Map(); + +export const getFetch = (config) => { + let env = (config && config.env) || {}; + const {fetch, Request, Response} = env; + const seeds = [ + Request, Response, fetch + ]; + + let len = seeds.length, i = len, + seed, target, map = seedCache; + + while (i--) { + seed = seeds[i]; + target = map.get(seed); + + target === undefined && map.set(seed, target = (i ? new Map() : factory(env))) + + map = target; + } + + return target; +}; + +const adapter = getFetch(); + +export default adapter; diff --git a/node_modules/axios/lib/adapters/http.js b/node_modules/axios/lib/adapters/http.js new file mode 100644 index 00000000..6a8a05dd --- /dev/null +++ b/node_modules/axios/lib/adapters/http.js @@ -0,0 +1,898 @@ +import utils from '../utils.js'; +import settle from '../core/settle.js'; +import buildFullPath from '../core/buildFullPath.js'; +import buildURL from '../helpers/buildURL.js'; +import proxyFromEnv from 'proxy-from-env'; +import http from 'http'; +import https from 'https'; +import http2 from 'http2'; +import util from 'util'; +import followRedirects from 'follow-redirects'; +import zlib from 'zlib'; +import {VERSION} from '../env/data.js'; +import transitionalDefaults from '../defaults/transitional.js'; +import AxiosError from '../core/AxiosError.js'; +import CanceledError from '../cancel/CanceledError.js'; +import platform from '../platform/index.js'; +import fromDataURI from '../helpers/fromDataURI.js'; +import stream from 'stream'; +import AxiosHeaders from '../core/AxiosHeaders.js'; +import AxiosTransformStream from '../helpers/AxiosTransformStream.js'; +import {EventEmitter} from 'events'; +import formDataToStream from "../helpers/formDataToStream.js"; +import readBlob from "../helpers/readBlob.js"; +import ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js'; +import callbackify from "../helpers/callbackify.js"; +import {progressEventReducer, progressEventDecorator, asyncDecorator} from "../helpers/progressEventReducer.js"; +import estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js'; + +const zlibOptions = { + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH +}; + +const brotliOptions = { + flush: zlib.constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH +} + +const isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress); + +const {http: httpFollow, https: httpsFollow} = followRedirects; + +const isHttps = /https:?/; + +const supportedProtocols = platform.protocols.map(protocol => { + return protocol + ':'; +}); + + +const flushOnFinish = (stream, [throttled, flush]) => { + stream + .on('end', flush) + .on('error', flush); + + return throttled; +} + +class Http2Sessions { + constructor() { + this.sessions = Object.create(null); + } + + getSession(authority, options) { + options = Object.assign({ + sessionTimeout: 1000 + }, options); + + let authoritySessions = this.sessions[authority]; + + if (authoritySessions) { + let len = authoritySessions.length; + + for (let i = 0; i < len; i++) { + const [sessionHandle, sessionOptions] = authoritySessions[i]; + if (!sessionHandle.destroyed && !sessionHandle.closed && util.isDeepStrictEqual(sessionOptions, options)) { + return sessionHandle; + } + } + } + + const session = http2.connect(authority, options); + + let removed; + + const removeSession = () => { + if (removed) { + return; + } + + removed = true; + + let entries = authoritySessions, len = entries.length, i = len; + + while (i--) { + if (entries[i][0] === session) { + if (len === 1) { + delete this.sessions[authority]; + } else { + entries.splice(i, 1); + } + return; + } + } + }; + + const originalRequestFn = session.request; + + const {sessionTimeout} = options; + + if(sessionTimeout != null) { + + let timer; + let streamsCount = 0; + + session.request = function () { + const stream = originalRequestFn.apply(this, arguments); + + streamsCount++; + + if (timer) { + clearTimeout(timer); + timer = null; + } + + stream.once('close', () => { + if (!--streamsCount) { + timer = setTimeout(() => { + timer = null; + removeSession(); + }, sessionTimeout); + } + }); + + return stream; + } + } + + session.once('close', removeSession); + + let entry = [ + session, + options + ]; + + authoritySessions ? authoritySessions.push(entry) : authoritySessions = this.sessions[authority] = [entry]; + + return session; + } +} + +const http2Sessions = new Http2Sessions(); + + +/** + * If the proxy or config beforeRedirects functions are defined, call them with the options + * object. + * + * @param {Object} options - The options object that was passed to the request. + * + * @returns {Object} + */ +function dispatchBeforeRedirect(options, responseDetails) { + if (options.beforeRedirects.proxy) { + options.beforeRedirects.proxy(options); + } + if (options.beforeRedirects.config) { + options.beforeRedirects.config(options, responseDetails); + } +} + +/** + * If the proxy or config afterRedirects functions are defined, call them with the options + * + * @param {http.ClientRequestArgs} options + * @param {AxiosProxyConfig} configProxy configuration from Axios options object + * @param {string} location + * + * @returns {http.ClientRequestArgs} + */ +function setProxy(options, configProxy, location) { + let proxy = configProxy; + if (!proxy && proxy !== false) { + const proxyUrl = proxyFromEnv.getProxyForUrl(location); + if (proxyUrl) { + proxy = new URL(proxyUrl); + } + } + if (proxy) { + // Basic proxy authorization + if (proxy.username) { + proxy.auth = (proxy.username || '') + ':' + (proxy.password || ''); + } + + if (proxy.auth) { + // Support proxy auth object form + const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password); + + if (validProxyAuth) { + proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || ''); + } else if (typeof proxy.auth === 'object') { + throw new AxiosError('Invalid proxy authorization', AxiosError.ERR_BAD_OPTION, { proxy }); + } + + const base64 = Buffer.from(proxy.auth, 'utf8').toString('base64'); + + options.headers['Proxy-Authorization'] = 'Basic ' + base64; + } + + options.headers.host = options.hostname + (options.port ? ':' + options.port : ''); + const proxyHost = proxy.hostname || proxy.host; + options.hostname = proxyHost; + // Replace 'host' since options is not a URL object + options.host = proxyHost; + options.port = proxy.port; + options.path = location; + if (proxy.protocol) { + options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`; + } + } + + options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) { + // Configure proxy for redirected request, passing the original config proxy to apply + // the exact same logic as if the redirected request was performed by axios directly. + setProxy(redirectOptions, configProxy, redirectOptions.href); + }; +} + +const isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process'; + +// temporary hotfix + +const wrapAsync = (asyncExecutor) => { + return new Promise((resolve, reject) => { + let onDone; + let isDone; + + const done = (value, isRejected) => { + if (isDone) return; + isDone = true; + onDone && onDone(value, isRejected); + } + + const _resolve = (value) => { + done(value); + resolve(value); + }; + + const _reject = (reason) => { + done(reason, true); + reject(reason); + } + + asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject); + }) +}; + +const resolveFamily = ({address, family}) => { + if (!utils.isString(address)) { + throw TypeError('address must be a string'); + } + return ({ + address, + family: family || (address.indexOf('.') < 0 ? 6 : 4) + }); +} + +const buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family}); + +const http2Transport = { + request(options, cb) { + const authority = options.protocol + '//' + options.hostname + ':' + (options.port ||(options.protocol === 'https:' ? 443 : 80)); + + + const {http2Options, headers} = options; + + const session = http2Sessions.getSession(authority, http2Options); + + const { + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_STATUS + } = http2.constants; + + const http2Headers = { + [HTTP2_HEADER_SCHEME]: options.protocol.replace(':', ''), + [HTTP2_HEADER_METHOD]: options.method, + [HTTP2_HEADER_PATH]: options.path, + } + + utils.forEach(headers, (header, name) => { + name.charAt(0) !== ':' && (http2Headers[name] = header); + }); + + const req = session.request(http2Headers); + + req.once('response', (responseHeaders) => { + const response = req; //duplex + + responseHeaders = Object.assign({}, responseHeaders); + + const status = responseHeaders[HTTP2_HEADER_STATUS]; + + delete responseHeaders[HTTP2_HEADER_STATUS]; + + response.headers = responseHeaders; + + response.statusCode = +status; + + cb(response); + }) + + return req; + } +} + +/*eslint consistent-return:0*/ +export default isHttpAdapterSupported && function httpAdapter(config) { + return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) { + let {data, lookup, family, httpVersion = 1, http2Options} = config; + const {responseType, responseEncoding} = config; + const method = config.method.toUpperCase(); + let isDone; + let rejected = false; + let req; + + httpVersion = +httpVersion; + + if (Number.isNaN(httpVersion)) { + throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`); + } + + if (httpVersion !== 1 && httpVersion !== 2) { + throw TypeError(`Unsupported protocol version '${httpVersion}'`); + } + + const isHttp2 = httpVersion === 2; + + if (lookup) { + const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]); + // hotfix to support opt.all option which is required for node 20.x + lookup = (hostname, opt, cb) => { + _lookup(hostname, opt, (err, arg0, arg1) => { + if (err) { + return cb(err); + } + + const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)]; + + opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family); + }); + } + } + + const abortEmitter = new EventEmitter(); + + function abort(reason) { + try { + abortEmitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason); + } catch(err) { + console.warn('emit error', err); + } + } + + abortEmitter.once('abort', reject); + + const onFinished = () => { + if (config.cancelToken) { + config.cancelToken.unsubscribe(abort); + } + + if (config.signal) { + config.signal.removeEventListener('abort', abort); + } + + abortEmitter.removeAllListeners(); + } + + if (config.cancelToken || config.signal) { + config.cancelToken && config.cancelToken.subscribe(abort); + if (config.signal) { + config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort); + } + } + + onDone((response, isRejected) => { + isDone = true; + + if (isRejected) { + rejected = true; + onFinished(); + return; + } + + const {data} = response; + + if (data instanceof stream.Readable || data instanceof stream.Duplex) { + const offListeners = stream.finished(data, () => { + offListeners(); + onFinished(); + }); + } else { + onFinished(); + } + }); + + + + + + // Parse url + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined); + const protocol = parsed.protocol || supportedProtocols[0]; + + if (protocol === 'data:') { + // Apply the same semantics as HTTP: only enforce if a finite, non-negative cap is set. + if (config.maxContentLength > -1) { + // Use the exact string passed to fromDataURI (config.url); fall back to fullPath if needed. + const dataUrl = String(config.url || fullPath || ''); + const estimated = estimateDataURLDecodedBytes(dataUrl); + + if (estimated > config.maxContentLength) { + return reject(new AxiosError( + 'maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError.ERR_BAD_RESPONSE, + config + )); + } + } + + let convertedData; + + if (method !== 'GET') { + return settle(resolve, reject, { + status: 405, + statusText: 'method not allowed', + headers: {}, + config + }); + } + + try { + convertedData = fromDataURI(config.url, responseType === 'blob', { + Blob: config.env && config.env.Blob + }); + } catch (err) { + throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config); + } + + if (responseType === 'text') { + convertedData = convertedData.toString(responseEncoding); + + if (!responseEncoding || responseEncoding === 'utf8') { + convertedData = utils.stripBOM(convertedData); + } + } else if (responseType === 'stream') { + convertedData = stream.Readable.from(convertedData); + } + + return settle(resolve, reject, { + data: convertedData, + status: 200, + statusText: 'OK', + headers: new AxiosHeaders(), + config + }); + } + + if (supportedProtocols.indexOf(protocol) === -1) { + return reject(new AxiosError( + 'Unsupported protocol ' + protocol, + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + const headers = AxiosHeaders.from(config.headers).normalize(); + + // Set User-Agent (required by some servers) + // See https://github.com/axios/axios/issues/69 + // User-Agent is specified; handle case where no UA header is desired + // Only set header if it hasn't been set in config + headers.set('User-Agent', 'axios/' + VERSION, false); + + const {onUploadProgress, onDownloadProgress} = config; + const maxRate = config.maxRate; + let maxUploadRate = undefined; + let maxDownloadRate = undefined; + + // support for spec compliant FormData objects + if (utils.isSpecCompliantForm(data)) { + const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i); + + data = formDataToStream(data, (formHeaders) => { + headers.set(formHeaders); + }, { + tag: `axios-${VERSION}-boundary`, + boundary: userBoundary && userBoundary[1] || undefined + }); + // support for https://www.npmjs.com/package/form-data api + } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) { + headers.set(data.getHeaders()); + + if (!headers.hasContentLength()) { + try { + const knownLength = await util.promisify(data.getLength).call(data); + Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength); + /*eslint no-empty:0*/ + } catch (e) { + } + } + } else if (utils.isBlob(data) || utils.isFile(data)) { + data.size && headers.setContentType(data.type || 'application/octet-stream'); + headers.setContentLength(data.size || 0); + data = stream.Readable.from(readBlob(data)); + } else if (data && !utils.isStream(data)) { + if (Buffer.isBuffer(data)) { + // Nothing to do... + } else if (utils.isArrayBuffer(data)) { + data = Buffer.from(new Uint8Array(data)); + } else if (utils.isString(data)) { + data = Buffer.from(data, 'utf-8'); + } else { + return reject(new AxiosError( + 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + // Add Content-Length header if data exists + headers.setContentLength(data.length, false); + + if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { + return reject(new AxiosError( + 'Request body larger than maxBodyLength limit', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + } + + const contentLength = utils.toFiniteNumber(headers.getContentLength()); + + if (utils.isArray(maxRate)) { + maxUploadRate = maxRate[0]; + maxDownloadRate = maxRate[1]; + } else { + maxUploadRate = maxDownloadRate = maxRate; + } + + if (data && (onUploadProgress || maxUploadRate)) { + if (!utils.isStream(data)) { + data = stream.Readable.from(data, {objectMode: false}); + } + + data = stream.pipeline([data, new AxiosTransformStream({ + maxRate: utils.toFiniteNumber(maxUploadRate) + })], utils.noop); + + onUploadProgress && data.on('progress', flushOnFinish( + data, + progressEventDecorator( + contentLength, + progressEventReducer(asyncDecorator(onUploadProgress), false, 3) + ) + )); + } + + // HTTP basic authentication + let auth = undefined; + if (config.auth) { + const username = config.auth.username || ''; + const password = config.auth.password || ''; + auth = username + ':' + password; + } + + if (!auth && parsed.username) { + const urlUsername = parsed.username; + const urlPassword = parsed.password; + auth = urlUsername + ':' + urlPassword; + } + + auth && headers.delete('authorization'); + + let path; + + try { + path = buildURL( + parsed.pathname + parsed.search, + config.params, + config.paramsSerializer + ).replace(/^\?/, ''); + } catch (err) { + const customErr = new Error(err.message); + customErr.config = config; + customErr.url = config.url; + customErr.exists = true; + return reject(customErr); + } + + headers.set( + 'Accept-Encoding', + 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false + ); + + const options = { + path, + method: method, + headers: headers.toJSON(), + agents: { http: config.httpAgent, https: config.httpsAgent }, + auth, + protocol, + family, + beforeRedirect: dispatchBeforeRedirect, + beforeRedirects: {}, + http2Options + }; + + // cacheable-lookup integration hotfix + !utils.isUndefined(lookup) && (options.lookup = lookup); + + if (config.socketPath) { + options.socketPath = config.socketPath; + } else { + options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname; + options.port = parsed.port; + setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); + } + + let transport; + const isHttpsRequest = isHttps.test(options.protocol); + options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; + + if (isHttp2) { + transport = http2Transport; + } else { + if (config.transport) { + transport = config.transport; + } else if (config.maxRedirects === 0) { + transport = isHttpsRequest ? https : http; + } else { + if (config.maxRedirects) { + options.maxRedirects = config.maxRedirects; + } + if (config.beforeRedirect) { + options.beforeRedirects.config = config.beforeRedirect; + } + transport = isHttpsRequest ? httpsFollow : httpFollow; + } + } + + if (config.maxBodyLength > -1) { + options.maxBodyLength = config.maxBodyLength; + } else { + // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited + options.maxBodyLength = Infinity; + } + + if (config.insecureHTTPParser) { + options.insecureHTTPParser = config.insecureHTTPParser; + } + + // Create the request + req = transport.request(options, function handleResponse(res) { + if (req.destroyed) return; + + const streams = [res]; + + const responseLength = utils.toFiniteNumber(res.headers['content-length']); + + if (onDownloadProgress || maxDownloadRate) { + const transformStream = new AxiosTransformStream({ + maxRate: utils.toFiniteNumber(maxDownloadRate) + }); + + onDownloadProgress && transformStream.on('progress', flushOnFinish( + transformStream, + progressEventDecorator( + responseLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true, 3) + ) + )); + + streams.push(transformStream); + } + + // decompress the response body transparently if required + let responseStream = res; + + // return the last request in case of redirects + const lastRequest = res.req || req; + + // if decompress disabled we should not decompress + if (config.decompress !== false && res.headers['content-encoding']) { + // if no content, but headers still say that it is encoded, + // remove the header not confuse downstream operations + if (method === 'HEAD' || res.statusCode === 204) { + delete res.headers['content-encoding']; + } + + switch ((res.headers['content-encoding'] || '').toLowerCase()) { + /*eslint default-case:0*/ + case 'gzip': + case 'x-gzip': + case 'compress': + case 'x-compress': + // add the unzipper to the body stream processing pipeline + streams.push(zlib.createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'deflate': + streams.push(new ZlibHeaderTransformStream()); + + // add the unzipper to the body stream processing pipeline + streams.push(zlib.createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'br': + if (isBrotliSupported) { + streams.push(zlib.createBrotliDecompress(brotliOptions)); + delete res.headers['content-encoding']; + } + } + } + + responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0]; + + + + const response = { + status: res.statusCode, + statusText: res.statusMessage, + headers: new AxiosHeaders(res.headers), + config, + request: lastRequest + }; + + if (responseType === 'stream') { + response.data = responseStream; + settle(resolve, reject, response); + } else { + const responseBuffer = []; + let totalResponseBytes = 0; + + responseStream.on('data', function handleStreamData(chunk) { + responseBuffer.push(chunk); + totalResponseBytes += chunk.length; + + // make sure the content length is not over the maxContentLength if specified + if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { + // stream.destroy() emit aborted event before calling reject() on Node.js v16 + rejected = true; + responseStream.destroy(); + abort(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError.ERR_BAD_RESPONSE, config, lastRequest)); + } + }); + + responseStream.on('aborted', function handlerStreamAborted() { + if (rejected) { + return; + } + + const err = new AxiosError( + 'stream has been aborted', + AxiosError.ERR_BAD_RESPONSE, + config, + lastRequest + ); + responseStream.destroy(err); + reject(err); + }); + + responseStream.on('error', function handleStreamError(err) { + if (req.destroyed) return; + reject(AxiosError.from(err, null, config, lastRequest)); + }); + + responseStream.on('end', function handleStreamEnd() { + try { + let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); + if (responseType !== 'arraybuffer') { + responseData = responseData.toString(responseEncoding); + if (!responseEncoding || responseEncoding === 'utf8') { + responseData = utils.stripBOM(responseData); + } + } + response.data = responseData; + } catch (err) { + return reject(AxiosError.from(err, null, config, response.request, response)); + } + settle(resolve, reject, response); + }); + } + + abortEmitter.once('abort', err => { + if (!responseStream.destroyed) { + responseStream.emit('error', err); + responseStream.destroy(); + } + }); + }); + + abortEmitter.once('abort', err => { + if (req.close) { + req.close(); + } else { + req.destroy(err); + } + }); + + // Handle errors + req.on('error', function handleRequestError(err) { + reject(AxiosError.from(err, null, config, req)); + }); + + // set tcp keep alive to prevent drop connection by peer + req.on('socket', function handleRequestSocket(socket) { + // default interval of sending ack packet is 1 minute + socket.setKeepAlive(true, 1000 * 60); + }); + + // Handle request timeout + if (config.timeout) { + // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. + const timeout = parseInt(config.timeout, 10); + + if (Number.isNaN(timeout)) { + abort(new AxiosError( + 'error trying to parse `config.timeout` to int', + AxiosError.ERR_BAD_OPTION_VALUE, + config, + req + )); + + return; + } + + // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. + // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. + // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. + // And then these socket which be hang up will devouring CPU little by little. + // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. + req.setTimeout(timeout, function handleRequestTimeout() { + if (isDone) return; + let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + abort(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + req + )); + }); + } else { + // explicitly reset the socket timeout value for a possible `keep-alive` request + req.setTimeout(0); + } + + + // Send the request + if (utils.isStream(data)) { + let ended = false; + let errored = false; + + data.on('end', () => { + ended = true; + }); + + data.once('error', err => { + errored = true; + req.destroy(err); + }); + + data.on('close', () => { + if (!ended && !errored) { + abort(new CanceledError('Request stream has been aborted', config, req)); + } + }); + + data.pipe(req); + } else { + data && req.write(data); + req.end(); + } + }); +} + +export const __setProxy = setProxy; diff --git a/node_modules/axios/lib/adapters/xhr.js b/node_modules/axios/lib/adapters/xhr.js new file mode 100644 index 00000000..dc573602 --- /dev/null +++ b/node_modules/axios/lib/adapters/xhr.js @@ -0,0 +1,200 @@ +import utils from '../utils.js'; +import settle from '../core/settle.js'; +import transitionalDefaults from '../defaults/transitional.js'; +import AxiosError from '../core/AxiosError.js'; +import CanceledError from '../cancel/CanceledError.js'; +import parseProtocol from '../helpers/parseProtocol.js'; +import platform from '../platform/index.js'; +import AxiosHeaders from '../core/AxiosHeaders.js'; +import {progressEventReducer} from '../helpers/progressEventReducer.js'; +import resolveConfig from "../helpers/resolveConfig.js"; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +export default isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError(event) { + // Browsers deliver a ProgressEvent in XHR onerror + // (message may be empty; when present, surface it) + // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event + const msg = event && event.message ? event.message : 'Network Error'; + const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request); + // attach the underlying event for consumers who want details + err.event = event || null; + reject(err); + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +} diff --git a/node_modules/axios/lib/axios.js b/node_modules/axios/lib/axios.js new file mode 100644 index 00000000..873f246d --- /dev/null +++ b/node_modules/axios/lib/axios.js @@ -0,0 +1,89 @@ +'use strict'; + +import utils from './utils.js'; +import bind from './helpers/bind.js'; +import Axios from './core/Axios.js'; +import mergeConfig from './core/mergeConfig.js'; +import defaults from './defaults/index.js'; +import formDataToJSON from './helpers/formDataToJSON.js'; +import CanceledError from './cancel/CanceledError.js'; +import CancelToken from './cancel/CancelToken.js'; +import isCancel from './cancel/isCancel.js'; +import {VERSION} from './env/data.js'; +import toFormData from './helpers/toFormData.js'; +import AxiosError from './core/AxiosError.js'; +import spread from './helpers/spread.js'; +import isAxiosError from './helpers/isAxiosError.js'; +import AxiosHeaders from "./core/AxiosHeaders.js"; +import adapters from './adapters/adapters.js'; +import HttpStatusCode from './helpers/HttpStatusCode.js'; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios(defaultConfig); + const instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError; +axios.CancelToken = CancelToken; +axios.isCancel = isCancel; +axios.VERSION = VERSION; +axios.toFormData = toFormData; + +// Expose AxiosError class +axios.AxiosError = AxiosError; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig; + +axios.AxiosHeaders = AxiosHeaders; + +axios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode; + +axios.default = axios; + +// this module should only have a default export +export default axios diff --git a/node_modules/axios/lib/cancel/CancelToken.js b/node_modules/axios/lib/cancel/CancelToken.js new file mode 100644 index 00000000..0fc20252 --- /dev/null +++ b/node_modules/axios/lib/cancel/CancelToken.js @@ -0,0 +1,135 @@ +'use strict'; + +import CanceledError from './CanceledError.js'; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +export default CancelToken; diff --git a/node_modules/axios/lib/cancel/CanceledError.js b/node_modules/axios/lib/cancel/CanceledError.js new file mode 100644 index 00000000..e769b89a --- /dev/null +++ b/node_modules/axios/lib/cancel/CanceledError.js @@ -0,0 +1,22 @@ +'use strict'; + +import AxiosError from '../core/AxiosError.js'; + +class CanceledError extends AxiosError { + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + constructor(message, config, request) { + super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + this.name = 'CanceledError'; + this.__CANCEL__ = true; + } +} + +export default CanceledError; diff --git a/node_modules/axios/lib/cancel/isCancel.js b/node_modules/axios/lib/cancel/isCancel.js new file mode 100644 index 00000000..a444a129 --- /dev/null +++ b/node_modules/axios/lib/cancel/isCancel.js @@ -0,0 +1,5 @@ +'use strict'; + +export default function isCancel(value) { + return !!(value && value.__CANCEL__); +} diff --git a/node_modules/axios/lib/core/Axios.js b/node_modules/axios/lib/core/Axios.js new file mode 100644 index 00000000..d3bbde03 --- /dev/null +++ b/node_modules/axios/lib/core/Axios.js @@ -0,0 +1,249 @@ +'use strict'; + +import utils from '../utils.js'; +import buildURL from '../helpers/buildURL.js'; +import InterceptorManager from './InterceptorManager.js'; +import dispatchRequest from './dispatchRequest.js'; +import mergeConfig from './mergeConfig.js'; +import buildFullPath from './buildFullPath.js'; +import validator from '../helpers/validator.js'; +import AxiosHeaders from './AxiosHeaders.js'; +import transitionalDefaults from '../defaults/transitional.js'; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean), + legacyInterceptorReqResOrdering: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + } + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) { + // do nothing + } else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils.merge( + headers.common, + headers[config.method] + ); + + headers && utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + const transitional = config.transitional || transitionalDefaults; + const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering; + + if (legacyInterceptorReqResOrdering) { + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + } else { + requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + } + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift(...requestInterceptorChain); + chain.push(...responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +export default Axios; diff --git a/node_modules/axios/lib/core/AxiosError.js b/node_modules/axios/lib/core/AxiosError.js new file mode 100644 index 00000000..89de3dee --- /dev/null +++ b/node_modules/axios/lib/core/AxiosError.js @@ -0,0 +1,73 @@ +'use strict'; + +import utils from '../utils.js'; + +class AxiosError extends Error { + static from(error, code, config, request, response, customProps) { + const axiosError = new AxiosError(error.message, code || error.code, config, request, response); + axiosError.cause = error; + axiosError.name = error.name; + customProps && Object.assign(axiosError, customProps); + return axiosError; + } + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + constructor(message, code, config, request, response) { + super(message); + this.name = 'AxiosError'; + this.isAxiosError = true; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status; + } + } + + toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils.toJSONObject(this.config), + code: this.code, + status: this.status, + }; + } +} + +// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated. +AxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE'; +AxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION'; +AxiosError.ECONNABORTED = 'ECONNABORTED'; +AxiosError.ETIMEDOUT = 'ETIMEDOUT'; +AxiosError.ERR_NETWORK = 'ERR_NETWORK'; +AxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS'; +AxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED'; +AxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE'; +AxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST'; +AxiosError.ERR_CANCELED = 'ERR_CANCELED'; +AxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT'; +AxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL'; + +export default AxiosError; diff --git a/node_modules/axios/lib/core/AxiosHeaders.js b/node_modules/axios/lib/core/AxiosHeaders.js new file mode 100644 index 00000000..67445815 --- /dev/null +++ b/node_modules/axios/lib/core/AxiosHeaders.js @@ -0,0 +1,314 @@ +'use strict'; + +import utils from '../utils.js'; +import parseHeaders from '../helpers/parseHeaders.js'; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils.isString(value)) return; + + if (utils.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite) + } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils.isObject(header) && utils.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite) + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils.forEach(this, (value, header) => { + const key = utils.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils.freezeMethods(AxiosHeaders); + +export default AxiosHeaders; diff --git a/node_modules/axios/lib/core/InterceptorManager.js b/node_modules/axios/lib/core/InterceptorManager.js new file mode 100644 index 00000000..90d3610e --- /dev/null +++ b/node_modules/axios/lib/core/InterceptorManager.js @@ -0,0 +1,72 @@ +'use strict'; + +import utils from '../utils.js'; + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * @param {Object} options The options for the interceptor, synchronous and runWhen + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {void} + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +export default InterceptorManager; diff --git a/node_modules/axios/lib/core/README.md b/node_modules/axios/lib/core/README.md new file mode 100644 index 00000000..84559ce7 --- /dev/null +++ b/node_modules/axios/lib/core/README.md @@ -0,0 +1,8 @@ +# axios // core + +The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are: + +- Dispatching requests + - Requests sent via `adapters/` (see lib/adapters/README.md) +- Managing interceptors +- Handling config diff --git a/node_modules/axios/lib/core/buildFullPath.js b/node_modules/axios/lib/core/buildFullPath.js new file mode 100644 index 00000000..3050bd64 --- /dev/null +++ b/node_modules/axios/lib/core/buildFullPath.js @@ -0,0 +1,22 @@ +'use strict'; + +import isAbsoluteURL from '../helpers/isAbsoluteURL.js'; +import combineURLs from '../helpers/combineURLs.js'; + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +export default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} diff --git a/node_modules/axios/lib/core/dispatchRequest.js b/node_modules/axios/lib/core/dispatchRequest.js new file mode 100644 index 00000000..bdd07f8e --- /dev/null +++ b/node_modules/axios/lib/core/dispatchRequest.js @@ -0,0 +1,81 @@ +'use strict'; + +import transformData from './transformData.js'; +import isCancel from '../cancel/isCancel.js'; +import defaults from '../defaults/index.js'; +import CanceledError from '../cancel/CanceledError.js'; +import AxiosHeaders from '../core/AxiosHeaders.js'; +import adapters from "../adapters/adapters.js"; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +export default function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} diff --git a/node_modules/axios/lib/core/mergeConfig.js b/node_modules/axios/lib/core/mergeConfig.js new file mode 100644 index 00000000..de8e3941 --- /dev/null +++ b/node_modules/axios/lib/core/mergeConfig.js @@ -0,0 +1,119 @@ +"use strict"; + +import utils from "../utils.js"; +import AxiosHeaders from "./AxiosHeaders.js"; + +const headersToObject = (thing) => + thing instanceof AxiosHeaders ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +export default function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge.call({ caseless }, target, source); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + function mergeDeepProperties(a, b, prop, caseless) { + if (!utils.isUndefined(b)) { + return getMergedValue(a, b, prop, caseless); + } else if (!utils.isUndefined(a)) { + return getMergedValue(undefined, a, prop, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b, prop) => + mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true), + }; + + utils.forEach( + Object.keys({ ...config1, ...config2 }), + function computeConfigValue(prop) { + if ( + prop === "__proto__" || + prop === "constructor" || + prop === "prototype" + ) + return; + const merge = utils.hasOwnProp(mergeMap, prop) + ? mergeMap[prop] + : mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || + (config[prop] = configValue); + }, + ); + + return config; +} diff --git a/node_modules/axios/lib/core/settle.js b/node_modules/axios/lib/core/settle.js new file mode 100644 index 00000000..ac905c43 --- /dev/null +++ b/node_modules/axios/lib/core/settle.js @@ -0,0 +1,27 @@ +'use strict'; + +import AxiosError from './AxiosError.js'; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +export default function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} diff --git a/node_modules/axios/lib/core/transformData.js b/node_modules/axios/lib/core/transformData.js new file mode 100644 index 00000000..f22c4743 --- /dev/null +++ b/node_modules/axios/lib/core/transformData.js @@ -0,0 +1,28 @@ +'use strict'; + +import utils from '../utils.js'; +import defaults from '../defaults/index.js'; +import AxiosHeaders from '../core/AxiosHeaders.js'; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +export default function transformData(fns, response) { + const config = this || defaults; + const context = response || config; + const headers = AxiosHeaders.from(context.headers); + let data = context.data; + + utils.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} diff --git a/node_modules/axios/lib/defaults/index.js b/node_modules/axios/lib/defaults/index.js new file mode 100644 index 00000000..cc14a8b3 --- /dev/null +++ b/node_modules/axios/lib/defaults/index.js @@ -0,0 +1,161 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosError from '../core/AxiosError.js'; +import transitionalDefaults from './transitional.js'; +import toFormData from '../helpers/toFormData.js'; +import toURLEncodedForm from '../helpers/toURLEncodedForm.js'; +import platform from '../platform/index.js'; +import formDataToJSON from '../helpers/formDataToJSON.js'; + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils.isObject(data); + + if (isObjectPayload && utils.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) || + utils.isReadableStream(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils.isResponse(data) || utils.isReadableStream(data)) { + return data; + } + + if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data, this.parseReviver); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +export default defaults; diff --git a/node_modules/axios/lib/defaults/transitional.js b/node_modules/axios/lib/defaults/transitional.js new file mode 100644 index 00000000..63d1c947 --- /dev/null +++ b/node_modules/axios/lib/defaults/transitional.js @@ -0,0 +1,8 @@ +'use strict'; + +export default { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false, + legacyInterceptorReqResOrdering: true +}; diff --git a/node_modules/axios/lib/env/README.md b/node_modules/axios/lib/env/README.md new file mode 100644 index 00000000..b41baff3 --- /dev/null +++ b/node_modules/axios/lib/env/README.md @@ -0,0 +1,3 @@ +# axios // env + +The `data.js` file is updated automatically when the package version is upgrading. Please do not edit it manually. diff --git a/node_modules/axios/lib/env/classes/FormData.js b/node_modules/axios/lib/env/classes/FormData.js new file mode 100644 index 00000000..862adb93 --- /dev/null +++ b/node_modules/axios/lib/env/classes/FormData.js @@ -0,0 +1,2 @@ +import _FormData from 'form-data'; +export default typeof FormData !== 'undefined' ? FormData : _FormData; diff --git a/node_modules/axios/lib/env/data.js b/node_modules/axios/lib/env/data.js new file mode 100644 index 00000000..57083dcb --- /dev/null +++ b/node_modules/axios/lib/env/data.js @@ -0,0 +1 @@ +export const VERSION = "1.13.5"; \ No newline at end of file diff --git a/node_modules/axios/lib/helpers/AxiosTransformStream.js b/node_modules/axios/lib/helpers/AxiosTransformStream.js new file mode 100644 index 00000000..41400712 --- /dev/null +++ b/node_modules/axios/lib/helpers/AxiosTransformStream.js @@ -0,0 +1,143 @@ +'use strict'; + +import stream from 'stream'; +import utils from '../utils.js'; + +const kInternals = Symbol('internals'); + +class AxiosTransformStream extends stream.Transform{ + constructor(options) { + options = utils.toFlatObject(options, { + maxRate: 0, + chunkSize: 64 * 1024, + minChunkSize: 100, + timeWindow: 500, + ticksRate: 2, + samplesCount: 15 + }, null, (prop, source) => { + return !utils.isUndefined(source[prop]); + }); + + super({ + readableHighWaterMark: options.chunkSize + }); + + const internals = this[kInternals] = { + timeWindow: options.timeWindow, + chunkSize: options.chunkSize, + maxRate: options.maxRate, + minChunkSize: options.minChunkSize, + bytesSeen: 0, + isCaptured: false, + notifiedBytesLoaded: 0, + ts: Date.now(), + bytes: 0, + onReadCallback: null + }; + + this.on('newListener', event => { + if (event === 'progress') { + if (!internals.isCaptured) { + internals.isCaptured = true; + } + } + }); + } + + _read(size) { + const internals = this[kInternals]; + + if (internals.onReadCallback) { + internals.onReadCallback(); + } + + return super._read(size); + } + + _transform(chunk, encoding, callback) { + const internals = this[kInternals]; + const maxRate = internals.maxRate; + + const readableHighWaterMark = this.readableHighWaterMark; + + const timeWindow = internals.timeWindow; + + const divider = 1000 / timeWindow; + const bytesThreshold = (maxRate / divider); + const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0; + + const pushChunk = (_chunk, _callback) => { + const bytes = Buffer.byteLength(_chunk); + internals.bytesSeen += bytes; + internals.bytes += bytes; + + internals.isCaptured && this.emit('progress', internals.bytesSeen); + + if (this.push(_chunk)) { + process.nextTick(_callback); + } else { + internals.onReadCallback = () => { + internals.onReadCallback = null; + process.nextTick(_callback); + }; + } + } + + const transformChunk = (_chunk, _callback) => { + const chunkSize = Buffer.byteLength(_chunk); + let chunkRemainder = null; + let maxChunkSize = readableHighWaterMark; + let bytesLeft; + let passed = 0; + + if (maxRate) { + const now = Date.now(); + + if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) { + internals.ts = now; + bytesLeft = bytesThreshold - internals.bytes; + internals.bytes = bytesLeft < 0 ? -bytesLeft : 0; + passed = 0; + } + + bytesLeft = bytesThreshold - internals.bytes; + } + + if (maxRate) { + if (bytesLeft <= 0) { + // next time window + return setTimeout(() => { + _callback(null, _chunk); + }, timeWindow - passed); + } + + if (bytesLeft < maxChunkSize) { + maxChunkSize = bytesLeft; + } + } + + if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) { + chunkRemainder = _chunk.subarray(maxChunkSize); + _chunk = _chunk.subarray(0, maxChunkSize); + } + + pushChunk(_chunk, chunkRemainder ? () => { + process.nextTick(_callback, null, chunkRemainder); + } : _callback); + }; + + transformChunk(chunk, function transformNextChunk(err, _chunk) { + if (err) { + return callback(err); + } + + if (_chunk) { + transformChunk(_chunk, transformNextChunk); + } else { + callback(null); + } + }); + } +} + +export default AxiosTransformStream; diff --git a/node_modules/axios/lib/helpers/AxiosURLSearchParams.js b/node_modules/axios/lib/helpers/AxiosURLSearchParams.js new file mode 100644 index 00000000..b9aa9f02 --- /dev/null +++ b/node_modules/axios/lib/helpers/AxiosURLSearchParams.js @@ -0,0 +1,58 @@ +'use strict'; + +import toFormData from './toFormData.js'; + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode); + } : encode; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +export default AxiosURLSearchParams; diff --git a/node_modules/axios/lib/helpers/HttpStatusCode.js b/node_modules/axios/lib/helpers/HttpStatusCode.js new file mode 100644 index 00000000..b68d08e1 --- /dev/null +++ b/node_modules/axios/lib/helpers/HttpStatusCode.js @@ -0,0 +1,77 @@ +const HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, + WebServerIsDown: 521, + ConnectionTimedOut: 522, + OriginIsUnreachable: 523, + TimeoutOccurred: 524, + SslHandshakeFailed: 525, + InvalidSslCertificate: 526, +}; + +Object.entries(HttpStatusCode).forEach(([key, value]) => { + HttpStatusCode[value] = key; +}); + +export default HttpStatusCode; diff --git a/node_modules/axios/lib/helpers/README.md b/node_modules/axios/lib/helpers/README.md new file mode 100644 index 00000000..4ae34193 --- /dev/null +++ b/node_modules/axios/lib/helpers/README.md @@ -0,0 +1,7 @@ +# axios // helpers + +The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like: + +- Browser polyfills +- Managing cookies +- Parsing HTTP headers diff --git a/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js b/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js new file mode 100644 index 00000000..d1791f0b --- /dev/null +++ b/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js @@ -0,0 +1,28 @@ +"use strict"; + +import stream from "stream"; + +class ZlibHeaderTransformStream extends stream.Transform { + __transform(chunk, encoding, callback) { + this.push(chunk); + callback(); + } + + _transform(chunk, encoding, callback) { + if (chunk.length !== 0) { + this._transform = this.__transform; + + // Add Default Compression headers if no zlib headers are present + if (chunk[0] !== 120) { // Hex: 78 + const header = Buffer.alloc(2); + header[0] = 120; // Hex: 78 + header[1] = 156; // Hex: 9C + this.push(header, encoding); + } + } + + this.__transform(chunk, encoding, callback); + } +} + +export default ZlibHeaderTransformStream; diff --git a/node_modules/axios/lib/helpers/bind.js b/node_modules/axios/lib/helpers/bind.js new file mode 100644 index 00000000..938da5c1 --- /dev/null +++ b/node_modules/axios/lib/helpers/bind.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Create a bound version of a function with a specified `this` context + * + * @param {Function} fn - The function to bind + * @param {*} thisArg - The value to be passed as the `this` parameter + * @returns {Function} A new function that will call the original function with the specified `this` context + */ +export default function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} diff --git a/node_modules/axios/lib/helpers/buildURL.js b/node_modules/axios/lib/helpers/buildURL.js new file mode 100644 index 00000000..e1596656 --- /dev/null +++ b/node_modules/axios/lib/helpers/buildURL.js @@ -0,0 +1,64 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js'; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +export default function buildURL(url, params, options) { + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + const _options = utils.isFunction(options) ? { + serialize: options + } : options; + + const serializeFn = _options && _options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, _options); + } else { + serializedParams = utils.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, _options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} diff --git a/node_modules/axios/lib/helpers/callbackify.js b/node_modules/axios/lib/helpers/callbackify.js new file mode 100644 index 00000000..4603badc --- /dev/null +++ b/node_modules/axios/lib/helpers/callbackify.js @@ -0,0 +1,16 @@ +import utils from "../utils.js"; + +const callbackify = (fn, reducer) => { + return utils.isAsyncFn(fn) ? function (...args) { + const cb = args.pop(); + fn.apply(this, args).then((value) => { + try { + reducer ? cb(null, ...reducer(value)) : cb(null, value); + } catch (err) { + cb(err); + } + }, cb); + } : fn; +} + +export default callbackify; diff --git a/node_modules/axios/lib/helpers/combineURLs.js b/node_modules/axios/lib/helpers/combineURLs.js new file mode 100644 index 00000000..9f04f020 --- /dev/null +++ b/node_modules/axios/lib/helpers/combineURLs.js @@ -0,0 +1,15 @@ +'use strict'; + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +export default function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} diff --git a/node_modules/axios/lib/helpers/composeSignals.js b/node_modules/axios/lib/helpers/composeSignals.js new file mode 100644 index 00000000..cf27ddf5 --- /dev/null +++ b/node_modules/axios/lib/helpers/composeSignals.js @@ -0,0 +1,48 @@ +import CanceledError from "../cancel/CanceledError.js"; +import AxiosError from "../core/AxiosError.js"; +import utils from '../utils.js'; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err)); + } + } + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT)) + }, timeout) + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + } + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils.asap(unsubscribe); + + return signal; + } +} + +export default composeSignals; diff --git a/node_modules/axios/lib/helpers/cookies.js b/node_modules/axios/lib/helpers/cookies.js new file mode 100644 index 00000000..5c440d0e --- /dev/null +++ b/node_modules/axios/lib/helpers/cookies.js @@ -0,0 +1,53 @@ +import utils from '../utils.js'; +import platform from '../platform/index.js'; + +export default platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure, sameSite) { + if (typeof document === 'undefined') return; + + const cookie = [`${name}=${encodeURIComponent(value)}`]; + + if (utils.isNumber(expires)) { + cookie.push(`expires=${new Date(expires).toUTCString()}`); + } + if (utils.isString(path)) { + cookie.push(`path=${path}`); + } + if (utils.isString(domain)) { + cookie.push(`domain=${domain}`); + } + if (secure === true) { + cookie.push('secure'); + } + if (utils.isString(sameSite)) { + cookie.push(`SameSite=${sameSite}`); + } + + document.cookie = cookie.join('; '); + }, + + read(name) { + if (typeof document === 'undefined') return null; + const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); + return match ? decodeURIComponent(match[1]) : null; + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000, '/'); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + diff --git a/node_modules/axios/lib/helpers/deprecatedMethod.js b/node_modules/axios/lib/helpers/deprecatedMethod.js new file mode 100644 index 00000000..9e8fae6b --- /dev/null +++ b/node_modules/axios/lib/helpers/deprecatedMethod.js @@ -0,0 +1,26 @@ +'use strict'; + +/*eslint no-console:0*/ + +/** + * Supply a warning to the developer that a method they are using + * has been deprecated. + * + * @param {string} method The name of the deprecated method + * @param {string} [instead] The alternate method to use if applicable + * @param {string} [docs] The documentation URL to get further details + * + * @returns {void} + */ +export default function deprecatedMethod(method, instead, docs) { + try { + console.warn( + 'DEPRECATED method `' + method + '`.' + + (instead ? ' Use `' + instead + '` instead.' : '') + + ' This method will be removed in a future release.'); + + if (docs) { + console.warn('For more information about usage see ' + docs); + } + } catch (e) { /* Ignore */ } +} diff --git a/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js b/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js new file mode 100644 index 00000000..f29a8179 --- /dev/null +++ b/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js @@ -0,0 +1,73 @@ +/** + * Estimate decoded byte length of a data:// URL *without* allocating large buffers. + * - For base64: compute exact decoded size using length and padding; + * handle %XX at the character-count level (no string allocation). + * - For non-base64: use UTF-8 byteLength of the encoded body as a safe upper bound. + * + * @param {string} url + * @returns {number} + */ +export default function estimateDataURLDecodedBytes(url) { + if (!url || typeof url !== 'string') return 0; + if (!url.startsWith('data:')) return 0; + + const comma = url.indexOf(','); + if (comma < 0) return 0; + + const meta = url.slice(5, comma); + const body = url.slice(comma + 1); + const isBase64 = /;base64/i.test(meta); + + if (isBase64) { + let effectiveLen = body.length; + const len = body.length; // cache length + + for (let i = 0; i < len; i++) { + if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) { + const a = body.charCodeAt(i + 1); + const b = body.charCodeAt(i + 2); + const isHex = + ((a >= 48 && a <= 57) || (a >= 65 && a <= 70) || (a >= 97 && a <= 102)) && + ((b >= 48 && b <= 57) || (b >= 65 && b <= 70) || (b >= 97 && b <= 102)); + + if (isHex) { + effectiveLen -= 2; + i += 2; + } + } + } + + let pad = 0; + let idx = len - 1; + + const tailIsPct3D = (j) => + j >= 2 && + body.charCodeAt(j - 2) === 37 && // '%' + body.charCodeAt(j - 1) === 51 && // '3' + (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100); // 'D' or 'd' + + if (idx >= 0) { + if (body.charCodeAt(idx) === 61 /* '=' */) { + pad++; + idx--; + } else if (tailIsPct3D(idx)) { + pad++; + idx -= 3; + } + } + + if (pad === 1 && idx >= 0) { + if (body.charCodeAt(idx) === 61 /* '=' */) { + pad++; + } else if (tailIsPct3D(idx)) { + pad++; + } + } + + const groups = Math.floor(effectiveLen / 4); + const bytes = groups * 3 - (pad || 0); + return bytes > 0 ? bytes : 0; + } + + return Buffer.byteLength(body, 'utf8'); +} diff --git a/node_modules/axios/lib/helpers/formDataToJSON.js b/node_modules/axios/lib/helpers/formDataToJSON.js new file mode 100644 index 00000000..906ce602 --- /dev/null +++ b/node_modules/axios/lib/helpers/formDataToJSON.js @@ -0,0 +1,95 @@ +'use strict'; + +import utils from '../utils.js'; + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils.isArray(target) ? target.length : name; + + if (isLast) { + if (utils.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { + const obj = {}; + + utils.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +export default formDataToJSON; diff --git a/node_modules/axios/lib/helpers/formDataToStream.js b/node_modules/axios/lib/helpers/formDataToStream.js new file mode 100644 index 00000000..afc61742 --- /dev/null +++ b/node_modules/axios/lib/helpers/formDataToStream.js @@ -0,0 +1,112 @@ +import util from 'util'; +import {Readable} from 'stream'; +import utils from "../utils.js"; +import readBlob from "./readBlob.js"; +import platform from "../platform/index.js"; + +const BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_'; + +const textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder(); + +const CRLF = '\r\n'; +const CRLF_BYTES = textEncoder.encode(CRLF); +const CRLF_BYTES_COUNT = 2; + +class FormDataPart { + constructor(name, value) { + const {escapeName} = this.constructor; + const isStringValue = utils.isString(value); + + let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${ + !isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : '' + }${CRLF}`; + + if (isStringValue) { + value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF)); + } else { + headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}` + } + + this.headers = textEncoder.encode(headers + CRLF); + + this.contentLength = isStringValue ? value.byteLength : value.size; + + this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT; + + this.name = name; + this.value = value; + } + + async *encode(){ + yield this.headers; + + const {value} = this; + + if(utils.isTypedArray(value)) { + yield value; + } else { + yield* readBlob(value); + } + + yield CRLF_BYTES; + } + + static escapeName(name) { + return String(name).replace(/[\r\n"]/g, (match) => ({ + '\r' : '%0D', + '\n' : '%0A', + '"' : '%22', + }[match])); + } +} + +const formDataToStream = (form, headersHandler, options) => { + const { + tag = 'form-data-boundary', + size = 25, + boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET) + } = options || {}; + + if(!utils.isFormData(form)) { + throw TypeError('FormData instance required'); + } + + if (boundary.length < 1 || boundary.length > 70) { + throw Error('boundary must be 10-70 characters long') + } + + const boundaryBytes = textEncoder.encode('--' + boundary + CRLF); + const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF); + let contentLength = footerBytes.byteLength; + + const parts = Array.from(form.entries()).map(([name, value]) => { + const part = new FormDataPart(name, value); + contentLength += part.size; + return part; + }); + + contentLength += boundaryBytes.byteLength * parts.length; + + contentLength = utils.toFiniteNumber(contentLength); + + const computedHeaders = { + 'Content-Type': `multipart/form-data; boundary=${boundary}` + } + + if (Number.isFinite(contentLength)) { + computedHeaders['Content-Length'] = contentLength; + } + + headersHandler && headersHandler(computedHeaders); + + return Readable.from((async function *() { + for(const part of parts) { + yield boundaryBytes; + yield* part.encode(); + } + + yield footerBytes; + })()); +}; + +export default formDataToStream; diff --git a/node_modules/axios/lib/helpers/fromDataURI.js b/node_modules/axios/lib/helpers/fromDataURI.js new file mode 100644 index 00000000..eb71d3f3 --- /dev/null +++ b/node_modules/axios/lib/helpers/fromDataURI.js @@ -0,0 +1,53 @@ +'use strict'; + +import AxiosError from '../core/AxiosError.js'; +import parseProtocol from './parseProtocol.js'; +import platform from '../platform/index.js'; + +const DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/; + +/** + * Parse data uri to a Buffer or Blob + * + * @param {String} uri + * @param {?Boolean} asBlob + * @param {?Object} options + * @param {?Function} options.Blob + * + * @returns {Buffer|Blob} + */ +export default function fromDataURI(uri, asBlob, options) { + const _Blob = options && options.Blob || platform.classes.Blob; + const protocol = parseProtocol(uri); + + if (asBlob === undefined && _Blob) { + asBlob = true; + } + + if (protocol === 'data') { + uri = protocol.length ? uri.slice(protocol.length + 1) : uri; + + const match = DATA_URL_PATTERN.exec(uri); + + if (!match) { + throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL); + } + + const mime = match[1]; + const isBase64 = match[2]; + const body = match[3]; + const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8'); + + if (asBlob) { + if (!_Blob) { + throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT); + } + + return new _Blob([buffer], {type: mime}); + } + + return buffer; + } + + throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT); +} diff --git a/node_modules/axios/lib/helpers/isAbsoluteURL.js b/node_modules/axios/lib/helpers/isAbsoluteURL.js new file mode 100644 index 00000000..d8b4e59c --- /dev/null +++ b/node_modules/axios/lib/helpers/isAbsoluteURL.js @@ -0,0 +1,20 @@ +'use strict'; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +export default function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + if (typeof url !== 'string') { + return false; + } + + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + diff --git a/node_modules/axios/lib/helpers/isAxiosError.js b/node_modules/axios/lib/helpers/isAxiosError.js new file mode 100644 index 00000000..a174314a --- /dev/null +++ b/node_modules/axios/lib/helpers/isAxiosError.js @@ -0,0 +1,14 @@ +'use strict'; + +import utils from '../utils.js'; + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +export default function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); +} diff --git a/node_modules/axios/lib/helpers/isURLSameOrigin.js b/node_modules/axios/lib/helpers/isURLSameOrigin.js new file mode 100644 index 00000000..6a92aa15 --- /dev/null +++ b/node_modules/axios/lib/helpers/isURLSameOrigin.js @@ -0,0 +1,14 @@ +import platform from '../platform/index.js'; + +export default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; diff --git a/node_modules/axios/lib/helpers/null.js b/node_modules/axios/lib/helpers/null.js new file mode 100644 index 00000000..b9f82c46 --- /dev/null +++ b/node_modules/axios/lib/helpers/null.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line strict +export default null; diff --git a/node_modules/axios/lib/helpers/parseHeaders.js b/node_modules/axios/lib/helpers/parseHeaders.js new file mode 100644 index 00000000..b4c3cad4 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseHeaders.js @@ -0,0 +1,55 @@ +'use strict'; + +import utils from '../utils.js'; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +export default rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; diff --git a/node_modules/axios/lib/helpers/parseProtocol.js b/node_modules/axios/lib/helpers/parseProtocol.js new file mode 100644 index 00000000..586ec964 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseProtocol.js @@ -0,0 +1,6 @@ +'use strict'; + +export default function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} diff --git a/node_modules/axios/lib/helpers/progressEventReducer.js b/node_modules/axios/lib/helpers/progressEventReducer.js new file mode 100644 index 00000000..ff601cc4 --- /dev/null +++ b/node_modules/axios/lib/helpers/progressEventReducer.js @@ -0,0 +1,44 @@ +import speedometer from "./speedometer.js"; +import throttle from "./throttle.js"; +import utils from "../utils.js"; + +export const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +} + +export const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +} + +export const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args)); diff --git a/node_modules/axios/lib/helpers/readBlob.js b/node_modules/axios/lib/helpers/readBlob.js new file mode 100644 index 00000000..6de748e8 --- /dev/null +++ b/node_modules/axios/lib/helpers/readBlob.js @@ -0,0 +1,15 @@ +const {asyncIterator} = Symbol; + +const readBlob = async function* (blob) { + if (blob.stream) { + yield* blob.stream() + } else if (blob.arrayBuffer) { + yield await blob.arrayBuffer() + } else if (blob[asyncIterator]) { + yield* blob[asyncIterator](); + } else { + yield blob; + } +} + +export default readBlob; diff --git a/node_modules/axios/lib/helpers/resolveConfig.js b/node_modules/axios/lib/helpers/resolveConfig.js new file mode 100644 index 00000000..26bce9d7 --- /dev/null +++ b/node_modules/axios/lib/helpers/resolveConfig.js @@ -0,0 +1,61 @@ +import platform from "../platform/index.js"; +import utils from "../utils.js"; +import isURLSameOrigin from "./isURLSameOrigin.js"; +import cookies from "./cookies.js"; +import buildFullPath from "../core/buildFullPath.js"; +import mergeConfig from "../core/mergeConfig.js"; +import AxiosHeaders from "../core/AxiosHeaders.js"; +import buildURL from "./buildURL.js"; + +export default (config) => { + const newConfig = mergeConfig({}, config); + + let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig; + + newConfig.headers = headers = AxiosHeaders.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + if (utils.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // browser handles it + } else if (utils.isFunction(data.getHeaders)) { + // Node.js FormData (like form-data package) + const formHeaders = data.getHeaders(); + // Only set safe headers to avoid overwriting security headers + const allowedHeaders = ['content-type', 'content-length']; + Object.entries(formHeaders).forEach(([key, val]) => { + if (allowedHeaders.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +} + diff --git a/node_modules/axios/lib/helpers/speedometer.js b/node_modules/axios/lib/helpers/speedometer.js new file mode 100644 index 00000000..3b3c6662 --- /dev/null +++ b/node_modules/axios/lib/helpers/speedometer.js @@ -0,0 +1,55 @@ +'use strict'; + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +export default speedometer; diff --git a/node_modules/axios/lib/helpers/spread.js b/node_modules/axios/lib/helpers/spread.js new file mode 100644 index 00000000..2e72fc88 --- /dev/null +++ b/node_modules/axios/lib/helpers/spread.js @@ -0,0 +1,28 @@ +'use strict'; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * const args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +export default function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} diff --git a/node_modules/axios/lib/helpers/throttle.js b/node_modules/axios/lib/helpers/throttle.js new file mode 100644 index 00000000..73e263d1 --- /dev/null +++ b/node_modules/axios/lib/helpers/throttle.js @@ -0,0 +1,44 @@ +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn(...args); + } + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs) + }, threshold - passed); + } + } + } + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +export default throttle; diff --git a/node_modules/axios/lib/helpers/toFormData.js b/node_modules/axios/lib/helpers/toFormData.js new file mode 100644 index 00000000..ec47d8ce --- /dev/null +++ b/node_modules/axios/lib/helpers/toFormData.js @@ -0,0 +1,223 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosError from '../core/AxiosError.js'; +// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored +import PlatformFormData from '../platform/node/classes/FormData.js'; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils.isPlainObject(thing) || utils.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData(obj, formData, options) { + if (!utils.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (PlatformFormData || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils.isSpecCompliantForm(formData); + + if (!utils.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (utils.isBoolean(value)) { + return value.toString(); + } + + if (!useBlob && utils.isBlob(value)) { + throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils.isArray(value) && isFlatArray(value)) || + ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils.forEach(value, function each(el, key) { + const result = !(utils.isUndefined(el) || el === null) && visitor.call( + formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +export default toFormData; diff --git a/node_modules/axios/lib/helpers/toURLEncodedForm.js b/node_modules/axios/lib/helpers/toURLEncodedForm.js new file mode 100644 index 00000000..ffa95ec9 --- /dev/null +++ b/node_modules/axios/lib/helpers/toURLEncodedForm.js @@ -0,0 +1,19 @@ +'use strict'; + +import utils from '../utils.js'; +import toFormData from './toFormData.js'; +import platform from '../platform/index.js'; + +export default function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), { + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + }, + ...options + }); +} diff --git a/node_modules/axios/lib/helpers/trackStream.js b/node_modules/axios/lib/helpers/trackStream.js new file mode 100644 index 00000000..95d60081 --- /dev/null +++ b/node_modules/axios/lib/helpers/trackStream.js @@ -0,0 +1,87 @@ + +export const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +} + +export const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +} + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +} + +export const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + } + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +} diff --git a/node_modules/axios/lib/helpers/validator.js b/node_modules/axios/lib/helpers/validator.js new file mode 100644 index 00000000..12705687 --- /dev/null +++ b/node_modules/axios/lib/helpers/validator.js @@ -0,0 +1,99 @@ +'use strict'; + +import {VERSION} from '../env/data.js'; +import AxiosError from '../core/AxiosError.js'; + +const validators = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } +} + +export default { + assertOptions, + validators +}; diff --git a/node_modules/axios/lib/platform/browser/classes/Blob.js b/node_modules/axios/lib/platform/browser/classes/Blob.js new file mode 100644 index 00000000..6c506c48 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/Blob.js @@ -0,0 +1,3 @@ +'use strict' + +export default typeof Blob !== 'undefined' ? Blob : null diff --git a/node_modules/axios/lib/platform/browser/classes/FormData.js b/node_modules/axios/lib/platform/browser/classes/FormData.js new file mode 100644 index 00000000..f36d31b2 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/FormData.js @@ -0,0 +1,3 @@ +'use strict'; + +export default typeof FormData !== 'undefined' ? FormData : null; diff --git a/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js b/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js new file mode 100644 index 00000000..b7dae953 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js @@ -0,0 +1,4 @@ +'use strict'; + +import AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js'; +export default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; diff --git a/node_modules/axios/lib/platform/browser/index.js b/node_modules/axios/lib/platform/browser/index.js new file mode 100644 index 00000000..08c206f3 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/index.js @@ -0,0 +1,13 @@ +import URLSearchParams from './classes/URLSearchParams.js' +import FormData from './classes/FormData.js' +import Blob from './classes/Blob.js' + +export default { + isBrowser: true, + classes: { + URLSearchParams, + FormData, + Blob + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; diff --git a/node_modules/axios/lib/platform/common/utils.js b/node_modules/axios/lib/platform/common/utils.js new file mode 100644 index 00000000..52a3186e --- /dev/null +++ b/node_modules/axios/lib/platform/common/utils.js @@ -0,0 +1,51 @@ +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +export { + hasBrowserEnv, + hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv, + _navigator as navigator, + origin +} diff --git a/node_modules/axios/lib/platform/index.js b/node_modules/axios/lib/platform/index.js new file mode 100644 index 00000000..860ba21a --- /dev/null +++ b/node_modules/axios/lib/platform/index.js @@ -0,0 +1,7 @@ +import platform from './node/index.js'; +import * as utils from './common/utils.js'; + +export default { + ...utils, + ...platform +} diff --git a/node_modules/axios/lib/platform/node/classes/FormData.js b/node_modules/axios/lib/platform/node/classes/FormData.js new file mode 100644 index 00000000..b07f9476 --- /dev/null +++ b/node_modules/axios/lib/platform/node/classes/FormData.js @@ -0,0 +1,3 @@ +import FormData from 'form-data'; + +export default FormData; diff --git a/node_modules/axios/lib/platform/node/classes/URLSearchParams.js b/node_modules/axios/lib/platform/node/classes/URLSearchParams.js new file mode 100644 index 00000000..fba58428 --- /dev/null +++ b/node_modules/axios/lib/platform/node/classes/URLSearchParams.js @@ -0,0 +1,4 @@ +'use strict'; + +import url from 'url'; +export default url.URLSearchParams; diff --git a/node_modules/axios/lib/platform/node/index.js b/node_modules/axios/lib/platform/node/index.js new file mode 100644 index 00000000..cd1ca0c4 --- /dev/null +++ b/node_modules/axios/lib/platform/node/index.js @@ -0,0 +1,38 @@ +import crypto from 'crypto'; +import URLSearchParams from './classes/URLSearchParams.js' +import FormData from './classes/FormData.js' + +const ALPHA = 'abcdefghijklmnopqrstuvwxyz' + +const DIGIT = '0123456789'; + +const ALPHABET = { + DIGIT, + ALPHA, + ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT +} + +const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { + let str = ''; + const {length} = alphabet; + const randomValues = new Uint32Array(size); + crypto.randomFillSync(randomValues); + for (let i = 0; i < size; i++) { + str += alphabet[randomValues[i] % length]; + } + + return str; +} + + +export default { + isNode: true, + classes: { + URLSearchParams, + FormData, + Blob: typeof Blob !== 'undefined' && Blob || null + }, + ALPHABET, + generateString, + protocols: [ 'http', 'https', 'file', 'data' ] +}; diff --git a/node_modules/axios/lib/utils.js b/node_modules/axios/lib/utils.js new file mode 100644 index 00000000..b464a623 --- /dev/null +++ b/node_modules/axios/lib/utils.js @@ -0,0 +1,863 @@ +"use strict"; + +import bind from "./helpers/bind.js"; + +// utils is a library of generic helper functions non-specific to axios + +const { toString } = Object.prototype; +const { getPrototypeOf } = Object; +const { iterator, toStringTag } = Symbol; + +const kindOf = ((cache) => (thing) => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type; +}; + +const typeOfTest = (type) => (thing) => typeof thing === type; + +/** + * Determine if a value is a non-null object + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const { isArray } = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest("undefined"); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return ( + val !== null && + !isUndefined(val) && + val.constructor !== null && + !isUndefined(val.constructor) && + isFunction(val.constructor.isBuffer) && + val.constructor.isBuffer(val) + ); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest("ArrayBuffer"); + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val); + } else { + result = val && val.buffer && isArrayBuffer(val.buffer); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest("string"); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction = typeOfTest("function"); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest("number"); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === "object"; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = (thing) => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== "object") { + return false; + } + + const prototype = getPrototypeOf(val); + return ( + (prototype === null || + prototype === Object.prototype || + Object.getPrototypeOf(prototype) === null) && + !(toStringTag in val) && + !(iterator in val) + ); +}; + +/** + * Determine if a value is an empty object (safely handles Buffers) + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an empty object, otherwise false + */ +const isEmptyObject = (val) => { + // Early return for non-objects or Buffers to prevent RangeError + if (!isObject(val) || isBuffer(val)) { + return false; + } + + try { + return ( + Object.keys(val).length === 0 && + Object.getPrototypeOf(val) === Object.prototype + ); + } catch (e) { + // Fallback for any other objects that might cause RangeError with Object.keys() + return false; + } +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest("Date"); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest("File"); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest("Blob"); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest("FileList"); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return ( + thing && + ((typeof FormData === "function" && thing instanceof FormData) || + (isFunction(thing.append) && + ((kind = kindOf(thing)) === "formdata" || + // detect form-data instance + (kind === "object" && + isFunction(thing.toString) && + thing.toString() === "[object FormData]")))) + ); +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest("URLSearchParams"); + +const [isReadableStream, isRequest, isResponse, isHeaders] = [ + "ReadableStream", + "Request", + "Response", + "Headers", +].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => + str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, { allOwnKeys = false } = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === "undefined") { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== "object") { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Buffer check + if (isBuffer(obj)) { + return; + } + + // Iterate over object keys + const keys = allOwnKeys + ? Object.getOwnPropertyNames(obj) + : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + if (isBuffer(obj)) { + return null; + } + + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" + ? self + : typeof window !== "undefined" + ? window + : global; +})(); + +const isContextDefined = (context) => + !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * const result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const { caseless, skipUndefined } = (isContextDefined(this) && this) || {}; + const result = {}; + const assignValue = (val, key) => { + // Skip dangerous property names to prevent prototype pollution + if (key === "__proto__" || key === "constructor" || key === "prototype") { + return; + } + + const targetKey = (caseless && findKey(result, key)) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else if (!skipUndefined || !isUndefined(val)) { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Object} [options] + * @param {Boolean} [options.allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, { allOwnKeys } = {}) => { + forEach( + b, + (val, key) => { + if (thisArg && isFunction(val)) { + Object.defineProperty(a, key, { + value: bind(val, thisArg), + writable: true, + enumerable: true, + configurable: true, + }); + } else { + Object.defineProperty(a, key, { + value: val, + writable: true, + enumerable: true, + configurable: true, + }); + } + }, + { allOwnKeys }, + ); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xfeff) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create( + superConstructor.prototype, + descriptors, + ); + Object.defineProperty(constructor.prototype, "constructor", { + value: constructor, + writable: true, + enumerable: false, + configurable: true, + }); + Object.defineProperty(constructor, "super", { + value: superConstructor.prototype, + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ( + (!propFilter || propFilter(prop, sourceObj, destObj)) && + !merged[prop] + ) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while ( + sourceObj && + (!filter || filter(sourceObj, destObj)) && + sourceObj !== Object.prototype + ); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = ((TypedArray) => { + // eslint-disable-next-line func-names + return (thing) => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest("HTMLFormElement"); + +const toCamelCase = (str) => { + return str + .toLowerCase() + .replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + }); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = ( + ({ hasOwnProperty }) => + (obj, prop) => + hasOwnProperty.call(obj, prop) +)(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest("RegExp"); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if ( + isFunction(obj) && + ["arguments", "caller", "callee"].indexOf(name) !== -1 + ) { + return false; + } + + const value = obj[name]; + + if (!isFunction(value)) return; + + descriptor.enumerable = false; + + if ("writable" in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error("Can not rewrite read-only method '" + name + "'"); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach((value) => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) + ? define(arrayOrString) + : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite((value = +value)) + ? value + : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!( + thing && + isFunction(thing.append) && + thing[toStringTag] === "FormData" && + thing[iterator] + ); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + //Buffer check + if (isBuffer(source)) { + return source; + } + + if (!("toJSON" in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest("AsyncFunction"); + +const isThenable = (thing) => + thing && + (isObject(thing) || isFunction(thing)) && + isFunction(thing.then) && + isFunction(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported + ? ((token, callbacks) => { + _global.addEventListener( + "message", + ({ source, data }) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, + false, + ); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + }; + })(`axios@${Math.random()}`, []) + : (cb) => setTimeout(cb); +})(typeof setImmediate === "function", isFunction(_global.postMessage)); + +const asap = + typeof queueMicrotask !== "undefined" + ? queueMicrotask.bind(_global) + : (typeof process !== "undefined" && process.nextTick) || _setImmediate; + +// ********************* + +const isIterable = (thing) => thing != null && isFunction(thing[iterator]); + +export default { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isEmptyObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable, +}; diff --git a/node_modules/axios/package.json b/node_modules/axios/package.json new file mode 100644 index 00000000..8dc8bb9e --- /dev/null +++ b/node_modules/axios/package.json @@ -0,0 +1,220 @@ +{ + "name": "axios", + "version": "1.13.5", + "description": "Promise based HTTP client for the browser and node.js", + "main": "./dist/node/axios.cjs", + "module": "./index.js", + "exports": { + ".": { + "types": { + "require": "./index.d.cts", + "default": "./index.d.ts" + }, + "bun": { + "require": "./dist/node/axios.cjs", + "default": "./index.js" + }, + "react-native": { + "require": "./dist/browser/axios.cjs", + "default": "./dist/esm/axios.js" + }, + "browser": { + "require": "./dist/browser/axios.cjs", + "default": "./index.js" + }, + "default": { + "require": "./dist/node/axios.cjs", + "default": "./index.js" + } + }, + "./lib/adapters/http.js": "./lib/adapters/http.js", + "./lib/adapters/xhr.js": "./lib/adapters/xhr.js", + "./unsafe/*": "./lib/*", + "./unsafe/core/settle.js": "./lib/core/settle.js", + "./unsafe/core/buildFullPath.js": "./lib/core/buildFullPath.js", + "./unsafe/helpers/isAbsoluteURL.js": "./lib/helpers/isAbsoluteURL.js", + "./unsafe/helpers/buildURL.js": "./lib/helpers/buildURL.js", + "./unsafe/helpers/combineURLs.js": "./lib/helpers/combineURLs.js", + "./unsafe/adapters/http.js": "./lib/adapters/http.js", + "./unsafe/adapters/xhr.js": "./lib/adapters/xhr.js", + "./unsafe/utils.js": "./lib/utils.js", + "./package.json": "./package.json", + "./dist/browser/axios.cjs": "./dist/browser/axios.cjs", + "./dist/node/axios.cjs": "./dist/node/axios.cjs" + }, + "type": "module", + "types": "index.d.ts", + "scripts": { + "test": "npm run test:node && npm run test:browser && npm run test:package", + "test:node": "npm run test:mocha", + "test:node:coverage": "c8 npm run test:mocha", + "test:browser": "npm run test:karma", + "test:package": "npm run test:eslint && npm run test:exports", + "test:eslint": "node bin/ssl_hotfix.js eslint lib/**/*.js", + "test:mocha": "node bin/ssl_hotfix.js mocha test/unit/**/*.js --timeout 30000 --exit", + "test:exports": "node bin/ssl_hotfix.js mocha test/module/test.js --timeout 30000 --exit", + "test:karma": "node ./bin/run-karma-tests.js", + "test:karma:firefox": "node bin/ssl_hotfix.js cross-env LISTEN_ADDR=:: Browsers=Firefox karma start karma.conf.cjs --single-run", + "test:karma:server": "node bin/ssl_hotfix.js cross-env karma start karma.conf.cjs", + "test:build:version": "node ./bin/check-build-version.js", + "start": "node ./sandbox/server.js", + "preversion": "gulp version", + "version": "npm run build && git add package.json", + "prepublishOnly": "npm run test:build:version", + "build": "gulp clear && cross-env NODE_ENV=production rollup -c -m", + "examples": "node ./examples/server.js", + "coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "fix": "eslint --fix lib/**/*.js", + "prepare": "husky install && npm run prepare:hooks", + "prepare:hooks": "npx husky set .husky/commit-msg \"npx commitlint --edit $1\"" + }, + "repository": { + "type": "git", + "url": "https://github.com/axios/axios.git" + }, + "keywords": [ + "xhr", + "http", + "ajax", + "promise", + "node", + "browser", + "fetch", + "rest", + "api", + "client" + ], + "author": "Matt Zabriskie", + "license": "MIT", + "bugs": { + "url": "https://github.com/axios/axios/issues" + }, + "homepage": "https://axios-http.com", + "devDependencies": { + "@babel/core": "^7.28.6", + "@babel/preset-env": "^7.28.6", + "@commitlint/cli": "^20.3.1", + "@commitlint/config-conventional": "^20.3.1", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "^15.1.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.1.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "abortcontroller-polyfill": "^1.7.8", + "auto-changelog": "^2.5.0", + "body-parser": "^1.20.4", + "c8": "^10.1.3", + "chalk": "^5.6.2", + "coveralls": "^3.1.1", + "cross-env": "^7.0.3", + "dev-null": "^0.1.1", + "es6-promise": "^4.2.8", + "eslint": "^8.57.1", + "express": "^4.22.1", + "formdata-node": "^5.0.1", + "formidable": "^2.1.5", + "fs-extra": "^10.1.0", + "get-stream": "^3.0.0", + "gulp": "^4.0.2", + "handlebars": "^4.7.8", + "husky": "^8.0.3", + "istanbul-instrumenter-loader": "^3.0.1", + "jasmine-core": "^2.99.1", + "karma": "^6.4.4", + "karma-chrome-launcher": "^3.2.0", + "karma-firefox-launcher": "^2.1.3", + "karma-jasmine": "^1.1.2", + "karma-jasmine-ajax": "^0.1.13", + "karma-rollup-preprocessor": "^7.0.8", + "karma-safari-launcher": "^1.0.0", + "karma-sauce-launcher": "^4.3.6", + "karma-sinon": "^1.0.5", + "karma-sourcemap-loader": "^0.4.0", + "memoizee": "^0.4.17", + "minimist": "^1.2.8", + "mocha": "^10.8.2", + "multer": "^1.4.4", + "pacote": "^20.0.0", + "pretty-bytes": "^6.1.1", + "rollup": "^2.79.2", + "rollup-plugin-auto-external": "^2.0.0", + "rollup-plugin-bundle-size": "^1.0.3", + "rollup-plugin-terser": "^7.0.2", + "selfsigned": "^3.0.1", + "sinon": "^4.5.0", + "stream-throttle": "^0.1.3", + "string-replace-async": "^3.0.2", + "tar-stream": "^3.1.7", + "typescript": "^4.9.5" + }, + "browser": { + "./lib/adapters/http.js": "./lib/helpers/null.js", + "./lib/platform/node/index.js": "./lib/platform/browser/index.js", + "./lib/platform/node/classes/FormData.js": "./lib/helpers/null.js" + }, + "react-native": { + "./lib/adapters/http.js": "./lib/helpers/null.js", + "./lib/platform/node/index.js": "./lib/platform/browser/index.js", + "./lib/platform/node/classes/FormData.js": "./lib/helpers/null.js" + }, + "jsdelivr": "dist/axios.min.js", + "unpkg": "dist/axios.min.js", + "typings": "./index.d.ts", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + }, + "bundlesize": [ + { + "path": "./dist/axios.min.js", + "threshold": "5kB" + } + ], + "contributors": [ + "Matt Zabriskie (https://github.com/mzabriskie)", + "Dmitriy Mozgovoy (https://github.com/DigitalBrainJS)", + "Nick Uraltsev (https://github.com/nickuraltsev)", + "Jay (https://github.com/jasonsaayman)", + "Emily Morehouse (https://github.com/emilyemorehouse)", + "Rubén Norte (https://github.com/rubennorte)", + "Justin Beckwith (https://github.com/JustinBeckwith)", + "Martti Laine (https://github.com/codeclown)", + "Xianming Zhong (https://github.com/chinesedfan)", + "Remco Haszing (https://github.com/remcohaszing)", + "Willian Agostini (https://github.com/WillianAgostini)", + "Rikki Gibson (https://github.com/RikkiGibson)", + "Ben Carp (https://github.com/carpben)" + ], + "sideEffects": false, + "commitlint": { + "rules": { + "header-max-length": [ + 2, + "always", + 130 + ] + }, + "extends": [ + "@commitlint/config-conventional" + ] + }, + "c8": { + "all": true, + "include": [ + "lib/**/*.js", + "lib/**/*.ts" + ], + "exclude": [ + "test", + "sandbox" + ], + "reporter": [ + "text", + "lcov", + "html" + ], + "report-dir": "./coverage" + } +} \ No newline at end of file diff --git a/node_modules/bare-addon-resolve/LICENSE b/node_modules/bare-addon-resolve/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/node_modules/bare-addon-resolve/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/bare-addon-resolve/README.md b/node_modules/bare-addon-resolve/README.md new file mode 100644 index 00000000..b33f097f --- /dev/null +++ b/node_modules/bare-addon-resolve/README.md @@ -0,0 +1,156 @@ +# bare-addon-resolve + +Low-level addon resolution algorithm for Bare. The algorithm is implemented as a generator function that yields either package manifests to be read or resolution candidates to be tested by the caller. As a convenience, the main export is a synchronous and asynchronous iterable that relies on package manifests being read by a callback. For asynchronous iteration, the callback may return promises which will be awaited before being passed to the generator. + +``` +npm i bare-addon-resolve +``` + +## Usage + +For synchronous resolution: + +```js +const resolve = require('bare-addon-resolve') + +function readPackage(url) { + // Read and parse `url` if it exists, otherwise `null` +} + +for (const resolution of resolve('./addon', new URL('file:///directory/'), readPackage)) { + console.log(resolution) +} +``` + +For asynchronous resolution: + +```js +const resolve = require('bare-addon-resolve') + +async function readPackage(url) { + // Read and parse `url` if it exists, otherwise `null` +} + +for await (const resolution of resolve('./addon', new URL('file:///directory/'), readPackage)) { + console.log(resolution) +} +``` + +## API + +#### `const resolver = resolve(specifier, parentURL[, options][, readPackage])` + +Resolve `specifier` relative to `parentURL`, which must be a WHATWG `URL` instance. `readPackage` is called with a `URL` instance for every package manifest to be read and must either return the parsed JSON package manifest, if it exists, or `null`. If `readPackage` returns a promise, synchronous iteration is not supported. + +Options include: + +```js +options = { + // A list of builtin addon specifiers. If matched, the protocol of the + // resolved URL will be `builtinProtocol`. + builtins: [], + // The protocol to use for resolved builtin addon specifiers. + builtinProtocol: 'builtin:', + // Whether or not addons linked ahead-of-time should be resolved. + linked: true, + // The protocol to use for addons linked ahead-of-time. + linkedProtocol: 'linked:', + // The supported import conditions. "default" is always recognized. + conditions: [], + // An array reference which will contain the matched conditions when yielding + // resolutions. + matchedConditions: [], + // The `-` combinations to look for when resolving dynamic + // addons. If empty, only builtin specifiers can be resolved. In Bare, + // pass `[Bare.Addon.host]`. + hosts: [], + // The file extensions to look for when resolving dynamic addons. + extensions: [], + // A map of preresolved imports with keys being serialized directory URLs and + // values being "imports" maps. + resolutions +} +``` + +#### `for (const resolution of resolver)` + +Synchronously iterate the addon resolution candidates. The resolved addon is the first candidate that exists as a file on the file system. + +#### `for await (const resolution of resolver)` + +Asynchronously iterate the addon resolution candidates. If `readPackage` returns promises, these will be awaited. The same comments as `for (const resolution of resolver)` apply. + +### Algorithm + +The following generator functions implement the resolution algorithm. The yielded values have the following shape: + +**Package manifest** + +```js +next.value = { + package: URL +} +``` + +If the package manifest identified by `next.value.package` exists, `generator.next()` must be passed the parsed JSON value of the manifest. If it does not exist, pass `null` instead. + +**Resolution candidate** + +```js +next.value = { + resolution: URL +} +``` + +If the addon identified by `next.value.resolution` exists, `generator.next()` may be passed `true` to signal that the resolution for the current set of conditions has been identified. If it does not exist, pass `false` instead. + +To drive the generator functions, a loop like the following can be used: + +```js +const generator = resolve.addon(specifier, parentURL) + +let next = generator.next() + +while (next.done !== true) { + const value = next.value + + if (value.package) { + // Read and parse `value.package` if it exists, otherwise `null` + let info + + next = generator.next(info) + } else { + const resolution = value.resolution + + // `true` if `resolution` was the correct candidate, otherwise `false` + let resolved + + next = generator.next(resolved) + } +} +``` + +Options are the same as `resolve()` for all functions. + +> [!WARNING] +> These functions are currently subject to change between minor releases. If using them directly, make sure to specify a tilde range (`~1.2.3`) when declaring the module dependency. + +#### `const generator = resolve.addon(specifier, parentURL[, options])` + +#### `const generator = resolve.url(url, parentURL[, options])` + +#### `const generator = resolve.package(packageSpecifier, packageVersion, parentURL[, options])` + +#### `const generator = resolve.packageSelf(packageName, packageSubpath, packageVersion, parentURL[, options])` + +#### `const generator = resolve.preresolved(directoryURL, resolutions[, options])` + +#### `const generator = resolve.file(filename, parentURL[, options])` + +#### `const generator = resolve.directory(dirname, version, parentURL[, options])` + +#### `const generator = resolve.linked(name, version[, options])` + +## License + +Apache-2.0 diff --git a/node_modules/bare-addon-resolve/index.d.ts b/node_modules/bare-addon-resolve/index.d.ts new file mode 100644 index 00000000..6b490cda --- /dev/null +++ b/node_modules/bare-addon-resolve/index.d.ts @@ -0,0 +1,85 @@ +import URL from 'bare-url' +import { constants, type Builtins, type Conditions, type ResolutionsMap } from 'bare-module-resolve' + +type JSON = string | number | boolean | JSON[] | { [key: string]: JSON } + +interface ResolveOptions { + builtinProtocol?: string + builtins?: Builtins + conditions?: Conditions + extensions?: string[] + host?: string + hosts?: string[] + linked?: boolean + linkedProtocol?: string + matchedConditions?: string[] + resolutions?: ResolutionsMap +} + +declare function resolve( + specifier: string, + parentURL: URL, + readPackage?: (url: URL) => JSON | null +): Iterable + +declare function resolve( + specifier: string, + parentURL: URL, + readPackage: (url: URL) => Promise +): AsyncIterable + +declare function resolve( + specifier: string, + parentURL: URL, + opts: ResolveOptions, + readPackage?: (url: URL) => JSON | null +): Iterable + +declare function resolve( + specifier: string, + parentURL: URL, + opts: ResolveOptions, + readPackage: (url: URL) => Promise +): AsyncIterable + +declare namespace resolve { + export { constants, type ResolveOptions } + + export type Resolver = Generator< + { resolution: URL } | { package: URL }, + number, + void | boolean | JSON | null + > + + export function addon(specifier: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function url(specifier: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function package( + packageSpecifier: string, + packageVersion: string, + parentURL: URL, + opts?: ResolveOptions + ): Resolver + + export function packageSelf( + packageName: string, + packageSubpath: string, + packageVersion: string, + parentURL: URL, + opts?: ResolveOptions + ): Resolver + + export function file(filename: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function directory( + dirname: string, + version: string, + parentURL: URL, + opts?: ResolveOptions + ): Resolver + + export function linked(name: string, version?: string, opts?: ResolveOptions): Resolver +} + +export = resolve diff --git a/node_modules/bare-addon-resolve/index.js b/node_modules/bare-addon-resolve/index.js new file mode 100644 index 00000000..c501b4dc --- /dev/null +++ b/node_modules/bare-addon-resolve/index.js @@ -0,0 +1,471 @@ +const resolve = require('bare-module-resolve') +const { Version } = require('bare-semver') +const errors = require('./lib/errors') + +module.exports = exports = function resolve(specifier, parentURL, opts, readPackage) { + if (typeof opts === 'function') { + readPackage = opts + opts = {} + } else if (typeof readPackage !== 'function') { + readPackage = defaultReadPackage + } + + return { + *[Symbol.iterator]() { + const generator = exports.addon(specifier, parentURL, opts) + + let next = generator.next() + + while (next.done !== true) { + const value = next.value + + if (value.package) { + next = generator.next(readPackage(value.package)) + } else { + next = generator.next(yield value.resolution) + } + } + + return next.value + }, + + async *[Symbol.asyncIterator]() { + const generator = exports.addon(specifier, parentURL, opts) + + let next = generator.next() + + while (next.done !== true) { + const value = next.value + + if (value.package) { + next = generator.next(await readPackage(value.package)) + } else { + next = generator.next(yield value.resolution) + } + } + + return next.value + } + } +} + +function defaultReadPackage() { + return null +} + +const { UNRESOLVED, YIELDED, RESOLVED } = resolve.constants + +exports.constants = { + UNRESOLVED, + YIELDED, + RESOLVED +} + +exports.addon = function* (specifier, parentURL, opts = {}) { + const { resolutions = null } = opts + + if (exports.startsWithWindowsDriveLetter(specifier)) { + specifier = '/' + specifier + } + + let status + + if (resolutions) { + status = yield* resolve.preresolved(specifier, resolutions, parentURL, opts) + + if (status) return status + } + + status = yield* exports.url(specifier, parentURL, opts) + + if (status) return status + + let version = null + + const i = specifier.lastIndexOf('@') + + if (i > 0) { + version = specifier.substring(i + 1) + + try { + Version.parse(version) + + specifier = specifier.substring(0, i) + } catch { + version = null + } + } + + if ( + specifier === '.' || + specifier === '..' || + specifier[0] === '/' || + specifier[0] === '\\' || + specifier.startsWith('./') || + specifier.startsWith('.\\') || + specifier.startsWith('../') || + specifier.startsWith('..\\') + ) { + status = yield* exports.file(specifier, parentURL, opts) + + if (status === RESOLVED) return status + + return yield* exports.directory(specifier, version, parentURL, opts) + } + + return yield* exports.package(specifier, version, parentURL, opts) +} + +exports.url = function* (url, parentURL, opts = {}) { + let resolution + try { + resolution = new URL(url) + } catch { + return UNRESOLVED + } + + const resolved = yield { resolution } + + return resolved ? RESOLVED : YIELDED +} + +exports.package = function* (packageSpecifier, packageVersion, parentURL, opts = {}) { + if (packageSpecifier === '') { + throw errors.INVALID_ADDON_SPECIFIER( + `Addon specifier '${packageSpecifier}' is not a valid package name` + ) + } + + let packageName + + if (packageSpecifier[0] !== '@') { + packageName = packageSpecifier.split('/', 1).join() + } else { + if (!packageSpecifier.includes('/')) { + throw errors.INVALID_ADDON_SPECIFIER( + `Addon specifier '${packageSpecifier}' is not a valid package name` + ) + } + + packageName = packageSpecifier.split('/', 2).join('/') + } + + if (packageName[0] === '.' || packageName.includes('\\') || packageName.includes('%')) { + throw errors.INVALID_ADDON_SPECIFIER( + `Addon specifier '${packageSpecifier}' is not a valid package name` + ) + } + + const packageSubpath = '.' + packageSpecifier.substring(packageName.length) + + const status = yield* exports.packageSelf( + packageName, + packageSubpath, + packageVersion, + parentURL, + opts + ) + + if (status) return status + + parentURL = new URL(parentURL.href) + + do { + const packageURL = new URL('node_modules/' + packageName + '/', parentURL) + + parentURL.pathname = parentURL.pathname.substring(0, parentURL.pathname.lastIndexOf('/')) + + const info = yield { package: new URL('package.json', packageURL) } + + if (info) { + return yield* exports.directory(packageSubpath, packageVersion, packageURL, opts) + } + } while (parentURL.pathname !== '' && parentURL.pathname !== '/') + + return UNRESOLVED +} + +exports.packageSelf = function* ( + packageName, + packageSubpath, + packageVersion, + parentURL, + opts = {} +) { + for (const packageURL of resolve.lookupPackageScope(parentURL, opts)) { + const info = yield { package: packageURL } + + if (info) { + if (info.name === packageName) { + return yield* exports.directory(packageSubpath, packageVersion, packageURL, opts) + } + + break + } + } + + return UNRESOLVED +} + +exports.lookupPrebuildsScope = function* lookupPrebuildsScope(url, opts = {}) { + const scopeURL = new URL(url.href) + + do { + yield new URL('prebuilds/', scopeURL) + + scopeURL.pathname = scopeURL.pathname.substring(0, scopeURL.pathname.lastIndexOf('/')) + + if ( + scopeURL.pathname.length === 3 && + exports.isWindowsDriveLetter(scopeURL.pathname.substring(1)) + ) { + break + } + } while (scopeURL.pathname !== '' && scopeURL.pathname !== '/') +} + +exports.file = function* (filename, parentURL, opts = {}) { + if ( + filename === '.' || + filename === '..' || + filename[filename.length - 1] === '/' || + filename[filename.length - 1] === '\\' + ) { + return UNRESOLVED + } + + if (parentURL.protocol === 'file:' && /%2f|%5c/i.test(filename)) { + throw errors.INVALID_ADDON_SPECIFIER(`Addon specifier '${filename}' is invalid`) + } + + const { extensions = [] } = opts + + let status = UNRESOLVED + + for (let ext of extensions) { + if (filename.endsWith(ext)) ext = '' + + if (yield { resolution: new URL(filename + ext, parentURL) }) { + return RESOLVED + } + + status = YIELDED + } + + return status +} + +exports.directory = function* (dirname, version, parentURL, opts = {}) { + const { + host = null, // Shorthand for single host resolution + hosts = host !== null ? [host] : [], + builtins = [], + matchedConditions = [] + } = opts + + let directoryURL + + if (dirname[dirname.length - 1] === '/' || dirname[dirname.length - 1] === '\\') { + directoryURL = new URL(dirname, parentURL) + } else { + directoryURL = new URL(dirname + '/', parentURL) + } + + const unversioned = version === null + + let name = null + + const info = yield { package: new URL('package.json', directoryURL) } + + if (info) { + if (typeof info.name === 'string' && info.name !== '') { + if (info.name.includes('__')) { + throw errors.INVALID_PACKAGE_NAME(`Package name '${info.name}' is invalid`) + } + + name = info.name.replace(/\//g, '__').replace(/^@/, '') + } else { + return UNRESOLVED + } + + if (typeof info.version === 'string' && info.version !== '') { + if (version !== null && info.version !== version) return UNRESOLVED + + version = info.version + } + } else { + return UNRESOLVED + } + + let status + + status = yield* resolve.builtinTarget(name, version, builtins, opts) + + if (status) return status + + for (const prebuildsURL of exports.lookupPrebuildsScope(directoryURL, opts)) { + status = UNRESOLVED + + for (const host of hosts) { + const conditions = host.split('-') + + const universal = supportsUniversalPrebuilds(host) + ? conditions.with(1, 'universal').join('-') + : null + + matchedConditions.push(...conditions) + + if (version !== null) { + status |= yield* exports.file(host + '/' + name + '@' + version, prebuildsURL, opts) + + if (universal) { + status |= yield* exports.file(universal + '/' + name + '@' + version, prebuildsURL, opts) + } + } + + if (unversioned) { + status |= yield* exports.file(host + '/' + name, prebuildsURL, opts) + + if (universal) { + status |= yield* exports.file(universal + '/' + name, prebuildsURL, opts) + } + } + + for (const _ of conditions) matchedConditions.pop() + } + + if (status === RESOLVED) return status + } + + return yield* exports.linked(name, version, opts) +} + +exports.linked = function* (name, version = null, opts = {}) { + const { + linked = true, + host = null, // Shorthand for single host resolution + hosts = host !== null ? [host] : [], + matchedConditions = [] + } = opts + + if (linked === false || hosts.length === 0) return UNRESOLVED + + let status = UNRESOLVED + + for (const host of hosts) { + const [platform = null] = host.split('-', 1) + + if (platform === null) continue + + matchedConditions.push(platform) + + status |= yield* platformArtefact(name, version, platform, opts) + + matchedConditions.pop() + } + + return status +} + +function* platformArtefact(name, version = null, platform, opts = {}) { + const { linkedProtocol = 'linked:' } = opts + + if (platform === 'darwin' || platform === 'ios') { + if (version !== null) { + if ( + yield { + resolution: new URL(`${linkedProtocol}${name}.${version}.framework/${name}.${version}`) + } + ) { + return RESOLVED + } + + if (platform === 'darwin') { + if ( + yield { + resolution: new URL(`${linkedProtocol}lib${name}.${version}.dylib`) + } + ) { + return RESOLVED + } + } + } + + if ( + yield { + resolution: new URL(`${linkedProtocol}${name}.framework/${name}`) + } + ) { + return RESOLVED + } + + if (platform === 'darwin') { + if ( + yield { + resolution: new URL(`${linkedProtocol}lib${name}.dylib`) + } + ) { + return RESOLVED + } + } + + return YIELDED + } + + if (platform === 'linux' || platform === 'android') { + if (version !== null) { + if ( + yield { + resolution: new URL(`${linkedProtocol}lib${name}.${version}.so`) + } + ) { + return RESOLVED + } + } + + if ( + yield { + resolution: new URL(`${linkedProtocol}lib${name}.so`) + } + ) { + return RESOLVED + } + + return YIELDED + } + + if (platform === 'win32') { + if (version !== null) { + if ( + yield { + resolution: new URL(`${linkedProtocol}${name}-${version}.dll`) + } + ) { + return RESOLVED + } + } + + if ( + yield { + resolution: new URL(`${linkedProtocol}${name}.dll`) + } + ) { + return RESOLVED + } + } + + return UNRESOLVED +} + +exports.isWindowsDriveLetter = resolve.isWindowsDriveLetter + +exports.startsWithWindowsDriveLetter = resolve.startsWithWindowsDriveLetter + +function supportsUniversalPrebuilds(host) { + return ( + host === 'darwin-arm64' || + host === 'darwin-x64' || + host === 'ios-arm64-simulator' || + host === 'ios-x64-simulator' + ) +} diff --git a/node_modules/bare-addon-resolve/lib/errors.d.ts b/node_modules/bare-addon-resolve/lib/errors.d.ts new file mode 100644 index 00000000..ecf2223c --- /dev/null +++ b/node_modules/bare-addon-resolve/lib/errors.d.ts @@ -0,0 +1,8 @@ +declare class AddonResolveError extends Error { + readonly code: string + + static INVALID_ADDON_SPECIFIER(msg: string): AddonResolveError + static INVALID_PACKAGE_NAME(msg: string): AddonResolveError +} + +export = AddonResolveError diff --git a/node_modules/bare-addon-resolve/lib/errors.js b/node_modules/bare-addon-resolve/lib/errors.js new file mode 100644 index 00000000..96b66378 --- /dev/null +++ b/node_modules/bare-addon-resolve/lib/errors.js @@ -0,0 +1,30 @@ +module.exports = class AddonResolveError extends Error { + constructor(msg, code, fn = AddonResolveError) { + super(`${code}: ${msg}`) + this.code = code + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, fn) + } + } + + get name() { + return 'AddonResolveError' + } + + static INVALID_ADDON_SPECIFIER(msg) { + return new AddonResolveError( + msg, + 'INVALID_ADDON_SPECIFIER', + AddonResolveError.INVALID_ADDON_SPECIFIER + ) + } + + static INVALID_PACKAGE_NAME(msg) { + return new AddonResolveError( + msg, + 'INVALID_PACKAGE_NAME', + AddonResolveError.INVALID_PACKAGE_NAME + ) + } +} diff --git a/node_modules/bare-addon-resolve/package.json b/node_modules/bare-addon-resolve/package.json new file mode 100644 index 00000000..ce86b15a --- /dev/null +++ b/node_modules/bare-addon-resolve/package.json @@ -0,0 +1,52 @@ +{ + "name": "bare-addon-resolve", + "version": "1.10.0", + "description": "Low-level addon resolution algorithm for Bare", + "exports": { + "./package": "./package.json", + ".": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "./errors": { + "types": "./lib/errors.d.ts", + "default": "./lib/errors.js" + } + }, + "files": [ + "index.js", + "index.d.ts", + "lib" + ], + "scripts": { + "test": "prettier . --check && bare test.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/holepunchto/bare-addon-resolve.git" + }, + "author": "Holepunch", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/holepunchto/bare-addon-resolve/issues" + }, + "homepage": "https://github.com/holepunchto/bare-addon-resolve#readme", + "dependencies": { + "bare-module-resolve": "^1.10.0", + "bare-semver": "^1.0.0" + }, + "devDependencies": { + "bare-url": "^2.1.3", + "brittle": "^3.2.1", + "prettier": "^3.3.3", + "prettier-config-holepunch": "^2.0.0" + }, + "peerDependencies": { + "bare-url": "*" + }, + "peerDependenciesMeta": { + "bare-url": { + "optional": true + } + } +} diff --git a/node_modules/bare-module-resolve/LICENSE b/node_modules/bare-module-resolve/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/node_modules/bare-module-resolve/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/bare-module-resolve/README.md b/node_modules/bare-module-resolve/README.md new file mode 100644 index 00000000..e6f8f454 --- /dev/null +++ b/node_modules/bare-module-resolve/README.md @@ -0,0 +1,352 @@ +# bare-module-resolve + +Low-level module resolution algorithm for Bare. The algorithm is implemented as a generator function that yields either package manifests to be read or resolution candidates to be tested by the caller. As a convenience, the main export is a synchronous and asynchronous iterable that relies on package manifests being read by a callback. For asynchronous iteration, the callback may return promises which will be awaited before being passed to the generator. + +``` +npm i bare-module-resolve +``` + +## Usage + +For synchronous resolution: + +```js +const resolve = require('bare-module-resolve') + +function readPackage(url) { + // Read and parse `url` if it exists, otherwise `null` +} + +for (const resolution of resolve('./file.js', new URL('file:///directory/'), readPackage)) { + console.log(resolution) +} +``` + +For asynchronous resolution: + +```js +const resolve = require('bare-module-resolve') + +async function readPackage(url) { + // Read and parse `url` if it exists, otherwise `null` +} + +for await (const resolution of resolve('./file.js', new URL('file:///directory/'), readPackage)) { + console.log(resolution) +} +``` + +## API + +#### `const resolver = resolve(specifier, parentURL[, options][, readPackage])` + +Resolve `specifier` relative to `parentURL`, which must be a WHATWG `URL` instance. `readPackage` is called with a `URL` instance for every package manifest to be read and must either return the parsed JSON package manifest, if it exists, or `null`. If `readPackage` returns a promise, synchronous iteration is not supported. + +Options include: + +```js +options = { + // A default "imports" map to apply to all specifiers. Follows the same + // syntax and rules as the "imports" property defined in `package.json`. + imports, + // A list of builtin module specifiers. If matched, the protocol of the + // resolved URL will be `builtinProtocol`. + builtins: [], + // The protocol to use for resolved builtin module specifiers. + builtinProtocol: 'builtin:', + // A list of module specifiers whose resolution should be deferred. If matched, + // the protocol of the resolved URL will be `deferredProtocol`. + defer: [], + // The protocol to use for resolved deferred module specifiers. + deferredProtocol: 'deferred:', + // The supported import conditions. "default" is always recognized. + conditions: [], + // An array reference which will contain the matched conditions when yielding + // resolutions. + matchedConditions: [], + // The supported engine versions. + engines: {}, + // The file extensions to look for. Must be provided to support extensionless + // specifier resolution and directory support, such as resolving './foo' to + // './foo.js' or './foo/index.js'. + extensions: [], + // A map of preresolved imports with keys being serialized parent URLs and + // values being "imports" maps. + resolutions +} +``` + +#### `for (const resolution of resolver)` + +Synchronously iterate the module resolution candidates. The resolved module is the first candidate that exists, either as a file on a file system, a resource at a URL, or something else entirely. + +#### `for await (const resolution of resolver)` + +Asynchronously iterate the module resolution candidates. If `readPackage` returns promises, these will be awaited. The same comments as `for (const resolution of resolver)` apply. + +### Algorithm + +The following generator functions implement the resolution algorithm, which has been adapted from the Node.js resolution algorithms for CommonJS and ES modules. Unlike Node.js, Bare uses the same resolution algorithm for both module formats. The yielded values have the following shape: + +**Package manifest** + +```js +next.value = { + package: URL +} +``` + +If the package manifest identified by `next.value.package` exists, `generator.next()` must be passed the parsed JSON value of the manifest. If it does not exist, pass `null` instead. + +**Resolution candidate** + +```js +next.value = { + resolution: URL +} +``` + +If the module identified by `next.value.resolution` exists, `generator.next()` may be passed `true` to signal that the resolution for the current set of conditions has been identified. If it does not exist, pass `false` instead. + +To drive the generator functions, a loop like the following can be used: + +```js +const generator = resolve.module(specifier, parentURL) + +let next = generator.next() + +while (next.done !== true) { + const value = next.value + + if (value.package) { + // Read and parse `value.package` if it exists, otherwise `null` + let info + + next = generator.next(info) + } else { + const resolution = value.resolution + + // `true` if `resolution` was the correct candidate, otherwise `false` + let resolved + + next = generator.next(resolved) + } +} +``` + +Options are the same as `resolve()` for all functions. + +> [!WARNING] +> These functions are currently subject to change between minor releases. If using them directly, make sure to specify a tilde range (`~1.2.3`) when declaring the module dependency. + +#### `const generator = resolve.module(specifier, parentURL[, options])` + +1. If `specifier` [starts with a Windows drive letter](https://url.spec.whatwg.org/#start-with-a-windows-drive-letter): + 1. Prepend `/` to `specifier`. +2. If `options.resolutions` is set: + 1. If `preresolved(specifier, options.resolutions, parentURL, options)` yields, return. +3. If `url(specifier, parentURL, options)` yields, return. +4. If `packageImports(specifier, parentURL, options)` yields, return. +5. If `specifier` equals `.` or `..`, or if `specifier` starts with `/`, `\`, `./`, `.\`, `../`, or `..\`: + 1. If `options.imports` is set: + 1. If `packageImportsExports(specifier, options.imports, parentURL, true, options)` yields, return. + 2. If `deferred(specifier, options)` yields, return. + 3. If `file(specifier, parentURL, false, options)` resolves, return. + 4. Return `directory(specifier, parentURL, options)`. +6. Return `package(specifier, parentURL, options)`. + +#### `const generator = resolve.url(url, parentURL[, options])` + +1. If `url` is not a valid URL, return. +2. If `options.imports` is set: + 1. If `packageImportsExports(url.href, options.imports, parentURL, true, options)` yields, return. +3. If `url.protocol` equals `options.deferredProtocol`: + 1. Let `specifier` be `url.pathname`. + 2. If `options.resolutions` is set: + 1. Let `imports` be `options.resolutions[parentURL]`. + 2. If `imports` is a non-`null` object: + 1. Set `imports[specifier]` to `null`. + 3. Return `module(specifier, parentURL, options)`. +4. If `url.protocol` equals `node:`: + 1. Let `specifier` be `url.pathname`. + 2. If `specifier` equals `.` or `..`, or if `specifier` starts with `/`, `\`, `./`, `.\`, `../`, or `..\`, throw. + 3. Return `package(specifier, parentURL, options)`. +5. Yield `url`. + +#### `const generator = resolve.preresolved(specifier, resolutions, parentURL[, options])` + +1. Let `imports` be `resolutions[parentURL]`. +2. If `imports` is a non-`null` object: + 1. Return `packageImportsExports(specifier, imports, parentURL, true, options)`. + +#### `const generator = resolve.deferred(specifier[, options])` + +1. If `options.defer` includes `specifier`: + 1. Yield `options.deferredProtocol` concatenated with `specifier` and return. + +#### `const generator = resolve.package(packageSpecifier, parentURL[, options])` + +1. If `packageSpecifier` is the empty string, throw. +2. If `packageSpecifier` does not start with `@`: + 1. Set `packageName` to the substring of `packageSpecifier` until the first `/` or the end of the string. +3. Let `packageName` be `undefined`. +4. Otherwise: + 1. If `packageSpecifier` does not include `/`, throw. + 2. Set `packageName` to the substring of `packageSpecifier` until the second `/` or the end of the string. +5. If `packageName` starts with `.` or includes `\` or `%`, throw. +6. If `builtinTarget(packageSpecifier, null, options.builtins, options)` yields, return. +7. If `deferred(packageSpecifier, options)` yields, return. +8. Let `packageSubpath` be `.` concatenated with the substring of `packageSpecifier` from the position at the length of `packageName`. +9. If `packageSelf(packageName, packageSubpath, parentURL, options)` yields, return. +10. For each value `packageURL` of `lookupPackageRoot(packageName, parentURL, options)`: + 1. Let `info` be the result of yielding `packageURL`. + 2. If `info` is not `null`: + 1. If `info.engines` is set: + 1. Call `validateEngines(packageURL, info.engines, options)`. + 2. If `info.exports` is set: + 1. Return `packageExports(packageURL, packageSubpath, info.exports, options)`. + 3. If `packageSubpath` is `.`: + 1. If `info.main` is a non-empty string: + 1. Set `packageSubpath` to `info.main`. + 2. Otherwise: + 1. Return `file('index', packageURL, true, options)`. + 4. If `file(packageSubpath, packageURL, false, options)` resolves, return. + 5. Return `directory(packageSubpath, packageURL, options)`. + +#### `const generator = resolve.packageSelf(packageName, packageSubpath, parentURL[, options])` + +1. For each value `packageURL` of `lookupPackageScope(parentURL, options)`: + 1. Let `info` be the result of yielding `packageURL`. + 2. If `info` is not `null`: + 1. If `info.name` does not equal `packageName`, return. + 2. If `info.exports` is set: + 1. Return `packageExports(packageURL, packageSubpath, info.exports, options)`. + 3. If `packageSubpath` is `.`: + 1. If `info.main` is a non-empty string: + 1. Set `packageSubpath` to `info.main`. + 2. Otherwise: + 1. Return `file('index', packageURL, true, options)`. + 4. If `file(packageSubpath, packageURL, false, options)` resolves, return. + 5. Return `directory(packageSubpath, packageURL, options)`. + +#### `const generator = resolve.packageExports(packageURL, subpath, exports[, options])` + +1. If `subpath` is `.`: + 1. Let `mainExport` be `undefined`. + 2. If `exports` is a string or an array: + 1. Set `mainExport` to `exports`. + 3. If `exports` is a non-`null` object: + 1. If some keys of `exports` start with `.`: + 1. If `.` is a key of `exports`: + 1. Set `mainExport` to `exports['.']`. + 2. Otherwise: + 1. Set `mainExport` to `exports`. + 4. If `mainExport` is not `undefined`: + 1. If `packageTarget(packageURL, mainExport, null, false, options)` yields, return. +2. Otherwise, if `exports` is a non-`null` object: + 1. If every key of `exports` starts with `.`: + 1. If `packageImportsExports(subpath, exports, packageURL, false, options)` yields, return. +3. Throw. + +#### `const generator = resolve.packageImports(specifier, parentURL[, options])` + +1. If `specifier` is `#` or starts with `#/`, throw. +2. For each value `packageURL` of `lookupPackageScope(parentURL, options)`: + 1. Let `info` be the result of yielding `packageURL`. + 2. If `info` is not `null`: + 1. If `info.imports` is set: + 1. If `packageImportsExports(specifier, info.imports, packageURL, true, options)` yields, return. + 2. If specifier starts with `#`, throw. + 3. Return. +3. If `options.imports` is set: + 1. If `packageImportsExports(url.href, options.imports, parentURL, true, options)` yields, return. + +#### `const generator = resolve.packageImportsExports(matchKey, matchObject, packageURL, isImports[, options])` + +1. If `matchKey` is a key of `matchObject` and `matchKey` does not include `*`: + 1. Let `target` be `matchObject[matchKey]`. + 2. Return `packageTarget(packageURL, target, null, isImports, options)`. +2. Let `expansionKeys` be the keys of `matchObject` that include `*` sorted by `patternKeyCompare`. +3. For each value `expansionKey` of `expansionKeys`: + 1. Let `patternBase` be the substring of `expansionKey` until the first `*`. + 2. If `matchKey` starts with but isn't equal to `patternBase`: + 1. Let `patternTrailer` be the substring of `expansionKey` from the position at the index after the first `*`. + 2. If `patternTrailer` is the empty string, or if `matchKey` ends with `patternTrailer` and the length of `matchKey` is greater than or equal to the length of `expansionKey`: + 1. Let `target` be `matchObject[expansionKey]`. + 2. Let `patternMatch` be the substring of `matchKey` from the position at the length of `patternBase` until the length of `matchKey` minus the length of `patternTrailer`. + 3. Return `packageTarget(packageURL, target, patternMatch, isImports, options)`. + +#### `const generator = resolve.packageTarget(packageURL, target, patternMatch, isImports[, options])` + +1. If `target` is a string: + 1. If `target` does not start with `./` and `isImports` is `false`, throw. + 2. If `patternMatch` is not `null`: + 1. Replace every instance of `*` in `target` with `patternMatch`. + 3. If `url(target, packageURL, options)` yields, return. + 4. If `target` equals `.` or `..`, or if `target` starts with `/`, `./`, or `../`: + 1. Yield the resolution of `target` relative to `packageURL` and return. + 5. Return `package(target, packageURL, options)`. +2. If `target` is an array: + 1. For each value `targetValue` of `target`: + 1. If `packageTarget(packageURL, targetValue, patternMatch, isImports, options)` yields, return. +3. If `target` is a non-`null` object: + 1. For each key `condition` of `target`: + 1. If `condition` equals `default` or if `options.conditions` includes `condition`: + 1. Let `targetValue` be `target[condition]`. + 2. Return `packageTarget(packageURL, targetValue, patternMatch, isImports, options)`. + +#### `const generator = resolve.builtinTarget(packageSpecifier, packageVersion, target[, options])` + +1. If `target` is a string: + 1. If `target` does not start with `@`: + 1. Let `targetName` be the substring of `target` until the first `@` or the end of the string. + 2. Let `targetVersion` be the substring of `target` from the character following the first `@` and to the end of string, or `null` if no such substring exists. + 2. Otherwise: + 1. Let `targetName` be the substring of `target` until the second `@` or the end of the string. + 2. Let `targetVersion` be the substring of `target` from the character following the second `@` and to the end of string, or `null` if no such substring exists. + 3. If `packageSpecifier` equals `targetName`: + 1. If `packageVersion` is `null` and `targetVersion` is `null`: + 1. Yield `options.builtinProtocol` concatenated with `packageSpecifier` and return. + 2. Let `version` be `null`. + 3. If `packageVersion` is `null`, let `version` be `targetVersion`. + 4. Otherwise, if `targetVersion` is either `null` or equals `packageVersion`, let `version` be `packageVersion` + 5. If `version` is not `null`: + 1. Yield `options.builtinProtocol` concatenated with `packageSpecifier`, `@`, and `version` and return. +2. If `target` is an array: + 1. For each value `targetValue` of `target`: + 1. If `builtinTarget(packageSpecifier, packageVersion, targetValue, options)` yields, return. +3. If `target` is a non-`null` object: + 1. For each key `condition` of `target`: + 1. If `condition` equals `default` or if `options.conditions` includes `condition`: + 1. Let `targetValue` be `target[condition]`. + 2. Return `builtinTarget(packageSpecifier, packageVersion, targetValue, options)`. + +#### `const generator = resolve.file(filename, parentURL, isIndex[, options])` + +1. If `filename` equals `.` or `..`, or if `filename` ends with `/` or `\`, return. +2. If `parentURL` is a `file:` URL and `filename` includes encoded `/` or `\`, throw. +3. If `isIndex` is `false`: + 1. Yield the resolution of `filename` relative to `parentURL`. +4. For each value `ext` of `options.extensions`: + 1. If `filename` ends with `ext`, continue. + 2. Yield the resolution of `filename` concatenated with `ext` relative to `parentURL`. + +#### `const generator = resolve.directory(dirname, parentURL[, options])` + +1. Let `directoryURL` be `undefined`. +2. If `dirname` ends with `/` or `\`: + 1. Set `directoryURL` to the resolution of `dirname` relative to `parentURL`. +3. Otherwise: + 1. Set `directoryURL` to the resolution of `dirname` concatenated with `/` relative to `parentURL`. +4. Let `info` be the result of yielding the resolution of `package.json` relative to `directoryURL`. +5. If `info` is not `null`: + 1. If `info.exports` is set: + 1. Return `packageExports(directoryURL, '.', info.exports, options)`. + 2. If `info.main` is a non-empty string: + 1. If `file(info.main, directoryURL, false, options)` resolves, return. + 2. Return `directory(info.main, directoryURL, options)`. +6. Return `file('index', directoryURL, true, options)`. + +## License + +Apache-2.0 diff --git a/node_modules/bare-module-resolve/index.d.ts b/node_modules/bare-module-resolve/index.d.ts new file mode 100644 index 00000000..c3a6f900 --- /dev/null +++ b/node_modules/bare-module-resolve/index.d.ts @@ -0,0 +1,147 @@ +import URL from 'bare-url' + +type ConditionalSpecifier = + | string + | ConditionalSpecifier[] + | { [condition: string]: ConditionalSpecifier } + +type ImportsMap = { [specifier: string]: ConditionalSpecifier } + +type ExportsMap = ImportsMap + +type ResolutionsMap = { [href: string]: ImportsMap } + +type Builtins = ConditionalSpecifier[] + +type Conditions = string[] | Conditions[] + +type Engines = { [name: string]: string } + +type JSON = string | number | boolean | JSON[] | { [key: string]: JSON } + +interface ResolveOptions { + builtinProtocol?: string + builtins?: Builtins + conditions?: Conditions + defer?: string[] + deferredProtocol?: string + engines?: Engines + extensions?: string[] + imports?: ImportsMap + matchedConditions?: string[] + resolutions?: ResolutionsMap +} + +declare function resolve( + specifier: string, + parentURL: URL, + readPackage?: (url: URL) => JSON | null +): Iterable + +declare function resolve( + specifier: string, + parentURL: URL, + readPackage: (url: URL) => Promise +): AsyncIterable + +declare function resolve( + specifier: string, + parentURL: URL, + opts: ResolveOptions, + readPackage?: (url: URL) => JSON | null +): Iterable + +declare function resolve( + specifier: string, + parentURL: URL, + opts: ResolveOptions, + readPackage: (url: URL) => Promise +): AsyncIterable + +declare namespace resolve { + export { + type ConditionalSpecifier, + type ImportsMap, + type ExportsMap, + type ResolutionsMap, + type Builtins, + type Conditions, + type Engines, + type ResolveOptions + } + + export const constants: { + UNRESOLVED: number + YIELDED: number + RESOLVED: number + } + + export type Resolver = Generator< + { package: URL } | { resolution: URL }, + number, + void | boolean | JSON | null + > + + export function module(specifier: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function url(url: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function preresolved( + specifier: string, + resolutions: ResolutionsMap, + parentURL: URL, + opts?: ResolveOptions + ): Resolver + + export function package(packageSpecifier: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function packageSelf( + packageName: string, + packageSubpath: string, + parentURL: URL, + opts?: ResolveOptions + ): Resolver + + export function packageExports( + packageURL: URL, + subpath: string, + packageExports: ExportsMap, + opts?: ResolveOptions + ): Resolver + + export function packageImports(specifier: string, parentURL: URL, opts?: ResolveOptions): Resolver + + export function packageImportsExports( + matchKey: string, + matchObject: ImportsMap | ExportsMap, + packageURL: URL, + isImports: boolean, + opts?: ResolveOptions + ): Resolver + + export function packageTarget( + packageURL: URL, + target: ConditionalSpecifier, + patternMatch: string, + isImports: boolean, + opts?: ResolveOptions + ): Resolver + + export function builtinTarget( + packageSpecifier: string, + packageVersion: string, + target: ConditionalSpecifier, + opts?: ResolveOptions + ): Resolver + + export function file( + filename: string, + parentURL: URL, + isIndex: boolean, + opts?: ResolveOptions + ): Resolver + + export function directory(dirname: string, parentURL: URL, opts?: ResolveOptions): Resolver +} + +export = resolve diff --git a/node_modules/bare-module-resolve/index.js b/node_modules/bare-module-resolve/index.js new file mode 100644 index 00000000..abcc28fc --- /dev/null +++ b/node_modules/bare-module-resolve/index.js @@ -0,0 +1,796 @@ +const { satisfies } = require('bare-semver') +const errors = require('./lib/errors') + +module.exports = exports = function resolve(specifier, parentURL, opts, readPackage) { + if (typeof opts === 'function') { + readPackage = opts + opts = {} + } else if (typeof readPackage !== 'function') { + readPackage = defaultReadPackage + } + + return { + *[Symbol.iterator]() { + const generator = exports.module(specifier, parentURL, opts) + + let next = generator.next() + + while (next.done !== true) { + const value = next.value + + if (value.package) { + next = generator.next(readPackage(value.package)) + } else { + next = generator.next(yield value.resolution) + } + } + + return next.value + }, + + async *[Symbol.asyncIterator]() { + const generator = exports.module(specifier, parentURL, opts) + + let next = generator.next() + + while (next.done !== true) { + const value = next.value + + if (value.package) { + next = generator.next(await readPackage(value.package)) + } else { + next = generator.next(yield value.resolution) + } + } + + return next.value + } + } +} + +function defaultReadPackage() { + return null +} + +// No resolution candidate was yielded +const UNRESOLVED = 0x0 +// At least 1 resolution candidate was yielded +const YIELDED = 0x1 +// At least 1 resolution candidate was yielded and resolved +const RESOLVED = YIELDED | 0x2 + +exports.constants = { + UNRESOLVED, + YIELDED, + RESOLVED +} + +exports.module = function* (specifier, parentURL, opts = {}) { + const { resolutions = null, imports = null } = opts + + if (exports.startsWithWindowsDriveLetter(specifier)) { + specifier = '/' + specifier + } + + let status + + if (resolutions) { + status = yield* exports.preresolved(specifier, resolutions, parentURL, opts) + + if (status) return status + } + + status = yield* exports.url(specifier, parentURL, opts) + + if (status) return status + + status = yield* exports.packageImports(specifier, parentURL, opts) + + if (status) return status + + if ( + specifier === '.' || + specifier === '..' || + specifier[0] === '/' || + specifier[0] === '\\' || + specifier.startsWith('./') || + specifier.startsWith('.\\') || + specifier.startsWith('../') || + specifier.startsWith('..\\') + ) { + if (imports) { + status = yield* exports.packageImportsExports(specifier, imports, parentURL, true, opts) + + if (status) return status + } + + status = yield* exports.deferred(specifier, opts) + + if (status) return status + + status = yield* exports.file(specifier, parentURL, false, opts) + + if (status === RESOLVED) return status + + return yield* exports.directory(specifier, parentURL, opts) + } + + return yield* exports.package(specifier, parentURL, opts) +} + +exports.url = function* (url, parentURL, opts = {}) { + const { imports = null, deferredProtocol = 'deferred:', resolutions = null } = opts + + let resolution + try { + resolution = new URL(url) + } catch { + return UNRESOLVED + } + + if (imports) { + const status = yield* exports.packageImportsExports( + resolution.href, + imports, + parentURL, + true, + opts + ) + + if (status) return status + } + + if (resolution.protocol === deferredProtocol) { + const specifier = resolution.pathname + + if (resolutions) { + const imports = resolutions[parentURL.href] + + if (typeof imports === 'object' && imports !== null) { + opts = { + ...opts, + resolutions: { ...resolutions, [parentURL.href]: { ...imports, [specifier]: null } } + } + } + } + + return yield* exports.module(specifier, parentURL, opts) + } + + if (resolution.protocol === 'node:') { + const specifier = resolution.pathname + + if ( + specifier === '.' || + specifier === '..' || + specifier[0] === '/' || + specifier.startsWith('./') || + specifier.startsWith('../') + ) { + throw errors.INVALID_MODULE_SPECIFIER(`Module specifier '${url}' is not a valid package name`) + } + + return yield* exports.package(specifier, parentURL, opts) + } + + const resolved = yield { resolution } + + return resolved ? RESOLVED : YIELDED +} + +exports.preresolved = function* (specifier, resolutions, parentURL, opts = {}) { + const imports = resolutions[parentURL.href] + + if (typeof imports === 'object' && imports !== null) { + return yield* exports.packageImportsExports(specifier, imports, parentURL, true, opts) + } + + return UNRESOLVED +} + +exports.deferred = function* (specifier, opts = {}) { + const { deferredProtocol = 'deferred:', defer = [] } = opts + + if (defer.includes(specifier)) { + const resolved = yield { resolution: new URL(deferredProtocol + specifier) } + + return resolved ? RESOLVED : YIELDED + } + + return UNRESOLVED +} + +exports.package = function* (packageSpecifier, parentURL, opts = {}) { + const { builtins = [] } = opts + + if (packageSpecifier === '') { + throw errors.INVALID_MODULE_SPECIFIER( + `Module specifier '${packageSpecifier}' is not a valid package name` + ) + } + + let packageName + + if (packageSpecifier[0] !== '@') { + packageName = packageSpecifier.split('/', 1).join() + } else { + if (!packageSpecifier.includes('/')) { + throw errors.INVALID_MODULE_SPECIFIER( + `Module specifier '${packageSpecifier}' is not a valid package name` + ) + } + + packageName = packageSpecifier.split('/', 2).join('/') + } + + if (packageName[0] === '.' || packageName.includes('\\') || packageName.includes('%')) { + throw errors.INVALID_MODULE_SPECIFIER( + `Module specifier '${packageSpecifier}' is not a valid package name` + ) + } + + let status + + status = yield* exports.builtinTarget(packageSpecifier, null, builtins, opts) + + if (status) return status + + status = yield* exports.deferred(packageSpecifier, opts) + + if (status) return status + + let packageSubpath = '.' + packageSpecifier.substring(packageName.length) + + status = yield* exports.packageSelf(packageName, packageSubpath, parentURL, opts) + + if (status) return status + + parentURL = new URL(parentURL.href) + + for (const packageURL of exports.lookupPackageRoot(packageName, parentURL)) { + const info = yield { package: packageURL } + + if (info) { + if (info.engines) exports.validateEngines(packageURL, info.engines, opts) + + if (info.exports) { + return yield* exports.packageExports(packageURL, packageSubpath, info.exports, opts) + } + + if (packageSubpath === '.') { + if (typeof info.main === 'string' && info.main !== '') { + packageSubpath = info.main + } else { + return yield* exports.file('index', packageURL, true, opts) + } + } + + status = yield* exports.file(packageSubpath, packageURL, false, opts) + + if (status === RESOLVED) return status + + return yield* exports.directory(packageSubpath, packageURL, opts) + } + } + + return UNRESOLVED +} + +exports.packageSelf = function* (packageName, packageSubpath, parentURL, opts = {}) { + for (const packageURL of exports.lookupPackageScope(parentURL, opts)) { + const info = yield { package: packageURL } + + if (info) { + if (info.name !== packageName) return false + + if (info.exports) { + return yield* exports.packageExports(packageURL, packageSubpath, info.exports, opts) + } + + if (packageSubpath === '.') { + if (typeof info.main === 'string' && info.main !== '') { + packageSubpath = info.main + } else { + return yield* exports.file('index', packageURL, true, opts) + } + } + + const status = yield* exports.file(packageSubpath, packageURL, false, opts) + + if (status === RESOLVED) return status + + return yield* exports.directory(packageSubpath, packageURL, opts) + } + } + + return UNRESOLVED +} + +exports.packageExports = function* (packageURL, subpath, packageExports, opts = {}) { + if (subpath === '.') { + let mainExport + + if (typeof packageExports === 'string' || Array.isArray(packageExports)) { + mainExport = packageExports + } else if (typeof packageExports === 'object' && packageExports !== null) { + const keys = Object.keys(packageExports) + + if (keys.some((key) => key.startsWith('.'))) { + if ('.' in packageExports) mainExport = packageExports['.'] + } else { + mainExport = packageExports + } + } + + if (mainExport) { + const status = yield* exports.packageTarget(packageURL, mainExport, null, false, opts) + + if (status) return status + } + } else if (typeof packageExports === 'object' && packageExports !== null) { + const keys = Object.keys(packageExports) + + if (keys.every((key) => key.startsWith('.'))) { + const status = yield* exports.packageImportsExports( + subpath, + packageExports, + packageURL, + false, + opts + ) + + if (status) return status + } + } + + throw errors.PACKAGE_PATH_NOT_EXPORTED( + `Package subpath '${subpath}' is not defined by "exports" in '${packageURL}'` + ) +} + +exports.packageImports = function* (specifier, parentURL, opts = {}) { + const { imports = null } = opts + + if (specifier === '#' || specifier.startsWith('#/')) { + throw errors.INVALID_MODULE_SPECIFIER( + `Module specifier '${specifier}' is not a valid internal imports specifier` + ) + } + + for (const packageURL of exports.lookupPackageScope(parentURL, opts)) { + const info = yield { package: packageURL } + + if (info) { + if (info.imports) { + const status = yield* exports.packageImportsExports( + specifier, + info.imports, + packageURL, + true, + opts + ) + + if (status) return status + } + + if (specifier.startsWith('#')) { + throw errors.PACKAGE_IMPORT_NOT_DEFINED( + `Package import specifier '${specifier}' is not defined by "imports" in '${packageURL}'` + ) + } + + break + } + } + + if (imports) { + const status = yield* exports.packageImportsExports(specifier, imports, parentURL, true, opts) + + if (status) return status + } + + return UNRESOLVED +} + +exports.packageImportsExports = function* ( + matchKey, + matchObject, + packageURL, + isImports, + opts = {} +) { + if (matchKey in matchObject && !matchKey.includes('*')) { + const target = matchObject[matchKey] + + return yield* exports.packageTarget(packageURL, target, null, isImports, opts) + } + + const expansionKeys = Object.keys(matchObject) + .filter((key) => key.includes('*')) + .sort(exports.patternKeyCompare) + + for (const expansionKey of expansionKeys) { + const patternIndex = expansionKey.indexOf('*') + const patternBase = expansionKey.substring(0, patternIndex) + + if (matchKey.startsWith(patternBase) && matchKey !== patternBase) { + const patternTrailer = expansionKey.substring(patternIndex + 1) + + if ( + patternTrailer === '' || + (matchKey.endsWith(patternTrailer) && matchKey.length >= expansionKey.length) + ) { + const target = matchObject[expansionKey] + + const patternMatch = matchKey.substring( + patternBase.length, + matchKey.length - patternTrailer.length + ) + + return yield* exports.packageTarget(packageURL, target, patternMatch, isImports, opts) + } + } + } + + return UNRESOLVED +} + +exports.validateEngines = function validateEngines(packageURL, packageEngines, opts = {}) { + const { engines = {} } = opts + + for (const [engine, range] of Object.entries(packageEngines)) { + if (engine in engines) { + const version = engines[engine] + + if (!satisfies(version, range)) { + throw errors.UNSUPPORTED_ENGINE( + `Package not compatible with engine '${engine}' ${version}, requires range '${range}' defined by "engines" in '${packageURL}'` + ) + } + } + } +} + +exports.patternKeyCompare = function patternKeyCompare(keyA, keyB) { + const patternIndexA = keyA.indexOf('*') + const patternIndexB = keyB.indexOf('*') + const baseLengthA = patternIndexA === -1 ? keyA.length : patternIndexA + 1 + const baseLengthB = patternIndexB === -1 ? keyB.length : patternIndexB + 1 + if (baseLengthA > baseLengthB) return -1 + if (baseLengthB > baseLengthA) return 1 + if (patternIndexA === -1) return 1 + if (patternIndexB === -1) return -1 + if (keyA.length > keyB.length) return -1 + if (keyB.length > keyA.length) return 1 + return 0 +} + +exports.packageTarget = function* (packageURL, target, patternMatch, isImports, opts = {}) { + const { conditions = [], matchedConditions = [] } = opts + + if (typeof target === 'string') { + if (!target.startsWith('./') && !isImports) { + throw errors.INVALID_PACKAGE_TARGET( + `Invalid target '${target}' defined by "exports" in '${packageURL}'` + ) + } + + if (patternMatch !== null) { + target = target.replaceAll('*', patternMatch) + } + + const status = yield* exports.url(target, packageURL, opts) + + if (status) return status + + if ( + target === '.' || + target === '..' || + target[0] === '/' || + target.startsWith('./') || + target.startsWith('../') + ) { + const resolved = yield { resolution: new URL(target, packageURL) } + + return resolved ? RESOLVED : YIELDED + } + + return yield* exports.package(target, packageURL, opts) + } + + if (Array.isArray(target)) { + for (const targetValue of target) { + const status = yield* exports.packageTarget( + packageURL, + targetValue, + patternMatch, + isImports, + opts + ) + + if (status) return status + } + } else if (typeof target === 'object' && target !== null) { + let status = UNRESOLVED + + for (const [condition, targetValue, subset] of exports.conditionMatches( + target, + conditions, + opts + )) { + matchedConditions.push(condition) + + status |= yield* exports.packageTarget(packageURL, targetValue, patternMatch, isImports, { + ...opts, + conditions: subset + }) + + matchedConditions.pop() + } + + if (status) return status + } + + return UNRESOLVED +} + +exports.builtinTarget = function* (packageSpecifier, packageVersion, target, opts = {}) { + const { builtinProtocol = 'builtin:', conditions = [], matchedConditions = [] } = opts + + if (typeof target === 'string') { + const targetParts = target.split('@') + + let targetName + let targetVersion + + if (target[0] !== '@') { + targetName = targetParts[0] + targetVersion = targetParts[1] || null + } else { + targetName = targetParts.slice(0, 2).join('@') + targetVersion = targetParts[2] || null + } + + if (packageSpecifier === targetName) { + if (packageVersion === null && targetVersion === null) { + const resolved = yield { + resolution: new URL(builtinProtocol + packageSpecifier) + } + + return resolved ? RESOLVED : YIELDED + } + + let version = null + + if (packageVersion === null) { + version = targetVersion + } else if (targetVersion === null || packageVersion === targetVersion) { + version = packageVersion + } + + if (version !== null) { + const resolved = yield { + resolution: new URL(builtinProtocol + packageSpecifier + '@' + version) + } + + return resolved ? RESOLVED : YIELDED + } + } + } else if (Array.isArray(target)) { + for (const targetValue of target) { + const status = yield* exports.builtinTarget( + packageSpecifier, + packageVersion, + targetValue, + opts + ) + + if (status) return status + } + } else if (typeof target === 'object' && target !== null) { + let status = UNRESOLVED + + for (const [condition, targetValue, subset] of exports.conditionMatches( + target, + conditions, + opts + )) { + matchedConditions.push(condition) + + status |= yield* exports.builtinTarget(packageSpecifier, packageVersion, targetValue, { + ...opts, + conditions: subset + }) + + matchedConditions.pop() + } + + if (status) return status + } + + return UNRESOLVED +} + +exports.conditionMatches = function* conditionMatches(target, conditions, opts = {}) { + if (conditions.every((condition) => typeof condition === 'string')) { + const keys = Object.keys(target) + + for (const condition of keys) { + if (condition === 'default' || conditions.includes(condition)) { + yield [condition, target[condition], conditions] + + return true + } + } + + return false + } + + let yielded = false + + for (const subset of conditions) { + if (yield* conditionMatches(target, subset, opts)) { + yielded = true + } + } + + return yielded +} + +exports.lookupPackageRoot = function* (packageName, parentURL) { + parentURL = new URL(parentURL.href) + + do { + const packageURL = new URL('node_modules/' + packageName + '/', parentURL) + + const info = yield new URL('package.json', packageURL) + + if (info) return info + + parentURL.pathname = parentURL.pathname.substring(0, parentURL.pathname.lastIndexOf('/')) + + if ( + parentURL.pathname.length === 3 && + exports.isWindowsDriveLetter(parentURL.pathname.substring(1)) + ) { + break + } + } while (parentURL.pathname !== '' && parentURL.pathname !== '/') + + return null +} + +exports.lookupPackageScope = function* lookupPackageScope(scopeURL, opts = {}) { + const { resolutions = null } = opts + + if (resolutions) { + for (const { resolution } of exports.preresolved('#package', resolutions, scopeURL, opts)) { + if (resolution) return yield resolution + } + } + + scopeURL = new URL(scopeURL.href) + + do { + if (scopeURL.pathname.endsWith('/node_modules')) break + + const info = yield new URL('package.json', scopeURL) + + if (info) return info + + scopeURL.pathname = scopeURL.pathname.substring(0, scopeURL.pathname.lastIndexOf('/')) + + if ( + scopeURL.pathname.length === 3 && + exports.isWindowsDriveLetter(scopeURL.pathname.substring(1)) + ) { + break + } + } while (scopeURL.pathname !== '' && scopeURL.pathname !== '/') + + return null +} + +exports.file = function* (filename, parentURL, isIndex, opts = {}) { + if ( + filename === '.' || + filename === '..' || + filename[filename.length - 1] === '/' || + filename[filename.length - 1] === '\\' + ) { + return UNRESOLVED + } + + if (parentURL.protocol === 'file:' && /%2f|%5c/i.test(filename)) { + throw errors.INVALID_MODULE_SPECIFIER(`Module specifier '${filename}' is invalid`) + } + + const { extensions = [] } = opts + + let status = UNRESOLVED + + if (!isIndex) { + if (yield { resolution: new URL(filename, parentURL) }) { + return RESOLVED + } + + status = YIELDED + } + + for (const ext of extensions) { + if (filename.endsWith(ext)) continue + + if (yield { resolution: new URL(filename + ext, parentURL) }) { + return RESOLVED + } + + status = YIELDED + } + + return status +} + +exports.directory = function* (dirname, parentURL, opts = {}) { + let directoryURL + + if (dirname[dirname.length - 1] === '/' || dirname[dirname.length - 1] === '\\') { + directoryURL = new URL(dirname, parentURL) + } else { + directoryURL = new URL(dirname + '/', parentURL) + } + + const info = yield { package: new URL('package.json', directoryURL) } + + if (info) { + if (info.exports) { + return yield* exports.packageExports(directoryURL, '.', info.exports, opts) + } + + if (typeof info.main === 'string' && info.main !== '') { + const status = yield* exports.file(info.main, directoryURL, false, opts) + + if (status === RESOLVED) return status + + return yield* exports.directory(info.main, directoryURL, opts) + } + } + + return yield* exports.file('index', directoryURL, true, opts) +} + +// https://infra.spec.whatwg.org/#ascii-upper-alpha +function isASCIIUpperAlpha(c) { + return c >= 0x41 && c <= 0x5a +} + +// https://infra.spec.whatwg.org/#ascii-lower-alpha +function isASCIILowerAlpha(c) { + return c >= 0x61 && c <= 0x7a +} + +// https://infra.spec.whatwg.org/#ascii-alpha +function isASCIIAlpha(c) { + return isASCIIUpperAlpha(c) || isASCIILowerAlpha(c) +} + +// https://url.spec.whatwg.org/#windows-drive-letter +exports.isWindowsDriveLetter = function isWindowsDriveLetter(input) { + return ( + input.length >= 2 && + isASCIIAlpha(input.charCodeAt(0)) && + (input.charCodeAt(1) === 0x3a || input.charCodeAt(1) === 0x7c) + ) +} + +// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter +exports.startsWithWindowsDriveLetter = function startsWithWindowsDriveLetter(input) { + return ( + input.length >= 2 && + exports.isWindowsDriveLetter(input) && + (input.length === 2 || + input.charCodeAt(2) === 0x2f || + input.charCodeAt(2) === 0x5c || + input.charCodeAt(2) === 0x3f || + input.charCodeAt(2) === 0x23) + ) +} diff --git a/node_modules/bare-module-resolve/lib/errors.d.ts b/node_modules/bare-module-resolve/lib/errors.d.ts new file mode 100644 index 00000000..e700a157 --- /dev/null +++ b/node_modules/bare-module-resolve/lib/errors.d.ts @@ -0,0 +1,11 @@ +declare class ModuleResolveError extends Error { + readonly code: string + + static INVALID_MODULE_SPECIFIER(msg: string): ModuleResolveError + static INVALID_PACKAGE_TARGET(msg: string): ModuleResolveError + static PACKAGE_PATH_NOT_EXPORTED(msg: string): ModuleResolveError + static PACKAGE_IMPORT_NOT_DEFINED(msg: string): ModuleResolveError + static UNSUPPORTED_ENGINE(msg: string): ModuleResolveError +} + +export = ModuleResolveError diff --git a/node_modules/bare-module-resolve/lib/errors.js b/node_modules/bare-module-resolve/lib/errors.js new file mode 100644 index 00000000..565bbef1 --- /dev/null +++ b/node_modules/bare-module-resolve/lib/errors.js @@ -0,0 +1,50 @@ +module.exports = class ModuleResolveError extends Error { + constructor(msg, code, fn = ModuleResolveError) { + super(`${code}: ${msg}`) + this.code = code + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, fn) + } + } + + get name() { + return 'ModuleResolveError' + } + + static INVALID_MODULE_SPECIFIER(msg) { + return new ModuleResolveError( + msg, + 'INVALID_MODULE_SPECIFIER', + ModuleResolveError.INVALID_MODULE_SPECIFIER + ) + } + + static INVALID_PACKAGE_TARGET(msg) { + return new ModuleResolveError( + msg, + 'INVALID_PACKAGE_TARGET', + ModuleResolveError.INVALID_PACKAGE_TARGET + ) + } + + static PACKAGE_PATH_NOT_EXPORTED(msg) { + return new ModuleResolveError( + msg, + 'PACKAGE_PATH_NOT_EXPORTED', + ModuleResolveError.PACKAGE_PATH_NOT_EXPORTED + ) + } + + static PACKAGE_IMPORT_NOT_DEFINED(msg) { + return new ModuleResolveError( + msg, + 'PACKAGE_IMPORT_NOT_DEFINED', + ModuleResolveError.PACKAGE_IMPORT_NOT_DEFINED + ) + } + + static UNSUPPORTED_ENGINE(msg) { + return new ModuleResolveError(msg, 'UNSUPPORTED_ENGINE', ModuleResolveError.UNSUPPORTED_ENGINE) + } +} diff --git a/node_modules/bare-module-resolve/package.json b/node_modules/bare-module-resolve/package.json new file mode 100644 index 00000000..e22916d0 --- /dev/null +++ b/node_modules/bare-module-resolve/package.json @@ -0,0 +1,51 @@ +{ + "name": "bare-module-resolve", + "version": "1.12.1", + "description": "Low-level module resolution algorithm for Bare", + "exports": { + "./package": "./package.json", + ".": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "./errors": { + "types": "./lib/errors.d.ts", + "default": "./lib/errors.js" + } + }, + "files": [ + "index.js", + "index.d.ts", + "lib" + ], + "scripts": { + "test": "prettier . --check && bare test.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/holepunchto/bare-module-resolve.git" + }, + "author": "Holepunch", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/holepunchto/bare-module-resolve/issues" + }, + "homepage": "https://github.com/holepunchto/bare-module-resolve#readme", + "dependencies": { + "bare-semver": "^1.0.0" + }, + "devDependencies": { + "bare-url": "^2.1.3", + "brittle": "^3.2.1", + "prettier": "^3.3.3", + "prettier-config-holepunch": "^2.0.0" + }, + "peerDependencies": { + "bare-url": "*" + }, + "peerDependenciesMeta": { + "bare-url": { + "optional": true + } + } +} diff --git a/node_modules/bare-semver/LICENSE b/node_modules/bare-semver/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/node_modules/bare-semver/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/bare-semver/README.md b/node_modules/bare-semver/README.md new file mode 100644 index 00000000..6003cebc --- /dev/null +++ b/node_modules/bare-semver/README.md @@ -0,0 +1,19 @@ +# bare-semver + +Minimal semantic versioning library for Bare. + +``` +npm i bare-semver +``` + +## Usage + +```js +const { Version } = require('bare-semver') + +Version.parse('1.2.3') +``` + +## License + +Apache-2.0 diff --git a/node_modules/bare-semver/index.d.ts b/node_modules/bare-semver/index.d.ts new file mode 100644 index 00000000..9b9b6cba --- /dev/null +++ b/node_modules/bare-semver/index.d.ts @@ -0,0 +1,61 @@ +export const constants: { EQ: 1; LT: 2; LTE: 3; GT: 4; GTE: 5 } + +declare class SemVerError extends Error { + static INVALID_VERSION(msg: string, fn?: Function): SemVerError + + static INVALID_RANGE(msg: string, fn?: Function): SemVerError +} + +export { SemVerError as errors } + +export function satisfies(version: Version, range: Range): boolean + +export class Version { + constructor( + major: number, + minor: number, + patch: number, + opts?: { prerelease?: string[]; build?: string[] } + ) + + major: number + minor: number + patch: number + prerealease: string[] + build: string[] + + compare(version: Version): boolean + + toString(): string +} + +export namespace Version { + export function parse(input: string): Version + + export function compare(a: Version, b: Version): number +} + +export class Comparator { + constructor(operator: number, version: Version) + + operator: number + version: Version + + test(version: Version): boolean + + toString(): string +} + +export class Range { + constructor(comparators?: Comparator[][]) + + comparators: Comparator[][] + + test(version: Version): boolean + + toString(): string +} + +export namespace Range { + export function parse(input: string): Range +} diff --git a/node_modules/bare-semver/index.js b/node_modules/bare-semver/index.js new file mode 100644 index 00000000..e278fa38 --- /dev/null +++ b/node_modules/bare-semver/index.js @@ -0,0 +1,13 @@ +exports.constants = require('./lib/constants') +exports.errors = require('./lib/errors') + +const Version = (exports.Version = require('./lib/version')) +const Range = (exports.Range = require('./lib/range')) +exports.Comparator = require('./lib/comparator') + +exports.satisfies = function satisfies(version, range) { + if (typeof version === 'string') version = Version.parse(version) + if (typeof range === 'string') range = Range.parse(range) + + return range.test(version) +} diff --git a/node_modules/bare-semver/lib/comparator.js b/node_modules/bare-semver/lib/comparator.js new file mode 100644 index 00000000..bd90a2f1 --- /dev/null +++ b/node_modules/bare-semver/lib/comparator.js @@ -0,0 +1,37 @@ +const constants = require('./constants') + +const symbols = { + [constants.EQ]: '=', + [constants.LT]: '<', + [constants.LTE]: '<=', + [constants.GT]: '>', + [constants.GTE]: '>=' +} + +module.exports = class Comparator { + constructor(operator, version) { + this.operator = operator + this.version = version + } + + test(version) { + const result = version.compare(this.version) + + switch (this.operator) { + case constants.LT: + return result < 0 + case constants.LTE: + return result <= 0 + case constants.GT: + return result > 0 + case constants.GTE: + return result >= 0 + default: + return result === 0 + } + } + + toString() { + return symbols[this.operator] + this.version + } +} diff --git a/node_modules/bare-semver/lib/constants.js b/node_modules/bare-semver/lib/constants.js new file mode 100644 index 00000000..e33513f7 --- /dev/null +++ b/node_modules/bare-semver/lib/constants.js @@ -0,0 +1,7 @@ +module.exports = { + EQ: 1, + LT: 2, + LTE: 3, + GT: 4, + GTE: 5 +} diff --git a/node_modules/bare-semver/lib/errors.js b/node_modules/bare-semver/lib/errors.js new file mode 100644 index 00000000..92c2f363 --- /dev/null +++ b/node_modules/bare-semver/lib/errors.js @@ -0,0 +1,22 @@ +module.exports = class SemVerError extends Error { + constructor(msg, code, fn = SemVerError) { + super(`${code}: ${msg}`) + this.code = code + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, fn) + } + } + + get name() { + return 'SemVerError' + } + + static INVALID_VERSION(msg, fn = SemVerError.INVALID_VERSION) { + return new SemVerError(msg, 'INVALID_VERSION', fn) + } + + static INVALID_RANGE(msg, fn = SemVerError.INVALID_RANGE) { + return new SemVerError(msg, 'INVALID_RANGE', fn) + } +} diff --git a/node_modules/bare-semver/lib/range.js b/node_modules/bare-semver/lib/range.js new file mode 100644 index 00000000..09f379ac --- /dev/null +++ b/node_modules/bare-semver/lib/range.js @@ -0,0 +1,121 @@ +const constants = require('./constants') +const errors = require('./errors') +const Version = require('./version') +const Comparator = require('./comparator') + +class Range { + constructor(comparators = []) { + this.comparators = comparators + } + + test(version) { + for (const set of this.comparators) { + let matches = true + + for (const comparator of set) { + if (comparator.test(version)) continue + matches = false + break + } + + if (matches) return true + } + + return false + } + + toString() { + let result = '' + let first = true + + for (const set of this.comparators) { + if (first) first = false + else result += ' || ' + + result += set.join(' ') + } + + return result + } +} + +module.exports = exports = Range + +exports.parse = function parse(input, state = { position: 0, partial: false }) { + let i = state.position + let c + + const unexpected = (expected) => { + let msg + + if (i >= input.length) { + msg = `Unexpected end of input in '${input}'` + } else { + msg = `Unexpected token '${input[i]}' in '${input}' at position ${i}` + } + + if (expected) msg += `, ${expected}` + + throw errors.INVALID_VERSION(msg, unexpected) + } + + const comparators = [] + + while (i < input.length) { + const set = [] + + while (i < input.length) { + c = input[i] + + let operator = constants.EQ + + if (c === '<') { + operator = constants.LT + c = input[++i] + + if (c === '=') { + operator = constants.LTE + c = input[++i] + } + } else if (c === '>') { + operator = constants.GT + c = input[++i] + + if (c === '=') { + operator = constants.GTE + c = input[++i] + } + } else if (c === '=') { + c = input[++i] + } + + const state = { position: i, partial: true, range: true } + + set.push(new Comparator(operator, Version.parse(input, state))) + + c = input[(i = state.position)] + + while (c === ' ') c = input[++i] + + if (c === '|' && input[i + 1] === '|') { + c = input[(i += 2)] + + while (c === ' ') c = input[++i] + + break + } + + if (c && c !== '<' && c !== '>') unexpected("expected '||', '<', or '>'") + } + + if (set.length) comparators.push(set) + } + + if (i < input.length && state.partial === false) { + unexpected('expected end of input') + } + + state.position = i + + return new Range(comparators) +} diff --git a/node_modules/bare-semver/lib/version.js b/node_modules/bare-semver/lib/version.js new file mode 100644 index 00000000..aef68f12 --- /dev/null +++ b/node_modules/bare-semver/lib/version.js @@ -0,0 +1,208 @@ +const errors = require('./errors') + +class Version { + constructor(major, minor, patch, opts = {}) { + const { prerelease = [], build = [] } = opts + + this.major = major + this.minor = minor + this.patch = patch + this.prerelease = prerelease + this.build = build + } + + compare(version) { + return exports.compare(this, version) + } + + toString() { + let result = `${this.major}.${this.minor}.${this.patch}` + + if (this.prerelease.length) { + result += '-' + this.prerelease.join('.') + } + + if (this.build.length) { + result += '+' + this.build.join('.') + } + + return result + } +} + +module.exports = exports = Version + +exports.parse = function parse( + input, + state = { position: 0, partial: false, range: false } +) { + let i = state.position + let c + + const unexpected = (expected) => { + let msg + + if (i >= input.length) { + msg = `Unexpected end of input in '${input}'` + } else { + msg = `Unexpected token '${input[i]}' in '${input}' at position ${i}` + } + + if (expected) msg += `, ${expected}` + + throw errors.INVALID_VERSION(msg, unexpected) + } + + const components = [0, 0, 0] + + let k = 0 + + while (k < 3) { + c = input[i] + + if (k > 0) { + if (c === '.') c = input[++i] + else if (state.range) break + else unexpected("expected '.'") + } + + if (c === '0') { + i++ + k++ + } else if (c >= '1' && c <= '9') { + let j = 0 + do c = input[i + ++j] + while (c >= '0' && c <= '9') + + components[k++] = parseInt(input.substring(i, i + j)) + + i += j + } else unexpected('expected /[0-9]/') + } + + const prerelease = [] + + if (k === 3 && input[i] === '-') { + i++ + + while (true) { + c = input[i] + + let tag = '' + let j = 0 + + while (c >= '0' && c <= '9') c = input[i + ++j] + + let isNumeric = false + + if (j) { + tag += input.substring(i, i + j) + + c = input[(i += j)] + + isNumeric = tag[0] !== '0' || tag.length === 1 + } + + j = 0 + + while ( + (c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + c === '-' + ) + c = input[i + ++j] + + if (j) { + tag += input.substring(i, i + j) + + c = input[(i += j)] + } else if (!isNumeric) unexpected('expected /[a-zA-Z-]/') + + prerelease.push(tag) + + if (c === '.') c = input[++i] + else break + } + } + + const build = [] + + if (k === 3 && input[i] === '+') { + i++ + + while (true) { + c = input[i] + + let tag = '' + let j = 0 + + while ( + (c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + c === '-' + ) + c = input[i + ++j] + + if (j) { + tag += input.substring(i, i + j) + + c = input[(i += j)] + } else unexpected('expected /[0-9a-zA-Z-]/') + + build.push(tag) + + if (c === '.') c = input[++i] + else break + } + } + + if (i < input.length && state.partial === false) { + unexpected('expected end of input') + } + + state.position = i + + return new Version(...components, { prerelease, build }) +} + +const integer = /^[0-9]+$/ + +exports.compare = function compare(a, b) { + if (a.major > b.major) return 1 + if (a.major < b.major) return -1 + + if (a.minor > b.minor) return 1 + if (a.minor < b.minor) return -1 + + if (a.patch > b.patch) return 1 + if (a.patch < b.patch) return -1 + + if (a.prerelease.length === 0) return b.prerelease.length === 0 ? 0 : 1 + if (b.prerelease.length === 0) return -1 + + let i = 0 + do { + let x = a.prerelease[i] + let y = b.prerelease[i] + + if (x === undefined) return y === undefined ? 0 : -1 + if (y === undefined) return 1 + + if (x === y) continue + + const xInt = integer.test(x) + const yInt = integer.test(y) + + if (xInt && yInt) { + x = +x + y = +y + } else { + if (xInt) return -1 + if (yInt) return 1 + } + + return x > y ? 1 : -1 + } while (++i) +} diff --git a/node_modules/bare-semver/package.json b/node_modules/bare-semver/package.json new file mode 100644 index 00000000..6a864829 --- /dev/null +++ b/node_modules/bare-semver/package.json @@ -0,0 +1,40 @@ +{ + "name": "bare-semver", + "version": "1.0.2", + "description": "Minimal semantic versioning library for Bare", + "exports": { + ".": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "./package": "./package.json", + "./constants": "./lib/constants.js", + "./errors": "./lib/errors.js", + "./version": "./lib/version.js", + "./range": "./lib/range.js", + "./comparator": "./lib/comparator.js" + }, + "files": [ + "index.js", + "index.d.ts", + "lib" + ], + "scripts": { + "test": "prettier . --check && bare test.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/holepunchto/bare-semver.git" + }, + "author": "Holepunch", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/holepunchto/bare-semver/issues" + }, + "homepage": "https://github.com/holepunchto/bare-semver#readme", + "devDependencies": { + "brittle": "^3.2.1", + "prettier": "^3.4.2", + "prettier-config-standard": "^7.0.0" + } +} diff --git a/node_modules/base32.js/.npmignore b/node_modules/base32.js/.npmignore new file mode 100644 index 00000000..03972917 --- /dev/null +++ b/node_modules/base32.js/.npmignore @@ -0,0 +1,4 @@ +bower_components +node_modules +public +webpack.stats.json diff --git a/node_modules/base32.js/.travis.yml b/node_modules/base32.js/.travis.yml new file mode 100644 index 00000000..b127718a --- /dev/null +++ b/node_modules/base32.js/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.12 + - iojs diff --git a/node_modules/base32.js/HISTORY.md b/node_modules/base32.js/HISTORY.md new file mode 100644 index 00000000..aca8598a --- /dev/null +++ b/node_modules/base32.js/HISTORY.md @@ -0,0 +1,4 @@ +0.0.1 / 2015-02-15 +================== + + * Initial release diff --git a/node_modules/base32.js/README.md b/node_modules/base32.js/README.md new file mode 100644 index 00000000..8db86b5d --- /dev/null +++ b/node_modules/base32.js/README.md @@ -0,0 +1,71 @@ +# Base 32 for JavaScript [![Build Status](https://travis-ci.org/mikepb/base32.js.svg)](http://travis-ci.org/mikepb/base32.js) + +[Wikipedia](https://en.wikipedia.org/wiki/Base32): + +> Base32 is a base 32 transfer encoding using the twenty-six letters A–Z and six digits 2–7. It is primarily used to encode binary data, but is able to encode binary text like ASCII. +> +> Base32 has number of advantages over Base64: +> +> 1. The resulting character set is all one case (usually represented as uppercase), which can often be beneficial when using a case-insensitive filesystem, spoken language, or human memory. +> +> 2. The result can be used as file name because it can not possibly contain '/' symbol which is usually acts as path separator in Unix-based operating systems. +> +> 3. The alphabet was selected to avoid similar-looking pairs of different symbols, so the strings can be accurately transcribed by hand. (For example, the symbol set omits the symbols for 1, 8 and zero, since they could be confused with the letters 'I', 'B', and 'O'.) +> +> 4. A result without padding can be included in a URL without encoding any characters. +> +> However, Base32 representation takes roughly 20% more space than Base64. + +## Documentation + +Full documentation at http://mikepb.github.io/base32.js/ + +## Installation + +```sh +$ npm install base32.js +``` + +## Usage + +Encoding an array of bytes using [Crockford][crock32]: + +```js +var base32 = require("base32.js"); + +var buf = [1, 2, 3, 4]; +var encoder = new base32.Encoder({ type: "crockford", lc: true }); +var str = encoder.write(buf).finalize(); +// str = "04106173" + +var decoder = new base32.Decoder({ type: "crockford" }); +var out = decoder.write(str).finalize(); +// out = [1, 2, 3, 4] +``` + +The default Base32 variant if no `type` is provided is `"rfc4648"` without +padding. + +## Browser support + +The browser versions of the library may be found under the `dist/` directory. +The browser files are updated on each versioned release, but not for +development. [Karma][karma] is used to run the [mocha][] tests in the browser. + +```sh +$ npm install -g karma-cli +$ npm run karma +``` + +## Related projects + +- [agnoster/base32-js][agnoster] + +## License + +MIT + +[agnoster]: https://github.com/agnoster/base32-js +[crock32]: http://www.crockford.com/wrmg/base32.html +[karma]: http://karma-runner.github.io +[mocha]: http://mochajs.org diff --git a/node_modules/base32.js/base32.js b/node_modules/base32.js/base32.js new file mode 100644 index 00000000..e64f8964 --- /dev/null +++ b/node_modules/base32.js/base32.js @@ -0,0 +1,312 @@ +"use strict"; + +/** + * Generate a character map. + * @param {string} alphabet e.g. "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" + * @param {object} mappings map overrides from key to value + * @method + */ + +var charmap = function (alphabet, mappings) { + mappings || (mappings = {}); + alphabet.split("").forEach(function (c, i) { + if (!(c in mappings)) mappings[c] = i; + }); + return mappings; +} + +/** + * The RFC 4648 base 32 alphabet and character map. + * @see {@link https://tools.ietf.org/html/rfc4648} + */ + +var rfc4648 = { + alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", + charmap: { + 0: 14, + 1: 8 + } +}; + +rfc4648.charmap = charmap(rfc4648.alphabet, rfc4648.charmap); + +/** + * The Crockford base 32 alphabet and character map. + * @see {@link http://www.crockford.com/wrmg/base32.html} + */ + +var crockford = { + alphabet: "0123456789ABCDEFGHJKMNPQRSTVWXYZ", + charmap: { + O: 0, + I: 1, + L: 1 + } +}; + +crockford.charmap = charmap(crockford.alphabet, crockford.charmap); + +/** + * base32hex + * @see {@link https://en.wikipedia.org/wiki/Base32#base32hex} + */ + +var base32hex = { + alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV", + charmap: {} +}; + +base32hex.charmap = charmap(base32hex.alphabet, base32hex.charmap); + +/** + * Create a new `Decoder` with the given options. + * + * @param {object} [options] + * @param {string} [type] Supported Base-32 variants are "rfc4648" and + * "crockford". + * @param {object} [charmap] Override the character map used in decoding. + * @constructor + */ + +function Decoder (options) { + this.buf = []; + this.shift = 8; + this.carry = 0; + + if (options) { + + switch (options.type) { + case "rfc4648": + this.charmap = exports.rfc4648.charmap; + break; + case "crockford": + this.charmap = exports.crockford.charmap; + break; + case "base32hex": + this.charmap = exports.base32hex.charmap; + break; + default: + throw new Error("invalid type"); + } + + if (options.charmap) this.charmap = options.charmap; + } +} + +/** + * The default character map coresponds to RFC4648. + */ + +Decoder.prototype.charmap = rfc4648.charmap; + +/** + * Decode a string, continuing from the previous state. + * + * @param {string} str + * @return {Decoder} this + */ + +Decoder.prototype.write = function (str) { + var charmap = this.charmap; + var buf = this.buf; + var shift = this.shift; + var carry = this.carry; + + // decode string + str.toUpperCase().split("").forEach(function (char) { + + // ignore padding + if (char == "=") return; + + // lookup symbol + var symbol = charmap[char] & 0xff; + + // 1: 00000 000 + // 2: 00 00000 0 + // 3: 0000 0000 + // 4: 0 00000 00 + // 5: 000 00000 + // 6: 00000 000 + // 7: 00 00000 0 + + shift -= 5; + if (shift > 0) { + carry |= symbol << shift; + } else if (shift < 0) { + buf.push(carry | (symbol >> -shift)); + shift += 8; + carry = (symbol << shift) & 0xff; + } else { + buf.push(carry | symbol); + shift = 8; + carry = 0; + } + }); + + // save state + this.shift = shift; + this.carry = carry; + + // for chaining + return this; +}; + +/** + * Finish decoding. + * + * @param {string} [str] The final string to decode. + * @return {Array} Decoded byte array. + */ + +Decoder.prototype.finalize = function (str) { + if (str) { + this.write(str); + } + if (this.shift !== 8 && this.carry !== 0) { + this.buf.push(this.carry); + this.shift = 8; + this.carry = 0; + } + return this.buf; +}; + +/** + * Create a new `Encoder` with the given options. + * + * @param {object} [options] + * @param {string} [type] Supported Base-32 variants are "rfc4648" and + * "crockford". + * @param {object} [alphabet] Override the alphabet used in encoding. + * @constructor + */ + +function Encoder (options) { + this.buf = ""; + this.shift = 3; + this.carry = 0; + + if (options) { + + switch (options.type) { + case "rfc4648": + this.alphabet = exports.rfc4648.alphabet; + break; + case "crockford": + this.alphabet = exports.crockford.alphabet; + break; + case "base32hex": + this.alphabet = exports.base32hex.alphabet; + break; + default: + throw new Error("invalid type"); + } + + if (options.alphabet) this.alphabet = options.alphabet; + else if (options.lc) this.alphabet = this.alphabet.toLowerCase(); + } +} + +/** + * The default alphabet coresponds to RFC4648. + */ + +Encoder.prototype.alphabet = rfc4648.alphabet; + +/** + * Encode a byte array, continuing from the previous state. + * + * @param {byte[]} buf The byte array to encode. + * @return {Encoder} this + */ + +Encoder.prototype.write = function (buf) { + var shift = this.shift; + var carry = this.carry; + var symbol; + var byte; + var i; + + // encode each byte in buf + for (i = 0; i < buf.length; i++) { + byte = buf[i]; + + // 1: 00000 000 + // 2: 00 00000 0 + // 3: 0000 0000 + // 4: 0 00000 00 + // 5: 000 00000 + // 6: 00000 000 + // 7: 00 00000 0 + + symbol = carry | (byte >> shift); + this.buf += this.alphabet[symbol & 0x1f]; + + if (shift > 5) { + shift -= 5; + symbol = byte >> shift; + this.buf += this.alphabet[symbol & 0x1f]; + } + + shift = 5 - shift; + carry = byte << shift; + shift = 8 - shift; + } + + // save state + this.shift = shift; + this.carry = carry; + + // for chaining + return this; +}; + +/** + * Finish encoding. + * + * @param {byte[]} [buf] The final byte array to encode. + * @return {string} The encoded byte array. + */ + +Encoder.prototype.finalize = function (buf) { + if (buf) { + this.write(buf); + } + if (this.shift !== 3) { + this.buf += this.alphabet[this.carry & 0x1f]; + this.shift = 3; + this.carry = 0; + } + return this.buf; +}; + +/** + * Convenience encoder. + * + * @param {byte[]} buf The byte array to encode. + * @param {object} [options] Options to pass to the encoder. + * @return {string} The encoded string. + */ + +exports.encode = function (buf, options) { + return new Encoder(options).finalize(buf); +}; + +/** + * Convenience decoder. + * + * @param {string} str The string to decode. + * @param {object} [options] Options to pass to the decoder. + * @return {byte[]} The decoded byte array. + */ + +exports.decode = function (str, options) { + return new Decoder(options).finalize(str); +}; + +// Exports. +exports.Decoder = Decoder; +exports.Encoder = Encoder; +exports.charmap = charmap; +exports.crockford = crockford; +exports.rfc4648 = rfc4648; +exports.base32hex = base32hex; diff --git a/node_modules/base32.js/dist/.gitkeep b/node_modules/base32.js/dist/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/base32.js/dist/base32.js b/node_modules/base32.js/dist/base32.js new file mode 100644 index 00000000..0a588443 --- /dev/null +++ b/node_modules/base32.js/dist/base32.js @@ -0,0 +1,364 @@ +this["base32"] = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * Generate a character map. + * @param {string} alphabet e.g. "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" + * @param {object} mappings map overrides from key to value + * @method + */ + +var charmap = function (alphabet, mappings) { + mappings || (mappings = {}); + alphabet.split("").forEach(function (c, i) { + if (!(c in mappings)) mappings[c] = i; + }); + return mappings; +} + +/** + * The RFC 4648 base 32 alphabet and character map. + * @see {@link https://tools.ietf.org/html/rfc4648} + */ + +var rfc4648 = { + alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", + charmap: { + 0: 14, + 1: 8 + } +}; + +rfc4648.charmap = charmap(rfc4648.alphabet, rfc4648.charmap); + +/** + * The Crockford base 32 alphabet and character map. + * @see {@link http://www.crockford.com/wrmg/base32.html} + */ + +var crockford = { + alphabet: "0123456789ABCDEFGHJKMNPQRSTVWXYZ", + charmap: { + O: 0, + I: 1, + L: 1 + } +}; + +crockford.charmap = charmap(crockford.alphabet, crockford.charmap); + +/** + * base32hex + * @see {@link https://en.wikipedia.org/wiki/Base32#base32hex} + */ + +var base32hex = { + alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV", + charmap: {} +}; + +base32hex.charmap = charmap(base32hex.alphabet, base32hex.charmap); + +/** + * Create a new `Decoder` with the given options. + * + * @param {object} [options] + * @param {string} [type] Supported Base-32 variants are "rfc4648" and + * "crockford". + * @param {object} [charmap] Override the character map used in decoding. + * @constructor + */ + +function Decoder (options) { + this.buf = []; + this.shift = 8; + this.carry = 0; + + if (options) { + + switch (options.type) { + case "rfc4648": + this.charmap = exports.rfc4648.charmap; + break; + case "crockford": + this.charmap = exports.crockford.charmap; + break; + case "base32hex": + this.charmap = exports.base32hex.charmap; + break; + default: + throw new Error("invalid type"); + } + + if (options.charmap) this.charmap = options.charmap; + } +} + +/** + * The default character map coresponds to RFC4648. + */ + +Decoder.prototype.charmap = rfc4648.charmap; + +/** + * Decode a string, continuing from the previous state. + * + * @param {string} str + * @return {Decoder} this + */ + +Decoder.prototype.write = function (str) { + var charmap = this.charmap; + var buf = this.buf; + var shift = this.shift; + var carry = this.carry; + + // decode string + str.toUpperCase().split("").forEach(function (char) { + + // ignore padding + if (char == "=") return; + + // lookup symbol + var symbol = charmap[char] & 0xff; + + // 1: 00000 000 + // 2: 00 00000 0 + // 3: 0000 0000 + // 4: 0 00000 00 + // 5: 000 00000 + // 6: 00000 000 + // 7: 00 00000 0 + + shift -= 5; + if (shift > 0) { + carry |= symbol << shift; + } else if (shift < 0) { + buf.push(carry | (symbol >> -shift)); + shift += 8; + carry = (symbol << shift) & 0xff; + } else { + buf.push(carry | symbol); + shift = 8; + carry = 0; + } + }); + + // save state + this.shift = shift; + this.carry = carry; + + // for chaining + return this; +}; + +/** + * Finish decoding. + * + * @param {string} [str] The final string to decode. + * @return {Array} Decoded byte array. + */ + +Decoder.prototype.finalize = function (str) { + if (str) { + this.write(str); + } + if (this.shift !== 8 && this.carry !== 0) { + this.buf.push(this.carry); + this.shift = 8; + this.carry = 0; + } + return this.buf; +}; + +/** + * Create a new `Encoder` with the given options. + * + * @param {object} [options] + * @param {string} [type] Supported Base-32 variants are "rfc4648" and + * "crockford". + * @param {object} [alphabet] Override the alphabet used in encoding. + * @constructor + */ + +function Encoder (options) { + this.buf = ""; + this.shift = 3; + this.carry = 0; + + if (options) { + + switch (options.type) { + case "rfc4648": + this.alphabet = exports.rfc4648.alphabet; + break; + case "crockford": + this.alphabet = exports.crockford.alphabet; + break; + case "base32hex": + this.alphabet = exports.base32hex.alphabet; + break; + default: + throw new Error("invalid type"); + } + + if (options.alphabet) this.alphabet = options.alphabet; + else if (options.lc) this.alphabet = this.alphabet.toLowerCase(); + } +} + +/** + * The default alphabet coresponds to RFC4648. + */ + +Encoder.prototype.alphabet = rfc4648.alphabet; + +/** + * Encode a byte array, continuing from the previous state. + * + * @param {byte[]} buf The byte array to encode. + * @return {Encoder} this + */ + +Encoder.prototype.write = function (buf) { + var shift = this.shift; + var carry = this.carry; + var symbol; + var byte; + var i; + + // encode each byte in buf + for (i = 0; i < buf.length; i++) { + byte = buf[i]; + + // 1: 00000 000 + // 2: 00 00000 0 + // 3: 0000 0000 + // 4: 0 00000 00 + // 5: 000 00000 + // 6: 00000 000 + // 7: 00 00000 0 + + symbol = carry | (byte >> shift); + this.buf += this.alphabet[symbol & 0x1f]; + + if (shift > 5) { + shift -= 5; + symbol = byte >> shift; + this.buf += this.alphabet[symbol & 0x1f]; + } + + shift = 5 - shift; + carry = byte << shift; + shift = 8 - shift; + } + + // save state + this.shift = shift; + this.carry = carry; + + // for chaining + return this; +}; + +/** + * Finish encoding. + * + * @param {byte[]} [buf] The final byte array to encode. + * @return {string} The encoded byte array. + */ + +Encoder.prototype.finalize = function (buf) { + if (buf) { + this.write(buf); + } + if (this.shift !== 3) { + this.buf += this.alphabet[this.carry & 0x1f]; + this.shift = 3; + this.carry = 0; + } + return this.buf; +}; + +/** + * Convenience encoder. + * + * @param {byte[]} buf The byte array to encode. + * @param {object} [options] Options to pass to the encoder. + * @return {string} The encoded string. + */ + +exports.encode = function (buf, options) { + return new Encoder(options).finalize(buf); +}; + +/** + * Convenience decoder. + * + * @param {string} str The string to decode. + * @param {object} [options] Options to pass to the decoder. + * @return {byte[]} The decoded byte array. + */ + +exports.decode = function (str, options) { + return new Decoder(options).finalize(str); +}; + +// Exports. +exports.Decoder = Decoder; +exports.Encoder = Encoder; +exports.charmap = charmap; +exports.crockford = crockford; +exports.rfc4648 = rfc4648; +exports.base32hex = base32hex; + + +/***/ } +/******/ ]) +//# sourceMappingURL=base32.js.map \ No newline at end of file diff --git a/node_modules/base32.js/dist/base32.js.map b/node_modules/base32.js/dist/base32.js.map new file mode 100644 index 00000000..53cede26 --- /dev/null +++ b/node_modules/base32.js/dist/base32.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap 221c6ffea9706b5be457","webpack:///./base32.js"],"names":[],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wC;;;;;;;ACtCA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;;AAEA;AACA,4BAA4B;AAC5B;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,gBAAgB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 221c6ffea9706b5be457\n **/","\"use strict\";\n\n/**\n * Generate a character map.\n * @param {string} alphabet e.g. \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n * @param {object} mappings map overrides from key to value\n * @method\n */\n\nvar charmap = function (alphabet, mappings) {\n mappings || (mappings = {});\n alphabet.split(\"\").forEach(function (c, i) {\n if (!(c in mappings)) mappings[c] = i;\n });\n return mappings;\n}\n\n/**\n * The RFC 4648 base 32 alphabet and character map.\n * @see {@link https://tools.ietf.org/html/rfc4648}\n */\n\nvar rfc4648 = {\n alphabet: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\",\n charmap: {\n 0: 14,\n 1: 8\n }\n};\n\nrfc4648.charmap = charmap(rfc4648.alphabet, rfc4648.charmap);\n\n/**\n * The Crockford base 32 alphabet and character map.\n * @see {@link http://www.crockford.com/wrmg/base32.html}\n */\n\nvar crockford = {\n alphabet: \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\",\n charmap: {\n O: 0,\n I: 1,\n L: 1\n }\n};\n\ncrockford.charmap = charmap(crockford.alphabet, crockford.charmap);\n\n/**\n * base32hex\n * @see {@link https://en.wikipedia.org/wiki/Base32#base32hex}\n */\n\nvar base32hex = {\n alphabet: \"0123456789ABCDEFGHIJKLMNOPQRSTUV\",\n charmap: {}\n};\n\nbase32hex.charmap = charmap(base32hex.alphabet, base32hex.charmap);\n\n/**\n * Create a new `Decoder` with the given options.\n *\n * @param {object} [options]\n * @param {string} [type] Supported Base-32 variants are \"rfc4648\" and\n * \"crockford\".\n * @param {object} [charmap] Override the character map used in decoding.\n * @constructor\n */\n\nfunction Decoder (options) {\n this.buf = [];\n this.shift = 8;\n this.carry = 0;\n\n if (options) {\n\n switch (options.type) {\n case \"rfc4648\":\n this.charmap = exports.rfc4648.charmap;\n break;\n case \"crockford\":\n this.charmap = exports.crockford.charmap;\n break;\n case \"base32hex\":\n this.charmap = exports.base32hex.charmap;\n break;\n default:\n throw new Error(\"invalid type\");\n }\n\n if (options.charmap) this.charmap = options.charmap;\n }\n}\n\n/**\n * The default character map coresponds to RFC4648.\n */\n\nDecoder.prototype.charmap = rfc4648.charmap;\n\n/**\n * Decode a string, continuing from the previous state.\n *\n * @param {string} str\n * @return {Decoder} this\n */\n\nDecoder.prototype.write = function (str) {\n var charmap = this.charmap;\n var buf = this.buf;\n var shift = this.shift;\n var carry = this.carry;\n\n // decode string\n str.toUpperCase().split(\"\").forEach(function (char) {\n\n // ignore padding\n if (char == \"=\") return;\n\n // lookup symbol\n var symbol = charmap[char] & 0xff;\n\n // 1: 00000 000\n // 2: 00 00000 0\n // 3: 0000 0000\n // 4: 0 00000 00\n // 5: 000 00000\n // 6: 00000 000\n // 7: 00 00000 0\n\n shift -= 5;\n if (shift > 0) {\n carry |= symbol << shift;\n } else if (shift < 0) {\n buf.push(carry | (symbol >> -shift));\n shift += 8;\n carry = (symbol << shift) & 0xff;\n } else {\n buf.push(carry | symbol);\n shift = 8;\n carry = 0;\n }\n });\n\n // save state\n this.shift = shift;\n this.carry = carry;\n\n // for chaining\n return this;\n};\n\n/**\n * Finish decoding.\n *\n * @param {string} [str] The final string to decode.\n * @return {Array} Decoded byte array.\n */\n\nDecoder.prototype.finalize = function (str) {\n if (str) {\n this.write(str);\n }\n if (this.shift !== 8 && this.carry !== 0) {\n this.buf.push(this.carry);\n this.shift = 8;\n this.carry = 0;\n }\n return this.buf;\n};\n\n/**\n * Create a new `Encoder` with the given options.\n *\n * @param {object} [options]\n * @param {string} [type] Supported Base-32 variants are \"rfc4648\" and\n * \"crockford\".\n * @param {object} [alphabet] Override the alphabet used in encoding.\n * @constructor\n */\n\nfunction Encoder (options) {\n this.buf = \"\";\n this.shift = 3;\n this.carry = 0;\n\n if (options) {\n\n switch (options.type) {\n case \"rfc4648\":\n this.alphabet = exports.rfc4648.alphabet;\n break;\n case \"crockford\":\n this.alphabet = exports.crockford.alphabet;\n break;\n case \"base32hex\":\n this.alphabet = exports.base32hex.alphabet;\n break;\n default:\n throw new Error(\"invalid type\");\n }\n\n if (options.alphabet) this.alphabet = options.alphabet;\n else if (options.lc) this.alphabet = this.alphabet.toLowerCase();\n }\n}\n\n/**\n * The default alphabet coresponds to RFC4648.\n */\n\nEncoder.prototype.alphabet = rfc4648.alphabet;\n\n/**\n * Encode a byte array, continuing from the previous state.\n *\n * @param {byte[]} buf The byte array to encode.\n * @return {Encoder} this\n */\n\nEncoder.prototype.write = function (buf) {\n var shift = this.shift;\n var carry = this.carry;\n var symbol;\n var byte;\n var i;\n\n // encode each byte in buf\n for (i = 0; i < buf.length; i++) {\n byte = buf[i];\n\n // 1: 00000 000\n // 2: 00 00000 0\n // 3: 0000 0000\n // 4: 0 00000 00\n // 5: 000 00000\n // 6: 00000 000\n // 7: 00 00000 0\n\n symbol = carry | (byte >> shift);\n this.buf += this.alphabet[symbol & 0x1f];\n\n if (shift > 5) {\n shift -= 5;\n symbol = byte >> shift;\n this.buf += this.alphabet[symbol & 0x1f];\n }\n\n shift = 5 - shift;\n carry = byte << shift;\n shift = 8 - shift;\n }\n\n // save state\n this.shift = shift;\n this.carry = carry;\n\n // for chaining\n return this;\n};\n\n/**\n * Finish encoding.\n *\n * @param {byte[]} [buf] The final byte array to encode.\n * @return {string} The encoded byte array.\n */\n\nEncoder.prototype.finalize = function (buf) {\n if (buf) {\n this.write(buf);\n }\n if (this.shift !== 3) {\n this.buf += this.alphabet[this.carry & 0x1f];\n this.shift = 3;\n this.carry = 0;\n }\n return this.buf;\n};\n\n/**\n * Convenience encoder.\n *\n * @param {byte[]} buf The byte array to encode.\n * @param {object} [options] Options to pass to the encoder.\n * @return {string} The encoded string.\n */\n\nexports.encode = function (buf, options) {\n return new Encoder(options).finalize(buf);\n};\n\n/**\n * Convenience decoder.\n *\n * @param {string} str The string to decode.\n * @param {object} [options] Options to pass to the decoder.\n * @return {byte[]} The decoded byte array.\n */\n\nexports.decode = function (str, options) {\n return new Decoder(options).finalize(str);\n};\n\n// Exports.\nexports.Decoder = Decoder;\nexports.Encoder = Encoder;\nexports.charmap = charmap;\nexports.crockford = crockford;\nexports.rfc4648 = rfc4648;\nexports.base32hex = base32hex;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./base32.js\n ** module id = 0\n ** module chunks = 0\n **/"],"sourceRoot":"","file":"base32.js"} \ No newline at end of file diff --git a/node_modules/base32.js/dist/base32.min.js b/node_modules/base32.js/dist/base32.min.js new file mode 100644 index 00000000..d0975355 --- /dev/null +++ b/node_modules/base32.js/dist/base32.min.js @@ -0,0 +1,2 @@ +this.base32=function(t){function a(h){if(r[h])return r[h].exports;var i=r[h]={exports:{},id:h,loaded:!1};return t[h].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}var r={};return a.m=t,a.c=r,a.p="",a(0)}([function(t,a){"use strict";function r(t){if(this.buf=[],this.shift=8,this.carry=0,t){switch(t.type){case"rfc4648":this.charmap=a.rfc4648.charmap;break;case"crockford":this.charmap=a.crockford.charmap;break;case"base32hex":this.charmap=a.base32hex.charmap;break;default:throw new Error("invalid type")}t.charmap&&(this.charmap=t.charmap)}}function h(t){if(this.buf="",this.shift=3,this.carry=0,t){switch(t.type){case"rfc4648":this.alphabet=a.rfc4648.alphabet;break;case"crockford":this.alphabet=a.crockford.alphabet;break;case"base32hex":this.alphabet=a.base32hex.alphabet;break;default:throw new Error("invalid type")}t.alphabet?this.alphabet=t.alphabet:t.lc&&(this.alphabet=this.alphabet.toLowerCase())}}var i=function(t,a){return a||(a={}),t.split("").forEach(function(t,r){t in a||(a[t]=r)}),a},e={alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",charmap:{0:14,1:8}};e.charmap=i(e.alphabet,e.charmap);var s={alphabet:"0123456789ABCDEFGHJKMNPQRSTVWXYZ",charmap:{O:0,I:1,L:1}};s.charmap=i(s.alphabet,s.charmap);var c={alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",charmap:{}};c.charmap=i(c.alphabet,c.charmap),r.prototype.charmap=e.charmap,r.prototype.write=function(t){var a=this.charmap,r=this.buf,h=this.shift,i=this.carry;return t.toUpperCase().split("").forEach(function(t){if("="!=t){var e=255&a[t];h-=5,h>0?i|=e<h?(r.push(i|e>>-h),h+=8,i=e<>i,this.buf+=this.alphabet[31&a],i>5&&(i-=5,a=r>>i,this.buf+=this.alphabet[31&a]),i=5-i,e=r< 0) {\n carry |= symbol << shift;\n } else if (shift < 0) {\n buf.push(carry | (symbol >> -shift));\n shift += 8;\n carry = (symbol << shift) & 0xff;\n } else {\n buf.push(carry | symbol);\n shift = 8;\n carry = 0;\n }\n });\n\n // save state\n this.shift = shift;\n this.carry = carry;\n\n // for chaining\n return this;\n};\n\n/**\n * Finish decoding.\n *\n * @param {string} [str] The final string to decode.\n * @return {Array} Decoded byte array.\n */\n\nDecoder.prototype.finalize = function (str) {\n if (str) {\n this.write(str);\n }\n if (this.shift !== 8 && this.carry !== 0) {\n this.buf.push(this.carry);\n this.shift = 8;\n this.carry = 0;\n }\n return this.buf;\n};\n\n/**\n * Create a new `Encoder` with the given options.\n *\n * @param {object} [options]\n * @param {string} [type] Supported Base-32 variants are \"rfc4648\" and\n * \"crockford\".\n * @param {object} [alphabet] Override the alphabet used in encoding.\n * @constructor\n */\n\nfunction Encoder (options) {\n this.buf = \"\";\n this.shift = 3;\n this.carry = 0;\n\n if (options) {\n\n switch (options.type) {\n case \"rfc4648\":\n this.alphabet = exports.rfc4648.alphabet;\n break;\n case \"crockford\":\n this.alphabet = exports.crockford.alphabet;\n break;\n case \"base32hex\":\n this.alphabet = exports.base32hex.alphabet;\n break;\n default:\n throw new Error(\"invalid type\");\n }\n\n if (options.alphabet) this.alphabet = options.alphabet;\n else if (options.lc) this.alphabet = this.alphabet.toLowerCase();\n }\n}\n\n/**\n * The default alphabet coresponds to RFC4648.\n */\n\nEncoder.prototype.alphabet = rfc4648.alphabet;\n\n/**\n * Encode a byte array, continuing from the previous state.\n *\n * @param {byte[]} buf The byte array to encode.\n * @return {Encoder} this\n */\n\nEncoder.prototype.write = function (buf) {\n var shift = this.shift;\n var carry = this.carry;\n var symbol;\n var byte;\n var i;\n\n // encode each byte in buf\n for (i = 0; i < buf.length; i++) {\n byte = buf[i];\n\n // 1: 00000 000\n // 2: 00 00000 0\n // 3: 0000 0000\n // 4: 0 00000 00\n // 5: 000 00000\n // 6: 00000 000\n // 7: 00 00000 0\n\n symbol = carry | (byte >> shift);\n this.buf += this.alphabet[symbol & 0x1f];\n\n if (shift > 5) {\n shift -= 5;\n symbol = byte >> shift;\n this.buf += this.alphabet[symbol & 0x1f];\n }\n\n shift = 5 - shift;\n carry = byte << shift;\n shift = 8 - shift;\n }\n\n // save state\n this.shift = shift;\n this.carry = carry;\n\n // for chaining\n return this;\n};\n\n/**\n * Finish encoding.\n *\n * @param {byte[]} [buf] The final byte array to encode.\n * @return {string} The encoded byte array.\n */\n\nEncoder.prototype.finalize = function (buf) {\n if (buf) {\n this.write(buf);\n }\n if (this.shift !== 3) {\n this.buf += this.alphabet[this.carry & 0x1f];\n this.shift = 3;\n this.carry = 0;\n }\n return this.buf;\n};\n\n/**\n * Convenience encoder.\n *\n * @param {byte[]} buf The byte array to encode.\n * @param {object} [options] Options to pass to the encoder.\n * @return {string} The encoded string.\n */\n\nexports.encode = function (buf, options) {\n return new Encoder(options).finalize(buf);\n};\n\n/**\n * Convenience decoder.\n *\n * @param {string} str The string to decode.\n * @param {object} [options] Options to pass to the decoder.\n * @return {byte[]} The decoded byte array.\n */\n\nexports.decode = function (str, options) {\n return new Decoder(options).finalize(str);\n};\n\n// Exports.\nexports.Decoder = Decoder;\nexports.Encoder = Encoder;\nexports.charmap = charmap;\nexports.crockford = crockford;\nexports.rfc4648 = rfc4648;\nexports.base32hex = base32hex;\n\n\n/***/ }\n/******/ ])\n\n\n/** WEBPACK FOOTER **\n ** base32.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap da2e7e41f8f005e65df6\n **/","\"use strict\";\n\n/**\n * Generate a character map.\n * @param {string} alphabet e.g. \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n * @param {object} mappings map overrides from key to value\n * @method\n */\n\nvar charmap = function (alphabet, mappings) {\n mappings || (mappings = {});\n alphabet.split(\"\").forEach(function (c, i) {\n if (!(c in mappings)) mappings[c] = i;\n });\n return mappings;\n}\n\n/**\n * The RFC 4648 base 32 alphabet and character map.\n * @see {@link https://tools.ietf.org/html/rfc4648}\n */\n\nvar rfc4648 = {\n alphabet: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\",\n charmap: {\n 0: 14,\n 1: 8\n }\n};\n\nrfc4648.charmap = charmap(rfc4648.alphabet, rfc4648.charmap);\n\n/**\n * The Crockford base 32 alphabet and character map.\n * @see {@link http://www.crockford.com/wrmg/base32.html}\n */\n\nvar crockford = {\n alphabet: \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\",\n charmap: {\n O: 0,\n I: 1,\n L: 1\n }\n};\n\ncrockford.charmap = charmap(crockford.alphabet, crockford.charmap);\n\n/**\n * base32hex\n * @see {@link https://en.wikipedia.org/wiki/Base32#base32hex}\n */\n\nvar base32hex = {\n alphabet: \"0123456789ABCDEFGHIJKLMNOPQRSTUV\",\n charmap: {}\n};\n\nbase32hex.charmap = charmap(base32hex.alphabet, base32hex.charmap);\n\n/**\n * Create a new `Decoder` with the given options.\n *\n * @param {object} [options]\n * @param {string} [type] Supported Base-32 variants are \"rfc4648\" and\n * \"crockford\".\n * @param {object} [charmap] Override the character map used in decoding.\n * @constructor\n */\n\nfunction Decoder (options) {\n this.buf = [];\n this.shift = 8;\n this.carry = 0;\n\n if (options) {\n\n switch (options.type) {\n case \"rfc4648\":\n this.charmap = exports.rfc4648.charmap;\n break;\n case \"crockford\":\n this.charmap = exports.crockford.charmap;\n break;\n case \"base32hex\":\n this.charmap = exports.base32hex.charmap;\n break;\n default:\n throw new Error(\"invalid type\");\n }\n\n if (options.charmap) this.charmap = options.charmap;\n }\n}\n\n/**\n * The default character map coresponds to RFC4648.\n */\n\nDecoder.prototype.charmap = rfc4648.charmap;\n\n/**\n * Decode a string, continuing from the previous state.\n *\n * @param {string} str\n * @return {Decoder} this\n */\n\nDecoder.prototype.write = function (str) {\n var charmap = this.charmap;\n var buf = this.buf;\n var shift = this.shift;\n var carry = this.carry;\n\n // decode string\n str.toUpperCase().split(\"\").forEach(function (char) {\n\n // ignore padding\n if (char == \"=\") return;\n\n // lookup symbol\n var symbol = charmap[char] & 0xff;\n\n // 1: 00000 000\n // 2: 00 00000 0\n // 3: 0000 0000\n // 4: 0 00000 00\n // 5: 000 00000\n // 6: 00000 000\n // 7: 00 00000 0\n\n shift -= 5;\n if (shift > 0) {\n carry |= symbol << shift;\n } else if (shift < 0) {\n buf.push(carry | (symbol >> -shift));\n shift += 8;\n carry = (symbol << shift) & 0xff;\n } else {\n buf.push(carry | symbol);\n shift = 8;\n carry = 0;\n }\n });\n\n // save state\n this.shift = shift;\n this.carry = carry;\n\n // for chaining\n return this;\n};\n\n/**\n * Finish decoding.\n *\n * @param {string} [str] The final string to decode.\n * @return {Array} Decoded byte array.\n */\n\nDecoder.prototype.finalize = function (str) {\n if (str) {\n this.write(str);\n }\n if (this.shift !== 8 && this.carry !== 0) {\n this.buf.push(this.carry);\n this.shift = 8;\n this.carry = 0;\n }\n return this.buf;\n};\n\n/**\n * Create a new `Encoder` with the given options.\n *\n * @param {object} [options]\n * @param {string} [type] Supported Base-32 variants are \"rfc4648\" and\n * \"crockford\".\n * @param {object} [alphabet] Override the alphabet used in encoding.\n * @constructor\n */\n\nfunction Encoder (options) {\n this.buf = \"\";\n this.shift = 3;\n this.carry = 0;\n\n if (options) {\n\n switch (options.type) {\n case \"rfc4648\":\n this.alphabet = exports.rfc4648.alphabet;\n break;\n case \"crockford\":\n this.alphabet = exports.crockford.alphabet;\n break;\n case \"base32hex\":\n this.alphabet = exports.base32hex.alphabet;\n break;\n default:\n throw new Error(\"invalid type\");\n }\n\n if (options.alphabet) this.alphabet = options.alphabet;\n else if (options.lc) this.alphabet = this.alphabet.toLowerCase();\n }\n}\n\n/**\n * The default alphabet coresponds to RFC4648.\n */\n\nEncoder.prototype.alphabet = rfc4648.alphabet;\n\n/**\n * Encode a byte array, continuing from the previous state.\n *\n * @param {byte[]} buf The byte array to encode.\n * @return {Encoder} this\n */\n\nEncoder.prototype.write = function (buf) {\n var shift = this.shift;\n var carry = this.carry;\n var symbol;\n var byte;\n var i;\n\n // encode each byte in buf\n for (i = 0; i < buf.length; i++) {\n byte = buf[i];\n\n // 1: 00000 000\n // 2: 00 00000 0\n // 3: 0000 0000\n // 4: 0 00000 00\n // 5: 000 00000\n // 6: 00000 000\n // 7: 00 00000 0\n\n symbol = carry | (byte >> shift);\n this.buf += this.alphabet[symbol & 0x1f];\n\n if (shift > 5) {\n shift -= 5;\n symbol = byte >> shift;\n this.buf += this.alphabet[symbol & 0x1f];\n }\n\n shift = 5 - shift;\n carry = byte << shift;\n shift = 8 - shift;\n }\n\n // save state\n this.shift = shift;\n this.carry = carry;\n\n // for chaining\n return this;\n};\n\n/**\n * Finish encoding.\n *\n * @param {byte[]} [buf] The final byte array to encode.\n * @return {string} The encoded byte array.\n */\n\nEncoder.prototype.finalize = function (buf) {\n if (buf) {\n this.write(buf);\n }\n if (this.shift !== 3) {\n this.buf += this.alphabet[this.carry & 0x1f];\n this.shift = 3;\n this.carry = 0;\n }\n return this.buf;\n};\n\n/**\n * Convenience encoder.\n *\n * @param {byte[]} buf The byte array to encode.\n * @param {object} [options] Options to pass to the encoder.\n * @return {string} The encoded string.\n */\n\nexports.encode = function (buf, options) {\n return new Encoder(options).finalize(buf);\n};\n\n/**\n * Convenience decoder.\n *\n * @param {string} str The string to decode.\n * @param {object} [options] Options to pass to the decoder.\n * @return {byte[]} The decoded byte array.\n */\n\nexports.decode = function (str, options) {\n return new Decoder(options).finalize(str);\n};\n\n// Exports.\nexports.Decoder = Decoder;\nexports.Encoder = Encoder;\nexports.charmap = charmap;\nexports.crockford = crockford;\nexports.rfc4648 = rfc4648;\nexports.base32hex = base32hex;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./base32.js\n ** module id = 0\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/base32.js/index.js b/node_modules/base32.js/index.js new file mode 100644 index 00000000..e380c168 --- /dev/null +++ b/node_modules/base32.js/index.js @@ -0,0 +1,16 @@ +"use strict"; + +// Module dependencies. +var base32 = require("./base32"); + + +// Wrap decoder finalize to return a buffer; +var finalizeDecode = base32.Decoder.prototype.finalize; +base32.Decoder.prototype.finalize = function (buf) { + var bytes = finalizeDecode.call(this, buf); + return new Buffer(bytes); +}; + + +// Export Base32. +module.exports = base32; diff --git a/node_modules/base32.js/jsdoc.json b/node_modules/base32.js/jsdoc.json new file mode 100644 index 00000000..d576a708 --- /dev/null +++ b/node_modules/base32.js/jsdoc.json @@ -0,0 +1,33 @@ +{ + "source": { + "include": [ + "base32.js", + "package.json", + "README.md" + ] + }, + "plugins": ["plugins/markdown"], + "templates": { + "applicationName": "base32.js", + "meta": { + "title": "base32.js", + "description": "base32.js - Base 32 for JavaScript", + "keyword": [ + "base32", + "base32hex", + "crockford", + "rfc2938", + "rfc4648", + "encoding", + "decoding" + ] + }, + "default": { + "outputSourceFiles": true + }, + "linenums": true + }, + "opts": { + "destination": "docs" + } +} diff --git a/node_modules/base32.js/karma.conf.js b/node_modules/base32.js/karma.conf.js new file mode 100644 index 00000000..498312f6 --- /dev/null +++ b/node_modules/base32.js/karma.conf.js @@ -0,0 +1,33 @@ +"use strict"; + +/** + * Karma configuration. + */ + +module.exports = function (config) { + config.set({ + + frameworks: ["mocha"], + + files: [ + "test/**_test.js" + ], + + preprocessors: { + "test/**_test.js": ["webpack"] + }, + + reporters: ["progress"], + + browsers: ["Chrome"], + + webpack: require("./webpack.config"), + + plugins: [ + "karma-chrome-launcher", + "karma-mocha", + "karma-webpack" + ] + + }); +}; diff --git a/node_modules/base32.js/package.json b/node_modules/base32.js/package.json new file mode 100644 index 00000000..3252bbf4 --- /dev/null +++ b/node_modules/base32.js/package.json @@ -0,0 +1,42 @@ +{ + "name": "base32.js", + "version": "0.1.0", + "author": "Michael Phan-Ba ", + "description": "Base 32 encodings for JavaScript", + "keywords": [ + "base32", + "base32hex", + "crockford", + "rfc2938", + "rfc4648", + "encoding", + "decoding" + ], + "license": "MIT", + "main": "index.js", + "browser": "base32.js", + "engines": { + "node": ">=0.12.0" + }, + "repository": { + "type": "git", + "url": "git://github.com/mikepb/base32.js.git" + }, + "scripts": { + "test": "mocha --reporter dot", + "karma": "karma start --single-run", + "dist": "webpack base32.js dist/base32.js && webpack --optimize-minimize base32.js dist/base32.min.js", + "doc": "jsdoc -c jsdoc.json" + }, + "dependencies": { + }, + "devDependencies": { + "jsdoc": "*", + "karma": "*", + "karma-chrome-launcher": "*", + "karma-mocha": "*", + "karma-webpack": "*", + "mocha": "*", + "webpack": "*" + } +} diff --git a/node_modules/base32.js/test/base32_test.js b/node_modules/base32.js/test/base32_test.js new file mode 100644 index 00000000..0cfb33b8 --- /dev/null +++ b/node_modules/base32.js/test/base32_test.js @@ -0,0 +1,87 @@ +"use strict"; + +var assert = require("assert"); +var base32 = require(".."); +var fixtures = require("./fixtures"); + +describe("Decoder", function () { + + fixtures.forEach(function (subject) { + var test = subject.buf; + + subject.rfc4648.forEach(function (str) { + it("should decode rfc4648 " + str, function () { + var decoder = new base32.Decoder({ type: "rfc4648" }); + var decoded = decoder.write(str).finalize(); + compare(decoded, test); + var s = new base32.Decoder().write(str).finalize(); + compare(s, test); + }); + }); + + subject.crock32.forEach(function (str) { + it("should decode crock32 " + str, function () { + var decoder = new base32.Decoder({ type: "crockford" }); + var decoded = decoder.write(str).finalize(); + compare(decoded, test); + }); + }); + + subject.base32hex.forEach(function (str) { + it("should decode base32hex " + str, function () { + var decoder = new base32.Decoder({ type: "base32hex" }); + var decoded = decoder.write(str).finalize(); + compare(decoded, test); + }); + }); + + }); + +}); + +describe("Encoder", function () { + + fixtures.forEach(function (subject) { + var buf = subject.buf; + + it("should encode rfc4648 " + buf, function () { + var test = subject.rfc4648[0]; + var encoder = new base32.Encoder({ type: "rfc4648" }); + var encode = encoder.write(buf).finalize(); + assert.equal(encode, test); + var s = new base32.Encoder().write(buf).finalize(); + assert.equal(s, test); + }); + + it("should encode crock32 " + buf, function () { + var test = subject.crock32[0]; + var encoder = new base32.Encoder({ type: "crockford" }); + var encoded = encoder.write(buf).finalize(); + assert.equal(encoded, test); + }); + + it("should encode crock32 " + buf + " with lower case", function () { + var test = subject.crock32[0]; + var encoder = new base32.Encoder({ type: "crockford", lc: true }); + var encoded = encoder.write(buf).finalize(); + assert.equal(encoded, test.toLowerCase()); + }); + + it("should encode base32hex " + buf + " with lower case", function () { + var test = subject.base32hex[0]; + var encoder = new base32.Encoder({ type: "base32hex", lc: true }); + var encoded = encoder.write(buf).finalize(); + assert.equal(encoded, test.toLowerCase()); + }); + + }); + +}); + +function compare (a, b) { + if (typeof Buffer != "undefined") { + b = new Buffer(b); + return assert.strictEqual(b.compare(a), 0); + } + assert.deepEqual(a, b); +} diff --git a/node_modules/base32.js/test/fixtures.js b/node_modules/base32.js/test/fixtures.js new file mode 100644 index 00000000..172630ee --- /dev/null +++ b/node_modules/base32.js/test/fixtures.js @@ -0,0 +1,294 @@ +"use strict"; + +module.exports = [ + { + buf: [0], + rfc4648: ["AA", "aa"], + crock32: ["00", "0O", "0o"], + crock32int: ["0", "O", "o"], + base32hex: ["00"] + }, + { + buf: [1], + rfc4648: ["AE"], + crock32: ["04"], + crock32int: ["1", "I", "i", "L", "l"], + base32hex: ["04"] + }, + { + buf: [2], + rfc4648: ["AI", "ai", "aI", "Ai"], + crock32: ["08"], + crock32int: ["2"], + base32hex: ["08"] + }, + { + buf: [3], + rfc4648: ["AM", "am", "aM", "Am"], + crock32: ["0C"], + crock32int: ["3"], + base32hex: ["0C"] + }, + { + buf: [4], + rfc4648: ["AQ", "aq", "aQ", "Aq"], + crock32: ["0G"], + crock32int: ["4"], + base32hex: ["0G"] + }, + { + buf: [5], + rfc4648: ["AU", "au", "aU", "Au"], + crock32: ["0M"], + crock32int: ["5"], + base32hex: ["0K"] + }, + { + buf: [6], + rfc4648: ["AY", "ay", "aY", "Ay"], + crock32: ["0R"], + crock32int: ["6"], + base32hex: ["0O"] + }, + { + buf: [7], + rfc4648: ["A4", "a4"], + crock32: ["0W"], + crock32int: ["7"], + base32hex: ["0S"] + }, + { + buf: [8], + rfc4648: ["BA", "ba", "bA", "Ba"], + crock32: ["10"], + crock32int: ["8"], + base32hex: ["10"] + }, + { + buf: [9], + rfc4648: ["BE", "be", "bE", "Be"], + crock32: ["14"], + crock32int: ["9"], + base32hex: ["14"] + }, + { + buf: [10], + rfc4648: ["BI", "bi", "bI", "Bi"], + crock32: ["18"], + crock32int: ["A", "a"], + base32hex: ["18"] + }, + { + buf: [11], + rfc4648: ["BM", "bm", "bM", "Bm"], + crock32: ["1C"], + crock32int: ["B", "b"], + base32hex: ["1C"] + }, + { + buf: [12], + rfc4648: ["BQ", "bq", "bQ", "Bq"], + crock32: ["1G"], + crock32int: ["C", "c"], + base32hex: ["1G"] + }, + { + buf: [13], + rfc4648: ["BU", "bu", "bU", "Bu"], + crock32: ["1M"], + crock32int: ["D", "d"], + base32hex: ["1K"] + }, + { + buf: [14], + rfc4648: ["BY", "by", "bY", "By"], + crock32: ["1R"], + crock32int: ["E", "e"], + base32hex: ["1O"] + }, + { + buf: [15], + rfc4648: ["B4", "b4"], + crock32: ["1W"], + crock32int: ["F", "f"], + base32hex: ["1S"] + }, + { + buf: [16], + rfc4648: ["CA", "ca", "cA", "Ca"], + crock32: ["20"], + crock32int: ["G", "g"], + base32hex: ["20"] + }, + { + buf: [17], + rfc4648: ["CE", "ce", "cE", "Ce"], + crock32: ["24"], + crock32int: ["H", "h"], + base32hex: ["24"] + }, + { + buf: [18], + rfc4648: ["CI", "ci", "cI", "Ci"], + crock32: ["28"], + crock32int: ["J", "j"], + base32hex: ["28"] + }, + { + buf: [19], + rfc4648: ["CM", "cm", "cM", "Cm"], + crock32: ["2C"], + crock32int: ["K", "k"], + base32hex: ["2C"] + }, + { + buf: [20], + rfc4648: ["CQ", "cq", "cQ", "Cq"], + crock32: ["2G"], + crock32int: ["M", "m"], + base32hex: ["2G"] + }, + { + buf: [21], + rfc4648: ["CU", "cu", "cU", "Cu"], + crock32: ["2M"], + crock32int: ["N", "n"], + base32hex: ["2K"] + }, + { + buf: [22], + rfc4648: ["CY", "cy", "cY", "Cy"], + crock32: ["2R"], + crock32int: ["P", "p"], + base32hex: ["2O"] + }, + { + buf: [23], + rfc4648: ["C4", "c4"], + crock32: ["2W"], + crock32int: ["Q", "q"], + base32hex: ["2S"] + }, + { + buf: [24], + rfc4648: ["DA", "da", "dA", "Da"], + crock32: ["30"], + crock32int: ["R", "r"], + base32hex: ["30"] + }, + { + buf: [25], + rfc4648: ["DE", "de", "dE", "De"], + crock32: ["34"], + crock32int: ["S", "s"], + base32hex: ["34"] + }, + { + buf: [26], + rfc4648: ["DI", "di", "dI", "Di"], + crock32: ["38"], + crock32int: ["T", "t"], + base32hex: ["38"] + }, + { + buf: [27], + rfc4648: ["DM", "dm", "dM", "Dm"], + crock32: ["3C"], + crock32int: ["V", "v"], + base32hex: ["3C"] + }, + { + buf: [28], + rfc4648: ["DQ", "dq", "dQ", "Dq"], + crock32: ["3G"], + crock32int: ["W", "w"], + base32hex: ["3G"] + }, + { + buf: [29], + rfc4648: ["DU", "du", "dU", "Du"], + crock32: ["3M"], + crock32int: ["X", "x"], + base32hex: ["3k"] + }, + { + buf: [30], + rfc4648: ["DY", "dy", "dY", "Dy"], + crock32: ["3R"], + crock32int: ["Y", "y"], + base32hex: ["3O"] + }, + { + buf: [31], + rfc4648: ["D4", "d4"], + crock32: ["3W"], + crock32int: ["Z", "z"], + base32hex: ["3S"] + }, + { + buf: [0, 0], + rfc4648: ["AAAA", "aaaa", "AaAa", "aAAa"], + crock32: ["0000", "oooo", "OOOO", "0oO0"], + base32hex: ["0000"] + }, + { + buf: [1, 0], + rfc4648: ["AEAA", "aeaa", "AeAa", "aEAa"], + crock32: ["0400", "o4oo", "O4OO", "04oO"], + base32hex: ["0400"] + }, + { + buf: [0, 1], + rfc4648: ["AAAQ", "aaaq", "AaAQ", "aAAq"], + crock32: ["000G", "ooog", "OOOG", "0oOg"], + base32hex: ["000G"] + }, + { + buf: [1, 1], + rfc4648: ["AEAQ", "aeaq", "AeAQ", "aEAq"], + crock32: ["040G", "o4og", "O4og", "04Og"], + base32hex: ["040G"] + }, + { + buf: [136, 64], + rfc4648: ["RBAA", "rbaa", "RbAA", "rBAa"], + crock32: ["H100", "hio0", "HLOo"], + base32hex: ["H100"] + }, + { + buf: [139, 188], + rfc4648: ["RO6A", "r06a", "Ro6A", "r06A"], + crock32: ["HEY0", "heyo", "HeYO"], + base32hex: ["HEU0"] + }, + { + buf: [54, 31, 127], + rfc4648: ["GYPX6", "gypx6"], + crock32: ["6RFQY", "6rfqy"], + base32hex: ["6OFNU"] + }, + { + buf: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33], + rfc4648: ["JBSWY3DPEBLW64TMMQQQ", "jbswy3dpeblw64tmmqqq"], + crock32: ["91JPRV3F41BPYWKCCGGG", "91jprv3f41bpywkccggg", "9Ljprv3f4ibpywkccggg"], + base32hex: ["91IMOR3F41BMUSJCCGGG"] + }, + { + buf: [139, 130, 16, 112, 24, 11, 64], + rfc4648: ["ROBBA4AYBNAA", "robba4aybnaa", "R0BBA4aybnaa"], + crock32: ["HE110W0R1D00", "helloworld00", "heiiOw0RidoO"], + base32hex: ["HE110S0O1D00"] + }, + { + buf: [139, 130, 16, 112, 24, 11], + rfc4648: ["ROBBA4AYBM", "robba4aybm", "R0BBA4aybm"], + crock32: ["HE110W0R1C", "helloworlc", "heiiOw0RiC"], + base32hex: ["HE110S0O1C"] + }, + { + buf: [139, 130, 16, 112, 24, 11, 0], + rfc4648: ["ROBBA4AYBMAA", "robba4aybmaa", "R0BBA4aybmaa"], + crock32: ["HE110W0R1C00", "helloworlc00", "heiiOw0RiC00"], + base32hex: ["HE110S0O1C00"] + } +]; diff --git a/node_modules/base32.js/webpack.config.js b/node_modules/base32.js/webpack.config.js new file mode 100644 index 00000000..c7bc9265 --- /dev/null +++ b/node_modules/base32.js/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** + * Webpack configuration. + */ + +exports = module.exports = { + output: { + library: "base32", + libraryTarget: "this", + sourcePrefix: "" + }, + devtool: "source-map", + node: { + Buffer: false + } +}; diff --git a/node_modules/base64-js/LICENSE b/node_modules/base64-js/LICENSE new file mode 100644 index 00000000..6d52b8ac --- /dev/null +++ b/node_modules/base64-js/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Jameson Little + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/base64-js/README.md b/node_modules/base64-js/README.md new file mode 100644 index 00000000..b42a48f4 --- /dev/null +++ b/node_modules/base64-js/README.md @@ -0,0 +1,34 @@ +base64-js +========= + +`base64-js` does basic base64 encoding/decoding in pure JS. + +[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) + +Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. + +Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. + +## install + +With [npm](https://npmjs.org) do: + +`npm install base64-js` and `var base64js = require('base64-js')` + +For use in web browsers do: + +`` + +[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme) + +## methods + +`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument. + +* `byteLength` - Takes a base64 string and returns length of byte array +* `toByteArray` - Takes a base64 string and returns a byte array +* `fromByteArray` - Takes a byte array and returns a base64 string + +## license + +MIT diff --git a/node_modules/base64-js/base64js.min.js b/node_modules/base64-js/base64js.min.js new file mode 100644 index 00000000..908ac83f --- /dev/null +++ b/node_modules/base64-js/base64js.min.js @@ -0,0 +1 @@ +(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;fj?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} diff --git a/node_modules/base64-js/package.json b/node_modules/base64-js/package.json new file mode 100644 index 00000000..c3972e39 --- /dev/null +++ b/node_modules/base64-js/package.json @@ -0,0 +1,47 @@ +{ + "name": "base64-js", + "description": "Base64 encoding/decoding in pure JS", + "version": "1.5.1", + "author": "T. Jameson Little ", + "typings": "index.d.ts", + "bugs": { + "url": "https://github.com/beatgammit/base64-js/issues" + }, + "devDependencies": { + "babel-minify": "^0.5.1", + "benchmark": "^2.1.4", + "browserify": "^16.3.0", + "standard": "*", + "tape": "4.x" + }, + "homepage": "https://github.com/beatgammit/base64-js", + "keywords": [ + "base64" + ], + "license": "MIT", + "main": "index.js", + "repository": { + "type": "git", + "url": "git://github.com/beatgammit/base64-js.git" + }, + "scripts": { + "build": "browserify -s base64js -r ./ | minify > base64js.min.js", + "lint": "standard", + "test": "npm run lint && npm run unit", + "unit": "tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/bignumber.js/CHANGELOG.md b/node_modules/bignumber.js/CHANGELOG.md new file mode 100644 index 00000000..d7af1b81 --- /dev/null +++ b/node_modules/bignumber.js/CHANGELOG.md @@ -0,0 +1,381 @@ +#### 9.3.1 + +* 11/07/25 +* [BUGFIX] #388 `toPrecision` fix. + +#### 9.3.0 + +* 19/04/25 +* Refactor type declarations: +* Rename *bignumber.d.ts* to *types.d.ts*. +* Rename *bignumber.d.cts* to *bignumber.d.ts*. +* Add `export as namespace` to *bignumber.d.ts*. +* Remove subpath exports from *package.json*. +* Refactor named export from *bignumber.d.mts*. +* #383 Remove `?` from static `BigNumber` and `default` properties. +* Add blank lines after titles in *CHANGELOG.md*. + +#### 9.2.1 + +* 08/04/25 +* #371 #382 Add `BigNumber` as named export. + +#### 9.2.0 + +* 03/04/25 +* #355 Support `BigInt` argument. +* #371 Provide separate type definitions for CommonJS and ES modules. +* #374 Correct `comparedTo` return type. + +#### 9.1.2 + +* 28/08/23 +* #354 Amend `round` to avoid bug in v8 Maglev compiler. +* [BUGFIX] #344 `minimum(0, -0)` should be `-0`. + +#### 9.1.1 + +* 04/12/22 +* #338 [BUGFIX] `exponentiatedBy`: ensure `0**-n === Infinity` for very large `n`. + +#### 9.1.0 + +* 08/08/22 +* #329 Remove `import` example. +* #277 Resolve lint warnings and add number `toString` note. +* Correct `decimalPlaces()` return type in *bignumber.d.ts*. +* Add ES module global `crypto` example. +* #322 Add `exports` field to *package.json*. +* #251 (#308) Amend *bignumber.d.ts* to allow instantiating a BigNumber without `new`. + +#### 9.0.2 + +* 12/12/21 +* #250 [BUGFIX] Allow use of user-defined alphabet for base 10. +* #295 Remove *bignumber.min.js* and amend *README.md*. +* Update *.travis.yml* and *LICENCE.md*. + +#### 9.0.1 + +* 28/09/20 +* [BUGFIX] #276 Correct `sqrt` initial estimate. +* Update *.travis.yml*, *LICENCE.md* and *README.md*. + +#### 9.0.0 + +* 27/05/2019 +* For compatibility with legacy browsers, remove `Symbol` references. + +#### 8.1.1 + +* 24/02/2019 +* [BUGFIX] #222 Restore missing `var` to `export BigNumber`. +* Allow any key in BigNumber.Instance in *bignumber.d.ts*. + +#### 8.1.0 + +* 23/02/2019 +* [NEW FEATURE] #220 Create a BigNumber using `{s, e, c}`. +* [NEW FEATURE] `isBigNumber`: if `BigNumber.DEBUG` is `true`, also check that the BigNumber instance is well-formed. +* Remove `instanceof` checks; just use `_isBigNumber` to identify a BigNumber instance. +* Add `_isBigNumber` to prototype in *bignumber.mjs*. +* Add tests for BigNumber creation from object. +* Update *API.html*. + +#### 8.0.2 + +* 13/01/2019 +* #209 `toPrecision` without argument should follow `toString`. +* Improve *Use* section of *README*. +* Optimise `toString(10)`. +* Add verson number to API doc. + +#### 8.0.1 + +* 01/11/2018 +* Rest parameter must be array type in *bignumber.d.ts*. + +#### 8.0.0 + +* 01/11/2018 +* [NEW FEATURE] Add `BigNumber.sum` method. +* [NEW FEATURE]`toFormat`: add `prefix` and `suffix` options. +* [NEW FEATURE] #178 Pass custom formatting to `toFormat`. +* [BREAKING CHANGE] #184 `toFraction`: return array of BigNumbers not strings. +* [NEW FEATURE] #185 Enable overwrite of `valueOf` to prevent accidental addition to string. +* #183 Add Node.js `crypto` requirement to documentation. +* [BREAKING CHANGE] #198 Disallow signs and whitespace in custom alphabet. +* [NEW FEATURE] #188 Implement `util.inspect.custom` for Node.js REPL. +* #170 Make `isBigNumber` a type guard in *bignumber.d.ts*. +* [BREAKING CHANGE] `BigNumber.min` and `BigNumber.max`: don't accept an array. +* Update *.travis.yml*. +* Remove *bower.json*. + +#### 7.2.1 + +* 24/05/2018 +* Add `browser` field to *package.json*. + +#### 7.2.0 + +* 22/05/2018 +* #166 Correct *.mjs* file. Remove extension from `main` field in *package.json*. + +#### 7.1.0 + +* 18/05/2018 +* Add `module` field to *package.json* for *bignumber.mjs*. + +#### 7.0.2 + +* 17/05/2018 +* #165 Bugfix: upper-case letters for bases 11-36 in a custom alphabet. +* Add note to *README* regarding creating BigNumbers from Number values. + +#### 7.0.1 + +* 26/04/2018 +* #158 Fix global object variable name typo. + +#### 7.0.0 + +* 26/04/2018 +* #143 Remove global BigNumber from typings. +* #144 Enable compatibility with `Object.freeze(Object.prototype)`. +* #148 #123 #11 Only throw on a number primitive with more than 15 significant digits if `BigNumber.DEBUG` is `true`. +* Only throw on an invalid BigNumber value if `BigNumber.DEBUG` is `true`. Return BigNumber `NaN` instead. +* #154 `exponentiatedBy`: allow BigNumber exponent. +* #156 Prevent Content Security Policy *unsafe-eval* issue. +* `toFraction`: allow `Infinity` maximum denominator. +* Comment-out some excess tests to reduce test time. +* Amend indentation and other spacing. + +#### 6.0.0 + +* 26/01/2018 +* #137 Implement `APLHABET` configuration option. +* Remove `ERRORS` configuration option. +* Remove `toDigits` method; extend `precision` method accordingly. +* Remove s`round` method; extend `decimalPlaces` method accordingly. +* Remove methods: `ceil`, `floor`, and `truncated`. +* Remove method aliases: `add`, `cmp`, `isInt`, `isNeg`, `trunc`, `mul`, `neg` and `sub`. +* Rename methods: `shift` to `shiftedBy`, `another` to `clone`, `toPower` to `exponentiatedBy`, and `equals` to `isEqualTo`. +* Rename methods: add `is` prefix to `greaterThan`, `greaterThanOrEqualTo`, `lessThan` and `lessThanOrEqualTo`. +* Add methods: `multipliedBy`, `isBigNumber`, `isPositive`, `integerValue`, `maximum` and `minimum`. +* Refactor test suite. +* Add *CHANGELOG.md*. +* Rewrite *bignumber.d.ts*. +* Redo API image. + +#### 5.0.0 + +* 27/11/2017 +* #81 Don't throw on constructor call without `new`. + +#### 4.1.0 + +* 26/09/2017 +* Remove node 0.6 from *.travis.yml*. +* Add *bignumber.mjs*. + +#### 4.0.4 + +* 03/09/2017 +* Add missing aliases to *bignumber.d.ts*. + +#### 4.0.3 + +* 30/08/2017 +* Add types: *bignumber.d.ts*. + +#### 4.0.2 + +* 03/05/2017 +* #120 Workaround Safari/Webkit bug. + +#### 4.0.1 + +* 05/04/2017 +* #121 BigNumber.default to BigNumber['default']. + +#### 4.0.0 + +* 09/01/2017 +* Replace BigNumber.isBigNumber method with isBigNumber prototype property. + +#### 3.1.2 + +* 08/01/2017 +* Minor documentation edit. + +#### 3.1.1 + +* 08/01/2017 +* Uncomment `isBigNumber` tests. +* Ignore dot files. + +#### 3.1.0 + +* 08/01/2017 +* Add `isBigNumber` method. + +#### 3.0.2 + +* 08/01/2017 +* Bugfix: Possible incorrect value of `ERRORS` after a `BigNumber.another` call (due to `parseNumeric` declaration in outer scope). + +#### 3.0.1 + +* 23/11/2016 +* Apply fix for old ipads with `%` issue, see #57 and #102. +* Correct error message. + +#### 3.0.0 + +* 09/11/2016 +* Remove `require('crypto')` - leave it to the user. +* Add `BigNumber.set` as `BigNumber.config` alias. +* Default `POW_PRECISION` to `0`. + +#### 2.4.0 + +* 14/07/2016 +* #97 Add exports to support ES6 imports. + +#### 2.3.0 + +* 07/03/2016 +* #86 Add modulus parameter to `toPower`. + +#### 2.2.0 + +* 03/03/2016 +* #91 Permit larger JS integers. + +#### 2.1.4 + +* 15/12/2015 +* Correct UMD. + +#### 2.1.3 + +* 13/12/2015 +* Refactor re global object and crypto availability when bundling. + +#### 2.1.2 + +* 10/12/2015 +* Bugfix: `window.crypto` not assigned to `crypto`. + +#### 2.1.1 + +* 09/12/2015 +* Prevent code bundler from adding `crypto` shim. + +#### 2.1.0 + +* 26/10/2015 +* For `valueOf` and `toJSON`, include the minus sign with negative zero. + +#### 2.0.8 + +* 2/10/2015 +* Internal round function bugfix. + +#### 2.0.6 + +* 31/03/2015 +* Add bower.json. Tweak division after in-depth review. + +#### 2.0.5 + +* 25/03/2015 +* Amend README. Remove bitcoin address. + +#### 2.0.4 + +* 25/03/2015 +* Critical bugfix #58: division. + +#### 2.0.3 + +* 18/02/2015 +* Amend README. Add source map. + +#### 2.0.2 + +* 18/02/2015 +* Correct links. + +#### 2.0.1 + +* 18/02/2015 +* Add `max`, `min`, `precision`, `random`, `shiftedBy`, `toDigits` and `truncated` methods. +* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. +* Add an `another` method to enable multiple independent constructors to be created. +* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. +* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. +* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. +* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. +* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. +* Improve code quality. +* Improve documentation. + +#### 2.0.0 + +* 29/12/2014 +* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. +* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. +* Store a BigNumber's coefficient in base 1e14, rather than base 10. +* Add fast path for integers to BigNumber constructor. +* Incorporate the library into the online documentation. + +#### 1.5.0 + +* 13/11/2014 +* Add `toJSON` and `decimalPlaces` methods. + +#### 1.4.1 + +* 08/06/2014 +* Amend README. + +#### 1.4.0 + +* 08/05/2014 +* Add `toNumber`. + +#### 1.3.0 + +* 08/11/2013 +* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. +* Maximum radix to 64. + +#### 1.2.1 + +* 17/10/2013 +* Sign of zero when x < 0 and x + (-x) = 0. + +#### 1.2.0 + +* 19/9/2013 +* Throw Error objects for stack. + +#### 1.1.1 + +* 22/8/2013 +* Show original value in constructor error message. + +#### 1.1.0 + +* 1/8/2013 +* Allow numbers with trailing radix point. + +#### 1.0.1 + +* Bugfix: error messages with incorrect method name + +#### 1.0.0 + +* 8/11/2012 +* Initial release diff --git a/node_modules/bignumber.js/LICENCE.md b/node_modules/bignumber.js/LICENCE.md new file mode 100644 index 00000000..2800f9ee --- /dev/null +++ b/node_modules/bignumber.js/LICENCE.md @@ -0,0 +1,26 @@ +The MIT License (MIT) +===================== + +Copyright © `<2025>` `Michael Mclaughlin` + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the “Software”), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/bignumber.js/README.md b/node_modules/bignumber.js/README.md new file mode 100644 index 00000000..5a40d09f --- /dev/null +++ b/node_modules/bignumber.js/README.md @@ -0,0 +1,289 @@ +![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png) + +A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic. + +[![npm version](https://img.shields.io/npm/v/bignumber.js.svg)](https://www.npmjs.com/package/bignumber.js) +[![npm downloads](https://img.shields.io/npm/dw/bignumber.js)](https://www.npmjs.com/package/bignumber.js) +[![CI](https://github.com/MikeMcl/bignumber.js/actions/workflows/ci.yml/badge.svg)](https://github.com/MikeMcl/bignumber.js/actions/workflows/ci.yml) + +
+ +## Features + +- Integers and decimals +- Simple API but full-featured +- Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal +- 8 KB minified and gzipped +- Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type +- Includes a `toFraction` and a correctly-rounded `squareRoot` method +- Supports cryptographically-secure pseudo-random number generation +- No dependencies +- Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only +- Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set + +![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png) + +If a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/). +It's less than half the size but only works with decimal numbers and only has half the methods. +It also has fewer configuration options than this library, and does not allow `NaN` or `Infinity`. + +See also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits. + +## Load + +The library is the single JavaScript file *bignumber.js* or ES module *bignumber.mjs*. + +### Browser + +```html + +``` + +> ES module + +```html + +``` + +### [Node.js](http://nodejs.org) + +```bash +npm install bignumber.js +``` + +```javascript +const BigNumber = require('bignumber.js'); +``` + +> ES module + +```javascript +import BigNumber from "bignumber.js"; +``` + +### [Deno](https://deno.land/) + +```javascript +// @deno-types="https://raw.githubusercontent.com/mikemcl/bignumber.js/v9.3.1/bignumber.d.mts" +import BigNumber from 'https://raw.githubusercontent.com/mikemcl/bignumber.js/v9.3.1/bignumber.mjs'; + +// @deno-types="https://unpkg.com/bignumber.js@latest/bignumber.d.mts" +import { BigNumber } from 'https://unpkg.com/bignumber.js@latest/bignumber.mjs'; +``` + +## Use + +The library exports a single constructor function, [`BigNumber`](http://mikemcl.github.io/bignumber.js/#bignumber), which accepts a value of type Number, String or BigNumber, + +```javascript +let x = new BigNumber(123.4567); +let y = BigNumber('123456.7e-3'); +let z = new BigNumber(x); +x.isEqualTo(y) && y.isEqualTo(z) && x.isEqualTo(z); // true +``` + +To get the string value of a BigNumber use [`toString()`](http://mikemcl.github.io/bignumber.js/#toS) or [`toFixed()`](http://mikemcl.github.io/bignumber.js/#toFix). Using `toFixed()` prevents exponential notation being returned, no matter how large or small the value. + +```javascript +let x = new BigNumber('1111222233334444555566'); +x.toString(); // "1.111222233334444555566e+21" +x.toFixed(); // "1111222233334444555566" +``` + +If the limited precision of Number values is not well understood, it is recommended to create BigNumbers from String values rather than Number values to avoid a potential loss of precision. + +*In all further examples below, `let`, semicolons and `toString` calls are not shown. If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* + +```javascript +// Precision loss from using numeric literals with more than 15 significant digits. +new BigNumber(1.0000000000000001) // '1' +new BigNumber(88259496234518.57) // '88259496234518.56' +new BigNumber(99999999999999999999) // '100000000000000000000' + +// Precision loss from using numeric literals outside the range of Number values. +new BigNumber(2e+308) // 'Infinity' +new BigNumber(1e-324) // '0' + +// Precision loss from the unexpected result of arithmetic with Number values. +new BigNumber(0.7 + 0.1) // '0.7999999999999999' +``` + +When creating a BigNumber from a Number, note that a BigNumber is created from a Number's decimal `toString()` value not from its underlying binary value. If the latter is required, then pass the Number's `toString(2)` value and specify base 2. + +```javascript +new BigNumber(Number.MAX_VALUE.toString(2), 2) +``` + +BigNumbers can be created from values in bases from 2 to 36. See [`ALPHABET`](http://mikemcl.github.io/bignumber.js/#alphabet) to extend this range. + +```javascript +a = new BigNumber(1011, 2) // "11" +b = new BigNumber('zz.9', 36) // "1295.25" +c = a.plus(b) // "1306.25" +``` + +*Performance is better if base 10 is NOT specified for decimal values. Only specify base 10 when you want to limit the number of decimal places of the input value to the current [`DECIMAL_PLACES`](http://mikemcl.github.io/bignumber.js/#decimal-places) setting.* + +A BigNumber is immutable in the sense that it is not changed by its methods. + +```javascript +0.3 - 0.1 // 0.19999999999999998 +x = new BigNumber(0.3) +x.minus(0.1) // "0.2" +x // "0.3" +``` + +The methods that return a BigNumber can be chained. + +```javascript +x.dividedBy(y).plus(z).times(9) +x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').integerValue() +``` + +Some of the longer method names have a shorter alias. + +```javascript +x.squareRoot().dividedBy(y).exponentiatedBy(3).isEqualTo(x.sqrt().div(y).pow(3)) // true +x.modulo(y).multipliedBy(z).eq(x.mod(y).times(z)) // true +``` + +As with JavaScript's Number type, there are [`toExponential`](http://mikemcl.github.io/bignumber.js/#toE), [`toFixed`](http://mikemcl.github.io/bignumber.js/#toFix) and [`toPrecision`](http://mikemcl.github.io/bignumber.js/#toP) methods. + +```javascript +x = new BigNumber(255.5) +x.toExponential(5) // "2.55500e+2" +x.toFixed(5) // "255.50000" +x.toPrecision(5) // "255.50" +x.toNumber() // 255.5 +``` + + A base can be specified for [`toString`](http://mikemcl.github.io/bignumber.js/#toS). + +*Performance is better if base 10 is NOT specified, i.e. use `toString()` not `toString(10)`. Only specify base 10 when you want to limit the number of decimal places of the string to the current [`DECIMAL_PLACES`](http://mikemcl.github.io/bignumber.js/#decimal-places) setting.* + + ```javascript + x.toString(16) // "ff.8" + ``` + +There is a [`toFormat`](http://mikemcl.github.io/bignumber.js/#toFor) method which may be useful for internationalisation. + +```javascript +y = new BigNumber('1234567.898765') +y.toFormat(2) // "1,234,567.90" +``` + +The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `set` or `config` method of the `BigNumber` constructor. + +The other arithmetic operations always give the exact result. + +```javascript +BigNumber.set({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) + +x = new BigNumber(2) +y = new BigNumber(3) +z = x.dividedBy(y) // "0.6666666667" +z.squareRoot() // "0.8164965809" +z.exponentiatedBy(-3) // "3.3749999995" +z.toString(2) // "0.1010101011" +z.multipliedBy(z) // "0.44444444448888888889" +z.multipliedBy(z).decimalPlaces(10) // "0.4444444445" +``` + +There is a [`toFraction`](http://mikemcl.github.io/bignumber.js/#toFr) method with an optional *maximum denominator* argument + +```javascript +y = new BigNumber(355) +pi = y.dividedBy(113) // "3.1415929204" +pi.toFraction() // [ "7853982301", "2500000000" ] +pi.toFraction(1000) // [ "355", "113" ] +``` + +and [`isNaN`](http://mikemcl.github.io/bignumber.js/#isNaN) and [`isFinite`](http://mikemcl.github.io/bignumber.js/#isF) methods, as `NaN` and `Infinity` are valid `BigNumber` values. + +```javascript +x = new BigNumber(NaN) // "NaN" +y = new BigNumber(Infinity) // "Infinity" +x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true +``` + +The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. + +```javascript +x = new BigNumber(-123.456); +x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) +x.e // 2 exponent +x.s // -1 sign +``` + +For advanced usage, multiple BigNumber constructors can be created, each with its own independent configuration. + +```javascript +// Set DECIMAL_PLACES for the original BigNumber constructor +BigNumber.set({ DECIMAL_PLACES: 10 }) + +// Create another BigNumber constructor, optionally passing in a configuration object +BN = BigNumber.clone({ DECIMAL_PLACES: 5 }) + +x = new BigNumber(1) +y = new BN(1) + +x.div(3) // '0.3333333333' +y.div(3) // '0.33333' +``` + +To avoid having to call `toString` or `valueOf` on a BigNumber to get its value in the Node.js REPL or when using `console.log` use + +```javascript +BigNumber.prototype[require('util').inspect.custom] = BigNumber.prototype.valueOf; +``` + +For further information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. + +## Test + +The *test/modules* directory contains the test scripts for each method. + +The tests can be run with Node.js or a browser. For Node.js use + +```bash +npm test +``` + +or + +```bash +node test/test +``` + +To test a single method, use, for example + +```bash +node test/methods/toFraction +``` + +For the browser, open *test/test.html*. + +## Minify + +To minify using, for example, [terser](https://github.com/terser/terser) + +```bash +npm install -g terser +``` + +```bash +terser big.js -c -m -o big.min.js +``` + +## Licence + +The MIT Licence. + +See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/main/LICENCE.md). diff --git a/node_modules/bignumber.js/bignumber.d.mts b/node_modules/bignumber.js/bignumber.d.mts new file mode 100644 index 00000000..a58ca365 --- /dev/null +++ b/node_modules/bignumber.js/bignumber.d.mts @@ -0,0 +1,6 @@ +/// + +export default BigNumber; + +declare const BigNumberType: typeof BigNumber; +export { BigNumberType as BigNumber }; diff --git a/node_modules/bignumber.js/bignumber.d.ts b/node_modules/bignumber.js/bignumber.d.ts new file mode 100644 index 00000000..6fde7b0c --- /dev/null +++ b/node_modules/bignumber.js/bignumber.d.ts @@ -0,0 +1,5 @@ +/// + +export = BigNumber; + +export as namespace BigNumber; diff --git a/node_modules/bignumber.js/bignumber.js b/node_modules/bignumber.js/bignumber.js new file mode 100644 index 00000000..663c2ae7 --- /dev/null +++ b/node_modules/bignumber.js/bignumber.js @@ -0,0 +1,2922 @@ +;(function (globalObject) { + 'use strict'; + +/* + * bignumber.js v9.3.1 + * A JavaScript library for arbitrary-precision arithmetic. + * https://github.com/MikeMcl/bignumber.js + * Copyright (c) 2025 Michael Mclaughlin + * MIT Licensed. + * + * BigNumber.prototype methods | BigNumber methods + * | + * absoluteValue abs | clone + * comparedTo | config set + * decimalPlaces dp | DECIMAL_PLACES + * dividedBy div | ROUNDING_MODE + * dividedToIntegerBy idiv | EXPONENTIAL_AT + * exponentiatedBy pow | RANGE + * integerValue | CRYPTO + * isEqualTo eq | MODULO_MODE + * isFinite | POW_PRECISION + * isGreaterThan gt | FORMAT + * isGreaterThanOrEqualTo gte | ALPHABET + * isInteger | isBigNumber + * isLessThan lt | maximum max + * isLessThanOrEqualTo lte | minimum min + * isNaN | random + * isNegative | sum + * isPositive | + * isZero | + * minus | + * modulo mod | + * multipliedBy times | + * negated | + * plus | + * precision sd | + * shiftedBy | + * squareRoot sqrt | + * toExponential | + * toFixed | + * toFormat | + * toFraction | + * toJSON | + * toNumber | + * toPrecision | + * toString | + * valueOf | + * + */ + + + var BigNumber, + isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, + mathceil = Math.ceil, + mathfloor = Math.floor, + + bignumberError = '[BigNumber Error] ', + tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ', + + BASE = 1e14, + LOG_BASE = 14, + MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 + // MAX_INT32 = 0x7fffffff, // 2^31 - 1 + POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], + SQRT_BASE = 1e7, + + // EDITABLE + // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and + // the arguments to toExponential, toFixed, toFormat, and toPrecision. + MAX = 1E9; // 0 to MAX_INT32 + + + /* + * Create and return a BigNumber constructor. + */ + function clone(configObject) { + var div, convertBase, parseNumeric, + P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null }, + ONE = new BigNumber(1), + + + //----------------------------- EDITABLE CONFIG DEFAULTS ------------------------------- + + + // The default values below must be integers within the inclusive ranges stated. + // The values can also be changed at run-time using BigNumber.set. + + // The maximum number of decimal places for operations involving division. + DECIMAL_PLACES = 20, // 0 to MAX + + // The rounding mode used when rounding to the above decimal places, and when using + // toExponential, toFixed, toFormat and toPrecision, and round (default value). + // UP 0 Away from zero. + // DOWN 1 Towards zero. + // CEIL 2 Towards +Infinity. + // FLOOR 3 Towards -Infinity. + // HALF_UP 4 Towards nearest neighbour. If equidistant, up. + // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. + // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. + // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. + // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. + ROUNDING_MODE = 4, // 0 to 8 + + // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] + + // The exponent value at and beneath which toString returns exponential notation. + // Number type: -7 + TO_EXP_NEG = -7, // 0 to -MAX + + // The exponent value at and above which toString returns exponential notation. + // Number type: 21 + TO_EXP_POS = 21, // 0 to MAX + + // RANGE : [MIN_EXP, MAX_EXP] + + // The minimum exponent value, beneath which underflow to zero occurs. + // Number type: -324 (5e-324) + MIN_EXP = -1e7, // -1 to -MAX + + // The maximum exponent value, above which overflow to Infinity occurs. + // Number type: 308 (1.7976931348623157e+308) + // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. + MAX_EXP = 1e7, // 1 to MAX + + // Whether to use cryptographically-secure random number generation, if available. + CRYPTO = false, // true or false + + // The modulo mode used when calculating the modulus: a mod n. + // The quotient (q = a / n) is calculated according to the corresponding rounding mode. + // The remainder (r) is calculated as: r = a - n * q. + // + // UP 0 The remainder is positive if the dividend is negative, else is negative. + // DOWN 1 The remainder has the same sign as the dividend. + // This modulo mode is commonly known as 'truncated division' and is + // equivalent to (a % n) in JavaScript. + // FLOOR 3 The remainder has the same sign as the divisor (Python %). + // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. + // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). + // The remainder is always positive. + // + // The truncated division, floored division, Euclidian division and IEEE 754 remainder + // modes are commonly used for the modulus operation. + // Although the other rounding modes can also be used, they may not give useful results. + MODULO_MODE = 1, // 0 to 9 + + // The maximum number of significant digits of the result of the exponentiatedBy operation. + // If POW_PRECISION is 0, there will be unlimited significant digits. + POW_PRECISION = 0, // 0 to MAX + + // The format specification used by the BigNumber.prototype.toFormat method. + FORMAT = { + prefix: '', + groupSize: 3, + secondaryGroupSize: 0, + groupSeparator: ',', + decimalSeparator: '.', + fractionGroupSize: 0, + fractionGroupSeparator: '\xA0', // non-breaking space + suffix: '' + }, + + // The alphabet used for base conversion. It must be at least 2 characters long, with no '+', + // '-', '.', whitespace, or repeated character. + // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' + ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz', + alphabetHasNormalDecimalDigits = true; + + + //------------------------------------------------------------------------------------------ + + + // CONSTRUCTOR + + + /* + * The BigNumber constructor and exported function. + * Create and return a new instance of a BigNumber object. + * + * v {number|string|BigNumber} A numeric value. + * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive. + */ + function BigNumber(v, b) { + var alphabet, c, caseChanged, e, i, isNum, len, str, + x = this; + + // Enable constructor call without `new`. + if (!(x instanceof BigNumber)) return new BigNumber(v, b); + + if (b == null) { + + if (v && v._isBigNumber === true) { + x.s = v.s; + + if (!v.c || v.e > MAX_EXP) { + x.c = x.e = null; + } else if (v.e < MIN_EXP) { + x.c = [x.e = 0]; + } else { + x.e = v.e; + x.c = v.c.slice(); + } + + return; + } + + if ((isNum = typeof v == 'number') && v * 0 == 0) { + + // Use `1 / n` to handle minus zero also. + x.s = 1 / v < 0 ? (v = -v, -1) : 1; + + // Fast path for integers, where n < 2147483648 (2**31). + if (v === ~~v) { + for (e = 0, i = v; i >= 10; i /= 10, e++); + + if (e > MAX_EXP) { + x.c = x.e = null; + } else { + x.e = e; + x.c = [v]; + } + + return; + } + + str = String(v); + } else { + + if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum); + + x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; + } + + // Decimal point? + if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); + + // Exponential form? + if ((i = str.search(/e/i)) > 0) { + + // Determine exponent. + if (e < 0) e = i; + e += +str.slice(i + 1); + str = str.substring(0, i); + } else if (e < 0) { + + // Integer. + e = str.length; + } + + } else { + + // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' + intCheck(b, 2, ALPHABET.length, 'Base'); + + // Allow exponential notation to be used with base 10 argument, while + // also rounding to DECIMAL_PLACES as with other bases. + if (b == 10 && alphabetHasNormalDecimalDigits) { + x = new BigNumber(v); + return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); + } + + str = String(v); + + if (isNum = typeof v == 'number') { + + // Avoid potential interpretation of Infinity and NaN as base 44+ values. + if (v * 0 != 0) return parseNumeric(x, str, isNum, b); + + x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; + + // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' + if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) { + throw Error + (tooManyDigits + v); + } + } else { + x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; + } + + alphabet = ALPHABET.slice(0, b); + e = i = 0; + + // Check that str is a valid base b number. + // Don't use RegExp, so alphabet can contain special characters. + for (len = str.length; i < len; i++) { + if (alphabet.indexOf(c = str.charAt(i)) < 0) { + if (c == '.') { + + // If '.' is not the first character and it has not be found before. + if (i > e) { + e = len; + continue; + } + } else if (!caseChanged) { + + // Allow e.g. hexadecimal 'FF' as well as 'ff'. + if (str == str.toUpperCase() && (str = str.toLowerCase()) || + str == str.toLowerCase() && (str = str.toUpperCase())) { + caseChanged = true; + i = -1; + e = 0; + continue; + } + } + + return parseNumeric(x, String(v), isNum, b); + } + } + + // Prevent later check for length on converted number. + isNum = false; + str = convertBase(str, b, 10, x.s); + + // Decimal point? + if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); + else e = str.length; + } + + // Determine leading zeros. + for (i = 0; str.charCodeAt(i) === 48; i++); + + // Determine trailing zeros. + for (len = str.length; str.charCodeAt(--len) === 48;); + + if (str = str.slice(i, ++len)) { + len -= i; + + // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' + if (isNum && BigNumber.DEBUG && + len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { + throw Error + (tooManyDigits + (x.s * v)); + } + + // Overflow? + if ((e = e - i - 1) > MAX_EXP) { + + // Infinity. + x.c = x.e = null; + + // Underflow? + } else if (e < MIN_EXP) { + + // Zero. + x.c = [x.e = 0]; + } else { + x.e = e; + x.c = []; + + // Transform base + + // e is the base 10 exponent. + // i is where to slice str to get the first element of the coefficient array. + i = (e + 1) % LOG_BASE; + if (e < 0) i += LOG_BASE; // i < 1 + + if (i < len) { + if (i) x.c.push(+str.slice(0, i)); + + for (len -= LOG_BASE; i < len;) { + x.c.push(+str.slice(i, i += LOG_BASE)); + } + + i = LOG_BASE - (str = str.slice(i)).length; + } else { + i -= len; + } + + for (; i--; str += '0'); + x.c.push(+str); + } + } else { + + // Zero. + x.c = [x.e = 0]; + } + } + + + // CONSTRUCTOR PROPERTIES + + + BigNumber.clone = clone; + + BigNumber.ROUND_UP = 0; + BigNumber.ROUND_DOWN = 1; + BigNumber.ROUND_CEIL = 2; + BigNumber.ROUND_FLOOR = 3; + BigNumber.ROUND_HALF_UP = 4; + BigNumber.ROUND_HALF_DOWN = 5; + BigNumber.ROUND_HALF_EVEN = 6; + BigNumber.ROUND_HALF_CEIL = 7; + BigNumber.ROUND_HALF_FLOOR = 8; + BigNumber.EUCLID = 9; + + + /* + * Configure infrequently-changing library-wide settings. + * + * Accept an object with the following optional properties (if the value of a property is + * a number, it must be an integer within the inclusive range stated): + * + * DECIMAL_PLACES {number} 0 to MAX + * ROUNDING_MODE {number} 0 to 8 + * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX] + * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX] + * CRYPTO {boolean} true or false + * MODULO_MODE {number} 0 to 9 + * POW_PRECISION {number} 0 to MAX + * ALPHABET {string} A string of two or more unique characters which does + * not contain '.'. + * FORMAT {object} An object with some of the following properties: + * prefix {string} + * groupSize {number} + * secondaryGroupSize {number} + * groupSeparator {string} + * decimalSeparator {string} + * fractionGroupSize {number} + * fractionGroupSeparator {string} + * suffix {string} + * + * (The values assigned to the above FORMAT object properties are not checked for validity.) + * + * E.g. + * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) + * + * Ignore properties/parameters set to null or undefined, except for ALPHABET. + * + * Return an object with the properties current values. + */ + BigNumber.config = BigNumber.set = function (obj) { + var p, v; + + if (obj != null) { + + if (typeof obj == 'object') { + + // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. + // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) { + v = obj[p]; + intCheck(v, 0, MAX, p); + DECIMAL_PLACES = v; + } + + // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. + // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) { + v = obj[p]; + intCheck(v, 0, 8, p); + ROUNDING_MODE = v; + } + + // EXPONENTIAL_AT {number|number[]} + // Integer, -MAX to MAX inclusive or + // [integer -MAX to 0 inclusive, 0 to MAX inclusive]. + // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) { + v = obj[p]; + if (v && v.pop) { + intCheck(v[0], -MAX, 0, p); + intCheck(v[1], 0, MAX, p); + TO_EXP_NEG = v[0]; + TO_EXP_POS = v[1]; + } else { + intCheck(v, -MAX, MAX, p); + TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); + } + } + + // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or + // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. + // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}' + if (obj.hasOwnProperty(p = 'RANGE')) { + v = obj[p]; + if (v && v.pop) { + intCheck(v[0], -MAX, -1, p); + intCheck(v[1], 1, MAX, p); + MIN_EXP = v[0]; + MAX_EXP = v[1]; + } else { + intCheck(v, -MAX, MAX, p); + if (v) { + MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); + } else { + throw Error + (bignumberError + p + ' cannot be zero: ' + v); + } + } + } + + // CRYPTO {boolean} true or false. + // '[BigNumber Error] CRYPTO not true or false: {v}' + // '[BigNumber Error] crypto unavailable' + if (obj.hasOwnProperty(p = 'CRYPTO')) { + v = obj[p]; + if (v === !!v) { + if (v) { + if (typeof crypto != 'undefined' && crypto && + (crypto.getRandomValues || crypto.randomBytes)) { + CRYPTO = v; + } else { + CRYPTO = !v; + throw Error + (bignumberError + 'crypto unavailable'); + } + } else { + CRYPTO = v; + } + } else { + throw Error + (bignumberError + p + ' not true or false: ' + v); + } + } + + // MODULO_MODE {number} Integer, 0 to 9 inclusive. + // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'MODULO_MODE')) { + v = obj[p]; + intCheck(v, 0, 9, p); + MODULO_MODE = v; + } + + // POW_PRECISION {number} Integer, 0 to MAX inclusive. + // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'POW_PRECISION')) { + v = obj[p]; + intCheck(v, 0, MAX, p); + POW_PRECISION = v; + } + + // FORMAT {object} + // '[BigNumber Error] FORMAT not an object: {v}' + if (obj.hasOwnProperty(p = 'FORMAT')) { + v = obj[p]; + if (typeof v == 'object') FORMAT = v; + else throw Error + (bignumberError + p + ' not an object: ' + v); + } + + // ALPHABET {string} + // '[BigNumber Error] ALPHABET invalid: {v}' + if (obj.hasOwnProperty(p = 'ALPHABET')) { + v = obj[p]; + + // Disallow if less than two characters, + // or if it contains '+', '-', '.', whitespace, or a repeated character. + if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) { + alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789'; + ALPHABET = v; + } else { + throw Error + (bignumberError + p + ' invalid: ' + v); + } + } + + } else { + + // '[BigNumber Error] Object expected: {v}' + throw Error + (bignumberError + 'Object expected: ' + obj); + } + } + + return { + DECIMAL_PLACES: DECIMAL_PLACES, + ROUNDING_MODE: ROUNDING_MODE, + EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], + RANGE: [MIN_EXP, MAX_EXP], + CRYPTO: CRYPTO, + MODULO_MODE: MODULO_MODE, + POW_PRECISION: POW_PRECISION, + FORMAT: FORMAT, + ALPHABET: ALPHABET + }; + }; + + + /* + * Return true if v is a BigNumber instance, otherwise return false. + * + * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed. + * + * v {any} + * + * '[BigNumber Error] Invalid BigNumber: {v}' + */ + BigNumber.isBigNumber = function (v) { + if (!v || v._isBigNumber !== true) return false; + if (!BigNumber.DEBUG) return true; + + var i, n, + c = v.c, + e = v.e, + s = v.s; + + out: if ({}.toString.call(c) == '[object Array]') { + + if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { + + // If the first element is zero, the BigNumber value must be zero. + if (c[0] === 0) { + if (e === 0 && c.length === 1) return true; + break out; + } + + // Calculate number of digits that c[0] should have, based on the exponent. + i = (e + 1) % LOG_BASE; + if (i < 1) i += LOG_BASE; + + // Calculate number of digits of c[0]. + //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) { + if (String(c[0]).length == i) { + + for (i = 0; i < c.length; i++) { + n = c[i]; + if (n < 0 || n >= BASE || n !== mathfloor(n)) break out; + } + + // Last element cannot be zero, unless it is the only element. + if (n !== 0) return true; + } + } + + // Infinity/NaN + } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { + return true; + } + + throw Error + (bignumberError + 'Invalid BigNumber: ' + v); + }; + + + /* + * Return a new BigNumber whose value is the maximum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.maximum = BigNumber.max = function () { + return maxOrMin(arguments, -1); + }; + + + /* + * Return a new BigNumber whose value is the minimum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.minimum = BigNumber.min = function () { + return maxOrMin(arguments, 1); + }; + + + /* + * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, + * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing + * zeros are produced). + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}' + * '[BigNumber Error] crypto unavailable' + */ + BigNumber.random = (function () { + var pow2_53 = 0x20000000000000; + + // Return a 53 bit integer n, where 0 <= n < 9007199254740992. + // Check if Math.random() produces more than 32 bits of randomness. + // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. + // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. + var random53bitInt = (Math.random() * pow2_53) & 0x1fffff + ? function () { return mathfloor(Math.random() * pow2_53); } + : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + + (Math.random() * 0x800000 | 0); }; + + return function (dp) { + var a, b, e, k, v, + i = 0, + c = [], + rand = new BigNumber(ONE); + + if (dp == null) dp = DECIMAL_PLACES; + else intCheck(dp, 0, MAX); + + k = mathceil(dp / LOG_BASE); + + if (CRYPTO) { + + // Browsers supporting crypto.getRandomValues. + if (crypto.getRandomValues) { + + a = crypto.getRandomValues(new Uint32Array(k *= 2)); + + for (; i < k;) { + + // 53 bits: + // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) + // 11111 11111111 11111111 11111111 11100000 00000000 00000000 + // ((Math.pow(2, 32) - 1) >>> 11).toString(2) + // 11111 11111111 11111111 + // 0x20000 is 2^21. + v = a[i] * 0x20000 + (a[i + 1] >>> 11); + + // Rejection sampling: + // 0 <= v < 9007199254740992 + // Probability that v >= 9e15, is + // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 + if (v >= 9e15) { + b = crypto.getRandomValues(new Uint32Array(2)); + a[i] = b[0]; + a[i + 1] = b[1]; + } else { + + // 0 <= v <= 8999999999999999 + // 0 <= (v % 1e14) <= 99999999999999 + c.push(v % 1e14); + i += 2; + } + } + i = k / 2; + + // Node.js supporting crypto.randomBytes. + } else if (crypto.randomBytes) { + + // buffer + a = crypto.randomBytes(k *= 7); + + for (; i < k;) { + + // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 + // 0x100000000 is 2^32, 0x1000000 is 2^24 + // 11111 11111111 11111111 11111111 11111111 11111111 11111111 + // 0 <= v < 9007199254740992 + v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) + + (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) + + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; + + if (v >= 9e15) { + crypto.randomBytes(7).copy(a, i); + } else { + + // 0 <= (v % 1e14) <= 99999999999999 + c.push(v % 1e14); + i += 7; + } + } + i = k / 7; + } else { + CRYPTO = false; + throw Error + (bignumberError + 'crypto unavailable'); + } + } + + // Use Math.random. + if (!CRYPTO) { + + for (; i < k;) { + v = random53bitInt(); + if (v < 9e15) c[i++] = v % 1e14; + } + } + + k = c[--i]; + dp %= LOG_BASE; + + // Convert trailing digits to zeros according to dp. + if (k && dp) { + v = POWS_TEN[LOG_BASE - dp]; + c[i] = mathfloor(k / v) * v; + } + + // Remove trailing elements which are zero. + for (; c[i] === 0; c.pop(), i--); + + // Zero? + if (i < 0) { + c = [e = 0]; + } else { + + // Remove leading elements which are zero and adjust exponent accordingly. + for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); + + // Count the digits of the first element of c to determine leading zeros, and... + for (i = 1, v = c[0]; v >= 10; v /= 10, i++); + + // adjust the exponent accordingly. + if (i < LOG_BASE) e -= LOG_BASE - i; + } + + rand.e = e; + rand.c = c; + return rand; + }; + })(); + + + /* + * Return a BigNumber whose value is the sum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.sum = function () { + var i = 1, + args = arguments, + sum = new BigNumber(args[0]); + for (; i < args.length;) sum = sum.plus(args[i++]); + return sum; + }; + + + // PRIVATE FUNCTIONS + + + // Called by BigNumber and BigNumber.prototype.toString. + convertBase = (function () { + var decimal = '0123456789'; + + /* + * Convert string of baseIn to an array of numbers of baseOut. + * Eg. toBaseOut('255', 10, 16) returns [15, 15]. + * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5]. + */ + function toBaseOut(str, baseIn, baseOut, alphabet) { + var j, + arr = [0], + arrL, + i = 0, + len = str.length; + + for (; i < len;) { + for (arrL = arr.length; arrL--; arr[arrL] *= baseIn); + + arr[0] += alphabet.indexOf(str.charAt(i++)); + + for (j = 0; j < arr.length; j++) { + + if (arr[j] > baseOut - 1) { + if (arr[j + 1] == null) arr[j + 1] = 0; + arr[j + 1] += arr[j] / baseOut | 0; + arr[j] %= baseOut; + } + } + } + + return arr.reverse(); + } + + // Convert a numeric string of baseIn to a numeric string of baseOut. + // If the caller is toString, we are converting from base 10 to baseOut. + // If the caller is BigNumber, we are converting from baseIn to base 10. + return function (str, baseIn, baseOut, sign, callerIsToString) { + var alphabet, d, e, k, r, x, xc, y, + i = str.indexOf('.'), + dp = DECIMAL_PLACES, + rm = ROUNDING_MODE; + + // Non-integer. + if (i >= 0) { + k = POW_PRECISION; + + // Unlimited precision. + POW_PRECISION = 0; + str = str.replace('.', ''); + y = new BigNumber(baseIn); + x = y.pow(str.length - i); + POW_PRECISION = k; + + // Convert str as if an integer, then restore the fraction part by dividing the + // result by its base raised to a power. + + y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), + 10, baseOut, decimal); + y.e = y.c.length; + } + + // Convert the number as integer. + + xc = toBaseOut(str, baseIn, baseOut, callerIsToString + ? (alphabet = ALPHABET, decimal) + : (alphabet = decimal, ALPHABET)); + + // xc now represents str as an integer and converted to baseOut. e is the exponent. + e = k = xc.length; + + // Remove trailing zeros. + for (; xc[--k] == 0; xc.pop()); + + // Zero? + if (!xc[0]) return alphabet.charAt(0); + + // Does str represent an integer? If so, no need for the division. + if (i < 0) { + --e; + } else { + x.c = xc; + x.e = e; + + // The sign is needed for correct rounding. + x.s = sign; + x = div(x, y, dp, rm, baseOut); + xc = x.c; + r = x.r; + e = x.e; + } + + // xc now represents str converted to baseOut. + + // The index of the rounding digit. + d = e + dp + 1; + + // The rounding digit: the digit to the right of the digit that may be rounded up. + i = xc[d]; + + // Look at the rounding digits and mode to determine whether to round up. + + k = baseOut / 2; + r = r || d < 0 || xc[d + 1] != null; + + r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) + : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 || + rm == (x.s < 0 ? 8 : 7)); + + // If the index of the rounding digit is not greater than zero, or xc represents + // zero, then the result of the base conversion is zero or, if rounding up, a value + // such as 0.00001. + if (d < 1 || !xc[0]) { + + // 1^-dp or 0 + str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); + } else { + + // Truncate xc to the required number of decimal places. + xc.length = d; + + // Round up? + if (r) { + + // Rounding up may mean the previous digit has to be rounded up and so on. + for (--baseOut; ++xc[--d] > baseOut;) { + xc[d] = 0; + + if (!d) { + ++e; + xc = [1].concat(xc); + } + } + } + + // Determine trailing zeros. + for (k = xc.length; !xc[--k];); + + // E.g. [4, 11, 15] becomes 4bf. + for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); + + // Add leading zeros, decimal point and trailing zeros as required. + str = toFixedPoint(str, e, alphabet.charAt(0)); + } + + // The caller will add the sign. + return str; + }; + })(); + + + // Perform division in the specified base. Called by div and convertBase. + div = (function () { + + // Assume non-zero x and k. + function multiply(x, k, base) { + var m, temp, xlo, xhi, + carry = 0, + i = x.length, + klo = k % SQRT_BASE, + khi = k / SQRT_BASE | 0; + + for (x = x.slice(); i--;) { + xlo = x[i] % SQRT_BASE; + xhi = x[i] / SQRT_BASE | 0; + m = khi * xlo + xhi * klo; + temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry; + carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; + x[i] = temp % base; + } + + if (carry) x = [carry].concat(x); + + return x; + } + + function compare(a, b, aL, bL) { + var i, cmp; + + if (aL != bL) { + cmp = aL > bL ? 1 : -1; + } else { + + for (i = cmp = 0; i < aL; i++) { + + if (a[i] != b[i]) { + cmp = a[i] > b[i] ? 1 : -1; + break; + } + } + } + + return cmp; + } + + function subtract(a, b, aL, base) { + var i = 0; + + // Subtract b from a. + for (; aL--;) { + a[aL] -= i; + i = a[aL] < b[aL] ? 1 : 0; + a[aL] = i * base + a[aL] - b[aL]; + } + + // Remove leading zeros. + for (; !a[0] && a.length > 1; a.splice(0, 1)); + } + + // x: dividend, y: divisor. + return function (x, y, dp, rm, base) { + var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, + yL, yz, + s = x.s == y.s ? 1 : -1, + xc = x.c, + yc = y.c; + + // Either NaN, Infinity or 0? + if (!xc || !xc[0] || !yc || !yc[0]) { + + return new BigNumber( + + // Return NaN if either NaN, or both Infinity or 0. + !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : + + // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. + xc && xc[0] == 0 || !yc ? s * 0 : s / 0 + ); + } + + q = new BigNumber(s); + qc = q.c = []; + e = x.e - y.e; + s = dp + e + 1; + + if (!base) { + base = BASE; + e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); + s = s / LOG_BASE | 0; + } + + // Result exponent may be one less then the current value of e. + // The coefficients of the BigNumbers from convertBase may have trailing zeros. + for (i = 0; yc[i] == (xc[i] || 0); i++); + + if (yc[i] > (xc[i] || 0)) e--; + + if (s < 0) { + qc.push(1); + more = true; + } else { + xL = xc.length; + yL = yc.length; + i = 0; + s += 2; + + // Normalise xc and yc so highest order digit of yc is >= base / 2. + + n = mathfloor(base / (yc[0] + 1)); + + // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1. + // if (n > 1 || n++ == 1 && yc[0] < base / 2) { + if (n > 1) { + yc = multiply(yc, n, base); + xc = multiply(xc, n, base); + yL = yc.length; + xL = xc.length; + } + + xi = yL; + rem = xc.slice(0, yL); + remL = rem.length; + + // Add zeros to make remainder as long as divisor. + for (; remL < yL; rem[remL++] = 0); + yz = yc.slice(); + yz = [0].concat(yz); + yc0 = yc[0]; + if (yc[1] >= base / 2) yc0++; + // Not necessary, but to prevent trial digit n > base, when using base 3. + // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15; + + do { + n = 0; + + // Compare divisor and remainder. + cmp = compare(yc, rem, yL, remL); + + // If divisor < remainder. + if (cmp < 0) { + + // Calculate trial digit, n. + + rem0 = rem[0]; + if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); + + // n is how many times the divisor goes into the current remainder. + n = mathfloor(rem0 / yc0); + + // Algorithm: + // product = divisor multiplied by trial digit (n). + // Compare product and remainder. + // If product is greater than remainder: + // Subtract divisor from product, decrement trial digit. + // Subtract product from remainder. + // If product was less than remainder at the last compare: + // Compare new remainder and divisor. + // If remainder is greater than divisor: + // Subtract divisor from remainder, increment trial digit. + + if (n > 1) { + + // n may be > base only when base is 3. + if (n >= base) n = base - 1; + + // product = divisor * trial digit. + prod = multiply(yc, n, base); + prodL = prod.length; + remL = rem.length; + + // Compare product and remainder. + // If product > remainder then trial digit n too high. + // n is 1 too high about 5% of the time, and is not known to have + // ever been more than 1 too high. + while (compare(prod, rem, prodL, remL) == 1) { + n--; + + // Subtract divisor from product. + subtract(prod, yL < prodL ? yz : yc, prodL, base); + prodL = prod.length; + cmp = 1; + } + } else { + + // n is 0 or 1, cmp is -1. + // If n is 0, there is no need to compare yc and rem again below, + // so change cmp to 1 to avoid it. + // If n is 1, leave cmp as -1, so yc and rem are compared again. + if (n == 0) { + + // divisor < remainder, so n must be at least 1. + cmp = n = 1; + } + + // product = divisor + prod = yc.slice(); + prodL = prod.length; + } + + if (prodL < remL) prod = [0].concat(prod); + + // Subtract product from remainder. + subtract(rem, prod, remL, base); + remL = rem.length; + + // If product was < remainder. + if (cmp == -1) { + + // Compare divisor and new remainder. + // If divisor < new remainder, subtract divisor from remainder. + // Trial digit n too low. + // n is 1 too low about 5% of the time, and very rarely 2 too low. + while (compare(yc, rem, yL, remL) < 1) { + n++; + + // Subtract divisor from remainder. + subtract(rem, yL < remL ? yz : yc, remL, base); + remL = rem.length; + } + } + } else if (cmp === 0) { + n++; + rem = [0]; + } // else cmp === 1 and n will be 0 + + // Add the next digit, n, to the result array. + qc[i++] = n; + + // Update the remainder. + if (rem[0]) { + rem[remL++] = xc[xi] || 0; + } else { + rem = [xc[xi]]; + remL = 1; + } + } while ((xi++ < xL || rem[0] != null) && s--); + + more = rem[0] != null; + + // Leading zero? + if (!qc[0]) qc.splice(0, 1); + } + + if (base == BASE) { + + // To calculate q.e, first get the number of digits of qc[0]. + for (i = 1, s = qc[0]; s >= 10; s /= 10, i++); + + round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); + + // Caller is convertBase. + } else { + q.e = e; + q.r = +more; + } + + return q; + }; + })(); + + + /* + * Return a string representing the value of BigNumber n in fixed-point or exponential + * notation rounded to the specified decimal places or significant digits. + * + * n: a BigNumber. + * i: the index of the last digit required (i.e. the digit that may be rounded up). + * rm: the rounding mode. + * id: 1 (toExponential) or 2 (toPrecision). + */ + function format(n, i, rm, id) { + var c0, e, ne, len, str; + + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + if (!n.c) return n.toString(); + + c0 = n.c[0]; + ne = n.e; + + if (i == null) { + str = coeffToString(n.c); + str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) + ? toExponential(str, ne) + : toFixedPoint(str, ne, '0'); + } else { + n = round(new BigNumber(n), i, rm); + + // n.e may have changed if the value was rounded up. + e = n.e; + + str = coeffToString(n.c); + len = str.length; + + // toPrecision returns exponential notation if the number of significant digits + // specified is less than the number of digits necessary to represent the integer + // part of the value in fixed-point notation. + + // Exponential notation. + if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { + + // Append zeros? + for (; len < i; str += '0', len++); + str = toExponential(str, e); + + // Fixed-point notation. + } else { + i -= ne + (id === 2 && e > ne); + str = toFixedPoint(str, e, '0'); + + // Append zeros? + if (e + 1 > len) { + if (--i > 0) for (str += '.'; i--; str += '0'); + } else { + i += e - len; + if (i > 0) { + if (e + 1 == len) str += '.'; + for (; i--; str += '0'); + } + } + } + } + + return n.s < 0 && c0 ? '-' + str : str; + } + + + // Handle BigNumber.max and BigNumber.min. + // If any number is NaN, return NaN. + function maxOrMin(args, n) { + var k, y, + i = 1, + x = new BigNumber(args[0]); + + for (; i < args.length; i++) { + y = new BigNumber(args[i]); + if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) { + x = y; + } + } + + return x; + } + + + /* + * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. + * Called by minus, plus and times. + */ + function normalise(n, c, e) { + var i = 1, + j = c.length; + + // Remove trailing zeros. + for (; !c[--j]; c.pop()); + + // Calculate the base 10 exponent. First get the number of digits of c[0]. + for (j = c[0]; j >= 10; j /= 10, i++); + + // Overflow? + if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { + + // Infinity. + n.c = n.e = null; + + // Underflow? + } else if (e < MIN_EXP) { + + // Zero. + n.c = [n.e = 0]; + } else { + n.e = e; + n.c = c; + } + + return n; + } + + + // Handle values that fail the validity test in BigNumber. + parseNumeric = (function () { + var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, + dotAfter = /^([^.]+)\.$/, + dotBefore = /^\.([^.]+)$/, + isInfinityOrNaN = /^-?(Infinity|NaN)$/, + whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; + + return function (x, str, isNum, b) { + var base, + s = isNum ? str : str.replace(whitespaceOrPlus, ''); + + // No exception on ±Infinity or NaN. + if (isInfinityOrNaN.test(s)) { + x.s = isNaN(s) ? null : s < 0 ? -1 : 1; + } else { + if (!isNum) { + + // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i + s = s.replace(basePrefix, function (m, p1, p2) { + base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8; + return !b || b == base ? p1 : m; + }); + + if (b) { + base = b; + + // E.g. '1.' to '1', '.1' to '0.1' + s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1'); + } + + if (str != s) return new BigNumber(s, base); + } + + // '[BigNumber Error] Not a number: {n}' + // '[BigNumber Error] Not a base {b} number: {n}' + if (BigNumber.DEBUG) { + throw Error + (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str); + } + + // NaN + x.s = null; + } + + x.c = x.e = null; + } + })(); + + + /* + * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. + * If r is truthy, it is known that there are more digits after the rounding digit. + */ + function round(x, sd, rm, r) { + var d, i, j, k, n, ni, rd, + xc = x.c, + pows10 = POWS_TEN; + + // if x is not Infinity or NaN... + if (xc) { + + // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. + // n is a base 1e14 number, the value of the element of array x.c containing rd. + // ni is the index of n within x.c. + // d is the number of digits of n. + // i is the index of rd within n including leading zeros. + // j is the actual index of rd within n (if < 0, rd is a leading zero). + out: { + + // Get the number of digits of the first element of xc. + for (d = 1, k = xc[0]; k >= 10; k /= 10, d++); + i = sd - d; + + // If the rounding digit is in the first element of xc... + if (i < 0) { + i += LOG_BASE; + j = sd; + n = xc[ni = 0]; + + // Get the rounding digit at index j of n. + rd = mathfloor(n / pows10[d - j - 1] % 10); + } else { + ni = mathceil((i + 1) / LOG_BASE); + + if (ni >= xc.length) { + + if (r) { + + // Needed by sqrt. + for (; xc.length <= ni; xc.push(0)); + n = rd = 0; + d = 1; + i %= LOG_BASE; + j = i - LOG_BASE + 1; + } else { + break out; + } + } else { + n = k = xc[ni]; + + // Get the number of digits of n. + for (d = 1; k >= 10; k /= 10, d++); + + // Get the index of rd within n. + i %= LOG_BASE; + + // Get the index of rd within n, adjusted for leading zeros. + // The number of leading zeros of n is given by LOG_BASE - d. + j = i - LOG_BASE + d; + + // Get the rounding digit at index j of n. + rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10); + } + } + + r = r || sd < 0 || + + // Are there any non-zero digits after the rounding digit? + // The expression n % pows10[d - j - 1] returns all digits of n to the right + // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. + xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); + + r = rm < 4 + ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) + : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && + + // Check whether the digit to the left of the rounding digit is odd. + ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 || + rm == (x.s < 0 ? 8 : 7)); + + if (sd < 1 || !xc[0]) { + xc.length = 0; + + if (r) { + + // Convert sd to decimal places. + sd -= x.e + 1; + + // 1, 0.1, 0.01, 0.001, 0.0001 etc. + xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; + x.e = -sd || 0; + } else { + + // Zero. + xc[0] = x.e = 0; + } + + return x; + } + + // Remove excess digits. + if (i == 0) { + xc.length = ni; + k = 1; + ni--; + } else { + xc.length = ni + 1; + k = pows10[LOG_BASE - i]; + + // E.g. 56700 becomes 56000 if 7 is the rounding digit. + // j > 0 means i > number of leading zeros of n. + xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; + } + + // Round up? + if (r) { + + for (; ;) { + + // If the digit to be rounded up is in the first element of xc... + if (ni == 0) { + + // i will be the length of xc[0] before k is added. + for (i = 1, j = xc[0]; j >= 10; j /= 10, i++); + j = xc[0] += k; + for (k = 1; j >= 10; j /= 10, k++); + + // if i != k the length has increased. + if (i != k) { + x.e++; + if (xc[0] == BASE) xc[0] = 1; + } + + break; + } else { + xc[ni] += k; + if (xc[ni] != BASE) break; + xc[ni--] = 0; + k = 1; + } + } + } + + // Remove trailing zeros. + for (i = xc.length; xc[--i] === 0; xc.pop()); + } + + // Overflow? Infinity. + if (x.e > MAX_EXP) { + x.c = x.e = null; + + // Underflow? Zero. + } else if (x.e < MIN_EXP) { + x.c = [x.e = 0]; + } + } + + return x; + } + + + function valueOf(n) { + var str, + e = n.e; + + if (e === null) return n.toString(); + + str = coeffToString(n.c); + + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential(str, e) + : toFixedPoint(str, e, '0'); + + return n.s < 0 ? '-' + str : str; + } + + + // PROTOTYPE/INSTANCE METHODS + + + /* + * Return a new BigNumber whose value is the absolute value of this BigNumber. + */ + P.absoluteValue = P.abs = function () { + var x = new BigNumber(this); + if (x.s < 0) x.s = 1; + return x; + }; + + + /* + * Return + * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), + * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), + * 0 if they have the same value, + * or null if the value of either is NaN. + */ + P.comparedTo = function (y, b) { + return compare(this, new BigNumber(y, b)); + }; + + + /* + * If dp is undefined or null or true or false, return the number of decimal places of the + * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. + * + * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this + * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or + * ROUNDING_MODE if rm is omitted. + * + * [dp] {number} Decimal places: integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.decimalPlaces = P.dp = function (dp, rm) { + var c, n, v, + x = this; + + if (dp != null) { + intCheck(dp, 0, MAX); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + return round(new BigNumber(x), dp + x.e + 1, rm); + } + + if (!(c = x.c)) return null; + n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; + + // Subtract the number of trailing zeros of the last number. + if (v = c[v]) for (; v % 10 == 0; v /= 10, n--); + if (n < 0) n = 0; + + return n; + }; + + + /* + * n / 0 = I + * n / N = N + * n / I = 0 + * 0 / n = 0 + * 0 / 0 = N + * 0 / N = N + * 0 / I = 0 + * N / n = N + * N / 0 = N + * N / N = N + * N / I = N + * I / n = I + * I / 0 = I + * I / N = N + * I / I = N + * + * Return a new BigNumber whose value is the value of this BigNumber divided by the value of + * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.dividedBy = P.div = function (y, b) { + return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE); + }; + + + /* + * Return a new BigNumber whose value is the integer part of dividing the value of this + * BigNumber by the value of BigNumber(y, b). + */ + P.dividedToIntegerBy = P.idiv = function (y, b) { + return div(this, new BigNumber(y, b), 0, 1); + }; + + + /* + * Return a BigNumber whose value is the value of this BigNumber exponentiated by n. + * + * If m is present, return the result modulo m. + * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. + * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE. + * + * The modular power operation works efficiently when x, n, and m are integers, otherwise it + * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0. + * + * n {number|string|BigNumber} The exponent. An integer. + * [m] {number|string|BigNumber} The modulus. + * + * '[BigNumber Error] Exponent not an integer: {n}' + */ + P.exponentiatedBy = P.pow = function (n, m) { + var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, + x = this; + + n = new BigNumber(n); + + // Allow NaN and ±Infinity, but not other non-integers. + if (n.c && !n.isInteger()) { + throw Error + (bignumberError + 'Exponent not an integer: ' + valueOf(n)); + } + + if (m != null) m = new BigNumber(m); + + // Exponent of MAX_SAFE_INTEGER is 15. + nIsBig = n.e > 14; + + // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0. + if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { + + // The sign of the result of pow when x is negative depends on the evenness of n. + // If +n overflows to ±Infinity, the evenness of n would be not be known. + y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n))); + return m ? y.mod(m) : y; + } + + nIsNeg = n.s < 0; + + if (m) { + + // x % m returns NaN if abs(m) is zero, or m is NaN. + if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN); + + isModExp = !nIsNeg && x.isInteger() && m.isInteger(); + + if (isModExp) x = x.mod(m); + + // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15. + // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15. + } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 + // [1, 240000000] + ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 + // [80000000000000] [99999750000000] + : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) { + + // If x is negative and n is odd, k = -0, else k = 0. + k = x.s < 0 && isOdd(n) ? -0 : 0; + + // If x >= 1, k = ±Infinity. + if (x.e > -1) k = 1 / k; + + // If n is negative return ±0, else return ±Infinity. + return new BigNumber(nIsNeg ? 1 / k : k); + + } else if (POW_PRECISION) { + + // Truncating each coefficient array to a length of k after each multiplication + // equates to truncating significant digits to POW_PRECISION + [28, 41], + // i.e. there will be a minimum of 28 guard digits retained. + k = mathceil(POW_PRECISION / LOG_BASE + 2); + } + + if (nIsBig) { + half = new BigNumber(0.5); + if (nIsNeg) n.s = 1; + nIsOdd = isOdd(n); + } else { + i = Math.abs(+valueOf(n)); + nIsOdd = i % 2; + } + + y = new BigNumber(ONE); + + // Performs 54 loop iterations for n of 9007199254740991. + for (; ;) { + + if (nIsOdd) { + y = y.times(x); + if (!y.c) break; + + if (k) { + if (y.c.length > k) y.c.length = k; + } else if (isModExp) { + y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m)); + } + } + + if (i) { + i = mathfloor(i / 2); + if (i === 0) break; + nIsOdd = i % 2; + } else { + n = n.times(half); + round(n, n.e + 1, 1); + + if (n.e > 14) { + nIsOdd = isOdd(n); + } else { + i = +valueOf(n); + if (i === 0) break; + nIsOdd = i % 2; + } + } + + x = x.times(x); + + if (k) { + if (x.c && x.c.length > k) x.c.length = k; + } else if (isModExp) { + x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m)); + } + } + + if (isModExp) return y; + if (nIsNeg) y = ONE.div(y); + + return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer + * using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}' + */ + P.integerValue = function (rm) { + var n = new BigNumber(this); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + return round(n, n.e + 1, rm); + }; + + + /* + * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), + * otherwise return false. + */ + P.isEqualTo = P.eq = function (y, b) { + return compare(this, new BigNumber(y, b)) === 0; + }; + + + /* + * Return true if the value of this BigNumber is a finite number, otherwise return false. + */ + P.isFinite = function () { + return !!this.c; + }; + + + /* + * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), + * otherwise return false. + */ + P.isGreaterThan = P.gt = function (y, b) { + return compare(this, new BigNumber(y, b)) > 0; + }; + + + /* + * Return true if the value of this BigNumber is greater than or equal to the value of + * BigNumber(y, b), otherwise return false. + */ + P.isGreaterThanOrEqualTo = P.gte = function (y, b) { + return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0; + + }; + + + /* + * Return true if the value of this BigNumber is an integer, otherwise return false. + */ + P.isInteger = function () { + return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; + }; + + + /* + * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), + * otherwise return false. + */ + P.isLessThan = P.lt = function (y, b) { + return compare(this, new BigNumber(y, b)) < 0; + }; + + + /* + * Return true if the value of this BigNumber is less than or equal to the value of + * BigNumber(y, b), otherwise return false. + */ + P.isLessThanOrEqualTo = P.lte = function (y, b) { + return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0; + }; + + + /* + * Return true if the value of this BigNumber is NaN, otherwise return false. + */ + P.isNaN = function () { + return !this.s; + }; + + + /* + * Return true if the value of this BigNumber is negative, otherwise return false. + */ + P.isNegative = function () { + return this.s < 0; + }; + + + /* + * Return true if the value of this BigNumber is positive, otherwise return false. + */ + P.isPositive = function () { + return this.s > 0; + }; + + + /* + * Return true if the value of this BigNumber is 0 or -0, otherwise return false. + */ + P.isZero = function () { + return !!this.c && this.c[0] == 0; + }; + + + /* + * n - 0 = n + * n - N = N + * n - I = -I + * 0 - n = -n + * 0 - 0 = 0 + * 0 - N = N + * 0 - I = -I + * N - n = N + * N - 0 = N + * N - N = N + * N - I = N + * I - n = I + * I - 0 = I + * I - N = N + * I - I = N + * + * Return a new BigNumber whose value is the value of this BigNumber minus the value of + * BigNumber(y, b). + */ + P.minus = function (y, b) { + var i, j, t, xLTy, + x = this, + a = x.s; + + y = new BigNumber(y, b); + b = y.s; + + // Either NaN? + if (!a || !b) return new BigNumber(NaN); + + // Signs differ? + if (a != b) { + y.s = -b; + return x.plus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if (!xe || !ye) { + + // Either Infinity? + if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); + + // Either zero? + if (!xc[0] || !yc[0]) { + + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : + + // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity + ROUNDING_MODE == 3 ? -0 : 0); + } + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Determine which is the bigger number. + if (a = xe - ye) { + + if (xLTy = a < 0) { + a = -a; + t = xc; + } else { + ye = xe; + t = yc; + } + + t.reverse(); + + // Prepend zeros to equalise exponents. + for (b = a; b--; t.push(0)); + t.reverse(); + } else { + + // Exponents equal. Check digit by digit. + j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; + + for (a = b = 0; b < j; b++) { + + if (xc[b] != yc[b]) { + xLTy = xc[b] < yc[b]; + break; + } + } + } + + // x < y? Point xc to the array of the bigger number. + if (xLTy) { + t = xc; + xc = yc; + yc = t; + y.s = -y.s; + } + + b = (j = yc.length) - (i = xc.length); + + // Append zeros to xc if shorter. + // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. + if (b > 0) for (; b--; xc[i++] = 0); + b = BASE - 1; + + // Subtract yc from xc. + for (; j > a;) { + + if (xc[--j] < yc[j]) { + for (i = j; i && !xc[--i]; xc[i] = b); + --xc[i]; + xc[j] += BASE; + } + + xc[j] -= yc[j]; + } + + // Remove leading zeros and adjust exponent accordingly. + for (; xc[0] == 0; xc.splice(0, 1), --ye); + + // Zero? + if (!xc[0]) { + + // Following IEEE 754 (2008) 6.3, + // n - n = +0 but n - n = -0 when rounding towards -Infinity. + y.s = ROUNDING_MODE == 3 ? -1 : 1; + y.c = [y.e = 0]; + return y; + } + + // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity + // for finite x and y. + return normalise(y, xc, ye); + }; + + + /* + * n % 0 = N + * n % N = N + * n % I = n + * 0 % n = 0 + * -0 % n = -0 + * 0 % 0 = N + * 0 % N = N + * 0 % I = 0 + * N % n = N + * N % 0 = N + * N % N = N + * N % I = N + * I % n = N + * I % 0 = N + * I % N = N + * I % I = N + * + * Return a new BigNumber whose value is the value of this BigNumber modulo the value of + * BigNumber(y, b). The result depends on the value of MODULO_MODE. + */ + P.modulo = P.mod = function (y, b) { + var q, s, + x = this; + + y = new BigNumber(y, b); + + // Return NaN if x is Infinity or NaN, or y is NaN or zero. + if (!x.c || !y.s || y.c && !y.c[0]) { + return new BigNumber(NaN); + + // Return x if y is Infinity or x is zero. + } else if (!y.c || x.c && !x.c[0]) { + return new BigNumber(x); + } + + if (MODULO_MODE == 9) { + + // Euclidian division: q = sign(y) * floor(x / abs(y)) + // r = x - qy where 0 <= r < abs(y) + s = y.s; + y.s = 1; + q = div(x, y, 0, 3); + y.s = s; + q.s *= s; + } else { + q = div(x, y, 0, MODULO_MODE); + } + + y = x.minus(q.times(y)); + + // To match JavaScript %, ensure sign of zero is sign of dividend. + if (!y.c[0] && MODULO_MODE == 1) y.s = x.s; + + return y; + }; + + + /* + * n * 0 = 0 + * n * N = N + * n * I = I + * 0 * n = 0 + * 0 * 0 = 0 + * 0 * N = N + * 0 * I = N + * N * n = N + * N * 0 = N + * N * N = N + * N * I = N + * I * n = I + * I * 0 = N + * I * N = N + * I * I = I + * + * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value + * of BigNumber(y, b). + */ + P.multipliedBy = P.times = function (y, b) { + var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, + base, sqrtBase, + x = this, + xc = x.c, + yc = (y = new BigNumber(y, b)).c; + + // Either NaN, ±Infinity or ±0? + if (!xc || !yc || !xc[0] || !yc[0]) { + + // Return NaN if either is NaN, or one is 0 and the other is Infinity. + if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { + y.c = y.e = y.s = null; + } else { + y.s *= x.s; + + // Return ±Infinity if either is ±Infinity. + if (!xc || !yc) { + y.c = y.e = null; + + // Return ±0 if either is ±0. + } else { + y.c = [0]; + y.e = 0; + } + } + + return y; + } + + e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); + y.s *= x.s; + xcL = xc.length; + ycL = yc.length; + + // Ensure xc points to longer array and xcL to its length. + if (xcL < ycL) { + zc = xc; + xc = yc; + yc = zc; + i = xcL; + xcL = ycL; + ycL = i; + } + + // Initialise the result array with zeros. + for (i = xcL + ycL, zc = []; i--; zc.push(0)); + + base = BASE; + sqrtBase = SQRT_BASE; + + for (i = ycL; --i >= 0;) { + c = 0; + ylo = yc[i] % sqrtBase; + yhi = yc[i] / sqrtBase | 0; + + for (k = xcL, j = i + k; j > i;) { + xlo = xc[--k] % sqrtBase; + xhi = xc[k] / sqrtBase | 0; + m = yhi * xlo + xhi * ylo; + xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c; + c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; + zc[j--] = xlo % base; + } + + zc[j] = c; + } + + if (c) { + ++e; + } else { + zc.splice(0, 1); + } + + return normalise(y, zc, e); + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber negated, + * i.e. multiplied by -1. + */ + P.negated = function () { + var x = new BigNumber(this); + x.s = -x.s || null; + return x; + }; + + + /* + * n + 0 = n + * n + N = N + * n + I = I + * 0 + n = n + * 0 + 0 = 0 + * 0 + N = N + * 0 + I = I + * N + n = N + * N + 0 = N + * N + N = N + * N + I = N + * I + n = I + * I + 0 = I + * I + N = N + * I + I = I + * + * Return a new BigNumber whose value is the value of this BigNumber plus the value of + * BigNumber(y, b). + */ + P.plus = function (y, b) { + var t, + x = this, + a = x.s; + + y = new BigNumber(y, b); + b = y.s; + + // Either NaN? + if (!a || !b) return new BigNumber(NaN); + + // Signs differ? + if (a != b) { + y.s = -b; + return x.minus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if (!xe || !ye) { + + // Return ±Infinity if either ±Infinity. + if (!xc || !yc) return new BigNumber(a / 0); + + // Either zero? + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0); + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. + if (a = xe - ye) { + if (a > 0) { + ye = xe; + t = yc; + } else { + a = -a; + t = xc; + } + + t.reverse(); + for (; a--; t.push(0)); + t.reverse(); + } + + a = xc.length; + b = yc.length; + + // Point xc to the longer array, and b to the shorter length. + if (a - b < 0) { + t = yc; + yc = xc; + xc = t; + b = a; + } + + // Only start adding at yc.length - 1 as the further digits of xc can be ignored. + for (a = 0; b;) { + a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; + xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; + } + + if (a) { + xc = [a].concat(xc); + ++ye; + } + + // No need to check for zero, as +x + +y != 0 && -x + -y != 0 + // ye = MAX_EXP + 1 possible + return normalise(y, xc, ye); + }; + + + /* + * If sd is undefined or null or true or false, return the number of significant digits of + * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. + * If sd is true include integer-part trailing zeros in the count. + * + * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this + * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or + * ROUNDING_MODE if rm is omitted. + * + * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive. + * boolean: whether to count integer-part trailing zeros: true or false. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' + */ + P.precision = P.sd = function (sd, rm) { + var c, n, v, + x = this; + + if (sd != null && sd !== !!sd) { + intCheck(sd, 1, MAX); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + return round(new BigNumber(x), sd, rm); + } + + if (!(c = x.c)) return null; + v = c.length - 1; + n = v * LOG_BASE + 1; + + if (v = c[v]) { + + // Subtract the number of trailing zeros of the last element. + for (; v % 10 == 0; v /= 10, n--); + + // Add the number of digits of the first element. + for (v = c[0]; v >= 10; v /= 10, n++); + } + + if (sd && x.e + 1 > n) n = x.e + 1; + + return n; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber shifted by k places + * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. + * + * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}' + */ + P.shiftedBy = function (k) { + intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); + return this.times('1e' + k); + }; + + + /* + * sqrt(-n) = N + * sqrt(N) = N + * sqrt(-I) = N + * sqrt(I) = I + * sqrt(0) = 0 + * sqrt(-0) = -0 + * + * Return a new BigNumber whose value is the square root of the value of this BigNumber, + * rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.squareRoot = P.sqrt = function () { + var m, n, r, rep, t, + x = this, + c = x.c, + s = x.s, + e = x.e, + dp = DECIMAL_PLACES + 4, + half = new BigNumber('0.5'); + + // Negative/NaN/Infinity/zero? + if (s !== 1 || !c || !c[0]) { + return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); + } + + // Initial estimate. + s = Math.sqrt(+valueOf(x)); + + // Math.sqrt underflow/overflow? + // Pass x to Math.sqrt as integer, then adjust the exponent of the result. + if (s == 0 || s == 1 / 0) { + n = coeffToString(c); + if ((n.length + e) % 2 == 0) n += '0'; + s = Math.sqrt(+n); + e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); + + if (s == 1 / 0) { + n = '5e' + e; + } else { + n = s.toExponential(); + n = n.slice(0, n.indexOf('e') + 1) + e; + } + + r = new BigNumber(n); + } else { + r = new BigNumber(s + ''); + } + + // Check for zero. + // r could be zero if MIN_EXP is changed after the this value was created. + // This would cause a division by zero (x/t) and hence Infinity below, which would cause + // coeffToString to throw. + if (r.c[0]) { + e = r.e; + s = e + dp; + if (s < 3) s = 0; + + // Newton-Raphson iteration. + for (; ;) { + t = r; + r = half.times(t.plus(div(x, t, dp, 1))); + + if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { + + // The exponent of r may here be one less than the final result exponent, + // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits + // are indexed correctly. + if (r.e < e) --s; + n = n.slice(s - 3, s + 1); + + // The 4th rounding digit may be in error by -1 so if the 4 rounding digits + // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the + // iteration. + if (n == '9999' || !rep && n == '4999') { + + // On the first iteration only, check to see if rounding up gives the + // exact result as the nines may infinitely repeat. + if (!rep) { + round(t, t.e + DECIMAL_PLACES + 2, 0); + + if (t.times(t).eq(x)) { + r = t; + break; + } + } + + dp += 4; + s += 4; + rep = 1; + } else { + + // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact + // result. If not, then there are further digits and m will be truthy. + if (!+n || !+n.slice(1) && n.charAt(0) == '5') { + + // Truncate to the first rounding digit. + round(r, r.e + DECIMAL_PLACES + 2, 1); + m = !r.times(r).eq(x); + } + + break; + } + } + } + } + + return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); + }; + + + /* + * Return a string representing the value of this BigNumber in exponential notation and + * rounded using ROUNDING_MODE to dp fixed decimal places. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.toExponential = function (dp, rm) { + if (dp != null) { + intCheck(dp, 0, MAX); + dp++; + } + return format(this, dp, rm, 1); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounding + * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', + * but e.g. (-0.00001).toFixed(0) is '-0'. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.toFixed = function (dp, rm) { + if (dp != null) { + intCheck(dp, 0, MAX); + dp = dp + this.e + 1; + } + return format(this, dp, rm); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounded + * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties + * of the format or FORMAT object (see BigNumber.set). + * + * The formatting object may contain some or all of the properties shown below. + * + * FORMAT = { + * prefix: '', + * groupSize: 3, + * secondaryGroupSize: 0, + * groupSeparator: ',', + * decimalSeparator: '.', + * fractionGroupSize: 0, + * fractionGroupSeparator: '\xA0', // non-breaking space + * suffix: '' + * }; + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * [format] {object} Formatting options. See FORMAT pbject above. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + * '[BigNumber Error] Argument not an object: {format}' + */ + P.toFormat = function (dp, rm, format) { + var str, + x = this; + + if (format == null) { + if (dp != null && rm && typeof rm == 'object') { + format = rm; + rm = null; + } else if (dp && typeof dp == 'object') { + format = dp; + dp = rm = null; + } else { + format = FORMAT; + } + } else if (typeof format != 'object') { + throw Error + (bignumberError + 'Argument not an object: ' + format); + } + + str = x.toFixed(dp, rm); + + if (x.c) { + var i, + arr = str.split('.'), + g1 = +format.groupSize, + g2 = +format.secondaryGroupSize, + groupSeparator = format.groupSeparator || '', + intPart = arr[0], + fractionPart = arr[1], + isNeg = x.s < 0, + intDigits = isNeg ? intPart.slice(1) : intPart, + len = intDigits.length; + + if (g2) { + i = g1; + g1 = g2; + g2 = i; + len -= i; + } + + if (g1 > 0 && len > 0) { + i = len % g1 || g1; + intPart = intDigits.substr(0, i); + for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1); + if (g2 > 0) intPart += groupSeparator + intDigits.slice(i); + if (isNeg) intPart = '-' + intPart; + } + + str = fractionPart + ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) + ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), + '$&' + (format.fractionGroupSeparator || '')) + : fractionPart) + : intPart; + } + + return (format.prefix || '') + str + (format.suffix || ''); + }; + + + /* + * Return an array of two BigNumbers representing the value of this BigNumber as a simple + * fraction with an integer numerator and an integer denominator. + * The denominator will be a positive non-zero value less than or equal to the specified + * maximum denominator. If a maximum denominator is not specified, the denominator will be + * the lowest value necessary to represent the number exactly. + * + * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator. + * + * '[BigNumber Error] Argument {not an integer|out of range} : {md}' + */ + P.toFraction = function (md) { + var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, + x = this, + xc = x.c; + + if (md != null) { + n = new BigNumber(md); + + // Throw if md is less than one or is not an integer, unless it is Infinity. + if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { + throw Error + (bignumberError + 'Argument ' + + (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n)); + } + } + + if (!xc) return new BigNumber(x); + + d = new BigNumber(ONE); + n1 = d0 = new BigNumber(ONE); + d1 = n0 = new BigNumber(ONE); + s = coeffToString(xc); + + // Determine initial denominator. + // d is a power of 10 and the minimum max denominator that specifies the value exactly. + e = d.e = s.length - x.e - 1; + d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; + md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n; + + exp = MAX_EXP; + MAX_EXP = 1 / 0; + n = new BigNumber(s); + + // n0 = d1 = 0 + n0.c[0] = 0; + + for (; ;) { + q = div(n, d, 0, 1); + d2 = d0.plus(q.times(d1)); + if (d2.comparedTo(md) == 1) break; + d0 = d1; + d1 = d2; + n1 = n0.plus(q.times(d2 = n1)); + n0 = d2; + d = n.minus(q.times(d2 = d)); + n = d2; + } + + d2 = div(md.minus(d0), d1, 0, 1); + n0 = n0.plus(d2.times(n1)); + d0 = d0.plus(d2.times(d1)); + n0.s = n1.s = x.s; + e = e * 2; + + // Determine which fraction is closer to x, n0/d0 or n1/d1 + r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo( + div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; + + MAX_EXP = exp; + + return r; + }; + + + /* + * Return the value of this BigNumber converted to a number primitive. + */ + P.toNumber = function () { + return +valueOf(this); + }; + + + /* + * Return a string representing the value of this BigNumber rounded to sd significant digits + * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits + * necessary to represent the integer part of the value in fixed-point notation, then use + * exponential notation. + * + * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' + */ + P.toPrecision = function (sd, rm) { + if (sd != null) intCheck(sd, 1, MAX); + return format(this, sd, rm, 2); + }; + + + /* + * Return a string representing the value of this BigNumber in base b, or base 10 if b is + * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and + * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent + * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than + * TO_EXP_NEG, return exponential notation. + * + * [b] {number} Integer, 2 to ALPHABET.length inclusive. + * + * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' + */ + P.toString = function (b) { + var str, + n = this, + s = n.s, + e = n.e; + + // Infinity or NaN? + if (e === null) { + if (s) { + str = 'Infinity'; + if (s < 0) str = '-' + str; + } else { + str = 'NaN'; + } + } else { + if (b == null) { + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential(coeffToString(n.c), e) + : toFixedPoint(coeffToString(n.c), e, '0'); + } else if (b === 10 && alphabetHasNormalDecimalDigits) { + n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); + str = toFixedPoint(coeffToString(n.c), n.e, '0'); + } else { + intCheck(b, 2, ALPHABET.length, 'Base'); + str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true); + } + + if (s < 0 && n.c[0]) str = '-' + str; + } + + return str; + }; + + + /* + * Return as toString, but do not accept a base argument, and include the minus sign for + * negative zero. + */ + P.valueOf = P.toJSON = function () { + return valueOf(this); + }; + + + P._isBigNumber = true; + + if (configObject != null) BigNumber.set(configObject); + + return BigNumber; + } + + + // PRIVATE HELPER FUNCTIONS + + // These functions don't need access to variables, + // e.g. DECIMAL_PLACES, in the scope of the `clone` function above. + + + function bitFloor(n) { + var i = n | 0; + return n > 0 || n === i ? i : i - 1; + } + + + // Return a coefficient array as a string of base 10 digits. + function coeffToString(a) { + var s, z, + i = 1, + j = a.length, + r = a[0] + ''; + + for (; i < j;) { + s = a[i++] + ''; + z = LOG_BASE - s.length; + for (; z--; s = '0' + s); + r += s; + } + + // Determine trailing zeros. + for (j = r.length; r.charCodeAt(--j) === 48;); + + return r.slice(0, j + 1 || 1); + } + + + // Compare the value of BigNumbers x and y. + function compare(x, y) { + var a, b, + xc = x.c, + yc = y.c, + i = x.s, + j = y.s, + k = x.e, + l = y.e; + + // Either NaN? + if (!i || !j) return null; + + a = xc && !xc[0]; + b = yc && !yc[0]; + + // Either zero? + if (a || b) return a ? b ? 0 : -j : i; + + // Signs differ? + if (i != j) return i; + + a = i < 0; + b = k == l; + + // Either Infinity? + if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; + + // Compare exponents. + if (!b) return k > l ^ a ? 1 : -1; + + j = (k = xc.length) < (l = yc.length) ? k : l; + + // Compare digit by digit. + for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; + + // Compare lengths. + return k == l ? 0 : k > l ^ a ? 1 : -1; + } + + + /* + * Check that n is a primitive number, an integer, and in range, otherwise throw. + */ + function intCheck(n, min, max, name) { + if (n < min || n > max || n !== mathfloor(n)) { + throw Error + (bignumberError + (name || 'Argument') + (typeof n == 'number' + ? n < min || n > max ? ' out of range: ' : ' not an integer: ' + : ' not a primitive number: ') + String(n)); + } + } + + + // Assumes finite n. + function isOdd(n) { + var k = n.c.length - 1; + return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; + } + + + function toExponential(str, e) { + return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + + (e < 0 ? 'e' : 'e+') + e; + } + + + function toFixedPoint(str, e, z) { + var len, zs; + + // Negative exponent? + if (e < 0) { + + // Prepend zeros. + for (zs = z + '.'; ++e; zs += z); + str = zs + str; + + // Positive exponent + } else { + len = str.length; + + // Append zeros. + if (++e > len) { + for (zs = z, e -= len; --e; zs += z); + str += zs; + } else if (e < len) { + str = str.slice(0, e) + '.' + str.slice(e); + } + } + + return str; + } + + + // EXPORT + + + BigNumber = clone(); + BigNumber['default'] = BigNumber.BigNumber = BigNumber; + + // AMD. + if (typeof define == 'function' && define.amd) { + define(function () { return BigNumber; }); + + // Node.js and other environments that support module.exports. + } else if (typeof module != 'undefined' && module.exports) { + module.exports = BigNumber; + + // Browser. + } else { + if (!globalObject) { + globalObject = typeof self != 'undefined' && self ? self : window; + } + + globalObject.BigNumber = BigNumber; + } +})(this); diff --git a/node_modules/bignumber.js/bignumber.mjs b/node_modules/bignumber.js/bignumber.mjs new file mode 100644 index 00000000..31d910bc --- /dev/null +++ b/node_modules/bignumber.js/bignumber.mjs @@ -0,0 +1,2907 @@ +/* + * bignumber.js v9.3.1 + * A JavaScript library for arbitrary-precision arithmetic. + * https://github.com/MikeMcl/bignumber.js + * Copyright (c) 2025 Michael Mclaughlin + * MIT Licensed. + * + * BigNumber.prototype methods | BigNumber methods + * | + * absoluteValue abs | clone + * comparedTo | config set + * decimalPlaces dp | DECIMAL_PLACES + * dividedBy div | ROUNDING_MODE + * dividedToIntegerBy idiv | EXPONENTIAL_AT + * exponentiatedBy pow | RANGE + * integerValue | CRYPTO + * isEqualTo eq | MODULO_MODE + * isFinite | POW_PRECISION + * isGreaterThan gt | FORMAT + * isGreaterThanOrEqualTo gte | ALPHABET + * isInteger | isBigNumber + * isLessThan lt | maximum max + * isLessThanOrEqualTo lte | minimum min + * isNaN | random + * isNegative | sum + * isPositive | + * isZero | + * minus | + * modulo mod | + * multipliedBy times | + * negated | + * plus | + * precision sd | + * shiftedBy | + * squareRoot sqrt | + * toExponential | + * toFixed | + * toFormat | + * toFraction | + * toJSON | + * toNumber | + * toPrecision | + * toString | + * valueOf | + * + */ + + +var + isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, + mathceil = Math.ceil, + mathfloor = Math.floor, + + bignumberError = '[BigNumber Error] ', + tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ', + + BASE = 1e14, + LOG_BASE = 14, + MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 + // MAX_INT32 = 0x7fffffff, // 2^31 - 1 + POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], + SQRT_BASE = 1e7, + + // EDITABLE + // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and + // the arguments to toExponential, toFixed, toFormat, and toPrecision. + MAX = 1E9; // 0 to MAX_INT32 + + +/* + * Create and return a BigNumber constructor. + */ +function clone(configObject) { + var div, convertBase, parseNumeric, + P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null }, + ONE = new BigNumber(1), + + + //----------------------------- EDITABLE CONFIG DEFAULTS ------------------------------- + + + // The default values below must be integers within the inclusive ranges stated. + // The values can also be changed at run-time using BigNumber.set. + + // The maximum number of decimal places for operations involving division. + DECIMAL_PLACES = 20, // 0 to MAX + + // The rounding mode used when rounding to the above decimal places, and when using + // toExponential, toFixed, toFormat and toPrecision, and round (default value). + // UP 0 Away from zero. + // DOWN 1 Towards zero. + // CEIL 2 Towards +Infinity. + // FLOOR 3 Towards -Infinity. + // HALF_UP 4 Towards nearest neighbour. If equidistant, up. + // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. + // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. + // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. + // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. + ROUNDING_MODE = 4, // 0 to 8 + + // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] + + // The exponent value at and beneath which toString returns exponential notation. + // Number type: -7 + TO_EXP_NEG = -7, // 0 to -MAX + + // The exponent value at and above which toString returns exponential notation. + // Number type: 21 + TO_EXP_POS = 21, // 0 to MAX + + // RANGE : [MIN_EXP, MAX_EXP] + + // The minimum exponent value, beneath which underflow to zero occurs. + // Number type: -324 (5e-324) + MIN_EXP = -1e7, // -1 to -MAX + + // The maximum exponent value, above which overflow to Infinity occurs. + // Number type: 308 (1.7976931348623157e+308) + // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. + MAX_EXP = 1e7, // 1 to MAX + + // Whether to use cryptographically-secure random number generation, if available. + CRYPTO = false, // true or false + + // The modulo mode used when calculating the modulus: a mod n. + // The quotient (q = a / n) is calculated according to the corresponding rounding mode. + // The remainder (r) is calculated as: r = a - n * q. + // + // UP 0 The remainder is positive if the dividend is negative, else is negative. + // DOWN 1 The remainder has the same sign as the dividend. + // This modulo mode is commonly known as 'truncated division' and is + // equivalent to (a % n) in JavaScript. + // FLOOR 3 The remainder has the same sign as the divisor (Python %). + // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. + // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). + // The remainder is always positive. + // + // The truncated division, floored division, Euclidian division and IEEE 754 remainder + // modes are commonly used for the modulus operation. + // Although the other rounding modes can also be used, they may not give useful results. + MODULO_MODE = 1, // 0 to 9 + + // The maximum number of significant digits of the result of the exponentiatedBy operation. + // If POW_PRECISION is 0, there will be unlimited significant digits. + POW_PRECISION = 0, // 0 to MAX + + // The format specification used by the BigNumber.prototype.toFormat method. + FORMAT = { + prefix: '', + groupSize: 3, + secondaryGroupSize: 0, + groupSeparator: ',', + decimalSeparator: '.', + fractionGroupSize: 0, + fractionGroupSeparator: '\xA0', // non-breaking space + suffix: '' + }, + + // The alphabet used for base conversion. It must be at least 2 characters long, with no '+', + // '-', '.', whitespace, or repeated character. + // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' + ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz', + alphabetHasNormalDecimalDigits = true; + + + //------------------------------------------------------------------------------------------ + + + // CONSTRUCTOR + + + /* + * The BigNumber constructor and exported function. + * Create and return a new instance of a BigNumber object. + * + * v {number|string|BigNumber} A numeric value. + * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive. + */ + function BigNumber(v, b) { + var alphabet, c, caseChanged, e, i, isNum, len, str, + x = this; + + // Enable constructor call without `new`. + if (!(x instanceof BigNumber)) return new BigNumber(v, b); + + if (b == null) { + + if (v && v._isBigNumber === true) { + x.s = v.s; + + if (!v.c || v.e > MAX_EXP) { + x.c = x.e = null; + } else if (v.e < MIN_EXP) { + x.c = [x.e = 0]; + } else { + x.e = v.e; + x.c = v.c.slice(); + } + + return; + } + + if ((isNum = typeof v == 'number') && v * 0 == 0) { + + // Use `1 / n` to handle minus zero also. + x.s = 1 / v < 0 ? (v = -v, -1) : 1; + + // Fast path for integers, where n < 2147483648 (2**31). + if (v === ~~v) { + for (e = 0, i = v; i >= 10; i /= 10, e++); + + if (e > MAX_EXP) { + x.c = x.e = null; + } else { + x.e = e; + x.c = [v]; + } + + return; + } + + str = String(v); + } else { + + if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum); + + x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; + } + + // Decimal point? + if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); + + // Exponential form? + if ((i = str.search(/e/i)) > 0) { + + // Determine exponent. + if (e < 0) e = i; + e += +str.slice(i + 1); + str = str.substring(0, i); + } else if (e < 0) { + + // Integer. + e = str.length; + } + + } else { + + // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' + intCheck(b, 2, ALPHABET.length, 'Base'); + + // Allow exponential notation to be used with base 10 argument, while + // also rounding to DECIMAL_PLACES as with other bases. + if (b == 10 && alphabetHasNormalDecimalDigits) { + x = new BigNumber(v); + return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); + } + + str = String(v); + + if (isNum = typeof v == 'number') { + + // Avoid potential interpretation of Infinity and NaN as base 44+ values. + if (v * 0 != 0) return parseNumeric(x, str, isNum, b); + + x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; + + // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' + if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) { + throw Error + (tooManyDigits + v); + } + } else { + x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; + } + + alphabet = ALPHABET.slice(0, b); + e = i = 0; + + // Check that str is a valid base b number. + // Don't use RegExp, so alphabet can contain special characters. + for (len = str.length; i < len; i++) { + if (alphabet.indexOf(c = str.charAt(i)) < 0) { + if (c == '.') { + + // If '.' is not the first character and it has not be found before. + if (i > e) { + e = len; + continue; + } + } else if (!caseChanged) { + + // Allow e.g. hexadecimal 'FF' as well as 'ff'. + if (str == str.toUpperCase() && (str = str.toLowerCase()) || + str == str.toLowerCase() && (str = str.toUpperCase())) { + caseChanged = true; + i = -1; + e = 0; + continue; + } + } + + return parseNumeric(x, String(v), isNum, b); + } + } + + // Prevent later check for length on converted number. + isNum = false; + str = convertBase(str, b, 10, x.s); + + // Decimal point? + if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); + else e = str.length; + } + + // Determine leading zeros. + for (i = 0; str.charCodeAt(i) === 48; i++); + + // Determine trailing zeros. + for (len = str.length; str.charCodeAt(--len) === 48;); + + if (str = str.slice(i, ++len)) { + len -= i; + + // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' + if (isNum && BigNumber.DEBUG && + len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { + throw Error + (tooManyDigits + (x.s * v)); + } + + // Overflow? + if ((e = e - i - 1) > MAX_EXP) { + + // Infinity. + x.c = x.e = null; + + // Underflow? + } else if (e < MIN_EXP) { + + // Zero. + x.c = [x.e = 0]; + } else { + x.e = e; + x.c = []; + + // Transform base + + // e is the base 10 exponent. + // i is where to slice str to get the first element of the coefficient array. + i = (e + 1) % LOG_BASE; + if (e < 0) i += LOG_BASE; // i < 1 + + if (i < len) { + if (i) x.c.push(+str.slice(0, i)); + + for (len -= LOG_BASE; i < len;) { + x.c.push(+str.slice(i, i += LOG_BASE)); + } + + i = LOG_BASE - (str = str.slice(i)).length; + } else { + i -= len; + } + + for (; i--; str += '0'); + x.c.push(+str); + } + } else { + + // Zero. + x.c = [x.e = 0]; + } + } + + + // CONSTRUCTOR PROPERTIES + + + BigNumber.clone = clone; + + BigNumber.ROUND_UP = 0; + BigNumber.ROUND_DOWN = 1; + BigNumber.ROUND_CEIL = 2; + BigNumber.ROUND_FLOOR = 3; + BigNumber.ROUND_HALF_UP = 4; + BigNumber.ROUND_HALF_DOWN = 5; + BigNumber.ROUND_HALF_EVEN = 6; + BigNumber.ROUND_HALF_CEIL = 7; + BigNumber.ROUND_HALF_FLOOR = 8; + BigNumber.EUCLID = 9; + + + /* + * Configure infrequently-changing library-wide settings. + * + * Accept an object with the following optional properties (if the value of a property is + * a number, it must be an integer within the inclusive range stated): + * + * DECIMAL_PLACES {number} 0 to MAX + * ROUNDING_MODE {number} 0 to 8 + * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX] + * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX] + * CRYPTO {boolean} true or false + * MODULO_MODE {number} 0 to 9 + * POW_PRECISION {number} 0 to MAX + * ALPHABET {string} A string of two or more unique characters which does + * not contain '.'. + * FORMAT {object} An object with some of the following properties: + * prefix {string} + * groupSize {number} + * secondaryGroupSize {number} + * groupSeparator {string} + * decimalSeparator {string} + * fractionGroupSize {number} + * fractionGroupSeparator {string} + * suffix {string} + * + * (The values assigned to the above FORMAT object properties are not checked for validity.) + * + * E.g. + * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) + * + * Ignore properties/parameters set to null or undefined, except for ALPHABET. + * + * Return an object with the properties current values. + */ + BigNumber.config = BigNumber.set = function (obj) { + var p, v; + + if (obj != null) { + + if (typeof obj == 'object') { + + // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. + // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) { + v = obj[p]; + intCheck(v, 0, MAX, p); + DECIMAL_PLACES = v; + } + + // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. + // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) { + v = obj[p]; + intCheck(v, 0, 8, p); + ROUNDING_MODE = v; + } + + // EXPONENTIAL_AT {number|number[]} + // Integer, -MAX to MAX inclusive or + // [integer -MAX to 0 inclusive, 0 to MAX inclusive]. + // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) { + v = obj[p]; + if (v && v.pop) { + intCheck(v[0], -MAX, 0, p); + intCheck(v[1], 0, MAX, p); + TO_EXP_NEG = v[0]; + TO_EXP_POS = v[1]; + } else { + intCheck(v, -MAX, MAX, p); + TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); + } + } + + // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or + // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. + // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}' + if (obj.hasOwnProperty(p = 'RANGE')) { + v = obj[p]; + if (v && v.pop) { + intCheck(v[0], -MAX, -1, p); + intCheck(v[1], 1, MAX, p); + MIN_EXP = v[0]; + MAX_EXP = v[1]; + } else { + intCheck(v, -MAX, MAX, p); + if (v) { + MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); + } else { + throw Error + (bignumberError + p + ' cannot be zero: ' + v); + } + } + } + + // CRYPTO {boolean} true or false. + // '[BigNumber Error] CRYPTO not true or false: {v}' + // '[BigNumber Error] crypto unavailable' + if (obj.hasOwnProperty(p = 'CRYPTO')) { + v = obj[p]; + if (v === !!v) { + if (v) { + if (typeof crypto != 'undefined' && crypto && + (crypto.getRandomValues || crypto.randomBytes)) { + CRYPTO = v; + } else { + CRYPTO = !v; + throw Error + (bignumberError + 'crypto unavailable'); + } + } else { + CRYPTO = v; + } + } else { + throw Error + (bignumberError + p + ' not true or false: ' + v); + } + } + + // MODULO_MODE {number} Integer, 0 to 9 inclusive. + // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'MODULO_MODE')) { + v = obj[p]; + intCheck(v, 0, 9, p); + MODULO_MODE = v; + } + + // POW_PRECISION {number} Integer, 0 to MAX inclusive. + // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}' + if (obj.hasOwnProperty(p = 'POW_PRECISION')) { + v = obj[p]; + intCheck(v, 0, MAX, p); + POW_PRECISION = v; + } + + // FORMAT {object} + // '[BigNumber Error] FORMAT not an object: {v}' + if (obj.hasOwnProperty(p = 'FORMAT')) { + v = obj[p]; + if (typeof v == 'object') FORMAT = v; + else throw Error + (bignumberError + p + ' not an object: ' + v); + } + + // ALPHABET {string} + // '[BigNumber Error] ALPHABET invalid: {v}' + if (obj.hasOwnProperty(p = 'ALPHABET')) { + v = obj[p]; + + // Disallow if less than two characters, + // or if it contains '+', '-', '.', whitespace, or a repeated character. + if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) { + alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789'; + ALPHABET = v; + } else { + throw Error + (bignumberError + p + ' invalid: ' + v); + } + } + + } else { + + // '[BigNumber Error] Object expected: {v}' + throw Error + (bignumberError + 'Object expected: ' + obj); + } + } + + return { + DECIMAL_PLACES: DECIMAL_PLACES, + ROUNDING_MODE: ROUNDING_MODE, + EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], + RANGE: [MIN_EXP, MAX_EXP], + CRYPTO: CRYPTO, + MODULO_MODE: MODULO_MODE, + POW_PRECISION: POW_PRECISION, + FORMAT: FORMAT, + ALPHABET: ALPHABET + }; + }; + + + /* + * Return true if v is a BigNumber instance, otherwise return false. + * + * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed. + * + * v {any} + * + * '[BigNumber Error] Invalid BigNumber: {v}' + */ + BigNumber.isBigNumber = function (v) { + if (!v || v._isBigNumber !== true) return false; + if (!BigNumber.DEBUG) return true; + + var i, n, + c = v.c, + e = v.e, + s = v.s; + + out: if ({}.toString.call(c) == '[object Array]') { + + if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { + + // If the first element is zero, the BigNumber value must be zero. + if (c[0] === 0) { + if (e === 0 && c.length === 1) return true; + break out; + } + + // Calculate number of digits that c[0] should have, based on the exponent. + i = (e + 1) % LOG_BASE; + if (i < 1) i += LOG_BASE; + + // Calculate number of digits of c[0]. + //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) { + if (String(c[0]).length == i) { + + for (i = 0; i < c.length; i++) { + n = c[i]; + if (n < 0 || n >= BASE || n !== mathfloor(n)) break out; + } + + // Last element cannot be zero, unless it is the only element. + if (n !== 0) return true; + } + } + + // Infinity/NaN + } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { + return true; + } + + throw Error + (bignumberError + 'Invalid BigNumber: ' + v); + }; + + + /* + * Return a new BigNumber whose value is the maximum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.maximum = BigNumber.max = function () { + return maxOrMin(arguments, -1); + }; + + + /* + * Return a new BigNumber whose value is the minimum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.minimum = BigNumber.min = function () { + return maxOrMin(arguments, 1); + }; + + + /* + * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, + * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing + * zeros are produced). + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}' + * '[BigNumber Error] crypto unavailable' + */ + BigNumber.random = (function () { + var pow2_53 = 0x20000000000000; + + // Return a 53 bit integer n, where 0 <= n < 9007199254740992. + // Check if Math.random() produces more than 32 bits of randomness. + // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. + // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. + var random53bitInt = (Math.random() * pow2_53) & 0x1fffff + ? function () { return mathfloor(Math.random() * pow2_53); } + : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + + (Math.random() * 0x800000 | 0); }; + + return function (dp) { + var a, b, e, k, v, + i = 0, + c = [], + rand = new BigNumber(ONE); + + if (dp == null) dp = DECIMAL_PLACES; + else intCheck(dp, 0, MAX); + + k = mathceil(dp / LOG_BASE); + + if (CRYPTO) { + + // Browsers supporting crypto.getRandomValues. + if (crypto.getRandomValues) { + + a = crypto.getRandomValues(new Uint32Array(k *= 2)); + + for (; i < k;) { + + // 53 bits: + // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) + // 11111 11111111 11111111 11111111 11100000 00000000 00000000 + // ((Math.pow(2, 32) - 1) >>> 11).toString(2) + // 11111 11111111 11111111 + // 0x20000 is 2^21. + v = a[i] * 0x20000 + (a[i + 1] >>> 11); + + // Rejection sampling: + // 0 <= v < 9007199254740992 + // Probability that v >= 9e15, is + // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 + if (v >= 9e15) { + b = crypto.getRandomValues(new Uint32Array(2)); + a[i] = b[0]; + a[i + 1] = b[1]; + } else { + + // 0 <= v <= 8999999999999999 + // 0 <= (v % 1e14) <= 99999999999999 + c.push(v % 1e14); + i += 2; + } + } + i = k / 2; + + // Node.js supporting crypto.randomBytes. + } else if (crypto.randomBytes) { + + // buffer + a = crypto.randomBytes(k *= 7); + + for (; i < k;) { + + // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 + // 0x100000000 is 2^32, 0x1000000 is 2^24 + // 11111 11111111 11111111 11111111 11111111 11111111 11111111 + // 0 <= v < 9007199254740992 + v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) + + (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) + + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; + + if (v >= 9e15) { + crypto.randomBytes(7).copy(a, i); + } else { + + // 0 <= (v % 1e14) <= 99999999999999 + c.push(v % 1e14); + i += 7; + } + } + i = k / 7; + } else { + CRYPTO = false; + throw Error + (bignumberError + 'crypto unavailable'); + } + } + + // Use Math.random. + if (!CRYPTO) { + + for (; i < k;) { + v = random53bitInt(); + if (v < 9e15) c[i++] = v % 1e14; + } + } + + k = c[--i]; + dp %= LOG_BASE; + + // Convert trailing digits to zeros according to dp. + if (k && dp) { + v = POWS_TEN[LOG_BASE - dp]; + c[i] = mathfloor(k / v) * v; + } + + // Remove trailing elements which are zero. + for (; c[i] === 0; c.pop(), i--); + + // Zero? + if (i < 0) { + c = [e = 0]; + } else { + + // Remove leading elements which are zero and adjust exponent accordingly. + for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); + + // Count the digits of the first element of c to determine leading zeros, and... + for (i = 1, v = c[0]; v >= 10; v /= 10, i++); + + // adjust the exponent accordingly. + if (i < LOG_BASE) e -= LOG_BASE - i; + } + + rand.e = e; + rand.c = c; + return rand; + }; + })(); + + + /* + * Return a BigNumber whose value is the sum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.sum = function () { + var i = 1, + args = arguments, + sum = new BigNumber(args[0]); + for (; i < args.length;) sum = sum.plus(args[i++]); + return sum; + }; + + + // PRIVATE FUNCTIONS + + + // Called by BigNumber and BigNumber.prototype.toString. + convertBase = (function () { + var decimal = '0123456789'; + + /* + * Convert string of baseIn to an array of numbers of baseOut. + * Eg. toBaseOut('255', 10, 16) returns [15, 15]. + * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5]. + */ + function toBaseOut(str, baseIn, baseOut, alphabet) { + var j, + arr = [0], + arrL, + i = 0, + len = str.length; + + for (; i < len;) { + for (arrL = arr.length; arrL--; arr[arrL] *= baseIn); + + arr[0] += alphabet.indexOf(str.charAt(i++)); + + for (j = 0; j < arr.length; j++) { + + if (arr[j] > baseOut - 1) { + if (arr[j + 1] == null) arr[j + 1] = 0; + arr[j + 1] += arr[j] / baseOut | 0; + arr[j] %= baseOut; + } + } + } + + return arr.reverse(); + } + + // Convert a numeric string of baseIn to a numeric string of baseOut. + // If the caller is toString, we are converting from base 10 to baseOut. + // If the caller is BigNumber, we are converting from baseIn to base 10. + return function (str, baseIn, baseOut, sign, callerIsToString) { + var alphabet, d, e, k, r, x, xc, y, + i = str.indexOf('.'), + dp = DECIMAL_PLACES, + rm = ROUNDING_MODE; + + // Non-integer. + if (i >= 0) { + k = POW_PRECISION; + + // Unlimited precision. + POW_PRECISION = 0; + str = str.replace('.', ''); + y = new BigNumber(baseIn); + x = y.pow(str.length - i); + POW_PRECISION = k; + + // Convert str as if an integer, then restore the fraction part by dividing the + // result by its base raised to a power. + + y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), + 10, baseOut, decimal); + y.e = y.c.length; + } + + // Convert the number as integer. + + xc = toBaseOut(str, baseIn, baseOut, callerIsToString + ? (alphabet = ALPHABET, decimal) + : (alphabet = decimal, ALPHABET)); + + // xc now represents str as an integer and converted to baseOut. e is the exponent. + e = k = xc.length; + + // Remove trailing zeros. + for (; xc[--k] == 0; xc.pop()); + + // Zero? + if (!xc[0]) return alphabet.charAt(0); + + // Does str represent an integer? If so, no need for the division. + if (i < 0) { + --e; + } else { + x.c = xc; + x.e = e; + + // The sign is needed for correct rounding. + x.s = sign; + x = div(x, y, dp, rm, baseOut); + xc = x.c; + r = x.r; + e = x.e; + } + + // xc now represents str converted to baseOut. + + // The index of the rounding digit. + d = e + dp + 1; + + // The rounding digit: the digit to the right of the digit that may be rounded up. + i = xc[d]; + + // Look at the rounding digits and mode to determine whether to round up. + + k = baseOut / 2; + r = r || d < 0 || xc[d + 1] != null; + + r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) + : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 || + rm == (x.s < 0 ? 8 : 7)); + + // If the index of the rounding digit is not greater than zero, or xc represents + // zero, then the result of the base conversion is zero or, if rounding up, a value + // such as 0.00001. + if (d < 1 || !xc[0]) { + + // 1^-dp or 0 + str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); + } else { + + // Truncate xc to the required number of decimal places. + xc.length = d; + + // Round up? + if (r) { + + // Rounding up may mean the previous digit has to be rounded up and so on. + for (--baseOut; ++xc[--d] > baseOut;) { + xc[d] = 0; + + if (!d) { + ++e; + xc = [1].concat(xc); + } + } + } + + // Determine trailing zeros. + for (k = xc.length; !xc[--k];); + + // E.g. [4, 11, 15] becomes 4bf. + for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); + + // Add leading zeros, decimal point and trailing zeros as required. + str = toFixedPoint(str, e, alphabet.charAt(0)); + } + + // The caller will add the sign. + return str; + }; + })(); + + + // Perform division in the specified base. Called by div and convertBase. + div = (function () { + + // Assume non-zero x and k. + function multiply(x, k, base) { + var m, temp, xlo, xhi, + carry = 0, + i = x.length, + klo = k % SQRT_BASE, + khi = k / SQRT_BASE | 0; + + for (x = x.slice(); i--;) { + xlo = x[i] % SQRT_BASE; + xhi = x[i] / SQRT_BASE | 0; + m = khi * xlo + xhi * klo; + temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry; + carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; + x[i] = temp % base; + } + + if (carry) x = [carry].concat(x); + + return x; + } + + function compare(a, b, aL, bL) { + var i, cmp; + + if (aL != bL) { + cmp = aL > bL ? 1 : -1; + } else { + + for (i = cmp = 0; i < aL; i++) { + + if (a[i] != b[i]) { + cmp = a[i] > b[i] ? 1 : -1; + break; + } + } + } + + return cmp; + } + + function subtract(a, b, aL, base) { + var i = 0; + + // Subtract b from a. + for (; aL--;) { + a[aL] -= i; + i = a[aL] < b[aL] ? 1 : 0; + a[aL] = i * base + a[aL] - b[aL]; + } + + // Remove leading zeros. + for (; !a[0] && a.length > 1; a.splice(0, 1)); + } + + // x: dividend, y: divisor. + return function (x, y, dp, rm, base) { + var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, + yL, yz, + s = x.s == y.s ? 1 : -1, + xc = x.c, + yc = y.c; + + // Either NaN, Infinity or 0? + if (!xc || !xc[0] || !yc || !yc[0]) { + + return new BigNumber( + + // Return NaN if either NaN, or both Infinity or 0. + !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : + + // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. + xc && xc[0] == 0 || !yc ? s * 0 : s / 0 + ); + } + + q = new BigNumber(s); + qc = q.c = []; + e = x.e - y.e; + s = dp + e + 1; + + if (!base) { + base = BASE; + e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); + s = s / LOG_BASE | 0; + } + + // Result exponent may be one less then the current value of e. + // The coefficients of the BigNumbers from convertBase may have trailing zeros. + for (i = 0; yc[i] == (xc[i] || 0); i++); + + if (yc[i] > (xc[i] || 0)) e--; + + if (s < 0) { + qc.push(1); + more = true; + } else { + xL = xc.length; + yL = yc.length; + i = 0; + s += 2; + + // Normalise xc and yc so highest order digit of yc is >= base / 2. + + n = mathfloor(base / (yc[0] + 1)); + + // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1. + // if (n > 1 || n++ == 1 && yc[0] < base / 2) { + if (n > 1) { + yc = multiply(yc, n, base); + xc = multiply(xc, n, base); + yL = yc.length; + xL = xc.length; + } + + xi = yL; + rem = xc.slice(0, yL); + remL = rem.length; + + // Add zeros to make remainder as long as divisor. + for (; remL < yL; rem[remL++] = 0); + yz = yc.slice(); + yz = [0].concat(yz); + yc0 = yc[0]; + if (yc[1] >= base / 2) yc0++; + // Not necessary, but to prevent trial digit n > base, when using base 3. + // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15; + + do { + n = 0; + + // Compare divisor and remainder. + cmp = compare(yc, rem, yL, remL); + + // If divisor < remainder. + if (cmp < 0) { + + // Calculate trial digit, n. + + rem0 = rem[0]; + if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); + + // n is how many times the divisor goes into the current remainder. + n = mathfloor(rem0 / yc0); + + // Algorithm: + // product = divisor multiplied by trial digit (n). + // Compare product and remainder. + // If product is greater than remainder: + // Subtract divisor from product, decrement trial digit. + // Subtract product from remainder. + // If product was less than remainder at the last compare: + // Compare new remainder and divisor. + // If remainder is greater than divisor: + // Subtract divisor from remainder, increment trial digit. + + if (n > 1) { + + // n may be > base only when base is 3. + if (n >= base) n = base - 1; + + // product = divisor * trial digit. + prod = multiply(yc, n, base); + prodL = prod.length; + remL = rem.length; + + // Compare product and remainder. + // If product > remainder then trial digit n too high. + // n is 1 too high about 5% of the time, and is not known to have + // ever been more than 1 too high. + while (compare(prod, rem, prodL, remL) == 1) { + n--; + + // Subtract divisor from product. + subtract(prod, yL < prodL ? yz : yc, prodL, base); + prodL = prod.length; + cmp = 1; + } + } else { + + // n is 0 or 1, cmp is -1. + // If n is 0, there is no need to compare yc and rem again below, + // so change cmp to 1 to avoid it. + // If n is 1, leave cmp as -1, so yc and rem are compared again. + if (n == 0) { + + // divisor < remainder, so n must be at least 1. + cmp = n = 1; + } + + // product = divisor + prod = yc.slice(); + prodL = prod.length; + } + + if (prodL < remL) prod = [0].concat(prod); + + // Subtract product from remainder. + subtract(rem, prod, remL, base); + remL = rem.length; + + // If product was < remainder. + if (cmp == -1) { + + // Compare divisor and new remainder. + // If divisor < new remainder, subtract divisor from remainder. + // Trial digit n too low. + // n is 1 too low about 5% of the time, and very rarely 2 too low. + while (compare(yc, rem, yL, remL) < 1) { + n++; + + // Subtract divisor from remainder. + subtract(rem, yL < remL ? yz : yc, remL, base); + remL = rem.length; + } + } + } else if (cmp === 0) { + n++; + rem = [0]; + } // else cmp === 1 and n will be 0 + + // Add the next digit, n, to the result array. + qc[i++] = n; + + // Update the remainder. + if (rem[0]) { + rem[remL++] = xc[xi] || 0; + } else { + rem = [xc[xi]]; + remL = 1; + } + } while ((xi++ < xL || rem[0] != null) && s--); + + more = rem[0] != null; + + // Leading zero? + if (!qc[0]) qc.splice(0, 1); + } + + if (base == BASE) { + + // To calculate q.e, first get the number of digits of qc[0]. + for (i = 1, s = qc[0]; s >= 10; s /= 10, i++); + + round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); + + // Caller is convertBase. + } else { + q.e = e; + q.r = +more; + } + + return q; + }; + })(); + + + /* + * Return a string representing the value of BigNumber n in fixed-point or exponential + * notation rounded to the specified decimal places or significant digits. + * + * n: a BigNumber. + * i: the index of the last digit required (i.e. the digit that may be rounded up). + * rm: the rounding mode. + * id: 1 (toExponential) or 2 (toPrecision). + */ + function format(n, i, rm, id) { + var c0, e, ne, len, str; + + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + if (!n.c) return n.toString(); + + c0 = n.c[0]; + ne = n.e; + + if (i == null) { + str = coeffToString(n.c); + str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) + ? toExponential(str, ne) + : toFixedPoint(str, ne, '0'); + } else { + n = round(new BigNumber(n), i, rm); + + // n.e may have changed if the value was rounded up. + e = n.e; + + str = coeffToString(n.c); + len = str.length; + + // toPrecision returns exponential notation if the number of significant digits + // specified is less than the number of digits necessary to represent the integer + // part of the value in fixed-point notation. + + // Exponential notation. + if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { + + // Append zeros? + for (; len < i; str += '0', len++); + str = toExponential(str, e); + + // Fixed-point notation. + } else { + i -= ne + (id === 2 && e > ne); + str = toFixedPoint(str, e, '0'); + + // Append zeros? + if (e + 1 > len) { + if (--i > 0) for (str += '.'; i--; str += '0'); + } else { + i += e - len; + if (i > 0) { + if (e + 1 == len) str += '.'; + for (; i--; str += '0'); + } + } + } + } + + return n.s < 0 && c0 ? '-' + str : str; + } + + + // Handle BigNumber.max and BigNumber.min. + // If any number is NaN, return NaN. + function maxOrMin(args, n) { + var k, y, + i = 1, + x = new BigNumber(args[0]); + + for (; i < args.length; i++) { + y = new BigNumber(args[i]); + if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) { + x = y; + } + } + + return x; + } + + + /* + * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. + * Called by minus, plus and times. + */ + function normalise(n, c, e) { + var i = 1, + j = c.length; + + // Remove trailing zeros. + for (; !c[--j]; c.pop()); + + // Calculate the base 10 exponent. First get the number of digits of c[0]. + for (j = c[0]; j >= 10; j /= 10, i++); + + // Overflow? + if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { + + // Infinity. + n.c = n.e = null; + + // Underflow? + } else if (e < MIN_EXP) { + + // Zero. + n.c = [n.e = 0]; + } else { + n.e = e; + n.c = c; + } + + return n; + } + + + // Handle values that fail the validity test in BigNumber. + parseNumeric = (function () { + var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, + dotAfter = /^([^.]+)\.$/, + dotBefore = /^\.([^.]+)$/, + isInfinityOrNaN = /^-?(Infinity|NaN)$/, + whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; + + return function (x, str, isNum, b) { + var base, + s = isNum ? str : str.replace(whitespaceOrPlus, ''); + + // No exception on ±Infinity or NaN. + if (isInfinityOrNaN.test(s)) { + x.s = isNaN(s) ? null : s < 0 ? -1 : 1; + } else { + if (!isNum) { + + // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i + s = s.replace(basePrefix, function (m, p1, p2) { + base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8; + return !b || b == base ? p1 : m; + }); + + if (b) { + base = b; + + // E.g. '1.' to '1', '.1' to '0.1' + s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1'); + } + + if (str != s) return new BigNumber(s, base); + } + + // '[BigNumber Error] Not a number: {n}' + // '[BigNumber Error] Not a base {b} number: {n}' + if (BigNumber.DEBUG) { + throw Error + (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str); + } + + // NaN + x.s = null; + } + + x.c = x.e = null; + } + })(); + + + /* + * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. + * If r is truthy, it is known that there are more digits after the rounding digit. + */ + function round(x, sd, rm, r) { + var d, i, j, k, n, ni, rd, + xc = x.c, + pows10 = POWS_TEN; + + // if x is not Infinity or NaN... + if (xc) { + + // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. + // n is a base 1e14 number, the value of the element of array x.c containing rd. + // ni is the index of n within x.c. + // d is the number of digits of n. + // i is the index of rd within n including leading zeros. + // j is the actual index of rd within n (if < 0, rd is a leading zero). + out: { + + // Get the number of digits of the first element of xc. + for (d = 1, k = xc[0]; k >= 10; k /= 10, d++); + i = sd - d; + + // If the rounding digit is in the first element of xc... + if (i < 0) { + i += LOG_BASE; + j = sd; + n = xc[ni = 0]; + + // Get the rounding digit at index j of n. + rd = mathfloor(n / pows10[d - j - 1] % 10); + } else { + ni = mathceil((i + 1) / LOG_BASE); + + if (ni >= xc.length) { + + if (r) { + + // Needed by sqrt. + for (; xc.length <= ni; xc.push(0)); + n = rd = 0; + d = 1; + i %= LOG_BASE; + j = i - LOG_BASE + 1; + } else { + break out; + } + } else { + n = k = xc[ni]; + + // Get the number of digits of n. + for (d = 1; k >= 10; k /= 10, d++); + + // Get the index of rd within n. + i %= LOG_BASE; + + // Get the index of rd within n, adjusted for leading zeros. + // The number of leading zeros of n is given by LOG_BASE - d. + j = i - LOG_BASE + d; + + // Get the rounding digit at index j of n. + rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10); + } + } + + r = r || sd < 0 || + + // Are there any non-zero digits after the rounding digit? + // The expression n % pows10[d - j - 1] returns all digits of n to the right + // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. + xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); + + r = rm < 4 + ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) + : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && + + // Check whether the digit to the left of the rounding digit is odd. + ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 || + rm == (x.s < 0 ? 8 : 7)); + + if (sd < 1 || !xc[0]) { + xc.length = 0; + + if (r) { + + // Convert sd to decimal places. + sd -= x.e + 1; + + // 1, 0.1, 0.01, 0.001, 0.0001 etc. + xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; + x.e = -sd || 0; + } else { + + // Zero. + xc[0] = x.e = 0; + } + + return x; + } + + // Remove excess digits. + if (i == 0) { + xc.length = ni; + k = 1; + ni--; + } else { + xc.length = ni + 1; + k = pows10[LOG_BASE - i]; + + // E.g. 56700 becomes 56000 if 7 is the rounding digit. + // j > 0 means i > number of leading zeros of n. + xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; + } + + // Round up? + if (r) { + + for (; ;) { + + // If the digit to be rounded up is in the first element of xc... + if (ni == 0) { + + // i will be the length of xc[0] before k is added. + for (i = 1, j = xc[0]; j >= 10; j /= 10, i++); + j = xc[0] += k; + for (k = 1; j >= 10; j /= 10, k++); + + // if i != k the length has increased. + if (i != k) { + x.e++; + if (xc[0] == BASE) xc[0] = 1; + } + + break; + } else { + xc[ni] += k; + if (xc[ni] != BASE) break; + xc[ni--] = 0; + k = 1; + } + } + } + + // Remove trailing zeros. + for (i = xc.length; xc[--i] === 0; xc.pop()); + } + + // Overflow? Infinity. + if (x.e > MAX_EXP) { + x.c = x.e = null; + + // Underflow? Zero. + } else if (x.e < MIN_EXP) { + x.c = [x.e = 0]; + } + } + + return x; + } + + + function valueOf(n) { + var str, + e = n.e; + + if (e === null) return n.toString(); + + str = coeffToString(n.c); + + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential(str, e) + : toFixedPoint(str, e, '0'); + + return n.s < 0 ? '-' + str : str; + } + + + // PROTOTYPE/INSTANCE METHODS + + + /* + * Return a new BigNumber whose value is the absolute value of this BigNumber. + */ + P.absoluteValue = P.abs = function () { + var x = new BigNumber(this); + if (x.s < 0) x.s = 1; + return x; + }; + + + /* + * Return + * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), + * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), + * 0 if they have the same value, + * or null if the value of either is NaN. + */ + P.comparedTo = function (y, b) { + return compare(this, new BigNumber(y, b)); + }; + + + /* + * If dp is undefined or null or true or false, return the number of decimal places of the + * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. + * + * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this + * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or + * ROUNDING_MODE if rm is omitted. + * + * [dp] {number} Decimal places: integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.decimalPlaces = P.dp = function (dp, rm) { + var c, n, v, + x = this; + + if (dp != null) { + intCheck(dp, 0, MAX); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + return round(new BigNumber(x), dp + x.e + 1, rm); + } + + if (!(c = x.c)) return null; + n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; + + // Subtract the number of trailing zeros of the last number. + if (v = c[v]) for (; v % 10 == 0; v /= 10, n--); + if (n < 0) n = 0; + + return n; + }; + + + /* + * n / 0 = I + * n / N = N + * n / I = 0 + * 0 / n = 0 + * 0 / 0 = N + * 0 / N = N + * 0 / I = 0 + * N / n = N + * N / 0 = N + * N / N = N + * N / I = N + * I / n = I + * I / 0 = I + * I / N = N + * I / I = N + * + * Return a new BigNumber whose value is the value of this BigNumber divided by the value of + * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.dividedBy = P.div = function (y, b) { + return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE); + }; + + + /* + * Return a new BigNumber whose value is the integer part of dividing the value of this + * BigNumber by the value of BigNumber(y, b). + */ + P.dividedToIntegerBy = P.idiv = function (y, b) { + return div(this, new BigNumber(y, b), 0, 1); + }; + + + /* + * Return a BigNumber whose value is the value of this BigNumber exponentiated by n. + * + * If m is present, return the result modulo m. + * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. + * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE. + * + * The modular power operation works efficiently when x, n, and m are integers, otherwise it + * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0. + * + * n {number|string|BigNumber} The exponent. An integer. + * [m] {number|string|BigNumber} The modulus. + * + * '[BigNumber Error] Exponent not an integer: {n}' + */ + P.exponentiatedBy = P.pow = function (n, m) { + var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, + x = this; + + n = new BigNumber(n); + + // Allow NaN and ±Infinity, but not other non-integers. + if (n.c && !n.isInteger()) { + throw Error + (bignumberError + 'Exponent not an integer: ' + valueOf(n)); + } + + if (m != null) m = new BigNumber(m); + + // Exponent of MAX_SAFE_INTEGER is 15. + nIsBig = n.e > 14; + + // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0. + if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { + + // The sign of the result of pow when x is negative depends on the evenness of n. + // If +n overflows to ±Infinity, the evenness of n would be not be known. + y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n))); + return m ? y.mod(m) : y; + } + + nIsNeg = n.s < 0; + + if (m) { + + // x % m returns NaN if abs(m) is zero, or m is NaN. + if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN); + + isModExp = !nIsNeg && x.isInteger() && m.isInteger(); + + if (isModExp) x = x.mod(m); + + // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15. + // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15. + } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 + // [1, 240000000] + ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 + // [80000000000000] [99999750000000] + : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) { + + // If x is negative and n is odd, k = -0, else k = 0. + k = x.s < 0 && isOdd(n) ? -0 : 0; + + // If x >= 1, k = ±Infinity. + if (x.e > -1) k = 1 / k; + + // If n is negative return ±0, else return ±Infinity. + return new BigNumber(nIsNeg ? 1 / k : k); + + } else if (POW_PRECISION) { + + // Truncating each coefficient array to a length of k after each multiplication + // equates to truncating significant digits to POW_PRECISION + [28, 41], + // i.e. there will be a minimum of 28 guard digits retained. + k = mathceil(POW_PRECISION / LOG_BASE + 2); + } + + if (nIsBig) { + half = new BigNumber(0.5); + if (nIsNeg) n.s = 1; + nIsOdd = isOdd(n); + } else { + i = Math.abs(+valueOf(n)); + nIsOdd = i % 2; + } + + y = new BigNumber(ONE); + + // Performs 54 loop iterations for n of 9007199254740991. + for (; ;) { + + if (nIsOdd) { + y = y.times(x); + if (!y.c) break; + + if (k) { + if (y.c.length > k) y.c.length = k; + } else if (isModExp) { + y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m)); + } + } + + if (i) { + i = mathfloor(i / 2); + if (i === 0) break; + nIsOdd = i % 2; + } else { + n = n.times(half); + round(n, n.e + 1, 1); + + if (n.e > 14) { + nIsOdd = isOdd(n); + } else { + i = +valueOf(n); + if (i === 0) break; + nIsOdd = i % 2; + } + } + + x = x.times(x); + + if (k) { + if (x.c && x.c.length > k) x.c.length = k; + } else if (isModExp) { + x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m)); + } + } + + if (isModExp) return y; + if (nIsNeg) y = ONE.div(y); + + return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer + * using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}' + */ + P.integerValue = function (rm) { + var n = new BigNumber(this); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + return round(n, n.e + 1, rm); + }; + + + /* + * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), + * otherwise return false. + */ + P.isEqualTo = P.eq = function (y, b) { + return compare(this, new BigNumber(y, b)) === 0; + }; + + + /* + * Return true if the value of this BigNumber is a finite number, otherwise return false. + */ + P.isFinite = function () { + return !!this.c; + }; + + + /* + * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), + * otherwise return false. + */ + P.isGreaterThan = P.gt = function (y, b) { + return compare(this, new BigNumber(y, b)) > 0; + }; + + + /* + * Return true if the value of this BigNumber is greater than or equal to the value of + * BigNumber(y, b), otherwise return false. + */ + P.isGreaterThanOrEqualTo = P.gte = function (y, b) { + return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0; + + }; + + + /* + * Return true if the value of this BigNumber is an integer, otherwise return false. + */ + P.isInteger = function () { + return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; + }; + + + /* + * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), + * otherwise return false. + */ + P.isLessThan = P.lt = function (y, b) { + return compare(this, new BigNumber(y, b)) < 0; + }; + + + /* + * Return true if the value of this BigNumber is less than or equal to the value of + * BigNumber(y, b), otherwise return false. + */ + P.isLessThanOrEqualTo = P.lte = function (y, b) { + return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0; + }; + + + /* + * Return true if the value of this BigNumber is NaN, otherwise return false. + */ + P.isNaN = function () { + return !this.s; + }; + + + /* + * Return true if the value of this BigNumber is negative, otherwise return false. + */ + P.isNegative = function () { + return this.s < 0; + }; + + + /* + * Return true if the value of this BigNumber is positive, otherwise return false. + */ + P.isPositive = function () { + return this.s > 0; + }; + + + /* + * Return true if the value of this BigNumber is 0 or -0, otherwise return false. + */ + P.isZero = function () { + return !!this.c && this.c[0] == 0; + }; + + + /* + * n - 0 = n + * n - N = N + * n - I = -I + * 0 - n = -n + * 0 - 0 = 0 + * 0 - N = N + * 0 - I = -I + * N - n = N + * N - 0 = N + * N - N = N + * N - I = N + * I - n = I + * I - 0 = I + * I - N = N + * I - I = N + * + * Return a new BigNumber whose value is the value of this BigNumber minus the value of + * BigNumber(y, b). + */ + P.minus = function (y, b) { + var i, j, t, xLTy, + x = this, + a = x.s; + + y = new BigNumber(y, b); + b = y.s; + + // Either NaN? + if (!a || !b) return new BigNumber(NaN); + + // Signs differ? + if (a != b) { + y.s = -b; + return x.plus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if (!xe || !ye) { + + // Either Infinity? + if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); + + // Either zero? + if (!xc[0] || !yc[0]) { + + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : + + // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity + ROUNDING_MODE == 3 ? -0 : 0); + } + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Determine which is the bigger number. + if (a = xe - ye) { + + if (xLTy = a < 0) { + a = -a; + t = xc; + } else { + ye = xe; + t = yc; + } + + t.reverse(); + + // Prepend zeros to equalise exponents. + for (b = a; b--; t.push(0)); + t.reverse(); + } else { + + // Exponents equal. Check digit by digit. + j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; + + for (a = b = 0; b < j; b++) { + + if (xc[b] != yc[b]) { + xLTy = xc[b] < yc[b]; + break; + } + } + } + + // x < y? Point xc to the array of the bigger number. + if (xLTy) { + t = xc; + xc = yc; + yc = t; + y.s = -y.s; + } + + b = (j = yc.length) - (i = xc.length); + + // Append zeros to xc if shorter. + // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. + if (b > 0) for (; b--; xc[i++] = 0); + b = BASE - 1; + + // Subtract yc from xc. + for (; j > a;) { + + if (xc[--j] < yc[j]) { + for (i = j; i && !xc[--i]; xc[i] = b); + --xc[i]; + xc[j] += BASE; + } + + xc[j] -= yc[j]; + } + + // Remove leading zeros and adjust exponent accordingly. + for (; xc[0] == 0; xc.splice(0, 1), --ye); + + // Zero? + if (!xc[0]) { + + // Following IEEE 754 (2008) 6.3, + // n - n = +0 but n - n = -0 when rounding towards -Infinity. + y.s = ROUNDING_MODE == 3 ? -1 : 1; + y.c = [y.e = 0]; + return y; + } + + // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity + // for finite x and y. + return normalise(y, xc, ye); + }; + + + /* + * n % 0 = N + * n % N = N + * n % I = n + * 0 % n = 0 + * -0 % n = -0 + * 0 % 0 = N + * 0 % N = N + * 0 % I = 0 + * N % n = N + * N % 0 = N + * N % N = N + * N % I = N + * I % n = N + * I % 0 = N + * I % N = N + * I % I = N + * + * Return a new BigNumber whose value is the value of this BigNumber modulo the value of + * BigNumber(y, b). The result depends on the value of MODULO_MODE. + */ + P.modulo = P.mod = function (y, b) { + var q, s, + x = this; + + y = new BigNumber(y, b); + + // Return NaN if x is Infinity or NaN, or y is NaN or zero. + if (!x.c || !y.s || y.c && !y.c[0]) { + return new BigNumber(NaN); + + // Return x if y is Infinity or x is zero. + } else if (!y.c || x.c && !x.c[0]) { + return new BigNumber(x); + } + + if (MODULO_MODE == 9) { + + // Euclidian division: q = sign(y) * floor(x / abs(y)) + // r = x - qy where 0 <= r < abs(y) + s = y.s; + y.s = 1; + q = div(x, y, 0, 3); + y.s = s; + q.s *= s; + } else { + q = div(x, y, 0, MODULO_MODE); + } + + y = x.minus(q.times(y)); + + // To match JavaScript %, ensure sign of zero is sign of dividend. + if (!y.c[0] && MODULO_MODE == 1) y.s = x.s; + + return y; + }; + + + /* + * n * 0 = 0 + * n * N = N + * n * I = I + * 0 * n = 0 + * 0 * 0 = 0 + * 0 * N = N + * 0 * I = N + * N * n = N + * N * 0 = N + * N * N = N + * N * I = N + * I * n = I + * I * 0 = N + * I * N = N + * I * I = I + * + * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value + * of BigNumber(y, b). + */ + P.multipliedBy = P.times = function (y, b) { + var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, + base, sqrtBase, + x = this, + xc = x.c, + yc = (y = new BigNumber(y, b)).c; + + // Either NaN, ±Infinity or ±0? + if (!xc || !yc || !xc[0] || !yc[0]) { + + // Return NaN if either is NaN, or one is 0 and the other is Infinity. + if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { + y.c = y.e = y.s = null; + } else { + y.s *= x.s; + + // Return ±Infinity if either is ±Infinity. + if (!xc || !yc) { + y.c = y.e = null; + + // Return ±0 if either is ±0. + } else { + y.c = [0]; + y.e = 0; + } + } + + return y; + } + + e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); + y.s *= x.s; + xcL = xc.length; + ycL = yc.length; + + // Ensure xc points to longer array and xcL to its length. + if (xcL < ycL) { + zc = xc; + xc = yc; + yc = zc; + i = xcL; + xcL = ycL; + ycL = i; + } + + // Initialise the result array with zeros. + for (i = xcL + ycL, zc = []; i--; zc.push(0)); + + base = BASE; + sqrtBase = SQRT_BASE; + + for (i = ycL; --i >= 0;) { + c = 0; + ylo = yc[i] % sqrtBase; + yhi = yc[i] / sqrtBase | 0; + + for (k = xcL, j = i + k; j > i;) { + xlo = xc[--k] % sqrtBase; + xhi = xc[k] / sqrtBase | 0; + m = yhi * xlo + xhi * ylo; + xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c; + c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; + zc[j--] = xlo % base; + } + + zc[j] = c; + } + + if (c) { + ++e; + } else { + zc.splice(0, 1); + } + + return normalise(y, zc, e); + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber negated, + * i.e. multiplied by -1. + */ + P.negated = function () { + var x = new BigNumber(this); + x.s = -x.s || null; + return x; + }; + + + /* + * n + 0 = n + * n + N = N + * n + I = I + * 0 + n = n + * 0 + 0 = 0 + * 0 + N = N + * 0 + I = I + * N + n = N + * N + 0 = N + * N + N = N + * N + I = N + * I + n = I + * I + 0 = I + * I + N = N + * I + I = I + * + * Return a new BigNumber whose value is the value of this BigNumber plus the value of + * BigNumber(y, b). + */ + P.plus = function (y, b) { + var t, + x = this, + a = x.s; + + y = new BigNumber(y, b); + b = y.s; + + // Either NaN? + if (!a || !b) return new BigNumber(NaN); + + // Signs differ? + if (a != b) { + y.s = -b; + return x.minus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if (!xe || !ye) { + + // Return ±Infinity if either ±Infinity. + if (!xc || !yc) return new BigNumber(a / 0); + + // Either zero? + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0); + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. + if (a = xe - ye) { + if (a > 0) { + ye = xe; + t = yc; + } else { + a = -a; + t = xc; + } + + t.reverse(); + for (; a--; t.push(0)); + t.reverse(); + } + + a = xc.length; + b = yc.length; + + // Point xc to the longer array, and b to the shorter length. + if (a - b < 0) { + t = yc; + yc = xc; + xc = t; + b = a; + } + + // Only start adding at yc.length - 1 as the further digits of xc can be ignored. + for (a = 0; b;) { + a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; + xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; + } + + if (a) { + xc = [a].concat(xc); + ++ye; + } + + // No need to check for zero, as +x + +y != 0 && -x + -y != 0 + // ye = MAX_EXP + 1 possible + return normalise(y, xc, ye); + }; + + + /* + * If sd is undefined or null or true or false, return the number of significant digits of + * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. + * If sd is true include integer-part trailing zeros in the count. + * + * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this + * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or + * ROUNDING_MODE if rm is omitted. + * + * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive. + * boolean: whether to count integer-part trailing zeros: true or false. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' + */ + P.precision = P.sd = function (sd, rm) { + var c, n, v, + x = this; + + if (sd != null && sd !== !!sd) { + intCheck(sd, 1, MAX); + if (rm == null) rm = ROUNDING_MODE; + else intCheck(rm, 0, 8); + + return round(new BigNumber(x), sd, rm); + } + + if (!(c = x.c)) return null; + v = c.length - 1; + n = v * LOG_BASE + 1; + + if (v = c[v]) { + + // Subtract the number of trailing zeros of the last element. + for (; v % 10 == 0; v /= 10, n--); + + // Add the number of digits of the first element. + for (v = c[0]; v >= 10; v /= 10, n++); + } + + if (sd && x.e + 1 > n) n = x.e + 1; + + return n; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber shifted by k places + * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. + * + * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}' + */ + P.shiftedBy = function (k) { + intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); + return this.times('1e' + k); + }; + + + /* + * sqrt(-n) = N + * sqrt(N) = N + * sqrt(-I) = N + * sqrt(I) = I + * sqrt(0) = 0 + * sqrt(-0) = -0 + * + * Return a new BigNumber whose value is the square root of the value of this BigNumber, + * rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.squareRoot = P.sqrt = function () { + var m, n, r, rep, t, + x = this, + c = x.c, + s = x.s, + e = x.e, + dp = DECIMAL_PLACES + 4, + half = new BigNumber('0.5'); + + // Negative/NaN/Infinity/zero? + if (s !== 1 || !c || !c[0]) { + return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); + } + + // Initial estimate. + s = Math.sqrt(+valueOf(x)); + + // Math.sqrt underflow/overflow? + // Pass x to Math.sqrt as integer, then adjust the exponent of the result. + if (s == 0 || s == 1 / 0) { + n = coeffToString(c); + if ((n.length + e) % 2 == 0) n += '0'; + s = Math.sqrt(+n); + e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); + + if (s == 1 / 0) { + n = '5e' + e; + } else { + n = s.toExponential(); + n = n.slice(0, n.indexOf('e') + 1) + e; + } + + r = new BigNumber(n); + } else { + r = new BigNumber(s + ''); + } + + // Check for zero. + // r could be zero if MIN_EXP is changed after the this value was created. + // This would cause a division by zero (x/t) and hence Infinity below, which would cause + // coeffToString to throw. + if (r.c[0]) { + e = r.e; + s = e + dp; + if (s < 3) s = 0; + + // Newton-Raphson iteration. + for (; ;) { + t = r; + r = half.times(t.plus(div(x, t, dp, 1))); + + if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { + + // The exponent of r may here be one less than the final result exponent, + // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits + // are indexed correctly. + if (r.e < e) --s; + n = n.slice(s - 3, s + 1); + + // The 4th rounding digit may be in error by -1 so if the 4 rounding digits + // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the + // iteration. + if (n == '9999' || !rep && n == '4999') { + + // On the first iteration only, check to see if rounding up gives the + // exact result as the nines may infinitely repeat. + if (!rep) { + round(t, t.e + DECIMAL_PLACES + 2, 0); + + if (t.times(t).eq(x)) { + r = t; + break; + } + } + + dp += 4; + s += 4; + rep = 1; + } else { + + // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact + // result. If not, then there are further digits and m will be truthy. + if (!+n || !+n.slice(1) && n.charAt(0) == '5') { + + // Truncate to the first rounding digit. + round(r, r.e + DECIMAL_PLACES + 2, 1); + m = !r.times(r).eq(x); + } + + break; + } + } + } + } + + return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); + }; + + + /* + * Return a string representing the value of this BigNumber in exponential notation and + * rounded using ROUNDING_MODE to dp fixed decimal places. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.toExponential = function (dp, rm) { + if (dp != null) { + intCheck(dp, 0, MAX); + dp++; + } + return format(this, dp, rm, 1); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounding + * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', + * but e.g. (-0.00001).toFixed(0) is '-0'. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + */ + P.toFixed = function (dp, rm) { + if (dp != null) { + intCheck(dp, 0, MAX); + dp = dp + this.e + 1; + } + return format(this, dp, rm); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounded + * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties + * of the format or FORMAT object (see BigNumber.set). + * + * The formatting object may contain some or all of the properties shown below. + * + * FORMAT = { + * prefix: '', + * groupSize: 3, + * secondaryGroupSize: 0, + * groupSeparator: ',', + * decimalSeparator: '.', + * fractionGroupSize: 0, + * fractionGroupSeparator: '\xA0', // non-breaking space + * suffix: '' + * }; + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * [format] {object} Formatting options. See FORMAT pbject above. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' + * '[BigNumber Error] Argument not an object: {format}' + */ + P.toFormat = function (dp, rm, format) { + var str, + x = this; + + if (format == null) { + if (dp != null && rm && typeof rm == 'object') { + format = rm; + rm = null; + } else if (dp && typeof dp == 'object') { + format = dp; + dp = rm = null; + } else { + format = FORMAT; + } + } else if (typeof format != 'object') { + throw Error + (bignumberError + 'Argument not an object: ' + format); + } + + str = x.toFixed(dp, rm); + + if (x.c) { + var i, + arr = str.split('.'), + g1 = +format.groupSize, + g2 = +format.secondaryGroupSize, + groupSeparator = format.groupSeparator || '', + intPart = arr[0], + fractionPart = arr[1], + isNeg = x.s < 0, + intDigits = isNeg ? intPart.slice(1) : intPart, + len = intDigits.length; + + if (g2) { + i = g1; + g1 = g2; + g2 = i; + len -= i; + } + + if (g1 > 0 && len > 0) { + i = len % g1 || g1; + intPart = intDigits.substr(0, i); + for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1); + if (g2 > 0) intPart += groupSeparator + intDigits.slice(i); + if (isNeg) intPart = '-' + intPart; + } + + str = fractionPart + ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) + ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), + '$&' + (format.fractionGroupSeparator || '')) + : fractionPart) + : intPart; + } + + return (format.prefix || '') + str + (format.suffix || ''); + }; + + + /* + * Return an array of two BigNumbers representing the value of this BigNumber as a simple + * fraction with an integer numerator and an integer denominator. + * The denominator will be a positive non-zero value less than or equal to the specified + * maximum denominator. If a maximum denominator is not specified, the denominator will be + * the lowest value necessary to represent the number exactly. + * + * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator. + * + * '[BigNumber Error] Argument {not an integer|out of range} : {md}' + */ + P.toFraction = function (md) { + var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, + x = this, + xc = x.c; + + if (md != null) { + n = new BigNumber(md); + + // Throw if md is less than one or is not an integer, unless it is Infinity. + if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { + throw Error + (bignumberError + 'Argument ' + + (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n)); + } + } + + if (!xc) return new BigNumber(x); + + d = new BigNumber(ONE); + n1 = d0 = new BigNumber(ONE); + d1 = n0 = new BigNumber(ONE); + s = coeffToString(xc); + + // Determine initial denominator. + // d is a power of 10 and the minimum max denominator that specifies the value exactly. + e = d.e = s.length - x.e - 1; + d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; + md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n; + + exp = MAX_EXP; + MAX_EXP = 1 / 0; + n = new BigNumber(s); + + // n0 = d1 = 0 + n0.c[0] = 0; + + for (; ;) { + q = div(n, d, 0, 1); + d2 = d0.plus(q.times(d1)); + if (d2.comparedTo(md) == 1) break; + d0 = d1; + d1 = d2; + n1 = n0.plus(q.times(d2 = n1)); + n0 = d2; + d = n.minus(q.times(d2 = d)); + n = d2; + } + + d2 = div(md.minus(d0), d1, 0, 1); + n0 = n0.plus(d2.times(n1)); + d0 = d0.plus(d2.times(d1)); + n0.s = n1.s = x.s; + e = e * 2; + + // Determine which fraction is closer to x, n0/d0 or n1/d1 + r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo( + div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; + + MAX_EXP = exp; + + return r; + }; + + + /* + * Return the value of this BigNumber converted to a number primitive. + */ + P.toNumber = function () { + return +valueOf(this); + }; + + + /* + * Return a string representing the value of this BigNumber rounded to sd significant digits + * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits + * necessary to represent the integer part of the value in fixed-point notation, then use + * exponential notation. + * + * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' + */ + P.toPrecision = function (sd, rm) { + if (sd != null) intCheck(sd, 1, MAX); + return format(this, sd, rm, 2); + }; + + + /* + * Return a string representing the value of this BigNumber in base b, or base 10 if b is + * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and + * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent + * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than + * TO_EXP_NEG, return exponential notation. + * + * [b] {number} Integer, 2 to ALPHABET.length inclusive. + * + * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' + */ + P.toString = function (b) { + var str, + n = this, + s = n.s, + e = n.e; + + // Infinity or NaN? + if (e === null) { + if (s) { + str = 'Infinity'; + if (s < 0) str = '-' + str; + } else { + str = 'NaN'; + } + } else { + if (b == null) { + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential(coeffToString(n.c), e) + : toFixedPoint(coeffToString(n.c), e, '0'); + } else if (b === 10 && alphabetHasNormalDecimalDigits) { + n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); + str = toFixedPoint(coeffToString(n.c), n.e, '0'); + } else { + intCheck(b, 2, ALPHABET.length, 'Base'); + str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true); + } + + if (s < 0 && n.c[0]) str = '-' + str; + } + + return str; + }; + + + /* + * Return as toString, but do not accept a base argument, and include the minus sign for + * negative zero. + */ + P.valueOf = P.toJSON = function () { + return valueOf(this); + }; + + + P._isBigNumber = true; + + P[Symbol.toStringTag] = 'BigNumber'; + + // Node.js v10.12.0+ + P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf; + + if (configObject != null) BigNumber.set(configObject); + + return BigNumber; +} + + +// PRIVATE HELPER FUNCTIONS + +// These functions don't need access to variables, +// e.g. DECIMAL_PLACES, in the scope of the `clone` function above. + + +function bitFloor(n) { + var i = n | 0; + return n > 0 || n === i ? i : i - 1; +} + + +// Return a coefficient array as a string of base 10 digits. +function coeffToString(a) { + var s, z, + i = 1, + j = a.length, + r = a[0] + ''; + + for (; i < j;) { + s = a[i++] + ''; + z = LOG_BASE - s.length; + for (; z--; s = '0' + s); + r += s; + } + + // Determine trailing zeros. + for (j = r.length; r.charCodeAt(--j) === 48;); + + return r.slice(0, j + 1 || 1); +} + + +// Compare the value of BigNumbers x and y. +function compare(x, y) { + var a, b, + xc = x.c, + yc = y.c, + i = x.s, + j = y.s, + k = x.e, + l = y.e; + + // Either NaN? + if (!i || !j) return null; + + a = xc && !xc[0]; + b = yc && !yc[0]; + + // Either zero? + if (a || b) return a ? b ? 0 : -j : i; + + // Signs differ? + if (i != j) return i; + + a = i < 0; + b = k == l; + + // Either Infinity? + if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; + + // Compare exponents. + if (!b) return k > l ^ a ? 1 : -1; + + j = (k = xc.length) < (l = yc.length) ? k : l; + + // Compare digit by digit. + for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; + + // Compare lengths. + return k == l ? 0 : k > l ^ a ? 1 : -1; +} + + +/* + * Check that n is a primitive number, an integer, and in range, otherwise throw. + */ +function intCheck(n, min, max, name) { + if (n < min || n > max || n !== mathfloor(n)) { + throw Error + (bignumberError + (name || 'Argument') + (typeof n == 'number' + ? n < min || n > max ? ' out of range: ' : ' not an integer: ' + : ' not a primitive number: ') + String(n)); + } +} + + +// Assumes finite n. +function isOdd(n) { + var k = n.c.length - 1; + return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; +} + + +function toExponential(str, e) { + return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + + (e < 0 ? 'e' : 'e+') + e; +} + + +function toFixedPoint(str, e, z) { + var len, zs; + + // Negative exponent? + if (e < 0) { + + // Prepend zeros. + for (zs = z + '.'; ++e; zs += z); + str = zs + str; + + // Positive exponent + } else { + len = str.length; + + // Append zeros. + if (++e > len) { + for (zs = z, e -= len; --e; zs += z); + str += zs; + } else if (e < len) { + str = str.slice(0, e) + '.' + str.slice(e); + } + } + + return str; +} + + +// EXPORT + + +export var BigNumber = clone(); + +export default BigNumber; diff --git a/node_modules/bignumber.js/doc/API.html b/node_modules/bignumber.js/doc/API.html new file mode 100644 index 00000000..bb2b7dd2 --- /dev/null +++ b/node_modules/bignumber.js/doc/API.html @@ -0,0 +1,2249 @@ + + + + + + +bignumber.js API + + + + + + +
+ +

bignumber.js

+ +

A JavaScript library for arbitrary-precision arithmetic.

+

Hosted on GitHub.

+ +

API

+ +

+ See the README on GitHub for a + quick-start introduction. +

+

+ In all examples below, var and semicolons are not shown, and if a commented-out + value is in quotes it means toString has been called on the preceding expression. +

+ + +

CONSTRUCTOR

+ + +
+ BigNumberBigNumber(n [, base]) ⇒ BigNumber +
+

+ n: number|string|BigNumber
+ base: number: integer, 2 to 36 inclusive. (See + ALPHABET to extend this range). +

+

+ Returns a new instance of a BigNumber object with value n, where n + is a numeric value in the specified base, or base 10 if + base is omitted or is null or undefined. +

+

+ Note that the BigNnumber constructor accepts an n of type number purely + as a convenience so that string quotes don't have to be typed when entering literal values, + and that it is the toString value of n that is used rather than its + underlying binary floating point value converted to decimal. +

+
+x = new BigNumber(123.4567)                // '123.4567'
+// 'new' is optional
+y = BigNumber(x)                           // '123.4567'
+

+ If n is a base 10 value it can be in normal or exponential notation. + Values in other bases must be in normal notation. Values in any base can have fraction digits, + i.e. digits after the decimal point. +

+
+new BigNumber(43210)                       // '43210'
+new BigNumber('4.321e+4')                  // '43210'
+new BigNumber('-735.0918e-430')            // '-7.350918e-428'
+new BigNumber('123412421.234324', 5)       // '607236.557696'
+

+ Signed 0, signed Infinity and NaN are supported. +

+
+new BigNumber('-Infinity')                 // '-Infinity'
+new BigNumber(NaN)                         // 'NaN'
+new BigNumber(-0)                          // '0'
+new BigNumber('.5')                        // '0.5'
+new BigNumber('+2')                        // '2'
+

+ String values in hexadecimal literal form, e.g. '0xff' or '0xFF' + (but not '0xfF'), are valid, as are string values with the octal and binary + prefixs '0o' and '0b'. String values in octal literal form without + the prefix will be interpreted as decimals, e.g. '011' is interpreted as 11, not 9. +

+
+new BigNumber(-10110100.1, 2)              // '-180.5'
+new BigNumber('-0b10110100.1')             // '-180.5'
+new BigNumber('ff.8', 16)                  // '255.5'
+new BigNumber('0xff.8')                    // '255.5'
+

+ If a base is specified, n is rounded according to the current + DECIMAL_PLACES and + ROUNDING_MODE settings. This includes base + 10 so don't include a base parameter for decimal values unless + this behaviour is wanted. +

+
BigNumber.config({ DECIMAL_PLACES: 5 })
+new BigNumber(1.23456789)                  // '1.23456789'
+new BigNumber(1.23456789, 10)              // '1.23457'
+

An error is thrown if base is invalid. See Errors.

+

+ There is no limit to the number of digits of a value of type string (other than + that of JavaScript's maximum array size). See RANGE to set + the maximum and minimum possible exponent value of a BigNumber. +

+
+new BigNumber('5032485723458348569331745.33434346346912144534543')
+new BigNumber('4.321e10000000')
+

BigNumber NaN is returned if n is invalid + (unless BigNumber.DEBUG is true, see below).

+
+new BigNumber('.1*')                       // 'NaN'
+new BigNumber('blurgh')                    // 'NaN'
+new BigNumber(9, 2)                        // 'NaN'
+

+ To aid in debugging, if BigNumber.DEBUG is true then an error will + be thrown on an invalid n. An error will also be thrown if n is of + type number and has more than 15 significant digits, as calling + toString or valueOf on + these numbers may not result in the intended value. +

+
+console.log(823456789123456.3)            //  823456789123456.2
+new BigNumber(823456789123456.3)          // '823456789123456.2'
+BigNumber.DEBUG = true
+// '[BigNumber Error] Number primitive has more than 15 significant digits'
+new BigNumber(823456789123456.3)
+// '[BigNumber Error] Not a base 2 number'
+new BigNumber(9, 2)
+

+ A BigNumber can also be created from an object literal. + Use isBigNumber to check that it is well-formed. +

+
new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ], _isBigNumber: true })    // '777.123'
+ + + + +

Methods

+

The static methods of a BigNumber constructor.

+ + + + +
clone + .clone([object]) ⇒ BigNumber constructor +
+

object: object

+

+ Returns a new independent BigNumber constructor with configuration as described by + object (see config), or with the default + configuration if object is null or undefined. +

+

+ Throws if object is not an object. See Errors. +

+
BigNumber.config({ DECIMAL_PLACES: 5 })
+BN = BigNumber.clone({ DECIMAL_PLACES: 9 })
+
+x = new BigNumber(1)
+y = new BN(1)
+
+x.div(3)                        // 0.33333
+y.div(3)                        // 0.333333333
+
+// BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) is equivalent to:
+BN = BigNumber.clone()
+BN.config({ DECIMAL_PLACES: 9 })
+ + + +
configset([object]) ⇒ object
+

+ object: object: an object that contains some or all of the following + properties. +

+

Configures the settings for this particular BigNumber constructor.

+ +
+
DECIMAL_PLACES
+
+ number: integer, 0 to 1e+9 inclusive
+ Default value: 20 +
+
+ The maximum number of decimal places of the results of operations involving + division, i.e. division, square root and base conversion operations, and power operations + with negative exponents.
+
+
+
BigNumber.config({ DECIMAL_PLACES: 5 })
+BigNumber.set({ DECIMAL_PLACES: 5 })    // equivalent
+
+ + + +
ROUNDING_MODE
+
+ number: integer, 0 to 8 inclusive
+ Default value: 4 (ROUND_HALF_UP) +
+
+ The rounding mode used in the above operations and the default rounding mode of + decimalPlaces, + precision, + toExponential, + toFixed, + toFormat and + toPrecision. +
+
The modes are available as enumerated properties of the BigNumber constructor.
+
+
BigNumber.config({ ROUNDING_MODE: 0 })
+BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_UP })    // equivalent
+
+ + + +
EXPONENTIAL_AT
+
+ number: integer, magnitude 0 to 1e+9 inclusive, or +
+ number[]: [ integer -1e+9 to 0 inclusive, integer + 0 to 1e+9 inclusive ]
+ Default value: [-7, 20] +
+
+ The exponent value(s) at which toString returns exponential notation. +
+
+ If a single number is assigned, the value is the exponent magnitude.
+ If an array of two numbers is assigned then the first number is the negative exponent + value at and beneath which exponential notation is used, and the second number is the + positive exponent value at and above which the same. +
+
+ For example, to emulate JavaScript numbers in terms of the exponent values at which they + begin to use exponential notation, use [-7, 20]. +
+
+
BigNumber.config({ EXPONENTIAL_AT: 2 })
+new BigNumber(12.3)         // '12.3'        e is only 1
+new BigNumber(123)          // '1.23e+2'
+new BigNumber(0.123)        // '0.123'       e is only -1
+new BigNumber(0.0123)       // '1.23e-2'
+
+BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
+new BigNumber(123456789)    // '123456789'   e is only 8
+new BigNumber(0.000000123)  // '1.23e-7'
+
+// Almost never return exponential notation:
+BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
+
+// Always return exponential notation:
+BigNumber.config({ EXPONENTIAL_AT: 0 })
+
+
+ Regardless of the value of EXPONENTIAL_AT, the toFixed method + will always return a value in normal notation and the toExponential method + will always return a value in exponential form. +
+
+ Calling toString with a base argument, e.g. toString(10), will + also always return normal notation. +
+ + + +
RANGE
+
+ number: integer, magnitude 1 to 1e+9 inclusive, or +
+ number[]: [ integer -1e+9 to -1 inclusive, integer + 1 to 1e+9 inclusive ]
+ Default value: [-1e+9, 1e+9] +
+
+ The exponent value(s) beyond which overflow to Infinity and underflow to + zero occurs. +
+
+ If a single number is assigned, it is the maximum exponent magnitude: values wth a + positive exponent of greater magnitude become Infinity and those with a + negative exponent of greater magnitude become zero. +
+ If an array of two numbers is assigned then the first number is the negative exponent + limit and the second number is the positive exponent limit. +
+
+ For example, to emulate JavaScript numbers in terms of the exponent values at which they + become zero and Infinity, use [-324, 308]. +
+
+
BigNumber.config({ RANGE: 500 })
+BigNumber.config().RANGE     // [ -500, 500 ]
+new BigNumber('9.999e499')   // '9.999e+499'
+new BigNumber('1e500')       // 'Infinity'
+new BigNumber('1e-499')      // '1e-499'
+new BigNumber('1e-500')      // '0'
+
+BigNumber.config({ RANGE: [-3, 4] })
+new BigNumber(99999)         // '99999'      e is only 4
+new BigNumber(100000)        // 'Infinity'   e is 5
+new BigNumber(0.001)         // '0.01'       e is only -3
+new BigNumber(0.0001)        // '0'          e is -4
+
+
+ The largest possible magnitude of a finite BigNumber is + 9.999...e+1000000000.
+ The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. +
+ + + +
CRYPTO
+
+ boolean: true or false.
+ Default value: false +
+
+ The value that determines whether cryptographically-secure pseudo-random number + generation is used. +
+
+ If CRYPTO is set to true then the + random method will generate random digits using + crypto.getRandomValues in browsers that support it, or + crypto.randomBytes if using Node.js. +
+
+ If neither function is supported by the host environment then attempting to set + CRYPTO to true will fail and an exception will be thrown. +
+
+ If CRYPTO is false then the source of randomness used will be + Math.random (which is assumed to generate at least 30 bits of + randomness). +
+
See random.
+
+
+// Node.js
+const crypto = require('crypto');   // CommonJS
+import * as crypto from 'crypto';   // ES module
+
+global.crypto = crypto;
+
+BigNumber.config({ CRYPTO: true })
+BigNumber.config().CRYPTO       // true
+BigNumber.random()              // 0.54340758610486147524
+
+ + + +
MODULO_MODE
+
+ number: integer, 0 to 9 inclusive
+ Default value: 1 (ROUND_DOWN) +
+
The modulo mode used when calculating the modulus: a mod n.
+
+ The quotient, q = a / n, is calculated according to the + ROUNDING_MODE that corresponds to the chosen + MODULO_MODE. +
+
The remainder, r, is calculated as: r = a - n * q.
+
+ The modes that are most commonly used for the modulus/remainder operation are shown in + the following table. Although the other rounding modes can be used, they may not give + useful results. +
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyValueDescription
ROUND_UP0 + The remainder is positive if the dividend is negative, otherwise it is negative. +
ROUND_DOWN1 + The remainder has the same sign as the dividend.
+ This uses 'truncating division' and matches the behaviour of JavaScript's + remainder operator %. +
ROUND_FLOOR3 + The remainder has the same sign as the divisor.
+ This matches Python's % operator. +
ROUND_HALF_EVEN6The IEEE 754 remainder function.
EUCLID9 + The remainder is always positive. Euclidian division:
+ q = sign(n) * floor(a / abs(n)) +
+
+
+ The rounding/modulo modes are available as enumerated properties of the BigNumber + constructor. +
+
See modulo.
+
+
BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
+BigNumber.config({ MODULO_MODE: 9 })          // equivalent
+
+ + + +
POW_PRECISION
+
+ number: integer, 0 to 1e+9 inclusive.
+ Default value: 0 +
+
+ The maximum precision, i.e. number of significant digits, of the result of the power + operation (unless a modulus is specified). +
+
If set to 0, the number of significant digits will not be limited.
+
See exponentiatedBy.
+
BigNumber.config({ POW_PRECISION: 100 })
+ + + +
FORMAT
+
object
+
+ The FORMAT object configures the format of the string returned by the + toFormat method. +
+
+ The example below shows the properties of the FORMAT object that are + recognised, and their default values. +
+
+ Unlike the other configuration properties, the values of the properties of the + FORMAT object will not be checked for validity. The existing + FORMAT object will simply be replaced by the object that is passed in. + The object can include any number of the properties shown below. +
+
See toFormat for examples of usage.
+
+
+BigNumber.config({
+  FORMAT: {
+    // string to prepend
+    prefix: '',
+    // decimal separator
+    decimalSeparator: '.',
+    // grouping separator of the integer part
+    groupSeparator: ',',
+    // primary grouping size of the integer part
+    groupSize: 3,
+    // secondary grouping size of the integer part
+    secondaryGroupSize: 0,
+    // grouping separator of the fraction part
+    fractionGroupSeparator: ' ',
+    // grouping size of the fraction part
+    fractionGroupSize: 0,
+    // string to append
+    suffix: ''
+  }
+});
+
+ + + +
ALPHABET
+
+ string
+ Default value: '0123456789abcdefghijklmnopqrstuvwxyz' +
+
+ The alphabet used for base conversion. The length of the alphabet corresponds to the + maximum value of the base argument that can be passed to the + BigNumber constructor or + toString. +
+
+ There is no maximum length for the alphabet, but it must be at least 2 characters long, and + it must not contain whitespace or a repeated character, or the sign indicators + '+' and '-', or the decimal separator '.'. +
+
+
// duodecimal (base 12)
+BigNumber.config({ ALPHABET: '0123456789TE' })
+x = new BigNumber('T', 12)
+x.toString()                // '10'
+x.toString(12)              // 'T'
+
+ + + +
+

+

Returns an object with the above properties and their current values.

+

+ Throws if object is not an object, or if an invalid value is assigned to + one or more of the above properties. See Errors. +

+
+BigNumber.config({
+  DECIMAL_PLACES: 40,
+  ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
+  EXPONENTIAL_AT: [-10, 20],
+  RANGE: [-500, 500],
+  CRYPTO: true,
+  MODULO_MODE: BigNumber.ROUND_FLOOR,
+  POW_PRECISION: 80,
+  FORMAT: {
+    groupSize: 3,
+    groupSeparator: ' ',
+    decimalSeparator: ','
+  },
+  ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
+});
+
+obj = BigNumber.config();
+obj.DECIMAL_PLACES        // 40
+obj.RANGE                 // [-500, 500]
+ + + +
+ isBigNumber.isBigNumber(value) ⇒ boolean +
+

value: any

+

+ Returns true if value is a BigNumber instance, otherwise returns + false. +

+
x = 42
+y = new BigNumber(x)
+
+BigNumber.isBigNumber(x)             // false
+y instanceof BigNumber               // true
+BigNumber.isBigNumber(y)             // true
+
+BN = BigNumber.clone();
+z = new BN(x)
+z instanceof BigNumber               // false
+BigNumber.isBigNumber(z)             // true
+

+ If value is a BigNumber instance and BigNumber.DEBUG is true, + then this method will also check if value is well-formed, and throw if it is not. + See Errors. +

+

+ The check can be useful if creating a BigNumber from an object literal. + See BigNumber. +

+
+x = new BigNumber(10)
+
+// Change x.c to an illegitimate value.
+x.c = NaN
+
+BigNumber.DEBUG = false
+
+// No error.
+BigNumber.isBigNumber(x)    // true
+
+BigNumber.DEBUG = true
+
+// Error.
+BigNumber.isBigNumber(x)    // '[BigNumber Error] Invalid BigNumber'
+ + + +
maximum.max(n...) ⇒ BigNumber
+

+ n: number|string|BigNumber
+ See BigNumber for further parameter details. +

+

+ Returns a BigNumber whose value is the maximum of the arguments. +

+

The return value is always exact and unrounded.

+
x = new BigNumber('3257869345.0378653')
+BigNumber.maximum(4e9, x, '123456789.9')      // '4000000000'
+
+arr = [12, '13', new BigNumber(14)]
+BigNumber.max.apply(null, arr)                // '14'
+ + + +
minimum.min(n...) ⇒ BigNumber
+

+ n: number|string|BigNumber
+ See BigNumber for further parameter details. +

+

+ Returns a BigNumber whose value is the minimum of the arguments. +

+

The return value is always exact and unrounded.

+
x = new BigNumber('3257869345.0378653')
+BigNumber.minimum(4e9, x, '123456789.9')      // '123456789.9'
+
+arr = [2, new BigNumber(-14), '-15.9999', -12]
+BigNumber.min.apply(null, arr)                // '-15.9999'
+ + + +
+ random.random([dp]) ⇒ BigNumber +
+

dp: number: integer, 0 to 1e+9 inclusive

+

+ Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and + less than 1. +

+

+ The return value will have dp decimal places (or less if trailing zeros are + produced).
+ If dp is omitted then the number of decimal places will default to the current + DECIMAL_PLACES setting. +

+

+ Depending on the value of this BigNumber constructor's + CRYPTO setting and the support for the + crypto object in the host environment, the random digits of the return value are + generated by either Math.random (fastest), crypto.getRandomValues + (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). +

+

+ To be able to set CRYPTO to true when using + Node.js, the crypto object must be available globally: +

+
// Node.js
+const crypto = require('crypto');   // CommonJS
+import * as crypto from 'crypto';   // ES module
+global.crypto = crypto;
+

+ If CRYPTO is true, i.e. one of the + crypto methods is to be used, the value of a returned BigNumber should be + cryptographically-secure and statistically indistinguishable from a random value. +

+

+ Throws if dp is invalid. See Errors. +

+
BigNumber.config({ DECIMAL_PLACES: 10 })
+BigNumber.random()              // '0.4117936847'
+BigNumber.random(20)            // '0.78193327636914089009'
+ + + +
sum.sum(n...) ⇒ BigNumber
+

+ n: number|string|BigNumber
+ See BigNumber for further parameter details. +

+

Returns a BigNumber whose value is the sum of the arguments.

+

The return value is always exact and unrounded.

+
x = new BigNumber('3257869345.0378653')
+BigNumber.sum(4e9, x, '123456789.9')      // '7381326134.9378653'
+
+arr = [2, new BigNumber(14), '15.9999', 12]
+BigNumber.sum.apply(null, arr)            // '43.9999'
+ + + +

Properties

+

+ The library's enumerated rounding modes are stored as properties of the constructor.
+ (They are not referenced internally by the library itself.) +

+

+ Rounding modes 0 to 6 (inclusive) are the same as those of Java's + BigDecimal class. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyValueDescription
ROUND_UP0Rounds away from zero
ROUND_DOWN1Rounds towards zero
ROUND_CEIL2Rounds towards Infinity
ROUND_FLOOR3Rounds towards -Infinity
ROUND_HALF_UP4 + Rounds towards nearest neighbour.
+ If equidistant, rounds away from zero +
ROUND_HALF_DOWN5 + Rounds towards nearest neighbour.
+ If equidistant, rounds towards zero +
ROUND_HALF_EVEN6 + Rounds towards nearest neighbour.
+ If equidistant, rounds towards even neighbour +
ROUND_HALF_CEIL7 + Rounds towards nearest neighbour.
+ If equidistant, rounds towards Infinity +
ROUND_HALF_FLOOR8 + Rounds towards nearest neighbour.
+ If equidistant, rounds towards -Infinity +
+
+BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
+BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
+ +
DEBUG
+

undefined|false|true

+

+ If BigNumber.DEBUG is set true then an error will be thrown + if this BigNumber constructor receives an invalid value, such as + a value of type number with more than 15 significant digits. + See BigNumber. +

+

+ An error will also be thrown if the isBigNumber + method receives a BigNumber that is not well-formed. + See isBigNumber. +

+
BigNumber.DEBUG = true
+ + +

INSTANCE

+ + +

Methods

+

The methods inherited by a BigNumber instance from its constructor's prototype object.

+

A BigNumber is immutable in the sense that it is not changed by its methods.

+

+ The treatment of ±0, ±Infinity and NaN is + consistent with how JavaScript treats these values. +

+

Many method names have a shorter alias.

+ + + +
absoluteValue.abs() ⇒ BigNumber
+

+ Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of + this BigNumber. +

+

The return value is always exact and unrounded.

+
+x = new BigNumber(-0.8)
+y = x.absoluteValue()           // '0.8'
+z = y.abs()                     // '0.8'
+ + + +
+ comparedTo.comparedTo(n [, base]) ⇒ number +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+ + + + + + + + + + + + + + + + + + +
Returns 
1If the value of this BigNumber is greater than the value of n
-1If the value of this BigNumber is less than the value of n
0If this BigNumber and n have the same value
nullIf the value of either this BigNumber or n is NaN
+
+x = new BigNumber(Infinity)
+y = new BigNumber(5)
+x.comparedTo(y)                 // 1
+x.comparedTo(x.minus(1))        // 0
+y.comparedTo(NaN)               // null
+y.comparedTo('110', 2)          // -1
+ + + +
+ decimalPlaces.dp([dp [, rm]]) ⇒ BigNumber|number +
+

+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive +

+

+ If dp is a number, returns a BigNumber whose value is the value of this BigNumber + rounded by rounding mode rm to a maximum of dp decimal places. +

+

+ If dp is omitted, or is null or undefined, the return + value is the number of decimal places of the value of this BigNumber, or null if + the value of this BigNumber is ±Infinity or NaN. +

+

+ If rm is omitted, or is null or undefined, + ROUNDING_MODE is used. +

+

+ Throws if dp or rm is invalid. See Errors. +

+
+x = new BigNumber(1234.56)
+x.decimalPlaces(1)                     // '1234.6'
+x.dp()                                 // 2
+x.decimalPlaces(2)                     // '1234.56'
+x.dp(10)                               // '1234.56'
+x.decimalPlaces(0, 1)                  // '1234'
+x.dp(0, 6)                             // '1235'
+x.decimalPlaces(1, 1)                  // '1234.5'
+x.dp(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
+x                                      // '1234.56'
+y = new BigNumber('9.9e-101')
+y.dp()                                 // 102
+ + + +
dividedBy.div(n [, base]) ⇒ BigNumber +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns a BigNumber whose value is the value of this BigNumber divided by + n, rounded according to the current + DECIMAL_PLACES and + ROUNDING_MODE settings. +

+
+x = new BigNumber(355)
+y = new BigNumber(113)
+x.dividedBy(y)                  // '3.14159292035398230088'
+x.div(5)                        // '71'
+x.div(47, 16)                   // '5'
+ + + +
+ dividedToIntegerBy.idiv(n [, base]) ⇒ + BigNumber +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by + n. +

+
+x = new BigNumber(5)
+y = new BigNumber(3)
+x.dividedToIntegerBy(y)         // '1'
+x.idiv(0.7)                     // '7'
+x.idiv('0.f', 16)               // '5'
+ + + +
+ exponentiatedBy.pow(n [, m]) ⇒ BigNumber +
+

+ n: number|string|BigNumber: integer
+ m: number|string|BigNumber +

+

+ Returns a BigNumber whose value is the value of this BigNumber exponentiated by + n, i.e. raised to the power n, and optionally modulo a modulus + m. +

+

+ Throws if n is not an integer. See Errors. +

+

+ If n is negative the result is rounded according to the current + DECIMAL_PLACES and + ROUNDING_MODE settings. +

+

+ As the number of digits of the result of the power operation can grow so large so quickly, + e.g. 123.45610000 has over 50000 digits, the number of significant + digits calculated is limited to the value of the + POW_PRECISION setting (unless a modulus + m is specified). +

+

+ By default POW_PRECISION is set to 0. + This means that an unlimited number of significant digits will be calculated, and that the + method's performance will decrease dramatically for larger exponents. +

+

+ If m is specified and the value of m, n and this + BigNumber are integers, and n is positive, then a fast modular exponentiation + algorithm is used, otherwise the operation will be performed as + x.exponentiatedBy(n).modulo(m) with a + POW_PRECISION of 0. +

+
+Math.pow(0.7, 2)                // 0.48999999999999994
+x = new BigNumber(0.7)
+x.exponentiatedBy(2)            // '0.49'
+BigNumber(3).pow(-2)            // '0.11111111111111111111'
+ + + +
+ integerValue.integerValue([rm]) ⇒ BigNumber +
+

+ rm: number: integer, 0 to 8 inclusive +

+

+ Returns a BigNumber whose value is the value of this BigNumber rounded to an integer using + rounding mode rm. +

+

+ If rm is omitted, or is null or undefined, + ROUNDING_MODE is used. +

+

+ Throws if rm is invalid. See Errors. +

+
+x = new BigNumber(123.456)
+x.integerValue()                        // '123'
+x.integerValue(BigNumber.ROUND_CEIL)    // '124'
+y = new BigNumber(-12.7)
+y.integerValue()                        // '-13'
+y.integerValue(BigNumber.ROUND_DOWN)    // '-12'
+

+ The following is an example of how to add a prototype method that emulates JavaScript's + Math.round function. Math.ceil, Math.floor and + Math.trunc can be emulated in the same way with + BigNumber.ROUND_CEIL, BigNumber.ROUND_FLOOR and + BigNumber.ROUND_DOWN respectively. +

+
+BigNumber.prototype.round = function () {
+  return this.integerValue(BigNumber.ROUND_HALF_CEIL);
+};
+x.round()                               // '123'
+ + + +
isEqualTo.eq(n [, base]) ⇒ boolean
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns true if the value of this BigNumber is equal to the value of + n, otherwise returns false.
+ As with JavaScript, NaN does not equal NaN. +

+

Note: This method uses the comparedTo method internally.

+
+0 === 1e-324                    // true
+x = new BigNumber(0)
+x.isEqualTo('1e-324')           // false
+BigNumber(-0).eq(x)             // true  ( -0 === 0 )
+BigNumber(255).eq('ff', 16)     // true
+
+y = new BigNumber(NaN)
+y.isEqualTo(NaN)                // false
+ + + +
isFinite.isFinite() ⇒ boolean
+

+ Returns true if the value of this BigNumber is a finite number, otherwise + returns false. +

+

+ The only possible non-finite values of a BigNumber are NaN, Infinity + and -Infinity. +

+
+x = new BigNumber(1)
+x.isFinite()                    // true
+y = new BigNumber(Infinity)
+y.isFinite()                    // false
+

+ Note: The native method isFinite() can be used if + n <= Number.MAX_VALUE. +

+ + + +
isGreaterThan.gt(n [, base]) ⇒ boolean
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns true if the value of this BigNumber is greater than the value of + n, otherwise returns false. +

+

Note: This method uses the comparedTo method internally.

+
+0.1 > (0.3 - 0.2)                             // true
+x = new BigNumber(0.1)
+x.isGreaterThan(BigNumber(0.3).minus(0.2))    // false
+BigNumber(0).gt(x)                            // false
+BigNumber(11, 3).gt(11.1, 2)                  // true
+ + + +
+ isGreaterThanOrEqualTo.gte(n [, base]) ⇒ boolean +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns true if the value of this BigNumber is greater than or equal to the value + of n, otherwise returns false. +

+

Note: This method uses the comparedTo method internally.

+
+(0.3 - 0.2) >= 0.1                     // false
+x = new BigNumber(0.3).minus(0.2)
+x.isGreaterThanOrEqualTo(0.1)          // true
+BigNumber(1).gte(x)                    // true
+BigNumber(10, 18).gte('i', 36)         // true
+ + + +
isInteger.isInteger() ⇒ boolean
+

+ Returns true if the value of this BigNumber is an integer, otherwise returns + false. +

+
+x = new BigNumber(1)
+x.isInteger()                   // true
+y = new BigNumber(123.456)
+y.isInteger()                   // false
+ + + +
isLessThan.lt(n [, base]) ⇒ boolean
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns true if the value of this BigNumber is less than the value of + n, otherwise returns false. +

+

Note: This method uses the comparedTo method internally.

+
+(0.3 - 0.2) < 0.1                       // true
+x = new BigNumber(0.3).minus(0.2)
+x.isLessThan(0.1)                       // false
+BigNumber(0).lt(x)                      // true
+BigNumber(11.1, 2).lt(11, 3)            // true
+ + + +
+ isLessThanOrEqualTo.lte(n [, base]) ⇒ boolean +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns true if the value of this BigNumber is less than or equal to the value of + n, otherwise returns false. +

+

Note: This method uses the comparedTo method internally.

+
+0.1 <= (0.3 - 0.2)                                // false
+x = new BigNumber(0.1)
+x.isLessThanOrEqualTo(BigNumber(0.3).minus(0.2))  // true
+BigNumber(-1).lte(x)                              // true
+BigNumber(10, 18).lte('i', 36)                    // true
+ + + +
isNaN.isNaN() ⇒ boolean
+

+ Returns true if the value of this BigNumber is NaN, otherwise + returns false. +

+
+x = new BigNumber(NaN)
+x.isNaN()                       // true
+y = new BigNumber('Infinity')
+y.isNaN()                       // false
+

Note: The native method isNaN() can also be used.

+ + + +
isNegative.isNegative() ⇒ boolean
+

+ Returns true if the sign of this BigNumber is negative, otherwise returns + false. +

+
+x = new BigNumber(-0)
+x.isNegative()                  // true
+y = new BigNumber(2)
+y.isNegative()                  // false
+

Note: n < 0 can be used if n <= -Number.MIN_VALUE.

+ + + +
isPositive.isPositive() ⇒ boolean
+

+ Returns true if the sign of this BigNumber is positive, otherwise returns + false. +

+
+x = new BigNumber(-0)
+x.isPositive()                  // false
+y = new BigNumber(2)
+y.isPositive()                  // true
+ + + +
isZero.isZero() ⇒ boolean
+

+ Returns true if the value of this BigNumber is zero or minus zero, otherwise + returns false. +

+
+x = new BigNumber(-0)
+x.isZero() && x.isNegative()         // true
+y = new BigNumber(Infinity)
+y.isZero()                      // false
+

Note: n == 0 can be used if n >= Number.MIN_VALUE.

+ + + +
+ minus.minus(n [, base]) ⇒ BigNumber +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

Returns a BigNumber whose value is the value of this BigNumber minus n.

+

The return value is always exact and unrounded.

+
+0.3 - 0.1                       // 0.19999999999999998
+x = new BigNumber(0.3)
+x.minus(0.1)                    // '0.2'
+x.minus(0.6, 20)                // '0'
+ + + +
modulo.mod(n [, base]) ⇒ BigNumber
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. + the integer remainder of dividing this BigNumber by n. +

+

+ The value returned, and in particular its sign, is dependent on the value of the + MODULO_MODE setting of this BigNumber constructor. + If it is 1 (default value), the result will have the same sign as this BigNumber, + and it will match that of Javascript's % operator (within the limits of double + precision) and BigDecimal's remainder method. +

+

The return value is always exact and unrounded.

+

+ See MODULO_MODE for a description of the other + modulo modes. +

+
+1 % 0.9                         // 0.09999999999999998
+x = new BigNumber(1)
+x.modulo(0.9)                   // '0.1'
+y = new BigNumber(33)
+y.mod('a', 33)                  // '3'
+ + + +
+ multipliedBy.times(n [, base]) ⇒ BigNumber +
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

+ Returns a BigNumber whose value is the value of this BigNumber multiplied by n. +

+

The return value is always exact and unrounded.

+
+0.6 * 3                         // 1.7999999999999998
+x = new BigNumber(0.6)
+y = x.multipliedBy(3)           // '1.8'
+BigNumber('7e+500').times(y)    // '1.26e+501'
+x.multipliedBy('-a', 16)        // '-6'
+ + + +
negated.negated() ⇒ BigNumber
+

+ Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by + -1. +

+
+x = new BigNumber(1.8)
+x.negated()                     // '-1.8'
+y = new BigNumber(-1.3)
+y.negated()                     // '1.3'
+ + + +
plus.plus(n [, base]) ⇒ BigNumber
+

+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details. +

+

Returns a BigNumber whose value is the value of this BigNumber plus n.

+

The return value is always exact and unrounded.

+
+0.1 + 0.2                       // 0.30000000000000004
+x = new BigNumber(0.1)
+y = x.plus(0.2)                 // '0.3'
+BigNumber(0.7).plus(x).plus(y)  // '1.1'
+x.plus('0.1', 8)                // '0.225'
+ + + +
+ precision.sd([d [, rm]]) ⇒ BigNumber|number +
+

+ d: number|boolean: integer, 1 to 1e+9 + inclusive, or true or false
+ rm: number: integer, 0 to 8 inclusive. +

+

+ If d is a number, returns a BigNumber whose value is the value of this BigNumber + rounded to a precision of d significant digits using rounding mode + rm. +

+

+ If d is omitted or is null or undefined, the return + value is the number of significant digits of the value of this BigNumber, or null + if the value of this BigNumber is ±Infinity or NaN. +

+

+ If d is true then any trailing zeros of the integer + part of a number are counted as significant digits, otherwise they are not. +

+

+ If rm is omitted or is null or undefined, + ROUNDING_MODE will be used. +

+

+ Throws if d or rm is invalid. See Errors. +

+
+x = new BigNumber(9876.54321)
+x.precision(6)                         // '9876.54'
+x.sd()                                 // 9
+x.precision(6, BigNumber.ROUND_UP)     // '9876.55'
+x.sd(2)                                // '9900'
+x.precision(2, 1)                      // '9800'
+x                                      // '9876.54321'
+y = new BigNumber(987000)
+y.precision()                          // 3
+y.sd(true)                             // 6
+ + + +
shiftedBy.shiftedBy(n) ⇒ BigNumber
+

+ n: number: integer, + -9007199254740991 to 9007199254740991 inclusive +

+

+ Returns a BigNumber whose value is the value of this BigNumber shifted by n + places. +

+ The shift is of the decimal point, i.e. of powers of ten, and is to the left if n + is negative or to the right if n is positive. +

+

The return value is always exact and unrounded.

+

+ Throws if n is invalid. See Errors. +

+
+x = new BigNumber(1.23)
+x.shiftedBy(3)                      // '1230'
+x.shiftedBy(-3)                     // '0.00123'
+ + + +
squareRoot.sqrt() ⇒ BigNumber
+

+ Returns a BigNumber whose value is the square root of the value of this BigNumber, + rounded according to the current + DECIMAL_PLACES and + ROUNDING_MODE settings. +

+

+ The return value will be correctly rounded, i.e. rounded as if the result was first calculated + to an infinite number of correct digits before rounding. +

+
+x = new BigNumber(16)
+x.squareRoot()                  // '4'
+y = new BigNumber(3)
+y.sqrt()                        // '1.73205080756887729353'
+ + + +
+ toExponential.toExponential([dp [, rm]]) ⇒ string +
+

+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive +

+

+ Returns a string representing the value of this BigNumber in exponential notation rounded + using rounding mode rm to dp decimal places, i.e with one digit + before the decimal point and dp digits after it. +

+

+ If the value of this BigNumber in exponential notation has fewer than dp fraction + digits, the return value will be appended with zeros accordingly. +

+

+ If dp is omitted, or is null or undefined, the number + of digits after the decimal point defaults to the minimum number of digits necessary to + represent the value exactly.
+ If rm is omitted or is null or undefined, + ROUNDING_MODE is used. +

+

+ Throws if dp or rm is invalid. See Errors. +

+
+x = 45.6
+y = new BigNumber(x)
+x.toExponential()               // '4.56e+1'
+y.toExponential()               // '4.56e+1'
+x.toExponential(0)              // '5e+1'
+y.toExponential(0)              // '5e+1'
+x.toExponential(1)              // '4.6e+1'
+y.toExponential(1)              // '4.6e+1'
+y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
+x.toExponential(3)              // '4.560e+1'
+y.toExponential(3)              // '4.560e+1'
+ + + +
+ toFixed.toFixed([dp [, rm]]) ⇒ string +
+

+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive +

+

+ Returns a string representing the value of this BigNumber in normal (fixed-point) notation + rounded to dp decimal places using rounding mode rm. +

+

+ If the value of this BigNumber in normal notation has fewer than dp fraction + digits, the return value will be appended with zeros accordingly. +

+

+ Unlike Number.prototype.toFixed, which returns exponential notation if a number + is greater or equal to 1021, this method will always return normal + notation. +

+

+ If dp is omitted or is null or undefined, the return + value will be unrounded and in normal notation. This is also unlike + Number.prototype.toFixed, which returns the value to zero decimal places.
+ It is useful when fixed-point notation is required and the current + EXPONENTIAL_AT setting causes + toString to return exponential notation.
+ If rm is omitted or is null or undefined, + ROUNDING_MODE is used. +

+

+ Throws if dp or rm is invalid. See Errors. +

+
+x = 3.456
+y = new BigNumber(x)
+x.toFixed()                     // '3'
+y.toFixed()                     // '3.456'
+y.toFixed(0)                    // '3'
+x.toFixed(2)                    // '3.46'
+y.toFixed(2)                    // '3.46'
+y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
+x.toFixed(5)                    // '3.45600'
+y.toFixed(5)                    // '3.45600'
+ + + +
+ toFormat.toFormat([dp [, rm[, format]]]) ⇒ string +
+

+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive
+ format: object: see FORMAT +

+

+

+ Returns a string representing the value of this BigNumber in normal (fixed-point) notation + rounded to dp decimal places using rounding mode rm, and formatted + according to the properties of the format object. +

+

+ See FORMAT and the examples below for the properties of the + format object, their types, and their usage. A formatting object may contain + some or all of the recognised properties. +

+

+ If dp is omitted or is null or undefined, then the + return value is not rounded to a fixed number of decimal places.
+ If rm is omitted or is null or undefined, + ROUNDING_MODE is used.
+ If format is omitted or is null or undefined, the + FORMAT object is used. +

+

+ Throws if dp, rm or format is invalid. See + Errors. +

+
+fmt = {
+  prefix: '',
+  decimalSeparator: '.',
+  groupSeparator: ',',
+  groupSize: 3,
+  secondaryGroupSize: 0,
+  fractionGroupSeparator: ' ',
+  fractionGroupSize: 0,
+  suffix: ''
+}
+
+x = new BigNumber('123456789.123456789')
+
+// Set the global formatting options
+BigNumber.config({ FORMAT: fmt })
+
+x.toFormat()                              // '123,456,789.123456789'
+x.toFormat(3)                             // '123,456,789.123'
+
+// If a reference to the object assigned to FORMAT has been retained,
+// the format properties can be changed directly
+fmt.groupSeparator = ' '
+fmt.fractionGroupSize = 5
+x.toFormat()                              // '123 456 789.12345 6789'
+
+// Alternatively, pass the formatting options as an argument
+fmt = {
+  prefix: '=> ',
+  decimalSeparator: ',',
+  groupSeparator: '.',
+  groupSize: 3,
+  secondaryGroupSize: 2
+}
+
+x.toFormat()                              // '123 456 789.12345 6789'
+x.toFormat(fmt)                           // '=> 12.34.56.789,123456789'
+x.toFormat(2, fmt)                        // '=> 12.34.56.789,12'
+x.toFormat(3, BigNumber.ROUND_UP, fmt)    // '=> 12.34.56.789,124'
+ + + +
+ toFraction.toFraction([maximum_denominator]) + ⇒ [BigNumber, BigNumber] +
+

+ maximum_denominator: + number|string|BigNumber: integer >= 1 and <= + Infinity +

+

+ Returns an array of two BigNumbers representing the value of this BigNumber as a simple + fraction with an integer numerator and an integer denominator. The denominator will be a + positive non-zero value less than or equal to maximum_denominator. +

+

+ If a maximum_denominator is not specified, or is null or + undefined, the denominator will be the lowest value necessary to represent the + number exactly. +

+

+ Throws if maximum_denominator is invalid. See Errors. +

+
+x = new BigNumber(1.75)
+x.toFraction()                  // '7, 4'
+
+pi = new BigNumber('3.14159265358')
+pi.toFraction()                 // '157079632679,50000000000'
+pi.toFraction(100000)           // '312689, 99532'
+pi.toFraction(10000)            // '355, 113'
+pi.toFraction(100)              // '311, 99'
+pi.toFraction(10)               // '22, 7'
+pi.toFraction(1)                // '3, 1'
+ + + +
toJSON.toJSON() ⇒ string
+

As valueOf.

+
+x = new BigNumber('177.7e+457')
+y = new BigNumber(235.4325)
+z = new BigNumber('0.0098074')
+
+// Serialize an array of three BigNumbers
+str = JSON.stringify( [x, y, z] )
+// "["1.777e+459","235.4325","0.0098074"]"
+
+// Return an array of three BigNumbers
+JSON.parse(str, function (key, val) {
+    return key === '' ? val : new BigNumber(val)
+})
+ + + +
toNumber.toNumber() ⇒ number
+

Returns the value of this BigNumber as a JavaScript number primitive.

+

+ This method is identical to using type coercion with the unary plus operator. +

+
+x = new BigNumber(456.789)
+x.toNumber()                    // 456.789
++x                              // 456.789
+
+y = new BigNumber('45987349857634085409857349856430985')
+y.toNumber()                    // 4.598734985763409e+34
+
+z = new BigNumber(-0)
+1 / z.toNumber()                // -Infinity
+1 / +z                          // -Infinity
+ + + +
+ toPrecision.toPrecision([sd [, rm]]) ⇒ string +
+

+ sd: number: integer, 1 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive +

+

+ Returns a string representing the value of this BigNumber rounded to sd + significant digits using rounding mode rm. +

+

+ If sd is less than the number of digits necessary to represent the integer part + of the value in normal (fixed-point) notation, then exponential notation is used. +

+

+ If sd is omitted, or is null or undefined, then the + return value is the same as n.toString().
+ If rm is omitted or is null or undefined, + ROUNDING_MODE is used. +

+

+ Throws if sd or rm is invalid. See Errors. +

+
+x = 45.6
+y = new BigNumber(x)
+x.toPrecision()                 // '45.6'
+y.toPrecision()                 // '45.6'
+x.toPrecision(1)                // '5e+1'
+y.toPrecision(1)                // '5e+1'
+y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
+y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
+x.toPrecision(5)                // '45.600'
+y.toPrecision(5)                // '45.600'
+ + + +
toString.toString([base]) ⇒ string
+

+ base: number: integer, 2 to ALPHABET.length + inclusive (see ALPHABET). +

+

+ Returns a string representing the value of this BigNumber in the specified base, or base + 10 if base is omitted or is null or + undefined. +

+

+ For bases above 10, and using the default base conversion alphabet + (see ALPHABET), values from 10 to + 35 are represented by a-z + (as with Number.prototype.toString). +

+

+ If a base is specified the value is rounded according to the current + DECIMAL_PLACES + and ROUNDING_MODE settings. +

+

+ If a base is not specified, and this BigNumber has a positive + exponent that is equal to or greater than the positive component of the + current EXPONENTIAL_AT setting, + or a negative exponent equal to or less than the negative component of the + setting, then exponential notation is returned. +

+

If base is null or undefined it is ignored.

+

+ Throws if base is invalid. See Errors. +

+
+x = new BigNumber(750000)
+x.toString()                    // '750000'
+BigNumber.config({ EXPONENTIAL_AT: 5 })
+x.toString()                    // '7.5e+5'
+
+y = new BigNumber(362.875)
+y.toString(2)                   // '101101010.111'
+y.toString(9)                   // '442.77777777777777777778'
+y.toString(32)                  // 'ba.s'
+
+BigNumber.config({ DECIMAL_PLACES: 4 });
+z = new BigNumber('1.23456789')
+z.toString()                    // '1.23456789'
+z.toString(10)                  // '1.2346'
+ + + +
valueOf.valueOf() ⇒ string
+

+ As toString, but does not accept a base argument and includes + the minus sign for negative zero. +

+
+x = new BigNumber('-0')
+x.toString()                    // '0'
+x.valueOf()                     // '-0'
+y = new BigNumber('1.777e+457')
+y.valueOf()                     // '1.777e+457'
+ + + +

Properties

+

The properties of a BigNumber instance:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescriptionTypeValue
ccoefficient*number[] Array of base 1e14 numbers
eexponentnumberInteger, -1000000000 to 1000000000 inclusive
ssignnumber-1 or 1
+

*significand

+

+ The value of any of the c, e and s properties may also + be null. +

+

+ The above properties are best considered to be read-only. In early versions of this library it + was okay to change the exponent of a BigNumber by writing to its exponent property directly, + but this is no longer reliable as the value of the first element of the coefficient array is + now dependent on the exponent. +

+

+ Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are + not necessarily preserved. +

+
x = new BigNumber(0.123)              // '0.123'
+x.toExponential()                     // '1.23e-1'
+x.c                                   // '1,2,3'
+x.e                                   // -1
+x.s                                   // 1
+
+y = new Number(-123.4567000e+2)       // '-12345.67'
+y.toExponential()                     // '-1.234567e+4'
+z = new BigNumber('-123.4567000e+2')  // '-12345.67'
+z.toExponential()                     // '-1.234567e+4'
+z.c                                   // '1,2,3,4,5,6,7'
+z.e                                   // 4
+z.s                                   // -1
+ + + +

Zero, NaN and Infinity

+

+ The table below shows how ±0, NaN and + ±Infinity are stored. +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ces
±0[0]0±1
NaNnullnullnull
±Infinitynullnull±1
+
+x = new Number(-0)              // 0
+1 / x == -Infinity              // true
+
+y = new BigNumber(-0)           // '0'
+y.c                             // '0' ( [0].toString() )
+y.e                             // 0
+y.s                             // -1
+ + + +

Errors

+

The table below shows the errors that are thrown.

+

+ The errors are generic Error objects whose message begins + '[BigNumber Error]'. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodThrows
+ BigNumber
+ comparedTo
+ dividedBy
+ dividedToIntegerBy
+ isEqualTo
+ isGreaterThan
+ isGreaterThanOrEqualTo
+ isLessThan
+ isLessThanOrEqualTo
+ minus
+ modulo
+ plus
+ multipliedBy +
Base not a primitive number
Base not an integer
Base out of range
Number primitive has more than 15 significant digits*
Not a base... number*
Not a number*
cloneObject expected
configObject expected
DECIMAL_PLACES not a primitive number
DECIMAL_PLACES not an integer
DECIMAL_PLACES out of range
ROUNDING_MODE not a primitive number
ROUNDING_MODE not an integer
ROUNDING_MODE out of range
EXPONENTIAL_AT not a primitive number
EXPONENTIAL_AT not an integer
EXPONENTIAL_AT out of range
RANGE not a primitive number
RANGE not an integer
RANGE cannot be zero
RANGE cannot be zero
CRYPTO not true or false
crypto unavailable
MODULO_MODE not a primitive number
MODULO_MODE not an integer
MODULO_MODE out of range
POW_PRECISION not a primitive number
POW_PRECISION not an integer
POW_PRECISION out of range
FORMAT not an object
ALPHABET invalid
+ decimalPlaces
+ precision
+ random
+ shiftedBy
+ toExponential
+ toFixed
+ toFormat
+ toPrecision +
Argument not a primitive number
Argument not an integer
Argument out of range
+ decimalPlaces
+ precision +
Argument not true or false
exponentiatedByArgument not an integer
isBigNumberInvalid BigNumber*
+ minimum
+ maximum +
Not a number*
+ random + crypto unavailable
+ toFormat + Argument not an object
toFractionArgument not an integer
Argument out of range
toStringBase not a primitive number
Base not an integer
Base out of range
+

*Only thrown if BigNumber.DEBUG is true.

+

To determine if an exception is a BigNumber Error:

+
+try {
+  // ...
+} catch (e) {
+  if (e instanceof Error && e.message.indexOf('[BigNumber Error]') === 0) {
+      // ...
+  }
+}
+ + + +

Type coercion

+

+ To prevent the accidental use of a BigNumber in primitive number operations, or the + accidental addition of a BigNumber to a string, the valueOf method can be safely + overwritten as shown below. +

+

+ The valueOf method is the same as the + toJSON method, and both are the same as the + toString method except they do not take a base + argument and they include the minus sign for negative zero. +

+
+BigNumber.prototype.valueOf = function () {
+  throw Error('valueOf called!')
+}
+
+x = new BigNumber(1)
+x / 2                    // '[BigNumber Error] valueOf called!'
+x + 'abc'                // '[BigNumber Error] valueOf called!'
+
+ + + +

FAQ

+ +
Why are trailing fractional zeros removed from BigNumbers?
+

+ Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the + precision of a value. This can be useful but the results of arithmetic operations can be + misleading. +

+
+x = new BigDecimal("1.0")
+y = new BigDecimal("1.1000")
+z = x.add(y)                      // 2.1000
+
+x = new BigDecimal("1.20")
+y = new BigDecimal("3.45000")
+z = x.multiply(y)                 // 4.1400000
+

+ To specify the precision of a value is to specify that the value lies + within a certain range. +

+

+ In the first example, x has a value of 1.0. The trailing zero shows + the precision of the value, implying that it is in the range 0.95 to + 1.05. Similarly, the precision indicated by the trailing zeros of y + indicates that the value is in the range 1.09995 to 1.10005. +

+

+ If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, + and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the + range of the result of the addition implied by the precision of its operands is + 2.04995 to 2.15005. +

+

+ The result given by BigDecimal of 2.1000 however, indicates that the value is in + the range 2.09995 to 2.10005 and therefore the precision implied by + its trailing zeros may be misleading. +

+

+ In the second example, the true range is 4.122744 to 4.157256 yet + the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 + to 4.14000005. Again, the precision implied by the trailing zeros may be + misleading. +

+

+ This library, like binary floating point and most calculators, does not retain trailing + fractional zeros. Instead, the toExponential, toFixed and + toPrecision methods enable trailing zeros to be added if and when required.
+

+
+ + + diff --git a/node_modules/bignumber.js/package.json b/node_modules/bignumber.js/package.json new file mode 100644 index 00000000..6b1d95b9 --- /dev/null +++ b/node_modules/bignumber.js/package.json @@ -0,0 +1,60 @@ +{ + "name": "bignumber.js", + "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", + "version": "9.3.1", + "keywords": [ + "arbitrary", + "precision", + "arithmetic", + "big", + "number", + "decimal", + "float", + "biginteger", + "bigdecimal", + "bignumber", + "bigint", + "bignum" + ], + "repository": { + "type": "git", + "url": "https://github.com/MikeMcl/bignumber.js.git" + }, + "main": "bignumber", + "module": "bignumber.mjs", + "browser": "bignumber.js", + "types": "bignumber.d.ts", + "exports": { + ".": { + "import": { + "types": "./bignumber.d.mts", + "default": "./bignumber.mjs" + }, + "require": { + "types": "./bignumber.d.ts", + "default": "./bignumber.js" + }, + "browser": { + "types": "./bignumber.d.ts", + "default": "./bignumber.js" + }, + "default": { + "types": "./bignumber.d.ts", + "default": "./bignumber.js" + } + }, + "./package.json": "./package.json" + }, + "author": { + "name": "Michael Mclaughlin", + "email": "M8ch88l@gmail.com" + }, + "engines": { + "node": "*" + }, + "license": "MIT", + "scripts": { + "test": "node test/test" + }, + "dependencies": {} +} diff --git a/node_modules/bignumber.js/types.d.ts b/node_modules/bignumber.js/types.d.ts new file mode 100644 index 00000000..8145edd6 --- /dev/null +++ b/node_modules/bignumber.js/types.d.ts @@ -0,0 +1,1821 @@ +// Type definitions for bignumber.js >=8.1.0 +// Project: https://github.com/MikeMcl/bignumber.js +// Definitions by: Michael Mclaughlin +// Definitions: https://github.com/MikeMcl/bignumber.js + +// Documentation: http://mikemcl.github.io/bignumber.js/ +// +// class BigNumber +// type BigNumber.Constructor +// type BigNumber.ModuloMode +// type BigNumber.RoundingMode +// type BigNumber.Value +// interface BigNumber.Config +// interface BigNumber.Format +// interface BigNumber.Instance +// +// Example: +// +// import {BigNumber} from "bignumber.js" +// //import BigNumber from "bignumber.js" +// +// let rm: BigNumber.RoundingMode = BigNumber.ROUND_UP; +// let f: BigNumber.Format = { decimalSeparator: ',' }; +// let c: BigNumber.Config = { DECIMAL_PLACES: 4, ROUNDING_MODE: rm, FORMAT: f }; +// BigNumber.config(c); +// +// let v: BigNumber.Value = '12345.6789'; +// let b: BigNumber = new BigNumber(v); +// +// The use of compiler option `--strictNullChecks` is recommended. + +declare namespace BigNumber { + + /** See `BigNumber.config` (alias `BigNumber.set`) and `BigNumber.clone`. */ + interface Config { + + /** + * An integer, 0 to 1e+9. Default value: 20. + * + * The maximum number of decimal places of the result of operations involving division, i.e. + * division, square root and base conversion operations, and exponentiation when the exponent is + * negative. + * + * ```ts + * BigNumber.config({ DECIMAL_PLACES: 5 }) + * BigNumber.set({ DECIMAL_PLACES: 5 }) + * ``` + */ + DECIMAL_PLACES?: number; + + /** + * An integer, 0 to 8. Default value: `BigNumber.ROUND_HALF_UP` (4). + * + * The rounding mode used in operations that involve division (see `DECIMAL_PLACES`) and the + * default rounding mode of the `decimalPlaces`, `precision`, `toExponential`, `toFixed`, + * `toFormat` and `toPrecision` methods. + * + * The modes are available as enumerated properties of the BigNumber constructor. + * + * ```ts + * BigNumber.config({ ROUNDING_MODE: 0 }) + * BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_UP }) + * ``` + */ + ROUNDING_MODE?: BigNumber.RoundingMode; + + /** + * An integer, 0 to 1e+9, or an array, [-1e+9 to 0, 0 to 1e+9]. + * Default value: `[-7, 20]`. + * + * The exponent value(s) at which `toString` returns exponential notation. + * + * If a single number is assigned, the value is the exponent magnitude. + * + * If an array of two numbers is assigned then the first number is the negative exponent value at + * and beneath which exponential notation is used, and the second number is the positive exponent + * value at and above which exponential notation is used. + * + * For example, to emulate JavaScript numbers in terms of the exponent values at which they begin + * to use exponential notation, use `[-7, 20]`. + * + * ```ts + * BigNumber.config({ EXPONENTIAL_AT: 2 }) + * new BigNumber(12.3) // '12.3' e is only 1 + * new BigNumber(123) // '1.23e+2' + * new BigNumber(0.123) // '0.123' e is only -1 + * new BigNumber(0.0123) // '1.23e-2' + * + * BigNumber.config({ EXPONENTIAL_AT: [-7, 20] }) + * new BigNumber(123456789) // '123456789' e is only 8 + * new BigNumber(0.000000123) // '1.23e-7' + * + * // Almost never return exponential notation: + * BigNumber.config({ EXPONENTIAL_AT: 1e+9 }) + * + * // Always return exponential notation: + * BigNumber.config({ EXPONENTIAL_AT: 0 }) + * ``` + * + * Regardless of the value of `EXPONENTIAL_AT`, the `toFixed` method will always return a value in + * normal notation and the `toExponential` method will always return a value in exponential form. + * Calling `toString` with a base argument, e.g. `toString(10)`, will also always return normal + * notation. + */ + EXPONENTIAL_AT?: number | [number, number]; + + /** + * An integer, magnitude 1 to 1e+9, or an array, [-1e+9 to -1, 1 to 1e+9]. + * Default value: `[-1e+9, 1e+9]`. + * + * The exponent value(s) beyond which overflow to Infinity and underflow to zero occurs. + * + * If a single number is assigned, it is the maximum exponent magnitude: values wth a positive + * exponent of greater magnitude become Infinity and those with a negative exponent of greater + * magnitude become zero. + * + * If an array of two numbers is assigned then the first number is the negative exponent limit and + * the second number is the positive exponent limit. + * + * For example, to emulate JavaScript numbers in terms of the exponent values at which they + * become zero and Infinity, use [-324, 308]. + * + * ```ts + * BigNumber.config({ RANGE: 500 }) + * BigNumber.config().RANGE // [ -500, 500 ] + * new BigNumber('9.999e499') // '9.999e+499' + * new BigNumber('1e500') // 'Infinity' + * new BigNumber('1e-499') // '1e-499' + * new BigNumber('1e-500') // '0' + * + * BigNumber.config({ RANGE: [-3, 4] }) + * new BigNumber(99999) // '99999' e is only 4 + * new BigNumber(100000) // 'Infinity' e is 5 + * new BigNumber(0.001) // '0.01' e is only -3 + * new BigNumber(0.0001) // '0' e is -4 + * ``` + * The largest possible magnitude of a finite BigNumber is 9.999...e+1000000000. + * The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. + */ + RANGE?: number | [number, number]; + + /** + * A boolean: `true` or `false`. Default value: `false`. + * + * The value that determines whether cryptographically-secure pseudo-random number generation is + * used. If `CRYPTO` is set to true then the random method will generate random digits using + * `crypto.getRandomValues` in browsers that support it, or `crypto.randomBytes` if using a + * version of Node.js that supports it. + * + * If neither function is supported by the host environment then attempting to set `CRYPTO` to + * `true` will fail and an exception will be thrown. + * + * If `CRYPTO` is `false` then the source of randomness used will be `Math.random` (which is + * assumed to generate at least 30 bits of randomness). + * + * See `BigNumber.random`. + * + * ```ts + * // Node.js + * global.crypto = require('crypto') + * + * BigNumber.config({ CRYPTO: true }) + * BigNumber.config().CRYPTO // true + * BigNumber.random() // 0.54340758610486147524 + * ``` + */ + CRYPTO?: boolean; + + /** + * An integer, 0, 1, 3, 6 or 9. Default value: `BigNumber.ROUND_DOWN` (1). + * + * The modulo mode used when calculating the modulus: `a mod n`. + * The quotient, `q = a / n`, is calculated according to the `ROUNDING_MODE` that corresponds to + * the chosen `MODULO_MODE`. + * The remainder, `r`, is calculated as: `r = a - n * q`. + * + * The modes that are most commonly used for the modulus/remainder operation are shown in the + * following table. Although the other rounding modes can be used, they may not give useful + * results. + * + * Property | Value | Description + * :------------------|:------|:------------------------------------------------------------------ + * `ROUND_UP` | 0 | The remainder is positive if the dividend is negative. + * `ROUND_DOWN` | 1 | The remainder has the same sign as the dividend. + * | | Uses 'truncating division' and matches JavaScript's `%` operator . + * `ROUND_FLOOR` | 3 | The remainder has the same sign as the divisor. + * | | This matches Python's `%` operator. + * `ROUND_HALF_EVEN` | 6 | The IEEE 754 remainder function. + * `EUCLID` | 9 | The remainder is always positive. + * | | Euclidian division: `q = sign(n) * floor(a / abs(n))` + * + * The rounding/modulo modes are available as enumerated properties of the BigNumber constructor. + * + * See `modulo`. + * + * ```ts + * BigNumber.config({ MODULO_MODE: BigNumber.EUCLID }) + * BigNumber.set({ MODULO_MODE: 9 }) // equivalent + * ``` + */ + MODULO_MODE?: BigNumber.ModuloMode; + + /** + * An integer, 0 to 1e+9. Default value: 0. + * + * The maximum precision, i.e. number of significant digits, of the result of the power operation + * - unless a modulus is specified. + * + * If set to 0, the number of significant digits will not be limited. + * + * See `exponentiatedBy`. + * + * ```ts + * BigNumber.config({ POW_PRECISION: 100 }) + * ``` + */ + POW_PRECISION?: number; + + /** + * An object including any number of the properties shown below. + * + * The object configures the format of the string returned by the `toFormat` method. + * The example below shows the properties of the object that are recognised, and + * their default values. + * + * Unlike the other configuration properties, the values of the properties of the `FORMAT` object + * will not be checked for validity - the existing object will simply be replaced by the object + * that is passed in. + * + * See `toFormat`. + * + * ```ts + * BigNumber.config({ + * FORMAT: { + * // string to prepend + * prefix: '', + * // the decimal separator + * decimalSeparator: '.', + * // the grouping separator of the integer part + * groupSeparator: ',', + * // the primary grouping size of the integer part + * groupSize: 3, + * // the secondary grouping size of the integer part + * secondaryGroupSize: 0, + * // the grouping separator of the fraction part + * fractionGroupSeparator: ' ', + * // the grouping size of the fraction part + * fractionGroupSize: 0, + * // string to append + * suffix: '' + * } + * }) + * ``` + */ + FORMAT?: BigNumber.Format; + + /** + * The alphabet used for base conversion. The length of the alphabet corresponds to the maximum + * value of the base argument that can be passed to the BigNumber constructor or `toString`. + * + * Default value: `'0123456789abcdefghijklmnopqrstuvwxyz'`. + * + * There is no maximum length for the alphabet, but it must be at least 2 characters long, + * and it must not contain whitespace or a repeated character, or the sign indicators '+' and + * '-', or the decimal separator '.'. + * + * ```ts + * // duodecimal (base 12) + * BigNumber.config({ ALPHABET: '0123456789TE' }) + * x = new BigNumber('T', 12) + * x.toString() // '10' + * x.toString(12) // 'T' + * ``` + */ + ALPHABET?: string; + } + + /** See `FORMAT` and `toFormat`. */ + interface Format { + + /** The string to prepend. */ + prefix?: string; + + /** The decimal separator. */ + decimalSeparator?: string; + + /** The grouping separator of the integer part. */ + groupSeparator?: string; + + /** The primary grouping size of the integer part. */ + groupSize?: number; + + /** The secondary grouping size of the integer part. */ + secondaryGroupSize?: number; + + /** The grouping separator of the fraction part. */ + fractionGroupSeparator?: string; + + /** The grouping size of the fraction part. */ + fractionGroupSize?: number; + + /** The string to append. */ + suffix?: string; + } + + interface Instance { + + /** The coefficient of the value of this BigNumber, an array of base 1e14 integer numbers, or null. */ + readonly c: number[] | null; + + /** The exponent of the value of this BigNumber, an integer number, -1000000000 to 1000000000, or null. */ + readonly e: number | null; + + /** The sign of the value of this BigNumber, -1, 1, or null. */ + readonly s: number | null; + + [key: string]: any; + } + + type Constructor = typeof BigNumber; + type ModuloMode = 0 | 1 | 3 | 6 | 9; + type RoundingMode = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; + type Value = string | number | bigint | Instance; +} + +declare class BigNumber implements BigNumber.Instance { + + /** Used internally to identify a BigNumber instance. */ + private readonly _isBigNumber: true; + + /** The coefficient of the value of this BigNumber, an array of base 1e14 integer numbers, or null. */ + readonly c: number[] | null; + + /** The exponent of the value of this BigNumber, an integer number, -1000000000 to 1000000000, or null. */ + readonly e: number | null; + + /** The sign of the value of this BigNumber, -1, 1, or null. */ + readonly s: number | null; + + /** + * Returns a new instance of a BigNumber object with value `n`, where `n` is a numeric value in + * the specified `base`, or base 10 if `base` is omitted. + * + * ```ts + * x = new BigNumber(123.4567) // '123.4567' + * // 'new' is optional + * y = BigNumber(x) // '123.4567' + * ``` + * + * If `n` is a base 10 value it can be in normal (fixed-point) or exponential notation. + * Values in other bases must be in normal notation. Values in any base can have fraction digits, + * i.e. digits after the decimal point. + * + * ```ts + * new BigNumber(43210) // '43210' + * new BigNumber('4.321e+4') // '43210' + * new BigNumber('-735.0918e-430') // '-7.350918e-428' + * new BigNumber('123412421.234324', 5) // '607236.557696' + * ``` + * + * Signed `0`, signed `Infinity` and `NaN` are supported. + * + * ```ts + * new BigNumber('-Infinity') // '-Infinity' + * new BigNumber(NaN) // 'NaN' + * new BigNumber(-0) // '0' + * new BigNumber('.5') // '0.5' + * new BigNumber('+2') // '2' + * ``` + * + * String values in hexadecimal literal form, e.g. `'0xff'`, are valid, as are string values with + * the octal and binary prefixs `'0o'` and `'0b'`. String values in octal literal form without the + * prefix will be interpreted as decimals, e.g. `'011'` is interpreted as 11, not 9. + * + * ```ts + * new BigNumber(-10110100.1, 2) // '-180.5' + * new BigNumber('-0b10110100.1') // '-180.5' + * new BigNumber('ff.8', 16) // '255.5' + * new BigNumber('0xff.8') // '255.5' + * ``` + * + * If a base is specified, `n` is rounded according to the current `DECIMAL_PLACES` and + * `ROUNDING_MODE` settings. This includes base 10, so don't include a `base` parameter for decimal + * values unless this behaviour is desired. + * + * ```ts + * BigNumber.config({ DECIMAL_PLACES: 5 }) + * new BigNumber(1.23456789) // '1.23456789' + * new BigNumber(1.23456789, 10) // '1.23457' + * ``` + * + * An error is thrown if `base` is invalid. + * + * There is no limit to the number of digits of a value of type string (other than that of + * JavaScript's maximum array size). See `RANGE` to set the maximum and minimum possible exponent + * value of a BigNumber. + * + * ```ts + * new BigNumber('5032485723458348569331745.33434346346912144534543') + * new BigNumber('4.321e10000000') + * ``` + * + * BigNumber `NaN` is returned if `n` is invalid (unless `BigNumber.DEBUG` is `true`, see below). + * + * ```ts + * new BigNumber('.1*') // 'NaN' + * new BigNumber('blurgh') // 'NaN' + * new BigNumber(9, 2) // 'NaN' + * ``` + * + * To aid in debugging, if `BigNumber.DEBUG` is `true` then an error will be thrown on an + * invalid `n`. An error will also be thrown if `n` is of type number with more than 15 + * significant digits, as calling `toString` or `valueOf` on these numbers may not result in the + * intended value. + * + * ```ts + * console.log(823456789123456.3) // 823456789123456.2 + * new BigNumber(823456789123456.3) // '823456789123456.2' + * BigNumber.DEBUG = true + * // 'Error: Number has more than 15 significant digits' + * new BigNumber(823456789123456.3) + * // 'Error: Not a base 2 number' + * new BigNumber(9, 2) + * ``` + * + * A BigNumber can also be created from an object literal. + * Use `isBigNumber` to check that it is well-formed. + * + * ```ts + * new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ], _isBigNumber: true }) // '777.123' + * ``` + * + * @param n A numeric value. + * @param base The base of `n`, integer, 2 to 36 (or `ALPHABET.length`, see `ALPHABET`). + */ + constructor(n: BigNumber.Value, base?: number); + + /** + * Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of this + * BigNumber. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber(-0.8) + * x.absoluteValue() // '0.8' + * ``` + */ + absoluteValue(): BigNumber; + + /** + * Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of this + * BigNumber. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber(-0.8) + * x.abs() // '0.8' + * ``` + */ + abs(): BigNumber; + + /** + * Returns | | + * :-------:|:--------------------------------------------------------------| + * 1 | If the value of this BigNumber is greater than the value of `n` + * -1 | If the value of this BigNumber is less than the value of `n` + * 0 | If this BigNumber and `n` have the same value + * `null` | If the value of either this BigNumber or `n` is `NaN` + * + * ```ts + * + * x = new BigNumber(Infinity) + * y = new BigNumber(5) + * x.comparedTo(y) // 1 + * x.comparedTo(x.minus(1)) // 0 + * y.comparedTo(NaN) // null + * y.comparedTo('110', 2) // -1 + * ``` + * @param n A numeric value. + * @param [base] The base of n. + */ + comparedTo(n: BigNumber.Value, base?: number): 1 | -1 | 0 | null; + + /** + * Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode + * `roundingMode` to a maximum of `decimalPlaces` decimal places. + * + * If `decimalPlaces` is omitted, the return value is the number of decimal places of the value of + * this BigNumber, or `null` if the value of this BigNumber is ±`Infinity` or `NaN`. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` is used. + * + * Throws if `decimalPlaces` or `roundingMode` is invalid. + * + * ```ts + * x = new BigNumber(1234.56) + * x.decimalPlaces() // 2 + * x.decimalPlaces(1) // '1234.6' + * x.decimalPlaces(2) // '1234.56' + * x.decimalPlaces(10) // '1234.56' + * x.decimalPlaces(0, 1) // '1234' + * x.decimalPlaces(0, 6) // '1235' + * x.decimalPlaces(1, 1) // '1234.5' + * x.decimalPlaces(1, BigNumber.ROUND_HALF_EVEN) // '1234.6' + * x // '1234.56' + * y = new BigNumber('9.9e-101') + * y.decimalPlaces() // 102 + * ``` + * + * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + */ + decimalPlaces(): number | null; + decimalPlaces(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode + * `roundingMode` to a maximum of `decimalPlaces` decimal places. + * + * If `decimalPlaces` is omitted, the return value is the number of decimal places of the value of + * this BigNumber, or `null` if the value of this BigNumber is ±`Infinity` or `NaN`. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` is used. + * + * Throws if `decimalPlaces` or `roundingMode` is invalid. + * + * ```ts + * x = new BigNumber(1234.56) + * x.dp() // 2 + * x.dp(1) // '1234.6' + * x.dp(2) // '1234.56' + * x.dp(10) // '1234.56' + * x.dp(0, 1) // '1234' + * x.dp(0, 6) // '1235' + * x.dp(1, 1) // '1234.5' + * x.dp(1, BigNumber.ROUND_HALF_EVEN) // '1234.6' + * x // '1234.56' + * y = new BigNumber('9.9e-101') + * y.dp() // 102 + * ``` + * + * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + */ + dp(): number | null; + dp(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber divided by `n`, rounded + * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. + * + * ```ts + * x = new BigNumber(355) + * y = new BigNumber(113) + * x.dividedBy(y) // '3.14159292035398230088' + * x.dividedBy(5) // '71' + * x.dividedBy(47, 16) // '5' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + dividedBy(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber divided by `n`, rounded + * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. + * + * ```ts + * x = new BigNumber(355) + * y = new BigNumber(113) + * x.div(y) // '3.14159292035398230088' + * x.div(5) // '71' + * x.div(47, 16) // '5' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + div(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by + * `n`. + * + * ```ts + * x = new BigNumber(5) + * y = new BigNumber(3) + * x.dividedToIntegerBy(y) // '1' + * x.dividedToIntegerBy(0.7) // '7' + * x.dividedToIntegerBy('0.f', 16) // '5' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + dividedToIntegerBy(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by + * `n`. + * + * ```ts + * x = new BigNumber(5) + * y = new BigNumber(3) + * x.idiv(y) // '1' + * x.idiv(0.7) // '7' + * x.idiv('0.f', 16) // '5' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + idiv(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber exponentiated by `n`, i.e. + * raised to the power `n`, and optionally modulo a modulus `m`. + * + * If `n` is negative the result is rounded according to the current `DECIMAL_PLACES` and + * `ROUNDING_MODE` settings. + * + * As the number of digits of the result of the power operation can grow so large so quickly, + * e.g. 123.456**10000 has over 50000 digits, the number of significant digits calculated is + * limited to the value of the `POW_PRECISION` setting (unless a modulus `m` is specified). + * + * By default `POW_PRECISION` is set to 0. This means that an unlimited number of significant + * digits will be calculated, and that the method's performance will decrease dramatically for + * larger exponents. + * + * If `m` is specified and the value of `m`, `n` and this BigNumber are integers and `n` is + * positive, then a fast modular exponentiation algorithm is used, otherwise the operation will + * be performed as `x.exponentiatedBy(n).modulo(m)` with a `POW_PRECISION` of 0. + * + * Throws if `n` is not an integer. + * + * ```ts + * Math.pow(0.7, 2) // 0.48999999999999994 + * x = new BigNumber(0.7) + * x.exponentiatedBy(2) // '0.49' + * BigNumber(3).exponentiatedBy(-2) // '0.11111111111111111111' + * ``` + * + * @param n The exponent, an integer. + * @param [m] The modulus. + */ + exponentiatedBy(n: BigNumber.Value, m?: BigNumber.Value): BigNumber; + exponentiatedBy(n: number, m?: BigNumber.Value): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber exponentiated by `n`, i.e. + * raised to the power `n`, and optionally modulo a modulus `m`. + * + * If `n` is negative the result is rounded according to the current `DECIMAL_PLACES` and + * `ROUNDING_MODE` settings. + * + * As the number of digits of the result of the power operation can grow so large so quickly, + * e.g. 123.456**10000 has over 50000 digits, the number of significant digits calculated is + * limited to the value of the `POW_PRECISION` setting (unless a modulus `m` is specified). + * + * By default `POW_PRECISION` is set to 0. This means that an unlimited number of significant + * digits will be calculated, and that the method's performance will decrease dramatically for + * larger exponents. + * + * If `m` is specified and the value of `m`, `n` and this BigNumber are integers and `n` is + * positive, then a fast modular exponentiation algorithm is used, otherwise the operation will + * be performed as `x.pow(n).modulo(m)` with a `POW_PRECISION` of 0. + * + * Throws if `n` is not an integer. + * + * ```ts + * Math.pow(0.7, 2) // 0.48999999999999994 + * x = new BigNumber(0.7) + * x.pow(2) // '0.49' + * BigNumber(3).pow(-2) // '0.11111111111111111111' + * ``` + * + * @param n The exponent, an integer. + * @param [m] The modulus. + */ + pow(n: BigNumber.Value, m?: BigNumber.Value): BigNumber; + pow(n: number, m?: BigNumber.Value): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber rounded to an integer using + * rounding mode `rm`. + * + * If `rm` is omitted, `ROUNDING_MODE` is used. + * + * Throws if `rm` is invalid. + * + * ```ts + * x = new BigNumber(123.456) + * x.integerValue() // '123' + * x.integerValue(BigNumber.ROUND_CEIL) // '124' + * y = new BigNumber(-12.7) + * y.integerValue() // '-13' + * x.integerValue(BigNumber.ROUND_DOWN) // '-12' + * ``` + * + * @param {BigNumber.RoundingMode} [rm] The roundng mode, an integer, 0 to 8. + */ + integerValue(rm?: BigNumber.RoundingMode): BigNumber; + + /** + * Returns `true` if the value of this BigNumber is equal to the value of `n`, otherwise returns + * `false`. + * + * As with JavaScript, `NaN` does not equal `NaN`. + * + * ```ts + * 0 === 1e-324 // true + * x = new BigNumber(0) + * x.isEqualTo('1e-324') // false + * BigNumber(-0).isEqualTo(x) // true ( -0 === 0 ) + * BigNumber(255).isEqualTo('ff', 16) // true + * + * y = new BigNumber(NaN) + * y.isEqualTo(NaN) // false + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + isEqualTo(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is equal to the value of `n`, otherwise returns + * `false`. + * + * As with JavaScript, `NaN` does not equal `NaN`. + * + * ```ts + * 0 === 1e-324 // true + * x = new BigNumber(0) + * x.eq('1e-324') // false + * BigNumber(-0).eq(x) // true ( -0 === 0 ) + * BigNumber(255).eq('ff', 16) // true + * + * y = new BigNumber(NaN) + * y.eq(NaN) // false + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + eq(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is a finite number, otherwise returns `false`. + * + * The only possible non-finite values of a BigNumber are `NaN`, `Infinity` and `-Infinity`. + * + * ```ts + * x = new BigNumber(1) + * x.isFinite() // true + * y = new BigNumber(Infinity) + * y.isFinite() // false + * ``` + */ + isFinite(): boolean; + + /** + * Returns `true` if the value of this BigNumber is greater than the value of `n`, otherwise + * returns `false`. + * + * ```ts + * 0.1 > (0.3 - 0.2) // true + * x = new BigNumber(0.1) + * x.isGreaterThan(BigNumber(0.3).minus(0.2)) // false + * BigNumber(0).isGreaterThan(x) // false + * BigNumber(11, 3).isGreaterThan(11.1, 2) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + isGreaterThan(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is greater than the value of `n`, otherwise + * returns `false`. + * + * ```ts + * 0.1 > (0.3 - 0.2) // true + * x = new BigNumber(0.1) + * x.gt(BigNumber(0.3).minus(0.2)) // false + * BigNumber(0).gt(x) // false + * BigNumber(11, 3).gt(11.1, 2) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + gt(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is greater than or equal to the value of `n`, + * otherwise returns `false`. + * + * ```ts + * (0.3 - 0.2) >= 0.1 // false + * x = new BigNumber(0.3).minus(0.2) + * x.isGreaterThanOrEqualTo(0.1) // true + * BigNumber(1).isGreaterThanOrEqualTo(x) // true + * BigNumber(10, 18).isGreaterThanOrEqualTo('i', 36) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + isGreaterThanOrEqualTo(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is greater than or equal to the value of `n`, + * otherwise returns `false`. + * + * ```ts + * (0.3 - 0.2) >= 0.1 // false + * x = new BigNumber(0.3).minus(0.2) + * x.gte(0.1) // true + * BigNumber(1).gte(x) // true + * BigNumber(10, 18).gte('i', 36) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + gte(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is an integer, otherwise returns `false`. + * + * ```ts + * x = new BigNumber(1) + * x.isInteger() // true + * y = new BigNumber(123.456) + * y.isInteger() // false + * ``` + */ + isInteger(): boolean; + + /** + * Returns `true` if the value of this BigNumber is less than the value of `n`, otherwise returns + * `false`. + * + * ```ts + * (0.3 - 0.2) < 0.1 // true + * x = new BigNumber(0.3).minus(0.2) + * x.isLessThan(0.1) // false + * BigNumber(0).isLessThan(x) // true + * BigNumber(11.1, 2).isLessThan(11, 3) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + isLessThan(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is less than the value of `n`, otherwise returns + * `false`. + * + * ```ts + * (0.3 - 0.2) < 0.1 // true + * x = new BigNumber(0.3).minus(0.2) + * x.lt(0.1) // false + * BigNumber(0).lt(x) // true + * BigNumber(11.1, 2).lt(11, 3) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + lt(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is less than or equal to the value of `n`, + * otherwise returns `false`. + * + * ```ts + * 0.1 <= (0.3 - 0.2) // false + * x = new BigNumber(0.1) + * x.isLessThanOrEqualTo(BigNumber(0.3).minus(0.2)) // true + * BigNumber(-1).isLessThanOrEqualTo(x) // true + * BigNumber(10, 18).isLessThanOrEqualTo('i', 36) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + isLessThanOrEqualTo(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is less than or equal to the value of `n`, + * otherwise returns `false`. + * + * ```ts + * 0.1 <= (0.3 - 0.2) // false + * x = new BigNumber(0.1) + * x.lte(BigNumber(0.3).minus(0.2)) // true + * BigNumber(-1).lte(x) // true + * BigNumber(10, 18).lte('i', 36) // true + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + lte(n: BigNumber.Value, base?: number): boolean; + + /** + * Returns `true` if the value of this BigNumber is `NaN`, otherwise returns `false`. + * + * ```ts + * x = new BigNumber(NaN) + * x.isNaN() // true + * y = new BigNumber('Infinity') + * y.isNaN() // false + * ``` + */ + isNaN(): boolean; + + /** + * Returns `true` if the value of this BigNumber is negative, otherwise returns `false`. + * + * ```ts + * x = new BigNumber(-0) + * x.isNegative() // true + * y = new BigNumber(2) + * y.isNegative() // false + * ``` + */ + isNegative(): boolean; + + /** + * Returns `true` if the value of this BigNumber is positive, otherwise returns `false`. + * + * ```ts + * x = new BigNumber(-0) + * x.isPositive() // false + * y = new BigNumber(2) + * y.isPositive() // true + * ``` + */ + isPositive(): boolean; + + /** + * Returns `true` if the value of this BigNumber is zero or minus zero, otherwise returns `false`. + * + * ```ts + * x = new BigNumber(-0) + * x.isZero() // true + * ``` + */ + isZero(): boolean; + + /** + * Returns a BigNumber whose value is the value of this BigNumber minus `n`. + * + * The return value is always exact and unrounded. + * + * ```ts + * 0.3 - 0.1 // 0.19999999999999998 + * x = new BigNumber(0.3) + * x.minus(0.1) // '0.2' + * x.minus(0.6, 20) // '0' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + minus(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber modulo `n`, i.e. the integer + * remainder of dividing this BigNumber by `n`. + * + * The value returned, and in particular its sign, is dependent on the value of the `MODULO_MODE` + * setting of this BigNumber constructor. If it is 1 (default value), the result will have the + * same sign as this BigNumber, and it will match that of Javascript's `%` operator (within the + * limits of double precision) and BigDecimal's `remainder` method. + * + * The return value is always exact and unrounded. + * + * See `MODULO_MODE` for a description of the other modulo modes. + * + * ```ts + * 1 % 0.9 // 0.09999999999999998 + * x = new BigNumber(1) + * x.modulo(0.9) // '0.1' + * y = new BigNumber(33) + * y.modulo('a', 33) // '3' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + modulo(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber modulo `n`, i.e. the integer + * remainder of dividing this BigNumber by `n`. + * + * The value returned, and in particular its sign, is dependent on the value of the `MODULO_MODE` + * setting of this BigNumber constructor. If it is 1 (default value), the result will have the + * same sign as this BigNumber, and it will match that of Javascript's `%` operator (within the + * limits of double precision) and BigDecimal's `remainder` method. + * + * The return value is always exact and unrounded. + * + * See `MODULO_MODE` for a description of the other modulo modes. + * + * ```ts + * 1 % 0.9 // 0.09999999999999998 + * x = new BigNumber(1) + * x.mod(0.9) // '0.1' + * y = new BigNumber(33) + * y.mod('a', 33) // '3' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + mod(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber multiplied by `n`. + * + * The return value is always exact and unrounded. + * + * ```ts + * 0.6 * 3 // 1.7999999999999998 + * x = new BigNumber(0.6) + * y = x.multipliedBy(3) // '1.8' + * BigNumber('7e+500').multipliedBy(y) // '1.26e+501' + * x.multipliedBy('-a', 16) // '-6' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + multipliedBy(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber multiplied by `n`. + * + * The return value is always exact and unrounded. + * + * ```ts + * 0.6 * 3 // 1.7999999999999998 + * x = new BigNumber(0.6) + * y = x.times(3) // '1.8' + * BigNumber('7e+500').times(y) // '1.26e+501' + * x.times('-a', 16) // '-6' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + times(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by -1. + * + * ```ts + * x = new BigNumber(1.8) + * x.negated() // '-1.8' + * y = new BigNumber(-1.3) + * y.negated() // '1.3' + * ``` + */ + negated(): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber plus `n`. + * + * The return value is always exact and unrounded. + * + * ```ts + * 0.1 + 0.2 // 0.30000000000000004 + * x = new BigNumber(0.1) + * y = x.plus(0.2) // '0.3' + * BigNumber(0.7).plus(x).plus(y) // '1.1' + * x.plus('0.1', 8) // '0.225' + * ``` + * + * @param n A numeric value. + * @param [base] The base of n. + */ + plus(n: BigNumber.Value, base?: number): BigNumber; + + /** + * Returns the number of significant digits of the value of this BigNumber, or `null` if the value + * of this BigNumber is ±`Infinity` or `NaN`. + * + * If `includeZeros` is true then any trailing zeros of the integer part of the value of this + * BigNumber are counted as significant digits, otherwise they are not. + * + * Throws if `includeZeros` is invalid. + * + * ```ts + * x = new BigNumber(9876.54321) + * x.precision() // 9 + * y = new BigNumber(987000) + * y.precision(false) // 3 + * y.precision(true) // 6 + * ``` + * + * @param [includeZeros] Whether to include integer trailing zeros in the significant digit count. + */ + precision(includeZeros?: boolean): number; + + /** + * Returns a BigNumber whose value is the value of this BigNumber rounded to a precision of + * `significantDigits` significant digits using rounding mode `roundingMode`. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` will be used. + * + * Throws if `significantDigits` or `roundingMode` is invalid. + * + * ```ts + * x = new BigNumber(9876.54321) + * x.precision(6) // '9876.54' + * x.precision(6, BigNumber.ROUND_UP) // '9876.55' + * x.precision(2) // '9900' + * x.precision(2, 1) // '9800' + * x // '9876.54321' + * ``` + * + * @param significantDigits Significant digits, integer, 1 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + */ + precision(significantDigits: number, roundingMode?: BigNumber.RoundingMode): BigNumber; + + /** + * Returns the number of significant digits of the value of this BigNumber, + * or `null` if the value of this BigNumber is ±`Infinity` or `NaN`. + * + * If `includeZeros` is true then any trailing zeros of the integer part of + * the value of this BigNumber are counted as significant digits, otherwise + * they are not. + * + * Throws if `includeZeros` is invalid. + * + * ```ts + * x = new BigNumber(9876.54321) + * x.sd() // 9 + * y = new BigNumber(987000) + * y.sd(false) // 3 + * y.sd(true) // 6 + * ``` + * + * @param [includeZeros] Whether to include integer trailing zeros in the significant digit count. + */ + sd(includeZeros?: boolean): number; + + /** + * Returns a BigNumber whose value is the value of this BigNumber rounded to a precision of + * `significantDigits` significant digits using rounding mode `roundingMode`. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` will be used. + * + * Throws if `significantDigits` or `roundingMode` is invalid. + * + * ```ts + * x = new BigNumber(9876.54321) + * x.sd(6) // '9876.54' + * x.sd(6, BigNumber.ROUND_UP) // '9876.55' + * x.sd(2) // '9900' + * x.sd(2, 1) // '9800' + * x // '9876.54321' + * ``` + * + * @param significantDigits Significant digits, integer, 1 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + */ + sd(significantDigits: number, roundingMode?: BigNumber.RoundingMode): BigNumber; + + /** + * Returns a BigNumber whose value is the value of this BigNumber shifted by `n` places. + * + * The shift is of the decimal point, i.e. of powers of ten, and is to the left if `n` is negative + * or to the right if `n` is positive. + * + * The return value is always exact and unrounded. + * + * Throws if `n` is invalid. + * + * ```ts + * x = new BigNumber(1.23) + * x.shiftedBy(3) // '1230' + * x.shiftedBy(-3) // '0.00123' + * ``` + * + * @param n The shift value, integer, -9007199254740991 to 9007199254740991. + */ + shiftedBy(n: number): BigNumber; + + /** + * Returns a BigNumber whose value is the square root of the value of this BigNumber, rounded + * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. + * + * The return value will be correctly rounded, i.e. rounded as if the result was first calculated + * to an infinite number of correct digits before rounding. + * + * ```ts + * x = new BigNumber(16) + * x.squareRoot() // '4' + * y = new BigNumber(3) + * y.squareRoot() // '1.73205080756887729353' + * ``` + */ + squareRoot(): BigNumber; + + /** + * Returns a BigNumber whose value is the square root of the value of this BigNumber, rounded + * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. + * + * The return value will be correctly rounded, i.e. rounded as if the result was first calculated + * to an infinite number of correct digits before rounding. + * + * ```ts + * x = new BigNumber(16) + * x.sqrt() // '4' + * y = new BigNumber(3) + * y.sqrt() // '1.73205080756887729353' + * ``` + */ + sqrt(): BigNumber; + + /** + * Returns a string representing the value of this BigNumber in exponential notation rounded using + * rounding mode `roundingMode` to `decimalPlaces` decimal places, i.e with one digit before the + * decimal point and `decimalPlaces` digits after it. + * + * If the value of this BigNumber in exponential notation has fewer than `decimalPlaces` fraction + * digits, the return value will be appended with zeros accordingly. + * + * If `decimalPlaces` is omitted, the number of digits after the decimal point defaults to the + * minimum number of digits necessary to represent the value exactly. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` is used. + * + * Throws if `decimalPlaces` or `roundingMode` is invalid. + * + * ```ts + * x = 45.6 + * y = new BigNumber(x) + * x.toExponential() // '4.56e+1' + * y.toExponential() // '4.56e+1' + * x.toExponential(0) // '5e+1' + * y.toExponential(0) // '5e+1' + * x.toExponential(1) // '4.6e+1' + * y.toExponential(1) // '4.6e+1' + * y.toExponential(1, 1) // '4.5e+1' (ROUND_DOWN) + * x.toExponential(3) // '4.560e+1' + * y.toExponential(3) // '4.560e+1' + * ``` + * + * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + */ + toExponential(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): string; + toExponential(): string; + + /** + * Returns a string representing the value of this BigNumber in normal (fixed-point) notation + * rounded to `decimalPlaces` decimal places using rounding mode `roundingMode`. + * + * If the value of this BigNumber in normal notation has fewer than `decimalPlaces` fraction + * digits, the return value will be appended with zeros accordingly. + * + * Unlike `Number.prototype.toFixed`, which returns exponential notation if a number is greater or + * equal to 10**21, this method will always return normal notation. + * + * If `decimalPlaces` is omitted, the return value will be unrounded and in normal notation. + * This is also unlike `Number.prototype.toFixed`, which returns the value to zero decimal places. + * It is useful when normal notation is required and the current `EXPONENTIAL_AT` setting causes + * `toString` to return exponential notation. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` is used. + * + * Throws if `decimalPlaces` or `roundingMode` is invalid. + * + * ```ts + * x = 3.456 + * y = new BigNumber(x) + * x.toFixed() // '3' + * y.toFixed() // '3.456' + * y.toFixed(0) // '3' + * x.toFixed(2) // '3.46' + * y.toFixed(2) // '3.46' + * y.toFixed(2, 1) // '3.45' (ROUND_DOWN) + * x.toFixed(5) // '3.45600' + * y.toFixed(5) // '3.45600' + * ``` + * + * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + */ + toFixed(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): string; + toFixed(): string; + + /** + * Returns a string representing the value of this BigNumber in normal (fixed-point) notation + * rounded to `decimalPlaces` decimal places using rounding mode `roundingMode`, and formatted + * according to the properties of the `format` or `FORMAT` object. + * + * The formatting object may contain some or all of the properties shown in the examples below. + * + * If `decimalPlaces` is omitted, then the return value is not rounded to a fixed number of + * decimal places. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` is used. + * + * If `format` is omitted, `FORMAT` is used. + * + * Throws if `decimalPlaces`, `roundingMode`, or `format` is invalid. + * + * ```ts + * fmt = { + * decimalSeparator: '.', + * groupSeparator: ',', + * groupSize: 3, + * secondaryGroupSize: 0, + * fractionGroupSeparator: ' ', + * fractionGroupSize: 0 + * } + * + * x = new BigNumber('123456789.123456789') + * + * // Set the global formatting options + * BigNumber.config({ FORMAT: fmt }) + * + * x.toFormat() // '123,456,789.123456789' + * x.toFormat(3) // '123,456,789.123' + * + * // If a reference to the object assigned to FORMAT has been retained, + * // the format properties can be changed directly + * fmt.groupSeparator = ' ' + * fmt.fractionGroupSize = 5 + * x.toFormat() // '123 456 789.12345 6789' + * + * // Alternatively, pass the formatting options as an argument + * fmt = { + * decimalSeparator: ',', + * groupSeparator: '.', + * groupSize: 3, + * secondaryGroupSize: 2 + * } + * + * x.toFormat() // '123 456 789.12345 6789' + * x.toFormat(fmt) // '12.34.56.789,123456789' + * x.toFormat(2, fmt) // '12.34.56.789,12' + * x.toFormat(3, BigNumber.ROUND_UP, fmt) // '12.34.56.789,124' + * ``` + * + * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. + * @param [roundingMode] Rounding mode, integer, 0 to 8. + * @param [format] Formatting options object. See `BigNumber.Format`. + */ + toFormat(decimalPlaces: number, roundingMode: BigNumber.RoundingMode, format?: BigNumber.Format): string; + toFormat(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): string; + toFormat(decimalPlaces?: number): string; + toFormat(decimalPlaces: number, format: BigNumber.Format): string; + toFormat(format: BigNumber.Format): string; + + /** + * Returns an array of two BigNumbers representing the value of this BigNumber as a simple + * fraction with an integer numerator and an integer denominator. + * The denominator will be a positive non-zero value less than or equal to `max_denominator`. + * If a maximum denominator, `max_denominator`, is not specified, the denominator will be the + * lowest value necessary to represent the number exactly. + * + * Throws if `max_denominator` is invalid. + * + * ```ts + * x = new BigNumber(1.75) + * x.toFraction() // '7, 4' + * + * pi = new BigNumber('3.14159265358') + * pi.toFraction() // '157079632679,50000000000' + * pi.toFraction(100000) // '312689, 99532' + * pi.toFraction(10000) // '355, 113' + * pi.toFraction(100) // '311, 99' + * pi.toFraction(10) // '22, 7' + * pi.toFraction(1) // '3, 1' + * ``` + * + * @param [max_denominator] The maximum denominator, integer > 0, or Infinity. + */ + toFraction(max_denominator?: BigNumber.Value): [BigNumber, BigNumber]; + + /** As `valueOf`. */ + toJSON(): string; + + /** + * Returns the value of this BigNumber as a JavaScript primitive number. + * + * Using the unary plus operator gives the same result. + * + * ```ts + * x = new BigNumber(456.789) + * x.toNumber() // 456.789 + * +x // 456.789 + * + * y = new BigNumber('45987349857634085409857349856430985') + * y.toNumber() // 4.598734985763409e+34 + * + * z = new BigNumber(-0) + * 1 / z.toNumber() // -Infinity + * 1 / +z // -Infinity + * ``` + */ + toNumber(): number; + + /** + * Returns a string representing the value of this BigNumber rounded to `significantDigits` + * significant digits using rounding mode `roundingMode`. + * + * If `significantDigits` is less than the number of digits necessary to represent the integer + * part of the value in normal (fixed-point) notation, then exponential notation is used. + * + * If `significantDigits` is omitted, then the return value is the same as `n.toString()`. + * + * If `roundingMode` is omitted, `ROUNDING_MODE` is used. + * + * Throws if `significantDigits` or `roundingMode` is invalid. + * + * ```ts + * x = 45.6 + * y = new BigNumber(x) + * x.toPrecision() // '45.6' + * y.toPrecision() // '45.6' + * x.toPrecision(1) // '5e+1' + * y.toPrecision(1) // '5e+1' + * y.toPrecision(2, 0) // '4.6e+1' (ROUND_UP) + * y.toPrecision(2, 1) // '4.5e+1' (ROUND_DOWN) + * x.toPrecision(5) // '45.600' + * y.toPrecision(5) // '45.600' + * ``` + * + * @param [significantDigits] Significant digits, integer, 1 to 1e+9. + * @param [roundingMode] Rounding mode, integer 0 to 8. + */ + toPrecision(significantDigits: number, roundingMode?: BigNumber.RoundingMode): string; + toPrecision(): string; + + /** + * Returns a string representing the value of this BigNumber in base `base`, or base 10 if `base` + * is omitted. + * + * For bases above 10, and using the default base conversion alphabet (see `ALPHABET`), values + * from 10 to 35 are represented by a-z (the same as `Number.prototype.toString`). + * + * If a base is specified the value is rounded according to the current `DECIMAL_PLACES` and + * `ROUNDING_MODE` settings, otherwise it is not. + * + * If a base is not specified, and this BigNumber has a positive exponent that is equal to or + * greater than the positive component of the current `EXPONENTIAL_AT` setting, or a negative + * exponent equal to or less than the negative component of the setting, then exponential notation + * is returned. + * + * Throws if `base` is invalid. + * + * ```ts + * x = new BigNumber(750000) + * x.toString() // '750000' + * BigNumber.config({ EXPONENTIAL_AT: 5 }) + * x.toString() // '7.5e+5' + * + * y = new BigNumber(362.875) + * y.toString(2) // '101101010.111' + * y.toString(9) // '442.77777777777777777778' + * y.toString(32) // 'ba.s' + * + * BigNumber.config({ DECIMAL_PLACES: 4 }); + * z = new BigNumber('1.23456789') + * z.toString() // '1.23456789' + * z.toString(10) // '1.2346' + * ``` + * + * @param [base] The base, integer, 2 to 36 (or `ALPHABET.length`, see `ALPHABET`). + */ + toString(base?: number): string; + + /** + * As `toString`, but does not accept a base argument and includes the minus sign for negative + * zero. + * + * ``ts + * x = new BigNumber('-0') + * x.toString() // '0' + * x.valueOf() // '-0' + * y = new BigNumber('1.777e+457') + * y.valueOf() // '1.777e+457' + * ``` + */ + valueOf(): string; + + /** Helps ES6 import. */ + private static readonly default: BigNumber.Constructor; + + /** Helps ES6 import. */ + private static readonly BigNumber: BigNumber.Constructor; + + /** Rounds away from zero. */ + static readonly ROUND_UP: 0; + + /** Rounds towards zero. */ + static readonly ROUND_DOWN: 1; + + /** Rounds towards Infinity. */ + static readonly ROUND_CEIL: 2; + + /** Rounds towards -Infinity. */ + static readonly ROUND_FLOOR: 3; + + /** Rounds towards nearest neighbour. If equidistant, rounds away from zero . */ + static readonly ROUND_HALF_UP: 4; + + /** Rounds towards nearest neighbour. If equidistant, rounds towards zero. */ + static readonly ROUND_HALF_DOWN: 5; + + /** Rounds towards nearest neighbour. If equidistant, rounds towards even neighbour. */ + static readonly ROUND_HALF_EVEN: 6; + + /** Rounds towards nearest neighbour. If equidistant, rounds towards Infinity. */ + static readonly ROUND_HALF_CEIL: 7; + + /** Rounds towards nearest neighbour. If equidistant, rounds towards -Infinity. */ + static readonly ROUND_HALF_FLOOR: 8; + + /** See `MODULO_MODE`. */ + static readonly EUCLID: 9; + + /** + * To aid in debugging, if a `BigNumber.DEBUG` property is `true` then an error will be thrown + * if the BigNumber constructor receives an invalid `BigNumber.Value`, or if `BigNumber.isBigNumber` + * receives a BigNumber instance that is malformed. + * + * ```ts + * // No error, and BigNumber NaN is returned. + * new BigNumber('blurgh') // 'NaN' + * new BigNumber(9, 2) // 'NaN' + * BigNumber.DEBUG = true + * new BigNumber('blurgh') // '[BigNumber Error] Not a number' + * new BigNumber(9, 2) // '[BigNumber Error] Not a base 2 number' + * ``` + * + * An error will also be thrown if a `BigNumber.Value` is of type number with more than 15 + * significant digits, as calling `toString` or `valueOf` on such numbers may not result + * in the intended value. + * + * ```ts + * console.log(823456789123456.3) // 823456789123456.2 + * // No error, and the returned BigNumber does not have the same value as the number literal. + * new BigNumber(823456789123456.3) // '823456789123456.2' + * BigNumber.DEBUG = true + * new BigNumber(823456789123456.3) + * // '[BigNumber Error] Number primitive has more than 15 significant digits' + * ``` + * + * Check that a BigNumber instance is well-formed: + * + * ```ts + * x = new BigNumber(10) + * + * BigNumber.DEBUG = false + * // Change x.c to an illegitimate value. + * x.c = NaN + * // No error, as BigNumber.DEBUG is false. + * BigNumber.isBigNumber(x) // true + * + * BigNumber.DEBUG = true + * BigNumber.isBigNumber(x) // '[BigNumber Error] Invalid BigNumber' + * ``` + */ + static DEBUG?: boolean; + + /** + * Returns a new independent BigNumber constructor with configuration as described by `object`, or + * with the default configuration if object is omitted. + * + * Throws if `object` is not an object. + * + * ```ts + * BigNumber.config({ DECIMAL_PLACES: 5 }) + * BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) + * + * x = new BigNumber(1) + * y = new BN(1) + * + * x.div(3) // 0.33333 + * y.div(3) // 0.333333333 + * + * // BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) is equivalent to: + * BN = BigNumber.clone() + * BN.config({ DECIMAL_PLACES: 9 }) + * ``` + * + * @param [object] The configuration object. + */ + static clone(object?: BigNumber.Config): BigNumber.Constructor; + + /** + * Configures the settings that apply to this BigNumber constructor. + * + * The configuration object, `object`, contains any number of the properties shown in the example + * below. + * + * Returns an object with the above properties and their current values. + * + * Throws if `object` is not an object, or if an invalid value is assigned to one or more of the + * properties. + * + * ```ts + * BigNumber.config({ + * DECIMAL_PLACES: 40, + * ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL, + * EXPONENTIAL_AT: [-10, 20], + * RANGE: [-500, 500], + * CRYPTO: true, + * MODULO_MODE: BigNumber.ROUND_FLOOR, + * POW_PRECISION: 80, + * FORMAT: { + * groupSize: 3, + * groupSeparator: ' ', + * decimalSeparator: ',' + * }, + * ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' + * }); + * + * BigNumber.config().DECIMAL_PLACES // 40 + * ``` + * + * @param object The configuration object. + */ + static config(object?: BigNumber.Config): BigNumber.Config; + + /** + * Returns `true` if `value` is a BigNumber instance, otherwise returns `false`. + * + * If `BigNumber.DEBUG` is `true`, throws if a BigNumber instance is not well-formed. + * + * ```ts + * x = 42 + * y = new BigNumber(x) + * + * BigNumber.isBigNumber(x) // false + * y instanceof BigNumber // true + * BigNumber.isBigNumber(y) // true + * + * BN = BigNumber.clone(); + * z = new BN(x) + * z instanceof BigNumber // false + * BigNumber.isBigNumber(z) // true + * ``` + * + * @param value The value to test. + */ + static isBigNumber(value: any): value is BigNumber; + + /** + * Returns a BigNumber whose value is the maximum of the arguments. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber('3257869345.0378653') + * BigNumber.maximum(4e9, x, '123456789.9') // '4000000000' + * + * arr = [12, '13', new BigNumber(14)] + * BigNumber.maximum.apply(null, arr) // '14' + * ``` + * + * @param n A numeric value. + */ + static maximum(...n: BigNumber.Value[]): BigNumber; + + /** + * Returns a BigNumber whose value is the maximum of the arguments. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber('3257869345.0378653') + * BigNumber.max(4e9, x, '123456789.9') // '4000000000' + * + * arr = [12, '13', new BigNumber(14)] + * BigNumber.max.apply(null, arr) // '14' + * ``` + * + * @param n A numeric value. + */ + static max(...n: BigNumber.Value[]): BigNumber; + + /** + * Returns a BigNumber whose value is the minimum of the arguments. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber('3257869345.0378653') + * BigNumber.minimum(4e9, x, '123456789.9') // '123456789.9' + * + * arr = [2, new BigNumber(-14), '-15.9999', -12] + * BigNumber.minimum.apply(null, arr) // '-15.9999' + * ``` + * + * @param n A numeric value. + */ + static minimum(...n: BigNumber.Value[]): BigNumber; + + /** + * Returns a BigNumber whose value is the minimum of the arguments. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber('3257869345.0378653') + * BigNumber.min(4e9, x, '123456789.9') // '123456789.9' + * + * arr = [2, new BigNumber(-14), '-15.9999', -12] + * BigNumber.min.apply(null, arr) // '-15.9999' + * ``` + * + * @param n A numeric value. + */ + static min(...n: BigNumber.Value[]): BigNumber; + + /** + * Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and less than 1. + * + * The return value will have `decimalPlaces` decimal places, or less if trailing zeros are + * produced. If `decimalPlaces` is omitted, the current `DECIMAL_PLACES` setting will be used. + * + * Depending on the value of this BigNumber constructor's `CRYPTO` setting and the support for the + * `crypto` object in the host environment, the random digits of the return value are generated by + * either `Math.random` (fastest), `crypto.getRandomValues` (Web Cryptography API in recent + * browsers) or `crypto.randomBytes` (Node.js). + * + * To be able to set `CRYPTO` to true when using Node.js, the `crypto` object must be available + * globally: + * + * ```ts + * global.crypto = require('crypto') + * ``` + * + * If `CRYPTO` is true, i.e. one of the `crypto` methods is to be used, the value of a returned + * BigNumber should be cryptographically secure and statistically indistinguishable from a random + * value. + * + * Throws if `decimalPlaces` is invalid. + * + * ```ts + * BigNumber.config({ DECIMAL_PLACES: 10 }) + * BigNumber.random() // '0.4117936847' + * BigNumber.random(20) // '0.78193327636914089009' + * ``` + * + * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. + */ + static random(decimalPlaces?: number): BigNumber; + + /** + * Returns a BigNumber whose value is the sum of the arguments. + * + * The return value is always exact and unrounded. + * + * ```ts + * x = new BigNumber('3257869345.0378653') + * BigNumber.sum(4e9, x, '123456789.9') // '7381326134.9378653' + * + * arr = [2, new BigNumber(14), '15.9999', 12] + * BigNumber.sum.apply(null, arr) // '43.9999' + * ``` + * + * @param n A numeric value. + */ + static sum(...n: BigNumber.Value[]): BigNumber; + + /** + * Configures the settings that apply to this BigNumber constructor. + * + * The configuration object, `object`, contains any number of the properties shown in the example + * below. + * + * Returns an object with the above properties and their current values. + * + * Throws if `object` is not an object, or if an invalid value is assigned to one or more of the + * properties. + * + * ```ts + * BigNumber.set({ + * DECIMAL_PLACES: 40, + * ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL, + * EXPONENTIAL_AT: [-10, 20], + * RANGE: [-500, 500], + * CRYPTO: true, + * MODULO_MODE: BigNumber.ROUND_FLOOR, + * POW_PRECISION: 80, + * FORMAT: { + * groupSize: 3, + * groupSeparator: ' ', + * decimalSeparator: ',' + * }, + * ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' + * }); + * + * BigNumber.set().DECIMAL_PLACES // 40 + * ``` + * + * @param object The configuration object. + */ + static set(object?: BigNumber.Config): BigNumber.Config; +} + +declare function BigNumber(n: BigNumber.Value, base?: number): BigNumber; diff --git a/node_modules/buffer/AUTHORS.md b/node_modules/buffer/AUTHORS.md new file mode 100644 index 00000000..468aa190 --- /dev/null +++ b/node_modules/buffer/AUTHORS.md @@ -0,0 +1,73 @@ +# Authors + +#### Ordered by first contribution. + +- Romain Beauxis (toots@rastageeks.org) +- Tobias Koppers (tobias.koppers@googlemail.com) +- Janus (ysangkok@gmail.com) +- Rainer Dreyer (rdrey1@gmail.com) +- Tõnis Tiigi (tonistiigi@gmail.com) +- James Halliday (mail@substack.net) +- Michael Williamson (mike@zwobble.org) +- elliottcable (github@elliottcable.name) +- rafael (rvalle@livelens.net) +- Andrew Kelley (superjoe30@gmail.com) +- Andreas Madsen (amwebdk@gmail.com) +- Mike Brevoort (mike.brevoort@pearson.com) +- Brian White (mscdex@mscdex.net) +- Feross Aboukhadijeh (feross@feross.org) +- Ruben Verborgh (ruben@verborgh.org) +- eliang (eliang.cs@gmail.com) +- Jesse Tane (jesse.tane@gmail.com) +- Alfonso Boza (alfonso@cloud.com) +- Mathias Buus (mathiasbuus@gmail.com) +- Devon Govett (devongovett@gmail.com) +- Daniel Cousens (github@dcousens.com) +- Joseph Dykstra (josephdykstra@gmail.com) +- Parsha Pourkhomami (parshap+git@gmail.com) +- Damjan Košir (damjan.kosir@gmail.com) +- daverayment (dave.rayment@gmail.com) +- kawanet (u-suke@kawa.net) +- Linus Unnebäck (linus@folkdatorn.se) +- Nolan Lawson (nolan.lawson@gmail.com) +- Calvin Metcalf (calvin.metcalf@gmail.com) +- Koki Takahashi (hakatasiloving@gmail.com) +- Guy Bedford (guybedford@gmail.com) +- Jan Schär (jscissr@gmail.com) +- RaulTsc (tomescu.raul@gmail.com) +- Matthieu Monsch (monsch@alum.mit.edu) +- Dan Ehrenberg (littledan@chromium.org) +- Kirill Fomichev (fanatid@ya.ru) +- Yusuke Kawasaki (u-suke@kawa.net) +- DC (dcposch@dcpos.ch) +- John-David Dalton (john.david.dalton@gmail.com) +- adventure-yunfei (adventure030@gmail.com) +- Emil Bay (github@tixz.dk) +- Sam Sudar (sudar.sam@gmail.com) +- Volker Mische (volker.mische@gmail.com) +- David Walton (support@geekstocks.com) +- Сковорода Никита Андреевич (chalkerx@gmail.com) +- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com) +- ukstv (sergey.ukustov@machinomy.com) +- Renée Kooi (renee@kooi.me) +- ranbochen (ranbochen@qq.com) +- Vladimir Borovik (bobahbdb@gmail.com) +- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com) +- kumavis (aaron@kumavis.me) +- Sergey Ukustov (sergey.ukustov@machinomy.com) +- Fei Liu (liu.feiwood@gmail.com) +- Blaine Bublitz (blaine.bublitz@gmail.com) +- clement (clement@seald.io) +- Koushik Dutta (koushd@gmail.com) +- Jordan Harband (ljharb@gmail.com) +- Niklas Mischkulnig (mischnic@users.noreply.github.com) +- Nikolai Vavilov (vvnicholas@gmail.com) +- Fedor Nezhivoi (gyzerok@users.noreply.github.com) +- shuse2 (shus.toda@gmail.com) +- Peter Newman (peternewman@users.noreply.github.com) +- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com) +- jkkang (jkkang@smartauth.kr) +- Deklan Webster (deklanw@gmail.com) +- Martin Heidegger (martin.heidegger@gmail.com) + +#### Generated by bin/update-authors.sh. diff --git a/node_modules/buffer/LICENSE b/node_modules/buffer/LICENSE new file mode 100644 index 00000000..d6bf75dc --- /dev/null +++ b/node_modules/buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh, and other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/buffer/README.md b/node_modules/buffer/README.md new file mode 100644 index 00000000..451e2357 --- /dev/null +++ b/node_modules/buffer/README.md @@ -0,0 +1,410 @@ +# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/buffer/master.svg +[travis-url]: https://travis-ci.org/feross/buffer +[npm-image]: https://img.shields.io/npm/v/buffer.svg +[npm-url]: https://npmjs.org/package/buffer +[downloads-image]: https://img.shields.io/npm/dm/buffer.svg +[downloads-url]: https://npmjs.org/package/buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### The buffer module from [node.js](https://nodejs.org/), for the browser. + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg +[saucelabs-url]: https://saucelabs.com/u/buffer + +With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module. + +The goal is to provide an API that is 100% identical to +[node's Buffer API](https://nodejs.org/api/buffer.html). Read the +[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, +instance methods, and class methods that are supported. + +## features + +- Manipulate binary data like a boss, in all browsers! +- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`) +- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments) +- Excellent browser support (Chrome, Firefox, Edge, Safari 11+, iOS 11+, Android, etc.) +- Preserves Node API exactly, with one minor difference (see below) +- Square-bracket `buf[4]` notation works! +- Does not modify any browser prototypes or put anything on `window` +- Comprehensive test suite (including all buffer tests from node.js core) + +## install + +To use this module directly (without browserify), install it: + +```bash +npm install buffer +``` + +This module was previously called **native-buffer-browserify**, but please use **buffer** +from now on. + +If you do not use a bundler, you can use the [standalone script](https://bundle.run/buffer). + +## usage + +The module's API is identical to node's `Buffer` API. Read the +[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, +instance methods, and class methods that are supported. + +As mentioned above, `require('buffer')` or use the `Buffer` global with +[browserify](http://browserify.org) and this module will automatically be included +in your bundle. Almost any npm module will work in the browser, even if it assumes that +the node `Buffer` API will be available. + +To depend on this module explicitly (without browserify), require it like this: + +```js +var Buffer = require('buffer/').Buffer // note: the trailing slash is important! +``` + +To require this module explicitly, use `require('buffer/')` which tells the node.js module +lookup algorithm (also used by browserify) to use the **npm module** named `buffer` +instead of the **node.js core** module named `buffer`! + + +## how does it work? + +The Buffer constructor returns instances of `Uint8Array` that have their prototype +changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`, +so the returned instances will have all the node `Buffer` methods and the +`Uint8Array` methods. Square bracket notation works as expected -- it returns a +single octet. + +The `Uint8Array` prototype remains unmodified. + + +## tracking the latest node api + +This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer +API is considered **stable** in the +[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index), +so it is unlikely that there will ever be breaking changes. +Nonetheless, when/if the Buffer API changes in node, this module's API will change +accordingly. + +## related packages + +- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer +- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer +- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package + +## conversion packages + +### convert typed array to buffer + +Use [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast. + +### convert buffer to typed array + +`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`. + +### convert blob to buffer + +Use [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`. + +### convert buffer to blob + +To convert a `Buffer` to a `Blob`, use the `Blob` constructor: + +```js +var blob = new Blob([ buffer ]) +``` + +Optionally, specify a mimetype: + +```js +var blob = new Blob([ buffer ], { type: 'text/html' }) +``` + +### convert arraybuffer to buffer + +To convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast. + +```js +var buffer = Buffer.from(arrayBuffer) +``` + +### convert buffer to arraybuffer + +To convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects): + +```js +var arrayBuffer = buffer.buffer.slice( + buffer.byteOffset, buffer.byteOffset + buffer.byteLength +) +``` + +Alternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module. + +## performance + +See perf tests in `/perf`. + +`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a +sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will +always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module, +which is included to compare against. + +NOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README. + +### Chrome 38 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ | +| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | | +| | | | | +| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | | +| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | | +| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | | +| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | | +| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | | +| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ | +| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | | +| | | | | +| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ | +| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | | +| | | | | +| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ | +| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | | +| | | | | +| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | | +| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | | +| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ | + + +### Firefox 33 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | | +| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ | +| | | | | +| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | | +| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | | +| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | | +| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | | +| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | | +| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | | +| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ | +| | | | | +| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | | +| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ | +| | | | | +| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ | +| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | | +| | | | | +| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | | +| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | | +| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ | + +### Safari 8 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ | +| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | | +| | | | | +| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | | +| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | | +| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | | +| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | | +| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | | +| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | | +| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ | +| | | | | +| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | | +| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ | +| | | | | +| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | | +| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ | +| | | | | +| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | | +| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | | +| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ | + + +### Node 0.11.14 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | | +| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ | +| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | | +| | | | | +| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | | +| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ | +| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | | +| | | | | +| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | | +| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ | +| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | | +| | | | | +| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | | +| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ | +| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | | +| | | | | +| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | | +| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | | +| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | | +| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ | +| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | | +| | | | | +| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ | +| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | | +| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | | +| | | | | +| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ | +| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | | +| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | | +| | | | | +| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | | +| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | | +| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ | +| | | | | +| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | | +| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ | +| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | | +| | | | | +| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | | +| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ | +| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | | + +### iojs 1.8.1 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | | +| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | | +| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ | +| | | | | +| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | | +| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | | +| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | | +| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | | +| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | | +| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ | +| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | | +| | | | | +| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | | +| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | | +| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | | +| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ | +| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | | +| | | | | +| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ | +| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | | +| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | | +| | | | | +| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ | +| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | | +| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | | +| | | | | +| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | | +| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | | +| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ | +| | | | | +| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | | +| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | | +| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | | +| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ | +| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | | +| | | | | + +## Testing the project + +First, install the project: + + npm install + +Then, to run tests in Node.js, run: + + npm run test-node + +To test locally in a browser, you can run: + + npm run test-browser-es5-local # For ES5 browsers that don't support ES6 + npm run test-browser-es6-local # For ES6 compliant browsers + +This will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap). + +To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run: + + npm test + +This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files. + +## JavaScript Standard Style + +This module uses [JavaScript Standard Style](https://github.com/feross/standard). + +[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) + +To test that the code conforms to the style, `npm install` and run: + + ./node_modules/.bin/standard + +## credit + +This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify). + +## Security Policies and Procedures + +The `buffer` team and community take all security bugs in `buffer` seriously. Please see our [security policies and procedures](https://github.com/feross/security) document to learn how to report issues. + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis. diff --git a/node_modules/buffer/index.d.ts b/node_modules/buffer/index.d.ts new file mode 100644 index 00000000..07096a2f --- /dev/null +++ b/node_modules/buffer/index.d.ts @@ -0,0 +1,194 @@ +export class Buffer extends Uint8Array { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readBigUInt64LE(offset: number): BigInt; + readBigUInt64BE(offset: number): BigInt; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readBigInt64LE(offset: number): BigInt; + readBigInt64BE(offset: number): BigInt; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + reverse(): this; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeBigUInt64LE(value: number, offset: number): BigInt; + writeBigUInt64BE(value: number, offset: number): BigInt; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeBigInt64LE(value: number, offset: number): BigInt; + writeBigInt64BE(value: number, offset: number): BigInt; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer | Uint8Array): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Uint8Array[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Uint8Array, buf2: Uint8Array): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initializing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; +} diff --git a/node_modules/buffer/index.js b/node_modules/buffer/index.js new file mode 100644 index 00000000..7a0e9c2a --- /dev/null +++ b/node_modules/buffer/index.js @@ -0,0 +1,2106 @@ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +const base64 = require('base64-js') +const ieee754 = require('ieee754') +const customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +const K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + const arr = new Uint8Array(1) + const proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + const buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + const valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + const b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + const length = byteLength(string, encoding) | 0 + let buf = createBuffer(length) + + const actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + const length = array.length < 0 ? 0 : checked(array.length) | 0 + const buf = createBuffer(length) + for (let i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + const copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + let buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + const len = checked(obj.length) | 0 + const buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + let x = a.length + let y = b.length + + for (let i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + let i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + const buffer = Buffer.allocUnsafe(length) + let pos = 0 + for (i = 0; i < list.length; ++i) { + let buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + buf.copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + const len = string.length + const mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + let loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + let loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + const i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + const len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (let i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + const len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (let i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + const len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (let i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + const length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + let str = '' + const max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + let x = thisEnd - thisStart + let y = end - start + const len = Math.min(x, y) + + const thisCopy = this.slice(thisStart, thisEnd) + const targetCopy = target.slice(start, end) + + for (let i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + let indexSize = 1 + let arrLength = arr.length + let valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + let i + if (dir) { + let foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + let found = true + for (let j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + const remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + const strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + let i + for (i = 0; i < length; ++i) { + const parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + const remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + let loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + const res = [] + + let i = start + while (i < end) { + const firstByte = buf[i] + let codePoint = null + let bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + let secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +const MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + const len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + let res = '' + let i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + const len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + let out = '' + for (let i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + const bytes = buf.slice(start, end) + let res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (let i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + const len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + const newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + let val = this[offset + --byteLength] + let mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const lo = first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24 + + const hi = this[++offset] + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + last * 2 ** 24 + + return BigInt(lo) + (BigInt(hi) << BigInt(32)) +}) + +Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const hi = first * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + const lo = this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last + + return (BigInt(hi) << BigInt(32)) + BigInt(lo) +}) + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let i = byteLength + let mul = 1 + let val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = this[offset + 4] + + this[offset + 5] * 2 ** 8 + + this[offset + 6] * 2 ** 16 + + (last << 24) // Overflow + + return (BigInt(val) << BigInt(32)) + + BigInt(first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24) +}) + +Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = (first << 24) + // Overflow + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + return (BigInt(val) << BigInt(32)) + + BigInt(this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last) +}) + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let mul = 1 + let i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let i = byteLength - 1 + let mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function wrtBigUInt64LE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + return offset +} + +function wrtBigUInt64BE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset + 7] = lo + lo = lo >> 8 + buf[offset + 6] = lo + lo = lo >> 8 + buf[offset + 5] = lo + lo = lo >> 8 + buf[offset + 4] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset + 3] = hi + hi = hi >> 8 + buf[offset + 2] = hi + hi = hi >> 8 + buf[offset + 1] = hi + hi = hi >> 8 + buf[offset] = hi + return offset + 8 +} + +Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = 0 + let mul = 1 + let sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = byteLength - 1 + let mul = 1 + let sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + const len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + const code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + let i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + const bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + const len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// CUSTOM ERRORS +// ============= + +// Simplified versions from Node, changed for Buffer-only usage +const errors = {} +function E (sym, getMessage, Base) { + errors[sym] = class NodeError extends Base { + constructor () { + super() + + Object.defineProperty(this, 'message', { + value: getMessage.apply(this, arguments), + writable: true, + configurable: true + }) + + // Add the error code to the name to include it in the stack trace. + this.name = `${this.name} [${sym}]` + // Access the stack to generate the error message including the error code + // from the name. + this.stack // eslint-disable-line no-unused-expressions + // Reset the name to the actual name. + delete this.name + } + + get code () { + return sym + } + + set code (value) { + Object.defineProperty(this, 'code', { + configurable: true, + enumerable: true, + value, + writable: true + }) + } + + toString () { + return `${this.name} [${sym}]: ${this.message}` + } + } +} + +E('ERR_BUFFER_OUT_OF_BOUNDS', + function (name) { + if (name) { + return `${name} is outside of buffer bounds` + } + + return 'Attempt to access memory outside buffer bounds' + }, RangeError) +E('ERR_INVALID_ARG_TYPE', + function (name, actual) { + return `The "${name}" argument must be of type number. Received type ${typeof actual}` + }, TypeError) +E('ERR_OUT_OF_RANGE', + function (str, range, input) { + let msg = `The value of "${str}" is out of range.` + let received = input + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { + received = addNumericalSeparator(String(input)) + } else if (typeof input === 'bigint') { + received = String(input) + if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { + received = addNumericalSeparator(received) + } + received += 'n' + } + msg += ` It must be ${range}. Received ${received}` + return msg + }, RangeError) + +function addNumericalSeparator (val) { + let res = '' + let i = val.length + const start = val[0] === '-' ? 1 : 0 + for (; i >= start + 4; i -= 3) { + res = `_${val.slice(i - 3, i)}${res}` + } + return `${val.slice(0, i)}${res}` +} + +// CHECK FUNCTIONS +// =============== + +function checkBounds (buf, offset, byteLength) { + validateNumber(offset, 'offset') + if (buf[offset] === undefined || buf[offset + byteLength] === undefined) { + boundsError(offset, buf.length - (byteLength + 1)) + } +} + +function checkIntBI (value, min, max, buf, offset, byteLength) { + if (value > max || value < min) { + const n = typeof min === 'bigint' ? 'n' : '' + let range + if (byteLength > 3) { + if (min === 0 || min === BigInt(0)) { + range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}` + } else { + range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + + `${(byteLength + 1) * 8 - 1}${n}` + } + } else { + range = `>= ${min}${n} and <= ${max}${n}` + } + throw new errors.ERR_OUT_OF_RANGE('value', range, value) + } + checkBounds(buf, offset, byteLength) +} + +function validateNumber (value, name) { + if (typeof value !== 'number') { + throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value) + } +} + +function boundsError (value, length, type) { + if (Math.floor(value) !== value) { + validateNumber(value, type) + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value) + } + + if (length < 0) { + throw new errors.ERR_BUFFER_OUT_OF_BOUNDS() + } + + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', + `>= ${type ? 1 : 0} and <= ${length}`, + value) +} + +// HELPER FUNCTIONS +// ================ + +const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + let codePoint + const length = string.length + let leadSurrogate = null + const bytes = [] + + for (let i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + let c, hi, lo + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + let i + for (i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +const hexSliceLookupTable = (function () { + const alphabet = '0123456789abcdef' + const table = new Array(256) + for (let i = 0; i < 16; ++i) { + const i16 = i * 16 + for (let j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +// Return not function with Error if BigInt not supported +function defineBigIntMethod (fn) { + return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn +} + +function BufferBigIntNotDefined () { + throw new Error('BigInt not supported') +} diff --git a/node_modules/buffer/package.json b/node_modules/buffer/package.json new file mode 100644 index 00000000..ca1ad9a7 --- /dev/null +++ b/node_modules/buffer/package.json @@ -0,0 +1,93 @@ +{ + "name": "buffer", + "description": "Node.js Buffer API, for the browser", + "version": "6.0.3", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/buffer/issues" + }, + "contributors": [ + "Romain Beauxis ", + "James Halliday " + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + }, + "devDependencies": { + "airtap": "^3.0.0", + "benchmark": "^2.1.4", + "browserify": "^17.0.0", + "concat-stream": "^2.0.0", + "hyperquest": "^2.1.3", + "is-buffer": "^2.0.5", + "is-nan": "^1.3.0", + "split": "^1.0.1", + "standard": "*", + "tape": "^5.0.1", + "through2": "^4.0.2", + "uglify-js": "^3.11.5" + }, + "homepage": "https://github.com/feross/buffer", + "jspm": { + "map": { + "./index.js": { + "node": "@node/buffer" + } + } + }, + "keywords": [ + "arraybuffer", + "browser", + "browserify", + "buffer", + "compatible", + "dataview", + "uint8array" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/buffer.git" + }, + "scripts": { + "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html", + "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js", + "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c", + "test": "standard && node ./bin/test.js", + "test-browser-old": "airtap -- test/*.js", + "test-browser-old-local": "airtap --local -- test/*.js", + "test-browser-new": "airtap -- test/*.js test/node/*.js", + "test-browser-new-local": "airtap --local -- test/*.js test/node/*.js", + "test-node": "tape test/*.js test/node/*.js", + "update-authors": "./bin/update-authors.sh" + }, + "standard": { + "ignore": [ + "test/node/**/*.js", + "test/common.js", + "test/_polyfill.js", + "perf/**/*.js" + ] + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/call-bind/.eslintignore b/node_modules/call-bind/.eslintignore new file mode 100644 index 00000000..404abb22 --- /dev/null +++ b/node_modules/call-bind/.eslintignore @@ -0,0 +1 @@ +coverage/ diff --git a/node_modules/call-bind/.eslintrc b/node_modules/call-bind/.eslintrc new file mode 100644 index 00000000..dfa9a6cd --- /dev/null +++ b/node_modules/call-bind/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + "no-magic-numbers": 0, + }, +} diff --git a/node_modules/call-bind/.github/FUNDING.yml b/node_modules/call-bind/.github/FUNDING.yml new file mode 100644 index 00000000..c70c2ecd --- /dev/null +++ b/node_modules/call-bind/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/call-bind +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/call-bind/.nycrc b/node_modules/call-bind/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/node_modules/call-bind/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/call-bind/CHANGELOG.md b/node_modules/call-bind/CHANGELOG.md new file mode 100644 index 00000000..be0de99f --- /dev/null +++ b/node_modules/call-bind/CHANGELOG.md @@ -0,0 +1,106 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.8](https://github.com/ljharb/call-bind/compare/v1.0.7...v1.0.8) - 2024-12-05 + +### Commits + +- [Refactor] extract out some helpers and avoid get-intrinsic usage [`407fd5e`](https://github.com/ljharb/call-bind/commit/407fd5eec34ec58394522a6ce3badfa4788fd5ae) +- [Refactor] replace code with extracted `call-bind-apply-helpers` [`81018fb`](https://github.com/ljharb/call-bind/commit/81018fb78902ff5acbc6c09300780e97f0db6a34) +- [Tests] use `set-function-length/env` [`0fc311d`](https://github.com/ljharb/call-bind/commit/0fc311de0e115cfa6b02969b23a42ad45aadf224) +- [actions] split out node 10-20, and 20+ [`77a0cad`](https://github.com/ljharb/call-bind/commit/77a0cad75f83f5b8050dc13baef4fa2cff537fa3) +- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `es-value-fixtures`, `gopd`, `object-inspect`, `tape` [`a145d10`](https://github.com/ljharb/call-bind/commit/a145d10fe847f350e11094f8541848b028ee8c91) +- [Tests] replace `aud` with `npm audit` [`30ca3dd`](https://github.com/ljharb/call-bind/commit/30ca3dd7234648eb029947477d06b17879e10727) +- [Deps] update `set-function-length` [`57c79a3`](https://github.com/ljharb/call-bind/commit/57c79a3666022ea797cc2a4a3b43fe089bc97d1b) +- [Dev Deps] add missing peer dep [`601cfa5`](https://github.com/ljharb/call-bind/commit/601cfa5540066b6206039ceb9496cecbd134ff7b) + +## [v1.0.7](https://github.com/ljharb/call-bind/compare/v1.0.6...v1.0.7) - 2024-02-12 + +### Commits + +- [Refactor] use `es-define-property` [`09b76a0`](https://github.com/ljharb/call-bind/commit/09b76a01634440461d44a80c9924ec4b500f3b03) +- [Deps] update `get-intrinsic`, `set-function-length` [`ad5136d`](https://github.com/ljharb/call-bind/commit/ad5136ddda2a45c590959829ad3dce0c9f4e3590) + +## [v1.0.6](https://github.com/ljharb/call-bind/compare/v1.0.5...v1.0.6) - 2024-02-05 + +### Commits + +- [Dev Deps] update `aud`, `npmignore`, `tape` [`d564d5c`](https://github.com/ljharb/call-bind/commit/d564d5ce3e06a19df4d499c77f8d1a9da44e77aa) +- [Deps] update `get-intrinsic`, `set-function-length` [`cfc2bdc`](https://github.com/ljharb/call-bind/commit/cfc2bdca7b633df0e0e689e6b637f668f1c6792e) +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`64cd289`](https://github.com/ljharb/call-bind/commit/64cd289ae5862c250a4ca80aa8d461047c166af5) +- [meta] add missing `engines.node` [`32a4038`](https://github.com/ljharb/call-bind/commit/32a4038857b62179f7f9b7b3df2c5260036be582) + +## [v1.0.5](https://github.com/ljharb/call-bind/compare/v1.0.4...v1.0.5) - 2023-10-19 + +### Commits + +- [Fix] throw an error on non-functions as early as possible [`f262408`](https://github.com/ljharb/call-bind/commit/f262408f822c840fbc268080f3ad7c429611066d) +- [Deps] update `set-function-length` [`3fff271`](https://github.com/ljharb/call-bind/commit/3fff27145a1e3a76a5b74f1d7c3c43d0fa3b9871) + +## [v1.0.4](https://github.com/ljharb/call-bind/compare/v1.0.3...v1.0.4) - 2023-10-19 + +## [v1.0.3](https://github.com/ljharb/call-bind/compare/v1.0.2...v1.0.3) - 2023-10-19 + +### Commits + +- [actions] reuse common workflows [`a994df6`](https://github.com/ljharb/call-bind/commit/a994df69f401f4bf735a4ccd77029b85d1549453) +- [meta] use `npmignore` to autogenerate an npmignore file [`eef3ef2`](https://github.com/ljharb/call-bind/commit/eef3ef21e1f002790837fedb8af2679c761fbdf5) +- [readme] flesh out content [`1845ccf`](https://github.com/ljharb/call-bind/commit/1845ccfd9976a607884cfc7157c93192cc16cf22) +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`5b47d53`](https://github.com/ljharb/call-bind/commit/5b47d53d2fd74af5ea0a44f1d51e503cd42f7a90) +- [Refactor] use `set-function-length` [`a0e165c`](https://github.com/ljharb/call-bind/commit/a0e165c5dc61db781cbc919b586b1c2b8da0b150) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`9c50103`](https://github.com/ljharb/call-bind/commit/9c50103f44137279a817317cf6cc421a658f85b4) +- [meta] simplify "exports" [`019c6d0`](https://github.com/ljharb/call-bind/commit/019c6d06b0e1246ceed8e579f57e44441cbbf6d9) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `safe-publish-latest`, `tape` [`23bd718`](https://github.com/ljharb/call-bind/commit/23bd718a288d3b03042062b4ef5153b3cea83f11) +- [actions] update codecov uploader [`62552d7`](https://github.com/ljharb/call-bind/commit/62552d79cc79e05825e99aaba134ae5b37f33da5) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`ec81665`](https://github.com/ljharb/call-bind/commit/ec81665b300f87eabff597afdc8b8092adfa7afd) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`35d67fc`](https://github.com/ljharb/call-bind/commit/35d67fcea883e686650f736f61da5ddca2592de8) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`0266d8d`](https://github.com/ljharb/call-bind/commit/0266d8d2a45086a922db366d0c2932fa463662ff) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`43a5b28`](https://github.com/ljharb/call-bind/commit/43a5b28a444e710e1bbf92adb8afb5cf7523a223) +- [Deps] update `define-data-property`, `function-bind`, `get-intrinsic` [`780eb36`](https://github.com/ljharb/call-bind/commit/780eb36552514f8cc99c70821ce698697c2726a5) +- [Dev Deps] update `aud`, `tape` [`90d50ad`](https://github.com/ljharb/call-bind/commit/90d50ad03b061e0268b3380b0065fcaec183dc05) +- [meta] use `prepublishOnly` script for npm 7+ [`44c5433`](https://github.com/ljharb/call-bind/commit/44c5433b7980e02b4870007046407cf6fc543329) +- [Deps] update `get-intrinsic` [`86bfbfc`](https://github.com/ljharb/call-bind/commit/86bfbfcf34afdc6eabc93ce3d408548d0e27d958) +- [Deps] update `get-intrinsic` [`5c53354`](https://github.com/ljharb/call-bind/commit/5c5335489be0294c18cd7a8bb6e08226ee019ff5) +- [actions] update checkout action [`4c393a8`](https://github.com/ljharb/call-bind/commit/4c393a8173b3c8e5b30d5b3297b3b94d48bf87f3) +- [Deps] update `get-intrinsic` [`4e70bde`](https://github.com/ljharb/call-bind/commit/4e70bdec0626acb11616d66250fc14565e716e91) +- [Deps] update `get-intrinsic` [`55ae803`](https://github.com/ljharb/call-bind/commit/55ae803a920bd93c369cd798c20de31f91e9fc60) + +## [v1.0.2](https://github.com/ljharb/call-bind/compare/v1.0.1...v1.0.2) - 2021-01-11 + +### Commits + +- [Fix] properly include the receiver in the bound length [`dbae7bc`](https://github.com/ljharb/call-bind/commit/dbae7bc676c079a0d33c0a43e9ef92cb7b01345d) + +## [v1.0.1](https://github.com/ljharb/call-bind/compare/v1.0.0...v1.0.1) - 2021-01-08 + +### Commits + +- [Tests] migrate tests to Github Actions [`b6db284`](https://github.com/ljharb/call-bind/commit/b6db284c36f8ccd195b88a6764fe84b7223a0da1) +- [meta] do not publish github action workflow files [`ec7fe46`](https://github.com/ljharb/call-bind/commit/ec7fe46e60cfa4764ee943d2755f5e5a366e578e) +- [Fix] preserve original function’s length when possible [`adbceaa`](https://github.com/ljharb/call-bind/commit/adbceaa3cac4b41ea78bb19d7ccdbaaf7e0bdadb) +- [Tests] gather coverage data on every job [`d69e23c`](https://github.com/ljharb/call-bind/commit/d69e23cc65f101ba1d4c19bb07fa8eb0ec624be8) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`2fd3586`](https://github.com/ljharb/call-bind/commit/2fd3586c5d47b335364c14293114c6b625ae1f71) +- [Deps] update `get-intrinsic` [`f23e931`](https://github.com/ljharb/call-bind/commit/f23e9318cc271c2add8bb38cfded85ee7baf8eee) +- [Deps] update `get-intrinsic` [`72d9f44`](https://github.com/ljharb/call-bind/commit/72d9f44e184465ba8dd3fb48260bbcff234985f2) +- [meta] fix FUNDING.yml [`e723573`](https://github.com/ljharb/call-bind/commit/e723573438c5a68dcec31fb5d96ea6b7e4a93be8) +- [eslint] ignore coverage output [`15e76d2`](https://github.com/ljharb/call-bind/commit/15e76d28a5f43e504696401e5b31ebb78ee1b532) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`8fa4dab`](https://github.com/ljharb/call-bind/commit/8fa4dabb23ba3dd7bb92c9571c1241c08b56e4b6) + +## v1.0.0 - 2020-10-30 + +### Commits + +- Initial commit [`306cf98`](https://github.com/ljharb/call-bind/commit/306cf98c7ec9e7ef66b653ec152277ac1381eb50) +- Tests [`e10d0bb`](https://github.com/ljharb/call-bind/commit/e10d0bbdadc7a10ecedc9a1c035112d3e368b8df) +- Implementation [`43852ed`](https://github.com/ljharb/call-bind/commit/43852eda0f187327b7fad2423ca972149a52bd65) +- npm init [`408f860`](https://github.com/ljharb/call-bind/commit/408f860b773a2f610805fd3613d0d71bac1b6249) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`fb349b2`](https://github.com/ljharb/call-bind/commit/fb349b2e48defbec8b5ec8a8395cc8f69f220b13) +- [meta] add `auto-changelog` [`c4001fc`](https://github.com/ljharb/call-bind/commit/c4001fc43031799ef908211c98d3b0fb2b60fde4) +- [meta] add "funding"; create `FUNDING.yml` [`d4d6d29`](https://github.com/ljharb/call-bind/commit/d4d6d2974a14bc2e98830468eda7fe6d6a776717) +- [Tests] add `npm run lint` [`dedfb98`](https://github.com/ljharb/call-bind/commit/dedfb98bd0ecefb08ddb9a94061bd10cde4332af) +- Only apps should have lockfiles [`54ac776`](https://github.com/ljharb/call-bind/commit/54ac77653db45a7361dc153d2f478e743f110650) +- [meta] add `safe-publish-latest` [`9ea8e43`](https://github.com/ljharb/call-bind/commit/9ea8e435b950ce9b705559cd651039f9bf40140f) diff --git a/node_modules/call-bind/LICENSE b/node_modules/call-bind/LICENSE new file mode 100644 index 00000000..48f05d01 --- /dev/null +++ b/node_modules/call-bind/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/call-bind/README.md b/node_modules/call-bind/README.md new file mode 100644 index 00000000..48e9047f --- /dev/null +++ b/node_modules/call-bind/README.md @@ -0,0 +1,64 @@ +# call-bind [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Robustly `.call.bind()` a function. + +## Getting started + +```sh +npm install --save call-bind +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBind = require('call-bind'); +const callBound = require('call-bind/callBound'); + +function f(a, b) { + assert.equal(this, 1); + assert.equal(a, 2); + assert.equal(b, 3); + assert.equal(arguments.length, 2); +} + +const fBound = callBind(f); + +const slice = callBound('Array.prototype.slice'); + +delete Function.prototype.call; +delete Function.prototype.bind; + +fBound(1, 2, 3); + +assert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bind +[npm-version-svg]: https://versionbadg.es/ljharb/call-bind.svg +[deps-svg]: https://david-dm.org/ljharb/call-bind.svg +[deps-url]: https://david-dm.org/ljharb/call-bind +[dev-deps-svg]: https://david-dm.org/ljharb/call-bind/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bind#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bind.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bind.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bind.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bind +[codecov-image]: https://codecov.io/gh/ljharb/call-bind/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind +[actions-url]: https://github.com/ljharb/call-bind/actions diff --git a/node_modules/call-bind/callBound.js b/node_modules/call-bind/callBound.js new file mode 100644 index 00000000..8374adfd --- /dev/null +++ b/node_modules/call-bind/callBound.js @@ -0,0 +1,15 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var callBind = require('./'); + +var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); + +module.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBind(intrinsic); + } + return intrinsic; +}; diff --git a/node_modules/call-bind/index.js b/node_modules/call-bind/index.js new file mode 100644 index 00000000..b6423393 --- /dev/null +++ b/node_modules/call-bind/index.js @@ -0,0 +1,24 @@ +'use strict'; + +var setFunctionLength = require('set-function-length'); + +var $defineProperty = require('es-define-property'); + +var callBindBasic = require('call-bind-apply-helpers'); +var applyBind = require('call-bind-apply-helpers/applyBind'); + +module.exports = function callBind(originalFunction) { + var func = callBindBasic(arguments); + var adjustedLength = originalFunction.length - (arguments.length - 1); + return setFunctionLength( + func, + 1 + (adjustedLength > 0 ? adjustedLength : 0), + true + ); +}; + +if ($defineProperty) { + $defineProperty(module.exports, 'apply', { value: applyBind }); +} else { + module.exports.apply = applyBind; +} diff --git a/node_modules/call-bind/package.json b/node_modules/call-bind/package.json new file mode 100644 index 00000000..3642a371 --- /dev/null +++ b/node_modules/call-bind/package.json @@ -0,0 +1,93 @@ +{ + "name": "call-bind", + "version": "1.0.8", + "description": "Robustly `.call.bind()` a function", + "main": "index.js", + "exports": { + ".": "./index.js", + "./callBound": "./callBound.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "evalmd README.md", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bind.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "es", + "js", + "callbind", + "callbound", + "call", + "bind", + "bound", + "call-bind", + "call-bound", + "function", + "es-abstract" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bind/issues" + }, + "homepage": "https://github.com/ljharb/call-bind#readme", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.5.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "has-strict-mode": "^1.0.1", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.3", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/call-bind/test/callBound.js b/node_modules/call-bind/test/callBound.js new file mode 100644 index 00000000..c32319d7 --- /dev/null +++ b/node_modules/call-bind/test/callBound.js @@ -0,0 +1,54 @@ +'use strict'; + +var test = require('tape'); + +var callBound = require('../callBound'); + +test('callBound', function (t) { + // static primitive + t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself'); + t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself'); + + // static non-function object + t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself'); + t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself'); + t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself'); + t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself'); + + // static function + t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself'); + t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself'); + + // prototype primitive + t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself'); + t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself'); + + // prototype function + t.notEqual(callBound('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString does not yield itself'); + t.notEqual(callBound('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% does not yield itself'); + t.equal(callBound('Object.prototype.toString')(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original'); + t.equal(callBound('%Object.prototype.toString%')(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original'); + + t['throws']( + function () { callBound('does not exist'); }, + SyntaxError, + 'nonexistent intrinsic throws' + ); + t['throws']( + function () { callBound('does not exist', true); }, + SyntaxError, + 'allowMissing arg still throws for unknown intrinsic' + ); + + t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) { + st['throws']( + function () { callBound('WeakRef'); }, + TypeError, + 'real but absent intrinsic throws' + ); + st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception'); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/call-bind/test/index.js b/node_modules/call-bind/test/index.js new file mode 100644 index 00000000..f6d096a7 --- /dev/null +++ b/node_modules/call-bind/test/index.js @@ -0,0 +1,74 @@ +'use strict'; + +var callBind = require('../'); +var hasStrictMode = require('has-strict-mode')(); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var v = require('es-value-fixtures'); + +var test = require('tape'); + +/* + * older engines have length nonconfigurable + * in io.js v3, it is configurable except on bound functions, hence the .bind() + */ +var boundFnsHaveConfigurableLengths = require('set-function-length/env').boundFnsHaveConfigurableLengths; + +test('callBind', function (t) { + forEach(v.nonFunctions, function (nonFunction) { + t['throws']( + function () { callBind(nonFunction); }, + TypeError, + inspect(nonFunction) + ' is not a function' + ); + }); + + var sentinel = { sentinel: true }; + var func = function (a, b) { + // eslint-disable-next-line no-invalid-this + return [!hasStrictMode && this === global ? undefined : this, a, b]; + }; + t.equal(func.length, 2, 'original function length is 2'); + t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); + t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); + t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); + + var bound = callBind(func); + t.equal(bound.length, func.length + 1, 'function length is preserved', { skip: !boundFnsHaveConfigurableLengths }); + t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with too few args'); + t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func with right args'); + t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args'); + + var boundR = callBind(func, sentinel); + t.equal(boundR.length, func.length, 'function length is preserved', { skip: !boundFnsHaveConfigurableLengths }); + t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); + t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); + t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); + + var boundArg = callBind(func, sentinel, 1); + t.equal(boundArg.length, func.length - 1, 'function length is preserved', { skip: !boundFnsHaveConfigurableLengths }); + t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); + t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); + t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); + + t.test('callBind.apply', function (st) { + var aBound = callBind.apply(func); + st.deepEqual(aBound(sentinel), [sentinel, undefined, undefined], 'apply-bound func with no args'); + st.deepEqual(aBound(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args'); + st.deepEqual(aBound(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args'); + + var aBoundArg = callBind.apply(func); + st.deepEqual(aBoundArg(sentinel, [1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with too many args'); + st.deepEqual(aBoundArg(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args'); + st.deepEqual(aBoundArg(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args'); + + var aBoundR = callBind.apply(func, sentinel); + st.deepEqual(aBoundR([1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with receiver and too many args'); + st.deepEqual(aBoundR([1, 2], 4), [sentinel, 1, 2], 'apply-bound func with receiver and right args'); + st.deepEqual(aBoundR([1], 4), [sentinel, 1, undefined], 'apply-bound func with receiver and too few args'); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/combined-stream/License b/node_modules/combined-stream/License new file mode 100644 index 00000000..4804b7ab --- /dev/null +++ b/node_modules/combined-stream/License @@ -0,0 +1,19 @@ +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/combined-stream/Readme.md b/node_modules/combined-stream/Readme.md new file mode 100644 index 00000000..9e367b5b --- /dev/null +++ b/node_modules/combined-stream/Readme.md @@ -0,0 +1,138 @@ +# combined-stream + +A stream that emits multiple other streams one after another. + +**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`. + +- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module. + +- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another. + +## Installation + +``` bash +npm install combined-stream +``` + +## Usage + +Here is a simple example that shows how you can use combined-stream to combine +two files into one: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create(); +combinedStream.append(fs.createReadStream('file1.txt')); +combinedStream.append(fs.createReadStream('file2.txt')); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +While the example above works great, it will pause all source streams until +they are needed. If you don't want that to happen, you can set `pauseStreams` +to `false`: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create({pauseStreams: false}); +combinedStream.append(fs.createReadStream('file1.txt')); +combinedStream.append(fs.createReadStream('file2.txt')); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +However, what if you don't have all the source streams yet, or you don't want +to allocate the resources (file descriptors, memory, etc.) for them right away? +Well, in that case you can simply provide a callback that supplies the stream +by calling a `next()` function: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create(); +combinedStream.append(function(next) { + next(fs.createReadStream('file1.txt')); +}); +combinedStream.append(function(next) { + next(fs.createReadStream('file2.txt')); +}); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +## API + +### CombinedStream.create([options]) + +Returns a new combined stream object. Available options are: + +* `maxDataSize` +* `pauseStreams` + +The effect of those options is described below. + +### combinedStream.pauseStreams = `true` + +Whether to apply back pressure to the underlaying streams. If set to `false`, +the underlaying streams will never be paused. If set to `true`, the +underlaying streams will be paused right after being appended, as well as when +`delayedStream.pipe()` wants to throttle. + +### combinedStream.maxDataSize = `2 * 1024 * 1024` + +The maximum amount of bytes (or characters) to buffer for all source streams. +If this value is exceeded, `combinedStream` emits an `'error'` event. + +### combinedStream.dataSize = `0` + +The amount of bytes (or characters) currently buffered by `combinedStream`. + +### combinedStream.append(stream) + +Appends the given `stream` to the combinedStream object. If `pauseStreams` is +set to `true, this stream will also be paused right away. + +`streams` can also be a function that takes one parameter called `next`. `next` +is a function that must be invoked in order to provide the `next` stream, see +example above. + +Regardless of how the `stream` is appended, combined-stream always attaches an +`'error'` listener to it, so you don't have to do that manually. + +Special case: `stream` can also be a String or Buffer. + +### combinedStream.write(data) + +You should not call this, `combinedStream` takes care of piping the appended +streams into itself for you. + +### combinedStream.resume() + +Causes `combinedStream` to start drain the streams it manages. The function is +idempotent, and also emits a `'resume'` event each time which usually goes to +the stream that is currently being drained. + +### combinedStream.pause(); + +If `combinedStream.pauseStreams` is set to `false`, this does nothing. +Otherwise a `'pause'` event is emitted, this goes to the stream that is +currently being drained, so you can use it to apply back pressure. + +### combinedStream.end(); + +Sets `combinedStream.writable` to false, emits an `'end'` event, and removes +all streams from the queue. + +### combinedStream.destroy(); + +Same as `combinedStream.end()`, except it emits a `'close'` event instead of +`'end'`. + +## License + +combined-stream is licensed under the MIT license. diff --git a/node_modules/combined-stream/lib/combined_stream.js b/node_modules/combined-stream/lib/combined_stream.js new file mode 100644 index 00000000..125f097f --- /dev/null +++ b/node_modules/combined-stream/lib/combined_stream.js @@ -0,0 +1,208 @@ +var util = require('util'); +var Stream = require('stream').Stream; +var DelayedStream = require('delayed-stream'); + +module.exports = CombinedStream; +function CombinedStream() { + this.writable = false; + this.readable = true; + this.dataSize = 0; + this.maxDataSize = 2 * 1024 * 1024; + this.pauseStreams = true; + + this._released = false; + this._streams = []; + this._currentStream = null; + this._insideLoop = false; + this._pendingNext = false; +} +util.inherits(CombinedStream, Stream); + +CombinedStream.create = function(options) { + var combinedStream = new this(); + + options = options || {}; + for (var option in options) { + combinedStream[option] = options[option]; + } + + return combinedStream; +}; + +CombinedStream.isStreamLike = function(stream) { + return (typeof stream !== 'function') + && (typeof stream !== 'string') + && (typeof stream !== 'boolean') + && (typeof stream !== 'number') + && (!Buffer.isBuffer(stream)); +}; + +CombinedStream.prototype.append = function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + + if (isStreamLike) { + if (!(stream instanceof DelayedStream)) { + var newStream = DelayedStream.create(stream, { + maxDataSize: Infinity, + pauseStream: this.pauseStreams, + }); + stream.on('data', this._checkDataSize.bind(this)); + stream = newStream; + } + + this._handleErrors(stream); + + if (this.pauseStreams) { + stream.pause(); + } + } + + this._streams.push(stream); + return this; +}; + +CombinedStream.prototype.pipe = function(dest, options) { + Stream.prototype.pipe.call(this, dest, options); + this.resume(); + return dest; +}; + +CombinedStream.prototype._getNext = function() { + this._currentStream = null; + + if (this._insideLoop) { + this._pendingNext = true; + return; // defer call + } + + this._insideLoop = true; + try { + do { + this._pendingNext = false; + this._realGetNext(); + } while (this._pendingNext); + } finally { + this._insideLoop = false; + } +}; + +CombinedStream.prototype._realGetNext = function() { + var stream = this._streams.shift(); + + + if (typeof stream == 'undefined') { + this.end(); + return; + } + + if (typeof stream !== 'function') { + this._pipeNext(stream); + return; + } + + var getStream = stream; + getStream(function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('data', this._checkDataSize.bind(this)); + this._handleErrors(stream); + } + + this._pipeNext(stream); + }.bind(this)); +}; + +CombinedStream.prototype._pipeNext = function(stream) { + this._currentStream = stream; + + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('end', this._getNext.bind(this)); + stream.pipe(this, {end: false}); + return; + } + + var value = stream; + this.write(value); + this._getNext(); +}; + +CombinedStream.prototype._handleErrors = function(stream) { + var self = this; + stream.on('error', function(err) { + self._emitError(err); + }); +}; + +CombinedStream.prototype.write = function(data) { + this.emit('data', data); +}; + +CombinedStream.prototype.pause = function() { + if (!this.pauseStreams) { + return; + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); + this.emit('pause'); +}; + +CombinedStream.prototype.resume = function() { + if (!this._released) { + this._released = true; + this.writable = true; + this._getNext(); + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); + this.emit('resume'); +}; + +CombinedStream.prototype.end = function() { + this._reset(); + this.emit('end'); +}; + +CombinedStream.prototype.destroy = function() { + this._reset(); + this.emit('close'); +}; + +CombinedStream.prototype._reset = function() { + this.writable = false; + this._streams = []; + this._currentStream = null; +}; + +CombinedStream.prototype._checkDataSize = function() { + this._updateDataSize(); + if (this.dataSize <= this.maxDataSize) { + return; + } + + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; + this._emitError(new Error(message)); +}; + +CombinedStream.prototype._updateDataSize = function() { + this.dataSize = 0; + + var self = this; + this._streams.forEach(function(stream) { + if (!stream.dataSize) { + return; + } + + self.dataSize += stream.dataSize; + }); + + if (this._currentStream && this._currentStream.dataSize) { + this.dataSize += this._currentStream.dataSize; + } +}; + +CombinedStream.prototype._emitError = function(err) { + this._reset(); + this.emit('error', err); +}; diff --git a/node_modules/combined-stream/package.json b/node_modules/combined-stream/package.json new file mode 100644 index 00000000..6982b6da --- /dev/null +++ b/node_modules/combined-stream/package.json @@ -0,0 +1,25 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "combined-stream", + "description": "A stream that emits multiple other streams one after another.", + "version": "1.0.8", + "homepage": "https://github.com/felixge/node-combined-stream", + "repository": { + "type": "git", + "url": "git://github.com/felixge/node-combined-stream.git" + }, + "main": "./lib/combined_stream", + "scripts": { + "test": "node test/run.js" + }, + "engines": { + "node": ">= 0.8" + }, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "devDependencies": { + "far": "~0.0.7" + }, + "license": "MIT" +} diff --git a/node_modules/combined-stream/yarn.lock b/node_modules/combined-stream/yarn.lock new file mode 100644 index 00000000..7edf4184 --- /dev/null +++ b/node_modules/combined-stream/yarn.lock @@ -0,0 +1,17 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +far@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7" + dependencies: + oop "0.0.3" + +oop@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401" diff --git a/node_modules/define-data-property/.eslintrc b/node_modules/define-data-property/.eslintrc new file mode 100644 index 00000000..75443e81 --- /dev/null +++ b/node_modules/define-data-property/.eslintrc @@ -0,0 +1,24 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": 0, + "id-length": 0, + "new-cap": ["error", { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "max-lines-per-function": "off", + }, + }, + ], +} diff --git a/node_modules/define-data-property/.github/FUNDING.yml b/node_modules/define-data-property/.github/FUNDING.yml new file mode 100644 index 00000000..3e17725d --- /dev/null +++ b/node_modules/define-data-property/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/define-data-property +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/define-data-property/.nycrc b/node_modules/define-data-property/.nycrc new file mode 100644 index 00000000..1826526e --- /dev/null +++ b/node_modules/define-data-property/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/define-data-property/CHANGELOG.md b/node_modules/define-data-property/CHANGELOG.md new file mode 100644 index 00000000..4eed75ea --- /dev/null +++ b/node_modules/define-data-property/CHANGELOG.md @@ -0,0 +1,70 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.4](https://github.com/ljharb/define-data-property/compare/v1.1.3...v1.1.4) - 2024-02-13 + +### Commits + +- [Refactor] use `es-define-property` [`90f2f4c`](https://github.com/ljharb/define-data-property/commit/90f2f4cc20298401e71c28e1e08888db12021453) +- [Dev Deps] update `@types/object.getownpropertydescriptors` [`cd929d9`](https://github.com/ljharb/define-data-property/commit/cd929d9a04f5f2fdcfa9d5be140940b91a083153) + +## [v1.1.3](https://github.com/ljharb/define-data-property/compare/v1.1.2...v1.1.3) - 2024-02-12 + +### Commits + +- [types] hand-write d.ts instead of emitting it [`0cbc988`](https://github.com/ljharb/define-data-property/commit/0cbc988203c105f2d97948327c7167ebd33bd318) +- [meta] simplify `exports` [`690781e`](https://github.com/ljharb/define-data-property/commit/690781eed28bbf2d6766237efda0ba6dd591609e) +- [Dev Deps] update `hasown`; clean up DT packages [`6cdfd1c`](https://github.com/ljharb/define-data-property/commit/6cdfd1cb2d91d791bfd18cda5d5cab232fd5d8fc) +- [actions] cleanup [`3142bc6`](https://github.com/ljharb/define-data-property/commit/3142bc6a4bc406a51f5b04f31e98562a27f35ffd) +- [meta] add `funding` [`8474423`](https://github.com/ljharb/define-data-property/commit/847442391a79779af3e0f1bf0b5bb923552b7804) +- [Deps] update `get-intrinsic` [`3e9be00`](https://github.com/ljharb/define-data-property/commit/3e9be00e07784ba34e7c77d8bc0fdbc832ad61de) + +## [v1.1.2](https://github.com/ljharb/define-data-property/compare/v1.1.1...v1.1.2) - 2024-02-05 + +### Commits + +- [Dev Deps] update @types packages, `object-inspect`, `tape`, `typescript` [`df41bf8`](https://github.com/ljharb/define-data-property/commit/df41bf84ca3456be6226055caab44e38e3a7fd2f) +- [Dev Deps] update DT packages, `aud`, `npmignore`, `tape`, typescript` [`fab0e4e`](https://github.com/ljharb/define-data-property/commit/fab0e4ec709ee02b79f42d6db3ee5f26e0a34b8a) +- [Dev Deps] use `hasown` instead of `has` [`aa51ef9`](https://github.com/ljharb/define-data-property/commit/aa51ef93f6403d49d9bb72a807bcdb6e418978c0) +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`d89be50`](https://github.com/ljharb/define-data-property/commit/d89be50571175888d391238605122679f7e65ffc) +- [Deps] update `has-property-descriptors` [`7af887c`](https://github.com/ljharb/define-data-property/commit/7af887c9083b59b195b0079e04815cfed9fcee2b) +- [Deps] update `get-intrinsic` [`bb8728e`](https://github.com/ljharb/define-data-property/commit/bb8728ec42cd998505a7157ae24853a560c20646) + +## [v1.1.1](https://github.com/ljharb/define-data-property/compare/v1.1.0...v1.1.1) - 2023-10-12 + +### Commits + +- [Tests] fix tests in ES3 engines [`5c6920e`](https://github.com/ljharb/define-data-property/commit/5c6920edd1f52f675b02f417e539c28135b43f94) +- [Dev Deps] update `@types/es-value-fixtures`, `@types/for-each`, `@types/gopd`, `@types/has-property-descriptors`, `tape`, `typescript` [`7d82dfc`](https://github.com/ljharb/define-data-property/commit/7d82dfc20f778b4465bba06335dd53f6f431aea3) +- [Fix] IE 8 has a broken `Object.defineProperty` [`0672e1a`](https://github.com/ljharb/define-data-property/commit/0672e1af2a9fcc787e7c23b96dea60d290df5548) +- [meta] emit types on prepack [`73acb1f`](https://github.com/ljharb/define-data-property/commit/73acb1f903c21b314ec7156bf10f73c7910530c0) +- [Dev Deps] update `tape`, `typescript` [`9489a77`](https://github.com/ljharb/define-data-property/commit/9489a7738bf2ecf0ac71d5b78ec4ca6ad7ba0142) + +## [v1.1.0](https://github.com/ljharb/define-data-property/compare/v1.0.1...v1.1.0) - 2023-09-13 + +### Commits + +- [New] add `loose` arg [`155235a`](https://github.com/ljharb/define-data-property/commit/155235a4c4d7741f6de01cd87c99599a56654b72) +- [New] allow `null` to be passed for the non* args [`7d2fa5f`](https://github.com/ljharb/define-data-property/commit/7d2fa5f06be0392736c13b126f7cd38979f34792) + +## [v1.0.1](https://github.com/ljharb/define-data-property/compare/v1.0.0...v1.0.1) - 2023-09-12 + +### Commits + +- [meta] add TS types [`43d763c`](https://github.com/ljharb/define-data-property/commit/43d763c6c883f652de1c9c02ef6216ee507ffa69) +- [Dev Deps] update `@types/tape`, `typescript` [`f444985`](https://github.com/ljharb/define-data-property/commit/f444985811c36f3e6448a03ad2f9b7898917f4c7) +- [meta] add `safe-publish-latest`, [`172bb10`](https://github.com/ljharb/define-data-property/commit/172bb10890896ebb160e64398f6ee55760107bee) + +## v1.0.0 - 2023-09-12 + +### Commits + +- Initial implementation, tests, readme [`5b43d6b`](https://github.com/ljharb/define-data-property/commit/5b43d6b44e675a904810467a7d4e0adb7efc3196) +- Initial commit [`35e577a`](https://github.com/ljharb/define-data-property/commit/35e577a6ba59a98befa97776d70d90f3bea9009d) +- npm init [`82a0a04`](https://github.com/ljharb/define-data-property/commit/82a0a04a321ca7de220af02d41e2745e8a9962ed) +- Only apps should have lockfiles [`96df244`](https://github.com/ljharb/define-data-property/commit/96df244a3c6f426f9a2437be825d1c6f5dd7158e) +- [meta] use `npmignore` to autogenerate an npmignore file [`a87ff18`](https://github.com/ljharb/define-data-property/commit/a87ff18cb79e14c2eb5720486c4759fd9a189375) diff --git a/node_modules/define-data-property/LICENSE b/node_modules/define-data-property/LICENSE new file mode 100644 index 00000000..b4213ac6 --- /dev/null +++ b/node_modules/define-data-property/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/define-data-property/README.md b/node_modules/define-data-property/README.md new file mode 100644 index 00000000..f2304dae --- /dev/null +++ b/node_modules/define-data-property/README.md @@ -0,0 +1,67 @@ +# define-data-property [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Define a data property on an object. Will fall back to assignment in an engine without descriptors. + +The three `non*` argument can also be passed `null`, which will use the existing state if available. + +The `loose` argument will mean that if you attempt to set a non-normal data property, in an environment without descriptor support, it will fall back to normal assignment. + +## Usage + +```javascript +var defineDataProperty = require('define-data-property'); +var assert = require('assert'); + +var obj = {}; +defineDataProperty(obj, 'key', 'value'); +defineDataProperty( + obj, + 'key2', + 'value', + true, // nonEnumerable, optional + false, // nonWritable, optional + true, // nonConfigurable, optional + false // loose, optional +); + +assert.deepEqual( + Object.getOwnPropertyDescriptors(obj), + { + key: { + configurable: true, + enumerable: true, + value: 'value', + writable: true, + }, + key2: { + configurable: false, + enumerable: false, + value: 'value', + writable: true, + }, + } +); +``` + +[package-url]: https://npmjs.org/package/define-data-property +[npm-version-svg]: https://versionbadg.es/ljharb/define-data-property.svg +[deps-svg]: https://david-dm.org/ljharb/define-data-property.svg +[deps-url]: https://david-dm.org/ljharb/define-data-property +[dev-deps-svg]: https://david-dm.org/ljharb/define-data-property/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/define-data-property#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/define-data-property.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/define-data-property.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/define-data-property.svg +[downloads-url]: https://npm-stat.com/charts.html?package=define-data-property +[codecov-image]: https://codecov.io/gh/ljharb/define-data-property/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/define-data-property/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/define-data-property +[actions-url]: https://github.com/ljharb/define-data-property/actions diff --git a/node_modules/define-data-property/index.d.ts b/node_modules/define-data-property/index.d.ts new file mode 100644 index 00000000..b56a77da --- /dev/null +++ b/node_modules/define-data-property/index.d.ts @@ -0,0 +1,12 @@ + +declare function defineDataProperty( + obj: Record, + property: keyof typeof obj, + value: typeof obj[typeof property], + nonEnumerable?: boolean | null, + nonWritable?: boolean | null, + nonConfigurable?: boolean | null, + loose?: boolean +): void; + +export = defineDataProperty; \ No newline at end of file diff --git a/node_modules/define-data-property/index.js b/node_modules/define-data-property/index.js new file mode 100644 index 00000000..e1a38c07 --- /dev/null +++ b/node_modules/define-data-property/index.js @@ -0,0 +1,56 @@ +'use strict'; + +var $defineProperty = require('es-define-property'); + +var $SyntaxError = require('es-errors/syntax'); +var $TypeError = require('es-errors/type'); + +var gopd = require('gopd'); + +/** @type {import('.')} */ +module.exports = function defineDataProperty( + obj, + property, + value +) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new $TypeError('`obj` must be an object or a function`'); + } + if (typeof property !== 'string' && typeof property !== 'symbol') { + throw new $TypeError('`property` must be a string or a symbol`'); + } + if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { + throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); + } + if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { + throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); + } + if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { + throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); + } + if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { + throw new $TypeError('`loose`, if provided, must be a boolean'); + } + + var nonEnumerable = arguments.length > 3 ? arguments[3] : null; + var nonWritable = arguments.length > 4 ? arguments[4] : null; + var nonConfigurable = arguments.length > 5 ? arguments[5] : null; + var loose = arguments.length > 6 ? arguments[6] : false; + + /* @type {false | TypedPropertyDescriptor} */ + var desc = !!gopd && gopd(obj, property); + + if ($defineProperty) { + $defineProperty(obj, property, { + configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, + enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, + value: value, + writable: nonWritable === null && desc ? desc.writable : !nonWritable + }); + } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { + // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable + obj[property] = value; // eslint-disable-line no-param-reassign + } else { + throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); + } +}; diff --git a/node_modules/define-data-property/package.json b/node_modules/define-data-property/package.json new file mode 100644 index 00000000..eec40971 --- /dev/null +++ b/node_modules/define-data-property/package.json @@ -0,0 +1,106 @@ +{ + "name": "define-data-property", + "version": "1.1.4", + "description": "Define a data property on an object. Will fall back to assignment in an engine without descriptors.", + "main": "index.js", + "types": "./index.d.ts", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "tsc": "tsc -p .", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "npm run tsc", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/define-data-property.git" + }, + "keywords": [ + "define", + "data", + "property", + "object", + "accessor", + "javascript", + "ecmascript", + "enumerable", + "configurable", + "writable" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/define-data-property/issues" + }, + "homepage": "https://github.com/ljharb/define-data-property#readme", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/call-bind": "^1.0.5", + "@types/define-properties": "^1.1.5", + "@types/es-value-fixtures": "^1.4.4", + "@types/for-each": "^0.3.3", + "@types/get-intrinsic": "^1.2.2", + "@types/gopd": "^1.0.3", + "@types/has-property-descriptors": "^1.0.3", + "@types/object-inspect": "^1.8.4", + "@types/object.getownpropertydescriptors": "^2.1.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "es-value-fixtures": "^1.4.2", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "hasown": "^2.0.1", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.1", + "object.getownpropertydescriptors": "^2.1.7", + "reflect.ownkeys": "^1.1.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "types/reflect.ownkeys" + ] + } +} diff --git a/node_modules/define-data-property/test/index.js b/node_modules/define-data-property/test/index.js new file mode 100644 index 00000000..68204c66 --- /dev/null +++ b/node_modules/define-data-property/test/index.js @@ -0,0 +1,392 @@ +'use strict'; + +var test = require('tape'); +var v = require('es-value-fixtures'); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var hasOwn = require('hasown'); +var hasPropertyDescriptors = require('has-property-descriptors')(); +var getOwnPropertyDescriptors = require('object.getownpropertydescriptors'); +var ownKeys = require('reflect.ownkeys'); + +var defineDataProperty = require('../'); + +test('defineDataProperty', function (t) { + t.test('argument validation', function (st) { + forEach(v.primitives, function (nonObject) { + st['throws']( + // @ts-expect-error + function () { defineDataProperty(nonObject, 'key', 'value'); }, + TypeError, + 'throws on non-object input: ' + inspect(nonObject) + ); + }); + + forEach(v.nonPropertyKeys, function (nonPropertyKey) { + st['throws']( + // @ts-expect-error + function () { defineDataProperty({}, nonPropertyKey, 'value'); }, + TypeError, + 'throws on non-PropertyKey input: ' + inspect(nonPropertyKey) + ); + }); + + forEach(v.nonBooleans, function (nonBoolean) { + if (nonBoolean !== null) { + st['throws']( + // @ts-expect-error + function () { defineDataProperty({}, 'key', 'value', nonBoolean); }, + TypeError, + 'throws on non-boolean nonEnumerable: ' + inspect(nonBoolean) + ); + + st['throws']( + // @ts-expect-error + function () { defineDataProperty({}, 'key', 'value', false, nonBoolean); }, + TypeError, + 'throws on non-boolean nonWritable: ' + inspect(nonBoolean) + ); + + st['throws']( + // @ts-expect-error + function () { defineDataProperty({}, 'key', 'value', false, false, nonBoolean); }, + TypeError, + 'throws on non-boolean nonConfigurable: ' + inspect(nonBoolean) + ); + } + }); + + st.end(); + }); + + t.test('normal data property', function (st) { + /** @type {Record} */ + var obj = { existing: 'existing property' }; + st.ok(hasOwn(obj, 'existing'), 'has initial own property'); + st.equal(obj.existing, 'existing property', 'has expected initial value'); + + var res = defineDataProperty(obj, 'added', 'added property'); + st.equal(res, void undefined, 'returns `undefined`'); + st.ok(hasOwn(obj, 'added'), 'has expected own property'); + st.equal(obj.added, 'added property', 'has expected value'); + + defineDataProperty(obj, 'existing', 'new value'); + st.ok(hasOwn(obj, 'existing'), 'still has expected own property'); + st.equal(obj.existing, 'new value', 'has new expected value'); + + defineDataProperty(obj, 'explicit1', 'new value', false); + st.ok(hasOwn(obj, 'explicit1'), 'has expected own property (explicit enumerable)'); + st.equal(obj.explicit1, 'new value', 'has new expected value (explicit enumerable)'); + + defineDataProperty(obj, 'explicit2', 'new value', false, false); + st.ok(hasOwn(obj, 'explicit2'), 'has expected own property (explicit writable)'); + st.equal(obj.explicit2, 'new value', 'has new expected value (explicit writable)'); + + defineDataProperty(obj, 'explicit3', 'new value', false, false, false); + st.ok(hasOwn(obj, 'explicit3'), 'has expected own property (explicit configurable)'); + st.equal(obj.explicit3, 'new value', 'has new expected value (explicit configurable)'); + + st.end(); + }); + + t.test('loose mode', { skip: !hasPropertyDescriptors }, function (st) { + var obj = { existing: 'existing property' }; + + defineDataProperty(obj, 'added', 'added value 1', true, null, null, true); + st.deepEqual( + getOwnPropertyDescriptors(obj), + { + existing: { + configurable: true, + enumerable: true, + value: 'existing property', + writable: true + }, + added: { + configurable: true, + enumerable: !hasPropertyDescriptors, + value: 'added value 1', + writable: true + } + }, + 'in loose mode, obj still adds property 1' + ); + + defineDataProperty(obj, 'added', 'added value 2', false, true, null, true); + st.deepEqual( + getOwnPropertyDescriptors(obj), + { + existing: { + configurable: true, + enumerable: true, + value: 'existing property', + writable: true + }, + added: { + configurable: true, + enumerable: true, + value: 'added value 2', + writable: !hasPropertyDescriptors + } + }, + 'in loose mode, obj still adds property 2' + ); + + defineDataProperty(obj, 'added', 'added value 3', false, false, true, true); + st.deepEqual( + getOwnPropertyDescriptors(obj), + { + existing: { + configurable: true, + enumerable: true, + value: 'existing property', + writable: true + }, + added: { + configurable: !hasPropertyDescriptors, + enumerable: true, + value: 'added value 3', + writable: true + } + }, + 'in loose mode, obj still adds property 3' + ); + + st.end(); + }); + + t.test('non-normal data property, ES3', { skip: hasPropertyDescriptors }, function (st) { + /** @type {Record} */ + var obj = { existing: 'existing property' }; + + st['throws']( + function () { defineDataProperty(obj, 'added', 'added value', true); }, + SyntaxError, + 'nonEnumerable throws a Syntax Error' + ); + + st['throws']( + function () { defineDataProperty(obj, 'added', 'added value', false, true); }, + SyntaxError, + 'nonWritable throws a Syntax Error' + ); + + st['throws']( + function () { defineDataProperty(obj, 'added', 'added value', false, false, true); }, + SyntaxError, + 'nonWritable throws a Syntax Error' + ); + + st.deepEqual( + ownKeys(obj), + ['existing'], + 'obj still has expected keys' + ); + st.equal(obj.existing, 'existing property', 'obj still has expected values'); + + st.end(); + }); + + t.test('new non-normal data property, ES5+', { skip: !hasPropertyDescriptors }, function (st) { + /** @type {Record} */ + var obj = { existing: 'existing property' }; + + defineDataProperty(obj, 'nonEnum', null, true); + defineDataProperty(obj, 'nonWrit', null, false, true); + defineDataProperty(obj, 'nonConf', null, false, false, true); + + st.deepEqual( + getOwnPropertyDescriptors(obj), + { + existing: { + configurable: true, + enumerable: true, + value: 'existing property', + writable: true + }, + nonEnum: { + configurable: true, + enumerable: false, + value: null, + writable: true + }, + nonWrit: { + configurable: true, + enumerable: true, + value: null, + writable: false + }, + nonConf: { + configurable: false, + enumerable: true, + value: null, + writable: true + } + }, + 'obj has expected property descriptors' + ); + + st.end(); + }); + + t.test('existing non-normal data property, ES5+', { skip: !hasPropertyDescriptors }, function (st) { + // test case changing an existing non-normal property + + /** @type {Record} */ + var obj = {}; + Object.defineProperty(obj, 'nonEnum', { configurable: true, enumerable: false, value: null, writable: true }); + Object.defineProperty(obj, 'nonWrit', { configurable: true, enumerable: true, value: null, writable: false }); + Object.defineProperty(obj, 'nonConf', { configurable: false, enumerable: true, value: null, writable: true }); + + st.deepEqual( + getOwnPropertyDescriptors(obj), + { + nonEnum: { + configurable: true, + enumerable: false, + value: null, + writable: true + }, + nonWrit: { + configurable: true, + enumerable: true, + value: null, + writable: false + }, + nonConf: { + configurable: false, + enumerable: true, + value: null, + writable: true + } + }, + 'obj initially has expected property descriptors' + ); + + defineDataProperty(obj, 'nonEnum', 'new value', false); + defineDataProperty(obj, 'nonWrit', 'new value', false, false); + st['throws']( + function () { defineDataProperty(obj, 'nonConf', 'new value', false, false, false); }, + TypeError, + 'can not alter a nonconfigurable property' + ); + + st.deepEqual( + getOwnPropertyDescriptors(obj), + { + nonEnum: { + configurable: true, + enumerable: true, + value: 'new value', + writable: true + }, + nonWrit: { + configurable: true, + enumerable: true, + value: 'new value', + writable: true + }, + nonConf: { + configurable: false, + enumerable: true, + value: null, + writable: true + } + }, + 'obj ends up with expected property descriptors' + ); + + st.end(); + }); + + t.test('frozen object, ES5+', { skip: !hasPropertyDescriptors }, function (st) { + var frozen = Object.freeze({ existing: true }); + + st['throws']( + function () { defineDataProperty(frozen, 'existing', 'new value'); }, + TypeError, + 'frozen object can not modify an existing property' + ); + + st['throws']( + function () { defineDataProperty(frozen, 'new', 'new property'); }, + TypeError, + 'frozen object can not add a new property' + ); + + st.end(); + }); + + t.test('sealed object, ES5+', { skip: !hasPropertyDescriptors }, function (st) { + var sealed = Object.seal({ existing: true }); + st.deepEqual( + Object.getOwnPropertyDescriptor(sealed, 'existing'), + { + configurable: false, + enumerable: true, + value: true, + writable: true + }, + 'existing value on sealed object has expected descriptor' + ); + + defineDataProperty(sealed, 'existing', 'new value'); + + st.deepEqual( + Object.getOwnPropertyDescriptor(sealed, 'existing'), + { + configurable: false, + enumerable: true, + value: 'new value', + writable: true + }, + 'existing value on sealed object has changed descriptor' + ); + + st['throws']( + function () { defineDataProperty(sealed, 'new', 'new property'); }, + TypeError, + 'sealed object can not add a new property' + ); + + st.end(); + }); + + t.test('nonextensible object, ES5+', { skip: !hasPropertyDescriptors }, function (st) { + var nonExt = Object.preventExtensions({ existing: true }); + + st.deepEqual( + Object.getOwnPropertyDescriptor(nonExt, 'existing'), + { + configurable: true, + enumerable: true, + value: true, + writable: true + }, + 'existing value on non-extensible object has expected descriptor' + ); + + defineDataProperty(nonExt, 'existing', 'new value', true); + + st.deepEqual( + Object.getOwnPropertyDescriptor(nonExt, 'existing'), + { + configurable: true, + enumerable: false, + value: 'new value', + writable: true + }, + 'existing value on non-extensible object has changed descriptor' + ); + + st['throws']( + function () { defineDataProperty(nonExt, 'new', 'new property'); }, + TypeError, + 'non-extensible object can not add a new property' + ); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/define-data-property/tsconfig.json b/node_modules/define-data-property/tsconfig.json new file mode 100644 index 00000000..69f060dc --- /dev/null +++ b/node_modules/define-data-property/tsconfig.json @@ -0,0 +1,59 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + + /* Completeness */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/delayed-stream/.npmignore b/node_modules/delayed-stream/.npmignore new file mode 100644 index 00000000..9daeafb9 --- /dev/null +++ b/node_modules/delayed-stream/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/delayed-stream/License b/node_modules/delayed-stream/License new file mode 100644 index 00000000..4804b7ab --- /dev/null +++ b/node_modules/delayed-stream/License @@ -0,0 +1,19 @@ +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/delayed-stream/Makefile b/node_modules/delayed-stream/Makefile new file mode 100644 index 00000000..b4ff85a3 --- /dev/null +++ b/node_modules/delayed-stream/Makefile @@ -0,0 +1,7 @@ +SHELL := /bin/bash + +test: + @./test/run.js + +.PHONY: test + diff --git a/node_modules/delayed-stream/Readme.md b/node_modules/delayed-stream/Readme.md new file mode 100644 index 00000000..aca36f9f --- /dev/null +++ b/node_modules/delayed-stream/Readme.md @@ -0,0 +1,141 @@ +# delayed-stream + +Buffers events from a stream until you are ready to handle them. + +## Installation + +``` bash +npm install delayed-stream +``` + +## Usage + +The following example shows how to write a http echo server that delays its +response by 1000 ms. + +``` javascript +var DelayedStream = require('delayed-stream'); +var http = require('http'); + +http.createServer(function(req, res) { + var delayed = DelayedStream.create(req); + + setTimeout(function() { + res.writeHead(200); + delayed.pipe(res); + }, 1000); +}); +``` + +If you are not using `Stream#pipe`, you can also manually release the buffered +events by calling `delayedStream.resume()`: + +``` javascript +var delayed = DelayedStream.create(req); + +setTimeout(function() { + // Emit all buffered events and resume underlaying source + delayed.resume(); +}, 1000); +``` + +## Implementation + +In order to use this meta stream properly, here are a few things you should +know about the implementation. + +### Event Buffering / Proxying + +All events of the `source` stream are hijacked by overwriting the `source.emit` +method. Until node implements a catch-all event listener, this is the only way. + +However, delayed-stream still continues to emit all events it captures on the +`source`, regardless of whether you have released the delayed stream yet or +not. + +Upon creation, delayed-stream captures all `source` events and stores them in +an internal event buffer. Once `delayedStream.release()` is called, all +buffered events are emitted on the `delayedStream`, and the event buffer is +cleared. After that, delayed-stream merely acts as a proxy for the underlaying +source. + +### Error handling + +Error events on `source` are buffered / proxied just like any other events. +However, `delayedStream.create` attaches a no-op `'error'` listener to the +`source`. This way you only have to handle errors on the `delayedStream` +object, rather than in two places. + +### Buffer limits + +delayed-stream provides a `maxDataSize` property that can be used to limit +the amount of data being buffered. In order to protect you from bad `source` +streams that don't react to `source.pause()`, this feature is enabled by +default. + +## API + +### DelayedStream.create(source, [options]) + +Returns a new `delayedStream`. Available options are: + +* `pauseStream` +* `maxDataSize` + +The description for those properties can be found below. + +### delayedStream.source + +The `source` stream managed by this object. This is useful if you are +passing your `delayedStream` around, and you still want to access properties +on the `source` object. + +### delayedStream.pauseStream = true + +Whether to pause the underlaying `source` when calling +`DelayedStream.create()`. Modifying this property afterwards has no effect. + +### delayedStream.maxDataSize = 1024 * 1024 + +The amount of data to buffer before emitting an `error`. + +If the underlaying source is emitting `Buffer` objects, the `maxDataSize` +refers to bytes. + +If the underlaying source is emitting JavaScript strings, the size refers to +characters. + +If you know what you are doing, you can set this property to `Infinity` to +disable this feature. You can also modify this property during runtime. + +### delayedStream.dataSize = 0 + +The amount of data buffered so far. + +### delayedStream.readable + +An ECMA5 getter that returns the value of `source.readable`. + +### delayedStream.resume() + +If the `delayedStream` has not been released so far, `delayedStream.release()` +is called. + +In either case, `source.resume()` is called. + +### delayedStream.pause() + +Calls `source.pause()`. + +### delayedStream.pipe(dest) + +Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. + +### delayedStream.release() + +Emits and clears all events that have been buffered up so far. This does not +resume the underlaying source, use `delayedStream.resume()` instead. + +## License + +delayed-stream is licensed under the MIT license. diff --git a/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/delayed-stream/lib/delayed_stream.js new file mode 100644 index 00000000..b38fc85f --- /dev/null +++ b/node_modules/delayed-stream/lib/delayed_stream.js @@ -0,0 +1,107 @@ +var Stream = require('stream').Stream; +var util = require('util'); + +module.exports = DelayedStream; +function DelayedStream() { + this.source = null; + this.dataSize = 0; + this.maxDataSize = 1024 * 1024; + this.pauseStream = true; + + this._maxDataSizeExceeded = false; + this._released = false; + this._bufferedEvents = []; +} +util.inherits(DelayedStream, Stream); + +DelayedStream.create = function(source, options) { + var delayedStream = new this(); + + options = options || {}; + for (var option in options) { + delayedStream[option] = options[option]; + } + + delayedStream.source = source; + + var realEmit = source.emit; + source.emit = function() { + delayedStream._handleEmit(arguments); + return realEmit.apply(source, arguments); + }; + + source.on('error', function() {}); + if (delayedStream.pauseStream) { + source.pause(); + } + + return delayedStream; +}; + +Object.defineProperty(DelayedStream.prototype, 'readable', { + configurable: true, + enumerable: true, + get: function() { + return this.source.readable; + } +}); + +DelayedStream.prototype.setEncoding = function() { + return this.source.setEncoding.apply(this.source, arguments); +}; + +DelayedStream.prototype.resume = function() { + if (!this._released) { + this.release(); + } + + this.source.resume(); +}; + +DelayedStream.prototype.pause = function() { + this.source.pause(); +}; + +DelayedStream.prototype.release = function() { + this._released = true; + + this._bufferedEvents.forEach(function(args) { + this.emit.apply(this, args); + }.bind(this)); + this._bufferedEvents = []; +}; + +DelayedStream.prototype.pipe = function() { + var r = Stream.prototype.pipe.apply(this, arguments); + this.resume(); + return r; +}; + +DelayedStream.prototype._handleEmit = function(args) { + if (this._released) { + this.emit.apply(this, args); + return; + } + + if (args[0] === 'data') { + this.dataSize += args[1].length; + this._checkIfMaxDataSizeExceeded(); + } + + this._bufferedEvents.push(args); +}; + +DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { + if (this._maxDataSizeExceeded) { + return; + } + + if (this.dataSize <= this.maxDataSize) { + return; + } + + this._maxDataSizeExceeded = true; + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' + this.emit('error', new Error(message)); +}; diff --git a/node_modules/delayed-stream/package.json b/node_modules/delayed-stream/package.json new file mode 100644 index 00000000..eea3291c --- /dev/null +++ b/node_modules/delayed-stream/package.json @@ -0,0 +1,27 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "contributors": [ + "Mike Atkins " + ], + "name": "delayed-stream", + "description": "Buffers events from a stream until you are ready to handle them.", + "license": "MIT", + "version": "1.0.0", + "homepage": "https://github.com/felixge/node-delayed-stream", + "repository": { + "type": "git", + "url": "git://github.com/felixge/node-delayed-stream.git" + }, + "main": "./lib/delayed_stream", + "engines": { + "node": ">=0.4.0" + }, + "scripts": { + "test": "make test" + }, + "dependencies": {}, + "devDependencies": { + "fake": "0.2.0", + "far": "0.0.1" + } +} diff --git a/node_modules/es-set-tostringtag/.eslintrc b/node_modules/es-set-tostringtag/.eslintrc new file mode 100644 index 00000000..2612ed8f --- /dev/null +++ b/node_modules/es-set-tostringtag/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/es-set-tostringtag/.nycrc b/node_modules/es-set-tostringtag/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/node_modules/es-set-tostringtag/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/es-set-tostringtag/CHANGELOG.md b/node_modules/es-set-tostringtag/CHANGELOG.md new file mode 100644 index 00000000..00bdc038 --- /dev/null +++ b/node_modules/es-set-tostringtag/CHANGELOG.md @@ -0,0 +1,67 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v2.1.0](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.3...v2.1.0) - 2025-01-01 + +### Commits + +- [actions] split out node 10-20, and 20+ [`ede033c`](https://github.com/es-shims/es-set-tostringtag/commit/ede033cc4e506c3966d2d482d4ac5987e329162a) +- [types] use shared config [`28ef164`](https://github.com/es-shims/es-set-tostringtag/commit/28ef164ad7c5bc21837c79f7ef25542a1f258ade) +- [New] add `nonConfigurable` option [`3bee3f0`](https://github.com/es-shims/es-set-tostringtag/commit/3bee3f04caddd318f3932912212ed20b2d62aad7) +- [Fix] validate boolean option argument [`3c8a609`](https://github.com/es-shims/es-set-tostringtag/commit/3c8a609c795a305ccca163f0ff6956caa88cdc0e) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/get-intrinsic`, `@types/tape`, `auto-changelog`, `tape` [`501a969`](https://github.com/es-shims/es-set-tostringtag/commit/501a96998484226e07f5ffd447e8f305a998f1d8) +- [Tests] add coverage [`18af289`](https://github.com/es-shims/es-set-tostringtag/commit/18af2897b4e937373c9b8c8831bc338932246470) +- [readme] document `force` option [`bd446a1`](https://github.com/es-shims/es-set-tostringtag/commit/bd446a107b71a2270278442e5124f45590d3ee64) +- [Tests] use `@arethetypeswrong/cli` [`7c2c2fa`](https://github.com/es-shims/es-set-tostringtag/commit/7c2c2fa3cca0f4d263603adb75426b239514598f) +- [Tests] replace `aud` with `npm audit` [`9e372d7`](https://github.com/es-shims/es-set-tostringtag/commit/9e372d7e6db3dab405599a14d9074a99a03b8242) +- [Deps] update `get-intrinsic` [`7df1216`](https://github.com/es-shims/es-set-tostringtag/commit/7df12167295385c2a547410e687cb0c04f3a34b9) +- [Deps] update `hasown` [`993a7d2`](https://github.com/es-shims/es-set-tostringtag/commit/993a7d200e2059fd857ec1a25d0a49c2c34ae6e2) +- [Dev Deps] add missing peer dep [`148ed8d`](https://github.com/es-shims/es-set-tostringtag/commit/148ed8db99a7a94f9af3823fd083e6e437fa1587) + +## [v2.0.3](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.2...v2.0.3) - 2024-02-20 + +### Commits + +- add types [`d538513`](https://github.com/es-shims/es-set-tostringtag/commit/d5385133592a32a0a416cb535327918af7fbc4ad) +- [Deps] update `get-intrinsic`, `has-tostringtag`, `hasown` [`d129b29`](https://github.com/es-shims/es-set-tostringtag/commit/d129b29536bccc8a9d03a47887ca4d1f7ad0c5b9) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`132ed23`](https://github.com/es-shims/es-set-tostringtag/commit/132ed23c964a41ed55e4ab4a5a2c3fe185e821c1) +- [Tests] fix hasOwn require [`f89c831`](https://github.com/es-shims/es-set-tostringtag/commit/f89c831fe5f3edf1f979c597b56fee1be6111f56) + +## [v2.0.2](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.1...v2.0.2) - 2023-10-20 + +### Commits + +- [Refactor] use `hasown` instead of `has` [`0cc6c4e`](https://github.com/es-shims/es-set-tostringtag/commit/0cc6c4e61fd13e8f00b85424ae6e541ebf289e74) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`70e447c`](https://github.com/es-shims/es-set-tostringtag/commit/70e447cf9f82b896ddf359fda0a0498c16cf3ed2) +- [Deps] update `get-intrinsic` [`826aab7`](https://github.com/es-shims/es-set-tostringtag/commit/826aab76180392871c8efa99acc0f0bbf775c64e) + +## [v2.0.1](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.0...v2.0.1) - 2023-01-05 + +### Fixed + +- [Fix] move `has` to prod deps [`#2`](https://github.com/es-shims/es-set-tostringtag/issues/2) + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config` [`b9eecd2`](https://github.com/es-shims/es-set-tostringtag/commit/b9eecd23c10b7b43ba75089ac8ff8cc6b295798b) + +## [v2.0.0](https://github.com/es-shims/es-set-tostringtag/compare/v1.0.0...v2.0.0) - 2022-12-21 + +### Commits + +- [Tests] refactor tests [`168dcfb`](https://github.com/es-shims/es-set-tostringtag/commit/168dcfbb535c279dc48ccdc89419155125aaec18) +- [Breaking] do not set toStringTag if it is already set [`226ab87`](https://github.com/es-shims/es-set-tostringtag/commit/226ab874192c625d9e5f0e599d3f60d2b2aa83b5) +- [New] add `force` option to set even if already set [`1abd4ec`](https://github.com/es-shims/es-set-tostringtag/commit/1abd4ecb282f19718c4518284b0293a343564505) + +## v1.0.0 - 2022-12-21 + +### Commits + +- Initial implementation, tests, readme [`a0e1147`](https://github.com/es-shims/es-set-tostringtag/commit/a0e11473f79a233b46374525c962ea1b4d42418a) +- Initial commit [`ffd4aff`](https://github.com/es-shims/es-set-tostringtag/commit/ffd4afffbeebf29aff0d87a7cfc3f7844e09fe68) +- npm init [`fffe5bd`](https://github.com/es-shims/es-set-tostringtag/commit/fffe5bd1d1146d084730a387a9c672371f4a8fff) +- Only apps should have lockfiles [`d363871`](https://github.com/es-shims/es-set-tostringtag/commit/d36387139465623e161a15dbd39120537f150c62) diff --git a/node_modules/es-set-tostringtag/LICENSE b/node_modules/es-set-tostringtag/LICENSE new file mode 100644 index 00000000..c2a8460a --- /dev/null +++ b/node_modules/es-set-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-set-tostringtag/README.md b/node_modules/es-set-tostringtag/README.md new file mode 100644 index 00000000..c27bc9fc --- /dev/null +++ b/node_modules/es-set-tostringtag/README.md @@ -0,0 +1,53 @@ +# es-set-tostringtag [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A helper to optimistically set Symbol.toStringTag, when possible. + +## Example +Most common usage: +```js +var assert = require('assert'); +var setToStringTag = require('es-set-tostringtag'); + +var obj = {}; + +assert.equal(Object.prototype.toString.call(obj), '[object Object]'); + +setToStringTag(obj, 'tagged!'); + +assert.equal(Object.prototype.toString.call(obj), '[object tagged!]'); +``` + +## Options +An optional options argument can be provided as the third argument. The available options are: + +### `force` +If the `force` option is set to `true`, the toStringTag will be set even if it is already set. + +### `nonConfigurable` +If the `nonConfigurable` option is set to `true`, the toStringTag will be defined as non-configurable when possible. + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.com/package/es-set-tostringtag +[npm-version-svg]: https://versionbadg.es/es-shims/es-set-tostringtag.svg +[deps-svg]: https://david-dm.org/es-shims/es-set-tostringtag.svg +[deps-url]: https://david-dm.org/es-shims/es-set-tostringtag +[dev-deps-svg]: https://david-dm.org/es-shims/es-set-tostringtag/dev-status.svg +[dev-deps-url]: https://david-dm.org/es-shims/es-set-tostringtag#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-set-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-set-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-set-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-set-tostringtag +[codecov-image]: https://codecov.io/gh/es-shims/es-set-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/es-shims/es-set-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/es-set-tostringtag +[actions-url]: https://github.com/es-shims/es-set-tostringtag/actions diff --git a/node_modules/es-set-tostringtag/index.d.ts b/node_modules/es-set-tostringtag/index.d.ts new file mode 100644 index 00000000..c9a8fc4d --- /dev/null +++ b/node_modules/es-set-tostringtag/index.d.ts @@ -0,0 +1,10 @@ +declare function setToStringTag( + object: object & { [Symbol.toStringTag]?: unknown }, + value: string | unknown, + options?: { + force?: boolean; + nonConfigurable?: boolean; + }, +): void; + +export = setToStringTag; \ No newline at end of file diff --git a/node_modules/es-set-tostringtag/index.js b/node_modules/es-set-tostringtag/index.js new file mode 100644 index 00000000..6b6b49c7 --- /dev/null +++ b/node_modules/es-set-tostringtag/index.js @@ -0,0 +1,35 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); + +var hasToStringTag = require('has-tostringtag/shams')(); +var hasOwn = require('hasown'); +var $TypeError = require('es-errors/type'); + +var toStringTag = hasToStringTag ? Symbol.toStringTag : null; + +/** @type {import('.')} */ +module.exports = function setToStringTag(object, value) { + var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force; + var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable; + if ( + (typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean') + || (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean') + ) { + throw new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans'); + } + if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) { + if ($defineProperty) { + $defineProperty(object, toStringTag, { + configurable: !nonConfigurable, + enumerable: false, + value: value, + writable: false + }); + } else { + object[toStringTag] = value; // eslint-disable-line no-param-reassign + } + } +}; diff --git a/node_modules/es-set-tostringtag/package.json b/node_modules/es-set-tostringtag/package.json new file mode 100644 index 00000000..277c3e5a --- /dev/null +++ b/node_modules/es-set-tostringtag/package.json @@ -0,0 +1,78 @@ +{ + "name": "es-set-tostringtag", + "version": "2.1.0", + "description": "A helper to optimistically set Symbol.toStringTag, when possible.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@\">= 10.2\" audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/es-shims/es-set-tostringtag.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/es-shims/es-set-tostringtag/issues" + }, + "homepage": "https://github.com/es-shims/es-set-tostringtag#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.2", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/get-intrinsic": "^1.2.3", + "@types/has-symbols": "^1.0.2", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "testling": { + "files": "./test/index.js" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/es-set-tostringtag/test/index.js b/node_modules/es-set-tostringtag/test/index.js new file mode 100644 index 00000000..f1757b3a --- /dev/null +++ b/node_modules/es-set-tostringtag/test/index.js @@ -0,0 +1,85 @@ +'use strict'; + +var test = require('tape'); +var hasToStringTag = require('has-tostringtag/shams')(); +var hasOwn = require('hasown'); + +var setToStringTag = require('../'); + +test('setToStringTag', function (t) { + t.equal(typeof setToStringTag, 'function', 'is a function'); + + /** @type {{ [Symbol.toStringTag]?: typeof sentinel }} */ + var obj = {}; + var sentinel = {}; + + setToStringTag(obj, sentinel); + + t['throws']( + // @ts-expect-error + function () { setToStringTag(obj, sentinel, { force: 'yes' }); }, + TypeError, + 'throws if options is not an object' + ); + + t.test('has Symbol.toStringTag', { skip: !hasToStringTag }, function (st) { + st.ok(hasOwn(obj, Symbol.toStringTag), 'has toStringTag property'); + + st.equal(obj[Symbol.toStringTag], sentinel, 'toStringTag property is as expected'); + + st.equal(String(obj), '[object Object]', 'toStringTag works'); + + /** @type {{ [Symbol.toStringTag]?: string }} */ + var tagged = {}; + tagged[Symbol.toStringTag] = 'already tagged'; + st.equal(String(tagged), '[object already tagged]', 'toStringTag works'); + + setToStringTag(tagged, 'new tag'); + st.equal(String(tagged), '[object already tagged]', 'toStringTag is unchanged'); + + setToStringTag(tagged, 'new tag', { force: true }); + st.equal(String(tagged), '[object new tag]', 'toStringTag is changed with force: true'); + + st.deepEqual( + Object.getOwnPropertyDescriptor(tagged, Symbol.toStringTag), + { + configurable: true, + enumerable: false, + value: 'new tag', + writable: false + }, + 'has expected property descriptor' + ); + + setToStringTag(tagged, 'new tag', { force: true, nonConfigurable: true }); + st.deepEqual( + Object.getOwnPropertyDescriptor(tagged, Symbol.toStringTag), + { + configurable: false, + enumerable: false, + value: 'new tag', + writable: false + }, + 'is nonconfigurable' + ); + + st.end(); + }); + + t.test('does not have Symbol.toStringTag', { skip: hasToStringTag }, function (st) { + var passed = true; + for (var key in obj) { // eslint-disable-line no-restricted-syntax + if (hasOwn(obj, key)) { + st.fail('object has own key ' + key); + passed = false; + } + } + if (passed) { + st.ok(true, 'object has no enumerable own keys'); + } + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/es-set-tostringtag/tsconfig.json b/node_modules/es-set-tostringtag/tsconfig.json new file mode 100644 index 00000000..d9a6668c --- /dev/null +++ b/node_modules/es-set-tostringtag/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/eventsource/.editorconfig b/node_modules/eventsource/.editorconfig new file mode 100644 index 00000000..88f10ae8 --- /dev/null +++ b/node_modules/eventsource/.editorconfig @@ -0,0 +1,27 @@ +# http://editorconfig.org +root = true + +[*] +# Use hard or soft tabs +indent_style = space + +# Size of a single indent +indent_size = tab + +# Number of columns representing a tab character +tab_width = 2 + +# Use line-feed as EOL indicator +end_of_line = lf + +# Use UTF-8 character encoding for all files +charset = utf-8 + +# Remove any whitespace characters preceding newline characters +trim_trailing_whitespace = true + +# Ensure file ends with a newline when saving +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/node_modules/eventsource/CONTRIBUTING.md b/node_modules/eventsource/CONTRIBUTING.md new file mode 100644 index 00000000..f66db3b0 --- /dev/null +++ b/node_modules/eventsource/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Contributing to EventSource + +If you add or fix something, add tests. + +## Release process + +Update `HISTORY.md`, Then: + + npm outdated --depth 0 # See if you can upgrade something + npm run polyfill + git commit ... + npm version [major|minor|patch] + npm publish diff --git a/node_modules/eventsource/HISTORY.md b/node_modules/eventsource/HISTORY.md new file mode 100644 index 00000000..d5e662a3 --- /dev/null +++ b/node_modules/eventsource/HISTORY.md @@ -0,0 +1,161 @@ +# [2.0.2](https://github.com/EventSource/eventsource/compare/v2.0.1...v2.0.2) + +* Do not include authorization and cookie headers on redirect to different origin ([#273](https://github.com/EventSource/eventsource/pull/273) Espen Hovlandsdal) + +# [2.0.1](https://github.com/EventSource/eventsource/compare/v2.0.0...v2.0.1) + +* Fix `URL is not a constructor` error for browser ([#268](https://github.com/EventSource/eventsource/pull/268) Ajinkya Rajput) + +# [2.0.0](https://github.com/EventSource/eventsource/compare/v1.1.0...v2.0.0) + +* BREAKING: Node >= 12 now required ([#152](https://github.com/EventSource/eventsource/pull/152) @HonkingGoose) +* Preallocate buffer size when reading data for increased performance with large messages ([#239](https://github.com/EventSource/eventsource/pull/239) Pau Freixes) +* Removed dependency on url-parser. Fixes [CVE-2022-0512](https://www.whitesourcesoftware.com/vulnerability-database/CVE-2022-0512) & [CVE-2022-0691](https://nvd.nist.gov/vuln/detail/CVE-2022-0691) ([#249](https://github.com/EventSource/eventsource/pull/249) Alex Hladin) + +# [1.1.1](https://github.com/EventSource/eventsource/compare/v1.1.0...v1.1.1) + +* Do not include authorization and cookie headers on redirect to different origin ([#273](https://github.com/EventSource/eventsource/pull/273) Espen Hovlandsdal) + +# [1.1.0](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.0) + +* Improve performance for large messages across many chunks ([#130](https://github.com/EventSource/eventsource/pull/130) Trent Willis) +* Add `createConnection` option for http or https requests ([#120](https://github.com/EventSource/eventsource/pull/120) Vasily Lavrov) +* Support HTTP 302 redirects ([#116](https://github.com/EventSource/eventsource/pull/116) Ryan Bonte) +* Prevent sequential errors from attempting multiple reconnections ([#125](https://github.com/EventSource/eventsource/pull/125) David Patty) +* Add `new` to correct test ([#111](https://github.com/EventSource/eventsource/pull/101) Stéphane Alnet) +* Fix reconnections attempts now happen more than once ([#136](https://github.com/EventSource/eventsource/pull/136) Icy Fish) + +# [1.0.7](https://github.com/EventSource/eventsource/compare/v1.0.6...v1.0.7) + +* Add dispatchEvent to EventSource ([#101](https://github.com/EventSource/eventsource/pull/101) Ali Afroozeh) +* Added `checkServerIdentity` option ([#104](https://github.com/EventSource/eventsource/pull/104) cintolas) +* Surface request error message ([#107](https://github.com/EventSource/eventsource/pull/107) RasPhilCo) + +# [1.0.6](https://github.com/EventSource/eventsource/compare/v1.0.5...v1.0.6) + +* Fix issue where a unicode sequence split in two chunks would lead to invalid messages ([#108](https://github.com/EventSource/eventsource/pull/108) Espen Hovlandsdal) +* Change example to use `eventsource/ssestream` (Aslak Hellesøy) + +# [1.0.5](https://github.com/EventSource/eventsource/compare/v1.0.4...v1.0.5) + +* Check for `window` existing before polyfilling. ([#80](https://github.com/EventSource/eventsource/pull/80) Neftaly Hernandez) + +# [1.0.4](https://github.com/EventSource/eventsource/compare/v1.0.2...v1.0.4) + +* Pass withCredentials on to the XHR. ([#79](https://github.com/EventSource/eventsource/pull/79) Ken Mayer) + +# [1.0.2](https://github.com/EventSource/eventsource/compare/v1.0.1...v1.0.2) + +* Fix proxy not working when proxy and target URL uses different protocols. ([#76](https://github.com/EventSource/eventsource/pull/76) Espen Hovlandsdal) +* Make `close()` a prototype method instead of an instance method. ([#77](https://github.com/EventSource/eventsource/pull/77) Espen Hovlandsdal) + +# [1.0.1](https://github.com/EventSource/eventsource/compare/v1.0.0...v1.0.1) + +* Reconnect if server responds with HTTP 500, 502, 503 or 504. ([#74](https://github.com/EventSource/eventsource/pull/74) Vykintas Narmontas) + +# [1.0.0](https://github.com/EventSource/eventsource/compare/v0.2.3...v1.0.0) + +* Add missing `removeEventListener`-method. ([#51](https://github.com/EventSource/eventsource/pull/51) Yucheng Tu / Espen Hovlandsdal) +* Fix EventSource reconnecting on non-200 responses. ([af84476](https://github.com/EventSource/eventsource/commit/af84476b519a01e61b8c80727261df52ae40022c) Espen Hovlandsdal) +* Add ability to customize https options. ([#53](https://github.com/EventSource/eventsource/pull/53) Rafael Alfaro) +* Add readyState constants to EventSource instances. ([#66](https://github.com/EventSource/eventsource/pull/66) Espen Hovlandsdal) + +# [0.2.3](https://github.com/EventSource/eventsource/compare/v0.2.2...v0.2.3) + +* Fix `onConnectionClosed` firing multiple times resulting in multiple connections. ([#61](https://github.com/EventSource/eventsource/pull/61) Phil Strong / Duncan Wong) +* Remove unneeded isPlainObject check for headers. ([#64](https://github.com/EventSource/eventsource/pull/64) David Mark) + +# [0.2.2](https://github.com/EventSource/eventsource/compare/v0.2.1...v0.2.2) + +* Don't include test files in npm package. ([#56](https://github.com/EventSource/eventsource/pull/56) eanplatter) + +# [0.2.1](https://github.com/EventSource/eventsource/compare/v0.2.0...v0.2.1) + +* Fix `close()` for polyfill. ([#52](https://github.com/EventSource/eventsource/pull/52) brian-medendorp) +* Add http/https proxy function. ([#46](https://github.com/EventSource/eventsource/pull/46) Eric Lu) +* Fix reconnect for polyfill. Only disable reconnect when server status is 204. (Aslak Hellesøy). +* Drop support for Node 0.10.x and older (Aslak Hellesøy). + +# [0.2.0](https://github.com/EventSource/eventsource/compare/v0.1.6...v0.2.0) + +* Renamed repository to `eventsource` (since it's not just Node, but also browser polyfill). (Aslak Hellesøy). +* Compatibility with webpack/browserify. ([#44](https://github.com/EventSource/eventsource/pull/44) Adriano Raiano). + +# [0.1.6](https://github.com/EventSource/eventsource/compare/v0.1.5...v0.1.6) + +* Ignore headers without a value. ([#41](https://github.com/EventSource/eventsource/issues/41), [#43](https://github.com/EventSource/eventsource/pull/43) Adriano Raiano) + +# [0.1.5](https://github.com/EventSource/eventsource/compare/v0.1.4...v0.1.5) + +* Refactor tests to support Node.js 0.12.0 and Io.js 1.1.0. (Aslak Hellesøy) + +# [0.1.4](https://github.com/EventSource/eventsource/compare/v0.1.3...master) + +* Bugfix: Added missing origin property. ([#39](https://github.com/EventSource/eventsource/pull/39), [#38](https://github.com/EventSource/eventsource/issues/38) Arnout Kazemier) +* Expose `status` property on `error` events. ([#40](https://github.com/EventSource/eventsource/pull/40) Adriano Raiano) + +# [0.1.3](https://github.com/EventSource/eventsource/compare/v0.1.2...v0.1.3) + +* Bugfix: Made message properties enumerable. ([#37](https://github.com/EventSource/eventsource/pull/37) Golo Roden) + +# [0.1.2](https://github.com/EventSource/eventsource/compare/v0.1.1...v0.1.2) + +* Bugfix: Blank lines not read. ([#35](https://github.com/EventSource/eventsource/issues/35), [#36](https://github.com/EventSource/eventsource/pull/36) Lesterpig) + +# [0.1.1](https://github.com/EventSource/eventsource/compare/v0.1.0...v0.1.1) + +* Bugfix: Fix message type. ([#33](https://github.com/EventSource/eventsource/pull/33) Romain Gauthier) + +# [0.1.0](https://github.com/EventSource/eventsource/compare/v0.0.10...v0.1.0) + +* Bugfix: High CPU usage by replacing Jison with port of WebKit's parser. ([#25](https://github.com/EventSource/eventsource/issues/25), [#32](https://github.com/EventSource/eventsource/pull/32), [#18](https://github.com/EventSource/eventsource/issues/18) qqueue) +* Reformatted all code to 2 spaces. + +# [0.0.10](https://github.com/EventSource/eventsource/compare/v0.0.9...v0.0.10) + +* Provide `Event` argument on `open` and `error` event ([#30](https://github.com/EventSource/eventsource/issues/30), [#31](https://github.com/EventSource/eventsource/pull/31) Donghwan Kim) +* Expose `lastEventId` on messages. ([#28](https://github.com/EventSource/eventsource/pull/28) mbieser) + +# [0.0.9](https://github.com/EventSource/eventsource/compare/v0.0.8...v0.0.9) + +* Bugfix: old "last-event-id" used on reconnect ([#27](https://github.com/EventSource/eventsource/pull/27) Aslak Hellesøy) + +# [0.0.8](https://github.com/EventSource/eventsource/compare/v0.0.7...v0.0.8) + +* Bugfix: EventSource still reconnected when closed ([#24](https://github.com/EventSource/eventsource/pull/24) FrozenCow) +* Allow unauthorized HTTPS connections by setting `rejectUnauthorized` to false. (Aslak Hellesøy) + +# [0.0.7](https://github.com/EventSource/eventsource/compare/v0.0.6...v0.0.7) + +* Explicitly raise an error when server returns http 403 and don't continue ([#20](https://github.com/EventSource/eventsource/pull/20) Scott Moak) +* Added ability to send custom http headers to server ([#21](https://github.com/EventSource/eventsource/pull/21), [#9](https://github.com/EventSource/eventsource/issues/9) Scott Moak) +* Fix Unicode support to cope with Javascript Unicode size limitations ([#23](https://github.com/EventSource/eventsource/pull/23), [#22](https://github.com/EventSource/eventsource/issues/22) Devon Adkisson) +* Graceful handling of parse errors ([#19](https://github.com/EventSource/eventsource/issues/19) Aslak Hellesøy) +* Switched from testing with Nodeunit to Mocha (Aslak Hellesøy) + +# [0.0.6](https://github.com/EventSource/eventsource/compare/v0.0.5...v0.0.6) + +* Add Accept: text/event-stream header ([#17](https://github.com/EventSource/eventsource/pull/17) William Wicks) + +# [0.0.5](https://github.com/EventSource/eventsource/compare/v0.0.4...v0.0.5) + +* Add no-cache and https support ([#10](https://github.com/EventSource/eventsource/pull/10) Einar Otto Stangvik) +* Ensure that Last-Event-ID is sent to the server for reconnects, as defined in the spec ([#8](https://github.com/EventSource/eventsource/pull/8) Einar Otto Stangvik) +* Verify that CR and CRLF are accepted alongside LF ([#7](https://github.com/EventSource/eventsource/pull/7) Einar Otto Stangvik) +* Emit 'open' event ([#4](https://github.com/EventSource/eventsource/issues/4) Einar Otto Stangvik) + +# [0.0.4](https://github.com/EventSource/eventsource/compare/v0.0.3...v0.0.4) + +* Automatic reconnect every second if the server is down. Reconnect interval can be set with `reconnectInterval` (not in W3C spec). (Aslak Hellesøy) + +# [0.0.3](https://github.com/EventSource/eventsource/compare/v0.0.2...v0.0.3) + +* Jison based eventstream parser ([#2](https://github.com/EventSource/eventsource/pull/2) Einar Otto Stangvik) + +# [0.0.2](https://github.com/EventSource/eventsource/compare/v0.0.1...v0.0.2) + +* Use native EventListener (Aslak Hellesøy) + +# 0.0.1 + +* First release diff --git a/node_modules/eventsource/LICENSE b/node_modules/eventsource/LICENSE new file mode 100644 index 00000000..505b0d90 --- /dev/null +++ b/node_modules/eventsource/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) EventSource GitHub organisation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/eventsource/README.md b/node_modules/eventsource/README.md new file mode 100644 index 00000000..a6b6d2f4 --- /dev/null +++ b/node_modules/eventsource/README.md @@ -0,0 +1,91 @@ +# EventSource [![npm version](http://img.shields.io/npm/v/eventsource.svg?style=flat-square)](https://www.npmjs.com/package/eventsource)[![NPM Downloads](https://img.shields.io/npm/dm/eventsource.svg?style=flat-square)](http://npm-stat.com/charts.html?package=eventsource&from=2015-09-01)[![Dependencies](https://img.shields.io/david/EventSource/eventsource.svg?style=flat-square)](https://david-dm.org/EventSource/eventsource) + +![Build](https://github.com/EventSource/eventsource/actions/workflows/build.yml/badge.svg) + +This library is a pure JavaScript implementation of the [EventSource](https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events) client. The API aims to be W3C compatible. + +You can use it with Node.js or as a browser polyfill for +[browsers that don't have native `EventSource` support](http://caniuse.com/#feat=eventsource). + +## Install + + npm install eventsource + +## Example + + npm install + node ./example/sse-server.js + node ./example/sse-client.js # Node.js client + open http://localhost:8080 # Browser client - both native and polyfill + curl http://localhost:8080/sse # Enjoy the simplicity of SSE + +## Browser Polyfill + +Just add `example/eventsource-polyfill.js` file to your web page: + +```html + +``` + +Now you will have two global constructors: + +```javascript +window.EventSourcePolyfill +window.EventSource // Unchanged if browser has defined it. Otherwise, same as window.EventSourcePolyfill +``` + +If you're using [webpack](https://webpack.github.io/) or [browserify](http://browserify.org/) +you can of course build your own. (The `example/eventsource-polyfill.js` is built with webpack). + +## Extensions to the W3C API + +### Setting HTTP request headers + +You can define custom HTTP headers for the initial HTTP request. This can be useful for e.g. sending cookies +or to specify an initial `Last-Event-ID` value. + +HTTP headers are defined by assigning a `headers` attribute to the optional `eventSourceInitDict` argument: + +```javascript +var eventSourceInitDict = {headers: {'Cookie': 'test=test'}}; +var es = new EventSource(url, eventSourceInitDict); +``` + +### Allow unauthorized HTTPS requests + +By default, https requests that cannot be authorized will cause the connection to fail and an exception +to be emitted. You can override this behaviour, along with other https options: + +```javascript +var eventSourceInitDict = {https: {rejectUnauthorized: false}}; +var es = new EventSource(url, eventSourceInitDict); +``` + +Note that for Node.js < v0.10.x this option has no effect - unauthorized HTTPS requests are *always* allowed. + +### HTTP status code on error events + +Unauthorized and redirect error status codes (for example 401, 403, 301, 307) are available in the `status` property in the error event. + +```javascript +es.onerror = function (err) { + if (err) { + if (err.status === 401 || err.status === 403) { + console.log('not authorized'); + } + } +}; +``` + +### HTTP/HTTPS proxy + +You can define a `proxy` option for the HTTP request to be used. This is typically useful if you are behind a corporate firewall. + +```javascript +var es = new EventSource(url, {proxy: 'http://your.proxy.com'}); +``` + + +## License + +MIT-licensed. See LICENSE diff --git a/node_modules/eventsource/example/eventsource-polyfill.js b/node_modules/eventsource/example/eventsource-polyfill.js new file mode 100644 index 00000000..28084796 --- /dev/null +++ b/node_modules/eventsource/example/eventsource-polyfill.js @@ -0,0 +1,9736 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 21); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) {/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + + + +var base64 = __webpack_require__(23) +var ieee754 = __webpack_require__(24) +var isArray = __webpack_require__(10) + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + +/* + * Export kMaxLength after typed array support is determined. + */ +exports.kMaxLength = kMaxLength() + +function typedArraySupport () { + try { + var arr = new Uint8Array(1) + arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +} + +function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff +} + +function createBuffer (that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length') + } + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length) + } + that.length = length + } + + return that +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length) + } + + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error( + 'If encoding is specified then the first argument must be a string' + ) + } + return allocUnsafe(this, arg) + } + return from(this, arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +// TODO: Legacy, not needed anymore. Remove in next major version. +Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype + return arr +} + +function from (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length) + } + + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset) + } + + return fromObject(that, value) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length) +} + +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array + if (typeof Symbol !== 'undefined' && Symbol.species && + Buffer[Symbol.species] === Buffer) { + // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true + }) + } +} + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } +} + +function alloc (that, size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(that, size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(that, size).fill(fill, encoding) + : createBuffer(that, size).fill(fill) + } + return createBuffer(that, size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding) +} + +function allocUnsafe (that, size) { + assertSize(size) + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0 + } + } + return that +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size) +} + +function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } + + var length = byteLength(string, encoding) | 0 + that = createBuffer(that, length) + + var actual = that.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual) + } + + return that +} + +function fromArrayLike (that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + that = createBuffer(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +function fromArrayBuffer (that, array, byteOffset, length) { + array.byteLength // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array) + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset) + } else { + array = new Uint8Array(array, byteOffset, length) + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array) + } + return that +} + +function fromObject (that, obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + that = createBuffer(that, len) + + if (that.length === 0) { + return that + } + + obj.copy(that, 0, 0, len) + return that + } + + if (obj) { + if ((typeof ArrayBuffer !== 'undefined' && + obj.buffer instanceof ArrayBuffer) || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0) + } + return fromArrayLike(that, obj) + } + + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data) + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') +} + +function checked (length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && + (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + string = '' + string + } + + var len = string.length + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect +// Buffer instances. +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!Buffer.isBuffer(target)) { + throw new TypeError('Argument must be a Buffer') + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (Buffer.TYPED_ARRAY_SUPPORT && + typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end) + newBuf.__proto__ = Buffer.prototype + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start] + } + } + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + var i + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, start + len), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if (code < 256) { + val = code + } + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + } else if (typeof val === 'number') { + val = val & 255 + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : utf8ToBytes(new Buffer(val, encoding).toString()) + var len = bytes.length + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +function isnan (val) { + return val !== val // eslint-disable-line no-self-compare +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + + + +/**/ + +var pna = __webpack_require__(6); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = Object.create(__webpack_require__(5)); +util.inherits = __webpack_require__(2); +/**/ + +var Readable = __webpack_require__(15); +var Writable = __webpack_require__(18); + +util.inherits(Duplex, Readable); + +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + pna.nextTick(cb, err); +}; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3).Buffer)) + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +if (typeof process === 'undefined' || + !process.version || + process.version.indexOf('v0.') === 0 || + process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { nextTick: nextTick }; +} else { + module.exports = process +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(3) +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var punycode = __webpack_require__(25); +var util = __webpack_require__(27); + +exports.parse = urlParse; +exports.resolve = urlResolve; +exports.resolveObject = urlResolveObject; +exports.format = urlFormat; + +exports.Url = Url; + +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // Special case for a simple path URL + simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }, + querystring = __webpack_require__(28); + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && util.isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; +} + +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + if (!util.isString(url)) { + throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + } + + // Copy chrome, IE, opera backslash-handling behavior. + // Back slashes before the query string get converted to forward slashes + // See: https://code.google.com/p/chromium/issues/detail?id=25916 + var queryIndex = url.indexOf('?'), + splitter = + (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', + uSplit = url.split(splitter), + slashRegex = /\\/g; + uSplit[0] = uSplit[0].replace(slashRegex, '/'); + url = uSplit.join(splitter); + + var rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + var simplePath = simplePathPattern.exec(rest); + if (simplePath) { + this.path = rest; + this.href = rest; + this.pathname = simplePath[1]; + if (simplePath[2]) { + this.search = simplePath[2]; + if (parseQueryString) { + this.query = querystring.parse(this.search.substr(1)); + } else { + this.query = this.search.substr(1); + } + } else if (parseQueryString) { + this.search = ''; + this.query = {}; + } + return this; + } + } + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + this.protocol = lowerProto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; + } + } + + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (var i = 0; i < hostEndingChars.length; i++) { + var hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = decodeURIComponent(auth); + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (var i = 0; i < nonHostChars.length; i++) { + var hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; + + this.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + this.parseHost(); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (var i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } + + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } else { + // hostnames are always lower case. + this.hostname = this.hostname.toLowerCase(); + } + + if (!ipv6Hostname) { + // IDNA Support: Returns a punycoded representation of "domain". + // It only converts parts of the domain name that + // have non-ASCII characters, i.e. it doesn't matter if + // you call it with a domain that already is ASCII-only. + this.hostname = punycode.toASCII(this.hostname); + } + + var p = this.port ? ':' + this.port : ''; + var h = this.hostname || ''; + this.host = h + p; + this.href += this.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } + + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { + + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (var i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + if (rest.indexOf(ae) === -1) + continue; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } + + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + this.query = rest.substr(qm + 1); + if (parseQueryString) { + this.query = querystring.parse(this.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + this.search = ''; + this.query = {}; + } + if (rest) this.pathname = rest; + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = '/'; + } + + //to support http.request + if (this.pathname || this.search) { + var p = this.pathname || ''; + var s = this.search || ''; + this.path = p + s; + } + + // finally, reconstruct the href based on what has been validated. + this.href = this.format(); + return this; +}; + +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (util.isString(obj)) obj = urlParse(obj); + if (!(obj instanceof Url)) return Url.prototype.format.call(obj); + return obj.format(); +} + +Url.prototype.format = function() { + var auth = this.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } + + var protocol = this.protocol || '', + pathname = this.pathname || '', + hash = this.hash || '', + host = false, + query = ''; + + if (this.host) { + host = auth + this.host; + } else if (this.hostname) { + host = auth + (this.hostname.indexOf(':') === -1 ? + this.hostname : + '[' + this.hostname + ']'); + if (this.port) { + host += ':' + this.port; + } + } + + if (this.query && + util.isObject(this.query) && + Object.keys(this.query).length) { + query = querystring.stringify(this.query); + } + + var search = this.search || (query && ('?' + query)) || ''; + + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (this.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; + + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); + + return protocol + host + pathname + search + hash; +}; + +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} + +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; + +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} + +Url.prototype.resolveObject = function(relative) { + if (util.isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } + + var result = new Url(); + var tkeys = Object.keys(this); + for (var tk = 0; tk < tkeys.length; tk++) { + var tkey = tkeys[tk]; + result[tkey] = this[tkey]; + } + + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; + + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } + + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + var rkeys = Object.keys(relative); + for (var rk = 0; rk < rkeys.length; rk++) { + var rkey = rkeys[rk]; + if (rkey !== 'protocol') + result[rkey] = relative[rkey]; + } + + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } + + result.href = result.format(); + return result; + } + + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + var keys = Object.keys(relative); + for (var v = 0; v < keys.length; v++) { + var k = keys[v]; + result[k] = relative[k]; + } + result.href = result.format(); + return result; + } + + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + var relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } + + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + relPath = relative.pathname && relative.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; + + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } + + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!util.isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } + + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } + + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host || srcPath.length > 1) && + (last === '.' || last === '..') || last === ''); + + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last === '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } + + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } + + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } + + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); + + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + + mustEndAbs = mustEndAbs || (result.host && srcPath.length); + + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } + + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } + + //to support request.http + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; + +Url.prototype.parseHost = function() { + var host = this.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) this.hostname = host; +}; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); + } + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); + }; + + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); +} + +function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } +} + +function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } +} + + +/***/ }), +/* 10 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var ClientRequest = __webpack_require__(32) +var response = __webpack_require__(13) +var extend = __webpack_require__(41) +var statusCodes = __webpack_require__(42) +var url = __webpack_require__(8) + +var http = exports + +http.request = function (opts, cb) { + if (typeof opts === 'string') + opts = url.parse(opts) + else + opts = extend(opts) + + // Normally, the page is loaded from http or https, so not specifying a protocol + // will result in a (valid) protocol-relative url. However, this won't work if + // the protocol is something else, like 'file:' + var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : '' + + var protocol = opts.protocol || defaultProtocol + var host = opts.hostname || opts.host + var port = opts.port + var path = opts.path || '/' + + // Necessary for IPv6 addresses + if (host && host.indexOf(':') !== -1) + host = '[' + host + ']' + + // This may be a relative url. The browser should always be able to interpret it correctly. + opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path + opts.method = (opts.method || 'GET').toUpperCase() + opts.headers = opts.headers || {} + + // Also valid opts.auth, opts.mode + + var req = new ClientRequest(opts) + if (cb) + req.on('response', cb) + return req +} + +http.get = function get (opts, cb) { + var req = http.request(opts, cb) + req.end() + return req +} + +http.ClientRequest = ClientRequest +http.IncomingMessage = response.IncomingMessage + +http.Agent = function () {} +http.Agent.defaultMaxSockets = 4 + +http.globalAgent = new http.Agent() + +http.STATUS_CODES = statusCodes + +http.METHODS = [ + 'CHECKOUT', + 'CONNECT', + 'COPY', + 'DELETE', + 'GET', + 'HEAD', + 'LOCK', + 'M-SEARCH', + 'MERGE', + 'MKACTIVITY', + 'MKCOL', + 'MOVE', + 'NOTIFY', + 'OPTIONS', + 'PATCH', + 'POST', + 'PROPFIND', + 'PROPPATCH', + 'PURGE', + 'PUT', + 'REPORT', + 'SEARCH', + 'SUBSCRIBE', + 'TRACE', + 'UNLOCK', + 'UNSUBSCRIBE' +] +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream) + +exports.writableStream = isFunction(global.WritableStream) + +exports.abortController = isFunction(global.AbortController) + +exports.blobConstructor = false +try { + new Blob([new ArrayBuffer(1)]) + exports.blobConstructor = true +} catch (e) {} + +// The xhr request to example.com may violate some restrictive CSP configurations, +// so if we're running in a browser that supports `fetch`, avoid calling getXHR() +// and assume support for certain features below. +var xhr +function getXHR () { + // Cache the xhr value + if (xhr !== undefined) return xhr + + if (global.XMLHttpRequest) { + xhr = new global.XMLHttpRequest() + // If XDomainRequest is available (ie only, where xhr might not work + // cross domain), use the page location. Otherwise use example.com + // Note: this doesn't actually make an http request. + try { + xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com') + } catch(e) { + xhr = null + } + } else { + // Service workers don't have XHR + xhr = null + } + return xhr +} + +function checkTypeSupport (type) { + var xhr = getXHR() + if (!xhr) return false + try { + xhr.responseType = type + return xhr.responseType === type + } catch (e) {} + return false +} + +// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'. +// Safari 7.1 appears to have fixed this bug. +var haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined' +var haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice) + +// If fetch is supported, then arraybuffer will be supported too. Skip calling +// checkTypeSupport(), since that calls getXHR(). +exports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer')) + +// These next two tests unavoidably show warnings in Chrome. Since fetch will always +// be used if it's available, just return false for these to avoid the warnings. +exports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream') +exports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer && + checkTypeSupport('moz-chunked-arraybuffer') + +// If fetch is supported, then overrideMimeType will be supported too. Skip calling +// getXHR(). +exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false) + +exports.vbArray = isFunction(global.VBArray) + +function isFunction (value) { + return typeof value === 'function' +} + +xhr = null // Help gc + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process, Buffer, global) {var capability = __webpack_require__(12) +var inherits = __webpack_require__(2) +var stream = __webpack_require__(14) + +var rStates = exports.readyStates = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 +} + +var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) { + var self = this + stream.Readable.call(self) + + self._mode = mode + self.headers = {} + self.rawHeaders = [] + self.trailers = {} + self.rawTrailers = [] + + // Fake the 'close' event, but only once 'end' fires + self.on('end', function () { + // The nextTick is necessary to prevent the 'request' module from causing an infinite loop + process.nextTick(function () { + self.emit('close') + }) + }) + + if (mode === 'fetch') { + self._fetchResponse = response + + self.url = response.url + self.statusCode = response.status + self.statusMessage = response.statusText + + response.headers.forEach(function (header, key){ + self.headers[key.toLowerCase()] = header + self.rawHeaders.push(key, header) + }) + + if (capability.writableStream) { + var writable = new WritableStream({ + write: function (chunk) { + return new Promise(function (resolve, reject) { + if (self._destroyed) { + reject() + } else if(self.push(new Buffer(chunk))) { + resolve() + } else { + self._resumeFetch = resolve + } + }) + }, + close: function () { + global.clearTimeout(fetchTimer) + if (!self._destroyed) + self.push(null) + }, + abort: function (err) { + if (!self._destroyed) + self.emit('error', err) + } + }) + + try { + response.body.pipeTo(writable).catch(function (err) { + global.clearTimeout(fetchTimer) + if (!self._destroyed) + self.emit('error', err) + }) + return + } catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this + } + // fallback for when writableStream or pipeTo aren't available + var reader = response.body.getReader() + function read () { + reader.read().then(function (result) { + if (self._destroyed) + return + if (result.done) { + global.clearTimeout(fetchTimer) + self.push(null) + return + } + self.push(new Buffer(result.value)) + read() + }).catch(function (err) { + global.clearTimeout(fetchTimer) + if (!self._destroyed) + self.emit('error', err) + }) + } + read() + } else { + self._xhr = xhr + self._pos = 0 + + self.url = xhr.responseURL + self.statusCode = xhr.status + self.statusMessage = xhr.statusText + var headers = xhr.getAllResponseHeaders().split(/\r?\n/) + headers.forEach(function (header) { + var matches = header.match(/^([^:]+):\s*(.*)/) + if (matches) { + var key = matches[1].toLowerCase() + if (key === 'set-cookie') { + if (self.headers[key] === undefined) { + self.headers[key] = [] + } + self.headers[key].push(matches[2]) + } else if (self.headers[key] !== undefined) { + self.headers[key] += ', ' + matches[2] + } else { + self.headers[key] = matches[2] + } + self.rawHeaders.push(matches[1], matches[2]) + } + }) + + self._charset = 'x-user-defined' + if (!capability.overrideMimeType) { + var mimeType = self.rawHeaders['mime-type'] + if (mimeType) { + var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/) + if (charsetMatch) { + self._charset = charsetMatch[1].toLowerCase() + } + } + if (!self._charset) + self._charset = 'utf-8' // best guess + } + } +} + +inherits(IncomingMessage, stream.Readable) + +IncomingMessage.prototype._read = function () { + var self = this + + var resolve = self._resumeFetch + if (resolve) { + self._resumeFetch = null + resolve() + } +} + +IncomingMessage.prototype._onXHRProgress = function () { + var self = this + + var xhr = self._xhr + + var response = null + switch (self._mode) { + case 'text:vbarray': // For IE9 + if (xhr.readyState !== rStates.DONE) + break + try { + // This fails in IE8 + response = new global.VBArray(xhr.responseBody).toArray() + } catch (e) {} + if (response !== null) { + self.push(new Buffer(response)) + break + } + // Falls through in IE8 + case 'text': + try { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4 + response = xhr.responseText + } catch (e) { + self._mode = 'text:vbarray' + break + } + if (response.length > self._pos) { + var newData = response.substr(self._pos) + if (self._charset === 'x-user-defined') { + var buffer = new Buffer(newData.length) + for (var i = 0; i < newData.length; i++) + buffer[i] = newData.charCodeAt(i) & 0xff + + self.push(buffer) + } else { + self.push(newData, self._charset) + } + self._pos = response.length + } + break + case 'arraybuffer': + if (xhr.readyState !== rStates.DONE || !xhr.response) + break + response = xhr.response + self.push(new Buffer(new Uint8Array(response))) + break + case 'moz-chunked-arraybuffer': // take whole + response = xhr.response + if (xhr.readyState !== rStates.LOADING || !response) + break + self.push(new Buffer(new Uint8Array(response))) + break + case 'ms-stream': + response = xhr.response + if (xhr.readyState !== rStates.LOADING) + break + var reader = new global.MSStreamReader() + reader.onprogress = function () { + if (reader.result.byteLength > self._pos) { + self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos)))) + self._pos = reader.result.byteLength + } + } + reader.onload = function () { + self.push(null) + } + // reader.onerror = ??? // TODO: this + reader.readAsArrayBuffer(response) + break + } + + // The ms-stream case handles end separately in reader.onload() + if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') { + self.push(null) + } +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(3).Buffer, __webpack_require__(0))) + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__(15); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = __webpack_require__(18); +exports.Duplex = __webpack_require__(4); +exports.Transform = __webpack_require__(20); +exports.PassThrough = __webpack_require__(39); + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +/**/ + +var pna = __webpack_require__(6); +/**/ + +module.exports = Readable; + +/**/ +var isArray = __webpack_require__(10); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = __webpack_require__(9).EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = __webpack_require__(16); +/**/ + +/**/ + +var Buffer = __webpack_require__(7).Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = Object.create(__webpack_require__(5)); +util.inherits = __webpack_require__(2); +/**/ + +/**/ +var debugUtil = __webpack_require__(33); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = __webpack_require__(34); +var destroyImpl = __webpack_require__(17); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + 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]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || __webpack_require__(4); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = __webpack_require__(19).StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || __webpack_require__(4); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = __webpack_require__(19).StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, unpipeInfo); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + 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); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1))) + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(9).EventEmitter; + + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/**/ + +var pna = __webpack_require__(6); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + pna.nextTick(emitErrorNT, this, err); + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + pna.nextTick(emitErrorNT, _this, err); + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + + + +/**/ + +var pna = __webpack_require__(6); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(__webpack_require__(5)); +util.inherits = __webpack_require__(2); +/**/ + +/**/ +var internalUtil = { + deprecate: __webpack_require__(38) +}; +/**/ + +/**/ +var Stream = __webpack_require__(16); +/**/ + +/**/ + +var Buffer = __webpack_require__(7).Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = __webpack_require__(17); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || __webpack_require__(4); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || __webpack_require__(4); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + 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); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(36).setImmediate, __webpack_require__(0))) + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +/**/ + +var Buffer = __webpack_require__(7).Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + 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; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + + + +module.exports = Transform; + +var Duplex = __webpack_require__(4); + +/**/ +var util = Object.create(__webpack_require__(5)); +util.inherits = __webpack_require__(2); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +var EventSource = __webpack_require__(22) + +if (typeof window === 'object') { + window.EventSourcePolyfill = EventSource + if (!window.EventSource) window.EventSource = EventSource + module.exports = window.EventSource +} else { + module.exports = EventSource +} + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process, Buffer) {var parse = __webpack_require__(8).parse +var events = __webpack_require__(9) +var https = __webpack_require__(31) +var http = __webpack_require__(11) +var util = __webpack_require__(43) + +var httpsOptions = [ + 'pfx', 'key', 'passphrase', 'cert', 'ca', 'ciphers', + 'rejectUnauthorized', 'secureProtocol', 'servername', 'checkServerIdentity' +] + +var bom = [239, 187, 191] +var colon = 58 +var space = 32 +var lineFeed = 10 +var carriageReturn = 13 +// Beyond 256KB we could not observe any gain in performance +var maxBufferAheadAllocation = 1024 * 256 +// Headers matching the pattern should be removed when redirecting to different origin +var reUnsafeHeader = /^(cookie|authorization)$/i + +function hasBom (buf) { + return bom.every(function (charCode, index) { + return buf[index] === charCode + }) +} + +/** + * Creates a new EventSource object + * + * @param {String} url the URL to which to connect + * @param {Object} [eventSourceInitDict] extra init params. See README for details. + * @api public + **/ +function EventSource (url, eventSourceInitDict) { + var readyState = EventSource.CONNECTING + var headers = eventSourceInitDict && eventSourceInitDict.headers + var hasNewOrigin = false + Object.defineProperty(this, 'readyState', { + get: function () { + return readyState + } + }) + + Object.defineProperty(this, 'url', { + get: function () { + return url + } + }) + + var self = this + self.reconnectInterval = 1000 + self.connectionInProgress = false + + function onConnectionClosed (message) { + if (readyState === EventSource.CLOSED) return + readyState = EventSource.CONNECTING + _emit('error', new Event('error', {message: message})) + + // The url may have been changed by a temporary redirect. If that's the case, + // revert it now, and flag that we are no longer pointing to a new origin + if (reconnectUrl) { + url = reconnectUrl + reconnectUrl = null + hasNewOrigin = false + } + setTimeout(function () { + if (readyState !== EventSource.CONNECTING || self.connectionInProgress) { + return + } + self.connectionInProgress = true + connect() + }, self.reconnectInterval) + } + + var req + var lastEventId = '' + if (headers && headers['Last-Event-ID']) { + lastEventId = headers['Last-Event-ID'] + delete headers['Last-Event-ID'] + } + + var discardTrailingNewline = false + var data = '' + var eventName = '' + + var reconnectUrl = null + + function connect () { + var options = parse(url) + var isSecure = options.protocol === 'https:' + options.headers = { 'Cache-Control': 'no-cache', 'Accept': 'text/event-stream' } + if (lastEventId) options.headers['Last-Event-ID'] = lastEventId + if (headers) { + var reqHeaders = hasNewOrigin ? removeUnsafeHeaders(headers) : headers + for (var i in reqHeaders) { + var header = reqHeaders[i] + if (header) { + options.headers[i] = header + } + } + } + + // Legacy: this should be specified as `eventSourceInitDict.https.rejectUnauthorized`, + // but for now exists as a backwards-compatibility layer + options.rejectUnauthorized = !(eventSourceInitDict && !eventSourceInitDict.rejectUnauthorized) + + if (eventSourceInitDict && eventSourceInitDict.createConnection !== undefined) { + options.createConnection = eventSourceInitDict.createConnection + } + + // If specify http proxy, make the request to sent to the proxy server, + // and include the original url in path and Host headers + var useProxy = eventSourceInitDict && eventSourceInitDict.proxy + if (useProxy) { + var proxy = parse(eventSourceInitDict.proxy) + isSecure = proxy.protocol === 'https:' + + options.protocol = isSecure ? 'https:' : 'http:' + options.path = url + options.headers.Host = options.host + options.hostname = proxy.hostname + options.host = proxy.host + options.port = proxy.port + } + + // If https options are specified, merge them into the request options + if (eventSourceInitDict && eventSourceInitDict.https) { + for (var optName in eventSourceInitDict.https) { + if (httpsOptions.indexOf(optName) === -1) { + continue + } + + var option = eventSourceInitDict.https[optName] + if (option !== undefined) { + options[optName] = option + } + } + } + + // Pass this on to the XHR + if (eventSourceInitDict && eventSourceInitDict.withCredentials !== undefined) { + options.withCredentials = eventSourceInitDict.withCredentials + } + + req = (isSecure ? https : http).request(options, function (res) { + self.connectionInProgress = false + // Handle HTTP errors + if (res.statusCode === 500 || res.statusCode === 502 || res.statusCode === 503 || res.statusCode === 504) { + _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage})) + onConnectionClosed() + return + } + + // Handle HTTP redirects + if (res.statusCode === 301 || res.statusCode === 302 || res.statusCode === 307) { + var location = res.headers.location + if (!location) { + // Server sent redirect response without Location header. + _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage})) + return + } + var prevOrigin = new URL(url).origin + var nextOrigin = new URL(location).origin + hasNewOrigin = prevOrigin !== nextOrigin + if (res.statusCode === 307) reconnectUrl = url + url = location + process.nextTick(connect) + return + } + + if (res.statusCode !== 200) { + _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage})) + return self.close() + } + + readyState = EventSource.OPEN + res.on('close', function () { + res.removeAllListeners('close') + res.removeAllListeners('end') + onConnectionClosed() + }) + + res.on('end', function () { + res.removeAllListeners('close') + res.removeAllListeners('end') + onConnectionClosed() + }) + _emit('open', new Event('open')) + + // text/event-stream parser adapted from webkit's + // Source/WebCore/page/EventSource.cpp + var buf + var newBuffer + var startingPos = 0 + var startingFieldLength = -1 + var newBufferSize = 0 + var bytesUsed = 0 + + res.on('data', function (chunk) { + if (!buf) { + buf = chunk + if (hasBom(buf)) { + buf = buf.slice(bom.length) + } + bytesUsed = buf.length + } else { + if (chunk.length > buf.length - bytesUsed) { + newBufferSize = (buf.length * 2) + chunk.length + if (newBufferSize > maxBufferAheadAllocation) { + newBufferSize = buf.length + chunk.length + maxBufferAheadAllocation + } + newBuffer = Buffer.alloc(newBufferSize) + buf.copy(newBuffer, 0, 0, bytesUsed) + buf = newBuffer + } + chunk.copy(buf, bytesUsed) + bytesUsed += chunk.length + } + + var pos = 0 + var length = bytesUsed + + while (pos < length) { + if (discardTrailingNewline) { + if (buf[pos] === lineFeed) { + ++pos + } + discardTrailingNewline = false + } + + var lineLength = -1 + var fieldLength = startingFieldLength + var c + + for (var i = startingPos; lineLength < 0 && i < length; ++i) { + c = buf[i] + if (c === colon) { + if (fieldLength < 0) { + fieldLength = i - pos + } + } else if (c === carriageReturn) { + discardTrailingNewline = true + lineLength = i - pos + } else if (c === lineFeed) { + lineLength = i - pos + } + } + + if (lineLength < 0) { + startingPos = length - pos + startingFieldLength = fieldLength + break + } else { + startingPos = 0 + startingFieldLength = -1 + } + + parseEventStreamLine(buf, pos, fieldLength, lineLength) + + pos += lineLength + 1 + } + + if (pos === length) { + buf = void 0 + bytesUsed = 0 + } else if (pos > 0) { + buf = buf.slice(pos, bytesUsed) + bytesUsed = buf.length + } + }) + }) + + req.on('error', function (err) { + self.connectionInProgress = false + onConnectionClosed(err.message) + }) + + if (req.setNoDelay) req.setNoDelay(true) + req.end() + } + + connect() + + function _emit () { + if (self.listeners(arguments[0]).length > 0) { + self.emit.apply(self, arguments) + } + } + + this._close = function () { + if (readyState === EventSource.CLOSED) return + readyState = EventSource.CLOSED + if (req.abort) req.abort() + if (req.xhr && req.xhr.abort) req.xhr.abort() + } + + function parseEventStreamLine (buf, pos, fieldLength, lineLength) { + if (lineLength === 0) { + if (data.length > 0) { + var type = eventName || 'message' + _emit(type, new MessageEvent(type, { + data: data.slice(0, -1), // remove trailing newline + lastEventId: lastEventId, + origin: new URL(url).origin + })) + data = '' + } + eventName = void 0 + } else if (fieldLength > 0) { + var noValue = fieldLength < 0 + var step = 0 + var field = buf.slice(pos, pos + (noValue ? lineLength : fieldLength)).toString() + + if (noValue) { + step = lineLength + } else if (buf[pos + fieldLength + 1] !== space) { + step = fieldLength + 1 + } else { + step = fieldLength + 2 + } + pos += step + + var valueLength = lineLength - step + var value = buf.slice(pos, pos + valueLength).toString() + + if (field === 'data') { + data += value + '\n' + } else if (field === 'event') { + eventName = value + } else if (field === 'id') { + lastEventId = value + } else if (field === 'retry') { + var retry = parseInt(value, 10) + if (!Number.isNaN(retry)) { + self.reconnectInterval = retry + } + } + } + } +} + +module.exports = EventSource + +util.inherits(EventSource, events.EventEmitter) +EventSource.prototype.constructor = EventSource; // make stacktraces readable + +['open', 'error', 'message'].forEach(function (method) { + Object.defineProperty(EventSource.prototype, 'on' + method, { + /** + * Returns the current listener + * + * @return {Mixed} the set function or undefined + * @api private + */ + get: function get () { + var listener = this.listeners(method)[0] + return listener ? (listener._listener ? listener._listener : listener) : undefined + }, + + /** + * Start listening for events + * + * @param {Function} listener the listener + * @return {Mixed} the set function or undefined + * @api private + */ + set: function set (listener) { + this.removeAllListeners(method) + this.addEventListener(method, listener) + } + }) +}) + +/** + * Ready states + */ +Object.defineProperty(EventSource, 'CONNECTING', {enumerable: true, value: 0}) +Object.defineProperty(EventSource, 'OPEN', {enumerable: true, value: 1}) +Object.defineProperty(EventSource, 'CLOSED', {enumerable: true, value: 2}) + +EventSource.prototype.CONNECTING = 0 +EventSource.prototype.OPEN = 1 +EventSource.prototype.CLOSED = 2 + +/** + * Closes the connection, if one is made, and sets the readyState attribute to 2 (closed) + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/close + * @api public + */ +EventSource.prototype.close = function () { + this._close() +} + +/** + * Emulates the W3C Browser based WebSocket interface using addEventListener. + * + * @param {String} type A string representing the event type to listen out for + * @param {Function} listener callback + * @see https://developer.mozilla.org/en/DOM/element.addEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +EventSource.prototype.addEventListener = function addEventListener (type, listener) { + if (typeof listener === 'function') { + // store a reference so we can return the original function again + listener._listener = listener + this.on(type, listener) + } +} + +/** + * Emulates the W3C Browser based WebSocket interface using dispatchEvent. + * + * @param {Event} event An event to be dispatched + * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent + * @api public + */ +EventSource.prototype.dispatchEvent = function dispatchEvent (event) { + if (!event.type) { + throw new Error('UNSPECIFIED_EVENT_TYPE_ERR') + } + // if event is instance of an CustomEvent (or has 'details' property), + // send the detail object as the payload for the event + this.emit(event.type, event.detail) +} + +/** + * Emulates the W3C Browser based WebSocket interface using removeEventListener. + * + * @param {String} type A string representing the event type to remove + * @param {Function} listener callback + * @see https://developer.mozilla.org/en/DOM/element.removeEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +EventSource.prototype.removeEventListener = function removeEventListener (type, listener) { + if (typeof listener === 'function') { + listener._listener = undefined + this.removeListener(type, listener) + } +} + +/** + * W3C Event + * + * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-Event + * @api private + */ +function Event (type, optionalProperties) { + Object.defineProperty(this, 'type', { writable: false, value: type, enumerable: true }) + if (optionalProperties) { + for (var f in optionalProperties) { + if (optionalProperties.hasOwnProperty(f)) { + Object.defineProperty(this, f, { writable: false, value: optionalProperties[f], enumerable: true }) + } + } + } +} + +/** + * W3C MessageEvent + * + * @see http://www.w3.org/TR/webmessaging/#event-definitions + * @api private + */ +function MessageEvent (type, eventInitDict) { + Object.defineProperty(this, 'type', { writable: false, value: type, enumerable: true }) + for (var f in eventInitDict) { + if (eventInitDict.hasOwnProperty(f)) { + Object.defineProperty(this, f, { writable: false, value: eventInitDict[f], enumerable: true }) + } + } +} + +/** + * Returns a new object of headers that does not include any authorization and cookie headers + * + * @param {Object} headers An object of headers ({[headerName]: headerValue}) + * @return {Object} a new object of headers + * @api private + */ +function removeUnsafeHeaders (headers) { + var safe = {} + for (var key in headers) { + if (reUnsafeHeader.test(key)) { + continue + } + + safe[key] = headers[key] + } + + return safe +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(3).Buffer)) + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + true + ) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { + return punycode; + }).call(exports, __webpack_require__, exports, module), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)(module), __webpack_require__(0))) + +/***/ }), +/* 26 */ +/***/ (function(module, exports) { + +module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if(!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + isString: function(arg) { + return typeof(arg) === 'string'; + }, + isObject: function(arg) { + return typeof(arg) === 'object' && arg !== null; + }, + isNull: function(arg) { + return arg === null; + }, + isNullOrUndefined: function(arg) { + return arg == null; + } +}; + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.decode = exports.parse = __webpack_require__(29); +exports.encode = exports.stringify = __webpack_require__(30); + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + +var http = __webpack_require__(11) +var url = __webpack_require__(8) + +var https = module.exports + +for (var key in http) { + if (http.hasOwnProperty(key)) https[key] = http[key] +} + +https.request = function (params, cb) { + params = validateParams(params) + return http.request.call(this, params, cb) +} + +https.get = function (params, cb) { + params = validateParams(params) + return http.get.call(this, params, cb) +} + +function validateParams (params) { + if (typeof params === 'string') { + params = url.parse(params) + } + if (!params.protocol) { + params.protocol = 'https:' + } + if (params.protocol !== 'https:') { + throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"') + } + return params +} + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer, global, process) {var capability = __webpack_require__(12) +var inherits = __webpack_require__(2) +var response = __webpack_require__(13) +var stream = __webpack_require__(14) +var toArrayBuffer = __webpack_require__(40) + +var IncomingMessage = response.IncomingMessage +var rStates = response.readyStates + +function decideMode (preferBinary, useFetch) { + if (capability.fetch && useFetch) { + return 'fetch' + } else if (capability.mozchunkedarraybuffer) { + return 'moz-chunked-arraybuffer' + } else if (capability.msstream) { + return 'ms-stream' + } else if (capability.arraybuffer && preferBinary) { + return 'arraybuffer' + } else if (capability.vbArray && preferBinary) { + return 'text:vbarray' + } else { + return 'text' + } +} + +var ClientRequest = module.exports = function (opts) { + var self = this + stream.Writable.call(self) + + self._opts = opts + self._body = [] + self._headers = {} + if (opts.auth) + self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64')) + Object.keys(opts.headers).forEach(function (name) { + self.setHeader(name, opts.headers[name]) + }) + + var preferBinary + var useFetch = true + if (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) { + // If the use of XHR should be preferred. Not typically needed. + useFetch = false + preferBinary = true + } else if (opts.mode === 'prefer-streaming') { + // If streaming is a high priority but binary compatibility and + // the accuracy of the 'content-type' header aren't + preferBinary = false + } else if (opts.mode === 'allow-wrong-content-type') { + // If streaming is more important than preserving the 'content-type' header + preferBinary = !capability.overrideMimeType + } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') { + // Use binary if text streaming may corrupt data or the content-type header, or for speed + preferBinary = true + } else { + throw new Error('Invalid value for opts.mode') + } + self._mode = decideMode(preferBinary, useFetch) + self._fetchTimer = null + + self.on('finish', function () { + self._onFinish() + }) +} + +inherits(ClientRequest, stream.Writable) + +ClientRequest.prototype.setHeader = function (name, value) { + var self = this + var lowerName = name.toLowerCase() + // This check is not necessary, but it prevents warnings from browsers about setting unsafe + // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but + // http-browserify did it, so I will too. + if (unsafeHeaders.indexOf(lowerName) !== -1) + return + + self._headers[lowerName] = { + name: name, + value: value + } +} + +ClientRequest.prototype.getHeader = function (name) { + var header = this._headers[name.toLowerCase()] + if (header) + return header.value + return null +} + +ClientRequest.prototype.removeHeader = function (name) { + var self = this + delete self._headers[name.toLowerCase()] +} + +ClientRequest.prototype._onFinish = function () { + var self = this + + if (self._destroyed) + return + var opts = self._opts + + var headersObj = self._headers + var body = null + if (opts.method !== 'GET' && opts.method !== 'HEAD') { + if (capability.arraybuffer) { + body = toArrayBuffer(Buffer.concat(self._body)) + } else if (capability.blobConstructor) { + body = new global.Blob(self._body.map(function (buffer) { + return toArrayBuffer(buffer) + }), { + type: (headersObj['content-type'] || {}).value || '' + }) + } else { + // get utf8 string + body = Buffer.concat(self._body).toString() + } + } + + // create flattened list of headers + var headersList = [] + Object.keys(headersObj).forEach(function (keyName) { + var name = headersObj[keyName].name + var value = headersObj[keyName].value + if (Array.isArray(value)) { + value.forEach(function (v) { + headersList.push([name, v]) + }) + } else { + headersList.push([name, value]) + } + }) + + if (self._mode === 'fetch') { + var signal = null + var fetchTimer = null + if (capability.abortController) { + var controller = new AbortController() + signal = controller.signal + self._fetchAbortController = controller + + if ('requestTimeout' in opts && opts.requestTimeout !== 0) { + self._fetchTimer = global.setTimeout(function () { + self.emit('requestTimeout') + if (self._fetchAbortController) + self._fetchAbortController.abort() + }, opts.requestTimeout) + } + } + + global.fetch(self._opts.url, { + method: self._opts.method, + headers: headersList, + body: body || undefined, + mode: 'cors', + credentials: opts.withCredentials ? 'include' : 'same-origin', + signal: signal + }).then(function (response) { + self._fetchResponse = response + self._connect() + }, function (reason) { + global.clearTimeout(self._fetchTimer) + if (!self._destroyed) + self.emit('error', reason) + }) + } else { + var xhr = self._xhr = new global.XMLHttpRequest() + try { + xhr.open(self._opts.method, self._opts.url, true) + } catch (err) { + process.nextTick(function () { + self.emit('error', err) + }) + return + } + + // Can't set responseType on really old browsers + if ('responseType' in xhr) + xhr.responseType = self._mode.split(':')[0] + + if ('withCredentials' in xhr) + xhr.withCredentials = !!opts.withCredentials + + if (self._mode === 'text' && 'overrideMimeType' in xhr) + xhr.overrideMimeType('text/plain; charset=x-user-defined') + + if ('requestTimeout' in opts) { + xhr.timeout = opts.requestTimeout + xhr.ontimeout = function () { + self.emit('requestTimeout') + } + } + + headersList.forEach(function (header) { + xhr.setRequestHeader(header[0], header[1]) + }) + + self._response = null + xhr.onreadystatechange = function () { + switch (xhr.readyState) { + case rStates.LOADING: + case rStates.DONE: + self._onXHRProgress() + break + } + } + // Necessary for streaming in Firefox, since xhr.response is ONLY defined + // in onprogress, not in onreadystatechange with xhr.readyState = 3 + if (self._mode === 'moz-chunked-arraybuffer') { + xhr.onprogress = function () { + self._onXHRProgress() + } + } + + xhr.onerror = function () { + if (self._destroyed) + return + self.emit('error', new Error('XHR error')) + } + + try { + xhr.send(body) + } catch (err) { + process.nextTick(function () { + self.emit('error', err) + }) + return + } + } +} + +/** + * Checks if xhr.status is readable and non-zero, indicating no error. + * Even though the spec says it should be available in readyState 3, + * accessing it throws an exception in IE8 + */ +function statusValid (xhr) { + try { + var status = xhr.status + return (status !== null && status !== 0) + } catch (e) { + return false + } +} + +ClientRequest.prototype._onXHRProgress = function () { + var self = this + + if (!statusValid(self._xhr) || self._destroyed) + return + + if (!self._response) + self._connect() + + self._response._onXHRProgress() +} + +ClientRequest.prototype._connect = function () { + var self = this + + if (self._destroyed) + return + + self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer) + self._response.on('error', function(err) { + self.emit('error', err) + }) + + self.emit('response', self._response) +} + +ClientRequest.prototype._write = function (chunk, encoding, cb) { + var self = this + + self._body.push(chunk) + cb() +} + +ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () { + var self = this + self._destroyed = true + global.clearTimeout(self._fetchTimer) + if (self._response) + self._response._destroyed = true + if (self._xhr) + self._xhr.abort() + else if (self._fetchAbortController) + self._fetchAbortController.abort() +} + +ClientRequest.prototype.end = function (data, encoding, cb) { + var self = this + if (typeof data === 'function') { + cb = data + data = undefined + } + + stream.Writable.prototype.end.call(self, data, encoding, cb) +} + +ClientRequest.prototype.flushHeaders = function () {} +ClientRequest.prototype.setTimeout = function () {} +ClientRequest.prototype.setNoDelay = function () {} +ClientRequest.prototype.setSocketKeepAlive = function () {} + +// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method +var unsafeHeaders = [ + 'accept-charset', + 'accept-encoding', + 'access-control-request-headers', + 'access-control-request-method', + 'connection', + 'content-length', + 'cookie', + 'cookie2', + 'date', + 'dnt', + 'expect', + 'host', + 'keep-alive', + 'origin', + 'referer', + 'te', + 'trailer', + 'transfer-encoding', + 'upgrade', + 'via' +] + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3).Buffer, __webpack_require__(0), __webpack_require__(1))) + +/***/ }), +/* 33 */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = __webpack_require__(7).Buffer; +var util = __webpack_require__(35); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ length: this.length }); + return this.constructor.name + ' ' + obj; + }; +} + +/***/ }), +/* 35 */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) || + (typeof self !== "undefined" && self) || + window; +var apply = Function.prototype.apply; + +// DOM APIs, for completeness + +exports.setTimeout = function() { + return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); +}; +exports.setInterval = function() { + return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); +}; +exports.clearTimeout = +exports.clearInterval = function(timeout) { + if (timeout) { + timeout.close(); + } +}; + +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function() {}; +Timeout.prototype.close = function() { + this._clearFn.call(scope, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function(item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; + +exports.unenroll = function(item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; + +exports._unrefActive = exports.active = function(item) { + clearTimeout(item._idleTimeoutId); + + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) + item._onTimeout(); + }, msecs); + } +}; + +// setimmediate attaches itself to the global object +__webpack_require__(37); +// On some exotic environments, it's not clear which object `setimmediate` was +// able to install onto. Search each possibility in the same order as the +// `setimmediate` library. +exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || + (typeof global !== "undefined" && global.setImmediate) || + (this && this.setImmediate); +exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || + (typeof global !== "undefined" && global.clearImmediate) || + (this && this.clearImmediate); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { + "use strict"; + + if (global.setImmediate) { + return; + } + + var nextHandle = 1; // Spec says greater than zero + var tasksByHandle = {}; + var currentlyRunningATask = false; + var doc = global.document; + var registerImmediate; + + function setImmediate(callback) { + // Callback can either be a function or a string + if (typeof callback !== "function") { + callback = new Function("" + callback); + } + // Copy function arguments + var args = new Array(arguments.length - 1); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i + 1]; + } + // Store and register the task + var task = { callback: callback, args: args }; + tasksByHandle[nextHandle] = task; + registerImmediate(nextHandle); + return nextHandle++; + } + + function clearImmediate(handle) { + delete tasksByHandle[handle]; + } + + function run(task) { + var callback = task.callback; + var args = task.args; + switch (args.length) { + case 0: + callback(); + break; + case 1: + callback(args[0]); + break; + case 2: + callback(args[0], args[1]); + break; + case 3: + callback(args[0], args[1], args[2]); + break; + default: + callback.apply(undefined, args); + break; + } + } + + function runIfPresent(handle) { + // From the spec: "Wait until any invocations of this algorithm started before this one have completed." + // So if we're currently running a task, we'll need to delay this invocation. + if (currentlyRunningATask) { + // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a + // "too much recursion" error. + setTimeout(runIfPresent, 0, handle); + } else { + var task = tasksByHandle[handle]; + if (task) { + currentlyRunningATask = true; + try { + run(task); + } finally { + clearImmediate(handle); + currentlyRunningATask = false; + } + } + } + } + + function installNextTickImplementation() { + registerImmediate = function(handle) { + process.nextTick(function () { runIfPresent(handle); }); + }; + } + + function canUsePostMessage() { + // The test against `importScripts` prevents this implementation from being installed inside a web worker, + // where `global.postMessage` means something completely different and can't be used for this purpose. + if (global.postMessage && !global.importScripts) { + var postMessageIsAsynchronous = true; + var oldOnMessage = global.onmessage; + global.onmessage = function() { + postMessageIsAsynchronous = false; + }; + global.postMessage("", "*"); + global.onmessage = oldOnMessage; + return postMessageIsAsynchronous; + } + } + + function installPostMessageImplementation() { + // Installs an event handler on `global` for the `message` event: see + // * https://developer.mozilla.org/en/DOM/window.postMessage + // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages + + var messagePrefix = "setImmediate$" + Math.random() + "$"; + var onGlobalMessage = function(event) { + if (event.source === global && + typeof event.data === "string" && + event.data.indexOf(messagePrefix) === 0) { + runIfPresent(+event.data.slice(messagePrefix.length)); + } + }; + + if (global.addEventListener) { + global.addEventListener("message", onGlobalMessage, false); + } else { + global.attachEvent("onmessage", onGlobalMessage); + } + + registerImmediate = function(handle) { + global.postMessage(messagePrefix + handle, "*"); + }; + } + + function installMessageChannelImplementation() { + var channel = new MessageChannel(); + channel.port1.onmessage = function(event) { + var handle = event.data; + runIfPresent(handle); + }; + + registerImmediate = function(handle) { + channel.port2.postMessage(handle); + }; + } + + function installReadyStateChangeImplementation() { + var html = doc.documentElement; + registerImmediate = function(handle) { + // Create a + + + diff --git a/node_modules/eventsource/example/sse-client.js b/node_modules/eventsource/example/sse-client.js new file mode 100644 index 00000000..72c49a91 --- /dev/null +++ b/node_modules/eventsource/example/sse-client.js @@ -0,0 +1,5 @@ +var EventSource = require('..') +var es = new EventSource('http://localhost:8080/sse') +es.addEventListener('server-time', function (e) { + console.log(e.data) +}) diff --git a/node_modules/eventsource/example/sse-server.js b/node_modules/eventsource/example/sse-server.js new file mode 100644 index 00000000..034e3b46 --- /dev/null +++ b/node_modules/eventsource/example/sse-server.js @@ -0,0 +1,29 @@ +const express = require('express') +const serveStatic = require('serve-static') +const SseStream = require('ssestream') + +const app = express() +app.use(serveStatic(__dirname)) +app.get('/sse', (req, res) => { + console.log('new connection') + + const sseStream = new SseStream(req) + sseStream.pipe(res) + const pusher = setInterval(() => { + sseStream.write({ + event: 'server-time', + data: new Date().toTimeString() + }) + }, 1000) + + res.on('close', () => { + console.log('lost connection') + clearInterval(pusher) + sseStream.unpipe(res) + }) +}) + +app.listen(8080, (err) => { + if (err) throw err + console.log('server ready on http://localhost:8080') +}) diff --git a/node_modules/eventsource/lib/eventsource-polyfill.js b/node_modules/eventsource/lib/eventsource-polyfill.js new file mode 100644 index 00000000..6ed43968 --- /dev/null +++ b/node_modules/eventsource/lib/eventsource-polyfill.js @@ -0,0 +1,9 @@ +var EventSource = require('./eventsource') + +if (typeof window === 'object') { + window.EventSourcePolyfill = EventSource + if (!window.EventSource) window.EventSource = EventSource + module.exports = window.EventSource +} else { + module.exports = EventSource +} diff --git a/node_modules/eventsource/lib/eventsource.js b/node_modules/eventsource/lib/eventsource.js new file mode 100644 index 00000000..bd401a10 --- /dev/null +++ b/node_modules/eventsource/lib/eventsource.js @@ -0,0 +1,495 @@ +var parse = require('url').parse +var events = require('events') +var https = require('https') +var http = require('http') +var util = require('util') + +var httpsOptions = [ + 'pfx', 'key', 'passphrase', 'cert', 'ca', 'ciphers', + 'rejectUnauthorized', 'secureProtocol', 'servername', 'checkServerIdentity' +] + +var bom = [239, 187, 191] +var colon = 58 +var space = 32 +var lineFeed = 10 +var carriageReturn = 13 +// Beyond 256KB we could not observe any gain in performance +var maxBufferAheadAllocation = 1024 * 256 +// Headers matching the pattern should be removed when redirecting to different origin +var reUnsafeHeader = /^(cookie|authorization)$/i + +function hasBom (buf) { + return bom.every(function (charCode, index) { + return buf[index] === charCode + }) +} + +/** + * Creates a new EventSource object + * + * @param {String} url the URL to which to connect + * @param {Object} [eventSourceInitDict] extra init params. See README for details. + * @api public + **/ +function EventSource (url, eventSourceInitDict) { + var readyState = EventSource.CONNECTING + var headers = eventSourceInitDict && eventSourceInitDict.headers + var hasNewOrigin = false + Object.defineProperty(this, 'readyState', { + get: function () { + return readyState + } + }) + + Object.defineProperty(this, 'url', { + get: function () { + return url + } + }) + + var self = this + self.reconnectInterval = 1000 + self.connectionInProgress = false + + function onConnectionClosed (message) { + if (readyState === EventSource.CLOSED) return + readyState = EventSource.CONNECTING + _emit('error', new Event('error', {message: message})) + + // The url may have been changed by a temporary redirect. If that's the case, + // revert it now, and flag that we are no longer pointing to a new origin + if (reconnectUrl) { + url = reconnectUrl + reconnectUrl = null + hasNewOrigin = false + } + setTimeout(function () { + if (readyState !== EventSource.CONNECTING || self.connectionInProgress) { + return + } + self.connectionInProgress = true + connect() + }, self.reconnectInterval) + } + + var req + var lastEventId = '' + if (headers && headers['Last-Event-ID']) { + lastEventId = headers['Last-Event-ID'] + delete headers['Last-Event-ID'] + } + + var discardTrailingNewline = false + var data = '' + var eventName = '' + + var reconnectUrl = null + + function connect () { + var options = parse(url) + var isSecure = options.protocol === 'https:' + options.headers = { 'Cache-Control': 'no-cache', 'Accept': 'text/event-stream' } + if (lastEventId) options.headers['Last-Event-ID'] = lastEventId + if (headers) { + var reqHeaders = hasNewOrigin ? removeUnsafeHeaders(headers) : headers + for (var i in reqHeaders) { + var header = reqHeaders[i] + if (header) { + options.headers[i] = header + } + } + } + + // Legacy: this should be specified as `eventSourceInitDict.https.rejectUnauthorized`, + // but for now exists as a backwards-compatibility layer + options.rejectUnauthorized = !(eventSourceInitDict && !eventSourceInitDict.rejectUnauthorized) + + if (eventSourceInitDict && eventSourceInitDict.createConnection !== undefined) { + options.createConnection = eventSourceInitDict.createConnection + } + + // If specify http proxy, make the request to sent to the proxy server, + // and include the original url in path and Host headers + var useProxy = eventSourceInitDict && eventSourceInitDict.proxy + if (useProxy) { + var proxy = parse(eventSourceInitDict.proxy) + isSecure = proxy.protocol === 'https:' + + options.protocol = isSecure ? 'https:' : 'http:' + options.path = url + options.headers.Host = options.host + options.hostname = proxy.hostname + options.host = proxy.host + options.port = proxy.port + } + + // If https options are specified, merge them into the request options + if (eventSourceInitDict && eventSourceInitDict.https) { + for (var optName in eventSourceInitDict.https) { + if (httpsOptions.indexOf(optName) === -1) { + continue + } + + var option = eventSourceInitDict.https[optName] + if (option !== undefined) { + options[optName] = option + } + } + } + + // Pass this on to the XHR + if (eventSourceInitDict && eventSourceInitDict.withCredentials !== undefined) { + options.withCredentials = eventSourceInitDict.withCredentials + } + + req = (isSecure ? https : http).request(options, function (res) { + self.connectionInProgress = false + // Handle HTTP errors + if (res.statusCode === 500 || res.statusCode === 502 || res.statusCode === 503 || res.statusCode === 504) { + _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage})) + onConnectionClosed() + return + } + + // Handle HTTP redirects + if (res.statusCode === 301 || res.statusCode === 302 || res.statusCode === 307) { + var location = res.headers.location + if (!location) { + // Server sent redirect response without Location header. + _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage})) + return + } + var prevOrigin = new URL(url).origin + var nextOrigin = new URL(location).origin + hasNewOrigin = prevOrigin !== nextOrigin + if (res.statusCode === 307) reconnectUrl = url + url = location + process.nextTick(connect) + return + } + + if (res.statusCode !== 200) { + _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage})) + return self.close() + } + + readyState = EventSource.OPEN + res.on('close', function () { + res.removeAllListeners('close') + res.removeAllListeners('end') + onConnectionClosed() + }) + + res.on('end', function () { + res.removeAllListeners('close') + res.removeAllListeners('end') + onConnectionClosed() + }) + _emit('open', new Event('open')) + + // text/event-stream parser adapted from webkit's + // Source/WebCore/page/EventSource.cpp + var buf + var newBuffer + var startingPos = 0 + var startingFieldLength = -1 + var newBufferSize = 0 + var bytesUsed = 0 + + res.on('data', function (chunk) { + if (!buf) { + buf = chunk + if (hasBom(buf)) { + buf = buf.slice(bom.length) + } + bytesUsed = buf.length + } else { + if (chunk.length > buf.length - bytesUsed) { + newBufferSize = (buf.length * 2) + chunk.length + if (newBufferSize > maxBufferAheadAllocation) { + newBufferSize = buf.length + chunk.length + maxBufferAheadAllocation + } + newBuffer = Buffer.alloc(newBufferSize) + buf.copy(newBuffer, 0, 0, bytesUsed) + buf = newBuffer + } + chunk.copy(buf, bytesUsed) + bytesUsed += chunk.length + } + + var pos = 0 + var length = bytesUsed + + while (pos < length) { + if (discardTrailingNewline) { + if (buf[pos] === lineFeed) { + ++pos + } + discardTrailingNewline = false + } + + var lineLength = -1 + var fieldLength = startingFieldLength + var c + + for (var i = startingPos; lineLength < 0 && i < length; ++i) { + c = buf[i] + if (c === colon) { + if (fieldLength < 0) { + fieldLength = i - pos + } + } else if (c === carriageReturn) { + discardTrailingNewline = true + lineLength = i - pos + } else if (c === lineFeed) { + lineLength = i - pos + } + } + + if (lineLength < 0) { + startingPos = length - pos + startingFieldLength = fieldLength + break + } else { + startingPos = 0 + startingFieldLength = -1 + } + + parseEventStreamLine(buf, pos, fieldLength, lineLength) + + pos += lineLength + 1 + } + + if (pos === length) { + buf = void 0 + bytesUsed = 0 + } else if (pos > 0) { + buf = buf.slice(pos, bytesUsed) + bytesUsed = buf.length + } + }) + }) + + req.on('error', function (err) { + self.connectionInProgress = false + onConnectionClosed(err.message) + }) + + if (req.setNoDelay) req.setNoDelay(true) + req.end() + } + + connect() + + function _emit () { + if (self.listeners(arguments[0]).length > 0) { + self.emit.apply(self, arguments) + } + } + + this._close = function () { + if (readyState === EventSource.CLOSED) return + readyState = EventSource.CLOSED + if (req.abort) req.abort() + if (req.xhr && req.xhr.abort) req.xhr.abort() + } + + function parseEventStreamLine (buf, pos, fieldLength, lineLength) { + if (lineLength === 0) { + if (data.length > 0) { + var type = eventName || 'message' + _emit(type, new MessageEvent(type, { + data: data.slice(0, -1), // remove trailing newline + lastEventId: lastEventId, + origin: new URL(url).origin + })) + data = '' + } + eventName = void 0 + } else if (fieldLength > 0) { + var noValue = fieldLength < 0 + var step = 0 + var field = buf.slice(pos, pos + (noValue ? lineLength : fieldLength)).toString() + + if (noValue) { + step = lineLength + } else if (buf[pos + fieldLength + 1] !== space) { + step = fieldLength + 1 + } else { + step = fieldLength + 2 + } + pos += step + + var valueLength = lineLength - step + var value = buf.slice(pos, pos + valueLength).toString() + + if (field === 'data') { + data += value + '\n' + } else if (field === 'event') { + eventName = value + } else if (field === 'id') { + lastEventId = value + } else if (field === 'retry') { + var retry = parseInt(value, 10) + if (!Number.isNaN(retry)) { + self.reconnectInterval = retry + } + } + } + } +} + +module.exports = EventSource + +util.inherits(EventSource, events.EventEmitter) +EventSource.prototype.constructor = EventSource; // make stacktraces readable + +['open', 'error', 'message'].forEach(function (method) { + Object.defineProperty(EventSource.prototype, 'on' + method, { + /** + * Returns the current listener + * + * @return {Mixed} the set function or undefined + * @api private + */ + get: function get () { + var listener = this.listeners(method)[0] + return listener ? (listener._listener ? listener._listener : listener) : undefined + }, + + /** + * Start listening for events + * + * @param {Function} listener the listener + * @return {Mixed} the set function or undefined + * @api private + */ + set: function set (listener) { + this.removeAllListeners(method) + this.addEventListener(method, listener) + } + }) +}) + +/** + * Ready states + */ +Object.defineProperty(EventSource, 'CONNECTING', {enumerable: true, value: 0}) +Object.defineProperty(EventSource, 'OPEN', {enumerable: true, value: 1}) +Object.defineProperty(EventSource, 'CLOSED', {enumerable: true, value: 2}) + +EventSource.prototype.CONNECTING = 0 +EventSource.prototype.OPEN = 1 +EventSource.prototype.CLOSED = 2 + +/** + * Closes the connection, if one is made, and sets the readyState attribute to 2 (closed) + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/close + * @api public + */ +EventSource.prototype.close = function () { + this._close() +} + +/** + * Emulates the W3C Browser based WebSocket interface using addEventListener. + * + * @param {String} type A string representing the event type to listen out for + * @param {Function} listener callback + * @see https://developer.mozilla.org/en/DOM/element.addEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +EventSource.prototype.addEventListener = function addEventListener (type, listener) { + if (typeof listener === 'function') { + // store a reference so we can return the original function again + listener._listener = listener + this.on(type, listener) + } +} + +/** + * Emulates the W3C Browser based WebSocket interface using dispatchEvent. + * + * @param {Event} event An event to be dispatched + * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent + * @api public + */ +EventSource.prototype.dispatchEvent = function dispatchEvent (event) { + if (!event.type) { + throw new Error('UNSPECIFIED_EVENT_TYPE_ERR') + } + // if event is instance of an CustomEvent (or has 'details' property), + // send the detail object as the payload for the event + this.emit(event.type, event.detail) +} + +/** + * Emulates the W3C Browser based WebSocket interface using removeEventListener. + * + * @param {String} type A string representing the event type to remove + * @param {Function} listener callback + * @see https://developer.mozilla.org/en/DOM/element.removeEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +EventSource.prototype.removeEventListener = function removeEventListener (type, listener) { + if (typeof listener === 'function') { + listener._listener = undefined + this.removeListener(type, listener) + } +} + +/** + * W3C Event + * + * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-Event + * @api private + */ +function Event (type, optionalProperties) { + Object.defineProperty(this, 'type', { writable: false, value: type, enumerable: true }) + if (optionalProperties) { + for (var f in optionalProperties) { + if (optionalProperties.hasOwnProperty(f)) { + Object.defineProperty(this, f, { writable: false, value: optionalProperties[f], enumerable: true }) + } + } + } +} + +/** + * W3C MessageEvent + * + * @see http://www.w3.org/TR/webmessaging/#event-definitions + * @api private + */ +function MessageEvent (type, eventInitDict) { + Object.defineProperty(this, 'type', { writable: false, value: type, enumerable: true }) + for (var f in eventInitDict) { + if (eventInitDict.hasOwnProperty(f)) { + Object.defineProperty(this, f, { writable: false, value: eventInitDict[f], enumerable: true }) + } + } +} + +/** + * Returns a new object of headers that does not include any authorization and cookie headers + * + * @param {Object} headers An object of headers ({[headerName]: headerValue}) + * @return {Object} a new object of headers + * @api private + */ +function removeUnsafeHeaders (headers) { + var safe = {} + for (var key in headers) { + if (reUnsafeHeader.test(key)) { + continue + } + + safe[key] = headers[key] + } + + return safe +} diff --git a/node_modules/eventsource/package.json b/node_modules/eventsource/package.json new file mode 100644 index 00000000..ad903213 --- /dev/null +++ b/node_modules/eventsource/package.json @@ -0,0 +1,60 @@ +{ + "name": "eventsource", + "version": "2.0.2", + "description": "W3C compliant EventSource client for Node.js and browser (polyfill)", + "keywords": [ + "eventsource", + "http", + "streaming", + "sse", + "polyfill" + ], + "homepage": "http://github.com/EventSource/eventsource", + "author": "Aslak Hellesøy ", + "repository": { + "type": "git", + "url": "git://github.com/EventSource/eventsource.git" + }, + "bugs": { + "url": "http://github.com/EventSource/eventsource/issues" + }, + "directories": { + "lib": "./lib" + }, + "main": "./lib/eventsource", + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "http://github.com/EventSource/eventsource/raw/master/LICENSE" + } + ], + "devDependencies": { + "buffer-from": "^1.1.1", + "express": "^4.15.3", + "mocha": "^3.5.3", + "nyc": "^11.2.1", + "serve-static": "^1.12.3", + "ssestream": "^1.0.0", + "standard": "^10.0.2", + "webpack": "^3.5.6" + }, + "scripts": { + "test": "mocha --reporter spec && standard", + "polyfill": "webpack lib/eventsource-polyfill.js example/eventsource-polyfill.js", + "postpublish": "git push && git push --tags", + "coverage": "nyc --reporter=html --reporter=text _mocha --reporter spec" + }, + "engines": { + "node": ">=12.0.0" + }, + "dependencies": {}, + "standard": { + "ignore": [ + "example/eventsource-polyfill.js" + ], + "globals": [ + "URL" + ] + } +} diff --git a/node_modules/feaxios/LICENSE b/node_modules/feaxios/LICENSE new file mode 100644 index 00000000..66be3318 --- /dev/null +++ b/node_modules/feaxios/LICENSE @@ -0,0 +1,35 @@ +MIT License + +Copyright (c) 2024 divyam234 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Copyright 2019 Softonic International S.A. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/node_modules/feaxios/README.md b/node_modules/feaxios/README.md new file mode 100644 index 00000000..0de7ab6f --- /dev/null +++ b/node_modules/feaxios/README.md @@ -0,0 +1,131 @@ +# feaxios + +`feaxios` is a lightweight alternative to **Axios**, providing the same familiar API with a significantly reduced footprint of **2KB**. It leverages the native `fetch()` API supported in all modern browsers, delivering a performant and minimalistic solution. This makes it an ideal choice for projects where minimizing bundle size is a priority. + +### Key Features + +- **Lightweight:** With a size of less than 1/5th of Axios, `feaxios` is an efficient choice for projects with strict size constraints. + +- **Native Fetch API:** Utilizes the browser's native fetch, ensuring broad compatibility and seamless integration with modern web development tools. + +- **Interceptor Support:** `feaxios` supports interceptors, allowing you to customize and augment the request and response handling process. + +- **Timeouts:** Easily configure timeouts for requests, ensuring your application remains responsive and resilient. + +- **Retries:** Axios retry package is integrated with feaxios. + + +### When to Use feaxios + +While [Axios] remains an excellent module, `feaxios` provides a compelling option in scenarios where minimizing dependencies is crucial. By offering a similar API to Axios, `feaxios` bridges the gap between Axios and the native `fetch()` API. + +```sh +npm install feaxios +``` + +**_Request Config_** + +```ts +{ + +url: '/user', + +method: 'get', // default + +baseURL: 'https://some-domain.com/api/', + +transformRequest: [function (data, headers) { + return data; +}], + +transformResponse: [function (data) { + + return data; +}], + +headers: {'test': 'test'}, + +params: { + ID: 12345 +}, + + paramsSerializer: { + + encode?: (param: string): string => {}, + + serialize?: (params: Record, options?: ParamsSerializerOptions ), + + indexes: false + }, + + data: {}, + + timeout: 1000, // default is 0ms + + withCredentials: false, + + responseType: 'json', // default + + validateStatus: function (status) { + return status >= 200 && status < 300; + }, + + signal: new AbortController().signal, + + fetchOptions: { + redirect: "follow" + }, + retry: { retries: 3 } +``` + +**In fetchOptions you can pass custom options like proxy , agents etc supported on nodejs** + +### Usage + +```js +import axios from "feaxios"; + +axios + .get("https://api.example.com/data") + .then((response) => { + // Handle the response + console.log(response.data); + }) + .catch((error) => { + // Handle errors + console.error(error); + }); +``` + +**_With Interceptors_** + +```js +import axios from "feaxios"; + +axios.interceptors.request.use((config) => { + config.headers.set("Authorization", "Bearer *"); + return config; +}); +axios.interceptors.response.use( + function (response) { + return response; + }, + function (error) { + //do something with error + return Promise.reject(error); + }, +); +``` +**Axios Retry Package is also ported to feaxios** + +```ts +import axios from "feaxios" +import axiosRetry from "feaxios/retry" + +const http = axios.create({ + timeout: 3 * 1000 * 60, +}) + +axiosRetry(http, { retryDelay: axiosRetry.exponentialDelay }) +``` +Visit: https://github.com/softonic/axios-retry to see more options. diff --git a/node_modules/feaxios/dist/client-DGpL0cYy.d.mts b/node_modules/feaxios/dist/client-DGpL0cYy.d.mts new file mode 100644 index 00000000..13d7506f --- /dev/null +++ b/node_modules/feaxios/dist/client-DGpL0cYy.d.mts @@ -0,0 +1,162 @@ +interface AxiosRetryConfig { + retries?: number; + shouldResetTimeout?: boolean; + retryCondition?: (error: AxiosError) => boolean | Promise; + retryDelay?: (retryCount: number, error: AxiosError) => number; + onRetry?: (retryCount: number, error: AxiosError, requestConfig: AxiosRequestConfig) => Promise | void; +} +interface AxiosRetryConfigExtended extends AxiosRetryConfig { + retryCount?: number; + lastRequestTime?: number; +} +interface AxiosRetryReturn { + requestInterceptorId: number; + responseInterceptorId: number; +} +interface AxiosRetry { + (axiosInstance: AxiosStatic | AxiosInstance, axiosRetryConfig?: AxiosRetryConfig): AxiosRetryReturn; + isNetworkError(error: AxiosError): boolean; + isRetryableError(error: AxiosError): boolean; + isSafeRequestError(error: AxiosError): boolean; + isIdempotentRequestError(error: AxiosError): boolean; + isNetworkOrIdempotentRequestError(error: AxiosError): boolean; + exponentialDelay(retryNumber?: number, error?: AxiosError, delayFactor?: number): number; +} +declare function isNetworkError(error: AxiosError): boolean; +declare function isRetryableError(error: AxiosError): boolean; +declare function isSafeRequestError(error: AxiosError): boolean; +declare function isIdempotentRequestError(error: AxiosError): boolean; +declare function isNetworkOrIdempotentRequestError(error: AxiosError): boolean; +declare function exponentialDelay(retryNumber?: number, _error?: AxiosError | undefined, delayFactor?: number): number; +declare const DEFAULT_OPTIONS: Required; +declare const axiosRetry: AxiosRetry; + +type AxiosRequestTransformer = (this: InternalAxiosRequestConfig, data: any, headers: Headers) => any; +type AxiosResponseTransformer = (this: InternalAxiosRequestConfig, data: any, headers: HeadersInit, status?: number) => any; +type ResponseType = "arrayBuffer" | "blob" | "json" | "text" | "stream"; +type Method = 'get' | 'GET' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'options' | 'OPTIONS' | 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'purge' | 'PURGE' | 'link' | 'LINK' | 'unlink' | 'UNLINK'; +interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; +} +type SerializerVisitor = (this: GenericFormData, value: any, key: string | number, path: null | Array, helpers: FormDataVisitorHelpers) => boolean; +interface GenericFormData { + append(name: string, value: any, options?: any): any; +} +interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; +} +type ParamEncoder = (value: any, defaultEncoder: (value: any) => any) => any; +type CustomParamsSerializer = (params: Record, options?: ParamsSerializerOptions) => string; +interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; +} +interface AxiosRequestConfig { + url?: string; + method?: Method | string; + baseURL?: string; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: HeadersInit; + params?: Record; + paramsSerializer?: CustomParamsSerializer; + data?: D; + timeout?: number; + timeoutErrorMessage?: string; + withCredentials?: boolean; + responseType?: ResponseType; + validateStatus?: ((status: number) => boolean) | null; + signal?: AbortSignal; + fetchOptions?: RequestInit; + retry?: AxiosRetryConfigExtended; +} +type RawAxiosRequestConfig = AxiosRequestConfig; +interface InternalAxiosRequestConfig extends Omit, "headers"> { + headers: Headers; +} +interface AxiosDefaults extends Omit, "headers"> { + headers: HeadersInit; +} +interface CreateAxiosDefaults extends Omit, "headers"> { + headers?: HeadersInit; +} +interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: Headers; + config: InternalAxiosRequestConfig; + request?: Request; +} +type AxiosPromise = Promise>; +interface AxiosInterceptorOptions { + runWhen?: (config: InternalAxiosRequestConfig) => boolean; +} +type FulfillCallback = ((value: V) => V | Promise) | null; +type RejectCallback = ((error: any) => any) | null; +interface AxiosInterceptorManager { + use(onFulfilled?: FulfillCallback, onRejected?: RejectCallback, options?: AxiosInterceptorOptions): number; + eject(id: number): void; + clear(): void; +} +type AxiosInterceptor = { + fulfilled?: FulfillCallback; + rejected?: RejectCallback; + synchronous?: boolean; + runWhen?: (config: InternalAxiosRequestConfig) => boolean; +}; +interface AxiosInstance { + defaults: CreateAxiosDefaults; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri: (config?: AxiosRequestConfig) => string; + request: , D = any>(config: AxiosRequestConfig) => Promise; + get: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + delete: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + head: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + options: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + post: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + put: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + patch: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + postForm: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + putForm: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + patchForm: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + , D = any>(config: AxiosRequestConfig): Promise; + , D = any>(url: string, config?: AxiosRequestConfig): Promise; +} +interface AxiosStatic extends AxiosInstance { + create: (defaults?: CreateAxiosDefaults) => AxiosInstance; +} + +declare class AxiosError extends Error { + config?: InternalAxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + status?: number; + isAxiosError: boolean; + constructor(message?: string, code?: string, config?: InternalAxiosRequestConfig, request?: any, response?: AxiosResponse); + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} +declare class CanceledError extends AxiosError { + constructor(message: string | null | undefined, config?: InternalAxiosRequestConfig, request?: any); +} +declare function isAxiosError(payload: any): payload is AxiosError; +declare const axios: AxiosStatic; + +export { AxiosError as A, isRetryableError as B, CanceledError as C, isSafeRequestError as D, isIdempotentRequestError as E, type FormDataVisitorHelpers as F, isNetworkOrIdempotentRequestError as G, exponentialDelay as H, type InternalAxiosRequestConfig as I, DEFAULT_OPTIONS as J, type Method as M, type ParamEncoder as P, type ResponseType as R, type SerializerVisitor as S, axios as a, type AxiosRequestTransformer as b, type AxiosResponseTransformer as c, type SerializerOptions as d, type CustomParamsSerializer as e, type ParamsSerializerOptions as f, type AxiosRequestConfig as g, type RawAxiosRequestConfig as h, isAxiosError as i, type AxiosDefaults as j, type CreateAxiosDefaults as k, type AxiosResponse as l, type AxiosPromise as m, type AxiosInterceptorOptions as n, type FulfillCallback as o, type RejectCallback as p, type AxiosInterceptorManager as q, type AxiosInterceptor as r, type AxiosInstance as s, type AxiosStatic as t, axiosRetry as u, type AxiosRetryConfig as v, type AxiosRetryConfigExtended as w, type AxiosRetryReturn as x, type AxiosRetry as y, isNetworkError as z }; diff --git a/node_modules/feaxios/dist/client-DGpL0cYy.d.ts b/node_modules/feaxios/dist/client-DGpL0cYy.d.ts new file mode 100644 index 00000000..13d7506f --- /dev/null +++ b/node_modules/feaxios/dist/client-DGpL0cYy.d.ts @@ -0,0 +1,162 @@ +interface AxiosRetryConfig { + retries?: number; + shouldResetTimeout?: boolean; + retryCondition?: (error: AxiosError) => boolean | Promise; + retryDelay?: (retryCount: number, error: AxiosError) => number; + onRetry?: (retryCount: number, error: AxiosError, requestConfig: AxiosRequestConfig) => Promise | void; +} +interface AxiosRetryConfigExtended extends AxiosRetryConfig { + retryCount?: number; + lastRequestTime?: number; +} +interface AxiosRetryReturn { + requestInterceptorId: number; + responseInterceptorId: number; +} +interface AxiosRetry { + (axiosInstance: AxiosStatic | AxiosInstance, axiosRetryConfig?: AxiosRetryConfig): AxiosRetryReturn; + isNetworkError(error: AxiosError): boolean; + isRetryableError(error: AxiosError): boolean; + isSafeRequestError(error: AxiosError): boolean; + isIdempotentRequestError(error: AxiosError): boolean; + isNetworkOrIdempotentRequestError(error: AxiosError): boolean; + exponentialDelay(retryNumber?: number, error?: AxiosError, delayFactor?: number): number; +} +declare function isNetworkError(error: AxiosError): boolean; +declare function isRetryableError(error: AxiosError): boolean; +declare function isSafeRequestError(error: AxiosError): boolean; +declare function isIdempotentRequestError(error: AxiosError): boolean; +declare function isNetworkOrIdempotentRequestError(error: AxiosError): boolean; +declare function exponentialDelay(retryNumber?: number, _error?: AxiosError | undefined, delayFactor?: number): number; +declare const DEFAULT_OPTIONS: Required; +declare const axiosRetry: AxiosRetry; + +type AxiosRequestTransformer = (this: InternalAxiosRequestConfig, data: any, headers: Headers) => any; +type AxiosResponseTransformer = (this: InternalAxiosRequestConfig, data: any, headers: HeadersInit, status?: number) => any; +type ResponseType = "arrayBuffer" | "blob" | "json" | "text" | "stream"; +type Method = 'get' | 'GET' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'options' | 'OPTIONS' | 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'purge' | 'PURGE' | 'link' | 'LINK' | 'unlink' | 'UNLINK'; +interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; +} +type SerializerVisitor = (this: GenericFormData, value: any, key: string | number, path: null | Array, helpers: FormDataVisitorHelpers) => boolean; +interface GenericFormData { + append(name: string, value: any, options?: any): any; +} +interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; +} +type ParamEncoder = (value: any, defaultEncoder: (value: any) => any) => any; +type CustomParamsSerializer = (params: Record, options?: ParamsSerializerOptions) => string; +interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; +} +interface AxiosRequestConfig { + url?: string; + method?: Method | string; + baseURL?: string; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: HeadersInit; + params?: Record; + paramsSerializer?: CustomParamsSerializer; + data?: D; + timeout?: number; + timeoutErrorMessage?: string; + withCredentials?: boolean; + responseType?: ResponseType; + validateStatus?: ((status: number) => boolean) | null; + signal?: AbortSignal; + fetchOptions?: RequestInit; + retry?: AxiosRetryConfigExtended; +} +type RawAxiosRequestConfig = AxiosRequestConfig; +interface InternalAxiosRequestConfig extends Omit, "headers"> { + headers: Headers; +} +interface AxiosDefaults extends Omit, "headers"> { + headers: HeadersInit; +} +interface CreateAxiosDefaults extends Omit, "headers"> { + headers?: HeadersInit; +} +interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: Headers; + config: InternalAxiosRequestConfig; + request?: Request; +} +type AxiosPromise = Promise>; +interface AxiosInterceptorOptions { + runWhen?: (config: InternalAxiosRequestConfig) => boolean; +} +type FulfillCallback = ((value: V) => V | Promise) | null; +type RejectCallback = ((error: any) => any) | null; +interface AxiosInterceptorManager { + use(onFulfilled?: FulfillCallback, onRejected?: RejectCallback, options?: AxiosInterceptorOptions): number; + eject(id: number): void; + clear(): void; +} +type AxiosInterceptor = { + fulfilled?: FulfillCallback; + rejected?: RejectCallback; + synchronous?: boolean; + runWhen?: (config: InternalAxiosRequestConfig) => boolean; +}; +interface AxiosInstance { + defaults: CreateAxiosDefaults; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri: (config?: AxiosRequestConfig) => string; + request: , D = any>(config: AxiosRequestConfig) => Promise; + get: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + delete: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + head: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + options: , D = any>(url: string, config?: AxiosRequestConfig | undefined) => Promise; + post: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + put: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + patch: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + postForm: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + putForm: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + patchForm: , D = any>(url: string, data?: D | undefined, config?: AxiosRequestConfig | undefined) => Promise; + , D = any>(config: AxiosRequestConfig): Promise; + , D = any>(url: string, config?: AxiosRequestConfig): Promise; +} +interface AxiosStatic extends AxiosInstance { + create: (defaults?: CreateAxiosDefaults) => AxiosInstance; +} + +declare class AxiosError extends Error { + config?: InternalAxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + status?: number; + isAxiosError: boolean; + constructor(message?: string, code?: string, config?: InternalAxiosRequestConfig, request?: any, response?: AxiosResponse); + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} +declare class CanceledError extends AxiosError { + constructor(message: string | null | undefined, config?: InternalAxiosRequestConfig, request?: any); +} +declare function isAxiosError(payload: any): payload is AxiosError; +declare const axios: AxiosStatic; + +export { AxiosError as A, isRetryableError as B, CanceledError as C, isSafeRequestError as D, isIdempotentRequestError as E, type FormDataVisitorHelpers as F, isNetworkOrIdempotentRequestError as G, exponentialDelay as H, type InternalAxiosRequestConfig as I, DEFAULT_OPTIONS as J, type Method as M, type ParamEncoder as P, type ResponseType as R, type SerializerVisitor as S, axios as a, type AxiosRequestTransformer as b, type AxiosResponseTransformer as c, type SerializerOptions as d, type CustomParamsSerializer as e, type ParamsSerializerOptions as f, type AxiosRequestConfig as g, type RawAxiosRequestConfig as h, isAxiosError as i, type AxiosDefaults as j, type CreateAxiosDefaults as k, type AxiosResponse as l, type AxiosPromise as m, type AxiosInterceptorOptions as n, type FulfillCallback as o, type RejectCallback as p, type AxiosInterceptorManager as q, type AxiosInterceptor as r, type AxiosInstance as s, type AxiosStatic as t, axiosRetry as u, type AxiosRetryConfig as v, type AxiosRetryConfigExtended as w, type AxiosRetryReturn as x, type AxiosRetry as y, isNetworkError as z }; diff --git a/node_modules/feaxios/dist/index.d.mts b/node_modules/feaxios/dist/index.d.mts new file mode 100644 index 00000000..7b218f59 --- /dev/null +++ b/node_modules/feaxios/dist/index.d.mts @@ -0,0 +1,6 @@ +import { a as axios } from './client-DGpL0cYy.mjs'; +export { j as AxiosDefaults, A as AxiosError, s as AxiosInstance, r as AxiosInterceptor, q as AxiosInterceptorManager, n as AxiosInterceptorOptions, m as AxiosPromise, g as AxiosRequestConfig, b as AxiosRequestTransformer, l as AxiosResponse, c as AxiosResponseTransformer, t as AxiosStatic, C as CanceledError, k as CreateAxiosDefaults, e as CustomParamsSerializer, F as FormDataVisitorHelpers, o as FulfillCallback, I as InternalAxiosRequestConfig, M as Method, P as ParamEncoder, f as ParamsSerializerOptions, h as RawAxiosRequestConfig, p as RejectCallback, R as ResponseType, d as SerializerOptions, S as SerializerVisitor, i as isAxiosError } from './client-DGpL0cYy.mjs'; + + + +export { axios as default }; diff --git a/node_modules/feaxios/dist/index.d.ts b/node_modules/feaxios/dist/index.d.ts new file mode 100644 index 00000000..c5b84be8 --- /dev/null +++ b/node_modules/feaxios/dist/index.d.ts @@ -0,0 +1,6 @@ +import { a as axios } from './client-DGpL0cYy.js'; +export { j as AxiosDefaults, A as AxiosError, s as AxiosInstance, r as AxiosInterceptor, q as AxiosInterceptorManager, n as AxiosInterceptorOptions, m as AxiosPromise, g as AxiosRequestConfig, b as AxiosRequestTransformer, l as AxiosResponse, c as AxiosResponseTransformer, t as AxiosStatic, C as CanceledError, k as CreateAxiosDefaults, e as CustomParamsSerializer, F as FormDataVisitorHelpers, o as FulfillCallback, I as InternalAxiosRequestConfig, M as Method, P as ParamEncoder, f as ParamsSerializerOptions, h as RawAxiosRequestConfig, p as RejectCallback, R as ResponseType, d as SerializerOptions, S as SerializerVisitor, i as isAxiosError } from './client-DGpL0cYy.js'; + + + +export { axios as default }; diff --git a/node_modules/feaxios/dist/index.js b/node_modules/feaxios/dist/index.js new file mode 100644 index 00000000..50e09ff5 --- /dev/null +++ b/node_modules/feaxios/dist/index.js @@ -0,0 +1,321 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +// src/client.ts +async function prepareAxiosResponse(options, res) { + const response = { config: options }; + response.status = res.status; + response.statusText = res.statusText; + response.headers = res.headers; + if (options.responseType === "stream") { + response.data = res.body; + return response; + } + return res[options.responseType || "text"]().then((data) => { + if (options.transformResponse) { + Array.isArray(options.transformResponse) ? options.transformResponse.map( + (fn) => data = fn.call(options, data, res?.headers, res?.status) + ) : data = options.transformResponse(data, res?.headers, res?.status); + response.data = data; + } else { + response.data = data; + response.data = JSON.parse(data); + } + }).catch(Object).then(() => response); +} +async function handleFetch(options, fetchOptions) { + let res = null; + if ("any" in AbortSignal) { + const signals = []; + if (options.timeout) { + signals.push(AbortSignal.timeout(options.timeout)); + } + if (options.signal) { + signals.push(options.signal); + } + if (signals.length > 0) { + fetchOptions.signal = AbortSignal.any(signals); + } + } else { + if (options.timeout) { + fetchOptions.signal = AbortSignal.timeout(options.timeout); + } + } + try { + res = await fetch(options.url, fetchOptions); + const ok = options.validateStatus ? options.validateStatus(res.status) : res.ok; + if (!ok) { + return Promise.reject( + new AxiosError( + `Request failed with status code ${res?.status}`, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(res?.status / 100) - 4], + options, + new Request(options.url, fetchOptions), + await prepareAxiosResponse(options, res) + ) + ); + } + return await prepareAxiosResponse(options, res); + } catch (error) { + if (error.name === "AbortError" || error.name === "TimeoutError") { + const isTimeoutError = error.name === "TimeoutError"; + return Promise.reject( + isTimeoutError ? new AxiosError( + options.timeoutErrorMessage || `timeout of ${options.timeout} ms exceeded`, + AxiosError.ECONNABORTED, + options, + request + ) : new CanceledError(null, options) + ); + } + return Promise.reject( + new AxiosError( + error.message, + void 0, + options, + request, + void 0 + ) + ); + } +} +function buildURL(options) { + let url = options.url || ""; + if (options.baseURL && options.url) { + url = options.url.replace(/^(?!.*\/\/)\/?/, `${options.baseURL}/`); + } + if (options.params && Object.keys(options.params).length > 0 && options.url) { + url += (~options.url.indexOf("?") ? "&" : "?") + (options.paramsSerializer ? options.paramsSerializer(options.params) : new URLSearchParams(options.params)); + } + return url; +} +function mergeAxiosOptions(input, defaults) { + const merged = { + ...defaults, + ...input + }; + if (defaults?.params && input?.params) { + merged.params = { + ...defaults?.params, + ...input?.params + }; + } + if (defaults?.headers && input?.headers) { + merged.headers = new Headers(defaults.headers || {}); + const headers = new Headers(input.headers || {}); + headers.forEach((value, key) => { + merged.headers.set(key, value); + }); + } + return merged; +} +function mergeFetchOptions(input, defaults) { + const merged = { + ...defaults, + ...input + }; + if (defaults?.headers && input?.headers) { + merged.headers = new Headers(defaults.headers || {}); + const headers = new Headers(input.headers || {}); + headers.forEach((value, key) => { + merged.headers.set(key, value); + }); + } + return merged; +} +function defaultTransformer(data, headers) { + const contentType = headers.get("content-type"); + if (!contentType) { + if (typeof data === "string") { + headers.set("content-type", "text/plain"); + } else if (data instanceof URLSearchParams) { + headers.set("content-type", "application/x-www-form-urlencoded"); + } else if (data instanceof Blob || data instanceof ArrayBuffer || ArrayBuffer.isView(data)) { + headers.set("content-type", "application/octet-stream"); + } else if (typeof data === "object" && typeof data.append !== "function" && typeof data.text !== "function") { + data = JSON.stringify(data); + headers.set("content-type", "application/json"); + } + } else { + if (contentType === "application/x-www-form-urlencoded" && !(data instanceof URLSearchParams)) { + data = new URLSearchParams(data); + } else if (contentType === "application/json" && typeof data === "object") { + data = JSON.stringify(data); + } + } + return data; +} +async function request(configOrUrl, config, defaults, method, interceptors, data) { + if (typeof configOrUrl === "string") { + config = config || {}; + config.url = configOrUrl; + } else + config = configOrUrl || {}; + const options = mergeAxiosOptions(config, defaults || {}); + options.fetchOptions = options.fetchOptions || {}; + options.timeout = options.timeout || 0; + options.headers = new Headers(options.headers || {}); + options.transformRequest = options.transformRequest ?? defaultTransformer; + data = data || options.data; + if (options.transformRequest && data) { + Array.isArray(options.transformRequest) ? options.transformRequest.map( + (fn) => data = fn.call(options, data, options.headers) + ) : data = options.transformRequest(data, options.headers); + } + options.url = buildURL(options); + options.method = method || options.method || "get"; + if (interceptors && interceptors.request.handlers.length > 0) { + const chain = interceptors.request.handlers.filter( + (interceptor) => !interceptor?.runWhen || typeof interceptor.runWhen === "function" && interceptor.runWhen(options) + ).flatMap((interceptor) => [interceptor.fulfilled, interceptor.rejected]); + let result = options; + for (let i = 0, len = chain.length; i < len; i += 2) { + const onFulfilled = chain[i]; + const onRejected = chain[i + 1]; + try { + if (onFulfilled) + result = onFulfilled(result); + } catch (error) { + if (onRejected) + onRejected?.(error); + break; + } + } + } + const init = mergeFetchOptions( + { + method: options.method?.toUpperCase(), + body: data, + headers: options.headers, + credentials: options.withCredentials ? "include" : void 0, + signal: options.signal + }, + options.fetchOptions + ); + let resp = handleFetch(options, init); + if (interceptors && interceptors.response.handlers.length > 0) { + const chain = interceptors.response.handlers.flatMap((interceptor) => [ + interceptor.fulfilled, + interceptor.rejected + ]); + for (let i = 0, len = chain.length; i < len; i += 2) { + resp = resp.then(chain[i], chain[i + 1]); + } + } + return resp; +} +var AxiosInterceptorManager = class { + handlers = []; + constructor() { + this.handlers = []; + } + use = (onFulfilled, onRejected, options) => { + this.handlers.push({ + fulfilled: onFulfilled, + rejected: onRejected, + runWhen: options?.runWhen + }); + return this.handlers.length - 1; + }; + eject = (id) => { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + clear = () => { + this.handlers = []; + }; +}; +function createAxiosInstance(defaults) { + defaults = defaults || {}; + const interceptors = { + request: new AxiosInterceptorManager(), + response: new AxiosInterceptorManager() + }; + const axios2 = (url, config) => request(url, config, defaults, void 0, interceptors); + axios2.defaults = defaults; + axios2.interceptors = interceptors; + axios2.getUri = (config) => { + const merged = mergeAxiosOptions(config || {}, defaults); + return buildURL(merged); + }; + axios2.request = (config) => request(config, void 0, defaults, void 0, interceptors); + ["get", "delete", "head", "options"].forEach((method) => { + axios2[method] = (url, config) => request(url, config, defaults, method, interceptors); + }); + ["post", "put", "patch"].forEach((method) => { + axios2[method] = (url, data, config) => request(url, config, defaults, method, interceptors, data); + }); + ["postForm", "putForm", "patchForm"].forEach((method) => { + axios2[method] = (url, data, config) => { + config = config || {}; + config.headers = new Headers(config.headers || {}); + config.headers.set("content-type", "application/x-www-form-urlencoded"); + return request( + url, + config, + defaults, + method.replace("Form", ""), + interceptors, + data + ); + }; + }); + return axios2; +} +var AxiosError = class extends Error { + config; + code; + request; + response; + status; + isAxiosError; + constructor(message, code, config, request2, response) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error().stack; + } + this.name = "AxiosError"; + this.code = code; + this.config = config; + this.request = request2; + this.response = response; + this.isAxiosError = true; + } + static ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static ERR_NETWORK = "ERR_NETWORK"; + static ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static ERR_INVALID_URL = "ERR_INVALID_URL"; + static ERR_CANCELED = "ERR_CANCELED"; + static ECONNABORTED = "ECONNABORTED"; + static ETIMEDOUT = "ETIMEDOUT"; +}; +var CanceledError = class extends AxiosError { + constructor(message, config, request2) { + super( + !message ? "canceled" : message, + AxiosError.ERR_CANCELED, + config, + request2 + ); + this.name = "CanceledError"; + } +}; +function isAxiosError(payload) { + return payload !== null && typeof payload === "object" && payload.isAxiosError; +} +var axios = createAxiosInstance(); +axios.create = (defaults) => createAxiosInstance(defaults); + +// src/index.ts +var src_default = axios; + +exports.AxiosError = AxiosError; +exports.CanceledError = CanceledError; +exports.default = src_default; +exports.isAxiosError = isAxiosError; diff --git a/node_modules/feaxios/dist/index.mjs b/node_modules/feaxios/dist/index.mjs new file mode 100644 index 00000000..579f0587 --- /dev/null +++ b/node_modules/feaxios/dist/index.mjs @@ -0,0 +1,314 @@ +// src/client.ts +async function prepareAxiosResponse(options, res) { + const response = { config: options }; + response.status = res.status; + response.statusText = res.statusText; + response.headers = res.headers; + if (options.responseType === "stream") { + response.data = res.body; + return response; + } + return res[options.responseType || "text"]().then((data) => { + if (options.transformResponse) { + Array.isArray(options.transformResponse) ? options.transformResponse.map( + (fn) => data = fn.call(options, data, res?.headers, res?.status) + ) : data = options.transformResponse(data, res?.headers, res?.status); + response.data = data; + } else { + response.data = data; + response.data = JSON.parse(data); + } + }).catch(Object).then(() => response); +} +async function handleFetch(options, fetchOptions) { + let res = null; + if ("any" in AbortSignal) { + const signals = []; + if (options.timeout) { + signals.push(AbortSignal.timeout(options.timeout)); + } + if (options.signal) { + signals.push(options.signal); + } + if (signals.length > 0) { + fetchOptions.signal = AbortSignal.any(signals); + } + } else { + if (options.timeout) { + fetchOptions.signal = AbortSignal.timeout(options.timeout); + } + } + try { + res = await fetch(options.url, fetchOptions); + const ok = options.validateStatus ? options.validateStatus(res.status) : res.ok; + if (!ok) { + return Promise.reject( + new AxiosError( + `Request failed with status code ${res?.status}`, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(res?.status / 100) - 4], + options, + new Request(options.url, fetchOptions), + await prepareAxiosResponse(options, res) + ) + ); + } + return await prepareAxiosResponse(options, res); + } catch (error) { + if (error.name === "AbortError" || error.name === "TimeoutError") { + const isTimeoutError = error.name === "TimeoutError"; + return Promise.reject( + isTimeoutError ? new AxiosError( + options.timeoutErrorMessage || `timeout of ${options.timeout} ms exceeded`, + AxiosError.ECONNABORTED, + options, + request + ) : new CanceledError(null, options) + ); + } + return Promise.reject( + new AxiosError( + error.message, + void 0, + options, + request, + void 0 + ) + ); + } +} +function buildURL(options) { + let url = options.url || ""; + if (options.baseURL && options.url) { + url = options.url.replace(/^(?!.*\/\/)\/?/, `${options.baseURL}/`); + } + if (options.params && Object.keys(options.params).length > 0 && options.url) { + url += (~options.url.indexOf("?") ? "&" : "?") + (options.paramsSerializer ? options.paramsSerializer(options.params) : new URLSearchParams(options.params)); + } + return url; +} +function mergeAxiosOptions(input, defaults) { + const merged = { + ...defaults, + ...input + }; + if (defaults?.params && input?.params) { + merged.params = { + ...defaults?.params, + ...input?.params + }; + } + if (defaults?.headers && input?.headers) { + merged.headers = new Headers(defaults.headers || {}); + const headers = new Headers(input.headers || {}); + headers.forEach((value, key) => { + merged.headers.set(key, value); + }); + } + return merged; +} +function mergeFetchOptions(input, defaults) { + const merged = { + ...defaults, + ...input + }; + if (defaults?.headers && input?.headers) { + merged.headers = new Headers(defaults.headers || {}); + const headers = new Headers(input.headers || {}); + headers.forEach((value, key) => { + merged.headers.set(key, value); + }); + } + return merged; +} +function defaultTransformer(data, headers) { + const contentType = headers.get("content-type"); + if (!contentType) { + if (typeof data === "string") { + headers.set("content-type", "text/plain"); + } else if (data instanceof URLSearchParams) { + headers.set("content-type", "application/x-www-form-urlencoded"); + } else if (data instanceof Blob || data instanceof ArrayBuffer || ArrayBuffer.isView(data)) { + headers.set("content-type", "application/octet-stream"); + } else if (typeof data === "object" && typeof data.append !== "function" && typeof data.text !== "function") { + data = JSON.stringify(data); + headers.set("content-type", "application/json"); + } + } else { + if (contentType === "application/x-www-form-urlencoded" && !(data instanceof URLSearchParams)) { + data = new URLSearchParams(data); + } else if (contentType === "application/json" && typeof data === "object") { + data = JSON.stringify(data); + } + } + return data; +} +async function request(configOrUrl, config, defaults, method, interceptors, data) { + if (typeof configOrUrl === "string") { + config = config || {}; + config.url = configOrUrl; + } else + config = configOrUrl || {}; + const options = mergeAxiosOptions(config, defaults || {}); + options.fetchOptions = options.fetchOptions || {}; + options.timeout = options.timeout || 0; + options.headers = new Headers(options.headers || {}); + options.transformRequest = options.transformRequest ?? defaultTransformer; + data = data || options.data; + if (options.transformRequest && data) { + Array.isArray(options.transformRequest) ? options.transformRequest.map( + (fn) => data = fn.call(options, data, options.headers) + ) : data = options.transformRequest(data, options.headers); + } + options.url = buildURL(options); + options.method = method || options.method || "get"; + if (interceptors && interceptors.request.handlers.length > 0) { + const chain = interceptors.request.handlers.filter( + (interceptor) => !interceptor?.runWhen || typeof interceptor.runWhen === "function" && interceptor.runWhen(options) + ).flatMap((interceptor) => [interceptor.fulfilled, interceptor.rejected]); + let result = options; + for (let i = 0, len = chain.length; i < len; i += 2) { + const onFulfilled = chain[i]; + const onRejected = chain[i + 1]; + try { + if (onFulfilled) + result = onFulfilled(result); + } catch (error) { + if (onRejected) + onRejected?.(error); + break; + } + } + } + const init = mergeFetchOptions( + { + method: options.method?.toUpperCase(), + body: data, + headers: options.headers, + credentials: options.withCredentials ? "include" : void 0, + signal: options.signal + }, + options.fetchOptions + ); + let resp = handleFetch(options, init); + if (interceptors && interceptors.response.handlers.length > 0) { + const chain = interceptors.response.handlers.flatMap((interceptor) => [ + interceptor.fulfilled, + interceptor.rejected + ]); + for (let i = 0, len = chain.length; i < len; i += 2) { + resp = resp.then(chain[i], chain[i + 1]); + } + } + return resp; +} +var AxiosInterceptorManager = class { + handlers = []; + constructor() { + this.handlers = []; + } + use = (onFulfilled, onRejected, options) => { + this.handlers.push({ + fulfilled: onFulfilled, + rejected: onRejected, + runWhen: options?.runWhen + }); + return this.handlers.length - 1; + }; + eject = (id) => { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + clear = () => { + this.handlers = []; + }; +}; +function createAxiosInstance(defaults) { + defaults = defaults || {}; + const interceptors = { + request: new AxiosInterceptorManager(), + response: new AxiosInterceptorManager() + }; + const axios2 = (url, config) => request(url, config, defaults, void 0, interceptors); + axios2.defaults = defaults; + axios2.interceptors = interceptors; + axios2.getUri = (config) => { + const merged = mergeAxiosOptions(config || {}, defaults); + return buildURL(merged); + }; + axios2.request = (config) => request(config, void 0, defaults, void 0, interceptors); + ["get", "delete", "head", "options"].forEach((method) => { + axios2[method] = (url, config) => request(url, config, defaults, method, interceptors); + }); + ["post", "put", "patch"].forEach((method) => { + axios2[method] = (url, data, config) => request(url, config, defaults, method, interceptors, data); + }); + ["postForm", "putForm", "patchForm"].forEach((method) => { + axios2[method] = (url, data, config) => { + config = config || {}; + config.headers = new Headers(config.headers || {}); + config.headers.set("content-type", "application/x-www-form-urlencoded"); + return request( + url, + config, + defaults, + method.replace("Form", ""), + interceptors, + data + ); + }; + }); + return axios2; +} +var AxiosError = class extends Error { + config; + code; + request; + response; + status; + isAxiosError; + constructor(message, code, config, request2, response) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error().stack; + } + this.name = "AxiosError"; + this.code = code; + this.config = config; + this.request = request2; + this.response = response; + this.isAxiosError = true; + } + static ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static ERR_NETWORK = "ERR_NETWORK"; + static ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static ERR_INVALID_URL = "ERR_INVALID_URL"; + static ERR_CANCELED = "ERR_CANCELED"; + static ECONNABORTED = "ECONNABORTED"; + static ETIMEDOUT = "ETIMEDOUT"; +}; +var CanceledError = class extends AxiosError { + constructor(message, config, request2) { + super( + !message ? "canceled" : message, + AxiosError.ERR_CANCELED, + config, + request2 + ); + this.name = "CanceledError"; + } +}; +function isAxiosError(payload) { + return payload !== null && typeof payload === "object" && payload.isAxiosError; +} +var axios = createAxiosInstance(); +axios.create = (defaults) => createAxiosInstance(defaults); + +// src/index.ts +var src_default = axios; + +export { AxiosError, CanceledError, src_default as default, isAxiosError }; diff --git a/node_modules/feaxios/dist/retry.d.mts b/node_modules/feaxios/dist/retry.d.mts new file mode 100644 index 00000000..14090800 --- /dev/null +++ b/node_modules/feaxios/dist/retry.d.mts @@ -0,0 +1 @@ +export { y as AxiosRetry, v as AxiosRetryConfig, w as AxiosRetryConfigExtended, x as AxiosRetryReturn, J as DEFAULT_OPTIONS, u as default, H as exponentialDelay, E as isIdempotentRequestError, z as isNetworkError, G as isNetworkOrIdempotentRequestError, B as isRetryableError, D as isSafeRequestError } from './client-DGpL0cYy.mjs'; diff --git a/node_modules/feaxios/dist/retry.d.ts b/node_modules/feaxios/dist/retry.d.ts new file mode 100644 index 00000000..80066b7b --- /dev/null +++ b/node_modules/feaxios/dist/retry.d.ts @@ -0,0 +1 @@ +export { y as AxiosRetry, v as AxiosRetryConfig, w as AxiosRetryConfigExtended, x as AxiosRetryReturn, J as DEFAULT_OPTIONS, u as default, H as exponentialDelay, E as isIdempotentRequestError, z as isNetworkError, G as isNetworkOrIdempotentRequestError, B as isRetryableError, D as isSafeRequestError } from './client-DGpL0cYy.js'; diff --git a/node_modules/feaxios/dist/retry.js b/node_modules/feaxios/dist/retry.js new file mode 100644 index 00000000..4ebbe64d --- /dev/null +++ b/node_modules/feaxios/dist/retry.js @@ -0,0 +1,137 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var isRetryAllowed = require('is-retry-allowed'); + +function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } + +var isRetryAllowed__default = /*#__PURE__*/_interopDefault(isRetryAllowed); + +// src/retry.ts +function isNetworkError(error) { + const CODE_EXCLUDE_LIST = ["ERR_CANCELED", "ECONNABORTED"]; + if (error.response) { + return false; + } + if (!error.code) { + return false; + } + if (CODE_EXCLUDE_LIST.includes(error.code)) { + return false; + } + return isRetryAllowed__default.default(error); +} +var SAFE_HTTP_METHODS = ["get", "head", "options"]; +var IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(["put", "delete"]); +function isRetryableError(error) { + return error.code !== "ECONNABORTED" && (!error.response || error.response.status >= 500 && error.response.status <= 599); +} +function isSafeRequestError(error) { + if (!error.config?.method) { + return false; + } + return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1; +} +function isIdempotentRequestError(error) { + if (!error.config?.method) { + return false; + } + return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1; +} +function isNetworkOrIdempotentRequestError(error) { + return isNetworkError(error) || isIdempotentRequestError(error); +} +function noDelay() { + return 0; +} +function exponentialDelay(retryNumber = 0, _error = void 0, delayFactor = 100) { + const delay = 2 ** retryNumber * delayFactor; + const randomSum = delay * 0.2 * Math.random(); + return delay + randomSum; +} +var DEFAULT_OPTIONS = { + retries: 3, + retryCondition: isNetworkOrIdempotentRequestError, + retryDelay: noDelay, + shouldResetTimeout: false, + onRetry: () => { + } +}; +function getRequestOptions(config, defaultOptions) { + return { ...DEFAULT_OPTIONS, ...defaultOptions, ...config.retry }; +} +function setCurrentState(config, defaultOptions) { + const currentState = getRequestOptions(config, defaultOptions || {}); + currentState.retryCount = currentState.retryCount || 0; + currentState.lastRequestTime = currentState.lastRequestTime || Date.now(); + config.retry = currentState; + return currentState; +} +async function shouldRetry(currentState, error) { + const { retries, retryCondition } = currentState; + const shouldRetryOrPromise = (currentState.retryCount || 0) < retries && retryCondition(error); + if (typeof shouldRetryOrPromise === "object") { + try { + const shouldRetryPromiseResult = await shouldRetryOrPromise; + return shouldRetryPromiseResult !== false; + } catch (_err) { + return false; + } + } + return shouldRetryOrPromise; +} +var axiosRetry = (axiosInstance, defaultOptions) => { + const requestInterceptorId = axiosInstance.interceptors.request.use( + (config) => { + setCurrentState(config, defaultOptions); + return config; + } + ); + const responseInterceptorId = axiosInstance.interceptors.response.use( + null, + async (error) => { + const { config } = error; + if (!config) { + return Promise.reject(error); + } + const currentState = setCurrentState(config, defaultOptions); + if (await shouldRetry(currentState, error)) { + currentState.retryCount += 1; + const { retryDelay, shouldResetTimeout, onRetry } = currentState; + const delay = retryDelay(currentState.retryCount, error); + if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) { + const lastRequestDuration = Date.now() - currentState.lastRequestTime; + const timeout = config.timeout - lastRequestDuration - delay; + if (timeout <= 0) { + return Promise.reject(error); + } + config.timeout = timeout; + } + config.transformRequest = [(data) => data]; + await onRetry(currentState.retryCount, error, config); + return new Promise((resolve) => { + setTimeout(() => resolve(axiosInstance(config)), delay); + }); + } + return Promise.reject(error); + } + ); + return { requestInterceptorId, responseInterceptorId }; +}; +axiosRetry.isNetworkError = isNetworkError; +axiosRetry.isSafeRequestError = isSafeRequestError; +axiosRetry.isIdempotentRequestError = isIdempotentRequestError; +axiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError; +axiosRetry.exponentialDelay = exponentialDelay; +axiosRetry.isRetryableError = isRetryableError; +var retry_default = axiosRetry; + +exports.DEFAULT_OPTIONS = DEFAULT_OPTIONS; +exports.default = retry_default; +exports.exponentialDelay = exponentialDelay; +exports.isIdempotentRequestError = isIdempotentRequestError; +exports.isNetworkError = isNetworkError; +exports.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError; +exports.isRetryableError = isRetryableError; +exports.isSafeRequestError = isSafeRequestError; diff --git a/node_modules/feaxios/dist/retry.mjs b/node_modules/feaxios/dist/retry.mjs new file mode 100644 index 00000000..b0d4a912 --- /dev/null +++ b/node_modules/feaxios/dist/retry.mjs @@ -0,0 +1,122 @@ +import isRetryAllowed from 'is-retry-allowed'; + +// src/retry.ts +function isNetworkError(error) { + const CODE_EXCLUDE_LIST = ["ERR_CANCELED", "ECONNABORTED"]; + if (error.response) { + return false; + } + if (!error.code) { + return false; + } + if (CODE_EXCLUDE_LIST.includes(error.code)) { + return false; + } + return isRetryAllowed(error); +} +var SAFE_HTTP_METHODS = ["get", "head", "options"]; +var IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(["put", "delete"]); +function isRetryableError(error) { + return error.code !== "ECONNABORTED" && (!error.response || error.response.status >= 500 && error.response.status <= 599); +} +function isSafeRequestError(error) { + if (!error.config?.method) { + return false; + } + return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1; +} +function isIdempotentRequestError(error) { + if (!error.config?.method) { + return false; + } + return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1; +} +function isNetworkOrIdempotentRequestError(error) { + return isNetworkError(error) || isIdempotentRequestError(error); +} +function noDelay() { + return 0; +} +function exponentialDelay(retryNumber = 0, _error = void 0, delayFactor = 100) { + const delay = 2 ** retryNumber * delayFactor; + const randomSum = delay * 0.2 * Math.random(); + return delay + randomSum; +} +var DEFAULT_OPTIONS = { + retries: 3, + retryCondition: isNetworkOrIdempotentRequestError, + retryDelay: noDelay, + shouldResetTimeout: false, + onRetry: () => { + } +}; +function getRequestOptions(config, defaultOptions) { + return { ...DEFAULT_OPTIONS, ...defaultOptions, ...config.retry }; +} +function setCurrentState(config, defaultOptions) { + const currentState = getRequestOptions(config, defaultOptions || {}); + currentState.retryCount = currentState.retryCount || 0; + currentState.lastRequestTime = currentState.lastRequestTime || Date.now(); + config.retry = currentState; + return currentState; +} +async function shouldRetry(currentState, error) { + const { retries, retryCondition } = currentState; + const shouldRetryOrPromise = (currentState.retryCount || 0) < retries && retryCondition(error); + if (typeof shouldRetryOrPromise === "object") { + try { + const shouldRetryPromiseResult = await shouldRetryOrPromise; + return shouldRetryPromiseResult !== false; + } catch (_err) { + return false; + } + } + return shouldRetryOrPromise; +} +var axiosRetry = (axiosInstance, defaultOptions) => { + const requestInterceptorId = axiosInstance.interceptors.request.use( + (config) => { + setCurrentState(config, defaultOptions); + return config; + } + ); + const responseInterceptorId = axiosInstance.interceptors.response.use( + null, + async (error) => { + const { config } = error; + if (!config) { + return Promise.reject(error); + } + const currentState = setCurrentState(config, defaultOptions); + if (await shouldRetry(currentState, error)) { + currentState.retryCount += 1; + const { retryDelay, shouldResetTimeout, onRetry } = currentState; + const delay = retryDelay(currentState.retryCount, error); + if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) { + const lastRequestDuration = Date.now() - currentState.lastRequestTime; + const timeout = config.timeout - lastRequestDuration - delay; + if (timeout <= 0) { + return Promise.reject(error); + } + config.timeout = timeout; + } + config.transformRequest = [(data) => data]; + await onRetry(currentState.retryCount, error, config); + return new Promise((resolve) => { + setTimeout(() => resolve(axiosInstance(config)), delay); + }); + } + return Promise.reject(error); + } + ); + return { requestInterceptorId, responseInterceptorId }; +}; +axiosRetry.isNetworkError = isNetworkError; +axiosRetry.isSafeRequestError = isSafeRequestError; +axiosRetry.isIdempotentRequestError = isIdempotentRequestError; +axiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError; +axiosRetry.exponentialDelay = exponentialDelay; +axiosRetry.isRetryableError = isRetryableError; +var retry_default = axiosRetry; + +export { DEFAULT_OPTIONS, retry_default as default, exponentialDelay, isIdempotentRequestError, isNetworkError, isNetworkOrIdempotentRequestError, isRetryableError, isSafeRequestError }; diff --git a/node_modules/feaxios/package.json b/node_modules/feaxios/package.json new file mode 100644 index 00000000..21034ed8 --- /dev/null +++ b/node_modules/feaxios/package.json @@ -0,0 +1,71 @@ +{ + "name": "feaxios", + "version": "0.0.23", + "description": "Tiny Fetch wrapper that provides a similar API to Axios", + "main": "dist/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "./retry": { + "import": { + "types": "./dist/retry.d.ts", + "default": "./dist/retry.mjs" + }, + "require": { + "types": "./dist/retry.d.ts", + "default": "./dist/retry.js" + } + } + }, + "typesVersions": { + "*": { + "retry": [ + "./dist/retry.d.ts" + ] + } + }, + "files": [ + "dist" + ], + "eslintConfig": { + "extends": [ + "prettier" + ] + }, + "repository": "divyam234/feaxios", + "keywords": [ + "axios", + "fetch" + ], + "license": "MIT", + "homepage": "https://github.com/divyam234/feaxios", + "devDependencies": { + "@types/node": "^20.11.17", + "@vitest/ui": "^1.2.2", + "msw": "^2.2.0", + "nock": "^13.5.1", + "prettier": "^3.2.5", + "tsup": "^8.0.2", + "typescript": "^5.3.3", + "vitest": "^1.2.2" + }, + "dependencies": { + "is-retry-allowed": "^3.0.0" + }, + "scripts": { + "build": "tsup", + "typecheck": "tsc --noEmit", + "test": "vitest", + "test-ui": "vitest --ui", + "format": "prettier --write './**/*.{ts,md}'", + "format:check": "prettier --check './**/*.{ts,md}'" + } +} \ No newline at end of file diff --git a/node_modules/follow-redirects/LICENSE b/node_modules/follow-redirects/LICENSE new file mode 100644 index 00000000..742cbada --- /dev/null +++ b/node_modules/follow-redirects/LICENSE @@ -0,0 +1,18 @@ +Copyright 2014–present Olivier Lalonde , James Talmage , Ruben Verborgh + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/follow-redirects/README.md b/node_modules/follow-redirects/README.md new file mode 100644 index 00000000..eb869a6f --- /dev/null +++ b/node_modules/follow-redirects/README.md @@ -0,0 +1,155 @@ +## Follow Redirects + +Drop-in replacement for Node's `http` and `https` modules that automatically follows redirects. + +[![npm version](https://img.shields.io/npm/v/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Build Status](https://github.com/follow-redirects/follow-redirects/workflows/CI/badge.svg)](https://github.com/follow-redirects/follow-redirects/actions) +[![Coverage Status](https://coveralls.io/repos/follow-redirects/follow-redirects/badge.svg?branch=master)](https://coveralls.io/r/follow-redirects/follow-redirects?branch=master) +[![npm downloads](https://img.shields.io/npm/dm/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Sponsor on GitHub](https://img.shields.io/static/v1?label=Sponsor&message=%F0%9F%92%96&logo=GitHub)](https://github.com/sponsors/RubenVerborgh) + +`follow-redirects` provides [request](https://nodejs.org/api/http.html#http_http_request_options_callback) and [get](https://nodejs.org/api/http.html#http_http_get_options_callback) + methods that behave identically to those found on the native [http](https://nodejs.org/api/http.html#http_http_request_options_callback) and [https](https://nodejs.org/api/https.html#https_https_request_options_callback) + modules, with the exception that they will seamlessly follow redirects. + +```javascript +const { http, https } = require('follow-redirects'); + +http.get('http://bit.ly/900913', response => { + response.on('data', chunk => { + console.log(chunk); + }); +}).on('error', err => { + console.error(err); +}); +``` + +You can inspect the final redirected URL through the `responseUrl` property on the `response`. +If no redirection happened, `responseUrl` is the original request URL. + +```javascript +const request = https.request({ + host: 'bitly.com', + path: '/UHfDGO', +}, response => { + console.log(response.responseUrl); + // 'http://duckduckgo.com/robots.txt' +}); +request.end(); +``` + +## Options +### Global options +Global options are set directly on the `follow-redirects` module: + +```javascript +const followRedirects = require('follow-redirects'); +followRedirects.maxRedirects = 10; +followRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB +``` + +The following global options are supported: + +- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. + +### Per-request options +Per-request options are set by passing an `options` object: + +```javascript +const url = require('url'); +const { http, https } = require('follow-redirects'); + +const options = url.parse('http://bit.ly/900913'); +options.maxRedirects = 10; +options.beforeRedirect = (options, response, request) => { + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + + // response.headers = the redirect response headers + // response.statusCode = the redirect response code (eg. 301, 307, etc.) + + // request.url = the requested URL that resulted in a redirect + // request.headers = the headers in the request that resulted in a redirect + // request.method = the method of the request that resulted in a redirect + if (options.hostname === "example.com") { + options.auth = "user:password"; + } +}; +http.request(options); +``` + +In addition to the [standard HTTP](https://nodejs.org/api/http.html#http_http_request_options_callback) and [HTTPS options](https://nodejs.org/api/https.html#https_https_request_options_callback), +the following per-request options are supported: +- `followRedirects` (default: `true`) – whether redirects should be followed. + +- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. + +- `beforeRedirect` (default: `undefined`) – optionally change the request `options` on redirects, or abort the request by throwing an error. + +- `agents` (default: `undefined`) – sets the `agent` option per protocol, since HTTP and HTTPS use different agents. Example value: `{ http: new http.Agent(), https: new https.Agent() }` + +- `trackRedirects` (default: `false`) – whether to store the redirected response details into the `redirects` array on the response object. + + +### Advanced usage +By default, `follow-redirects` will use the Node.js default implementations +of [`http`](https://nodejs.org/api/http.html) +and [`https`](https://nodejs.org/api/https.html). +To enable features such as caching and/or intermediate request tracking, +you might instead want to wrap `follow-redirects` around custom protocol implementations: + +```javascript +const { http, https } = require('follow-redirects').wrap({ + http: require('your-custom-http'), + https: require('your-custom-https'), +}); +``` + +Such custom protocols only need an implementation of the `request` method. + +## Browser Usage + +Due to the way the browser works, +the `http` and `https` browser equivalents perform redirects by default. + +By requiring `follow-redirects` this way: +```javascript +const http = require('follow-redirects/http'); +const https = require('follow-redirects/https'); +``` +you can easily tell webpack and friends to replace +`follow-redirect` by the built-in versions: + +```json +{ + "follow-redirects/http" : "http", + "follow-redirects/https" : "https" +} +``` + +## Contributing + +Pull Requests are always welcome. Please [file an issue](https://github.com/follow-redirects/follow-redirects/issues) + detailing your proposal before you invest your valuable time. Additional features and bug fixes should be accompanied + by tests. You can run the test suite locally with a simple `npm test` command. + +## Debug Logging + +`follow-redirects` uses the excellent [debug](https://www.npmjs.com/package/debug) for logging. To turn on logging + set the environment variable `DEBUG=follow-redirects` for debug output from just this module. When running the test + suite it is sometimes advantageous to set `DEBUG=*` to see output from the express server as well. + +## Authors + +- [Ruben Verborgh](https://ruben.verborgh.org/) +- [Olivier Lalonde](mailto:olalonde@gmail.com) +- [James Talmage](mailto:james@talmage.io) + +## License + +[MIT License](https://github.com/follow-redirects/follow-redirects/blob/master/LICENSE) diff --git a/node_modules/follow-redirects/debug.js b/node_modules/follow-redirects/debug.js new file mode 100644 index 00000000..decb77de --- /dev/null +++ b/node_modules/follow-redirects/debug.js @@ -0,0 +1,15 @@ +var debug; + +module.exports = function () { + if (!debug) { + try { + /* eslint global-require: off */ + debug = require("debug")("follow-redirects"); + } + catch (error) { /* */ } + if (typeof debug !== "function") { + debug = function () { /* */ }; + } + } + debug.apply(null, arguments); +}; diff --git a/node_modules/follow-redirects/http.js b/node_modules/follow-redirects/http.js new file mode 100644 index 00000000..695e3561 --- /dev/null +++ b/node_modules/follow-redirects/http.js @@ -0,0 +1 @@ +module.exports = require("./").http; diff --git a/node_modules/follow-redirects/https.js b/node_modules/follow-redirects/https.js new file mode 100644 index 00000000..d21c921d --- /dev/null +++ b/node_modules/follow-redirects/https.js @@ -0,0 +1 @@ +module.exports = require("./").https; diff --git a/node_modules/follow-redirects/index.js b/node_modules/follow-redirects/index.js new file mode 100644 index 00000000..a30b32cd --- /dev/null +++ b/node_modules/follow-redirects/index.js @@ -0,0 +1,686 @@ +var url = require("url"); +var URL = url.URL; +var http = require("http"); +var https = require("https"); +var Writable = require("stream").Writable; +var assert = require("assert"); +var debug = require("./debug"); + +// Preventive platform detection +// istanbul ignore next +(function detectUnsupportedEnvironment() { + var looksLikeNode = typeof process !== "undefined"; + var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined"; + var looksLikeV8 = isFunction(Error.captureStackTrace); + if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) { + console.warn("The follow-redirects package should be excluded from browser builds."); + } +}()); + +// Whether to use the native URL object or the legacy url module +var useNativeURL = false; +try { + assert(new URL("")); +} +catch (error) { + useNativeURL = error.code === "ERR_INVALID_URL"; +} + +// URL fields to preserve in copy operations +var preservedUrlFields = [ + "auth", + "host", + "hostname", + "href", + "path", + "pathname", + "port", + "protocol", + "query", + "search", + "hash", +]; + +// Create handlers that pass events from native requests +var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; +var eventHandlers = Object.create(null); +events.forEach(function (event) { + eventHandlers[event] = function (arg1, arg2, arg3) { + this._redirectable.emit(event, arg1, arg2, arg3); + }; +}); + +// Error types with codes +var InvalidUrlError = createErrorType( + "ERR_INVALID_URL", + "Invalid URL", + TypeError +); +var RedirectionError = createErrorType( + "ERR_FR_REDIRECTION_FAILURE", + "Redirected request failed" +); +var TooManyRedirectsError = createErrorType( + "ERR_FR_TOO_MANY_REDIRECTS", + "Maximum number of redirects exceeded", + RedirectionError +); +var MaxBodyLengthExceededError = createErrorType( + "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", + "Request body larger than maxBodyLength limit" +); +var WriteAfterEndError = createErrorType( + "ERR_STREAM_WRITE_AFTER_END", + "write after end" +); + +// istanbul ignore next +var destroy = Writable.prototype.destroy || noop; + +// An HTTP(S) request that can be redirected +function RedirectableRequest(options, responseCallback) { + // Initialize the request + Writable.call(this); + this._sanitizeOptions(options); + this._options = options; + this._ended = false; + this._ending = false; + this._redirectCount = 0; + this._redirects = []; + this._requestBodyLength = 0; + this._requestBodyBuffers = []; + + // Attach a callback if passed + if (responseCallback) { + this.on("response", responseCallback); + } + + // React to responses of native requests + var self = this; + this._onNativeResponse = function (response) { + try { + self._processResponse(response); + } + catch (cause) { + self.emit("error", cause instanceof RedirectionError ? + cause : new RedirectionError({ cause: cause })); + } + }; + + // Perform the first request + this._performRequest(); +} +RedirectableRequest.prototype = Object.create(Writable.prototype); + +RedirectableRequest.prototype.abort = function () { + destroyRequest(this._currentRequest); + this._currentRequest.abort(); + this.emit("abort"); +}; + +RedirectableRequest.prototype.destroy = function (error) { + destroyRequest(this._currentRequest, error); + destroy.call(this, error); + return this; +}; + +// Writes buffered data to the current native request +RedirectableRequest.prototype.write = function (data, encoding, callback) { + // Writing is not allowed if end has been called + if (this._ending) { + throw new WriteAfterEndError(); + } + + // Validate input and shift parameters if necessary + if (!isString(data) && !isBuffer(data)) { + throw new TypeError("data should be a string, Buffer or Uint8Array"); + } + if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } + + // Ignore empty buffers, since writing them doesn't invoke the callback + // https://github.com/nodejs/node/issues/22066 + if (data.length === 0) { + if (callback) { + callback(); + } + return; + } + // Only write when we don't exceed the maximum body length + if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { + this._requestBodyLength += data.length; + this._requestBodyBuffers.push({ data: data, encoding: encoding }); + this._currentRequest.write(data, encoding, callback); + } + // Error when we exceed the maximum body length + else { + this.emit("error", new MaxBodyLengthExceededError()); + this.abort(); + } +}; + +// Ends the current native request +RedirectableRequest.prototype.end = function (data, encoding, callback) { + // Shift parameters if necessary + if (isFunction(data)) { + callback = data; + data = encoding = null; + } + else if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } + + // Write data if needed and end + if (!data) { + this._ended = this._ending = true; + this._currentRequest.end(null, null, callback); + } + else { + var self = this; + var currentRequest = this._currentRequest; + this.write(data, encoding, function () { + self._ended = true; + currentRequest.end(null, null, callback); + }); + this._ending = true; + } +}; + +// Sets a header value on the current native request +RedirectableRequest.prototype.setHeader = function (name, value) { + this._options.headers[name] = value; + this._currentRequest.setHeader(name, value); +}; + +// Clears a header value on the current native request +RedirectableRequest.prototype.removeHeader = function (name) { + delete this._options.headers[name]; + this._currentRequest.removeHeader(name); +}; + +// Global timeout for all underlying requests +RedirectableRequest.prototype.setTimeout = function (msecs, callback) { + var self = this; + + // Destroys the socket on timeout + function destroyOnTimeout(socket) { + socket.setTimeout(msecs); + socket.removeListener("timeout", socket.destroy); + socket.addListener("timeout", socket.destroy); + } + + // Sets up a timer to trigger a timeout event + function startTimer(socket) { + if (self._timeout) { + clearTimeout(self._timeout); + } + self._timeout = setTimeout(function () { + self.emit("timeout"); + clearTimer(); + }, msecs); + destroyOnTimeout(socket); + } + + // Stops a timeout from triggering + function clearTimer() { + // Clear the timeout + if (self._timeout) { + clearTimeout(self._timeout); + self._timeout = null; + } + + // Clean up all attached listeners + self.removeListener("abort", clearTimer); + self.removeListener("error", clearTimer); + self.removeListener("response", clearTimer); + self.removeListener("close", clearTimer); + if (callback) { + self.removeListener("timeout", callback); + } + if (!self.socket) { + self._currentRequest.removeListener("socket", startTimer); + } + } + + // Attach callback if passed + if (callback) { + this.on("timeout", callback); + } + + // Start the timer if or when the socket is opened + if (this.socket) { + startTimer(this.socket); + } + else { + this._currentRequest.once("socket", startTimer); + } + + // Clean up on events + this.on("socket", destroyOnTimeout); + this.on("abort", clearTimer); + this.on("error", clearTimer); + this.on("response", clearTimer); + this.on("close", clearTimer); + + return this; +}; + +// Proxy all other public ClientRequest methods +[ + "flushHeaders", "getHeader", + "setNoDelay", "setSocketKeepAlive", +].forEach(function (method) { + RedirectableRequest.prototype[method] = function (a, b) { + return this._currentRequest[method](a, b); + }; +}); + +// Proxy all public ClientRequest properties +["aborted", "connection", "socket"].forEach(function (property) { + Object.defineProperty(RedirectableRequest.prototype, property, { + get: function () { return this._currentRequest[property]; }, + }); +}); + +RedirectableRequest.prototype._sanitizeOptions = function (options) { + // Ensure headers are always present + if (!options.headers) { + options.headers = {}; + } + + // Since http.request treats host as an alias of hostname, + // but the url module interprets host as hostname plus port, + // eliminate the host property to avoid confusion. + if (options.host) { + // Use hostname if set, because it has precedence + if (!options.hostname) { + options.hostname = options.host; + } + delete options.host; + } + + // Complete the URL object when necessary + if (!options.pathname && options.path) { + var searchPos = options.path.indexOf("?"); + if (searchPos < 0) { + options.pathname = options.path; + } + else { + options.pathname = options.path.substring(0, searchPos); + options.search = options.path.substring(searchPos); + } + } +}; + + +// Executes the next native request (initial or redirect) +RedirectableRequest.prototype._performRequest = function () { + // Load the native protocol + var protocol = this._options.protocol; + var nativeProtocol = this._options.nativeProtocols[protocol]; + if (!nativeProtocol) { + throw new TypeError("Unsupported protocol " + protocol); + } + + // If specified, use the agent corresponding to the protocol + // (HTTP and HTTPS use different types of agents) + if (this._options.agents) { + var scheme = protocol.slice(0, -1); + this._options.agent = this._options.agents[scheme]; + } + + // Create the native request and set up its event handlers + var request = this._currentRequest = + nativeProtocol.request(this._options, this._onNativeResponse); + request._redirectable = this; + for (var event of events) { + request.on(event, eventHandlers[event]); + } + + // RFC7230§5.3.1: When making a request directly to an origin server, […] + // a client MUST send only the absolute path […] as the request-target. + this._currentUrl = /^\//.test(this._options.path) ? + url.format(this._options) : + // When making a request to a proxy, […] + // a client MUST send the target URI in absolute-form […]. + this._options.path; + + // End a redirected request + // (The first request must be ended explicitly with RedirectableRequest#end) + if (this._isRedirect) { + // Write the request entity and end + var i = 0; + var self = this; + var buffers = this._requestBodyBuffers; + (function writeNext(error) { + // Only write if this request has not been redirected yet + // istanbul ignore else + if (request === self._currentRequest) { + // Report any write errors + // istanbul ignore if + if (error) { + self.emit("error", error); + } + // Write the next buffer if there are still left + else if (i < buffers.length) { + var buffer = buffers[i++]; + // istanbul ignore else + if (!request.finished) { + request.write(buffer.data, buffer.encoding, writeNext); + } + } + // End the request if `end` has been called on us + else if (self._ended) { + request.end(); + } + } + }()); + } +}; + +// Processes a response from the current native request +RedirectableRequest.prototype._processResponse = function (response) { + // Store the redirected response + var statusCode = response.statusCode; + if (this._options.trackRedirects) { + this._redirects.push({ + url: this._currentUrl, + headers: response.headers, + statusCode: statusCode, + }); + } + + // RFC7231§6.4: The 3xx (Redirection) class of status code indicates + // that further action needs to be taken by the user agent in order to + // fulfill the request. If a Location header field is provided, + // the user agent MAY automatically redirect its request to the URI + // referenced by the Location field value, + // even if the specific status code is not understood. + + // If the response is not a redirect; return it as-is + var location = response.headers.location; + if (!location || this._options.followRedirects === false || + statusCode < 300 || statusCode >= 400) { + response.responseUrl = this._currentUrl; + response.redirects = this._redirects; + this.emit("response", response); + + // Clean up + this._requestBodyBuffers = []; + return; + } + + // The response is a redirect, so abort the current request + destroyRequest(this._currentRequest); + // Discard the remainder of the response to avoid waiting for data + response.destroy(); + + // RFC7231§6.4: A client SHOULD detect and intervene + // in cyclical redirections (i.e., "infinite" redirection loops). + if (++this._redirectCount > this._options.maxRedirects) { + throw new TooManyRedirectsError(); + } + + // Store the request headers if applicable + var requestHeaders; + var beforeRedirect = this._options.beforeRedirect; + if (beforeRedirect) { + requestHeaders = Object.assign({ + // The Host header was set by nativeProtocol.request + Host: response.req.getHeader("host"), + }, this._options.headers); + } + + // RFC7231§6.4: Automatic redirection needs to done with + // care for methods not known to be safe, […] + // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change + // the request method from POST to GET for the subsequent request. + var method = this._options.method; + if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || + // RFC7231§6.4.4: The 303 (See Other) status code indicates that + // the server is redirecting the user agent to a different resource […] + // A user agent can perform a retrieval request targeting that URI + // (a GET or HEAD request if using HTTP) […] + (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { + this._options.method = "GET"; + // Drop a possible entity and headers related to it + this._requestBodyBuffers = []; + removeMatchingHeaders(/^content-/i, this._options.headers); + } + + // Drop the Host header, as the redirect might lead to a different host + var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); + + // If the redirect is relative, carry over the host of the last request + var currentUrlParts = parseUrl(this._currentUrl); + var currentHost = currentHostHeader || currentUrlParts.host; + var currentUrl = /^\w+:/.test(location) ? this._currentUrl : + url.format(Object.assign(currentUrlParts, { host: currentHost })); + + // Create the redirected request + var redirectUrl = resolveUrl(location, currentUrl); + debug("redirecting to", redirectUrl.href); + this._isRedirect = true; + spreadUrlObject(redirectUrl, this._options); + + // Drop confidential headers when redirecting to a less secure protocol + // or to a different domain that is not a superdomain + if (redirectUrl.protocol !== currentUrlParts.protocol && + redirectUrl.protocol !== "https:" || + redirectUrl.host !== currentHost && + !isSubdomain(redirectUrl.host, currentHost)) { + removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); + } + + // Evaluate the beforeRedirect callback + if (isFunction(beforeRedirect)) { + var responseDetails = { + headers: response.headers, + statusCode: statusCode, + }; + var requestDetails = { + url: currentUrl, + method: method, + headers: requestHeaders, + }; + beforeRedirect(this._options, responseDetails, requestDetails); + this._sanitizeOptions(this._options); + } + + // Perform the redirected request + this._performRequest(); +}; + +// Wraps the key/value object of protocols with redirect functionality +function wrap(protocols) { + // Default settings + var exports = { + maxRedirects: 21, + maxBodyLength: 10 * 1024 * 1024, + }; + + // Wrap each protocol + var nativeProtocols = {}; + Object.keys(protocols).forEach(function (scheme) { + var protocol = scheme + ":"; + var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; + var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); + + // Executes a request, following redirects + function request(input, options, callback) { + // Parse parameters, ensuring that input is an object + if (isURL(input)) { + input = spreadUrlObject(input); + } + else if (isString(input)) { + input = spreadUrlObject(parseUrl(input)); + } + else { + callback = options; + options = validateUrl(input); + input = { protocol: protocol }; + } + if (isFunction(options)) { + callback = options; + options = null; + } + + // Set defaults + options = Object.assign({ + maxRedirects: exports.maxRedirects, + maxBodyLength: exports.maxBodyLength, + }, input, options); + options.nativeProtocols = nativeProtocols; + if (!isString(options.host) && !isString(options.hostname)) { + options.hostname = "::1"; + } + + assert.equal(options.protocol, protocol, "protocol mismatch"); + debug("options", options); + return new RedirectableRequest(options, callback); + } + + // Executes a GET request, following redirects + function get(input, options, callback) { + var wrappedRequest = wrappedProtocol.request(input, options, callback); + wrappedRequest.end(); + return wrappedRequest; + } + + // Expose the properties on the wrapped protocol + Object.defineProperties(wrappedProtocol, { + request: { value: request, configurable: true, enumerable: true, writable: true }, + get: { value: get, configurable: true, enumerable: true, writable: true }, + }); + }); + return exports; +} + +function noop() { /* empty */ } + +function parseUrl(input) { + var parsed; + // istanbul ignore else + if (useNativeURL) { + parsed = new URL(input); + } + else { + // Ensure the URL is valid and absolute + parsed = validateUrl(url.parse(input)); + if (!isString(parsed.protocol)) { + throw new InvalidUrlError({ input }); + } + } + return parsed; +} + +function resolveUrl(relative, base) { + // istanbul ignore next + return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative)); +} + +function validateUrl(input) { + if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) { + throw new InvalidUrlError({ input: input.href || input }); + } + if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) { + throw new InvalidUrlError({ input: input.href || input }); + } + return input; +} + +function spreadUrlObject(urlObject, target) { + var spread = target || {}; + for (var key of preservedUrlFields) { + spread[key] = urlObject[key]; + } + + // Fix IPv6 hostname + if (spread.hostname.startsWith("[")) { + spread.hostname = spread.hostname.slice(1, -1); + } + // Ensure port is a number + if (spread.port !== "") { + spread.port = Number(spread.port); + } + // Concatenate path + spread.path = spread.search ? spread.pathname + spread.search : spread.pathname; + + return spread; +} + +function removeMatchingHeaders(regex, headers) { + var lastValue; + for (var header in headers) { + if (regex.test(header)) { + lastValue = headers[header]; + delete headers[header]; + } + } + return (lastValue === null || typeof lastValue === "undefined") ? + undefined : String(lastValue).trim(); +} + +function createErrorType(code, message, baseClass) { + // Create constructor + function CustomError(properties) { + // istanbul ignore else + if (isFunction(Error.captureStackTrace)) { + Error.captureStackTrace(this, this.constructor); + } + Object.assign(this, properties || {}); + this.code = code; + this.message = this.cause ? message + ": " + this.cause.message : message; + } + + // Attach constructor and set default properties + CustomError.prototype = new (baseClass || Error)(); + Object.defineProperties(CustomError.prototype, { + constructor: { + value: CustomError, + enumerable: false, + }, + name: { + value: "Error [" + code + "]", + enumerable: false, + }, + }); + return CustomError; +} + +function destroyRequest(request, error) { + for (var event of events) { + request.removeListener(event, eventHandlers[event]); + } + request.on("error", noop); + request.destroy(error); +} + +function isSubdomain(subdomain, domain) { + assert(isString(subdomain) && isString(domain)); + var dot = subdomain.length - domain.length - 1; + return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); +} + +function isString(value) { + return typeof value === "string" || value instanceof String; +} + +function isFunction(value) { + return typeof value === "function"; +} + +function isBuffer(value) { + return typeof value === "object" && ("length" in value); +} + +function isURL(value) { + return URL && value instanceof URL; +} + +// Exports +module.exports = wrap({ http: http, https: https }); +module.exports.wrap = wrap; diff --git a/node_modules/follow-redirects/package.json b/node_modules/follow-redirects/package.json new file mode 100644 index 00000000..a2689fa1 --- /dev/null +++ b/node_modules/follow-redirects/package.json @@ -0,0 +1,58 @@ +{ + "name": "follow-redirects", + "version": "1.15.11", + "description": "HTTP and HTTPS modules that follow redirects.", + "license": "MIT", + "main": "index.js", + "files": [ + "*.js" + ], + "engines": { + "node": ">=4.0" + }, + "scripts": { + "lint": "eslint *.js test", + "test": "nyc mocha" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/follow-redirects/follow-redirects.git" + }, + "homepage": "https://github.com/follow-redirects/follow-redirects", + "bugs": { + "url": "https://github.com/follow-redirects/follow-redirects/issues" + }, + "keywords": [ + "http", + "https", + "url", + "redirect", + "client", + "location", + "utility" + ], + "author": "Ruben Verborgh (https://ruben.verborgh.org/)", + "contributors": [ + "Olivier Lalonde (http://www.syskall.com)", + "James Talmage " + ], + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "peerDependenciesMeta": { + "debug": { + "optional": true + } + }, + "devDependencies": { + "concat-stream": "^2.0.0", + "eslint": "^5.16.0", + "express": "^4.16.4", + "lolex": "^3.1.0", + "mocha": "^6.0.2", + "nyc": "^14.1.1" + } +} diff --git a/node_modules/for-each/.editorconfig b/node_modules/for-each/.editorconfig new file mode 100644 index 00000000..ac29adef --- /dev/null +++ b/node_modules/for-each/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 120 + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off diff --git a/node_modules/for-each/.eslintrc b/node_modules/for-each/.eslintrc new file mode 100644 index 00000000..9b811fa4 --- /dev/null +++ b/node_modules/for-each/.eslintrc @@ -0,0 +1,30 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "eqeqeq": [2, "allow-null"], + "func-name-matching": 0, + "func-style": 0, + "indent": [2, 4], + "max-nested-callbacks": [2, 3], + "max-params": [2, 3], + "max-statements": [2, 14], + "no-extra-parens": 0, + "no-invalid-this": 1, + "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "max-statements-per-line": 0, + "no-magic-numbers": 0, + }, + }, + ], +} diff --git a/node_modules/for-each/.github/FUNDING.yml b/node_modules/for-each/.github/FUNDING.yml new file mode 100644 index 00000000..5ce5b3a6 --- /dev/null +++ b/node_modules/for-each/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/for-each +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/for-each/.github/SECURITY.md b/node_modules/for-each/.github/SECURITY.md new file mode 100644 index 00000000..82e4285a --- /dev/null +++ b/node_modules/for-each/.github/SECURITY.md @@ -0,0 +1,3 @@ +# Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. diff --git a/node_modules/for-each/.nycrc b/node_modules/for-each/.nycrc new file mode 100644 index 00000000..b7b8240a --- /dev/null +++ b/node_modules/for-each/.nycrc @@ -0,0 +1,8 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/for-each/CHANGELOG.md b/node_modules/for-each/CHANGELOG.md new file mode 100644 index 00000000..06b5bc07 --- /dev/null +++ b/node_modules/for-each/CHANGELOG.md @@ -0,0 +1,107 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v0.3.5](https://github.com/ljharb/for-each/compare/v0.3.4...v0.3.5) - 2025-02-10 + +### Commits + +- [New] add types [`6483c1e`](https://github.com/ljharb/for-each/commit/6483c1e9b6177e5ca9ba506188300c5a25de26c2) + +## [v0.3.4](https://github.com/ljharb/for-each/compare/v0.3.3...v0.3.4) - 2025-01-24 + +### Commits + +- [meta] use `auto-changelog` [`c16ee6a`](https://github.com/ljharb/for-each/commit/c16ee6a125eb3c6d30f626b4b02ec849a63fca28) +- [Tests] add github actions [`379b59c`](https://github.com/ljharb/for-each/commit/379b59c8f282c2281ba668e3e028ad6410afb99b) +- [meta] delete `.travis.yml` [`09e5c77`](https://github.com/ljharb/for-each/commit/09e5c779651215c41bd4727e266a5e7ebb3b0a4d) +- [Dev Deps] update eslint things [`9163b86`](https://github.com/ljharb/for-each/commit/9163b86435be325965f096ac17793a0e783b1c1e) +- [meta] consolidate eslintrc files [`f2ab52b`](https://github.com/ljharb/for-each/commit/f2ab52b6944fe8c1a189957889276950393eddb3) +- [meta] add `funding` field and `FUNDING.yml` [`05d21b3`](https://github.com/ljharb/for-each/commit/05d21b382ccd4627b283d1a31c49935c7d79fd57) +- [Tests] up to `node` `v10`; use `nvm install-latest-npm` [`7c06cbd`](https://github.com/ljharb/for-each/commit/7c06cbdabea81ba029cd466545dea5cb9f24f528) +- [Tests] add `nyc` [`0f4643e`](https://github.com/ljharb/for-each/commit/0f4643e6a572bdc6967a17be8e7b959600edbbd2) +- [meta] use `npmignore` [`39a975c`](https://github.com/ljharb/for-each/commit/39a975c8c6050586b93b5e0a98b20be44d1b38d4) +- [meta] remove unnecessary `licenses` key [`3d064f1`](https://github.com/ljharb/for-each/commit/3d064f12167c12d8e1d1ee1447ee58d8211c63e1) +- [Tests] use `npm audit` instead of long-dead `nsp` [`d4c722a`](https://github.com/ljharb/for-each/commit/d4c722a0f61f61d93965328f436f87421bce9973) +- [Dev Deps] update `tape` [`552c1ae`](https://github.com/ljharb/for-each/commit/552c1ae6a01728ff312d47605dbdb961ef0ccbcc) +- Update README.md [`d19acc2`](https://github.com/ljharb/for-each/commit/d19acc23624eed9d8f59b9fa64e6e3cba638aa52) +- [meta] add missing `engines.node` [`8889b49`](https://github.com/ljharb/for-each/commit/8889b49bd737d7a72c2a515eb2ee39a01c813bac) +- [meta] create SECURITY.md [`9069d42`](https://github.com/ljharb/for-each/commit/9069d42d245b02ae7c5f0c193fceb55427436e4e) +- [Deps] update `is-callable` [`bfa51d1`](https://github.com/ljharb/for-each/commit/bfa51d18018477843147bcdcc6cc63eb045151f5) + +## [v0.3.3](https://github.com/ljharb/for-each/compare/v0.3.2...v0.3.3) - 2018-06-01 + +### Commits + +- Add `npm run lint`, `npm run jscs`, and `npm run eslint` [`4a17d99`](https://github.com/ljharb/for-each/commit/4a17d99d7397dd2356530d238e0e6c37ef34a1d5) +- Style cleanup: [`1df6824`](https://github.com/ljharb/for-each/commit/1df6824d96bfc293c0c9e6b78143b602c8d94986) +- Update `eslint`, `tape`; use my personal shared `eslint` config. [`b8e7d85`](https://github.com/ljharb/for-each/commit/b8e7d850ec9010a7171d34297f7af74b90f28aac) +- [Tests] remove jscs [`37e3557`](https://github.com/ljharb/for-each/commit/37e355784b4261dcf5004158a72c4b8a6c6c524f) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `tape`; fix scripts [`566045d`](https://github.com/ljharb/for-each/commit/566045d84f2ee5dff7cc14805c4fdb1d13d2624d) +- [Tests] up to `node` `v8`; newer npm breaks on older node [`07177dc`](https://github.com/ljharb/for-each/commit/07177dc9c8419b2a887c727ec576189a7c8e7837) +- Run `npm run lint` as part of tests. [`a34ea05`](https://github.com/ljharb/for-each/commit/a34ea05f729e0987007670d5693e093c56865ef6) +- Update `travis.yml` to test on the latest `node` and `io.js` [`354c843`](https://github.com/ljharb/for-each/commit/354c8434a166c7095c613e818c8d542fd1e2d630) +- Update `eslint` [`3601c93`](https://github.com/ljharb/for-each/commit/3601c9348e2cfb29ed3cfee352c2c95d4a8de87f) +- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`1aaff65`](https://github.com/ljharb/for-each/commit/1aaff65a55d8a054561251c6a2501c4dc42e1f99) +- Only use `Function#call` to call the callback if the receiver is supplied, for performance. [`54b4775`](https://github.com/ljharb/for-each/commit/54b477571b4d7c11edccafd94f2e16380892ee5d) +- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `nsp` [`6ba1cb8`](https://github.com/ljharb/for-each/commit/6ba1cb8a708e84ba4bb4067d31549829ec579d92) +- [Dev Deps] update `tape`, `eslint`, `jscs` [`8f5e1d5`](https://github.com/ljharb/for-each/commit/8f5e1d5fcabaf3abaa6ce2d3e6dd095f0dedfc4e) +- Add "license" to `package.json`, matching the LICENSE file. [`defc2c3`](https://github.com/ljharb/for-each/commit/defc2c35ffa7c9d4fbcf846f28b436f0083a381c) +- Update `eslint` [`05d1850`](https://github.com/ljharb/for-each/commit/05d18503dd0ec709f93df5c905bd2d0ce51323c3) +- [Tests] on `io.js` `v3.3`, `node` `v4.0` [`e8395a4`](https://github.com/ljharb/for-each/commit/e8395a43feef399299839c8d466ddd9dca0c3268) +- Add `npm run security` [`0a45177`](https://github.com/ljharb/for-each/commit/0a45177290b1de71094ddd322ef4a504458e901d) +- Only apps should have lockfiles. [`6268d7b`](https://github.com/ljharb/for-each/commit/6268d7b39edd06ef5a283c7afdb6c823077db777) +- [Dev Deps] update `nsp`, `tape`, `eslint` [`b95939f`](https://github.com/ljharb/for-each/commit/b95939f66a3dad590b3bc42c53535e77c1bfc114) +- Use `is-callable` instead of `is-function`, to cover ES6 environments with `Symbol.toStringTag` [`4095d33`](https://github.com/ljharb/for-each/commit/4095d334581c1caee92f595c299ffc479806dc3f) +- Test on `io.js` `v2.2` [`7b44f98`](https://github.com/ljharb/for-each/commit/7b44f98c217291a92385ddd3903d4974e049d762) +- Some old browsers choke on variables named "toString". [`4f1b626`](https://github.com/ljharb/for-each/commit/4f1b626eb91fcdc0e9018472a702aea713799190) +- Update `is-function`, `tape` [`3ceaf32`](https://github.com/ljharb/for-each/commit/3ceaf3240ef7d1b261cf510eb932cf540291187b) +- Test up to `io.js` `v3.0` [`3c1377a`](https://github.com/ljharb/for-each/commit/3c1377a31adf003323f4846a97e8f7c8fd51b5d2) +- [Deps] update `is-callable` [`f5c62d0`](https://github.com/ljharb/for-each/commit/f5c62d034b582a15bcb1f1cadace4e9c84f1780a) +- Test on `io.js` `v2.4` [`db86c85`](https://github.com/ljharb/for-each/commit/db86c85641d053a1dc4e570e8c8afbea915f78c0) +- Test on `io.js` `v2.3` [`2f04ca8`](https://github.com/ljharb/for-each/commit/2f04ca885adb4a8ccca658739f771a7f78522d03) + +## [v0.3.2](https://github.com/ljharb/for-each/compare/v0.3.1...v0.3.2) - 2014-01-07 + +### Merged + +- works down to IE6 [`#5`](https://github.com/ljharb/for-each/pull/5) + +## [v0.3.1](https://github.com/ljharb/for-each/compare/v0.3.0...v0.3.1) - 2014-01-06 + +## [v0.3.0](https://github.com/ljharb/for-each/compare/v0.2.0...v0.3.0) - 2014-01-06 + +### Merged + +- remove use of Object.keys [`#4`](https://github.com/ljharb/for-each/pull/4) +- Update tape. [`#3`](https://github.com/ljharb/for-each/pull/3) +- regex is not a function [`#2`](https://github.com/ljharb/for-each/pull/2) +- Add testling [`#1`](https://github.com/ljharb/for-each/pull/1) + +### Commits + +- Add testling. [`a24b521`](https://github.com/ljharb/for-each/commit/a24b52111937d509a3b5f58106c8835283de7146) +- Add array example to README [`9bd70c2`](https://github.com/ljharb/for-each/commit/9bd70c2ceafddfc734a80e0fea2bbac00afa963a) +- Regexes are considered functions in older browsers. [`403f649`](https://github.com/ljharb/for-each/commit/403f6490f903984adea1771af29c41fd2b1e4b64) +- Adding android browser to testling. [`a4c5825`](https://github.com/ljharb/for-each/commit/a4c5825bf8abd13589b9a9662c9d3deaf89cbf66) + +## [v0.2.0](https://github.com/ljharb/for-each/compare/v0.1.0...v0.2.0) - 2013-05-10 + +### Commits + +- Adding tests. [`7e74213`](https://github.com/ljharb/for-each/commit/7e74213d1b5d01b19249c3e3037302bd7fc74f1c) +- Adding proper array indexing, as well as string support. [`d36f794`](https://github.com/ljharb/for-each/commit/d36f794d6c0c5696bf1e4f8e79ae667858dfc11b) +- Use tape instead of tap. [`016a3cf`](https://github.com/ljharb/for-each/commit/016a3cf706c78037384d4c378b2ebe6e702cbb02) +- Requiring that the iterator is a function. [`cfedced`](https://github.com/ljharb/for-each/commit/cfedceda15ea2f7eb4acf079fb90ce17ec7da664) +- Adding myself as a contributor :-) [`ff28fca`](https://github.com/ljharb/for-each/commit/ff28fca8ec30f6fdbb7af87c74ed35688e60d07a) +- Adding node 0.10 to travis [`75f2460`](https://github.com/ljharb/for-each/commit/75f2460343d3ea58f91dad45f2eda478e3a4e412) + +## v0.1.0 - 2012-09-28 + +### Commits + +- first [`2d3a6ed`](https://github.com/ljharb/for-each/commit/2d3a6ed63036455847937cf00bec56b59ab36a9d) +- docs & travis [`ea4caad`](https://github.com/ljharb/for-each/commit/ea4caad8a8768992dcce29998e226484beed841c) diff --git a/node_modules/for-each/LICENSE b/node_modules/for-each/LICENSE new file mode 100644 index 00000000..53f19aa7 --- /dev/null +++ b/node_modules/for-each/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2012 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/for-each/README.md b/node_modules/for-each/README.md new file mode 100644 index 00000000..b76561ef --- /dev/null +++ b/node_modules/for-each/README.md @@ -0,0 +1,39 @@ +# for-each [![build status][1]][2] + +[![browser support][3]][4] + +A better forEach. + +## Example + +Like `Array.prototype.forEach` but works on objects. + +```js +var forEach = require("for-each") + +forEach({ key: "value" }, function (value, key, object) { + /* code */ +}) +``` + +As a bonus, it's also a perfectly function shim/polyfill for arrays too! + +```js +var forEach = require("for-each") + +forEach([1, 2, 3], function (value, index, array) { + /* code */ +}) +``` + +## Installation + +`npm install for-each` + +## MIT Licenced + + [1]: https://secure.travis-ci.org/Raynos/for-each.png + [2]: http://travis-ci.org/Raynos/for-each + [3]: https://ci.testling.com/Raynos/for-each.png + [4]: https://ci.testling.com/Raynos/for-each + diff --git a/node_modules/for-each/index.d.ts b/node_modules/for-each/index.d.ts new file mode 100644 index 00000000..90f98de4 --- /dev/null +++ b/node_modules/for-each/index.d.ts @@ -0,0 +1,35 @@ +declare function forEach( + arr: O, + callback: (this: This | void, value: O[number], index: number, array: O) => void, + thisArg?: This, +): void; + +declare function forEach, This = undefined>( + arr: O, + callback: (this: This | void, value: O[number], index: number, array: O) => void, + thisArg?: This, +): void; + +declare function forEach( + obj: O, + callback: (this: This | void, value: O[keyof O], key: keyof O, obj: O) => void, + thisArg?: This, +): void; + +declare function forEach( + str: O, + callback: (this: This | void, value: O[number], index: number, str: O) => void, + thisArg: This, +): void; + +export = forEach; + +declare function forEachInternal void, This = undefined>( + value: O, + callback: C, + thisArg?: This, +): void; + +declare namespace forEach { + export type _internal = typeof forEachInternal; +} diff --git a/node_modules/for-each/index.js b/node_modules/for-each/index.js new file mode 100644 index 00000000..0af3c44e --- /dev/null +++ b/node_modules/for-each/index.js @@ -0,0 +1,69 @@ +'use strict'; + +var isCallable = require('is-callable'); + +var toStr = Object.prototype.toString; +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** @type {(arr: A, iterator: (this: This | void, value: A[number], index: number, arr: A) => void, receiver: This | undefined) => void} */ +var forEachArray = function forEachArray(array, iterator, receiver) { + for (var i = 0, len = array.length; i < len; i++) { + if (hasOwnProperty.call(array, i)) { + if (receiver == null) { + iterator(array[i], i, array); + } else { + iterator.call(receiver, array[i], i, array); + } + } + } +}; + +/** @type {(string: S, iterator: (this: This | void, value: S[number], index: number, string: S) => void, receiver: This | undefined) => void} */ +var forEachString = function forEachString(string, iterator, receiver) { + for (var i = 0, len = string.length; i < len; i++) { + // no such thing as a sparse string. + if (receiver == null) { + iterator(string.charAt(i), i, string); + } else { + iterator.call(receiver, string.charAt(i), i, string); + } + } +}; + +/** @type {(obj: O, iterator: (this: This | void, value: O[keyof O], index: keyof O, obj: O) => void, receiver: This | undefined) => void} */ +var forEachObject = function forEachObject(object, iterator, receiver) { + for (var k in object) { + if (hasOwnProperty.call(object, k)) { + if (receiver == null) { + iterator(object[k], k, object); + } else { + iterator.call(receiver, object[k], k, object); + } + } + } +}; + +/** @type {(x: unknown) => x is readonly unknown[]} */ +function isArray(x) { + return toStr.call(x) === '[object Array]'; +} + +/** @type {import('.')._internal} */ +module.exports = function forEach(list, iterator, thisArg) { + if (!isCallable(iterator)) { + throw new TypeError('iterator must be a function'); + } + + var receiver; + if (arguments.length >= 3) { + receiver = thisArg; + } + + if (isArray(list)) { + forEachArray(list, iterator, receiver); + } else if (typeof list === 'string') { + forEachString(list, iterator, receiver); + } else { + forEachObject(list, iterator, receiver); + } +}; diff --git a/node_modules/for-each/package.json b/node_modules/for-each/package.json new file mode 100644 index 00000000..bf0f5cde --- /dev/null +++ b/node_modules/for-each/package.json @@ -0,0 +1,76 @@ +{ + "name": "for-each", + "version": "0.3.5", + "description": "A better forEach", + "keywords": [], + "author": "Raynos ", + "repository": { + "type": "git", + "url": "https://github.com/Raynos/for-each.git" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "main": "index", + "homepage": "https://github.com/Raynos/for-each", + "contributors": [ + { + "name": "Jake Verbaten" + }, + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "bugs": { + "url": "https://github.com/Raynos/for-each/issues", + "email": "raynos2@gmail.com" + }, + "license": "MIT", + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/*.js'", + "posttest": "npx npm@\">= 10.2\" audit --production", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "dependencies": { + "is-callable": "^1.2.7" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.3", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/is-callable": "^1.1.2", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "eslint": "=8.8.0", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/test.js" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/for-each/test/test.js b/node_modules/for-each/test/test.js new file mode 100644 index 00000000..455d247e --- /dev/null +++ b/node_modules/for-each/test/test.js @@ -0,0 +1,224 @@ +'use strict'; + +var test = require('tape'); +var forEach = require('../'); + +test('forEach calls each iterator', function (t) { + var count = 0; + t.plan(4); + + forEach({ a: 1, b: 2 }, function (value, key) { + if (count === 0) { + t.equal(value, 1); + t.equal(key, 'a'); + } else { + t.equal(value, 2); + t.equal(key, 'b'); + } + count += 1; + }); +}); + +test('forEach calls iterator with correct this value', function (t) { + var thisValue = {}; + + t.plan(1); + + forEach([0], function () { + t.equal(this, thisValue); + }, thisValue); +}); + +test('second argument: iterator', function (t) { + /** @type {unknown[]} */ + var arr = []; + + // @ts-expect-error + t['throws'](function () { forEach(arr); }, TypeError, 'undefined is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, null); }, TypeError, 'null is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, ''); }, TypeError, 'string is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, /a/); }, TypeError, 'regex is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, true); }, TypeError, 'true is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, false); }, TypeError, 'false is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, NaN); }, TypeError, 'NaN is not a function'); + // @ts-expect-error + t['throws'](function () { forEach(arr, 42); }, TypeError, '42 is not a function'); + + t.doesNotThrow(function () { forEach(arr, function () {}); }, 'function is a function'); + // @ts-expect-error TODO fixme + t.doesNotThrow(function () { forEach(arr, setTimeout); }, 'setTimeout is a function'); + + /* eslint-env browser */ + if (typeof window !== 'undefined') { + t.doesNotThrow(function () { forEach(arr, window.alert); }, 'alert is a function'); + } + + t.end(); +}); + +test('array', function (t) { + var arr = /** @type {const} */ ([1, 2, 3]); + + t.test('iterates over every item', function (st) { + var index = 0; + forEach(arr, function () { index += 1; }); + st.equal(index, arr.length, 'iterates ' + arr.length + ' times'); + st.end(); + }); + + t.test('first iterator argument', function (st) { + var index = 0; + st.plan(arr.length); + + forEach(arr, function (item) { + st.equal(arr[index], item, 'item ' + index + ' is passed as first argument'); + index += 1; + }); + + st.end(); + }); + + t.test('second iterator argument', function (st) { + var counter = 0; + st.plan(arr.length); + + forEach(arr, function (_item, index) { + st.equal(counter, index, 'index ' + index + ' is passed as second argument'); + counter += 1; + }); + + st.end(); + }); + + t.test('third iterator argument', function (st) { + st.plan(arr.length); + + forEach(arr, function (_item, _index, array) { + st.deepEqual(arr, array, 'array is passed as third argument'); + }); + + st.end(); + }); + + t.test('context argument', function (st) { + var context = {}; + + forEach([], function () { + st.equal(this, context, '"this" is the passed context'); + }, context); + + st.end(); + }); + + t.end(); +}); + +test('object', function (t) { + var obj = { + a: 1, + b: 2, + c: 3 + }; + var keys = /** @type {const} */ (['a', 'b', 'c']); + + /** @constructor */ + function F() { + this.a = 1; + this.b = 2; + } + F.prototype.c = 3; + var fKeys = /** @type {const} */ (['a', 'b']); + + t.test('iterates over every object literal key', function (st) { + var counter = 0; + + forEach(obj, function () { counter += 1; }); + + st.equal(counter, keys.length, 'iterated ' + counter + ' times'); + + st.end(); + }); + + t.test('iterates only over own keys', function (st) { + var counter = 0; + + forEach(new F(), function () { counter += 1; }); + + st.equal(counter, fKeys.length, 'iterated ' + fKeys.length + ' times'); + + st.end(); + }); + + t.test('first iterator argument', function (st) { + var index = 0; + st.plan(keys.length); + + forEach(obj, function (item) { + st.equal(obj[keys[index]], item, 'item at key ' + keys[index] + ' is passed as first argument'); + index += 1; + }); + + st.end(); + }); + + t.test('second iterator argument', function (st) { + var counter = 0; + st.plan(keys.length); + + forEach(obj, function (_item, key) { + st.equal(keys[counter], key, 'key ' + key + ' is passed as second argument'); + counter += 1; + }); + + st.end(); + }); + + t.test('third iterator argument', function (st) { + st.plan(keys.length); + + forEach(obj, function (_item, _key, object) { + st.deepEqual(obj, object, 'object is passed as third argument'); + }); + + st.end(); + }); + + t.test('context argument', function (st) { + var context = {}; + + forEach({}, function () { + st.equal(this, context, '"this" is the passed context'); + }, context); + + st.end(); + }); + + t.end(); +}); + +test('string', function (t) { + var str = /** @type {const} */ ('str'); + + t.test('second iterator argument', function (st) { + var counter = 0; + st.plan((str.length * 2) + 1); + + forEach(str, function (item, index) { + st.equal(counter, index, 'index ' + index + ' is passed as second argument'); + st.equal(str.charAt(index), item); + counter += 1; + }); + + st.equal(counter, str.length, 'iterates ' + str.length + ' times'); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/for-each/tsconfig.json b/node_modules/for-each/tsconfig.json new file mode 100644 index 00000000..a6aec2c8 --- /dev/null +++ b/node_modules/for-each/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/form-data/CHANGELOG.md b/node_modules/form-data/CHANGELOG.md new file mode 100644 index 00000000..cd3105e6 --- /dev/null +++ b/node_modules/form-data/CHANGELOG.md @@ -0,0 +1,659 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v4.0.5](https://github.com/form-data/form-data/compare/v4.0.4...v4.0.5) - 2025-11-17 + +### Commits + +- [Tests] Switch to newer v8 prediction library; enable node 24 testing [`16e0076`](https://github.com/form-data/form-data/commit/16e00765342106876f98a1c9703314006c9e937a) +- [Dev Deps] update `@ljharb/eslint-config`, `eslint` [`5822467`](https://github.com/form-data/form-data/commit/5822467f0ec21f6ad613c1c90856375e498793c7) +- [Fix] set Symbol.toStringTag in the proper place [`76d0dee`](https://github.com/form-data/form-data/commit/76d0dee43933b5e167f7f09e5d9cbbd1cf911aa7) + +## [v4.0.4](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4) - 2025-07-16 + +### Commits + +- [meta] add `auto-changelog` [`811f682`](https://github.com/form-data/form-data/commit/811f68282fab0315209d0e2d1c44b6c32ea0d479) +- [Tests] handle predict-v8-randomness failures in node < 17 and node > 23 [`1d11a76`](https://github.com/form-data/form-data/commit/1d11a76434d101f22fdb26b8aef8615f28b98402) +- [Fix] Switch to using `crypto` random for boundary values [`3d17230`](https://github.com/form-data/form-data/commit/3d1723080e6577a66f17f163ecd345a21d8d0fd0) +- [Tests] fix linting errors [`5e34080`](https://github.com/form-data/form-data/commit/5e340800b5f8914213e4e0378c084aae71cfd73a) +- [meta] actually ensure the readme backup isn’t published [`316c82b`](https://github.com/form-data/form-data/commit/316c82ba93fd4985af757b771b9a1f26d3b709ef) +- [Dev Deps] update `@ljharb/eslint-config` [`58c25d7`](https://github.com/form-data/form-data/commit/58c25d76406a5b0dfdf54045cf252563f2bbda8d) +- [meta] fix readme capitalization [`2300ca1`](https://github.com/form-data/form-data/commit/2300ca19595b0ee96431e868fe2a40db79e41c61) + +## [v4.0.3](https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3) - 2025-06-05 + +### Fixed + +- [Fix] `append`: avoid a crash on nullish values [`#577`](https://github.com/form-data/form-data/issues/577) + +### Commits + +- [eslint] use a shared config [`426ba9a`](https://github.com/form-data/form-data/commit/426ba9ac440f95d1998dac9a5cd8d738043b048f) +- [eslint] fix some spacing issues [`2094191`](https://github.com/form-data/form-data/commit/20941917f0e9487e68c564ebc3157e23609e2939) +- [Refactor] use `hasown` [`81ab41b`](https://github.com/form-data/form-data/commit/81ab41b46fdf34f5d89d7ff30b513b0925febfaa) +- [Fix] validate boundary type in `setBoundary()` method [`8d8e469`](https://github.com/form-data/form-data/commit/8d8e4693093519f7f18e3c597d1e8df8c493de9e) +- [Tests] add tests to check the behavior of `getBoundary` with non-strings [`837b8a1`](https://github.com/form-data/form-data/commit/837b8a1f7562bfb8bda74f3fc538adb7a5858995) +- [Dev Deps] remove unused deps [`870e4e6`](https://github.com/form-data/form-data/commit/870e4e665935e701bf983a051244ab928e62d58e) +- [meta] remove local commit hooks [`e6e83cc`](https://github.com/form-data/form-data/commit/e6e83ccb545a5619ed6cd04f31d5c2f655eb633e) +- [Dev Deps] update `eslint` [`4066fd6`](https://github.com/form-data/form-data/commit/4066fd6f65992b62fa324a6474a9292a4f88c916) +- [meta] fix scripts to use prepublishOnly [`c4bbb13`](https://github.com/form-data/form-data/commit/c4bbb13c0ef669916657bc129341301b1d331d75) + +## [v4.0.2](https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2) - 2025-02-14 + +### Merged + +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) + +### Fixed + +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) +- [Fix] set `Symbol.toStringTag` when available [`#396`](https://github.com/form-data/form-data/issues/396) + +### Commits + +- Merge tags v2.5.3 and v3.0.3 [`92613b9`](https://github.com/form-data/form-data/commit/92613b9208556eb4ebc482fdf599fae111626fb6) +- [Tests] migrate from travis to GHA [`806eda7`](https://github.com/form-data/form-data/commit/806eda77740e6e3c67c7815afb216f2e1f187ba5) +- [Tests] migrate from travis to GHA [`8fdb3bc`](https://github.com/form-data/form-data/commit/8fdb3bc6b5d001f8909a9fca391d1d1d97ef1d79) +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`7fecefe`](https://github.com/form-data/form-data/commit/7fecefe4ba8f775634aff86a698776ad95ecffb5) +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`6e682d4`](https://github.com/form-data/form-data/commit/6e682d4bd41de7e80de41e3c4ee10f23fcc3dd00) +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`df3c1e6`](https://github.com/form-data/form-data/commit/df3c1e6f0937f47a782dc4573756a54987f31dde) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `cross-spawn`, `eslint`, `formidable`, `in-publish`, `pkgfiles`, `pre-commit`, `puppeteer`, `request`, `tape`, `typescript` [`8261fcb`](https://github.com/form-data/form-data/commit/8261fcb8bf5944d30ae3bd04b91b71d6a9932ef4) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `cross-spawn`, `eslint`, `formidable`, `in-publish`, `pkgfiles`, `pre-commit`, `puppeteer`, `request`, `tape`, `typescript` [`fb66cb7`](https://github.com/form-data/form-data/commit/fb66cb740e29fb170eee947d4be6fdf82d6659af) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `eslint`, `formidable`, `in-publish`, `phantomjs-prebuilt`, `pkgfiles`, `pre-commit`, `request`, `tape`, `typescript` [`819f6b7`](https://github.com/form-data/form-data/commit/819f6b7a543306a891fca37c3a06d0ff4a734422) +- [eslint] clean up ignores [`3217b3d`](https://github.com/form-data/form-data/commit/3217b3ded8e382e51171d5c74c6038a21cc54440) +- [eslint] clean up ignores [`3a9d480`](https://github.com/form-data/form-data/commit/3a9d480232dbcbc07260ad84c3da4975d9a3ae9e) +- [Fix] `Buffer.from` and `Buffer.alloc` require node 4+ [`c499f76`](https://github.com/form-data/form-data/commit/c499f76f1faac1ddbf210c45217038e4c1e02337) +- Only apps should have lockfiles [`b82f590`](https://github.com/form-data/form-data/commit/b82f59093cdbadb4b7ec0922d33ae7ab048b82ff) +- Only apps should have lockfiles [`b170ee2`](https://github.com/form-data/form-data/commit/b170ee2b22b4c695c363b811c0c553d2fb1bbd79) +- [Deps] update `combined-stream`, `mime-types` [`6b1ca1d`](https://github.com/form-data/form-data/commit/6b1ca1dc7362a1b1c3a99a885516cca4b7eb817f) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`e5df7f2`](https://github.com/form-data/form-data/commit/e5df7f24383342264bd73dee3274818a40d04065) +- [Deps] update `mime-types` [`5a5bafe`](https://github.com/form-data/form-data/commit/5a5bafee894fead10da49e1fa2b084e17f2e1034) +- Bumped version 2.5.3 [`9457283`](https://github.com/form-data/form-data/commit/9457283e1dce6122adc908fdd7442cfc54cabe7a) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`9dbe192`](https://github.com/form-data/form-data/commit/9dbe192be3db215eac4d9c0b980470a5c2c030c6) +- Merge tags v2.5.2 and v3.0.2 [`d53265d`](https://github.com/form-data/form-data/commit/d53265d86c5153f535ec68eb107548b1b2883576) +- Bumped version 2.5.2 [`7020dd4`](https://github.com/form-data/form-data/commit/7020dd4c1260370abc40e86e3dfe49c5d576fbda) +- [Dev Deps] downgrade `cross-spawn` [`3fc1a9b`](https://github.com/form-data/form-data/commit/3fc1a9b62ddf1fe77a2bd6bd3476e4c0a9e01a88) +- fix: move util.isArray to Array.isArray (#564) [`edb555a`](https://github.com/form-data/form-data/commit/edb555a811f6f7e4668db4831551cf41c1de1cac) +- fix: move util.isArray to Array.isArray (#564) [`10418d1`](https://github.com/form-data/form-data/commit/10418d1fe4b0d65fe020eafe3911feb5ad5e2bd6) + +## [v4.0.1](https://github.com/form-data/form-data/compare/v4.0.0...v4.0.1) - 2024-10-10 + +### Commits + +- [Tests] migrate from travis to GHA [`757b4e3`](https://github.com/form-data/form-data/commit/757b4e32e95726aec9bdcc771fb5a3b564d88034) +- [eslint] clean up ignores [`e8f0d80`](https://github.com/form-data/form-data/commit/e8f0d80cd7cd424d1488532621ec40a33218b30b) +- fix (npmignore): ignore temporary build files [`335ad19`](https://github.com/form-data/form-data/commit/335ad19c6e17dc2d7298ffe0e9b37ba63600e94b) +- fix: move util.isArray to Array.isArray [`440d3be`](https://github.com/form-data/form-data/commit/440d3bed752ac2f9213b4c2229dbccefe140e5fa) + +## [v4.0.0](https://github.com/form-data/form-data/compare/v3.0.4...v4.0.0) - 2021-02-15 + +### Merged + +- Handle custom stream [`#382`](https://github.com/form-data/form-data/pull/382) + +### Commits + +- Fix typo [`e705c0a`](https://github.com/form-data/form-data/commit/e705c0a1fdaf90d21501f56460b93e43a18bd435) +- Update README for custom stream behavior [`6dd8624`](https://github.com/form-data/form-data/commit/6dd8624b2999e32768d62752c9aae5845a803b0d) + +## [v3.0.4](https://github.com/form-data/form-data/compare/v3.0.3...v3.0.4) - 2025-07-16 + +### Fixed + +- [Fix] `append`: avoid a crash on nullish values [`#577`](https://github.com/form-data/form-data/issues/577) + +### Commits + +- [eslint] update linting config [`f5e7eb0`](https://github.com/form-data/form-data/commit/f5e7eb024bc3fc7e2074ff80f143a4f4cbc1dbda) +- [meta] add `auto-changelog` [`d2eb290`](https://github.com/form-data/form-data/commit/d2eb290a3e47ed5bcad7020d027daa15b3cf5ef5) +- [Tests] handle predict-v8-randomness failures in node < 17 and node > 23 [`e8c574c`](https://github.com/form-data/form-data/commit/e8c574cb07ff3a0de2ecc0912d783ef22e190c1f) +- [Fix] Switch to using `crypto` random for boundary values [`c6ced61`](https://github.com/form-data/form-data/commit/c6ced61d4fae8f617ee2fd692133ed87baa5d0fd) +- [Refactor] use `hasown` [`1a78b5d`](https://github.com/form-data/form-data/commit/1a78b5dd05e508d67e97764d812ac7c6d92ea88d) +- [Fix] validate boundary type in `setBoundary()` method [`70bbaa0`](https://github.com/form-data/form-data/commit/70bbaa0b395ca0fb975c309de8d7286979254cc4) +- [Tests] add tests to check the behavior of `getBoundary` with non-strings [`b22a64e`](https://github.com/form-data/form-data/commit/b22a64ef94ba4f3f6ff7d1ac72a54cca128567df) +- [meta] actually ensure the readme backup isn’t published [`0150851`](https://github.com/form-data/form-data/commit/01508513ffb26fd662ae7027834b325af8efb9ea) +- [meta] remove local commit hooks [`fc42bb9`](https://github.com/form-data/form-data/commit/fc42bb9315b641bfa6dae51cb4e188a86bb04769) +- [Dev Deps] remove unused deps [`a14d09e`](https://github.com/form-data/form-data/commit/a14d09ea8ed7e0a2e1705269ce6fb54bb7ee6bdb) +- [meta] fix scripts to use prepublishOnly [`11d9f73`](https://github.com/form-data/form-data/commit/11d9f7338f18a59b431832a3562b49baece0a432) +- [meta] fix readme capitalization [`fc38b48`](https://github.com/form-data/form-data/commit/fc38b4834a117a1856f3d877eb2f5b7496a24932) + +## [v3.0.3](https://github.com/form-data/form-data/compare/v3.0.2...v3.0.3) - 2025-02-14 + +### Merged + +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) + +### Fixed + +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) + +### Commits + +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`7fecefe`](https://github.com/form-data/form-data/commit/7fecefe4ba8f775634aff86a698776ad95ecffb5) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `cross-spawn`, `eslint`, `formidable`, `in-publish`, `pkgfiles`, `pre-commit`, `puppeteer`, `request`, `tape`, `typescript` [`8261fcb`](https://github.com/form-data/form-data/commit/8261fcb8bf5944d30ae3bd04b91b71d6a9932ef4) +- Only apps should have lockfiles [`b82f590`](https://github.com/form-data/form-data/commit/b82f59093cdbadb4b7ec0922d33ae7ab048b82ff) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`e5df7f2`](https://github.com/form-data/form-data/commit/e5df7f24383342264bd73dee3274818a40d04065) +- [Deps] update `mime-types` [`5a5bafe`](https://github.com/form-data/form-data/commit/5a5bafee894fead10da49e1fa2b084e17f2e1034) + +## [v3.0.2](https://github.com/form-data/form-data/compare/v3.0.1...v3.0.2) - 2024-10-10 + +### Merged + +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) + +### Commits + +- [Tests] migrate from travis to GHA [`8fdb3bc`](https://github.com/form-data/form-data/commit/8fdb3bc6b5d001f8909a9fca391d1d1d97ef1d79) +- [eslint] clean up ignores [`3217b3d`](https://github.com/form-data/form-data/commit/3217b3ded8e382e51171d5c74c6038a21cc54440) +- fix: move util.isArray to Array.isArray (#564) [`edb555a`](https://github.com/form-data/form-data/commit/edb555a811f6f7e4668db4831551cf41c1de1cac) + +## [v3.0.1](https://github.com/form-data/form-data/compare/v3.0.0...v3.0.1) - 2021-02-15 + +### Merged + +- Fix typo: ads -> adds [`#451`](https://github.com/form-data/form-data/pull/451) + +### Commits + +- feat: add setBoundary method [`55d90ce`](https://github.com/form-data/form-data/commit/55d90ce4a4c22b0ea0647991d85cb946dfb7395b) + +## [v3.0.0](https://github.com/form-data/form-data/compare/v2.5.5...v3.0.0) - 2019-11-05 + +### Merged + +- Update Readme.md [`#449`](https://github.com/form-data/form-data/pull/449) +- Update package.json [`#448`](https://github.com/form-data/form-data/pull/448) +- fix memory leak [`#447`](https://github.com/form-data/form-data/pull/447) +- form-data: Replaced PhantomJS Dependency [`#442`](https://github.com/form-data/form-data/pull/442) +- Fix constructor options in Typescript definitions [`#446`](https://github.com/form-data/form-data/pull/446) +- Fix the getHeaders method signatures [`#434`](https://github.com/form-data/form-data/pull/434) +- Update combined-stream (fixes #422) [`#424`](https://github.com/form-data/form-data/pull/424) + +### Fixed + +- Merge pull request #424 from botgram/update-combined-stream [`#422`](https://github.com/form-data/form-data/issues/422) +- Update combined-stream (fixes #422) [`#422`](https://github.com/form-data/form-data/issues/422) + +### Commits + +- Add readable stream options to constructor type [`80c8f74`](https://github.com/form-data/form-data/commit/80c8f746bcf4c0418ae35fbedde12fb8c01e2748) +- Fixed: getHeaders method signatures [`f4ca7f8`](https://github.com/form-data/form-data/commit/f4ca7f8e31f7e07df22c1aeb8e0a32a7055a64ca) +- Pass options to constructor if not used with new [`4bde68e`](https://github.com/form-data/form-data/commit/4bde68e12de1ba90fefad2e7e643f6375b902763) +- Make userHeaders optional [`2b4e478`](https://github.com/form-data/form-data/commit/2b4e4787031490942f2d1ee55c56b85a250875a7) + +## [v2.5.5](https://github.com/form-data/form-data/compare/v2.5.4...v2.5.5) - 2025-07-18 + +### Commits + +- [meta] actually ensure the readme backup isn’t published [`10626c0`](https://github.com/form-data/form-data/commit/10626c0a9b78c7d3fcaa51772265015ee0afc25c) +- [Fix] use proper dependency [`026abe5`](https://github.com/form-data/form-data/commit/026abe5c5c0489d8a2ccb59d5cfd14fb63078377) + +## [v2.5.4](https://github.com/form-data/form-data/compare/v2.5.3...v2.5.4) - 2025-07-17 + +### Fixed + +- [Fix] `append`: avoid a crash on nullish values [`#577`](https://github.com/form-data/form-data/issues/577) + +### Commits + +- [eslint] update linting config [`8bf2492`](https://github.com/form-data/form-data/commit/8bf2492e0555d41ff58fa04c91593af998f87a3c) +- [meta] add `auto-changelog` [`b5101ad`](https://github.com/form-data/form-data/commit/b5101ad3d5f73cfd0143aae3735b92826fd731ea) +- [Tests] handle predict-v8-randomness failures in node < 17 and node > 23 [`0e93122`](https://github.com/form-data/form-data/commit/0e93122358414942393d9c2dc434ae69e58be7c8) +- [Fix] Switch to using `crypto` random for boundary values [`b88316c`](https://github.com/form-data/form-data/commit/b88316c94bb004323669cd3639dc8bb8262539eb) +- [Fix] validate boundary type in `setBoundary()` method [`131ae5e`](https://github.com/form-data/form-data/commit/131ae5efa30b9c608add4faef3befb38aa2e1bf1) +- [Tests] Switch to newer v8 prediction library; enable node 24 testing [`c97cfbe`](https://github.com/form-data/form-data/commit/c97cfbed9eb6d2d4b5d53090f69ded4bf9fd8a21) +- [Refactor] use `hasown` [`97ac9c2`](https://github.com/form-data/form-data/commit/97ac9c208be0b83faeee04bb3faef1ed3474ee4c) +- [meta] remove local commit hooks [`be99d4e`](https://github.com/form-data/form-data/commit/be99d4eea5ce47139c23c1f0914596194019d7fb) +- [Dev Deps] remove unused deps [`ddbc89b`](https://github.com/form-data/form-data/commit/ddbc89b6d6d64f730bcb27cb33b7544068466a05) +- [meta] fix scripts to use prepublishOnly [`e351a97`](https://github.com/form-data/form-data/commit/e351a97e9f6c57c74ffd01625e83b09de805d08a) +- [Dev Deps] remove unused script [`8f23366`](https://github.com/form-data/form-data/commit/8f233664842da5bd605ce85541defc713d1d1e0a) +- [Dev Deps] add missing peer dep [`02ff026`](https://github.com/form-data/form-data/commit/02ff026fda71f9943cfdd5754727c628adb8d135) +- [meta] fix readme capitalization [`2fd5f61`](https://github.com/form-data/form-data/commit/2fd5f61ebfb526cd015fb8e7b8b8c1add4a38872) + +## [v2.5.3](https://github.com/form-data/form-data/compare/v2.5.2...v2.5.3) - 2025-02-14 + +### Merged + +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) + +### Fixed + +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) + +### Commits + +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`6e682d4`](https://github.com/form-data/form-data/commit/6e682d4bd41de7e80de41e3c4ee10f23fcc3dd00) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `eslint`, `formidable`, `in-publish`, `phantomjs-prebuilt`, `pkgfiles`, `pre-commit`, `request`, `tape`, `typescript` [`819f6b7`](https://github.com/form-data/form-data/commit/819f6b7a543306a891fca37c3a06d0ff4a734422) +- Only apps should have lockfiles [`b170ee2`](https://github.com/form-data/form-data/commit/b170ee2b22b4c695c363b811c0c553d2fb1bbd79) +- [Deps] update `combined-stream`, `mime-types` [`6b1ca1d`](https://github.com/form-data/form-data/commit/6b1ca1dc7362a1b1c3a99a885516cca4b7eb817f) +- Bumped version 2.5.3 [`9457283`](https://github.com/form-data/form-data/commit/9457283e1dce6122adc908fdd7442cfc54cabe7a) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`9dbe192`](https://github.com/form-data/form-data/commit/9dbe192be3db215eac4d9c0b980470a5c2c030c6) + +## [v2.5.2](https://github.com/form-data/form-data/compare/v2.5.1...v2.5.2) - 2024-10-10 + +### Merged + +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) + +### Commits + +- [Tests] migrate from travis to GHA [`806eda7`](https://github.com/form-data/form-data/commit/806eda77740e6e3c67c7815afb216f2e1f187ba5) +- [eslint] clean up ignores [`3a9d480`](https://github.com/form-data/form-data/commit/3a9d480232dbcbc07260ad84c3da4975d9a3ae9e) +- [Fix] `Buffer.from` and `Buffer.alloc` require node 4+ [`c499f76`](https://github.com/form-data/form-data/commit/c499f76f1faac1ddbf210c45217038e4c1e02337) +- Bumped version 2.5.2 [`7020dd4`](https://github.com/form-data/form-data/commit/7020dd4c1260370abc40e86e3dfe49c5d576fbda) +- [Dev Deps] downgrade `cross-spawn` [`3fc1a9b`](https://github.com/form-data/form-data/commit/3fc1a9b62ddf1fe77a2bd6bd3476e4c0a9e01a88) +- fix: move util.isArray to Array.isArray (#564) [`10418d1`](https://github.com/form-data/form-data/commit/10418d1fe4b0d65fe020eafe3911feb5ad5e2bd6) + +## [v2.5.1](https://github.com/form-data/form-data/compare/v2.5.0...v2.5.1) - 2019-08-28 + +### Merged + +- Fix error in callback signatures [`#435`](https://github.com/form-data/form-data/pull/435) +- -Fixed: Eerror in the documentations as indicated in #439 [`#440`](https://github.com/form-data/form-data/pull/440) +- Add constructor options to TypeScript defs [`#437`](https://github.com/form-data/form-data/pull/437) + +### Commits + +- Add remaining combined-stream options to typedef [`4d41a32`](https://github.com/form-data/form-data/commit/4d41a32c0b3f85f8bbc9cf17df43befd2d5fc305) +- Bumped version 2.5.1 [`8ce81f5`](https://github.com/form-data/form-data/commit/8ce81f56cccf5466363a5eff135ad394a929f59b) +- Bump rimraf to 2.7.1 [`a6bc2d4`](https://github.com/form-data/form-data/commit/a6bc2d4296dbdee5d84cbab7c69bcd0eea7a12e2) + +## [v2.5.0](https://github.com/form-data/form-data/compare/v2.4.0...v2.5.0) - 2019-07-03 + +### Merged + +- - Added: public methods with information and examples to readme [`#429`](https://github.com/form-data/form-data/pull/429) +- chore: move @types/node to devDep [`#431`](https://github.com/form-data/form-data/pull/431) +- Switched windows tests from AppVeyor to Travis [`#430`](https://github.com/form-data/form-data/pull/430) +- feat(typings): migrate TS typings #427 [`#428`](https://github.com/form-data/form-data/pull/428) +- enhance the method of path.basename, handle undefined case [`#421`](https://github.com/form-data/form-data/pull/421) + +### Commits + +- - Added: public methods with information and examples to the readme file. [`21323f3`](https://github.com/form-data/form-data/commit/21323f3b4043a167046a4a2554c5f2825356c423) +- feat(typings): migrate TS typings [`a3c0142`](https://github.com/form-data/form-data/commit/a3c0142ed91b0c7dcaf89c4f618776708f1f70a9) +- - Fixed: Typos [`37350fa`](https://github.com/form-data/form-data/commit/37350fa250782f156a998ec1fa9671866d40ac49) +- Switched to Travis Windows from Appveyor [`fc61c73`](https://github.com/form-data/form-data/commit/fc61c7381fad12662df16dbc3e7621c91b886f03) +- - Fixed: rendering of subheaders [`e93ed8d`](https://github.com/form-data/form-data/commit/e93ed8df9d7f22078bc3a2c24889e9dfa11e192d) +- Updated deps and readme [`e3d8628`](https://github.com/form-data/form-data/commit/e3d8628728f6e4817ab97deeed92f0c822661b89) +- Updated dependencies [`19add50`](https://github.com/form-data/form-data/commit/19add50afb7de66c70d189f422d16f1b886616e2) +- Bumped version to 2.5.0 [`905f173`](https://github.com/form-data/form-data/commit/905f173a3f785e8d312998e765634ee451ca5f42) +- - Fixed: filesize is not a valid option? knownLength should be used for streams [`d88f912`](https://github.com/form-data/form-data/commit/d88f912b75b666b47f8674467516eade69d2d5be) +- Bump notion of modern node to node8 [`508b626`](https://github.com/form-data/form-data/commit/508b626bf1b460d3733d3420dc1cfd001617f6ac) +- enhance the method of path.basename [`faaa68a`](https://github.com/form-data/form-data/commit/faaa68a297be7d4fca0ac4709d5b93afc1f78b5c) + +## [v2.4.0](https://github.com/form-data/form-data/compare/v2.3.2...v2.4.0) - 2019-06-19 + +### Merged + +- Added "getBuffer" method and updated certificates [`#419`](https://github.com/form-data/form-data/pull/419) +- docs(readme): add axios integration document [`#425`](https://github.com/form-data/form-data/pull/425) +- Allow newer versions of combined-stream [`#402`](https://github.com/form-data/form-data/pull/402) + +### Commits + +- Updated: Certificate [`e90a76a`](https://github.com/form-data/form-data/commit/e90a76ab3dcaa63a6f3045f8255bfbb9c25a3e4e) +- Updated build/test/badges [`8512eef`](https://github.com/form-data/form-data/commit/8512eef436e28372f5bc88de3ca76a9cb46e6847) +- Bumped version 2.4.0 [`0f8da06`](https://github.com/form-data/form-data/commit/0f8da06c0b4c997bd2f6b09d78290d339616a950) +- docs(readme): remove unnecessary bracket [`4e3954d`](https://github.com/form-data/form-data/commit/4e3954dde304d27e3b95371d8c78002f3af5d5b2) +- Bumped version to 2.3.3 [`b16916a`](https://github.com/form-data/form-data/commit/b16916a568a0d06f3f8a16c31f9a8b89b7844094) + +## [v2.3.2](https://github.com/form-data/form-data/compare/v2.3.1...v2.3.2) - 2018-02-13 + +### Merged + +- Pulling in fixed combined-stream [`#379`](https://github.com/form-data/form-data/pull/379) + +### Commits + +- All the dev dependencies are breaking in old versions of node :'( [`c7dba6a`](https://github.com/form-data/form-data/commit/c7dba6a139d872d173454845e25e1850ed6b72b4) +- Updated badges [`19b6c7a`](https://github.com/form-data/form-data/commit/19b6c7a8a5c40f47f91c8a8da3e5e4dc3c449fa3) +- Try tests in node@4 [`872a326`](https://github.com/form-data/form-data/commit/872a326ab13e2740b660ff589b75232c3a85fcc9) +- Pull in final version [`9d44871`](https://github.com/form-data/form-data/commit/9d44871073d647995270b19dbc26f65671ce15c7) + +## [v2.3.1](https://github.com/form-data/form-data/compare/v2.3.0...v2.3.1) - 2017-08-24 + +### Commits + +- Updated readme with custom options example [`8e0a569`](https://github.com/form-data/form-data/commit/8e0a5697026016fe171e93bec43c2205279e23ca) +- Added support (tests) for node 8 [`d1d6f4a`](https://github.com/form-data/form-data/commit/d1d6f4ad4670d8ba84cc85b28e522ca0e93eb362) + +## [v2.3.0](https://github.com/form-data/form-data/compare/v2.2.0...v2.3.0) - 2017-08-24 + +### Merged + +- Added custom `options` support [`#368`](https://github.com/form-data/form-data/pull/368) +- Allow form.submit with url string param to use https [`#249`](https://github.com/form-data/form-data/pull/249) +- Proper header production [`#357`](https://github.com/form-data/form-data/pull/357) +- Fix wrong MIME type in example [`#285`](https://github.com/form-data/form-data/pull/285) + +### Commits + +- allow form.submit with url string param to use https [`c0390dc`](https://github.com/form-data/form-data/commit/c0390dcc623e15215308fa2bb0225aa431d9381e) +- update tests for url parsing [`eec0e80`](https://github.com/form-data/form-data/commit/eec0e807889d46697abd39a89ad9bf39996ba787) +- Uses for in to assign properties instead of Object.assign [`f6854ed`](https://github.com/form-data/form-data/commit/f6854edd85c708191bb9c89615a09fd0a9afe518) +- Adds test to check for option override [`61762f2`](https://github.com/form-data/form-data/commit/61762f2c5262e576d6a7f778b4ebab6546ef8582) +- Removes the 2mb maxDataSize limitation [`dc171c3`](https://github.com/form-data/form-data/commit/dc171c3ba49ac9b8813636fd4159d139b812315b) +- Ignore .DS_Store [`e8a05d3`](https://github.com/form-data/form-data/commit/e8a05d33361f7dca8927fe1d96433d049843de24) + +## [v2.2.0](https://github.com/form-data/form-data/compare/v2.1.4...v2.2.0) - 2017-06-11 + +### Merged + +- Filename can be a nested path [`#355`](https://github.com/form-data/form-data/pull/355) + +### Commits + +- Bumped version number. [`d7398c3`](https://github.com/form-data/form-data/commit/d7398c3e7cd81ed12ecc0b84363721bae467db02) + +## [v2.1.4](https://github.com/form-data/form-data/compare/2.1.3...v2.1.4) - 2017-04-08 + +## [2.1.3](https://github.com/form-data/form-data/compare/v2.1.3...2.1.3) - 2017-04-08 + +## [v2.1.3](https://github.com/form-data/form-data/compare/v2.1.2...v2.1.3) - 2017-04-08 + +### Merged + +- toString should output '[object FormData]' [`#346`](https://github.com/form-data/form-data/pull/346) + +## [v2.1.2](https://github.com/form-data/form-data/compare/v2.1.1...v2.1.2) - 2016-11-07 + +### Merged + +- #271 Added check for self and window objects + tests [`#282`](https://github.com/form-data/form-data/pull/282) + +### Commits + +- Added check for self and window objects + tests [`c99e4ec`](https://github.com/form-data/form-data/commit/c99e4ec32cd14d83776f2bdcc5a4e7384131c1b1) + +## [v2.1.1](https://github.com/form-data/form-data/compare/v2.1.0...v2.1.1) - 2016-10-03 + +### Merged + +- Bumped dependencies. [`#270`](https://github.com/form-data/form-data/pull/270) +- Update browser.js shim to use self instead of window [`#267`](https://github.com/form-data/form-data/pull/267) +- Boilerplate code rediction [`#265`](https://github.com/form-data/form-data/pull/265) +- eslint@3.7.0 [`#266`](https://github.com/form-data/form-data/pull/266) + +### Commits + +- code duplicates removed [`e9239fb`](https://github.com/form-data/form-data/commit/e9239fbe7d3c897b29fe3bde857d772469541c01) +- Changed according to requests [`aa99246`](https://github.com/form-data/form-data/commit/aa9924626bd9168334d73fea568c0ad9d8fbaa96) +- chore(package): update eslint to version 3.7.0 [`090a859`](https://github.com/form-data/form-data/commit/090a859835016cab0de49629140499e418db9c3a) + +## [v2.1.0](https://github.com/form-data/form-data/compare/v2.0.0...v2.1.0) - 2016-09-25 + +### Merged + +- Added `hasKnownLength` public method [`#263`](https://github.com/form-data/form-data/pull/263) + +### Commits + +- Added hasKnownLength public method [`655b959`](https://github.com/form-data/form-data/commit/655b95988ef2ed3399f8796b29b2a8673c1df11c) + +## [v2.0.0](https://github.com/form-data/form-data/compare/v1.0.0...v2.0.0) - 2016-09-16 + +### Merged + +- Replaced async with asynckit [`#258`](https://github.com/form-data/form-data/pull/258) +- Pre-release house cleaning [`#247`](https://github.com/form-data/form-data/pull/247) + +### Commits + +- Replaced async with asynckit. Modernized [`1749b78`](https://github.com/form-data/form-data/commit/1749b78d50580fbd080e65c1eb9702ad4f4fc0c0) +- Ignore .bak files [`c08190a`](https://github.com/form-data/form-data/commit/c08190a87d3e22a528b6e32b622193742a4c2672) +- Trying to be more chatty. :) [`c79eabb`](https://github.com/form-data/form-data/commit/c79eabb24eaf761069255a44abf4f540cfd47d40) + +## [v1.0.0](https://github.com/form-data/form-data/compare/v1.0.0-rc4...v1.0.0) - 2016-08-26 + +### Merged + +- Allow custom header fields to be set as an object. [`#190`](https://github.com/form-data/form-data/pull/190) +- v1.0.0-rc4 [`#182`](https://github.com/form-data/form-data/pull/182) +- Avoid undefined variable reference in older browsers [`#176`](https://github.com/form-data/form-data/pull/176) +- More housecleaning [`#164`](https://github.com/form-data/form-data/pull/164) +- More cleanup [`#159`](https://github.com/form-data/form-data/pull/159) +- Added windows testing. Some cleanup. [`#158`](https://github.com/form-data/form-data/pull/158) +- Housecleaning. Added test coverage. [`#156`](https://github.com/form-data/form-data/pull/156) +- Second iteration of cleanup. [`#145`](https://github.com/form-data/form-data/pull/145) + +### Commits + +- Pre-release house cleaning [`440d72b`](https://github.com/form-data/form-data/commit/440d72b5fd44dd132f42598c3183d46e5f35ce71) +- Updated deps, updated docs [`54b6114`](https://github.com/form-data/form-data/commit/54b61143e9ce66a656dd537a1e7b31319a4991be) +- make docs up-to-date [`5e383d7`](https://github.com/form-data/form-data/commit/5e383d7f1466713f7fcef58a6817e0cb466c8ba7) +- Added missing deps [`fe04862`](https://github.com/form-data/form-data/commit/fe04862000b2762245e2db69d5207696a08c1174) + +## [v1.0.0-rc4](https://github.com/form-data/form-data/compare/v1.0.0-rc3...v1.0.0-rc4) - 2016-03-15 + +### Merged + +- Housecleaning, preparing for the release [`#144`](https://github.com/form-data/form-data/pull/144) +- lib: emit error when failing to get length [`#127`](https://github.com/form-data/form-data/pull/127) +- Cleaning up for Codacity 2. [`#143`](https://github.com/form-data/form-data/pull/143) +- Cleaned up codacity concerns. [`#142`](https://github.com/form-data/form-data/pull/142) +- Should throw type error without new operator. [`#129`](https://github.com/form-data/form-data/pull/129) + +### Commits + +- More cleanup [`94b6565`](https://github.com/form-data/form-data/commit/94b6565bb98a387335c72feff5ed5c10da0a7f6f) +- Shuffling things around [`3c2f172`](https://github.com/form-data/form-data/commit/3c2f172eaddf0979b3eef5c73985d1a6fd3eee4a) +- Second iteration of cleanup. [`347c88e`](https://github.com/form-data/form-data/commit/347c88ef9a99a66b9bcf4278497425db2f0182b2) +- Housecleaning [`c335610`](https://github.com/form-data/form-data/commit/c3356100c054a4695e4dec8ed7072775cd745616) +- More housecleaning [`f573321`](https://github.com/form-data/form-data/commit/f573321824aae37ba2052a92cc889d533d9f8fb8) +- Trying to make far run on windows. + cleanup [`e426dfc`](https://github.com/form-data/form-data/commit/e426dfcefb07ee307d8a15dec04044cce62413e6) +- Playing with appveyor [`c9458a7`](https://github.com/form-data/form-data/commit/c9458a7c328782b19859bc1745e7d6b2005ede86) +- Updated dev dependencies. [`ceebe88`](https://github.com/form-data/form-data/commit/ceebe88872bb22da0a5a98daf384e3cc232928d3) +- Replaced win-spawn with cross-spawn [`405a69e`](https://github.com/form-data/form-data/commit/405a69ee34e235ee6561b5ff0140b561be40d1cc) +- Updated readme badges. [`12f282a`](https://github.com/form-data/form-data/commit/12f282a1310fcc2f70cc5669782283929c32a63d) +- Making paths windows friendly. [`f4bddc5`](https://github.com/form-data/form-data/commit/f4bddc5955e2472f8e23c892c9b4d7a08fcb85a3) +- [WIP] trying things for greater sanity [`8ad1f02`](https://github.com/form-data/form-data/commit/8ad1f02b0b3db4a0b00c5d6145ed69bcb7558213) +- Bending under Codacy [`bfff3bb`](https://github.com/form-data/form-data/commit/bfff3bb36052dc83f429949b4e6f9b146a49d996) +- Another attempt to make windows friendly [`f3eb628`](https://github.com/form-data/form-data/commit/f3eb628974ccb91ba0020f41df490207eeed77f6) +- Updated dependencies. [`f73996e`](https://github.com/form-data/form-data/commit/f73996e0508ee2d4b2b376276adfac1de4188ac2) +- Missed travis changes. [`67ee79f`](https://github.com/form-data/form-data/commit/67ee79f964fdabaf300bd41b0af0c1cfaca07687) +- Restructured badges. [`48444a1`](https://github.com/form-data/form-data/commit/48444a1ff156ba2c2c3cfd11047c2f2fd92d4474) +- Add similar type error as the browser for attempting to use form-data without new. [`5711320`](https://github.com/form-data/form-data/commit/5711320fb7c8cc620cfc79b24c7721526e23e539) +- Took out codeclimate-test-reporter [`a7e0c65`](https://github.com/form-data/form-data/commit/a7e0c6522afe85ca9974b0b4e1fca9c77c3e52b1) +- One more [`8e84cff`](https://github.com/form-data/form-data/commit/8e84cff3370526ecd3e175fd98e966242d81993c) + +## [v1.0.0-rc3](https://github.com/form-data/form-data/compare/v1.0.0-rc2...v1.0.0-rc3) - 2015-07-29 + +### Merged + +- House cleaning. Added `pre-commit`. [`#140`](https://github.com/form-data/form-data/pull/140) +- Allow custom content-type without setting a filename. [`#138`](https://github.com/form-data/form-data/pull/138) +- Add node-fetch to alternative submission methods. [`#132`](https://github.com/form-data/form-data/pull/132) +- Update dependencies [`#130`](https://github.com/form-data/form-data/pull/130) +- Switching to container based TravisCI [`#136`](https://github.com/form-data/form-data/pull/136) +- Default content-type to 'application/octect-stream' [`#128`](https://github.com/form-data/form-data/pull/128) +- Allow filename as third option of .append [`#125`](https://github.com/form-data/form-data/pull/125) + +### Commits + +- Allow custom content-type without setting a filename [`c8a77cc`](https://github.com/form-data/form-data/commit/c8a77cc0cf16d15f1ebf25272beaab639ce89f76) +- Fixed ranged test. [`a5ac58c`](https://github.com/form-data/form-data/commit/a5ac58cbafd0909f32fe8301998f689314fd4859) +- Allow filename as third option of #append [`d081005`](https://github.com/form-data/form-data/commit/d0810058c84764b3c463a18b15ebb37864de9260) +- Allow custom content-type without setting a filename [`8cb9709`](https://github.com/form-data/form-data/commit/8cb9709e5f1809cfde0cd707dbabf277138cd771) + +## [v1.0.0-rc2](https://github.com/form-data/form-data/compare/v1.0.0-rc1...v1.0.0-rc2) - 2015-07-21 + +### Merged + +- #109 Append proper line break [`#123`](https://github.com/form-data/form-data/pull/123) +- Add shim for browser (browserify/webpack). [`#122`](https://github.com/form-data/form-data/pull/122) +- Update license field [`#115`](https://github.com/form-data/form-data/pull/115) + +### Commits + +- Add shim for browser. [`87c33f4`](https://github.com/form-data/form-data/commit/87c33f4269a2211938f80ab3e53835362b1afee8) +- Bump version [`a3f5d88`](https://github.com/form-data/form-data/commit/a3f5d8872c810ce240c7d3838c69c3c9fcecc111) + +## [v1.0.0-rc1](https://github.com/form-data/form-data/compare/0.2...v1.0.0-rc1) - 2015-06-13 + +### Merged + +- v1.0.0-rc1 [`#114`](https://github.com/form-data/form-data/pull/114) +- Updated test targets [`#102`](https://github.com/form-data/form-data/pull/102) +- Remove duplicate plus sign [`#94`](https://github.com/form-data/form-data/pull/94) + +### Commits + +- Made https test local. Updated deps. [`afe1959`](https://github.com/form-data/form-data/commit/afe1959ec711f23e57038ab5cb20fedd86271f29) +- Proper self-signed ssl [`4d5ec50`](https://github.com/form-data/form-data/commit/4d5ec50e81109ad2addf3dbb56dc7c134df5ff87) +- Update HTTPS handling for modern days [`2c11b01`](https://github.com/form-data/form-data/commit/2c11b01ce2c06e205c84d7154fa2f27b66c94f3b) +- Made tests more local [`09633fa`](https://github.com/form-data/form-data/commit/09633fa249e7ce3ac581543aafe16ee9039a823b) +- Auto create tmp folder for Formidable [`28714b7`](https://github.com/form-data/form-data/commit/28714b7f71ad556064cdff88fabe6b92bd407ddd) +- remove duplicate plus sign [`36e09c6`](https://github.com/form-data/form-data/commit/36e09c695b0514d91a23f5cd64e6805404776fc7) + +## [0.2](https://github.com/form-data/form-data/compare/0.1.4...0.2) - 2014-12-06 + +### Merged + +- Bumped version [`#96`](https://github.com/form-data/form-data/pull/96) +- Replace mime library. [`#95`](https://github.com/form-data/form-data/pull/95) +- #71 Respect bytes range in a read stream. [`#73`](https://github.com/form-data/form-data/pull/73) + +## [0.1.4](https://github.com/form-data/form-data/compare/0.1.3...0.1.4) - 2014-06-23 + +### Merged + +- Updated version. [`#76`](https://github.com/form-data/form-data/pull/76) +- #71 Respect bytes range in a read stream. [`#75`](https://github.com/form-data/form-data/pull/75) + +## [0.1.3](https://github.com/form-data/form-data/compare/0.1.2...0.1.3) - 2014-06-17 + +### Merged + +- Updated versions. [`#69`](https://github.com/form-data/form-data/pull/69) +- Added custom headers support [`#60`](https://github.com/form-data/form-data/pull/60) +- Added test for Request. Small fixes. [`#56`](https://github.com/form-data/form-data/pull/56) + +### Commits + +- Added test for the custom header functionality [`bd50685`](https://github.com/form-data/form-data/commit/bd506855af62daf728ef1718cae88ed23bb732f3) +- Documented custom headers option [`77a024a`](https://github.com/form-data/form-data/commit/77a024a9375f93c246c35513d80f37d5e11d35ff) +- Removed 0.6 support. [`aee8dce`](https://github.com/form-data/form-data/commit/aee8dce604c595cfaacfc6efb12453d1691ac0d6) + +## [0.1.2](https://github.com/form-data/form-data/compare/0.1.1...0.1.2) - 2013-10-02 + +### Merged + +- Fixed default https port assignment, added tests. [`#52`](https://github.com/form-data/form-data/pull/52) +- #45 Added tests for multi-submit. Updated readme. [`#49`](https://github.com/form-data/form-data/pull/49) +- #47 return request from .submit() [`#48`](https://github.com/form-data/form-data/pull/48) + +### Commits + +- Bumped version. [`2b761b2`](https://github.com/form-data/form-data/commit/2b761b256ae607fc2121621f12c2e1042be26baf) + +## [0.1.1](https://github.com/form-data/form-data/compare/0.1.0...0.1.1) - 2013-08-21 + +### Merged + +- Added license type and reference to package.json [`#46`](https://github.com/form-data/form-data/pull/46) + +### Commits + +- #47 return request from .submit() [`1d61c2d`](https://github.com/form-data/form-data/commit/1d61c2da518bd5e136550faa3b5235bb540f1e06) +- #47 Updated readme. [`e3dae15`](https://github.com/form-data/form-data/commit/e3dae1526bd3c3b9d7aff6075abdaac12c3cc60f) + +## [0.1.0](https://github.com/form-data/form-data/compare/0.0.10...0.1.0) - 2013-07-08 + +### Merged + +- Update master to 0.1.0 [`#44`](https://github.com/form-data/form-data/pull/44) +- 0.1.0 - Added error handling. Streamlined edge cases behavior. [`#43`](https://github.com/form-data/form-data/pull/43) +- Pointed badges back to mothership. [`#39`](https://github.com/form-data/form-data/pull/39) +- Updated node-fake to support 0.11 tests. [`#37`](https://github.com/form-data/form-data/pull/37) +- Updated tests to play nice with 0.10 [`#36`](https://github.com/form-data/form-data/pull/36) +- #32 Added .npmignore [`#34`](https://github.com/form-data/form-data/pull/34) +- Spring cleaning [`#30`](https://github.com/form-data/form-data/pull/30) + +### Commits + +- Added error handling. Streamlined edge cases behavior. [`4da496e`](https://github.com/form-data/form-data/commit/4da496e577cb9bc0fd6c94cbf9333a0082ce353a) +- Made tests more deterministic. [`7fc009b`](https://github.com/form-data/form-data/commit/7fc009b8a2cc9232514a44b2808b9f89ce68f7d2) +- Fixed styling. [`d373b41`](https://github.com/form-data/form-data/commit/d373b417e779024bc3326073e176383cd08c0b18) +- #40 Updated Readme.md regarding getLengthSync() [`efb373f`](https://github.com/form-data/form-data/commit/efb373fd63814d977960e0299d23c92cd876cfef) +- Updated readme. [`527e3a6`](https://github.com/form-data/form-data/commit/527e3a63b032cb6f576f597ad7ff2ebcf8a0b9b4) + +## [0.0.10](https://github.com/form-data/form-data/compare/0.0.9...0.0.10) - 2013-05-08 + +### Commits + +- Updated tests to play nice with 0.10. [`932b39b`](https://github.com/form-data/form-data/commit/932b39b773e49edcb2c5d2e58fe389ab6c42f47c) +- Added dependency tracking. [`3131d7f`](https://github.com/form-data/form-data/commit/3131d7f6996cd519d50547e4de1587fd80d0fa07) + +## 0.0.9 - 2013-04-29 + +### Merged + +- Custom params for form.submit() should cover most edge cases. [`#22`](https://github.com/form-data/form-data/pull/22) +- Updated Readme and version number. [`#20`](https://github.com/form-data/form-data/pull/20) +- Allow custom headers and pre-known length in parts [`#17`](https://github.com/form-data/form-data/pull/17) +- Bumped version number. [`#12`](https://github.com/form-data/form-data/pull/12) +- Fix for #10 [`#11`](https://github.com/form-data/form-data/pull/11) +- Bumped version number. [`#8`](https://github.com/form-data/form-data/pull/8) +- Added support for https destination, http-response and mikeal's request streams. [`#7`](https://github.com/form-data/form-data/pull/7) +- Updated git url. [`#6`](https://github.com/form-data/form-data/pull/6) +- Version bump. [`#5`](https://github.com/form-data/form-data/pull/5) +- Changes to support custom content-type and getLengthSync. [`#4`](https://github.com/form-data/form-data/pull/4) +- make .submit(url) use host from url, not 'localhost' [`#2`](https://github.com/form-data/form-data/pull/2) +- Make package.json JSON [`#1`](https://github.com/form-data/form-data/pull/1) + +### Fixed + +- Add MIT license [`#14`](https://github.com/form-data/form-data/issues/14) + +### Commits + +- Spring cleaning. [`850ba1b`](https://github.com/form-data/form-data/commit/850ba1b649b6856b0fa87bbcb04bc70ece0137a6) +- Added custom request params to form.submit(). Made tests more stable. [`de3502f`](https://github.com/form-data/form-data/commit/de3502f6c4a509f6ed12a7dd9dc2ce9c2e0a8d23) +- Basic form (no files) working [`6ffdc34`](https://github.com/form-data/form-data/commit/6ffdc343e8594cfc2efe1e27653ea39d8980a14e) +- Got initial test to pass [`9a59d08`](https://github.com/form-data/form-data/commit/9a59d08c024479fd3c9d99ba2f0893a47b3980f0) +- Implement initial getLength [`9060c91`](https://github.com/form-data/form-data/commit/9060c91b861a6573b73beddd11e866db422b5830) +- Make getLength work with file streams [`6f6b1e9`](https://github.com/form-data/form-data/commit/6f6b1e9b65951e6314167db33b446351702f5558) +- Implemented a simplistic submit() function [`41e9cc1`](https://github.com/form-data/form-data/commit/41e9cc124124721e53bc1d1459d45db1410c44e6) +- added test for custom headers and content-length in parts (felixge/node-form-data/17) [`b16d14e`](https://github.com/form-data/form-data/commit/b16d14e693670f5d52babec32cdedd1aa07c1aa4) +- Fixed code styling. [`5847424`](https://github.com/form-data/form-data/commit/5847424c666970fc2060acd619e8a78678888a82) +- #29 Added custom filename and content-type options to support identity-less streams. [`adf8b4a`](https://github.com/form-data/form-data/commit/adf8b4a41530795682cd3e35ffaf26b30288ccda) +- Initial Readme and package.json [`8c744e5`](https://github.com/form-data/form-data/commit/8c744e58be4014bdf432e11b718ed87f03e217af) +- allow append() to completely override header and boundary [`3fb2ad4`](https://github.com/form-data/form-data/commit/3fb2ad491f66e4b4ff16130be25b462820b8c972) +- Syntax highlighting [`ab3a6a5`](https://github.com/form-data/form-data/commit/ab3a6a5ed1ab77a2943ce3befcb2bb3cd9ff0330) +- Updated Readme.md [`de8f441`](https://github.com/form-data/form-data/commit/de8f44122ca754cbfedc0d2748e84add5ff0b669) +- Added examples to Readme file. [`c406ac9`](https://github.com/form-data/form-data/commit/c406ac921d299cbc130464ed19338a9ef97cb650) +- pass options.knownLength to set length at beginning, w/o waiting for async size calculation [`e2ac039`](https://github.com/form-data/form-data/commit/e2ac0397ff7c37c3dca74fa9925b55f832e4fa0b) +- Updated dependencies and added test command. [`09bd7cd`](https://github.com/form-data/form-data/commit/09bd7cd86f1ad7a58df1b135eb6eef0d290894b4) +- Bumped version. Updated readme. [`4581140`](https://github.com/form-data/form-data/commit/4581140f322758c6fc92019d342c7d7d6c94af5c) +- Test runner [`1707ebb`](https://github.com/form-data/form-data/commit/1707ebbd180856e6ed44e80c46b02557e2425762) +- Added .npmignore, bumped version. [`2e033e0`](https://github.com/form-data/form-data/commit/2e033e0e4be7c1457be090cd9b2996f19d8fb665) +- FormData.prototype.append takes and passes along options (for header) [`b519203`](https://github.com/form-data/form-data/commit/b51920387ed4da7b4e106fc07b9459f26b5ae2f0) +- Make package.json JSON [`bf1b58d`](https://github.com/form-data/form-data/commit/bf1b58df794b10fda86ed013eb9237b1e5032085) +- Add dependencies to package.json [`7413d0b`](https://github.com/form-data/form-data/commit/7413d0b4cf5546312d47ea426db8180619083974) +- Add convenient submit() interface [`55855e4`](https://github.com/form-data/form-data/commit/55855e4bea14585d4a3faf9e7318a56696adbc7d) +- Fix content type [`08b6ae3`](https://github.com/form-data/form-data/commit/08b6ae337b23ef1ba457ead72c9b133047df213c) +- Combatting travis rvm calls. [`409adfd`](https://github.com/form-data/form-data/commit/409adfd100a3cf4968a632c05ba58d92d262d144) +- Fixed Issue #2 [`b3a5d66`](https://github.com/form-data/form-data/commit/b3a5d661739dcd6921b444b81d5cb3c32fab655d) +- Fix for #10. [`bab70b9`](https://github.com/form-data/form-data/commit/bab70b9e803e17287632762073d227d6c59989e0) +- Trying workarounds for formidable - 0.6 "love". [`25782a3`](https://github.com/form-data/form-data/commit/25782a3f183d9c30668ec2bca6247ed83f10611c) +- change whitespace to conform with felixge's style guide [`9fa34f4`](https://github.com/form-data/form-data/commit/9fa34f433bece85ef73086a874c6f0164ab7f1f6) +- Add async to deps [`b7d1a6b`](https://github.com/form-data/form-data/commit/b7d1a6b10ee74be831de24ed76843e5a6935f155) +- typo [`7860a9c`](https://github.com/form-data/form-data/commit/7860a9c8a582f0745ce0e4a0549f4bffc29c0b50) +- Bumped version. [`fa36c1b`](https://github.com/form-data/form-data/commit/fa36c1b4229c34b85d7efd41908429b6d1da3bfc) +- Updated .gitignore [`de567bd`](https://github.com/form-data/form-data/commit/de567bde620e53b8e9b0ed3506e79491525ec558) +- Don't rely on resume() being called by pipe [`1deae47`](https://github.com/form-data/form-data/commit/1deae47e042bcd170bd5dbe2b4a4fa5356bb8aa2) +- One more wrong content type [`28f166d`](https://github.com/form-data/form-data/commit/28f166d443e2eb77f2559324014670674b97e46e) +- Another typo [`b959b6a`](https://github.com/form-data/form-data/commit/b959b6a2be061cac17f8d329b89cea109f0f32be) +- Typo [`698fa0a`](https://github.com/form-data/form-data/commit/698fa0aa5dbf4eeb77377415acc202a6fbe3f4a2) +- Being simply dumb. [`b614db8`](https://github.com/form-data/form-data/commit/b614db85702061149fbd98418605106975e72ade) +- Fixed typo in the filename. [`30af6be`](https://github.com/form-data/form-data/commit/30af6be13fb0c9e92b32e935317680b9d7599928) diff --git a/node_modules/form-data/License b/node_modules/form-data/License new file mode 100644 index 00000000..c7ff12a2 --- /dev/null +++ b/node_modules/form-data/License @@ -0,0 +1,19 @@ +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/node_modules/form-data/README.md b/node_modules/form-data/README.md new file mode 100644 index 00000000..f850e303 --- /dev/null +++ b/node_modules/form-data/README.md @@ -0,0 +1,355 @@ +# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) + +A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. + +The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface + +[![Linux Build](https://img.shields.io/travis/form-data/form-data/v4.0.5.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v4.0.5.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/travis/form-data/form-data/v4.0.5.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data) + +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v4.0.5.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) + +## Install + +``` +npm install --save form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +var FormData = require('form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +Also you can use http-response stream: + +``` javascript +var FormData = require('form-data'); +var http = require('http'); + +var form = new FormData(); + +http.request('http://nodejs.org/images/logo.png', function (response) { + form.append('my_field', 'my value'); + form.append('my_buffer', new Buffer(10)); + form.append('my_logo', response); +}); +``` + +Or @mikeal's [request](https://github.com/request/request) stream: + +``` javascript +var FormData = require('form-data'); +var request = require('request'); + +var form = new FormData(); + +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_logo', request('http://nodejs.org/images/logo.png')); +``` + +In order to submit this form to a web application, call ```submit(url, [callback])``` method: + +``` javascript +form.submit('http://example.org/', function (err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +}); + +``` + +For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. + +### Custom options + +You can provide custom options, such as `maxDataSize`: + +``` javascript +var FormData = require('form-data'); + +var form = new FormData({ maxDataSize: 20971520 }); +form.append('my_field', 'my value'); +form.append('my_buffer', /* something big */); +``` + +List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) + +### Alternative submission methods + +You can use node's http client interface: + +``` javascript +var http = require('http'); + +var request = http.request({ + method: 'post', + host: 'example.org', + path: '/upload', + headers: form.getHeaders() +}); + +form.pipe(request); + +request.on('response', function (res) { + console.log(res.statusCode); +}); +``` + +Or if you would prefer the `'Content-Length'` header to be set for you: + +``` javascript +form.submit('example.org/upload', function (err, res) { + console.log(res.statusCode); +}); +``` + +To use custom headers and pre-known length in parts: + +``` javascript +var CRLF = '\r\n'; +var form = new FormData(); + +var options = { + header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, + knownLength: 1 +}; + +form.append('my_buffer', buffer, options); + +form.submit('http://example.com/', function (err, res) { + if (err) throw err; + console.log('Done'); +}); +``` + +Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: + +``` javascript +someModule.stream(function (err, stdout, stderr) { + if (err) throw err; + + var form = new FormData(); + + form.append('file', stdout, { + filename: 'unicycle.jpg', // ... or: + filepath: 'photos/toys/unicycle.jpg', + contentType: 'image/jpeg', + knownLength: 19806 + }); + + form.submit('http://example.com/', function (err, res) { + if (err) throw err; + console.log('Done'); + }); +}); +``` + +The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). + +For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: + +``` javascript +form.submit({ + host: 'example.com', + path: '/probably.php?extra=params', + auth: 'username:password' +}, function (err, res) { + console.log(res.statusCode); +}); +``` + +In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: + +``` javascript +form.submit({ + host: 'example.com', + path: '/surelynot.php', + headers: { 'x-test-header': 'test-header-value' } +}, function (err, res) { + console.log(res.statusCode); +}); +``` + +### Methods + +- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). +- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) +- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) +- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary) +- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) +- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) +- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) +- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength) +- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-) +- [_String_ toString()](https://github.com/form-data/form-data#string-tostring) + +#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] ) +Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user. +```javascript +var form = new FormData(); +form.append('my_string', 'my value'); +form.append('my_integer', 1); +form.append('my_boolean', true); +form.append('my_buffer', new Buffer(10)); +form.append('my_array_as_json', JSON.stringify(['bird', 'cute'])); +``` + +You may provide a string for options, or an object. +```javascript +// Set filename by providing a string for options +form.append('my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg'); + +// provide an object. +form.append('my_file', fs.createReadStream('/foo/bar.jpg'), { filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806 }); +``` + +#### _Headers_ getHeaders( [**Headers** _userHeaders_] ) +This method adds the correct `content-type` header to the provided array of `userHeaders`. + +#### _String_ getBoundary() +Return the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers +for example: +```javascript +--------------------------515890814546601021194782 +``` + +#### _Void_ setBoundary(String _boundary_) +Set the boundary string, overriding the default behavior described above. + +_Note: The boundary must be unique and may not appear in the data._ + +#### _Buffer_ getBuffer() +Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data. +```javascript +var form = new FormData(); +form.append('my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73])); +form.append('my_file', fs.readFileSync('/foo/bar.jpg')); + +axios.post('https://example.com/path/to/api', form.getBuffer(), form.getHeaders()); +``` +**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error. + +#### _Integer_ getLengthSync() +Same as `getLength` but synchronous. + +_Note: getLengthSync __doesn't__ calculate streams length._ + +#### _Integer_ getLength(**function** _callback_ ) +Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated +```javascript +this.getLength(function (err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + ... +}.bind(this)); +``` + +#### _Boolean_ hasKnownLength() +Checks if the length of added values is known. + +#### _Request_ submit(_params_, **function** _callback_ ) +Submit the form to a web application. +```javascript +var form = new FormData(); +form.append('my_string', 'Hello World'); + +form.submit('http://example.com/', function (err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +} ); +``` + +#### _String_ toString() +Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead. + +### Integration with other libraries + +#### Request + +Form submission using [request](https://github.com/request/request): + +```javascript +var formData = { + my_field: 'my_value', + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), +}; + +request.post({url:'http://service.com/upload', formData: formData}, function (err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). + +#### node-fetch + +You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function (res) { + return res.json(); + }).then(function (json) { + console.log(json); + }); +``` + +#### axios + +In Node.js you can post a file using [axios](https://github.com/axios/axios): +```javascript +const form = new FormData(); +const stream = fs.createReadStream(PATH_TO_FILE); + +form.append('image', stream); + +// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders` +const formHeaders = form.getHeaders(); + +axios.post('http://example.com', form, { + headers: { + ...formHeaders, + }, +}) + .then(response => response) + .catch(error => error) +``` + +## Notes + +- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```). +- ```submit``` will not add `content-length` if form length is unknown or not calculable. +- Starting version `2.x` FormData has dropped support for `node@0.10.x`. +- Starting version `3.x` FormData has dropped support for `node@4.x`. + +## License + +Form-Data is released under the [MIT](License) license. diff --git a/node_modules/form-data/index.d.ts b/node_modules/form-data/index.d.ts new file mode 100644 index 00000000..295e9e9b --- /dev/null +++ b/node_modules/form-data/index.d.ts @@ -0,0 +1,62 @@ +// Definitions by: Carlos Ballesteros Velasco +// Leon Yu +// BendingBender +// Maple Miao + +/// +import * as stream from 'stream'; +import * as http from 'http'; + +export = FormData; + +// Extracted because @types/node doesn't export interfaces. +interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + read?(this: stream.Readable, size: number): void; + destroy?(this: stream.Readable, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean; +} + +interface Options extends ReadableOptions { + writable?: boolean; + readable?: boolean; + dataSize?: number; + maxDataSize?: number; + pauseStreams?: boolean; +} + +declare class FormData extends stream.Readable { + constructor(options?: Options); + append(key: string, value: any, options?: FormData.AppendOptions | string): void; + getHeaders(userHeaders?: FormData.Headers): FormData.Headers; + submit( + params: string | FormData.SubmitOptions, + callback?: (error: Error | null, response: http.IncomingMessage) => void + ): http.ClientRequest; + getBuffer(): Buffer; + setBoundary(boundary: string): void; + getBoundary(): string; + getLength(callback: (err: Error | null, length: number) => void): void; + getLengthSync(): number; + hasKnownLength(): boolean; +} + +declare namespace FormData { + interface Headers { + [key: string]: any; + } + + interface AppendOptions { + header?: string | Headers; + knownLength?: number; + filename?: string; + filepath?: string; + contentType?: string; + } + + interface SubmitOptions extends http.RequestOptions { + protocol?: 'https:' | 'http:'; + } +} diff --git a/node_modules/form-data/lib/browser.js b/node_modules/form-data/lib/browser.js new file mode 100644 index 00000000..8950a913 --- /dev/null +++ b/node_modules/form-data/lib/browser.js @@ -0,0 +1,4 @@ +'use strict'; + +/* eslint-env browser */ +module.exports = typeof self === 'object' ? self.FormData : window.FormData; diff --git a/node_modules/form-data/lib/form_data.js b/node_modules/form-data/lib/form_data.js new file mode 100644 index 00000000..63a0f016 --- /dev/null +++ b/node_modules/form-data/lib/form_data.js @@ -0,0 +1,494 @@ +'use strict'; + +var CombinedStream = require('combined-stream'); +var util = require('util'); +var path = require('path'); +var http = require('http'); +var https = require('https'); +var parseUrl = require('url').parse; +var fs = require('fs'); +var Stream = require('stream').Stream; +var crypto = require('crypto'); +var mime = require('mime-types'); +var asynckit = require('asynckit'); +var setToStringTag = require('es-set-tostringtag'); +var hasOwn = require('hasown'); +var populate = require('./populate.js'); + +/** + * Create readable "multipart/form-data" streams. + * Can be used to submit forms + * and file uploads to other web applications. + * + * @constructor + * @param {object} options - Properties to be added/overriden for FormData and CombinedStream + */ +function FormData(options) { + if (!(this instanceof FormData)) { + return new FormData(options); + } + + this._overheadLength = 0; + this._valueLength = 0; + this._valuesToMeasure = []; + + CombinedStream.call(this); + + options = options || {}; // eslint-disable-line no-param-reassign + for (var option in options) { // eslint-disable-line no-restricted-syntax + this[option] = options[option]; + } +} + +// make it a Stream +util.inherits(FormData, CombinedStream); + +FormData.LINE_BREAK = '\r\n'; +FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; + +FormData.prototype.append = function (field, value, options) { + options = options || {}; // eslint-disable-line no-param-reassign + + // allow filename as single option + if (typeof options === 'string') { + options = { filename: options }; // eslint-disable-line no-param-reassign + } + + var append = CombinedStream.prototype.append.bind(this); + + // all that streamy business can't handle numbers + if (typeof value === 'number' || value == null) { + value = String(value); // eslint-disable-line no-param-reassign + } + + // https://github.com/felixge/node-form-data/issues/38 + if (Array.isArray(value)) { + /* + * Please convert your array into string + * the way web server expects it + */ + this._error(new Error('Arrays are not supported.')); + return; + } + + var header = this._multiPartHeader(field, value, options); + var footer = this._multiPartFooter(); + + append(header); + append(value); + append(footer); + + // pass along options.knownLength + this._trackLength(header, value, options); +}; + +FormData.prototype._trackLength = function (header, value, options) { + var valueLength = 0; + + /* + * used w/ getLengthSync(), when length is known. + * e.g. for streaming directly from a remote server, + * w/ a known file a size, and not wanting to wait for + * incoming file to finish to get its size. + */ + if (options.knownLength != null) { + valueLength += Number(options.knownLength); + } else if (Buffer.isBuffer(value)) { + valueLength = value.length; + } else if (typeof value === 'string') { + valueLength = Buffer.byteLength(value); + } + + this._valueLength += valueLength; + + // @check why add CRLF? does this account for custom/multiple CRLFs? + this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length; + + // empty or either doesn't have path or not an http response or not a stream + if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) { + return; + } + + // no need to bother with the length + if (!options.knownLength) { + this._valuesToMeasure.push(value); + } +}; + +FormData.prototype._lengthRetriever = function (value, callback) { + if (hasOwn(value, 'fd')) { + // take read range into a account + // `end` = Infinity –> read file till the end + // + // TODO: Looks like there is bug in Node fs.createReadStream + // it doesn't respect `end` options without `start` options + // Fix it when node fixes it. + // https://github.com/joyent/node/issues/7819 + if (value.end != undefined && value.end != Infinity && value.start != undefined) { + // when end specified + // no need to calculate range + // inclusive, starts with 0 + callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return + + // not that fast snoopy + } else { + // still need to fetch file size from fs + fs.stat(value.path, function (err, stat) { + if (err) { + callback(err); + return; + } + + // update final size based on the range options + var fileSize = stat.size - (value.start ? value.start : 0); + callback(null, fileSize); + }); + } + + // or http response + } else if (hasOwn(value, 'httpVersion')) { + callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return + + // or request stream http://github.com/mikeal/request + } else if (hasOwn(value, 'httpModule')) { + // wait till response come back + value.on('response', function (response) { + value.pause(); + callback(null, Number(response.headers['content-length'])); + }); + value.resume(); + + // something else + } else { + callback('Unknown stream'); // eslint-disable-line callback-return + } +}; + +FormData.prototype._multiPartHeader = function (field, value, options) { + /* + * custom header specified (as string)? + * it becomes responsible for boundary + * (e.g. to handle extra CRLFs on .NET servers) + */ + if (typeof options.header === 'string') { + return options.header; + } + + var contentDisposition = this._getContentDisposition(value, options); + var contentType = this._getContentType(value, options); + + var contents = ''; + var headers = { + // add custom disposition as third element or keep it two elements if not + 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), + // if no content type. allow it to be empty array + 'Content-Type': [].concat(contentType || []) + }; + + // allow custom headers. + if (typeof options.header === 'object') { + populate(headers, options.header); + } + + var header; + for (var prop in headers) { // eslint-disable-line no-restricted-syntax + if (hasOwn(headers, prop)) { + header = headers[prop]; + + // skip nullish headers. + if (header == null) { + continue; // eslint-disable-line no-restricted-syntax, no-continue + } + + // convert all headers to arrays. + if (!Array.isArray(header)) { + header = [header]; + } + + // add non-empty headers. + if (header.length) { + contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; + } + } + } + + return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; +}; + +FormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return + var filename; + + if (typeof options.filepath === 'string') { + // custom filepath for relative paths + filename = path.normalize(options.filepath).replace(/\\/g, '/'); + } else if (options.filename || (value && (value.name || value.path))) { + /* + * custom filename take precedence + * formidable and the browser add a name property + * fs- and request- streams have path property + */ + filename = path.basename(options.filename || (value && (value.name || value.path))); + } else if (value && value.readable && hasOwn(value, 'httpVersion')) { + // or try http response + filename = path.basename(value.client._httpMessage.path || ''); + } + + if (filename) { + return 'filename="' + filename + '"'; + } +}; + +FormData.prototype._getContentType = function (value, options) { + // use custom content-type above all + var contentType = options.contentType; + + // or try `name` from formidable, browser + if (!contentType && value && value.name) { + contentType = mime.lookup(value.name); + } + + // or try `path` from fs-, request- streams + if (!contentType && value && value.path) { + contentType = mime.lookup(value.path); + } + + // or if it's http-reponse + if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) { + contentType = value.headers['content-type']; + } + + // or guess it from the filepath or filename + if (!contentType && (options.filepath || options.filename)) { + contentType = mime.lookup(options.filepath || options.filename); + } + + // fallback to the default content type if `value` is not simple value + if (!contentType && value && typeof value === 'object') { + contentType = FormData.DEFAULT_CONTENT_TYPE; + } + + return contentType; +}; + +FormData.prototype._multiPartFooter = function () { + return function (next) { + var footer = FormData.LINE_BREAK; + + var lastPart = this._streams.length === 0; + if (lastPart) { + footer += this._lastBoundary(); + } + + next(footer); + }.bind(this); +}; + +FormData.prototype._lastBoundary = function () { + return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; +}; + +FormData.prototype.getHeaders = function (userHeaders) { + var header; + var formHeaders = { + 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + }; + + for (header in userHeaders) { // eslint-disable-line no-restricted-syntax + if (hasOwn(userHeaders, header)) { + formHeaders[header.toLowerCase()] = userHeaders[header]; + } + } + + return formHeaders; +}; + +FormData.prototype.setBoundary = function (boundary) { + if (typeof boundary !== 'string') { + throw new TypeError('FormData boundary must be a string'); + } + this._boundary = boundary; +}; + +FormData.prototype.getBoundary = function () { + if (!this._boundary) { + this._generateBoundary(); + } + + return this._boundary; +}; + +FormData.prototype.getBuffer = function () { + var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap + var boundary = this.getBoundary(); + + // Create the form content. Add Line breaks to the end of data. + for (var i = 0, len = this._streams.length; i < len; i++) { + if (typeof this._streams[i] !== 'function') { + // Add content to the buffer. + if (Buffer.isBuffer(this._streams[i])) { + dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]); + } else { + dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]); + } + + // Add break after content. + if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) { + dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]); + } + } + } + + // Add the footer and return the Buffer object. + return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]); +}; + +FormData.prototype._generateBoundary = function () { + // This generates a 50 character boundary similar to those used by Firefox. + + // They are optimized for boyer-moore parsing. + this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex'); +}; + +// Note: getLengthSync DOESN'T calculate streams length +// As workaround one can calculate file size manually and add it as knownLength option +FormData.prototype.getLengthSync = function () { + var knownLength = this._overheadLength + this._valueLength; + + // Don't get confused, there are 3 "internal" streams for each keyval pair so it basically checks if there is any value added to the form + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + // https://github.com/form-data/form-data/issues/40 + if (!this.hasKnownLength()) { + /* + * Some async length retrievers are present + * therefore synchronous length calculation is false. + * Please use getLength(callback) to get proper length + */ + this._error(new Error('Cannot calculate proper length in synchronous way.')); + } + + return knownLength; +}; + +// Public API to check if length of added values is known +// https://github.com/form-data/form-data/issues/196 +// https://github.com/form-data/form-data/issues/262 +FormData.prototype.hasKnownLength = function () { + var hasKnownLength = true; + + if (this._valuesToMeasure.length) { + hasKnownLength = false; + } + + return hasKnownLength; +}; + +FormData.prototype.getLength = function (cb) { + var knownLength = this._overheadLength + this._valueLength; + + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + if (!this._valuesToMeasure.length) { + process.nextTick(cb.bind(this, null, knownLength)); + return; + } + + asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) { + if (err) { + cb(err); + return; + } + + values.forEach(function (length) { + knownLength += length; + }); + + cb(null, knownLength); + }); +}; + +FormData.prototype.submit = function (params, cb) { + var request; + var options; + var defaults = { method: 'post' }; + + // parse provided url if it's string or treat it as options object + if (typeof params === 'string') { + params = parseUrl(params); // eslint-disable-line no-param-reassign + /* eslint sort-keys: 0 */ + options = populate({ + port: params.port, + path: params.pathname, + host: params.hostname, + protocol: params.protocol + }, defaults); + } else { // use custom params + options = populate(params, defaults); + // if no port provided use default one + if (!options.port) { + options.port = options.protocol === 'https:' ? 443 : 80; + } + } + + // put that good code in getHeaders to some use + options.headers = this.getHeaders(params.headers); + + // https if specified, fallback to http in any other case + if (options.protocol === 'https:') { + request = https.request(options); + } else { + request = http.request(options); + } + + // get content length and fire away + this.getLength(function (err, length) { + if (err && err !== 'Unknown stream') { + this._error(err); + return; + } + + // add content length + if (length) { + request.setHeader('Content-Length', length); + } + + this.pipe(request); + if (cb) { + var onResponse; + + var callback = function (error, responce) { + request.removeListener('error', callback); + request.removeListener('response', onResponse); + + return cb.call(this, error, responce); + }; + + onResponse = callback.bind(this, null); + + request.on('error', callback); + request.on('response', onResponse); + } + }.bind(this)); + + return request; +}; + +FormData.prototype._error = function (err) { + if (!this.error) { + this.error = err; + this.pause(); + this.emit('error', err); + } +}; + +FormData.prototype.toString = function () { + return '[object FormData]'; +}; +setToStringTag(FormData.prototype, 'FormData'); + +// Public API +module.exports = FormData; diff --git a/node_modules/form-data/lib/populate.js b/node_modules/form-data/lib/populate.js new file mode 100644 index 00000000..55ac3bb2 --- /dev/null +++ b/node_modules/form-data/lib/populate.js @@ -0,0 +1,10 @@ +'use strict'; + +// populates missing values +module.exports = function (dst, src) { + Object.keys(src).forEach(function (prop) { + dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign + }); + + return dst; +}; diff --git a/node_modules/form-data/node_modules/mime-db/HISTORY.md b/node_modules/form-data/node_modules/mime-db/HISTORY.md new file mode 100644 index 00000000..7436f641 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-db/HISTORY.md @@ -0,0 +1,507 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + +1.51.0 / 2021-11-08 +=================== + + * Add new upstream MIME types + * Mark `image/vnd.microsoft.icon` as compressible + * Mark `image/vnd.ms-dds` as compressible + +1.50.0 / 2021-09-15 +=================== + + * Add deprecated iWorks mime types and extensions + * Add new upstream MIME types + +1.49.0 / 2021-07-26 +=================== + + * Add extension `.trig` to `application/trig` + * Add new upstream MIME types + +1.48.0 / 2021-05-30 +=================== + + * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + * Add new upstream MIME types + * Mark `text/yaml` as compressible + +1.47.0 / 2021-04-01 +=================== + + * Add new upstream MIME types + * Remove ambigious extensions from IANA for `application/*+xml` types + * Update primary extension to `.es` for `application/ecmascript` + +1.46.0 / 2021-02-13 +=================== + + * Add extension `.amr` to `audio/amr` + * Add extension `.m4s` to `video/iso.segment` + * Add extension `.opus` to `audio/ogg` + * Add new upstream MIME types + +1.45.0 / 2020-09-22 +=================== + + * Add `application/ubjson` with extension `.ubj` + * Add `image/avif` with extension `.avif` + * Add `image/ktx2` with extension `.ktx2` + * Add extension `.dbf` to `application/vnd.dbf` + * Add extension `.rar` to `application/vnd.rar` + * Add extension `.td` to `application/urc-targetdesc+xml` + * Add new upstream MIME types + * Fix extension of `application/vnd.apple.keynote` to be `.key` + +1.44.0 / 2020-04-22 +=================== + + * Add charsets from IANA + * Add extension `.cjs` to `application/node` + * Add new upstream MIME types + +1.43.0 / 2020-01-05 +=================== + + * Add `application/x-keepass2` with extension `.kdbx` + * Add extension `.mxmf` to `audio/mobile-xmf` + * Add extensions from IANA for `application/*+xml` types + * Add new upstream MIME types + +1.42.0 / 2019-09-25 +=================== + + * Add `image/vnd.ms-dds` with extension `.dds` + * Add new upstream MIME types + * Remove compressible from `multipart/mixed` + +1.41.0 / 2019-08-30 +=================== + + * Add new upstream MIME types + * Add `application/toml` with extension `.toml` + * Mark `font/ttf` as compressible + +1.40.0 / 2019-04-20 +=================== + + * Add extensions from IANA for `model/*` types + * Add `text/mdx` with extension `.mdx` + +1.39.0 / 2019-04-04 +=================== + + * Add extensions `.siv` and `.sieve` to `application/sieve` + * Add new upstream MIME types + +1.38.0 / 2019-02-04 +=================== + + * Add extension `.nq` to `application/n-quads` + * Add extension `.nt` to `application/n-triples` + * Add new upstream MIME types + * Mark `text/less` as compressible + +1.37.0 / 2018-10-19 +=================== + + * Add extensions to HEIC image types + * Add new upstream MIME types + +1.36.0 / 2018-08-20 +=================== + + * Add Apple file extensions from IANA + * Add extensions from IANA for `image/*` types + * Add new upstream MIME types + +1.35.0 / 2018-07-15 +=================== + + * Add extension `.owl` to `application/rdf+xml` + * Add new upstream MIME types + - Removes extension `.woff` from `application/font-woff` + +1.34.0 / 2018-06-03 +=================== + + * Add extension `.csl` to `application/vnd.citationstyles.style+xml` + * Add extension `.es` to `application/ecmascript` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/turtle` + * Mark all XML-derived types as compressible + +1.33.0 / 2018-02-15 +=================== + + * Add extensions from IANA for `message/*` types + * Add new upstream MIME types + * Fix some incorrect OOXML types + * Remove `application/font-woff2` + +1.32.0 / 2017-11-29 +=================== + + * Add new upstream MIME types + * Update `text/hjson` to registered `application/hjson` + * Add `text/shex` with extension `.shex` + +1.31.0 / 2017-10-25 +=================== + + * Add `application/raml+yaml` with extension `.raml` + * Add `application/wasm` with extension `.wasm` + * Add new `font` type from IANA + * Add new upstream font extensions + * Add new upstream MIME types + * Add extensions for JPEG-2000 images + +1.30.0 / 2017-08-27 +=================== + + * Add `application/vnd.ms-outlook` + * Add `application/x-arj` + * Add extension `.mjs` to `application/javascript` + * Add glTF types and extensions + * Add new upstream MIME types + * Add `text/x-org` + * Add VirtualBox MIME types + * Fix `source` records for `video/*` types that are IANA + * Update `font/opentype` to registered `font/otf` + +1.29.0 / 2017-07-10 +=================== + + * Add `application/fido.trusted-apps+json` + * Add extension `.wadl` to `application/vnd.sun.wadl+xml` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/css` + +1.28.0 / 2017-05-14 +=================== + + * Add new upstream MIME types + * Add extension `.gz` to `application/gzip` + * Update extensions `.md` and `.markdown` to be `text/markdown` + +1.27.0 / 2017-03-16 +=================== + + * Add new upstream MIME types + * Add `image/apng` with extension `.apng` + +1.26.0 / 2017-01-14 +=================== + + * Add new upstream MIME types + * Add extension `.geojson` to `application/geo+json` + +1.25.0 / 2016-11-11 +=================== + + * Add new upstream MIME types + +1.24.0 / 2016-09-18 +=================== + + * Add `audio/mp3` + * Add new upstream MIME types + +1.23.0 / 2016-05-01 +=================== + + * Add new upstream MIME types + * Add extension `.3gpp` to `audio/3gpp` + +1.22.0 / 2016-02-15 +=================== + + * Add `text/slim` + * Add extension `.rng` to `application/xml` + * Add new upstream MIME types + * Fix extension of `application/dash+xml` to be `.mpd` + * Update primary extension to `.m4a` for `audio/mp4` + +1.21.0 / 2016-01-06 +=================== + + * Add Google document types + * Add new upstream MIME types + +1.20.0 / 2015-11-10 +=================== + + * Add `text/x-suse-ymp` + * Add new upstream MIME types + +1.19.0 / 2015-09-17 +=================== + + * Add `application/vnd.apple.pkpass` + * Add new upstream MIME types + +1.18.0 / 2015-09-03 +=================== + + * Add new upstream MIME types + +1.17.0 / 2015-08-13 +=================== + + * Add `application/x-msdos-program` + * Add `audio/g711-0` + * Add `image/vnd.mozilla.apng` + * Add extension `.exe` to `application/x-msdos-program` + +1.16.0 / 2015-07-29 +=================== + + * Add `application/vnd.uri-map` + +1.15.0 / 2015-07-13 +=================== + + * Add `application/x-httpd-php` + +1.14.0 / 2015-06-25 +=================== + + * Add `application/scim+json` + * Add `application/vnd.3gpp.ussd+xml` + * Add `application/vnd.biopax.rdf+xml` + * Add `text/x-processing` + +1.13.0 / 2015-06-07 +=================== + + * Add nginx as a source + * Add `application/x-cocoa` + * Add `application/x-java-archive-diff` + * Add `application/x-makeself` + * Add `application/x-perl` + * Add `application/x-pilot` + * Add `application/x-redhat-package-manager` + * Add `application/x-sea` + * Add `audio/x-m4a` + * Add `audio/x-realaudio` + * Add `image/x-jng` + * Add `text/mathml` + +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/form-data/node_modules/mime-db/LICENSE b/node_modules/form-data/node_modules/mime-db/LICENSE new file mode 100644 index 00000000..0751cb10 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-db/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/form-data/node_modules/mime-db/README.md b/node_modules/form-data/node_modules/mime-db/README.md new file mode 100644 index 00000000..5a8fcfe4 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-db/README.md @@ -0,0 +1,100 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a large database of mime types and information about them. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +### Database Download + +If you're crazy enough to use this in the browser, you can just grab the +JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to +replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) +as the JSON format may change in the future. + +``` +https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json +``` + +## Usage + +```js +var db = require('mime-db') + +// grab data on .js files +var data = db['application/javascript'] +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) + - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom-types.json` or +`src/custom-suffix.json`. + +The `src/custom-types.json` file is a JSON object with the MIME type as the +keys and the values being an object with the following keys: + +- `compressible` - leave out if you don't know, otherwise `true`/`false` to + indicate whether the data represented by the type is typically compressible. +- `extensions` - include an array of file extensions that are associated with + the type. +- `notes` - human-readable notes about the type, typically what the type is. +- `sources` - include an array of URLs of where the MIME type and the associated + extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); + links to type aggregating sites and Wikipedia are _not acceptable_. + +To update the build, run `npm run build`. + +### Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +If that is not possible / feasible, they can be added directly here as a +"custom" type. To do this, it is required to have a primary source that +definitively lists the media type. If an extension is going to be listed as +associateed with this media type, the source must definitively link the +media type and extension as well. + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci +[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://badgen.net/npm/node/mime-db +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-db +[npm-url]: https://npmjs.org/package/mime-db +[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/node_modules/form-data/node_modules/mime-db/db.json b/node_modules/form-data/node_modules/mime-db/db.json new file mode 100644 index 00000000..eb9c42c4 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-db/db.json @@ -0,0 +1,8519 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true + }, + "application/a2l": { + "source": "iana" + }, + "application/ace+cbor": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/at+jwt": { + "source": "iana" + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"] + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-dynamic-event-message": { + "source": "iana" + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"] + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/captive+json": { + "source": "iana", + "compressible": true + }, + "application/cbor": { + "source": "iana" + }, + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true + }, + "application/cfw": { + "source": "iana" + }, + "application/city+json": { + "source": "iana", + "compressible": true + }, + "application/clr": { + "source": "iana" + }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cpl"] + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana", + "compressible": true + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cwt": { + "source": "iana" + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"] + }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"] + }, + "application/dots+cbor": { + "source": "iana" + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["es","ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/elm+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana", + "compressible": true + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, + "application/express": { + "source": "iana", + "extensions": ["exp"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true + }, + "application/fits": { + "source": "iana" + }, + "application/flexfec": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/geo+json-seq": { + "source": "iana" + }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"] + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"] + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"] + }, + "application/manifest+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpf"] + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mipc": { + "source": "iana" + }, + "application/missing-blocks+cbor-seq": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true + }, + "application/msc-ivr+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msc-mixer+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/multipart-core": { + "source": "iana" + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"] + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-groupinfo": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"] + }, + "application/nss": { + "source": "iana" + }, + "application/oauth-authz-req+jwt": { + "source": "iana" + }, + "application/oblivious-dns-message": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true + }, + "application/oscore": { + "source": "iana" + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p21": { + "source": "iana" + }, + "application/p21+zip": { + "source": "iana", + "compressible": false + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"] + }, + "application/parityfec": { + "source": "iana" + }, + "application/passport": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pem-certificate-chain": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana", + "extensions": ["asc"] + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pidf-diff+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkcs8-encrypted": { + "source": "iana" + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana", + "compressible": true + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT" + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"] + }, + "application/pvd+json": { + "source": "iana", + "compressible": true + }, + "application/qsig": { + "source": "iana" + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf","owl"] + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"] + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-publication": { + "source": "iana" + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sarif+json": { + "source": "iana", + "compressible": true + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true + }, + "application/sbe": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/secevent+jwt": { + "source": "iana" + }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-etch+cbor": { + "source": "iana" + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv","sieve"] + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/sipc": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"] + }, + "application/spdx+json": { + "source": "iana", + "compressible": true + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"] + }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/td+json": { + "source": "iana", + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei","teicorpus"] + }, + "application/tetra_isi": { + "source": "iana" + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/token-introspection+jwt": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, + "application/trig": { + "source": "iana", + "extensions": ["trig"] + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"] + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"] + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["td"] + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana" + }, + "application/vnd.3gpp.5gnas": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gtpc": { + "source": "iana" + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana" + }, + "application/vnd.3gpp.lpp": { + "source": "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ngap": { + "source": "iana" + }, + "application/vnd.3gpp.pfcp": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.s1ap": { + "source": "iana" + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"] + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.arrow.file": { + "source": "iana" + }, + "application/vnd.apache.arrow.stream": { + "source": "iana" + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"] + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bint.med-content": { + "source": "iana" + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.ciedi": { + "source": "iana" + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"] + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana" + }, + "application/vnd.cryptomator.vault": { + "source": "iana" + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.d3m-dataset": { + "source": "iana" + }, + "application/vnd.d3m-problem": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"] + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume.movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.efi.img": { + "source": "iana" + }, + "application/vnd.efi.iso": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.slides": { + "source": "iana" + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las": { + "source": "iana" + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"] + }, + "application/vnd.laszip": { + "source": "iana" + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana", + "extensions": ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nebumind.line": { + "source": "iana" + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nimn": { + "source": "iana" + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.ocf+cbor": { + "source": "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+cbor": { + "source": "iana" + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { + "source": "iana" + }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"] + }, + "application/vnd.opentimestamps.ots": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { + "source": "iana" + }, + "application/vnd.patientecommsdoc": { + "source": "iana" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.psfs": { + "source": "iana" + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana", + "extensions": ["rar"] + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.resilient.logic": { + "source": "iana" + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sar": { + "source": "iana" + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shade-save-file": { + "source": "iana" + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shp": { + "source": "iana" + }, + "application/vnd.shx": { + "source": "iana" + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.snesdev-page-table": { + "source": "iana" + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sqlite3": { + "source": "iana" + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"] + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.dpp": { + "source": "iana" + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.youtube.yt": { + "source": "iana" + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"] + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"] + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wif"] + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-pki-message": { + "source": "iana" + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "iana", + "extensions": ["der","crt","pem"] + }, + "application/x-x509-ca-ra-cert": { + "source": "iana" + }, + "application/x-x509-next-ca-cert": { + "source": "iana" + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"] + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"] + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"] + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"] + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsl","xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "application/zstd": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/aac": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana", + "extensions": ["amr"] + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/flexfec": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/melp": { + "source": "iana" + }, + "audio/melp1200": { + "source": "iana" + }, + "audio/melp2400": { + "source": "iana" + }, + "audio/melp600": { + "source": "iana" + }, + "audio/mhas": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"] + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx","opus"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/scip": { + "source": "iana" + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sofa": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tetra_acelp_bb": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/tsvcis": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/usac": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"] + }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, + "image/apng": { + "compressible": false, + "extensions": ["apng"] + }, + "image/avci": { + "source": "iana", + "extensions": ["avci"] + }, + "image/avcs": { + "source": "iana", + "extensions": ["avcs"] + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"] + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"] + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"] + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"] + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"] + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm"] + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"] + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"] + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif","tiff"] + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"] + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"] + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "compressible": true, + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "compressible": true, + "extensions": ["dds"] + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"] + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"] + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"] + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification" + ] + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"] + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"] + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"] + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"] + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/e57": { + "source": "iana" + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"] + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"] + }, + "model/step": { + "source": "iana" + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"] + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"] + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.pytha.pyox": { + "source": "iana" + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"] + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"] + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"] + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"] + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/cql": { + "source": "iana" + }, + "text/cql-expression": { + "source": "iana" + }, + "text/cql-identifier": { + "source": "iana" + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fhirpath": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/gff3": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "compressible": true, + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana", + "charset": "UTF-8" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana", + "charset": "UTF-8" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/shaclc": { + "source": "iana" + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"] + }, + "text/strings": { + "source": "iana" + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"] + }, + "text/vnd.ficlab.flt": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.gml": { + "source": "iana" + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.hans": { + "source": "iana" + }, + "text/vnd.hgl": { + "source": "iana" + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sosi": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "compressible": true, + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "iana" + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "iana" + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"] + }, + "video/av1": { + "source": "iana" + }, + "video/bmpeg": { + "source": "iana" + }, + "video/bt656": { + "source": "iana" + }, + "video/celb": { + "source": "iana" + }, + "video/dv": { + "source": "iana" + }, + "video/encaprtp": { + "source": "iana" + }, + "video/ffv1": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"] + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "iana" + }, + "video/h263-2000": { + "source": "iana" + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "iana" + }, + "video/h264-svc": { + "source": "iana" + }, + "video/h265": { + "source": "iana" + }, + "video/iso.segment": { + "source": "iana", + "extensions": ["m4s"] + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "iana" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/jxsv": { + "source": "iana" + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "iana" + }, + "video/mp2p": { + "source": "iana" + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "iana" + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "iana" + }, + "video/mpv": { + "source": "iana" + }, + "video/nv": { + "source": "iana" + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "iana" + }, + "video/pointer": { + "source": "iana" + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "iana" + }, + "video/raw": { + "source": "iana" + }, + "video/rtp-enc-aescm128": { + "source": "iana" + }, + "video/rtploopback": { + "source": "iana" + }, + "video/rtx": { + "source": "iana" + }, + "video/scip": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" + }, + "video/smpte292m": { + "source": "iana" + }, + "video/ulpfec": { + "source": "iana" + }, + "video/vc1": { + "source": "iana" + }, + "video/vc2": { + "source": "iana" + }, + "video/vnd.cctv": { + "source": "iana" + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "iana" + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "iana" + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana" + }, + "video/vnd.motorola.video": { + "source": "iana" + }, + "video/vnd.motorola.videop": { + "source": "iana" + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" + }, + "video/vnd.nokia.videovoip": { + "source": "iana" + }, + "video/vnd.objectvideo": { + "source": "iana" + }, + "video/vnd.radgamettools.bink": { + "source": "iana" + }, + "video/vnd.radgamettools.smacker": { + "source": "iana" + }, + "video/vnd.sealed.mpeg1": { + "source": "iana" + }, + "video/vnd.sealed.mpeg4": { + "source": "iana" + }, + "video/vnd.sealed.swf": { + "source": "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana" + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"] + }, + "video/vnd.youtube.yt": { + "source": "iana" + }, + "video/vp8": { + "source": "iana" + }, + "video/vp9": { + "source": "iana" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/form-data/node_modules/mime-db/index.js b/node_modules/form-data/node_modules/mime-db/index.js new file mode 100644 index 00000000..ec2be30d --- /dev/null +++ b/node_modules/form-data/node_modules/mime-db/index.js @@ -0,0 +1,12 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/form-data/node_modules/mime-db/package.json b/node_modules/form-data/node_modules/mime-db/package.json new file mode 100644 index 00000000..32c14b84 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-db/package.json @@ -0,0 +1,60 @@ +{ + "name": "mime-db", + "description": "Media Type Database", + "version": "1.52.0", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)", + "Robert Kieffer (http://github.com/broofa)" + ], + "license": "MIT", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "repository": "jshttp/mime-db", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.3", + "eslint": "7.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.1", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "media-typer": "1.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0", + "raw-body": "2.5.0", + "stream-to-array": "2.3.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/node_modules/form-data/node_modules/mime-types/HISTORY.md b/node_modules/form-data/node_modules/mime-types/HISTORY.md new file mode 100644 index 00000000..c5043b75 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-types/HISTORY.md @@ -0,0 +1,397 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + +2.1.34 / 2021-11-08 +=================== + + * deps: mime-db@1.51.0 + - Add new upstream MIME types + +2.1.33 / 2021-10-01 +=================== + + * deps: mime-db@1.50.0 + - Add deprecated iWorks mime types and extensions + - Add new upstream MIME types + +2.1.32 / 2021-07-27 +=================== + + * deps: mime-db@1.49.0 + - Add extension `.trig` to `application/trig` + - Add new upstream MIME types + +2.1.31 / 2021-06-01 +=================== + + * deps: mime-db@1.48.0 + - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + - Add new upstream MIME types + +2.1.30 / 2021-04-02 +=================== + + * deps: mime-db@1.47.0 + - Add extension `.amr` to `audio/amr` + - Remove ambigious extensions from IANA for `application/*+xml` types + - Update primary extension to `.es` for `application/ecmascript` + +2.1.29 / 2021-02-17 +=================== + + * deps: mime-db@1.46.0 + - Add extension `.amr` to `audio/amr` + - Add extension `.m4s` to `video/iso.segment` + - Add extension `.opus` to `audio/ogg` + - Add new upstream MIME types + +2.1.28 / 2021-01-01 +=================== + + * deps: mime-db@1.45.0 + - Add `application/ubjson` with extension `.ubj` + - Add `image/avif` with extension `.avif` + - Add `image/ktx2` with extension `.ktx2` + - Add extension `.dbf` to `application/vnd.dbf` + - Add extension `.rar` to `application/vnd.rar` + - Add extension `.td` to `application/urc-targetdesc+xml` + - Add new upstream MIME types + - Fix extension of `application/vnd.apple.keynote` to be `.key` + +2.1.27 / 2020-04-23 +=================== + + * deps: mime-db@1.44.0 + - Add charsets from IANA + - Add extension `.cjs` to `application/node` + - Add new upstream MIME types + +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + +2.1.15 / 2017-03-23 +=================== + + * deps: mime-db@~1.27.0 + - Add new mime types + - Add `image/apng` + +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/form-data/node_modules/mime-types/LICENSE b/node_modules/form-data/node_modules/mime-types/LICENSE new file mode 100644 index 00000000..06166077 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/form-data/node_modules/mime-types/README.md b/node_modules/form-data/node_modules/mime-types/README.md new file mode 100644 index 00000000..48d2fb47 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-types/README.md @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/node_modules/form-data/node_modules/mime-types/index.js b/node_modules/form-data/node_modules/mime-types/index.js new file mode 100644 index 00000000..b9f34d59 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var db = require('mime-db') +var extname = require('path').extname + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} diff --git a/node_modules/form-data/node_modules/mime-types/package.json b/node_modules/form-data/node_modules/mime-types/package.json new file mode 100644 index 00000000..bbef6964 --- /dev/null +++ b/node_modules/form-data/node_modules/mime-types/package.json @@ -0,0 +1,44 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "2.1.35", + "contributors": [ + "Douglas Christopher Wilson ", + "Jeremiah Senkpiel (https://searchbeam.jit.su)", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "keywords": [ + "mime", + "types" + ], + "repository": "jshttp/mime-types", + "dependencies": { + "mime-db": "1.52.0" + }, + "devDependencies": { + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/node_modules/form-data/package.json b/node_modules/form-data/package.json new file mode 100644 index 00000000..f8d6117a --- /dev/null +++ b/node_modules/form-data/package.json @@ -0,0 +1,82 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "form-data", + "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", + "version": "4.0.5", + "repository": { + "type": "git", + "url": "git://github.com/form-data/form-data.git" + }, + "main": "./lib/form_data", + "browser": "./lib/browser", + "typings": "./index.d.ts", + "scripts": { + "pretest": "npm run lint", + "pretests-only": "rimraf coverage test/tmp", + "tests-only": "istanbul cover test/run.js", + "posttests-only": "istanbul report lcov text", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "lint": "eslint --ext=js,mjs .", + "report": "istanbul report lcov text", + "ci-lint": "is-node-modern 8 && npm run lint || is-node-not-modern 8", + "ci-test": "npm run tests-only && npm run browser && npm run report", + "predebug": "rimraf coverage test/tmp", + "debug": "verbose=1 ./test/run.js", + "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", + "check": "istanbul check-coverage coverage/coverage*.json", + "files": "pkgfiles --sort=name", + "get-version": "node -e \"console.log(require('./package.json').version)\"", + "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md", + "postupdate-readme": "mv README.md.bak READ.ME.md.bak", + "restore-readme": "mv READ.ME.md.bak README.md", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepack": "npm run update-readme", + "postpack": "npm run restore-readme", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "engines": { + "node": ">= 6" + }, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.4.0", + "auto-changelog": "^2.5.0", + "browserify": "^13.3.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^3.1.1", + "cross-spawn": "^6.0.6", + "eslint": "^8.57.1", + "fake": "^0.2.2", + "far": "^0.0.7", + "formidable": "^1.2.6", + "in-publish": "^2.0.1", + "is-node-modern": "^1.0.0", + "istanbul": "^0.4.5", + "js-randomness-predictor": "^1.5.5", + "obake": "^0.1.2", + "pkgfiles": "^2.3.2", + "pre-commit": "^1.2.2", + "puppeteer": "^1.20.0", + "request": "~2.87.0", + "rimraf": "^2.7.1", + "semver": "^6.3.1", + "tape": "^5.9.0" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + } +} diff --git a/node_modules/has-property-descriptors/.eslintrc b/node_modules/has-property-descriptors/.eslintrc new file mode 100644 index 00000000..2fcc002b --- /dev/null +++ b/node_modules/has-property-descriptors/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": ["GetIntrinsic"], + }], + }, +} diff --git a/node_modules/has-property-descriptors/.github/FUNDING.yml b/node_modules/has-property-descriptors/.github/FUNDING.yml new file mode 100644 index 00000000..817aacf1 --- /dev/null +++ b/node_modules/has-property-descriptors/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-property-descriptors +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/has-property-descriptors/.nycrc b/node_modules/has-property-descriptors/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/node_modules/has-property-descriptors/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/has-property-descriptors/CHANGELOG.md b/node_modules/has-property-descriptors/CHANGELOG.md new file mode 100644 index 00000000..19c8a959 --- /dev/null +++ b/node_modules/has-property-descriptors/CHANGELOG.md @@ -0,0 +1,35 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/inspect-js/has-property-descriptors/compare/v1.0.1...v1.0.2) - 2024-02-12 + +### Commits + +- [Refactor] use `es-define-property` [`f93a8c8`](https://github.com/inspect-js/has-property-descriptors/commit/f93a8c85eba70cbceab500f2619fb5cce73a1805) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`42b0c9d`](https://github.com/inspect-js/has-property-descriptors/commit/42b0c9d1c23e747755f0f2924923c418ea34a9ee) +- [Deps] update `get-intrinsic` [`35e9b46`](https://github.com/inspect-js/has-property-descriptors/commit/35e9b46a7f14331bf0de98b644dd803676746037) + +## [v1.0.1](https://github.com/inspect-js/has-property-descriptors/compare/v1.0.0...v1.0.1) - 2023-10-20 + +### Commits + +- [meta] use `npmignore` to autogenerate an npmignore file [`5bbf4da`](https://github.com/inspect-js/has-property-descriptors/commit/5bbf4dae1b58950d87bb3af508bee7513e640868) +- [actions] update rebase action to use reusable workflow [`3a5585b`](https://github.com/inspect-js/has-property-descriptors/commit/3a5585bf74988f71a8f59e67a07d594e62c51fd8) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`e5c1212`](https://github.com/inspect-js/has-property-descriptors/commit/e5c1212048a8fda549794c47863724ca60b89cae) +- [Dev Deps] update `aud`, `tape` [`e942917`](https://github.com/inspect-js/has-property-descriptors/commit/e942917b6c2f7c090d5623048989cf20d0834ebf) +- [Deps] update `get-intrinsic` [`f4a44ec`](https://github.com/inspect-js/has-property-descriptors/commit/f4a44ec6d94146fa6c550d3c15c31a2062c83ef4) +- [Deps] update `get-intrinsic` [`eeb275b`](https://github.com/inspect-js/has-property-descriptors/commit/eeb275b473e5d72ca843b61ca25cfcb06a5d4300) + +## v1.0.0 - 2022-04-14 + +### Commits + +- Initial implementation, tests [`303559f`](https://github.com/inspect-js/has-property-descriptors/commit/303559f2a72dfe7111573a1aec475ed4a184c35a) +- Initial commit [`3a7ca2d`](https://github.com/inspect-js/has-property-descriptors/commit/3a7ca2dc49f1fff0279a28bb16265e7615e14749) +- read me [`dd73dce`](https://github.com/inspect-js/has-property-descriptors/commit/dd73dce09d89d0f7a4a6e3b1e562a506f979a767) +- npm init [`c1e6557`](https://github.com/inspect-js/has-property-descriptors/commit/c1e655779de632d68cb944c50da6b71bcb7b8c85) +- Only apps should have lockfiles [`e72f7c6`](https://github.com/inspect-js/has-property-descriptors/commit/e72f7c68de534b2d273ee665f8b18d4ecc7f70b0) diff --git a/node_modules/has-property-descriptors/LICENSE b/node_modules/has-property-descriptors/LICENSE new file mode 100644 index 00000000..2e7b9a3e --- /dev/null +++ b/node_modules/has-property-descriptors/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/has-property-descriptors/README.md b/node_modules/has-property-descriptors/README.md new file mode 100644 index 00000000..d81fbd99 --- /dev/null +++ b/node_modules/has-property-descriptors/README.md @@ -0,0 +1,43 @@ +# has-property-descriptors [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD. + +## Example + +```js +var hasPropertyDescriptors = require('has-property-descriptors'); +var assert = require('assert'); + +assert.equal(hasPropertyDescriptors(), true); // will be `false` in IE 6-8, and ES5 engines + +// Arrays can not have their length `[[Defined]]` in some engines +assert.equal(hasPropertyDescriptors.hasArrayLengthDefineBug(), false); // will be `true` in Firefox 4-22, and node v0.6 +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/has-property-descriptors +[npm-version-svg]: https://versionbadg.es/inspect-js/has-property-descriptors.svg +[deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors.svg +[deps-url]: https://david-dm.org/inspect-js/has-property-descriptors +[dev-deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/has-property-descriptors#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/has-property-descriptors.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-property-descriptors.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-property-descriptors.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-property-descriptors +[codecov-image]: https://codecov.io/gh/inspect-js/has-property-descriptors/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-property-descriptors/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-property-descriptors +[actions-url]: https://github.com/inspect-js/has-property-descriptors/actions diff --git a/node_modules/has-property-descriptors/index.js b/node_modules/has-property-descriptors/index.js new file mode 100644 index 00000000..04804379 --- /dev/null +++ b/node_modules/has-property-descriptors/index.js @@ -0,0 +1,22 @@ +'use strict'; + +var $defineProperty = require('es-define-property'); + +var hasPropertyDescriptors = function hasPropertyDescriptors() { + return !!$defineProperty; +}; + +hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { + // node v0.6 has a bug where array lengths can be Set but not Defined + if (!$defineProperty) { + return null; + } + try { + return $defineProperty([], 'length', { value: 1 }).length !== 1; + } catch (e) { + // In Firefox 4-22, defining length on an array throws an exception. + return true; + } +}; + +module.exports = hasPropertyDescriptors; diff --git a/node_modules/has-property-descriptors/package.json b/node_modules/has-property-descriptors/package.json new file mode 100644 index 00000000..7e70218b --- /dev/null +++ b/node_modules/has-property-descriptors/package.json @@ -0,0 +1,77 @@ +{ + "name": "has-property-descriptors", + "version": "1.0.2", + "description": "Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/has-property-descriptors.git" + }, + "keywords": [ + "property", + "descriptors", + "has", + "environment", + "env", + "defineProperty", + "getOwnPropertyDescriptor" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/inspect-js/has-property-descriptors/issues" + }, + "homepage": "https://github.com/inspect-js/has-property-descriptors#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4" + }, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/has-property-descriptors/test/index.js b/node_modules/has-property-descriptors/test/index.js new file mode 100644 index 00000000..7f02bd3e --- /dev/null +++ b/node_modules/has-property-descriptors/test/index.js @@ -0,0 +1,57 @@ +'use strict'; + +var test = require('tape'); + +var hasPropertyDescriptors = require('../'); + +var sentinel = {}; + +test('hasPropertyDescriptors', function (t) { + t.equal(typeof hasPropertyDescriptors, 'function', 'is a function'); + t.equal(typeof hasPropertyDescriptors.hasArrayLengthDefineBug, 'function', '`hasArrayLengthDefineBug` property is a function'); + + var yes = hasPropertyDescriptors(); + t.test('property descriptors', { skip: !yes }, function (st) { + var o = { a: sentinel }; + + st.deepEqual( + Object.getOwnPropertyDescriptor(o, 'a'), + { + configurable: true, + enumerable: true, + value: sentinel, + writable: true + }, + 'has expected property descriptor' + ); + + Object.defineProperty(o, 'a', { enumerable: false, writable: false }); + + st.deepEqual( + Object.getOwnPropertyDescriptor(o, 'a'), + { + configurable: true, + enumerable: false, + value: sentinel, + writable: false + }, + 'has expected property descriptor after [[Define]]' + ); + + st.end(); + }); + + var arrayBug = hasPropertyDescriptors.hasArrayLengthDefineBug(); + t.test('defining array lengths', { skip: !yes || arrayBug }, function (st) { + var arr = [1, , 3]; // eslint-disable-line no-sparse-arrays + st.equal(arr.length, 3, 'array starts with length 3'); + + Object.defineProperty(arr, 'length', { value: 5 }); + + st.equal(arr.length, 5, 'array ends with length 5'); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/has-tostringtag/.eslintrc b/node_modules/has-tostringtag/.eslintrc new file mode 100644 index 00000000..3b5d9e90 --- /dev/null +++ b/node_modules/has-tostringtag/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/has-tostringtag/.github/FUNDING.yml b/node_modules/has-tostringtag/.github/FUNDING.yml new file mode 100644 index 00000000..7a450e70 --- /dev/null +++ b/node_modules/has-tostringtag/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-tostringtag +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/has-tostringtag/.nycrc b/node_modules/has-tostringtag/.nycrc new file mode 100644 index 00000000..1826526e --- /dev/null +++ b/node_modules/has-tostringtag/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/has-tostringtag/CHANGELOG.md b/node_modules/has-tostringtag/CHANGELOG.md new file mode 100644 index 00000000..eb186ec6 --- /dev/null +++ b/node_modules/has-tostringtag/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/inspect-js/has-tostringtag/compare/v1.0.1...v1.0.2) - 2024-02-01 + +### Fixed + +- [Fix] move `has-symbols` back to prod deps [`#3`](https://github.com/inspect-js/has-tostringtag/issues/3) + +## [v1.0.1](https://github.com/inspect-js/has-tostringtag/compare/v1.0.0...v1.0.1) - 2024-02-01 + +### Commits + +- [patch] add types [`9276414`](https://github.com/inspect-js/has-tostringtag/commit/9276414b22fab3eeb234688841722c4be113201f) +- [meta] use `npmignore` to autogenerate an npmignore file [`5c0dcd1`](https://github.com/inspect-js/has-tostringtag/commit/5c0dcd1ff66419562a30d1fd88b966cc36bce5fc) +- [actions] reuse common workflows [`dee9509`](https://github.com/inspect-js/has-tostringtag/commit/dee950904ab5719b62cf8d73d2ac950b09093266) +- [actions] update codecov uploader [`b8cb3a0`](https://github.com/inspect-js/has-tostringtag/commit/b8cb3a0b8ffbb1593012c4c2daa45fb25642825d) +- [Tests] generate coverage [`be5b288`](https://github.com/inspect-js/has-tostringtag/commit/be5b28889e2735cdbcef387f84c2829995f2f05e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`69a0827`](https://github.com/inspect-js/has-tostringtag/commit/69a0827974e9b877b2c75b70b057555da8f25a65) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`4c9e210`](https://github.com/inspect-js/has-tostringtag/commit/4c9e210a5682f0557a3235d36b68ce809d7fb825) +- [actions] update rebase action to use reusable workflow [`ca8dcd3`](https://github.com/inspect-js/has-tostringtag/commit/ca8dcd3a6f3f5805d7e3fd461b654aedba0946e7) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `npmignore`, `tape` [`07f3eaf`](https://github.com/inspect-js/has-tostringtag/commit/07f3eafa45dd98208c94479737da77f9a69b94c4) +- [Deps] update `has-symbols` [`999e009`](https://github.com/inspect-js/has-tostringtag/commit/999e0095a7d1749a58f55472ec8bf8108cdfdcf3) +- [Tests] remove staging tests since they fail on modern node [`9d9526b`](https://github.com/inspect-js/has-tostringtag/commit/9d9526b1dc1ca7f2292b52efda4c3d857b0e39bd) + +## v1.0.0 - 2021-08-05 + +### Commits + +- Tests [`6b6f573`](https://github.com/inspect-js/has-tostringtag/commit/6b6f5734dc2058badb300ff0783efdad95fe1a65) +- Initial commit [`2f8190e`](https://github.com/inspect-js/has-tostringtag/commit/2f8190e799fac32ba9b95a076c0255e01d7ce475) +- [meta] do not publish github action workflow files [`6e08cc4`](https://github.com/inspect-js/has-tostringtag/commit/6e08cc4e0fea7ec71ef66e70734b2af2c4a8b71b) +- readme [`94bed6c`](https://github.com/inspect-js/has-tostringtag/commit/94bed6c9560cbbfda034f8d6c260bb7b0db33c1a) +- npm init [`be67840`](https://github.com/inspect-js/has-tostringtag/commit/be67840ab92ee7adb98bcc65261975543f815fa5) +- Implementation [`c4914ec`](https://github.com/inspect-js/has-tostringtag/commit/c4914ecc51ddee692c85b471ae0a5d8123030fbf) +- [meta] use `auto-changelog` [`4aaf768`](https://github.com/inspect-js/has-tostringtag/commit/4aaf76895ae01d7b739f2b19f967ef2372506cd7) +- Only apps should have lockfiles [`bc4d99e`](https://github.com/inspect-js/has-tostringtag/commit/bc4d99e4bf494afbaa235c5f098df6e642edf724) +- [meta] add `safe-publish-latest` [`6523c05`](https://github.com/inspect-js/has-tostringtag/commit/6523c05c9b87140f3ae74c9daf91633dd9ff4e1f) diff --git a/node_modules/has-tostringtag/LICENSE b/node_modules/has-tostringtag/LICENSE new file mode 100644 index 00000000..7948bc02 --- /dev/null +++ b/node_modules/has-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/has-tostringtag/README.md b/node_modules/has-tostringtag/README.md new file mode 100644 index 00000000..67a5e929 --- /dev/null +++ b/node_modules/has-tostringtag/README.md @@ -0,0 +1,46 @@ +# has-tostringtag [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams. + +## Example + +```js +var hasSymbolToStringTag = require('has-tostringtag'); + +hasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable. + +var hasSymbolToStringTagKinda = require('has-tostringtag/shams'); +hasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-tostringtag +[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg +[5]: https://david-dm.org/inspect-js/has-tostringtag.svg +[6]: https://david-dm.org/inspect-js/has-tostringtag +[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies +[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag +[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag +[actions-url]: https://github.com/inspect-js/has-tostringtag/actions diff --git a/node_modules/has-tostringtag/index.d.ts b/node_modules/has-tostringtag/index.d.ts new file mode 100644 index 00000000..a61bc60a --- /dev/null +++ b/node_modules/has-tostringtag/index.d.ts @@ -0,0 +1,3 @@ +declare function hasToStringTag(): boolean; + +export = hasToStringTag; diff --git a/node_modules/has-tostringtag/index.js b/node_modules/has-tostringtag/index.js new file mode 100644 index 00000000..77bfa007 --- /dev/null +++ b/node_modules/has-tostringtag/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasSymbols = require('has-symbols'); + +/** @type {import('.')} */ +module.exports = function hasToStringTag() { + return hasSymbols() && typeof Symbol.toStringTag === 'symbol'; +}; diff --git a/node_modules/has-tostringtag/package.json b/node_modules/has-tostringtag/package.json new file mode 100644 index 00000000..e5b03002 --- /dev/null +++ b/node_modules/has-tostringtag/package.json @@ -0,0 +1,108 @@ +{ + "name": "has-tostringtag", + "version": "1.0.2", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", + "license": "MIT", + "main": "index.js", + "types": "./index.d.ts", + "exports": { + ".": [ + { + "types": "./index.d.ts", + "default": "./index.js" + }, + "./index.js" + ], + "./shams": [ + { + "types": "./shams.d.ts", + "default": "./shams.js" + }, + "./shams.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "aud --production", + "tests-only": "npm run test:stock && npm run test:shams", + "test:stock": "nyc node test", + "test:staging": "nyc node --harmony --es-staging test", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "lint": "eslint --ext=js,mjs .", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/has-tostringtag.git" + }, + "bugs": { + "url": "https://github.com/inspect-js/has-tostringtag/issues" + }, + "homepage": "https://github.com/inspect-js/has-tostringtag#readme", + "keywords": [ + "javascript", + "ecmascript", + "symbol", + "symbols", + "tostringtag", + "Symbol.toStringTag" + ], + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/has-symbols": "^1.0.2", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "core-js": "^2.6.12", + "eslint": "=8.8.0", + "get-own-property-symbols": "^0.9.5", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "dependencies": { + "has-symbols": "^1.0.3" + } +} diff --git a/node_modules/has-tostringtag/shams.d.ts b/node_modules/has-tostringtag/shams.d.ts new file mode 100644 index 00000000..ea4aeecf --- /dev/null +++ b/node_modules/has-tostringtag/shams.d.ts @@ -0,0 +1,3 @@ +declare function hasToStringTagShams(): boolean; + +export = hasToStringTagShams; diff --git a/node_modules/has-tostringtag/shams.js b/node_modules/has-tostringtag/shams.js new file mode 100644 index 00000000..809580db --- /dev/null +++ b/node_modules/has-tostringtag/shams.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasSymbols = require('has-symbols/shams'); + +/** @type {import('.')} */ +module.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; +}; diff --git a/node_modules/has-tostringtag/test/index.js b/node_modules/has-tostringtag/test/index.js new file mode 100644 index 00000000..0679afdf --- /dev/null +++ b/node_modules/has-tostringtag/test/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var test = require('tape'); +var hasSymbolToStringTag = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbolToStringTag, 'function', 'is a function'); + t.equal(typeof hasSymbolToStringTag(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbol.toStringTag exists', { skip: !hasSymbolToStringTag() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbol.toStringTag does not exist', { skip: hasSymbolToStringTag() }, function (t) { + t.equal(typeof Symbol === 'undefined' ? 'undefined' : typeof Symbol.toStringTag, 'undefined', 'global Symbol.toStringTag is undefined'); + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/shams/core-js.js b/node_modules/has-tostringtag/test/shams/core-js.js new file mode 100644 index 00000000..7ab214da --- /dev/null +++ b/node_modules/has-tostringtag/test/shams/core-js.js @@ -0,0 +1,31 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol') { + test('has native Symbol.toStringTag support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol.toStringTag, 'symbol'); + t.end(); + }); + // @ts-expect-error CJS has top-level return + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + // @ts-expect-error no types defined + require('core-js/fn/symbol'); + // @ts-expect-error no types defined + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js new file mode 100644 index 00000000..c8af44c5 --- /dev/null +++ b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js @@ -0,0 +1,30 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error CJS has top-level return + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + + // @ts-expect-error no types defined + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/tests.js b/node_modules/has-tostringtag/test/tests.js new file mode 100644 index 00000000..2aa0d488 --- /dev/null +++ b/node_modules/has-tostringtag/test/tests.js @@ -0,0 +1,15 @@ +'use strict'; + +// eslint-disable-next-line consistent-return +module.exports = /** @type {(t: import('tape').Test) => void | false} */ function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + t.ok(Symbol.toStringTag, 'Symbol.toStringTag exists'); + + if (typeof Symbol !== 'function' || !Symbol.toStringTag) { return false; } + + /** @type {{ [Symbol.toStringTag]?: 'test'}} */ + var obj = {}; + obj[Symbol.toStringTag] = 'test'; + + t.equal(Object.prototype.toString.call(obj), '[object test]'); +}; diff --git a/node_modules/has-tostringtag/tsconfig.json b/node_modules/has-tostringtag/tsconfig.json new file mode 100644 index 00000000..2002ce5a --- /dev/null +++ b/node_modules/has-tostringtag/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/ieee754/LICENSE b/node_modules/ieee754/LICENSE new file mode 100644 index 00000000..5aac82c7 --- /dev/null +++ b/node_modules/ieee754/LICENSE @@ -0,0 +1,11 @@ +Copyright 2008 Fair Oaks Labs, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/ieee754/README.md b/node_modules/ieee754/README.md new file mode 100644 index 00000000..cb7527b3 --- /dev/null +++ b/node_modules/ieee754/README.md @@ -0,0 +1,51 @@ +# ieee754 [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/ieee754/master.svg +[travis-url]: https://travis-ci.org/feross/ieee754 +[npm-image]: https://img.shields.io/npm/v/ieee754.svg +[npm-url]: https://npmjs.org/package/ieee754 +[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg +[downloads-url]: https://npmjs.org/package/ieee754 +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg +[saucelabs-url]: https://saucelabs.com/u/ieee754 + +### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object. + +## install + +``` +npm install ieee754 +``` + +## methods + +`var ieee754 = require('ieee754')` + +The `ieee754` object has the following functions: + +``` +ieee754.read = function (buffer, offset, isLE, mLen, nBytes) +ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) +``` + +The arguments mean the following: + +- buffer = the buffer +- offset = offset into the buffer +- value = value to set (only for `write`) +- isLe = is little endian? +- mLen = mantissa length +- nBytes = number of bytes + +## what is ieee754? + +The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point). + +## license + +BSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc. diff --git a/node_modules/ieee754/index.d.ts b/node_modules/ieee754/index.d.ts new file mode 100644 index 00000000..f1e43548 --- /dev/null +++ b/node_modules/ieee754/index.d.ts @@ -0,0 +1,10 @@ +declare namespace ieee754 { + export function read( + buffer: Uint8Array, offset: number, isLE: boolean, mLen: number, + nBytes: number): number; + export function write( + buffer: Uint8Array, value: number, offset: number, isLE: boolean, + mLen: number, nBytes: number): void; + } + + export = ieee754; \ No newline at end of file diff --git a/node_modules/ieee754/index.js b/node_modules/ieee754/index.js new file mode 100644 index 00000000..81d26c34 --- /dev/null +++ b/node_modules/ieee754/index.js @@ -0,0 +1,85 @@ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} diff --git a/node_modules/ieee754/package.json b/node_modules/ieee754/package.json new file mode 100644 index 00000000..7b238513 --- /dev/null +++ b/node_modules/ieee754/package.json @@ -0,0 +1,52 @@ +{ + "name": "ieee754", + "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object", + "version": "1.2.1", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "contributors": [ + "Romain Beauxis " + ], + "devDependencies": { + "airtap": "^3.0.0", + "standard": "*", + "tape": "^5.0.1" + }, + "keywords": [ + "IEEE 754", + "buffer", + "convert", + "floating point", + "ieee754" + ], + "license": "BSD-3-Clause", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/ieee754.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "airtap -- test/*.js", + "test-browser-local": "airtap --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/is-callable/.editorconfig b/node_modules/is-callable/.editorconfig new file mode 100644 index 00000000..f5f56790 --- /dev/null +++ b/node_modules/is-callable/.editorconfig @@ -0,0 +1,31 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 150 + +[CHANGELOG.md] +indent_style = space +indent_size = 2 +max_line_length = off + +[README.md] +indent_style = off +indent_size = off +max_line_length = off + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off + +[coverage*/**/*] +indent_style = off +indent_size = off +max_line_length = off diff --git a/node_modules/is-callable/.eslintrc b/node_modules/is-callable/.eslintrc new file mode 100644 index 00000000..ce033bfe --- /dev/null +++ b/node_modules/is-callable/.eslintrc @@ -0,0 +1,10 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "id-length": 0, + "max-statements-per-line": [2, { "max": 2 }], + }, +} diff --git a/node_modules/is-callable/.github/FUNDING.yml b/node_modules/is-callable/.github/FUNDING.yml new file mode 100644 index 00000000..0fdebd06 --- /dev/null +++ b/node_modules/is-callable/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/is-callable +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/is-callable/.nycrc b/node_modules/is-callable/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/node_modules/is-callable/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/is-callable/CHANGELOG.md b/node_modules/is-callable/CHANGELOG.md new file mode 100644 index 00000000..32788cda --- /dev/null +++ b/node_modules/is-callable/CHANGELOG.md @@ -0,0 +1,158 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.7](https://github.com/inspect-js/is-callable/compare/v1.2.6...v1.2.7) - 2022-09-23 + +### Commits + +- [Fix] recognize `document.all` in IE 6-10 [`06c1db2`](https://github.com/inspect-js/is-callable/commit/06c1db2b9b2e0f28428e1293eb572f8f93871ec7) +- [Tests] improve logic for FF 20-35 [`0f7d9b9`](https://github.com/inspect-js/is-callable/commit/0f7d9b9c7fe149ca87e71f0a125ade251a6a578c) +- [Fix] handle `document.all` in FF 27 (and +, probably) [`696c661`](https://github.com/inspect-js/is-callable/commit/696c661b8c0810c2d05ab172f1607f4e77ddf81e) +- [Tests] fix proxy tests in FF 42-63 [`985df0d`](https://github.com/inspect-js/is-callable/commit/985df0dd36f8cfe6f1993657b7c0f4cfc19dae30) +- [readme] update tested browsers [`389e919`](https://github.com/inspect-js/is-callable/commit/389e919493b1cb2010126b0411e5291bf76169bd) +- [Fix] detect `document.all` in Opera 12.16 [`b9f1022`](https://github.com/inspect-js/is-callable/commit/b9f1022b3d7e466b7f09080bd64c253caf644325) +- [Fix] HTML elements: properly report as callable in Opera 12.16 [`17391fe`](https://github.com/inspect-js/is-callable/commit/17391fe02b895777c4337be28dca3b364b743b34) +- [Tests] fix inverted logic in FF3 test [`056ebd4`](https://github.com/inspect-js/is-callable/commit/056ebd48790f46ca18ff5b12f51b44c08ccc3595) + +## [v1.2.6](https://github.com/inspect-js/is-callable/compare/v1.2.5...v1.2.6) - 2022-09-14 + +### Commits + +- [Fix] work for `document.all` in Firefox 3 and IE 6-8 [`015132a`](https://github.com/inspect-js/is-callable/commit/015132aaef886ec777b5b3593ef4ce461dd0c7d4) +- [Test] skip function toString check for nullish values [`8698116`](https://github.com/inspect-js/is-callable/commit/8698116f95eb59df8b48ec8e4585fc1cdd8cae9f) +- [readme] add "supported engines" section [`0442207`](https://github.com/inspect-js/is-callable/commit/0442207a89a1554d41ba36daf21862ef7ccbd500) +- [Tests] skip one of the fixture objects in FF 3.6 [`a501141`](https://github.com/inspect-js/is-callable/commit/a5011410bc6edb276c6ec8b47ce5c5d83c4bee15) +- [Tests] allow `class` constructor tests to fail in FF v45 - v54, which has undetectable classes [`b12e4a4`](https://github.com/inspect-js/is-callable/commit/b12e4a4d8c438678bd7710f9f896680150766b51) +- [Fix] Safari 4: regexes should not be considered callable [`4b732ff`](https://github.com/inspect-js/is-callable/commit/4b732ffa34346db3f0193ea4e46b7d4e637e6c82) +- [Fix] properly recognize `document.all` in Safari 4 [`3193735`](https://github.com/inspect-js/is-callable/commit/319373525dc4603346661641840cd9a3e0613136) + +## [v1.2.5](https://github.com/inspect-js/is-callable/compare/v1.2.4...v1.2.5) - 2022-09-11 + +### Commits + +- [actions] reuse common workflows [`5bb4b32`](https://github.com/inspect-js/is-callable/commit/5bb4b32dc93987328ab4f396601f751c4a7abd62) +- [meta] better `eccheck` command [`b9bd597`](https://github.com/inspect-js/is-callable/commit/b9bd597322b6e3a24c74c09881ca73e1d9f9f485) +- [meta] use `npmignore` to autogenerate an npmignore file [`3192d38`](https://github.com/inspect-js/is-callable/commit/3192d38527c7fc461d05d5aa93d47628e658bc45) +- [Fix] for HTML constructors, always use `tryFunctionObject` even in pre-toStringTag browsers [`3076ea2`](https://github.com/inspect-js/is-callable/commit/3076ea21d1f6ecc1cb711dcf1da08f257892c72b) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `available-typed-arrays`, `object-inspect`, `safe-publish-latest`, `tape` [`8986746`](https://github.com/inspect-js/is-callable/commit/89867464c42adc5cd375ee074a4574b0295442cb) +- [meta] add `auto-changelog` [`7dda9d0`](https://github.com/inspect-js/is-callable/commit/7dda9d04e670a69ae566c8fa596da4ff4371e615) +- [Fix] properly report `document.all` [`da90b2b`](https://github.com/inspect-js/is-callable/commit/da90b2b68dc4f33702c2e01ad07b4f89bcb60984) +- [actions] update codecov uploader [`c8f847c`](https://github.com/inspect-js/is-callable/commit/c8f847c90e04e54ff73c7cfae86e96e94990e324) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` [`899ae00`](https://github.com/inspect-js/is-callable/commit/899ae00b6abd10d81fc8bc7f02b345fd885d5f56) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `es-value-fixtures`, `object-inspect`, `tape` [`344e913`](https://github.com/inspect-js/is-callable/commit/344e913b149609bf741aa7345fa32dc0b90d8893) +- [meta] remove greenkeeper config [`737dce5`](https://github.com/inspect-js/is-callable/commit/737dce5590b1abb16183a63cb9d7d26920b3b394) +- [meta] npmignore coverage output [`680a883`](https://github.com/inspect-js/is-callable/commit/680a8839071bf36a419fe66e1ced7a3303c27b28) + + +1.2.4 / 2021-08-05 +================= + * [Fix] use `has-tostringtag` approach to behave correctly in the presence of symbol shams + * [readme] fix repo URLs + * [readme] add actions and codecov badges + * [readme] remove defunct badges + * [meta] ignore eclint checking coverage output + * [meta] use `prepublishOnly` script for npm 7+ + * [actions] use `node/install` instead of `node/run`; use `codecov` action + * [actions] remove unused workflow file + * [Tests] run `nyc` on all tests; use `tape` runner + * [Tests] use `available-typed-arrays`, `for-each`, `has-symbols`, `object-inspect` + * [Dev Deps] update `available-typed-arrays`, `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` + +1.2.3 / 2021-01-31 +================= + * [Fix] `document.all` is callable (do not use `document.all`!) + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` + * [Tests] migrate tests to Github Actions + * [actions] add "Allow Edits" workflow + * [actions] switch Automatic Rebase workflow to `pull_request_target` event + +1.2.2 / 2020-09-21 +================= + * [Fix] include actual fix from 579179e + * [Dev Deps] update `eslint` + +1.2.1 / 2020-09-09 +================= + * [Fix] phantomjs‘ Reflect.apply does not throw properly on a bad array-like + * [Dev Deps] update `eslint`, `@ljharb/eslint-config` + * [meta] fix eclint error + +1.2.0 / 2020-06-02 +================= + * [New] use `Reflect.apply`‑based callability detection + * [readme] add install instructions (#55) + * [meta] only run `aud` on prod deps + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `make-arrow-function`, `make-generator-function`; add `aud`, `safe-publish-latest`, `make-async-function` + * [Tests] add tests for function proxies (#53, #25) + +1.1.5 / 2019-12-18 +================= + * [meta] remove unused Makefile and associated utilities + * [meta] add `funding` field; add FUNDING.yml + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `semver`, `tape`, `covert`, `rimraf` + * [Tests] use shared travis configs + * [Tests] use `eccheck` over `editorconfig-tools` + * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops + * [Tests] remove `jscs` + * [actions] add automatic rebasing / merge commit blocking + +1.1.4 / 2018-07-02 +================= + * [Fix] improve `class` and arrow function detection (#30, #31) + * [Tests] on all latest node minors; improve matrix + * [Dev Deps] update all dev deps + +1.1.3 / 2016-02-27 +================= + * [Fix] ensure “class “ doesn’t screw up “class” detection + * [Tests] up to `node` `v5.7`, `v4.3` + * [Dev Deps] update to `eslint` v2, `@ljharb/eslint-config`, `jscs` + +1.1.2 / 2016-01-15 +================= + * [Fix] Make sure comments don’t screw up “class” detection (#4) + * [Tests] up to `node` `v5.3` + * [Tests] Add `parallelshell`, run both `--es-staging` and stock tests at once + * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` + * [Refactor] convert `isNonES6ClassFn` into `isES6ClassFn` + +1.1.1 / 2015-11-30 +================= + * [Fix] do not throw when a non-function has a function in its [[Prototype]] (#2) + * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `jscs`, `nsp`, `semver` + * [Tests] up to `node` `v5.1` + * [Tests] no longer allow node 0.8 to fail. + * [Tests] fix npm upgrades in older nodes + +1.1.0 / 2015-10-02 +================= + * [Fix] Some browsers report TypedArray constructors as `typeof object` + * [New] return false for "class" constructors, when possible. + * [Tests] up to `io.js` `v3.3`, `node` `v4.1` + * [Dev Deps] update `eslint`, `editorconfig-tools`, `nsp`, `tape`, `semver`, `jscs`, `covert`, `make-arrow-function` + * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG + +1.0.4 / 2015-01-30 +================= + * If @@toStringTag is not present, use the old-school Object#toString test. + +1.0.3 / 2015-01-29 +================= + * Add tests to ensure arrow functions are callable. + * Refactor to aid optimization of non-try/catch code. + +1.0.2 / 2015-01-29 +================= + * Fix broken package.json + +1.0.1 / 2015-01-29 +================= + * Add early exit for typeof not "function" + +1.0.0 / 2015-01-29 +================= + * Initial release. diff --git a/node_modules/is-callable/LICENSE b/node_modules/is-callable/LICENSE new file mode 100644 index 00000000..b43df444 --- /dev/null +++ b/node_modules/is-callable/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/is-callable/README.md b/node_modules/is-callable/README.md new file mode 100644 index 00000000..4f2b6d6f --- /dev/null +++ b/node_modules/is-callable/README.md @@ -0,0 +1,83 @@ +# is-callable [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag. + +## Supported engines +Automatically tested in every minor version of node. + +Manually tested in: + - Safari: v4 - v15 (4, 5, 5.1, 6.0.5, 6.2, 7.1, 8, 9.1.3, 10.1.2, 11.1.2, 12.1, 13.1.2, 14.1.2, 15.3, 15.6.1) + - Note: Safari 9 has `class`, but `Function.prototype.toString` hides that progeny and makes them look like functions, so `class` constructors will be reported by this package as callable, when they are not in fact callable. + - Chrome: v15 - v81, v83 - v106(every integer version) + - Note: This includes Edge v80+ and Opera v15+, which matches Chrome + - Firefox: v3, v3.6, v4 - v105 (every integer version) + - Note: v45 - v54 has `class`, but `Function.prototype.toString` hides that progeny and makes them look like functions, so `class` constructors will be reported by this package as callable, when they are not in fact callable. + - Note: in v42 - v63, `Function.prototype.toString` throws on HTML element constructors, or a Proxy to a function + - Note: in v20 - v35, HTML element constructors are not callable, despite having typeof `function`. + - Note: in v19, `document.all` is not callable. + - IE: v6 - v11(every integer version + - Opera: v11.1, v11.5, v11.6, v12.1, v12.14, v12.15, v12.16, v15+ v15+ matches Chrome + +## Example + +```js +var isCallable = require('is-callable'); +var assert = require('assert'); + +assert.notOk(isCallable(undefined)); +assert.notOk(isCallable(null)); +assert.notOk(isCallable(false)); +assert.notOk(isCallable(true)); +assert.notOk(isCallable([])); +assert.notOk(isCallable({})); +assert.notOk(isCallable(/a/g)); +assert.notOk(isCallable(new RegExp('a', 'g'))); +assert.notOk(isCallable(new Date())); +assert.notOk(isCallable(42)); +assert.notOk(isCallable(NaN)); +assert.notOk(isCallable(Infinity)); +assert.notOk(isCallable(new Number(42))); +assert.notOk(isCallable('foo')); +assert.notOk(isCallable(Object('foo'))); + +assert.ok(isCallable(function () {})); +assert.ok(isCallable(function* () {})); +assert.ok(isCallable(x => x * x)); +``` + +## Install + +Install with + +``` +npm install is-callable +``` + +## Tests + +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/is-callable +[2]: https://versionbadg.es/inspect-js/is-callable.svg +[5]: https://david-dm.org/inspect-js/is-callable.svg +[6]: https://david-dm.org/inspect-js/is-callable +[7]: https://david-dm.org/inspect-js/is-callable/dev-status.svg +[8]: https://david-dm.org/inspect-js/is-callable#info=devDependencies +[11]: https://nodei.co/npm/is-callable.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/is-callable.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/is-callable.svg +[downloads-url]: https://npm-stat.com/charts.html?package=is-callable +[codecov-image]: https://codecov.io/gh/inspect-js/is-callable/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/is-callable/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-callable +[actions-url]: https://github.com/inspect-js/is-callable/actions diff --git a/node_modules/is-callable/index.js b/node_modules/is-callable/index.js new file mode 100644 index 00000000..f2a89f84 --- /dev/null +++ b/node_modules/is-callable/index.js @@ -0,0 +1,101 @@ +'use strict'; + +var fnToStr = Function.prototype.toString; +var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply; +var badArrayLike; +var isCallableMarker; +if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') { + try { + badArrayLike = Object.defineProperty({}, 'length', { + get: function () { + throw isCallableMarker; + } + }); + isCallableMarker = {}; + // eslint-disable-next-line no-throw-literal + reflectApply(function () { throw 42; }, null, badArrayLike); + } catch (_) { + if (_ !== isCallableMarker) { + reflectApply = null; + } + } +} else { + reflectApply = null; +} + +var constructorRegex = /^\s*class\b/; +var isES6ClassFn = function isES6ClassFunction(value) { + try { + var fnStr = fnToStr.call(value); + return constructorRegex.test(fnStr); + } catch (e) { + return false; // not a function + } +}; + +var tryFunctionObject = function tryFunctionToStr(value) { + try { + if (isES6ClassFn(value)) { return false; } + fnToStr.call(value); + return true; + } catch (e) { + return false; + } +}; +var toStr = Object.prototype.toString; +var objectClass = '[object Object]'; +var fnClass = '[object Function]'; +var genClass = '[object GeneratorFunction]'; +var ddaClass = '[object HTMLAllCollection]'; // IE 11 +var ddaClass2 = '[object HTML document.all class]'; +var ddaClass3 = '[object HTMLCollection]'; // IE 9-10 +var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag` + +var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing + +var isDDA = function isDocumentDotAll() { return false; }; +if (typeof document === 'object') { + // Firefox 3 canonicalizes DDA to undefined when it's not accessed directly + var all = document.all; + if (toStr.call(all) === toStr.call(document.all)) { + isDDA = function isDocumentDotAll(value) { + /* globals document: false */ + // in IE 6-8, typeof document.all is "object" and it's truthy + if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) { + try { + var str = toStr.call(value); + return ( + str === ddaClass + || str === ddaClass2 + || str === ddaClass3 // opera 12.16 + || str === objectClass // IE 6-8 + ) && value('') == null; // eslint-disable-line eqeqeq + } catch (e) { /**/ } + } + return false; + }; + } +} + +module.exports = reflectApply + ? function isCallable(value) { + if (isDDA(value)) { return true; } + if (!value) { return false; } + if (typeof value !== 'function' && typeof value !== 'object') { return false; } + try { + reflectApply(value, null, badArrayLike); + } catch (e) { + if (e !== isCallableMarker) { return false; } + } + return !isES6ClassFn(value) && tryFunctionObject(value); + } + : function isCallable(value) { + if (isDDA(value)) { return true; } + if (!value) { return false; } + if (typeof value !== 'function' && typeof value !== 'object') { return false; } + if (hasToStringTag) { return tryFunctionObject(value); } + if (isES6ClassFn(value)) { return false; } + var strClass = toStr.call(value); + if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; } + return tryFunctionObject(value); + }; diff --git a/node_modules/is-callable/package.json b/node_modules/is-callable/package.json new file mode 100644 index 00000000..aa3e8df0 --- /dev/null +++ b/node_modules/is-callable/package.json @@ -0,0 +1,106 @@ +{ + "name": "is-callable", + "version": "1.2.7", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "description": "Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.", + "license": "MIT", + "main": "index.js", + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent lint", + "test": "npm run tests-only --", + "posttest": "aud --production", + "tests-only": "nyc tape 'test/**/*.js'", + "prelint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')", + "lint": "eslint --ext=js,mjs ." + }, + "repository": { + "type": "git", + "url": "git://github.com/inspect-js/is-callable.git" + }, + "keywords": [ + "Function", + "function", + "callable", + "generator", + "generator function", + "arrow", + "arrow function", + "ES6", + "toStringTag", + "@@toStringTag" + ], + "devDependencies": { + "@ljharb/eslint-config": "^21.0.0", + "aud": "^2.0.0", + "auto-changelog": "^2.4.0", + "available-typed-arrays": "^1.0.5", + "eclint": "^2.8.1", + "es-value-fixtures": "^1.4.2", + "eslint": "=8.8.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "make-arrow-function": "^1.2.0", + "make-async-function": "^1.0.0", + "make-generator-function": "^2.0.0", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "object-inspect": "^1.12.2", + "rimraf": "^2.7.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.0" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true, + "startingVersion": "v1.2.5" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/is-callable/test/index.js b/node_modules/is-callable/test/index.js new file mode 100644 index 00000000..bfe5db5c --- /dev/null +++ b/node_modules/is-callable/test/index.js @@ -0,0 +1,244 @@ +'use strict'; + +/* eslint no-magic-numbers: 1 */ + +var test = require('tape'); +var isCallable = require('../'); +var hasToStringTag = require('has-tostringtag/shams')(); +var v = require('es-value-fixtures'); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var typedArrayNames = require('available-typed-arrays')(); +var generators = require('make-generator-function')(); +var arrows = require('make-arrow-function').list(); +var asyncs = require('make-async-function').list(); +var weirdlyCommentedArrowFn; +try { + /* eslint-disable no-new-func */ + weirdlyCommentedArrowFn = Function('return cl/*/**/=>/**/ass - 1;')(); + /* eslint-enable no-new-func */ +} catch (e) { /**/ } + +var isIE68 = !(0 in [undefined]); +var isFirefox = typeof window !== 'undefined' && ('netscape' in window) && (/ rv:/).test(navigator.userAgent); +var fnToStringCoerces; +try { + Function.prototype.toString.call(v.uncoercibleFnObject); + fnToStringCoerces = true; +} catch (e) { + fnToStringCoerces = false; +} + +var noop = function () {}; +var classFake = function classFake() { }; // eslint-disable-line func-name-matching +var returnClass = function () { return ' class '; }; +var return3 = function () { return 3; }; +/* for coverage */ +noop(); +classFake(); +returnClass(); +return3(); +/* end for coverage */ + +var proxy; +if (typeof Proxy === 'function') { + try { + proxy = new Proxy(function () {}, {}); + // for coverage + proxy(); + String(proxy); + } catch (_) { + // Older engines throw a `TypeError` when `Function.prototype.toString` is called on a Proxy object. + proxy = null; + } +} + +var invokeFunction = function invokeFunctionString(str) { + var result; + try { + /* eslint-disable no-new-func */ + var fn = Function(str); + /* eslint-enable no-new-func */ + result = fn(); + } catch (e) {} + return result; +}; + +var classConstructor = invokeFunction('"use strict"; return class Foo {}'); +var hasDetectableClasses = classConstructor && Function.prototype.toString.call(classConstructor) === 'class Foo {}'; + +var commentedClass = invokeFunction('"use strict"; return class/*kkk*/\n//blah\n Bar\n//blah\n {}'); +var commentedClassOneLine = invokeFunction('"use strict"; return class/**/A{}'); +var classAnonymous = invokeFunction('"use strict"; return class{}'); +var classAnonymousCommentedOneLine = invokeFunction('"use strict"; return class/*/*/{}'); + +test('not callables', function (t) { + t.notOk(isCallable(), 'implicit undefined is not callable'); + + forEach(v.nonFunctions.concat([ + Object(42), + Object('foo'), + NaN, + [], + /a/g, + new RegExp('a', 'g'), + new Date() + ]), function (nonFunction) { + if (fnToStringCoerces && nonFunction === v.coercibleFnObject) { + t.comment('FF 3.6 has a Function toString that coerces its receiver, so this test is skipped'); + return; + } + if (nonFunction != null) { // eslint-disable-line eqeqeq + if (isFirefox) { + // Firefox 3 throws some kind of *object* here instead of a proper error + t['throws']( + function () { Function.prototype.toString.call(nonFunction); }, + inspect(nonFunction) + ' can not be used with Function toString' + ); + } else { + t['throws']( + function () { Function.prototype.toString.call(nonFunction); }, + TypeError, + inspect(nonFunction) + ' can not be used with Function toString' + ); + } + } + t.equal(isCallable(nonFunction), false, inspect(nonFunction) + ' is not callable'); + }); + + t.test('non-function with function in its [[Prototype]] chain', function (st) { + var Foo = function Bar() {}; + Foo.prototype = noop; + st.equal(isCallable(Foo), true, 'sanity check: Foo is callable'); + st.equal(isCallable(new Foo()), false, 'instance of Foo is not callable'); + st.end(); + }); + + t.end(); +}); + +test('@@toStringTag', { skip: !hasToStringTag }, function (t) { + var fakeFunction = { + toString: function () { return String(return3); }, + valueOf: return3 + }; + fakeFunction[Symbol.toStringTag] = 'Function'; + t.equal(String(fakeFunction), String(return3)); + t.equal(Number(fakeFunction), return3()); + t.notOk(isCallable(fakeFunction), 'fake Function with @@toStringTag "Function" is not callable'); + t.end(); +}); + +test('Functions', function (t) { + t.ok(isCallable(noop), 'function is callable'); + t.ok(isCallable(classFake), 'function with name containing "class" is callable'); + t.ok(isCallable(returnClass), 'function with string " class " is callable'); + t.ok(isCallable(isCallable), 'isCallable is callable'); + t.end(); +}); + +test('Typed Arrays', { skip: typedArrayNames.length === 0 }, function (st) { + forEach(typedArrayNames, function (typedArray) { + st.ok(isCallable(global[typedArray]), typedArray + ' is callable'); + }); + st.end(); +}); + +test('Generators', { skip: generators.length === 0 }, function (t) { + forEach(generators, function (genFn) { + t.ok(isCallable(genFn), 'generator function ' + genFn + ' is callable'); + }); + t.end(); +}); + +test('Arrow functions', { skip: arrows.length === 0 }, function (t) { + forEach(arrows, function (arrowFn) { + t.ok(isCallable(arrowFn), 'arrow function ' + arrowFn + ' is callable'); + }); + t.ok(isCallable(weirdlyCommentedArrowFn), 'weirdly commented arrow functions are callable'); + t.end(); +}); + +test('"Class" constructors', { + skip: !classConstructor || !commentedClass || !commentedClassOneLine || !classAnonymous, todo: !hasDetectableClasses +}, function (t) { + if (!hasDetectableClasses) { + t.comment('WARNING: This engine does not support detectable classes'); + } + t.notOk(isCallable(classConstructor), 'class constructors are not callable'); + t.notOk(isCallable(commentedClass), 'class constructors with comments in the signature are not callable'); + t.notOk(isCallable(commentedClassOneLine), 'one-line class constructors with comments in the signature are not callable'); + t.notOk(isCallable(classAnonymous), 'anonymous class constructors are not callable'); + t.notOk(isCallable(classAnonymousCommentedOneLine), 'anonymous one-line class constructors with comments in the signature are not callable'); + t.end(); +}); + +test('`async function`s', { skip: asyncs.length === 0 }, function (t) { + forEach(asyncs, function (asyncFn) { + t.ok(isCallable(asyncFn), '`async function` ' + asyncFn + ' is callable'); + }); + t.end(); +}); + +test('proxies of functions', { skip: !proxy }, function (t) { + t.equal(isCallable(proxy), true, 'proxies of functions are callable'); + t.end(); +}); + +test('throwing functions', function (t) { + t.plan(1); + + var thrower = function (a) { return a.b; }; + t.ok(isCallable(thrower), 'a function that throws is callable'); +}); + +test('DOM', function (t) { + /* eslint-env browser */ + + t.test('document.all', { skip: typeof document !== 'object' }, function (st) { + st.notOk(isCallable(document), 'document is not callable'); + + var all = document.all; + var isFF3 = !isIE68 && Object.prototype.toString(all) === Object.prototype.toString.call(document.all); // this test is true in IE 6-8 also + var expected = false; + if (!isFF3) { + try { + expected = document.all('') == null; // eslint-disable-line eqeqeq + } catch (e) { /**/ } + } + st.equal(isCallable(document.all), expected, 'document.all is ' + (isFF3 ? 'not ' : '') + 'callable'); + + st.end(); + }); + + forEach([ + 'HTMLElement', + 'HTMLAnchorElement' + ], function (name) { + var constructor = global[name]; + + t.test(name, { skip: !constructor }, function (st) { + st.match(typeof constructor, /^(?:function|object)$/, name + ' is a function or object'); + + var callable = isCallable(constructor); + st.equal(typeof callable, 'boolean'); + + if (callable) { + st.doesNotThrow( + function () { Function.prototype.toString.call(constructor); }, + 'anything this library claims is callable should be accepted by Function toString' + ); + } else { + st['throws']( + function () { Function.prototype.toString.call(constructor); }, + TypeError, + 'anything this library claims is not callable should not be accepted by Function toString' + ); + } + + st.end(); + }); + }); + + t.end(); +}); diff --git a/node_modules/is-retry-allowed/index.d.ts b/node_modules/is-retry-allowed/index.d.ts new file mode 100644 index 00000000..15ed40cc --- /dev/null +++ b/node_modules/is-retry-allowed/index.d.ts @@ -0,0 +1,20 @@ +/** +Check whether a request can be retried based on the `error.code`. + +@param error - The `.code` property, if it exists, will be used to determine whether retry is allowed. + +@example +``` +import isRetryAllowed from 'is-retry-allowed'; + +isRetryAllowed({code: 'ETIMEDOUT'}); +//=> true + +isRetryAllowed({code: 'ENOTFOUND'}); +//=> false + +isRetryAllowed({}); +//=> true +``` +*/ +export default function isRetryAllowed(error?: Error | Record): boolean; diff --git a/node_modules/is-retry-allowed/index.js b/node_modules/is-retry-allowed/index.js new file mode 100644 index 00000000..ab6f02f4 --- /dev/null +++ b/node_modules/is-retry-allowed/index.js @@ -0,0 +1,39 @@ +const denyList = new Set([ + 'ENOTFOUND', + 'ENETUNREACH', + + // SSL errors from https://github.com/nodejs/node/blob/fc8e3e2cdc521978351de257030db0076d79e0ab/src/crypto/crypto_common.cc#L301-L328 + 'UNABLE_TO_GET_ISSUER_CERT', + 'UNABLE_TO_GET_CRL', + 'UNABLE_TO_DECRYPT_CERT_SIGNATURE', + 'UNABLE_TO_DECRYPT_CRL_SIGNATURE', + 'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY', + 'CERT_SIGNATURE_FAILURE', + 'CRL_SIGNATURE_FAILURE', + 'CERT_NOT_YET_VALID', + 'CERT_HAS_EXPIRED', + 'CRL_NOT_YET_VALID', + 'CRL_HAS_EXPIRED', + 'ERROR_IN_CERT_NOT_BEFORE_FIELD', + 'ERROR_IN_CERT_NOT_AFTER_FIELD', + 'ERROR_IN_CRL_LAST_UPDATE_FIELD', + 'ERROR_IN_CRL_NEXT_UPDATE_FIELD', + 'OUT_OF_MEM', + 'DEPTH_ZERO_SELF_SIGNED_CERT', + 'SELF_SIGNED_CERT_IN_CHAIN', + 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY', + 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', + 'CERT_CHAIN_TOO_LONG', + 'CERT_REVOKED', + 'INVALID_CA', + 'PATH_LENGTH_EXCEEDED', + 'INVALID_PURPOSE', + 'CERT_UNTRUSTED', + 'CERT_REJECTED', + 'HOSTNAME_MISMATCH' +]); + +// TODO: Use `error?.code` when targeting Node.js 14 +export default function isRetryAllowed(error) { + return !denyList.has(error && error.code); +} diff --git a/node_modules/is-retry-allowed/license b/node_modules/is-retry-allowed/license new file mode 100644 index 00000000..a69bb592 --- /dev/null +++ b/node_modules/is-retry-allowed/license @@ -0,0 +1,10 @@ +MIT License + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-retry-allowed/package.json b/node_modules/is-retry-allowed/package.json new file mode 100644 index 00000000..bc8a9d6d --- /dev/null +++ b/node_modules/is-retry-allowed/package.json @@ -0,0 +1,40 @@ +{ + "name": "is-retry-allowed", + "version": "3.0.0", + "description": "Check whether a request can be retried based on the `error.code`", + "license": "MIT", + "repository": "sindresorhus/is-retry-allowed", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "retry", + "retries", + "allowed", + "check", + "http", + "https", + "request", + "fetch" + ], + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + } +} diff --git a/node_modules/is-retry-allowed/readme.md b/node_modules/is-retry-allowed/readme.md new file mode 100644 index 00000000..1f94c5ee --- /dev/null +++ b/node_modules/is-retry-allowed/readme.md @@ -0,0 +1,46 @@ +# is-retry-allowed + +> Check whether a request can be retried based on the `error.code` + +## Install + +``` +$ npm install is-retry-allowed +``` + +## Usage + +```js +import isRetryAllowed from 'is-retry-allowed'; + +isRetryAllowed({code: 'ETIMEDOUT'}); +//=> true + +isRetryAllowed({code: 'ENOTFOUND'}); +//=> false + +isRetryAllowed({}); +//=> true +``` + +## API + +### isRetryAllowed(error) + +#### error + +Type: `Error | object` + +The `.code` property, if it exists, will be used to determine whether retry is allowed. + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/is-typed-array/.editorconfig b/node_modules/is-typed-array/.editorconfig new file mode 100644 index 00000000..bc228f82 --- /dev/null +++ b/node_modules/is-typed-array/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 150 + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off diff --git a/node_modules/is-typed-array/.eslintrc b/node_modules/is-typed-array/.eslintrc new file mode 100644 index 00000000..34a62620 --- /dev/null +++ b/node_modules/is-typed-array/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "globals": { + "globalThis": false + }, + + "rules": { + "max-statements-per-line": [2, { "max": 2 }] + }, +} diff --git a/node_modules/is-typed-array/.github/FUNDING.yml b/node_modules/is-typed-array/.github/FUNDING.yml new file mode 100644 index 00000000..7dd24b96 --- /dev/null +++ b/node_modules/is-typed-array/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/is-typed-array +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/is-typed-array/.nycrc b/node_modules/is-typed-array/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/node_modules/is-typed-array/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/is-typed-array/CHANGELOG.md b/node_modules/is-typed-array/CHANGELOG.md new file mode 100644 index 00000000..a2f6fb35 --- /dev/null +++ b/node_modules/is-typed-array/CHANGELOG.md @@ -0,0 +1,166 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.15](https://github.com/inspect-js/is-typed-array/compare/v1.1.14...v1.1.15) - 2024-12-18 + +### Commits + +- [types] improve types [`d934b49`](https://github.com/inspect-js/is-typed-array/commit/d934b49f7a16d5e20ba437a795b887f1f71ef240) +- [Dev Deps] update `@types/tape` [`da26511`](https://github.com/inspect-js/is-typed-array/commit/da26511ad7515c50fdc720701d5735b0d8a40800) + +## [v1.1.14](https://github.com/inspect-js/is-typed-array/compare/v1.1.13...v1.1.14) - 2024-12-17 + +### Commits + +- [types] use shared config [`eafa7fa`](https://github.com/inspect-js/is-typed-array/commit/eafa7fad2fc8d464a68e218d39a7eab782d9ce76) +- [actions] split out node 10-20, and 20+ [`cd6d5a3`](https://github.com/inspect-js/is-typed-array/commit/cd6d5a3283a1e65cf5885e57daede65a5176fd91) +- [types] use `which-typed-array`’s `TypedArray` type; re-export it [`d7d9fcd`](https://github.com/inspect-js/is-typed-array/commit/d7d9fcd75d538b7f8146dcd9faca5142534a3d45) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/node`, `@types/object-inspect`, `@types/tape`, `auto-changelog`, `object-inspect`, `tape` [`65afb42`](https://github.com/inspect-js/is-typed-array/commit/65afb4263ff4f4ee4ee51b284dc7519ce969a666) +- [Dev Deps] update `@types/node`, `has-tostringtag`, `tape` [`9e27ddd`](https://github.com/inspect-js/is-typed-array/commit/9e27ddd62a51ebae46781de0adbd8871341c633c) +- [Tests] replace `aud` with `npm audit` [`ad4defe`](https://github.com/inspect-js/is-typed-array/commit/ad4defe211c77d42b880d13faf7737b8f1adaf13) +- [Tests] use `@arethetypeswrong/cli` [`ac4bcca`](https://github.com/inspect-js/is-typed-array/commit/ac4bcca4ee2215662e79aa21681756984bb0b6d1) +- [Deps] update `which-typed-array` [`c298129`](https://github.com/inspect-js/is-typed-array/commit/c2981299c09cd64d89bf1e496447c0379b45d03a) +- [Deps] update `which-typed-array` [`744c29a`](https://github.com/inspect-js/is-typed-array/commit/744c29aa8d4f9df360082074f7b4f2f0d42d76e5) +- [Dev Deps] add missing peer dep [`94d2f5a`](https://github.com/inspect-js/is-typed-array/commit/94d2f5a11016516823e8d943e0bfc7b29dcb146d) + +## [v1.1.13](https://github.com/inspect-js/is-typed-array/compare/v1.1.12...v1.1.13) - 2024-02-01 + +### Commits + +- [patch] add types [`8a8a679`](https://github.com/inspect-js/is-typed-array/commit/8a8a679937d1c4b970c98556460cef2b7fa0bffb) +- [Dev Deps] update `aud`, `has-tostringtag`, `npmignore`, `object-inspect`, `tape` [`8146b60`](https://github.com/inspect-js/is-typed-array/commit/8146b6019a24f502e66e2c224ce5bea8df9f39bc) +- [actions] optimize finishers [`34f875a`](https://github.com/inspect-js/is-typed-array/commit/34f875ace16c4900d6b0ef4688e9e3eb7d502715) +- [Deps] update `which-typed-array` [`19c974f`](https://github.com/inspect-js/is-typed-array/commit/19c974f4bbd93ffc45cb8638b86688bc00f1420b) +- [meta] add `sideEffects` flag [`0b68e5e`](https://github.com/inspect-js/is-typed-array/commit/0b68e5e58684b79110a82a0a51df8beb7574d6a2) + +## [v1.1.12](https://github.com/inspect-js/is-typed-array/compare/v1.1.11...v1.1.12) - 2023-07-17 + +### Commits + +- [Refactor] use `which-typed-array` for all internals [`7619405`](https://github.com/inspect-js/is-typed-array/commit/761940532de595f6721fed101b02814dcfa7fe4e) + +## [v1.1.11](https://github.com/inspect-js/is-typed-array/compare/v1.1.10...v1.1.11) - 2023-07-17 + +### Commits + +- [Fix] `node < v0.6` lacks proper Object toString behavior [`c94b90d`](https://github.com/inspect-js/is-typed-array/commit/c94b90dc6bc457783d6f8cc208415a49da0933b7) +- [Robustness] use `call-bind` [`573b00b`](https://github.com/inspect-js/is-typed-array/commit/573b00b8deec42ac1ac262415e442ea0b7e1c96b) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` [`c88c2d4`](https://github.com/inspect-js/is-typed-array/commit/c88c2d479976110478fa4038fe8921251c06a163) + +## [v1.1.10](https://github.com/inspect-js/is-typed-array/compare/v1.1.9...v1.1.10) - 2022-11-02 + +### Commits + +- [meta] add `auto-changelog` [`cf6d86b`](https://github.com/inspect-js/is-typed-array/commit/cf6d86bf2f693eca357439d4d12e76d641f91f92) +- [actions] update rebase action to use reusable workflow [`8da51a5`](https://github.com/inspect-js/is-typed-array/commit/8da51a5dce6d2442ae31ccbc2be136f2e04d6bef) +- [Dev Deps] update `aud`, `is-callable`, `object-inspect`, `tape` [`554e3de`](https://github.com/inspect-js/is-typed-array/commit/554e3deec59dec926d0badc628e589ab363e465b) +- [Refactor] use `gopd` instead of an `es-abstract` helper` [`cdaa465`](https://github.com/inspect-js/is-typed-array/commit/cdaa465d5f94bfc9e32475e31209e1c2458a9603) +- [Deps] update `es-abstract` [`677ae4b`](https://github.com/inspect-js/is-typed-array/commit/677ae4b3c8323b59d6650a9254ab945045c33f79) + + + +1.1.9 / 2022-05-13 +================= + * [Refactor] use `foreach` instead of `for-each` + * [readme] markdown URL cleanup + * [Deps] update `es-abstract` + * [meta] use `npmignore` to autogenerate an npmignore file + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `safe-publish-latest`, `tape` + * [actions] reuse common workflows + * [actions] update codecov uploader + +1.1.8 / 2021-08-30 +================= + * [Refactor] use `globalThis` if available (#53) + * [Deps] update `available-typed-arrays` + * [Dev Deps] update `@ljharb/eslint-config` + +1.1.7 / 2021-08-07 +================= + * [Fix] if Symbol.toStringTag exists but is not present, use Object.prototype.toString + * [Dev Deps] update `is-callable`, `tape` + +1.1.6 / 2021-08-05 +================= + * [Fix] use `has-tostringtag` to behave correctly in the presence of symbol shams + * [readme] add actions and codecov badges + * [meta] use `prepublishOnly` script for npm 7+ + * [Deps] update `available-typed-arrays`, `es-abstract` + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` + * [actions] use `node/install` instead of `node/run`; use `codecov` action + +1.1.5 / 2021-02-14 +================= + * [meta] do not publish github action workflow files or nyc output + * [Deps] update `call-bind`, `es-abstract` + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `is-callable`, `tape` + +1.1.4 / 2020-12-05 +================= + * [readme] fix repo URLs, remove defunct badges + * [Deps] update `available-typed-arrays`, `es-abstract`; use `call-bind` where applicable + * [meta] gitignore nyc output + * [meta] only audit prod deps + * [actions] add "Allow Edits" workflow + * [actions] switch Automatic Rebase workflow to `pull_request_target` event + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is-callable`, `make-arrow-function`, `make-generator-function`, `object-inspect`, `tape`; add `aud` + * [Tests] migrate tests to Github Actions + * [Tests] run `nyc` on all tests + +1.1.3 / 2020-01-24 +================= + * [Refactor] use `es-abstract`’s `callBound`, `available-typed-arrays`, `has-symbols` + +1.1.2 / 2020-01-20 +================= + * [Fix] in envs without Symbol.toStringTag, dc8a8cc made arrays return `true` + * [Tests] add `evalmd` to `prelint` + +1.1.1 / 2020-01-18 +================= + * [Robustness] don’t rely on Array.prototype.indexOf existing + * [meta] remove unused Makefile and associated utilities + * [meta] add `funding` field; create FUNDING.yml + * [actions] add automatic rebasing / merge commit blocking + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is-callable`, `replace`, `semver`, `tape`; add `safe-publish-latest` + * [Tests] use shared travis-ci configs + * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops + +1.1.0 / 2019-02-16 +================= + * [New] add `BigInt64Array` and `BigUint64Array` + * [Refactor] use an array instead of an object for storing Typed Array names + * [meta] ignore `test.html` + * [Tests] up to `node` `v11.10`, `v10.15`, `v8.15`, `v7.10`, `v6.16`, `v5.10`, `v4.9` + * [Tests] remove `jscs` + * [Tests] use `npm audit` instead of `nsp` + * [Dev Deps] update `eslint`,` @ljharb/eslint-config`, `is-callable`, `tape`, `replace`, `semver` + * [Dev Deps] remove unused eccheck script + dep + +1.0.4 / 2016-03-19 +================= + * [Fix] `Symbol.toStringTag` is on the super-`[[Prototype]]` of Float32Array, not the `[[Prototype]]` (#3) + * [Tests] up to `node` `v5.9`, `v4.4` + * [Tests] use pretest/posttest for linting/security + * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `is-callable` + +1.0.3 / 2015-10-13 +================= + * [Deps] Add missing `foreach` dependency (#1) + +1.0.2 / 2015-10-05 +================= + * [Deps] Remove unneeded "isarray" dependency + * [Dev Deps] update `eslint`, `@ljharb/eslint-config` + +1.0.1 / 2015-10-02 +================= + * Rerelease: avoid instanceof and the constructor property; work cross-realm; work with Symbol.toStringTag. + +1.0.0 / 2015-05-06 +================= + * Initial release. diff --git a/node_modules/is-typed-array/LICENSE b/node_modules/is-typed-array/LICENSE new file mode 100644 index 00000000..b43df444 --- /dev/null +++ b/node_modules/is-typed-array/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/is-typed-array/README.md b/node_modules/is-typed-array/README.md new file mode 100644 index 00000000..50752572 --- /dev/null +++ b/node_modules/is-typed-array/README.md @@ -0,0 +1,70 @@ +# is-typed-array [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Is this value a JS Typed Array? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag. + +## Example + +```js +var isTypedArray = require('is-typed-array'); +var assert = require('assert'); + +assert.equal(false, isTypedArray(undefined)); +assert.equal(false, isTypedArray(null)); +assert.equal(false, isTypedArray(false)); +assert.equal(false, isTypedArray(true)); +assert.equal(false, isTypedArray([])); +assert.equal(false, isTypedArray({})); +assert.equal(false, isTypedArray(/a/g)); +assert.equal(false, isTypedArray(new RegExp('a', 'g'))); +assert.equal(false, isTypedArray(new Date())); +assert.equal(false, isTypedArray(42)); +assert.equal(false, isTypedArray(NaN)); +assert.equal(false, isTypedArray(Infinity)); +assert.equal(false, isTypedArray(new Number(42))); +assert.equal(false, isTypedArray('foo')); +assert.equal(false, isTypedArray(Object('foo'))); +assert.equal(false, isTypedArray(function () {})); +assert.equal(false, isTypedArray(function* () {})); +assert.equal(false, isTypedArray(x => x * x)); +assert.equal(false, isTypedArray([])); + +assert.ok(isTypedArray(new Int8Array())); +assert.ok(isTypedArray(new Uint8Array())); +assert.ok(isTypedArray(new Uint8ClampedArray())); +assert.ok(isTypedArray(new Int16Array())); +assert.ok(isTypedArray(new Uint16Array())); +assert.ok(isTypedArray(new Int32Array())); +assert.ok(isTypedArray(new Uint32Array())); +assert.ok(isTypedArray(new Float32Array())); +assert.ok(isTypedArray(new Float64Array())); +assert.ok(isTypedArray(new BigInt64Array())); +assert.ok(isTypedArray(new BigUint64Array())); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/is-typed-array +[npm-version-svg]: https://versionbadg.es/inspect-js/is-typed-array.svg +[deps-svg]: https://david-dm.org/inspect-js/is-typed-array.svg +[deps-url]: https://david-dm.org/inspect-js/is-typed-array +[dev-deps-svg]: https://david-dm.org/inspect-js/is-typed-array/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/is-typed-array#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/is-typed-array.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/is-typed-array.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/is-typed-array.svg +[downloads-url]: https://npm-stat.com/charts.html?package=is-typed-array +[codecov-image]: https://codecov.io/gh/inspect-js/is-typed-array/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/is-typed-array/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-typed-array +[actions-url]: https://github.com/inspect-js/is-typed-array/actions diff --git a/node_modules/is-typed-array/index.d.ts b/node_modules/is-typed-array/index.d.ts new file mode 100644 index 00000000..73bcf35a --- /dev/null +++ b/node_modules/is-typed-array/index.d.ts @@ -0,0 +1,9 @@ +import type { TypedArray } from 'which-typed-array'; + +declare namespace isTypedArray { + export { TypedArray }; +} + +declare function isTypedArray(value: unknown): value is isTypedArray.TypedArray; + +export = isTypedArray; diff --git a/node_modules/is-typed-array/index.js b/node_modules/is-typed-array/index.js new file mode 100644 index 00000000..6e38c535 --- /dev/null +++ b/node_modules/is-typed-array/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var whichTypedArray = require('which-typed-array'); + +/** @type {import('.')} */ +module.exports = function isTypedArray(value) { + return !!whichTypedArray(value); +}; diff --git a/node_modules/is-typed-array/package.json b/node_modules/is-typed-array/package.json new file mode 100644 index 00000000..a8b1e772 --- /dev/null +++ b/node_modules/is-typed-array/package.json @@ -0,0 +1,129 @@ +{ + "name": "is-typed-array", + "version": "1.1.15", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "description": "Is this value a JS Typed Array? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag.", + "license": "MIT", + "main": "index.js", + "types": "./index.d.ts", + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run --silent lint", + "test": "npm run tests-only && npm run test:harmony", + "tests-only": "nyc tape test", + "test:harmony": "nyc node --harmony --es-staging test", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git://github.com/inspect-js/is-typed-array.git" + }, + "keywords": [ + "array", + "TypedArray", + "typed array", + "is", + "typed", + "Int8Array", + "Uint8Array", + "Uint8ClampedArray", + "Int16Array", + "Uint16Array", + "Int32Array", + "Uint32Array", + "Float32Array", + "Float64Array", + "ES6", + "toStringTag", + "Symbol.toStringTag", + "@@toStringTag" + ], + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.1", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.2", + "@types/for-each": "^0.3.3", + "@types/is-callable": "^1.1.2", + "@types/make-arrow-function": "^1.2.2", + "@types/make-generator-function": "^2.0.3", + "@types/node": "^20.17.10", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.2", + "in-publish": "^2.0.1", + "is-callable": "^1.2.7", + "make-arrow-function": "^1.2.0", + "make-generator-function": "^2.0.0", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.3", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true, + "startingVersion": "1.1.10" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/is-typed-array/test/index.js b/node_modules/is-typed-array/test/index.js new file mode 100644 index 00000000..c96e3976 --- /dev/null +++ b/node_modules/is-typed-array/test/index.js @@ -0,0 +1,111 @@ +'use strict'; + +var test = require('tape'); +var isTypedArray = require('../'); +var isCallable = require('is-callable'); +var hasToStringTag = require('has-tostringtag/shams')(); +var generators = require('make-generator-function')(); +var arrowFn = require('make-arrow-function')(); +var forEach = require('for-each'); +var inspect = require('object-inspect'); + +var typedArrayNames = [ + 'Int8Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Int16Array', + 'Uint16Array', + 'Int32Array', + 'Uint32Array', + 'Float32Array', + 'Float64Array', + 'BigInt64Array', + 'BigUint64Array' +]; + +test('not arrays', function (t) { + t.test('non-number/string primitives', function (st) { + // @ts-expect-error Expected 1 arguments, but got 0.ts(2554) + st.notOk(isTypedArray(), 'undefined is not typed array'); + st.notOk(isTypedArray(null), 'null is not typed array'); + st.notOk(isTypedArray(false), 'false is not typed array'); + st.notOk(isTypedArray(true), 'true is not typed array'); + st.end(); + }); + + t.notOk(isTypedArray({}), 'object is not typed array'); + t.notOk(isTypedArray(/a/g), 'regex literal is not typed array'); + t.notOk(isTypedArray(new RegExp('a', 'g')), 'regex object is not typed array'); + t.notOk(isTypedArray(new Date()), 'new Date() is not typed array'); + + t.test('numbers', function (st) { + st.notOk(isTypedArray(42), 'number is not typed array'); + st.notOk(isTypedArray(Object(42)), 'number object is not typed array'); + st.notOk(isTypedArray(NaN), 'NaN is not typed array'); + st.notOk(isTypedArray(Infinity), 'Infinity is not typed array'); + st.end(); + }); + + t.test('strings', function (st) { + st.notOk(isTypedArray('foo'), 'string primitive is not typed array'); + st.notOk(isTypedArray(Object('foo')), 'string object is not typed array'); + st.end(); + }); + + t.end(); +}); + +test('Functions', function (t) { + t.notOk(isTypedArray(function () {}), 'function is not typed array'); + t.end(); +}); + +test('Generators', { skip: generators.length === 0 }, function (t) { + forEach(generators, function (genFn) { + t.notOk(isTypedArray(genFn), 'generator function ' + inspect(genFn) + ' is not typed array'); + }); + t.end(); +}); + +test('Arrow functions', { skip: !arrowFn }, function (t) { + t.notOk(isTypedArray(arrowFn), 'arrow function is not typed array'); + t.end(); +}); + +test('@@toStringTag', { skip: !hasToStringTag }, function (t) { + forEach(typedArrayNames, function (typedArray) { + // @ts-expect-error + if (typeof global[typedArray] === 'function') { + // @ts-expect-error + var fakeTypedArray = []; + // @ts-expect-error + fakeTypedArray[Symbol.toStringTag] = typedArray; + // @ts-expect-error + t.notOk(isTypedArray(fakeTypedArray), 'faked ' + typedArray + ' is not typed array'); + } else { + t.comment('# SKIP ' + typedArray + ' is not supported'); + } + }); + t.end(); +}); + +test('non-Typed Arrays', function (t) { + t.notOk(isTypedArray([]), '[] is not typed array'); + t.end(); +}); + +/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor | BigInt64ArrayConstructor | BigUint64ArrayConstructor} TypedArrayConstructor */ + +test('Typed Arrays', function (t) { + forEach(typedArrayNames, function (typedArray) { + // @ts-expect-error + /** @type {TypedArrayConstructor} */ var TypedArray = global[typedArray]; + if (isCallable(TypedArray)) { + var arr = new TypedArray(10); + t.ok(isTypedArray(arr), 'new ' + typedArray + '(10) is typed array'); + } else { + t.comment('# SKIP ' + typedArray + ' is not supported'); + } + }); + t.end(); +}); diff --git a/node_modules/is-typed-array/tsconfig.json b/node_modules/is-typed-array/tsconfig.json new file mode 100644 index 00000000..ac228e22 --- /dev/null +++ b/node_modules/is-typed-array/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@ljharb/tsconfig", + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/isarray/LICENSE b/node_modules/isarray/LICENSE new file mode 100644 index 00000000..de322667 --- /dev/null +++ b/node_modules/isarray/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/isarray/README.md b/node_modules/isarray/README.md new file mode 100644 index 00000000..3e160b2b --- /dev/null +++ b/node_modules/isarray/README.md @@ -0,0 +1,38 @@ + +# isarray + +`Array#isArray` for older browsers and deprecated Node.js versions. + +[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) +[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) + +[![browser support](https://ci.testling.com/juliangruber/isarray.png) +](https://ci.testling.com/juliangruber/isarray) + +__Just use Array.isArray directly__, unless you need to support those older versions. + +## Usage + +```js +var isArray = require('isarray'); + +console.log(isArray([])); // => true +console.log(isArray({})); // => false +``` + +## Installation + +With [npm](https://npmjs.org) do + +```bash +$ npm install isarray +``` + +Then bundle for the browser with +[browserify](https://github.com/substack/node-browserify). + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! diff --git a/node_modules/isarray/index.js b/node_modules/isarray/index.js new file mode 100644 index 00000000..a57f6349 --- /dev/null +++ b/node_modules/isarray/index.js @@ -0,0 +1,5 @@ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; diff --git a/node_modules/isarray/package.json b/node_modules/isarray/package.json new file mode 100644 index 00000000..fb0e89be --- /dev/null +++ b/node_modules/isarray/package.json @@ -0,0 +1,48 @@ +{ + "name": "isarray", + "description": "Array#isArray for older browsers", + "version": "2.0.5", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/isarray.git" + }, + "homepage": "https://github.com/juliangruber/isarray", + "main": "index.js", + "files": [ + "index.js" + ], + "dependencies": {}, + "devDependencies": { + "tape": "~2.13.4" + }, + "keywords": [ + "browser", + "isarray", + "array" + ], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test.js", + "browsers": [ + "ie/8..latest", + "firefox/17..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "scripts": { + "test": "tape test.js" + } +} diff --git a/node_modules/pg-cloudflare/LICENSE b/node_modules/pg-cloudflare/LICENSE new file mode 100644 index 00000000..5c140564 --- /dev/null +++ b/node_modules/pg-cloudflare/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2010 - 2021 Brian Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/pg-cloudflare/README.md b/node_modules/pg-cloudflare/README.md new file mode 100644 index 00000000..68663c45 --- /dev/null +++ b/node_modules/pg-cloudflare/README.md @@ -0,0 +1,112 @@ +# pg-cloudflare + +`pg-cloudflare` makes it easier to take an existing package that relies on `tls` and `net`, and make it work in environments where only `connect()` is supported, such as Cloudflare Workers. + +`pg-cloudflare` wraps `connect()`, the [TCP Socket API](https://github.com/wintercg/proposal-sockets-api) proposed within WinterCG, and implemented in [Cloudflare Workers](https://developers.cloudflare.com/workers/runtime-apis/tcp-sockets/), and exposes an interface with methods similar to what the `net` and `tls` modules in Node.js expose. (ex: `net.connect(path[, options][, callback])`). This minimizes the number of changes needed in order to make an existing package work across JavaScript runtimes. + +## Installation + +``` +npm i --save-dev pg-cloudflare +``` + +The package uses conditional exports to support bundlers that don't know about +`cloudflare:sockets`, so the consumer code by default imports an empty file. To +enable the package, resolve to the `cloudflare` condition in your bundler's +config. For example: + +- `webpack.config.js` + ```js + export default { + ..., + resolve: { conditionNames: [..., "workerd"] }, + plugins: [ + // ignore cloudflare:sockets imports + new webpack.IgnorePlugin({ + resourceRegExp: /^cloudflare:sockets$/, + }), + ], + } + ``` +- `vite.config.js` + + > [!NOTE] + > If you are using the [Cloudflare Vite plugin](https://www.npmjs.com/package/@cloudflare/vite-plugin) then the following configuration is not necessary. + + ```js + export default defineConfig({ + ..., + resolve: { + conditions: [..., "workerd"], + }, + build: { + ..., + // don't try to bundle cloudflare:sockets + rollupOptions: { + external: [..., 'cloudflare:sockets'], + }, + }, + }) + ``` + +- `rollup.config.js` + ```js + export default defineConfig({ + ..., + plugins: [..., nodeResolve({ exportConditions: [..., 'workerd'] })], + // don't try to bundle cloudflare:sockets + external: [..., 'cloudflare:sockets'], + }) + ``` +- `esbuild.config.js` + ```js + await esbuild.build({ + ..., + conditions: [..., 'workerd'], + }) + ``` + +The concrete examples can be found in `packages/pg-bundler-test`. + +## How to use conditionally, in non-Node.js environments + +As implemented in `pg` [here](https://github.com/brianc/node-postgres/commit/07553428e9c0eacf761a5d4541a3300ff7859578#diff-34588ad868ebcb232660aba7ee6a99d1e02f4bc93f73497d2688c3f074e60533R5-R13), a typical use case might look as follows, where in a Node.js environment the `net` module is used, while in a non-Node.js environment, where `net` is unavailable, `pg-cloudflare` is used instead, providing an equivalent interface: + +```js +module.exports.getStream = function getStream(ssl = false) { + const net = require('net') + if (typeof net.Socket === 'function') { + return net.Socket() + } + const { CloudflareSocket } = require('pg-cloudflare') + return new CloudflareSocket(ssl) +} +``` + +## Node.js implementation of the Socket API proposal + +If you're looking for a way to rely on `connect()` as the interface you use to interact with raw sockets, but need this interface to be available in a Node.js environment, [`@arrowood.dev/socket`](https://github.com/Ethan-Arrowood/socket) provides a Node.js implementation of the Socket API. + +### license + +The MIT License (MIT) + +Copyright (c) 2023 Brian M. Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pg-cloudflare/dist/empty.d.ts b/node_modules/pg-cloudflare/dist/empty.d.ts new file mode 100644 index 00000000..d87c4851 --- /dev/null +++ b/node_modules/pg-cloudflare/dist/empty.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/node_modules/pg-cloudflare/dist/empty.js b/node_modules/pg-cloudflare/dist/empty.js new file mode 100644 index 00000000..bd78fc97 --- /dev/null +++ b/node_modules/pg-cloudflare/dist/empty.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +// This is an empty module that is served up when outside of a workerd environment +// See the `exports` field in package.json +exports.default = {}; +//# sourceMappingURL=empty.js.map \ No newline at end of file diff --git a/node_modules/pg-cloudflare/dist/empty.js.map b/node_modules/pg-cloudflare/dist/empty.js.map new file mode 100644 index 00000000..3eaa3b1c --- /dev/null +++ b/node_modules/pg-cloudflare/dist/empty.js.map @@ -0,0 +1 @@ +{"version":3,"file":"empty.js","sourceRoot":"","sources":["../src/empty.ts"],"names":[],"mappings":";;AAAA,kFAAkF;AAClF,0CAA0C;AAC1C,kBAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/node_modules/pg-cloudflare/dist/index.d.ts b/node_modules/pg-cloudflare/dist/index.d.ts new file mode 100644 index 00000000..a779d149 --- /dev/null +++ b/node_modules/pg-cloudflare/dist/index.d.ts @@ -0,0 +1,31 @@ +/// +/// +/// +import { TlsOptions } from 'cloudflare:sockets'; +import { EventEmitter } from 'events'; +/** + * Wrapper around the Cloudflare built-in socket that can be used by the `Connection`. + */ +export declare class CloudflareSocket extends EventEmitter { + readonly ssl: boolean; + writable: boolean; + destroyed: boolean; + private _upgrading; + private _upgraded; + private _cfSocket; + private _cfWriter; + private _cfReader; + constructor(ssl: boolean); + setNoDelay(): this; + setKeepAlive(): this; + ref(): this; + unref(): this; + connect(port: number, host: string, connectListener?: (...args: unknown[]) => void): Promise; + _listen(): Promise; + _listenOnce(): Promise; + write(data: Uint8Array | string, encoding?: BufferEncoding, callback?: (...args: unknown[]) => void): true | void; + end(data?: Buffer, encoding?: BufferEncoding, callback?: (...args: unknown[]) => void): this; + destroy(reason: string): this; + startTls(options: TlsOptions): void; + _addClosedHandler(): void; +} diff --git a/node_modules/pg-cloudflare/dist/index.js b/node_modules/pg-cloudflare/dist/index.js new file mode 100644 index 00000000..03233987 --- /dev/null +++ b/node_modules/pg-cloudflare/dist/index.js @@ -0,0 +1,152 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CloudflareSocket = void 0; +const events_1 = require("events"); +/** + * Wrapper around the Cloudflare built-in socket that can be used by the `Connection`. + */ +class CloudflareSocket extends events_1.EventEmitter { + constructor(ssl) { + super(); + this.ssl = ssl; + this.writable = false; + this.destroyed = false; + this._upgrading = false; + this._upgraded = false; + this._cfSocket = null; + this._cfWriter = null; + this._cfReader = null; + } + setNoDelay() { + return this; + } + setKeepAlive() { + return this; + } + ref() { + return this; + } + unref() { + return this; + } + async connect(port, host, connectListener) { + try { + log('connecting'); + if (connectListener) + this.once('connect', connectListener); + const options = this.ssl ? { secureTransport: 'starttls' } : {}; + const mod = await import('cloudflare:sockets'); + const connect = mod.connect; + this._cfSocket = connect(`${host}:${port}`, options); + this._cfWriter = this._cfSocket.writable.getWriter(); + this._addClosedHandler(); + this._cfReader = this._cfSocket.readable.getReader(); + if (this.ssl) { + this._listenOnce().catch((e) => this.emit('error', e)); + } + else { + this._listen().catch((e) => this.emit('error', e)); + } + await this._cfWriter.ready; + log('socket ready'); + this.writable = true; + this.emit('connect'); + return this; + } + catch (e) { + this.emit('error', e); + } + } + async _listen() { + // eslint-disable-next-line no-constant-condition + while (true) { + log('awaiting receive from CF socket'); + const { done, value } = await this._cfReader.read(); + log('CF socket received:', done, value); + if (done) { + log('done'); + break; + } + this.emit('data', Buffer.from(value)); + } + } + async _listenOnce() { + log('awaiting first receive from CF socket'); + const { done, value } = await this._cfReader.read(); + log('First CF socket received:', done, value); + this.emit('data', Buffer.from(value)); + } + write(data, encoding = 'utf8', callback = () => { }) { + if (data.length === 0) + return callback(); + if (typeof data === 'string') + data = Buffer.from(data, encoding); + log('sending data direct:', data); + this._cfWriter.write(data).then(() => { + log('data sent'); + callback(); + }, (err) => { + log('send error', err); + callback(err); + }); + return true; + } + end(data = Buffer.alloc(0), encoding = 'utf8', callback = () => { }) { + log('ending CF socket'); + this.write(data, encoding, (err) => { + this._cfSocket.close(); + if (callback) + callback(err); + }); + return this; + } + destroy(reason) { + log('destroying CF socket', reason); + this.destroyed = true; + return this.end(); + } + startTls(options) { + if (this._upgraded) { + // Don't try to upgrade again. + this.emit('error', 'Cannot call `startTls()` more than once on a socket'); + return; + } + this._cfWriter.releaseLock(); + this._cfReader.releaseLock(); + this._upgrading = true; + this._cfSocket = this._cfSocket.startTls(options); + this._cfWriter = this._cfSocket.writable.getWriter(); + this._cfReader = this._cfSocket.readable.getReader(); + this._addClosedHandler(); + this._listen().catch((e) => this.emit('error', e)); + } + _addClosedHandler() { + this._cfSocket.closed.then(() => { + if (!this._upgrading) { + log('CF socket closed'); + this._cfSocket = null; + this.emit('close'); + } + else { + this._upgrading = false; + this._upgraded = true; + } + }).catch((e) => this.emit('error', e)); + } +} +exports.CloudflareSocket = CloudflareSocket; +const debug = false; +function dump(data) { + if (data instanceof Uint8Array || data instanceof ArrayBuffer) { + const hex = Buffer.from(data).toString('hex'); + const str = new TextDecoder().decode(data); + return `\n>>> STR: "${str.replace(/\n/g, '\\n')}"\n>>> HEX: ${hex}\n`; + } + else { + return data; + } +} +function log(...args) { + debug && console.log(...args.map(dump)); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/pg-cloudflare/dist/index.js.map b/node_modules/pg-cloudflare/dist/index.js.map new file mode 100644 index 00000000..abfb848b --- /dev/null +++ b/node_modules/pg-cloudflare/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-cloudflare/esm/index.mjs b/node_modules/pg-cloudflare/esm/index.mjs new file mode 100644 index 00000000..6384216f --- /dev/null +++ b/node_modules/pg-cloudflare/esm/index.mjs @@ -0,0 +1,3 @@ +import cf from '../dist/index.js' + +export const CloudflareSocket = cf.CloudflareSocket diff --git a/node_modules/pg-cloudflare/package.json b/node_modules/pg-cloudflare/package.json new file mode 100644 index 00000000..7eebd46d --- /dev/null +++ b/node_modules/pg-cloudflare/package.json @@ -0,0 +1,39 @@ +{ + "name": "pg-cloudflare", + "version": "1.3.0", + "description": "A socket implementation that can run on Cloudflare Workers using native TCP connections.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "license": "MIT", + "devDependencies": { + "ts-node": "^8.5.4", + "typescript": "^4.0.3" + }, + "exports": { + ".": { + "workerd": { + "import": "./esm/index.mjs", + "require": "./dist/index.js" + }, + "default": "./dist/empty.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "tsc", + "build:watch": "tsc --watch", + "prepublish": "yarn build", + "test": "echo e2e test in pg package" + }, + "repository": { + "type": "git", + "url": "git://github.com/brianc/node-postgres.git", + "directory": "packages/pg-cloudflare" + }, + "files": [ + "/dist/*{js,ts,map}", + "/src", + "/esm" + ], + "gitHead": "d10e09c888f94abf77382aba6f353ca665a1cf09" +} diff --git a/node_modules/pg-cloudflare/src/empty.ts b/node_modules/pg-cloudflare/src/empty.ts new file mode 100644 index 00000000..f1e6740d --- /dev/null +++ b/node_modules/pg-cloudflare/src/empty.ts @@ -0,0 +1,3 @@ +// This is an empty module that is served up when outside of a workerd environment +// See the `exports` field in package.json +export default {} diff --git a/node_modules/pg-cloudflare/src/index.ts b/node_modules/pg-cloudflare/src/index.ts new file mode 100644 index 00000000..d83882ef --- /dev/null +++ b/node_modules/pg-cloudflare/src/index.ts @@ -0,0 +1,166 @@ +import { SocketOptions, Socket, TlsOptions } from 'cloudflare:sockets' +import { EventEmitter } from 'events' + +/** + * Wrapper around the Cloudflare built-in socket that can be used by the `Connection`. + */ +export class CloudflareSocket extends EventEmitter { + writable = false + destroyed = false + + private _upgrading = false + private _upgraded = false + private _cfSocket: Socket | null = null + private _cfWriter: WritableStreamDefaultWriter | null = null + private _cfReader: ReadableStreamDefaultReader | null = null + + constructor(readonly ssl: boolean) { + super() + } + + setNoDelay() { + return this + } + setKeepAlive() { + return this + } + ref() { + return this + } + unref() { + return this + } + + async connect(port: number, host: string, connectListener?: (...args: unknown[]) => void) { + try { + log('connecting') + if (connectListener) this.once('connect', connectListener) + + const options: SocketOptions = this.ssl ? { secureTransport: 'starttls' } : {} + const mod = await import('cloudflare:sockets') + const connect = mod.connect + this._cfSocket = connect(`${host}:${port}`, options) + this._cfWriter = this._cfSocket.writable.getWriter() + this._addClosedHandler() + + this._cfReader = this._cfSocket.readable.getReader() + if (this.ssl) { + this._listenOnce().catch((e) => this.emit('error', e)) + } else { + this._listen().catch((e) => this.emit('error', e)) + } + + await this._cfWriter!.ready + log('socket ready') + this.writable = true + this.emit('connect') + + return this + } catch (e) { + this.emit('error', e) + } + } + + async _listen() { + // eslint-disable-next-line no-constant-condition + while (true) { + log('awaiting receive from CF socket') + const { done, value } = await this._cfReader!.read() + log('CF socket received:', done, value) + if (done) { + log('done') + break + } + this.emit('data', Buffer.from(value)) + } + } + + async _listenOnce() { + log('awaiting first receive from CF socket') + const { done, value } = await this._cfReader!.read() + log('First CF socket received:', done, value) + this.emit('data', Buffer.from(value)) + } + + write( + data: Uint8Array | string, + encoding: BufferEncoding = 'utf8', + callback: (...args: unknown[]) => void = () => {} + ) { + if (data.length === 0) return callback() + if (typeof data === 'string') data = Buffer.from(data, encoding) + + log('sending data direct:', data) + this._cfWriter!.write(data).then( + () => { + log('data sent') + callback() + }, + (err) => { + log('send error', err) + callback(err) + } + ) + return true + } + + end(data = Buffer.alloc(0), encoding: BufferEncoding = 'utf8', callback: (...args: unknown[]) => void = () => {}) { + log('ending CF socket') + this.write(data, encoding, (err) => { + this._cfSocket!.close() + if (callback) callback(err) + }) + return this + } + + destroy(reason: string) { + log('destroying CF socket', reason) + this.destroyed = true + return this.end() + } + + startTls(options: TlsOptions) { + if (this._upgraded) { + // Don't try to upgrade again. + this.emit('error', 'Cannot call `startTls()` more than once on a socket') + return + } + this._cfWriter!.releaseLock() + this._cfReader!.releaseLock() + this._upgrading = true + this._cfSocket = this._cfSocket!.startTls(options) + this._cfWriter = this._cfSocket.writable.getWriter() + this._cfReader = this._cfSocket.readable.getReader() + this._addClosedHandler() + this._listen().catch((e) => this.emit('error', e)) + } + + _addClosedHandler() { + this._cfSocket!.closed.then(() => { + if (!this._upgrading) { + log('CF socket closed') + this._cfSocket = null + this.emit('close') + } else { + this._upgrading = false + this._upgraded = true + } + }).catch((e) => this.emit('error', e)) + } +} + +const debug = false + +function dump(data: unknown) { + if (data instanceof Uint8Array || data instanceof ArrayBuffer) { + const hex = Buffer.from(data).toString('hex') + const str = new TextDecoder().decode(data) + return `\n>>> STR: "${str.replace(/\n/g, '\\n')}"\n>>> HEX: ${hex}\n` + } else { + return data + } +} + +function log(...args: unknown[]) { + debug && console.log(...args.map(dump)) +} diff --git a/node_modules/pg-cloudflare/src/types.d.ts b/node_modules/pg-cloudflare/src/types.d.ts new file mode 100644 index 00000000..f6f1c3f2 --- /dev/null +++ b/node_modules/pg-cloudflare/src/types.d.ts @@ -0,0 +1,25 @@ +declare module 'cloudflare:sockets' { + export class Socket { + public readonly readable: any + public readonly writable: any + public readonly closed: Promise + public close(): Promise + public startTls(options: TlsOptions): Socket + } + + export type TlsOptions = { + expectedServerHostname?: string + } + + export type SocketAddress = { + hostname: string + port: number + } + + export type SocketOptions = { + secureTransport?: 'off' | 'on' | 'starttls' + allowHalfOpen?: boolean + } + + export function connect(address: string | SocketAddress, options?: SocketOptions): Socket +} diff --git a/node_modules/pg-connection-string/LICENSE b/node_modules/pg-connection-string/LICENSE new file mode 100644 index 00000000..b068a6cb --- /dev/null +++ b/node_modules/pg-connection-string/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Iced Development + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/pg-connection-string/README.md b/node_modules/pg-connection-string/README.md new file mode 100644 index 00000000..e47adc81 --- /dev/null +++ b/node_modules/pg-connection-string/README.md @@ -0,0 +1,105 @@ +pg-connection-string +==================== + +[![NPM](https://nodei.co/npm/pg-connection-string.png?compact=true)](https://nodei.co/npm/pg-connection-string/) + +Functions for dealing with a PostgresSQL connection string + +`parse` method taken from [node-postgres](https://github.com/brianc/node-postgres.git) +Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com) +MIT License + +## Usage + +```js +const parse = require('pg-connection-string').parse; + +const config = parse('postgres://someuser:somepassword@somehost:381/somedatabase') +``` + +The resulting config contains a subset of the following properties: + +* `user` - User with which to authenticate to the server +* `password` - Corresponding password +* `host` - Postgres server hostname or, for UNIX domain sockets, the socket filename +* `port` - port on which to connect +* `database` - Database name within the server +* `client_encoding` - string encoding the client will use +* `ssl`, either a boolean or an object with properties + * `rejectUnauthorized` + * `cert` + * `key` + * `ca` +* any other query parameters (for example, `application_name`) are preserved intact. + +### ClientConfig Compatibility for TypeScript + +The pg-connection-string `ConnectionOptions` interface is not compatible with the `ClientConfig` interface that [pg.Client](https://node-postgres.com/apis/client) expects. To remedy this, use the `parseIntoClientConfig` function instead of `parse`: + +```ts +import { ClientConfig } from 'pg'; +import { parseIntoClientConfig } from 'pg-connection-string'; + +const config: ClientConfig = parseIntoClientConfig('postgres://someuser:somepassword@somehost:381/somedatabase') +``` + +You can also use `toClientConfig` to convert an existing `ConnectionOptions` interface into a `ClientConfig` interface: + +```ts +import { ClientConfig } from 'pg'; +import { parse, toClientConfig } from 'pg-connection-string'; + +const config = parse('postgres://someuser:somepassword@somehost:381/somedatabase') +const clientConfig: ClientConfig = toClientConfig(config) +``` + +## Connection Strings + +The short summary of acceptable URLs is: + + * `socket:?` - UNIX domain socket + * `postgres://:@:/?` - TCP connection + +But see below for more details. + +### UNIX Domain Sockets + +When user and password are not given, the socket path follows `socket:`, as in `socket:/var/run/pgsql`. +This form can be shortened to just a path: `/var/run/pgsql`. + +When user and password are given, they are included in the typical URL positions, with an empty `host`, as in `socket://user:pass@/var/run/pgsql`. + +Query parameters follow a `?` character, including the following special query parameters: + + * `db=` - sets the database name (urlencoded) + * `encoding=` - sets the `client_encoding` property + +### TCP Connections + +TCP connections to the Postgres server are indicated with `pg:` or `postgres:` schemes (in fact, any scheme but `socket:` is accepted). +If username and password are included, they should be urlencoded. +The database name, however, should *not* be urlencoded. + +Query parameters follow a `?` character, including the following special query parameters: + * `host=` - sets `host` property, overriding the URL's host + * `encoding=` - sets the `client_encoding` property + * `ssl=1`, `ssl=true`, `ssl=0`, `ssl=false` - sets `ssl` to true or false, accordingly + * `uselibpqcompat=true` - use libpq semantics + * `sslmode=` when `uselibpqcompat=true` is not set + * `sslmode=disable` - sets `ssl` to false + * `sslmode=no-verify` - sets `ssl` to `{ rejectUnauthorized: false }` + * `sslmode=prefer`, `sslmode=require`, `sslmode=verify-ca`, `sslmode=verify-full` - sets `ssl` to true + * `sslmode=` when `uselibpqcompat=true` + * `sslmode=disable` - sets `ssl` to false + * `sslmode=prefer` - sets `ssl` to `{ rejectUnauthorized: false }` + * `sslmode=require` - sets `ssl` to `{ rejectUnauthorized: false }` unless `sslrootcert` is specified, in which case it behaves like `verify-ca` + * `sslmode=verify-ca` - sets `ssl` to `{ checkServerIdentity: no-op }` (verify CA, but not server identity). This verifies the presented certificate against the effective CA specified in sslrootcert. + * `sslmode=verify-full` - sets `ssl` to `{}` (verify CA and server identity) + * `sslcert=` - reads data from the given file and includes the result as `ssl.cert` + * `sslkey=` - reads data from the given file and includes the result as `ssl.key` + * `sslrootcert=` - reads data from the given file and includes the result as `ssl.ca` + +A bare relative URL, such as `salesdata`, will indicate a database name while leaving other properties empty. + +> [!CAUTION] +> Choosing an sslmode other than verify-full has serious security implications. Please read https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS to understand the trade-offs. diff --git a/node_modules/pg-connection-string/esm/index.mjs b/node_modules/pg-connection-string/esm/index.mjs new file mode 100644 index 00000000..7b390c51 --- /dev/null +++ b/node_modules/pg-connection-string/esm/index.mjs @@ -0,0 +1,8 @@ +// ESM wrapper for pg-connection-string +import connectionString from '../index.js' + +// Re-export the parse function +export default connectionString.parse +export const parse = connectionString.parse +export const toClientConfig = connectionString.toClientConfig +export const parseIntoClientConfig = connectionString.parseIntoClientConfig diff --git a/node_modules/pg-connection-string/index.d.ts b/node_modules/pg-connection-string/index.d.ts new file mode 100644 index 00000000..2ebe6753 --- /dev/null +++ b/node_modules/pg-connection-string/index.d.ts @@ -0,0 +1,36 @@ +import { ClientConfig } from 'pg' + +export function parse(connectionString: string, options?: Options): ConnectionOptions + +export interface Options { + // Use libpq semantics when interpreting the connection string + useLibpqCompat?: boolean +} + +interface SSLConfig { + ca?: string + cert?: string | null + key?: string + rejectUnauthorized?: boolean +} + +export interface ConnectionOptions { + host: string | null + password?: string + user?: string + port?: string | null + database: string | null | undefined + client_encoding?: string + ssl?: boolean | string | SSLConfig + + application_name?: string + fallback_application_name?: string + options?: string + keepalives?: number + + // We allow any other options to be passed through + [key: string]: unknown +} + +export function toClientConfig(config: ConnectionOptions): ClientConfig +export function parseIntoClientConfig(connectionString: string): ClientConfig diff --git a/node_modules/pg-connection-string/index.js b/node_modules/pg-connection-string/index.js new file mode 100644 index 00000000..29ffeafd --- /dev/null +++ b/node_modules/pg-connection-string/index.js @@ -0,0 +1,231 @@ +'use strict' + +//Parse method copied from https://github.com/brianc/node-postgres +//Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com) +//MIT License + +//parses a connection string +function parse(str, options = {}) { + //unix socket + if (str.charAt(0) === '/') { + const config = str.split(' ') + return { host: config[0], database: config[1] } + } + + // Check for empty host in URL + + const config = {} + let result + let dummyHost = false + if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) { + // Ensure spaces are encoded as %20 + str = encodeURI(str).replace(/%25(\d\d)/g, '%$1') + } + + try { + try { + result = new URL(str, 'postgres://base') + } catch (e) { + // The URL is invalid so try again with a dummy host + result = new URL(str.replace('@/', '@___DUMMY___/'), 'postgres://base') + dummyHost = true + } + } catch (err) { + // Remove the input from the error message to avoid leaking sensitive information + err.input && (err.input = '*****REDACTED*****') + throw err + } + + // We'd like to use Object.fromEntries() here but Node.js 10 does not support it + for (const entry of result.searchParams.entries()) { + config[entry[0]] = entry[1] + } + + config.user = config.user || decodeURIComponent(result.username) + config.password = config.password || decodeURIComponent(result.password) + + if (result.protocol == 'socket:') { + config.host = decodeURI(result.pathname) + config.database = result.searchParams.get('db') + config.client_encoding = result.searchParams.get('encoding') + return config + } + const hostname = dummyHost ? '' : result.hostname + if (!config.host) { + // Only set the host if there is no equivalent query param. + config.host = decodeURIComponent(hostname) + } else if (hostname && /^%2f/i.test(hostname)) { + // Only prepend the hostname to the pathname if it is not a URL encoded Unix socket host. + result.pathname = hostname + result.pathname + } + if (!config.port) { + // Only set the port if there is no equivalent query param. + config.port = result.port + } + + const pathname = result.pathname.slice(1) || null + config.database = pathname ? decodeURI(pathname) : null + + if (config.ssl === 'true' || config.ssl === '1') { + config.ssl = true + } + + if (config.ssl === '0') { + config.ssl = false + } + + if (config.sslcert || config.sslkey || config.sslrootcert || config.sslmode) { + config.ssl = {} + } + + // Only try to load fs if we expect to read from the disk + const fs = config.sslcert || config.sslkey || config.sslrootcert ? require('fs') : null + + if (config.sslcert) { + config.ssl.cert = fs.readFileSync(config.sslcert).toString() + } + + if (config.sslkey) { + config.ssl.key = fs.readFileSync(config.sslkey).toString() + } + + if (config.sslrootcert) { + config.ssl.ca = fs.readFileSync(config.sslrootcert).toString() + } + + if (options.useLibpqCompat && config.uselibpqcompat) { + throw new Error('Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.') + } + + if (config.uselibpqcompat === 'true' || options.useLibpqCompat) { + switch (config.sslmode) { + case 'disable': { + config.ssl = false + break + } + case 'prefer': { + config.ssl.rejectUnauthorized = false + break + } + case 'require': { + if (config.sslrootcert) { + // If a root CA is specified, behavior of `sslmode=require` will be the same as that of `verify-ca` + config.ssl.checkServerIdentity = function () {} + } else { + config.ssl.rejectUnauthorized = false + } + break + } + case 'verify-ca': { + if (!config.ssl.ca) { + throw new Error( + 'SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.' + ) + } + config.ssl.checkServerIdentity = function () {} + break + } + case 'verify-full': { + break + } + } + } else { + switch (config.sslmode) { + case 'disable': { + config.ssl = false + break + } + case 'prefer': + case 'require': + case 'verify-ca': + case 'verify-full': { + if (config.sslmode !== 'verify-full') { + deprecatedSslModeWarning(config.sslmode) + } + break + } + case 'no-verify': { + config.ssl.rejectUnauthorized = false + break + } + } + } + + return config +} + +// convert pg-connection-string ssl config to a ClientConfig.ConnectionOptions +function toConnectionOptions(sslConfig) { + const connectionOptions = Object.entries(sslConfig).reduce((c, [key, value]) => { + // we explicitly check for undefined and null instead of `if (value)` because some + // options accept falsy values. Example: `ssl.rejectUnauthorized = false` + if (value !== undefined && value !== null) { + c[key] = value + } + + return c + }, {}) + + return connectionOptions +} + +// convert pg-connection-string config to a ClientConfig +function toClientConfig(config) { + const poolConfig = Object.entries(config).reduce((c, [key, value]) => { + if (key === 'ssl') { + const sslConfig = value + + if (typeof sslConfig === 'boolean') { + c[key] = sslConfig + } + + if (typeof sslConfig === 'object') { + c[key] = toConnectionOptions(sslConfig) + } + } else if (value !== undefined && value !== null) { + if (key === 'port') { + // when port is not specified, it is converted into an empty string + // we want to avoid NaN or empty string as a values in ClientConfig + if (value !== '') { + const v = parseInt(value, 10) + if (isNaN(v)) { + throw new Error(`Invalid ${key}: ${value}`) + } + + c[key] = v + } + } else { + c[key] = value + } + } + + return c + }, {}) + + return poolConfig +} + +// parses a connection string into ClientConfig +function parseIntoClientConfig(str) { + return toClientConfig(parse(str)) +} + +function deprecatedSslModeWarning(sslmode) { + if (!deprecatedSslModeWarning.warned && typeof process !== 'undefined' && process.emitWarning) { + deprecatedSslModeWarning.warned = true + process.emitWarning(`SECURITY WARNING: The SSL modes 'prefer', 'require', and 'verify-ca' are treated as aliases for 'verify-full'. +In the next major version (pg-connection-string v3.0.0 and pg v9.0.0), these modes will adopt standard libpq semantics, which have weaker security guarantees. + +To prepare for this change: +- If you want the current behavior, explicitly use 'sslmode=verify-full' +- If you want libpq compatibility now, use 'uselibpqcompat=true&sslmode=${sslmode}' + +See https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`) + } +} + +module.exports = parse + +parse.parse = parse +parse.toClientConfig = toClientConfig +parse.parseIntoClientConfig = parseIntoClientConfig diff --git a/node_modules/pg-connection-string/package.json b/node_modules/pg-connection-string/package.json new file mode 100644 index 00000000..01bf3977 --- /dev/null +++ b/node_modules/pg-connection-string/package.json @@ -0,0 +1,52 @@ +{ + "name": "pg-connection-string", + "version": "2.11.0", + "description": "Functions for dealing with a PostgresSQL connection string", + "main": "./index.js", + "types": "./index.d.ts", + "exports": { + ".": { + "types": "./index.d.ts", + "import": "./esm/index.mjs", + "require": "./index.js", + "default": "./index.js" + } + }, + "scripts": { + "test": "nyc --reporter=lcov mocha && npm run check-coverage", + "check-coverage": "nyc check-coverage --statements 100 --branches 100 --lines 100 --functions 100" + }, + "repository": { + "type": "git", + "url": "git://github.com/brianc/node-postgres.git", + "directory": "packages/pg-connection-string" + }, + "keywords": [ + "pg", + "connection", + "string", + "parse" + ], + "author": "Blaine Bublitz (http://iceddev.com/)", + "license": "MIT", + "bugs": { + "url": "https://github.com/brianc/node-postgres/issues" + }, + "homepage": "https://github.com/brianc/node-postgres/tree/master/packages/pg-connection-string", + "devDependencies": { + "@types/pg": "^8.12.0", + "chai": "^4.1.1", + "coveralls": "^3.0.4", + "istanbul": "^0.4.5", + "mocha": "^10.5.2", + "nyc": "^15", + "tsx": "^4.19.4", + "typescript": "^4.0.3" + }, + "files": [ + "index.js", + "index.d.ts", + "esm" + ], + "gitHead": "fc4de3c62ad350d0e1b392a0d132aff906d1cec6" +} diff --git a/node_modules/pg-int8/LICENSE b/node_modules/pg-int8/LICENSE new file mode 100644 index 00000000..c56c9731 --- /dev/null +++ b/node_modules/pg-int8/LICENSE @@ -0,0 +1,13 @@ +Copyright © 2017, Charmander <~@charmander.me> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/pg-int8/README.md b/node_modules/pg-int8/README.md new file mode 100644 index 00000000..ef2e6084 --- /dev/null +++ b/node_modules/pg-int8/README.md @@ -0,0 +1,16 @@ +[![Build status][ci image]][ci] + +64-bit big-endian signed integer-to-string conversion designed for [pg][]. + +```js +const readInt8 = require('pg-int8'); + +readInt8(Buffer.from([0, 1, 2, 3, 4, 5, 6, 7])) +// '283686952306183' +``` + + + [pg]: https://github.com/brianc/node-postgres + + [ci]: https://travis-ci.org/charmander/pg-int8 + [ci image]: https://api.travis-ci.org/charmander/pg-int8.svg diff --git a/node_modules/pg-int8/index.js b/node_modules/pg-int8/index.js new file mode 100644 index 00000000..db779750 --- /dev/null +++ b/node_modules/pg-int8/index.js @@ -0,0 +1,100 @@ +'use strict'; + +// selected so (BASE - 1) * 0x100000000 + 0xffffffff is a safe integer +var BASE = 1000000; + +function readInt8(buffer) { + var high = buffer.readInt32BE(0); + var low = buffer.readUInt32BE(4); + var sign = ''; + + if (high < 0) { + high = ~high + (low === 0); + low = (~low + 1) >>> 0; + sign = '-'; + } + + var result = ''; + var carry; + var t; + var digits; + var pad; + var l; + var i; + + { + carry = high % BASE; + high = high / BASE >>> 0; + + t = 0x100000000 * carry + low; + low = t / BASE >>> 0; + digits = '' + (t - BASE * low); + + if (low === 0 && high === 0) { + return sign + digits + result; + } + + pad = ''; + l = 6 - digits.length; + + for (i = 0; i < l; i++) { + pad += '0'; + } + + result = pad + digits + result; + } + + { + carry = high % BASE; + high = high / BASE >>> 0; + + t = 0x100000000 * carry + low; + low = t / BASE >>> 0; + digits = '' + (t - BASE * low); + + if (low === 0 && high === 0) { + return sign + digits + result; + } + + pad = ''; + l = 6 - digits.length; + + for (i = 0; i < l; i++) { + pad += '0'; + } + + result = pad + digits + result; + } + + { + carry = high % BASE; + high = high / BASE >>> 0; + + t = 0x100000000 * carry + low; + low = t / BASE >>> 0; + digits = '' + (t - BASE * low); + + if (low === 0 && high === 0) { + return sign + digits + result; + } + + pad = ''; + l = 6 - digits.length; + + for (i = 0; i < l; i++) { + pad += '0'; + } + + result = pad + digits + result; + } + + { + carry = high % BASE; + t = 0x100000000 * carry + low; + digits = '' + t % BASE; + + return sign + digits + result; + } +} + +module.exports = readInt8; diff --git a/node_modules/pg-int8/package.json b/node_modules/pg-int8/package.json new file mode 100644 index 00000000..4b937e1b --- /dev/null +++ b/node_modules/pg-int8/package.json @@ -0,0 +1,24 @@ +{ + "name": "pg-int8", + "version": "1.0.1", + "description": "64-bit big-endian signed integer-to-string conversion", + "bugs": "https://github.com/charmander/pg-int8/issues", + "license": "ISC", + "files": [ + "index.js" + ], + "repository": { + "type": "git", + "url": "https://github.com/charmander/pg-int8" + }, + "scripts": { + "test": "tap test" + }, + "devDependencies": { + "@charmander/eslint-config-base": "1.0.2", + "tap": "10.7.3" + }, + "engines": { + "node": ">=4.0.0" + } +} diff --git a/node_modules/pg-pool/LICENSE b/node_modules/pg-pool/LICENSE new file mode 100644 index 00000000..4e905814 --- /dev/null +++ b/node_modules/pg-pool/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Brian M. Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/pg-pool/README.md b/node_modules/pg-pool/README.md new file mode 100644 index 00000000..f3bb2d6b --- /dev/null +++ b/node_modules/pg-pool/README.md @@ -0,0 +1,358 @@ +# pg-pool + +[![Build Status](https://travis-ci.org/brianc/node-pg-pool.svg?branch=master)](https://travis-ci.org/brianc/node-pg-pool) + +A connection pool for node-postgres + +## install + +```sh +npm i pg-pool pg +``` + +## use + +### create + +to use pg-pool you must first create an instance of a pool + +```js +const Pool = require('pg-pool') + +// by default the pool uses the same +// configuration as whatever `pg` version you have installed +const pool = new Pool() + +// you can pass properties to the pool +// these properties are passed unchanged to both the node-postgres Client constructor +// and the node-pool (https://github.com/coopernurse/node-pool) constructor +// allowing you to fully configure the behavior of both +const pool2 = new Pool({ + database: 'postgres', + user: 'brianc', + password: 'secret!', + port: 5432, + ssl: true, + max: 20, // set pool max size to 20 + idleTimeoutMillis: 1000, // close idle clients after 1 second + connectionTimeoutMillis: 1000, // return an error after 1 second if connection could not be established + maxUses: 7500, // close (and replace) a connection after it has been used 7500 times (see below for discussion) +}) + +// you can supply a custom client constructor +// if you want to use the native postgres client +const NativeClient = require('pg').native.Client +const nativePool = new Pool({ Client: NativeClient }) + +// you can even pool pg-native clients directly +const PgNativeClient = require('pg-native') +const pgNativePool = new Pool({ Client: PgNativeClient }) +``` + +##### Note: + +The Pool constructor does not support passing a Database URL as the parameter. To use pg-pool on heroku, for example, you need to parse the URL into a config object. Here is an example of how to parse a Database URL. + +```js +const Pool = require('pg-pool') +const url = require('url') + +const params = url.parse(process.env.DATABASE_URL) +const auth = params.auth.split(':') + +const config = { + user: auth[0], + password: auth[1], + host: params.hostname, + port: params.port, + database: params.pathname.split('/')[1], + ssl: true, +} + +const pool = new Pool(config) + +/* + Transforms, 'postgres://DBuser:secret@DBHost:#####/myDB', into + config = { + user: 'DBuser', + password: 'secret', + host: 'DBHost', + port: '#####', + database: 'myDB', + ssl: true + } +*/ +``` + +### acquire clients with a promise + +pg-pool supports a fully promise-based api for acquiring clients + +```js +const pool = new Pool() +pool.connect().then((client) => { + client + .query('select $1::text as name', ['pg-pool']) + .then((res) => { + client.release() + console.log('hello from', res.rows[0].name) + }) + .catch((e) => { + client.release() + console.error('query error', e.message, e.stack) + }) +}) +``` + +### plays nice with async/await + +this ends up looking much nicer if you're using [co](https://github.com/tj/co) or async/await: + +```js +// with async/await +;(async () => { + const pool = new Pool() + const client = await pool.connect() + try { + const result = await client.query('select $1::text as name', ['brianc']) + console.log('hello from', result.rows[0]) + } finally { + client.release() + } +})().catch((e) => console.error(e.message, e.stack)) + +// with co +co(function* () { + const client = yield pool.connect() + try { + const result = yield client.query('select $1::text as name', ['brianc']) + console.log('hello from', result.rows[0]) + } finally { + client.release() + } +}).catch((e) => console.error(e.message, e.stack)) +``` + +### your new favorite helper method + +because its so common to just run a query and return the client to the pool afterward pg-pool has this built-in: + +```js +const pool = new Pool() +const time = await pool.query('SELECT NOW()') +const name = await pool.query('select $1::text as name', ['brianc']) +console.log(name.rows[0].name, 'says hello at', time.rows[0].now) +``` + +you can also use a callback here if you'd like: + +```js +const pool = new Pool() +pool.query('SELECT $1::text as name', ['brianc'], function (err, res) { + console.log(res.rows[0].name) // brianc +}) +``` + +**pro tip:** unless you need to run a transaction (which requires a single client for multiple queries) or you +have some other edge case like [streaming rows](https://github.com/brianc/node-pg-query-stream) or using a [cursor](https://github.com/brianc/node-pg-cursor) +you should almost always just use `pool.query`. Its easy, it does the right thing :tm:, and wont ever forget to return +clients back to the pool after the query is done. + +### drop-in backwards compatible + +pg-pool still and will always support the traditional callback api for acquiring a client. This is the exact API node-postgres has shipped with for years: + +```js +const pool = new Pool() +pool.connect((err, client, done) => { + if (err) return done(err) + + client.query('SELECT $1::text as name', ['pg-pool'], (err, res) => { + done() + if (err) { + return console.error('query error', err.message, err.stack) + } + console.log('hello from', res.rows[0].name) + }) +}) +``` + +### shut it down + +When you are finished with the pool if all the clients are idle the pool will close them after `config.idleTimeoutMillis` and your app +will shutdown gracefully. If you don't want to wait for the timeout you can end the pool as follows: + +```js +const pool = new Pool() +const client = await pool.connect() +console.log(await client.query('select now()')) +client.release() +await pool.end() +``` + +### a note on instances + +The pool should be a **long-lived object** in your application. Generally you'll want to instantiate one pool when your app starts up and use the same instance of the pool throughout the lifetime of your application. If you are frequently creating a new pool within your code you likely don't have your pool initialization code in the correct place. Example: + +```js +// assume this is a file in your program at ./your-app/lib/db.js + +// correct usage: create the pool and let it live +// 'globally' here, controlling access to it through exported methods +const pool = new pg.Pool() + +// this is the right way to export the query method +module.exports.query = (text, values) => { + console.log('query:', text, values) + return pool.query(text, values) +} + +// this would be the WRONG way to export the connect method +module.exports.connect = () => { + // notice how we would be creating a pool instance here + // every time we called 'connect' to get a new client? + // that's a bad thing & results in creating an unbounded + // number of pools & therefore connections + const aPool = new pg.Pool() + return aPool.connect() +} +``` + +### events + +Every instance of a `Pool` is an event emitter. These instances emit the following events: + +#### error + +Emitted whenever an idle client in the pool encounters an error. This is common when your PostgreSQL server shuts down, reboots, or a network partition otherwise causes it to become unavailable while your pool has connected clients. + +Example: + +```js +const Pool = require('pg-pool') +const pool = new Pool() + +// attach an error handler to the pool for when a connected, idle client +// receives an error by being disconnected, etc +pool.on('error', function (error, client) { + // handle this in the same way you would treat process.on('uncaughtException') + // it is supplied the error as well as the idle client which received the error +}) +``` + +#### connect + +Fired whenever the pool creates a **new** `pg.Client` instance and successfully connects it to the backend. + +Example: + +```js +const Pool = require('pg-pool') +const pool = new Pool() + +const count = 0 + +pool.on('connect', (client) => { + client.count = count++ +}) + +pool + .connect() + .then((client) => { + return client + .query('SELECT $1::int AS "clientCount"', [client.count]) + .then((res) => console.log(res.rows[0].clientCount)) // outputs 0 + .then(() => client) + }) + .then((client) => client.release()) +``` + +#### acquire + +Fired whenever a client is acquired from the pool + +Example: + +This allows you to count the number of clients which have ever been acquired from the pool. + +```js +const Pool = require('pg-pool') +const pool = new Pool() + +const acquireCount = 0 +pool.on('acquire', function (client) { + acquireCount++ +}) + +const connectCount = 0 +pool.on('connect', function () { + connectCount++ +}) + +for (let i = 0; i < 200; i++) { + pool.query('SELECT NOW()') +} + +setTimeout(function () { + console.log('connect count:', connectCount) // output: connect count: 10 + console.log('acquire count:', acquireCount) // output: acquire count: 200 +}, 100) +``` + +### environment variables + +pg-pool & node-postgres support some of the same environment variables as `psql` supports. The most common are: + +``` +PGDATABASE=my_db +PGUSER=username +PGPASSWORD="my awesome password" +PGPORT=5432 +PGSSLMODE=require +``` + +Usually I will export these into my local environment via a `.env` file with environment settings or export them in `~/.bash_profile` or something similar. This way I get configurability which works with both the postgres suite of tools (`psql`, `pg_dump`, `pg_restore`) and node, I can vary the environment variables locally and in production, and it supports the concept of a [12-factor app](http://12factor.net/) out of the box. + +## maxUses and read-replica autoscaling (e.g. AWS Aurora) + +The maxUses config option can help an application instance rebalance load against a replica set that has been auto-scaled after the connection pool is already full of healthy connections. + +The mechanism here is that a connection is considered "expended" after it has been acquired and released `maxUses` number of times. Depending on the load on your system, this means there will be an approximate time in which any given connection will live, thus creating a window for rebalancing. + +Imagine a scenario where you have 10 app instances providing an API running against a replica cluster of 3 that are accessed via a round-robin DNS entry. Each instance runs a connection pool size of 20. With an ambient load of 50 requests per second, the connection pool will likely fill up in a few minutes with healthy connections. + +If you have weekly bursts of traffic which peak at 1,000 requests per second, you might want to grow your replicas to 10 during this period. Without setting `maxUses`, the new replicas will not be adopted by the app servers without an intervention -- namely, restarting each in turn in order to build up new connection pools that are balanced against all the replicas. Adding additional app server instances will help to some extent because they will adopt all the replicas in an even way, but the initial app servers will continue to focus additional load on the original replicas. + +This is where the `maxUses` configuration option comes into play. Setting `maxUses` to 7500 will ensure that over a period of 30 minutes or so the new replicas will be adopted as the pre-existing connections are closed and replaced with new ones, thus creating a window for eventual balance. + +You'll want to test based on your own scenarios, but one way to make a first guess at `maxUses` is to identify an acceptable window for rebalancing and then solve for the value: + +``` +maxUses = rebalanceWindowSeconds * totalRequestsPerSecond / numAppInstances / poolSize +``` + +In the example above, assuming we acquire and release 1 connection per request and we are aiming for a 30 minute rebalancing window: + +``` +maxUses = rebalanceWindowSeconds * totalRequestsPerSecond / numAppInstances / poolSize + 7200 = 1800 * 1000 / 10 / 25 +``` + +## tests + +To run tests clone the repo, `npm i` in the working dir, and then run `npm test` + +## contributions + +I love contributions. Please make sure they have tests, and submit a PR. If you're not sure if the issue is worth it or will be accepted it never hurts to open an issue to begin the conversation. If you're interested in keeping up with node-postgres releated stuff, you can follow me on twitter at [@briancarlson](https://twitter.com/briancarlson) - I generally announce any noteworthy updates there. + +## license + +The MIT License (MIT) +Copyright (c) 2016 Brian M. Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/pg-pool/esm/index.mjs b/node_modules/pg-pool/esm/index.mjs new file mode 100644 index 00000000..a97fb624 --- /dev/null +++ b/node_modules/pg-pool/esm/index.mjs @@ -0,0 +1,5 @@ +// ESM wrapper for pg-pool +import Pool from '../index.js' + +// Export as default only to match CJS module +export default Pool diff --git a/node_modules/pg-pool/index.js b/node_modules/pg-pool/index.js new file mode 100644 index 00000000..3e505f79 --- /dev/null +++ b/node_modules/pg-pool/index.js @@ -0,0 +1,481 @@ +'use strict' +const EventEmitter = require('events').EventEmitter + +const NOOP = function () {} + +const removeWhere = (list, predicate) => { + const i = list.findIndex(predicate) + + return i === -1 ? undefined : list.splice(i, 1)[0] +} + +class IdleItem { + constructor(client, idleListener, timeoutId) { + this.client = client + this.idleListener = idleListener + this.timeoutId = timeoutId + } +} + +class PendingItem { + constructor(callback) { + this.callback = callback + } +} + +function throwOnDoubleRelease() { + throw new Error('Release called on client which has already been released to the pool.') +} + +function promisify(Promise, callback) { + if (callback) { + return { callback: callback, result: undefined } + } + let rej + let res + const cb = function (err, client) { + err ? rej(err) : res(client) + } + const result = new Promise(function (resolve, reject) { + res = resolve + rej = reject + }).catch((err) => { + // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the + // application that created the query + Error.captureStackTrace(err) + throw err + }) + return { callback: cb, result: result } +} + +function makeIdleListener(pool, client) { + return function idleListener(err) { + err.client = client + + client.removeListener('error', idleListener) + client.on('error', () => { + pool.log('additional client error after disconnection due to error', err) + }) + pool._remove(client) + // TODO - document that once the pool emits an error + // the client has already been closed & purged and is unusable + pool.emit('error', err, client) + } +} + +class Pool extends EventEmitter { + constructor(options, Client) { + super() + this.options = Object.assign({}, options) + + if (options != null && 'password' in options) { + // "hiding" the password so it doesn't show up in stack traces + // or if the client is console.logged + Object.defineProperty(this.options, 'password', { + configurable: true, + enumerable: false, + writable: true, + value: options.password, + }) + } + if (options != null && options.ssl && options.ssl.key) { + // "hiding" the ssl->key so it doesn't show up in stack traces + // or if the client is console.logged + Object.defineProperty(this.options.ssl, 'key', { + enumerable: false, + }) + } + + this.options.max = this.options.max || this.options.poolSize || 10 + this.options.min = this.options.min || 0 + this.options.maxUses = this.options.maxUses || Infinity + this.options.allowExitOnIdle = this.options.allowExitOnIdle || false + this.options.maxLifetimeSeconds = this.options.maxLifetimeSeconds || 0 + this.log = this.options.log || function () {} + this.Client = this.options.Client || Client || require('pg').Client + this.Promise = this.options.Promise || global.Promise + + if (typeof this.options.idleTimeoutMillis === 'undefined') { + this.options.idleTimeoutMillis = 10000 + } + + this._clients = [] + this._idle = [] + this._expired = new WeakSet() + this._pendingQueue = [] + this._endCallback = undefined + this.ending = false + this.ended = false + } + + _isFull() { + return this._clients.length >= this.options.max + } + + _isAboveMin() { + return this._clients.length > this.options.min + } + + _pulseQueue() { + this.log('pulse queue') + if (this.ended) { + this.log('pulse queue ended') + return + } + if (this.ending) { + this.log('pulse queue on ending') + if (this._idle.length) { + this._idle.slice().map((item) => { + this._remove(item.client) + }) + } + if (!this._clients.length) { + this.ended = true + this._endCallback() + } + return + } + + // if we don't have any waiting, do nothing + if (!this._pendingQueue.length) { + this.log('no queued requests') + return + } + // if we don't have any idle clients and we have no more room do nothing + if (!this._idle.length && this._isFull()) { + return + } + const pendingItem = this._pendingQueue.shift() + if (this._idle.length) { + const idleItem = this._idle.pop() + clearTimeout(idleItem.timeoutId) + const client = idleItem.client + client.ref && client.ref() + const idleListener = idleItem.idleListener + + return this._acquireClient(client, pendingItem, idleListener, false) + } + if (!this._isFull()) { + return this.newClient(pendingItem) + } + throw new Error('unexpected condition') + } + + _remove(client, callback) { + const removed = removeWhere(this._idle, (item) => item.client === client) + + if (removed !== undefined) { + clearTimeout(removed.timeoutId) + } + + this._clients = this._clients.filter((c) => c !== client) + const context = this + client.end(() => { + context.emit('remove', client) + + if (typeof callback === 'function') { + callback() + } + }) + } + + connect(cb) { + if (this.ending) { + const err = new Error('Cannot use a pool after calling end on the pool') + return cb ? cb(err) : this.Promise.reject(err) + } + + const response = promisify(this.Promise, cb) + const result = response.result + + // if we don't have to connect a new client, don't do so + if (this._isFull() || this._idle.length) { + // if we have idle clients schedule a pulse immediately + if (this._idle.length) { + process.nextTick(() => this._pulseQueue()) + } + + if (!this.options.connectionTimeoutMillis) { + this._pendingQueue.push(new PendingItem(response.callback)) + return result + } + + const queueCallback = (err, res, done) => { + clearTimeout(tid) + response.callback(err, res, done) + } + + const pendingItem = new PendingItem(queueCallback) + + // set connection timeout on checking out an existing client + const tid = setTimeout(() => { + // remove the callback from pending waiters because + // we're going to call it with a timeout error + removeWhere(this._pendingQueue, (i) => i.callback === queueCallback) + pendingItem.timedOut = true + response.callback(new Error('timeout exceeded when trying to connect')) + }, this.options.connectionTimeoutMillis) + + if (tid.unref) { + tid.unref() + } + + this._pendingQueue.push(pendingItem) + return result + } + + this.newClient(new PendingItem(response.callback)) + + return result + } + + newClient(pendingItem) { + const client = new this.Client(this.options) + this._clients.push(client) + const idleListener = makeIdleListener(this, client) + + this.log('checking client timeout') + + // connection timeout logic + let tid + let timeoutHit = false + if (this.options.connectionTimeoutMillis) { + tid = setTimeout(() => { + this.log('ending client due to timeout') + timeoutHit = true + // force kill the node driver, and let libpq do its teardown + client.connection ? client.connection.stream.destroy() : client.end() + }, this.options.connectionTimeoutMillis) + } + + this.log('connecting new client') + client.connect((err) => { + if (tid) { + clearTimeout(tid) + } + client.on('error', idleListener) + if (err) { + this.log('client failed to connect', err) + // remove the dead client from our list of clients + this._clients = this._clients.filter((c) => c !== client) + if (timeoutHit) { + err = new Error('Connection terminated due to connection timeout', { cause: err }) + } + + // this client won’t be released, so move on immediately + this._pulseQueue() + + if (!pendingItem.timedOut) { + pendingItem.callback(err, undefined, NOOP) + } + } else { + this.log('new client connected') + + if (this.options.maxLifetimeSeconds !== 0) { + const maxLifetimeTimeout = setTimeout(() => { + this.log('ending client due to expired lifetime') + this._expired.add(client) + const idleIndex = this._idle.findIndex((idleItem) => idleItem.client === client) + if (idleIndex !== -1) { + this._acquireClient( + client, + new PendingItem((err, client, clientRelease) => clientRelease()), + idleListener, + false + ) + } + }, this.options.maxLifetimeSeconds * 1000) + + maxLifetimeTimeout.unref() + client.once('end', () => clearTimeout(maxLifetimeTimeout)) + } + + return this._acquireClient(client, pendingItem, idleListener, true) + } + }) + } + + // acquire a client for a pending work item + _acquireClient(client, pendingItem, idleListener, isNew) { + if (isNew) { + this.emit('connect', client) + } + + this.emit('acquire', client) + + client.release = this._releaseOnce(client, idleListener) + + client.removeListener('error', idleListener) + + if (!pendingItem.timedOut) { + if (isNew && this.options.verify) { + this.options.verify(client, (err) => { + if (err) { + client.release(err) + return pendingItem.callback(err, undefined, NOOP) + } + + pendingItem.callback(undefined, client, client.release) + }) + } else { + pendingItem.callback(undefined, client, client.release) + } + } else { + if (isNew && this.options.verify) { + this.options.verify(client, client.release) + } else { + client.release() + } + } + } + + // returns a function that wraps _release and throws if called more than once + _releaseOnce(client, idleListener) { + let released = false + + return (err) => { + if (released) { + throwOnDoubleRelease() + } + + released = true + this._release(client, idleListener, err) + } + } + + // release a client back to the poll, include an error + // to remove it from the pool + _release(client, idleListener, err) { + client.on('error', idleListener) + + client._poolUseCount = (client._poolUseCount || 0) + 1 + + this.emit('release', err, client) + + // TODO(bmc): expose a proper, public interface _queryable and _ending + if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) { + if (client._poolUseCount >= this.options.maxUses) { + this.log('remove expended client') + } + + return this._remove(client, this._pulseQueue.bind(this)) + } + + const isExpired = this._expired.has(client) + if (isExpired) { + this.log('remove expired client') + this._expired.delete(client) + return this._remove(client, this._pulseQueue.bind(this)) + } + + // idle timeout + let tid + if (this.options.idleTimeoutMillis && this._isAboveMin()) { + tid = setTimeout(() => { + if (this._isAboveMin()) { + this.log('remove idle client') + this._remove(client, this._pulseQueue.bind(this)) + } + }, this.options.idleTimeoutMillis) + + if (this.options.allowExitOnIdle) { + // allow Node to exit if this is all that's left + tid.unref() + } + } + + if (this.options.allowExitOnIdle) { + client.unref() + } + + this._idle.push(new IdleItem(client, idleListener, tid)) + this._pulseQueue() + } + + query(text, values, cb) { + // guard clause against passing a function as the first parameter + if (typeof text === 'function') { + const response = promisify(this.Promise, text) + setImmediate(function () { + return response.callback(new Error('Passing a function as the first parameter to pool.query is not supported')) + }) + return response.result + } + + // allow plain text query without values + if (typeof values === 'function') { + cb = values + values = undefined + } + const response = promisify(this.Promise, cb) + cb = response.callback + + this.connect((err, client) => { + if (err) { + return cb(err) + } + + let clientReleased = false + const onError = (err) => { + if (clientReleased) { + return + } + clientReleased = true + client.release(err) + cb(err) + } + + client.once('error', onError) + this.log('dispatching query') + try { + client.query(text, values, (err, res) => { + this.log('query dispatched') + client.removeListener('error', onError) + if (clientReleased) { + return + } + clientReleased = true + client.release(err) + if (err) { + return cb(err) + } + return cb(undefined, res) + }) + } catch (err) { + client.release(err) + return cb(err) + } + }) + return response.result + } + + end(cb) { + this.log('ending') + if (this.ending) { + const err = new Error('Called end on pool more than once') + return cb ? cb(err) : this.Promise.reject(err) + } + this.ending = true + const promised = promisify(this.Promise, cb) + this._endCallback = promised.callback + this._pulseQueue() + return promised.result + } + + get waitingCount() { + return this._pendingQueue.length + } + + get idleCount() { + return this._idle.length + } + + get expiredCount() { + return this._clients.reduce((acc, client) => acc + (this._expired.has(client) ? 1 : 0), 0) + } + + get totalCount() { + return this._clients.length + } +} +module.exports = Pool diff --git a/node_modules/pg-pool/package.json b/node_modules/pg-pool/package.json new file mode 100644 index 00000000..fa3dc427 --- /dev/null +++ b/node_modules/pg-pool/package.json @@ -0,0 +1,51 @@ +{ + "name": "pg-pool", + "version": "3.11.0", + "description": "Connection pool for node-postgres", + "main": "index.js", + "exports": { + ".": { + "import": "./esm/index.mjs", + "require": "./index.js", + "default": "./index.js" + } + }, + "directories": { + "test": "test" + }, + "scripts": { + "test": " node_modules/.bin/mocha" + }, + "repository": { + "type": "git", + "url": "git://github.com/brianc/node-postgres.git", + "directory": "packages/pg-pool" + }, + "keywords": [ + "pg", + "postgres", + "pool", + "database" + ], + "author": "Brian M. Carlson", + "license": "MIT", + "bugs": { + "url": "https://github.com/brianc/node-postgres/issues" + }, + "homepage": "https://github.com/brianc/node-postgres/tree/master/packages/pg-pool#readme", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "expect.js": "0.3.1", + "lodash": "^4.17.11", + "mocha": "^10.5.2" + }, + "peerDependencies": { + "pg": ">=8.0" + }, + "files": [ + "index.js", + "esm" + ], + "gitHead": "d10e09c888f94abf77382aba6f353ca665a1cf09" +} diff --git a/node_modules/pg-protocol/LICENSE b/node_modules/pg-protocol/LICENSE new file mode 100644 index 00000000..5c140564 --- /dev/null +++ b/node_modules/pg-protocol/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2010 - 2021 Brian Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/pg-protocol/README.md b/node_modules/pg-protocol/README.md new file mode 100644 index 00000000..8c52e40e --- /dev/null +++ b/node_modules/pg-protocol/README.md @@ -0,0 +1,3 @@ +# pg-protocol + +Low level postgres wire protocol parser and serializer written in Typescript. Used by node-postgres. Needs more documentation. :smile: diff --git a/node_modules/pg-protocol/dist/b.d.ts b/node_modules/pg-protocol/dist/b.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/pg-protocol/dist/b.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/pg-protocol/dist/b.js b/node_modules/pg-protocol/dist/b.js new file mode 100644 index 00000000..6c47c105 --- /dev/null +++ b/node_modules/pg-protocol/dist/b.js @@ -0,0 +1,23 @@ +"use strict"; +// file for microbenchmarking +Object.defineProperty(exports, "__esModule", { value: true }); +const buffer_reader_1 = require("./buffer-reader"); +const LOOPS = 1000; +let count = 0; +const start = performance.now(); +const reader = new buffer_reader_1.BufferReader(); +const buffer = Buffer.from([33, 33, 33, 33, 33, 33, 33, 0]); +const run = () => { + if (count > LOOPS) { + console.log(performance.now() - start); + return; + } + count++; + for (let i = 0; i < LOOPS; i++) { + reader.setBuffer(0, buffer); + reader.cstring(); + } + setImmediate(run); +}; +run(); +//# sourceMappingURL=b.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/b.js.map b/node_modules/pg-protocol/dist/b.js.map new file mode 100644 index 00000000..ccc8d6f3 --- /dev/null +++ b/node_modules/pg-protocol/dist/b.js.map @@ -0,0 +1 @@ +{"version":3,"file":"b.js","sourceRoot":"","sources":["../src/b.ts"],"names":[],"mappings":";AAAA,6BAA6B;;AAE7B,mDAA8C;AAE9C,MAAM,KAAK,GAAG,IAAI,CAAA;AAClB,IAAI,KAAK,GAAG,CAAC,CAAA;AACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;AAE/B,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAA;AACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AAE3D,MAAM,GAAG,GAAG,GAAG,EAAE;IACf,IAAI,KAAK,GAAG,KAAK,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAA;QACtC,OAAM;KACP;IACD,KAAK,EAAE,CAAA;IACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC3B,MAAM,CAAC,OAAO,EAAE,CAAA;KACjB;IACD,YAAY,CAAC,GAAG,CAAC,CAAA;AACnB,CAAC,CAAA;AAED,GAAG,EAAE,CAAA"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/buffer-reader.d.ts b/node_modules/pg-protocol/dist/buffer-reader.d.ts new file mode 100644 index 00000000..41f753ec --- /dev/null +++ b/node_modules/pg-protocol/dist/buffer-reader.d.ts @@ -0,0 +1,15 @@ +/// +export declare class BufferReader { + private offset; + private buffer; + private encoding; + constructor(offset?: number); + setBuffer(offset: number, buffer: Buffer): void; + int16(): number; + byte(): number; + int32(): number; + uint32(): number; + string(length: number): string; + cstring(): string; + bytes(length: number): Buffer; +} diff --git a/node_modules/pg-protocol/dist/buffer-reader.js b/node_modules/pg-protocol/dist/buffer-reader.js new file mode 100644 index 00000000..f93db768 --- /dev/null +++ b/node_modules/pg-protocol/dist/buffer-reader.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BufferReader = void 0; +const emptyBuffer = Buffer.allocUnsafe(0); +class BufferReader { + constructor(offset = 0) { + this.offset = offset; + this.buffer = emptyBuffer; + // TODO(bmc): support non-utf8 encoding? + this.encoding = 'utf-8'; + } + setBuffer(offset, buffer) { + this.offset = offset; + this.buffer = buffer; + } + int16() { + const result = this.buffer.readInt16BE(this.offset); + this.offset += 2; + return result; + } + byte() { + const result = this.buffer[this.offset]; + this.offset++; + return result; + } + int32() { + const result = this.buffer.readInt32BE(this.offset); + this.offset += 4; + return result; + } + uint32() { + const result = this.buffer.readUInt32BE(this.offset); + this.offset += 4; + return result; + } + string(length) { + const result = this.buffer.toString(this.encoding, this.offset, this.offset + length); + this.offset += length; + return result; + } + cstring() { + const start = this.offset; + let end = start; + // eslint-disable-next-line no-empty + while (this.buffer[end++] !== 0) { } + this.offset = end; + return this.buffer.toString(this.encoding, start, end - 1); + } + bytes(length) { + const result = this.buffer.slice(this.offset, this.offset + length); + this.offset += length; + return result; + } +} +exports.BufferReader = BufferReader; +//# sourceMappingURL=buffer-reader.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/buffer-reader.js.map b/node_modules/pg-protocol/dist/buffer-reader.js.map new file mode 100644 index 00000000..8633c9c0 --- /dev/null +++ b/node_modules/pg-protocol/dist/buffer-reader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"buffer-reader.js","sourceRoot":"","sources":["../src/buffer-reader.ts"],"names":[],"mappings":";;;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;AAEzC,MAAa,YAAY;IAMvB,YAAoB,SAAiB,CAAC;QAAlB,WAAM,GAAN,MAAM,CAAY;QAL9B,WAAM,GAAW,WAAW,CAAA;QAEpC,wCAAwC;QAChC,aAAQ,GAAW,OAAO,CAAA;IAEO,CAAC;IAEnC,SAAS,CAAC,MAAc,EAAE,MAAc;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAEM,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,IAAI;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,MAAM;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,MAAM,CAAC,MAAc;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;QACrF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,GAAG,GAAG,KAAK,CAAA;QACf,oCAAoC;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAE;QACnC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;IAC5D,CAAC;IAEM,KAAK,CAAC,MAAc;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;QACnE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAzDD,oCAyDC"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/buffer-writer.d.ts b/node_modules/pg-protocol/dist/buffer-writer.d.ts new file mode 100644 index 00000000..4ac41e69 --- /dev/null +++ b/node_modules/pg-protocol/dist/buffer-writer.d.ts @@ -0,0 +1,16 @@ +/// +export declare class Writer { + private size; + private buffer; + private offset; + private headerPosition; + constructor(size?: number); + private ensure; + addInt32(num: number): Writer; + addInt16(num: number): Writer; + addCString(string: string): Writer; + addString(string?: string): Writer; + add(otherBuffer: Buffer): Writer; + private join; + flush(code?: number): Buffer; +} diff --git a/node_modules/pg-protocol/dist/buffer-writer.js b/node_modules/pg-protocol/dist/buffer-writer.js new file mode 100644 index 00000000..76b3f8c6 --- /dev/null +++ b/node_modules/pg-protocol/dist/buffer-writer.js @@ -0,0 +1,81 @@ +"use strict"; +//binary data writer tuned for encoding binary specific to the postgres binary protocol +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Writer = void 0; +class Writer { + constructor(size = 256) { + this.size = size; + this.offset = 5; + this.headerPosition = 0; + this.buffer = Buffer.allocUnsafe(size); + } + ensure(size) { + const remaining = this.buffer.length - this.offset; + if (remaining < size) { + const oldBuffer = this.buffer; + // exponential growth factor of around ~ 1.5 + // https://stackoverflow.com/questions/2269063/buffer-growth-strategy + const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size; + this.buffer = Buffer.allocUnsafe(newSize); + oldBuffer.copy(this.buffer); + } + } + addInt32(num) { + this.ensure(4); + this.buffer[this.offset++] = (num >>> 24) & 0xff; + this.buffer[this.offset++] = (num >>> 16) & 0xff; + this.buffer[this.offset++] = (num >>> 8) & 0xff; + this.buffer[this.offset++] = (num >>> 0) & 0xff; + return this; + } + addInt16(num) { + this.ensure(2); + this.buffer[this.offset++] = (num >>> 8) & 0xff; + this.buffer[this.offset++] = (num >>> 0) & 0xff; + return this; + } + addCString(string) { + if (!string) { + this.ensure(1); + } + else { + const len = Buffer.byteLength(string); + this.ensure(len + 1); // +1 for null terminator + this.buffer.write(string, this.offset, 'utf-8'); + this.offset += len; + } + this.buffer[this.offset++] = 0; // null terminator + return this; + } + addString(string = '') { + const len = Buffer.byteLength(string); + this.ensure(len); + this.buffer.write(string, this.offset); + this.offset += len; + return this; + } + add(otherBuffer) { + this.ensure(otherBuffer.length); + otherBuffer.copy(this.buffer, this.offset); + this.offset += otherBuffer.length; + return this; + } + join(code) { + if (code) { + this.buffer[this.headerPosition] = code; + //length is everything in this packet minus the code + const length = this.offset - (this.headerPosition + 1); + this.buffer.writeInt32BE(length, this.headerPosition + 1); + } + return this.buffer.slice(code ? 0 : 5, this.offset); + } + flush(code) { + const result = this.join(code); + this.offset = 5; + this.headerPosition = 0; + this.buffer = Buffer.allocUnsafe(this.size); + return result; + } +} +exports.Writer = Writer; +//# sourceMappingURL=buffer-writer.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/buffer-writer.js.map b/node_modules/pg-protocol/dist/buffer-writer.js.map new file mode 100644 index 00000000..5aa1ba05 --- /dev/null +++ b/node_modules/pg-protocol/dist/buffer-writer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"buffer-writer.js","sourceRoot":"","sources":["../src/buffer-writer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/inbound-parser.test.d.ts b/node_modules/pg-protocol/dist/inbound-parser.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/pg-protocol/dist/inbound-parser.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/pg-protocol/dist/inbound-parser.test.js b/node_modules/pg-protocol/dist/inbound-parser.test.js new file mode 100644 index 00000000..f64fa746 --- /dev/null +++ b/node_modules/pg-protocol/dist/inbound-parser.test.js @@ -0,0 +1,530 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const test_buffers_1 = __importDefault(require("./testing/test-buffers")); +const buffer_list_1 = __importDefault(require("./testing/buffer-list")); +const _1 = require("."); +const assert_1 = __importDefault(require("assert")); +const stream_1 = require("stream"); +const parser_1 = require("./parser"); +const authOkBuffer = test_buffers_1.default.authenticationOk(); +const paramStatusBuffer = test_buffers_1.default.parameterStatus('client_encoding', 'UTF8'); +const readyForQueryBuffer = test_buffers_1.default.readyForQuery(); +const backendKeyDataBuffer = test_buffers_1.default.backendKeyData(1, 2); +const commandCompleteBuffer = test_buffers_1.default.commandComplete('SELECT 3'); +const parseCompleteBuffer = test_buffers_1.default.parseComplete(); +const bindCompleteBuffer = test_buffers_1.default.bindComplete(); +const portalSuspendedBuffer = test_buffers_1.default.portalSuspended(); +const row1 = { + name: 'id', + tableID: 1, + attributeNumber: 2, + dataTypeID: 3, + dataTypeSize: 4, + typeModifier: 5, + formatCode: 0, +}; +const oneRowDescBuff = test_buffers_1.default.rowDescription([row1]); +row1.name = 'bang'; +const twoRowBuf = test_buffers_1.default.rowDescription([ + row1, + { + name: 'whoah', + tableID: 10, + attributeNumber: 11, + dataTypeID: 12, + dataTypeSize: 13, + typeModifier: 14, + formatCode: 0, + }, +]); +const rowWithBigOids = { + name: 'bigoid', + tableID: 3000000001, + attributeNumber: 2, + dataTypeID: 3000000003, + dataTypeSize: 4, + typeModifier: 5, + formatCode: 0, +}; +const bigOidDescBuff = test_buffers_1.default.rowDescription([rowWithBigOids]); +const emptyRowFieldBuf = test_buffers_1.default.dataRow([]); +const oneFieldBuf = test_buffers_1.default.dataRow(['test']); +const expectedAuthenticationOkayMessage = { + name: 'authenticationOk', + length: 8, +}; +const expectedParameterStatusMessage = { + name: 'parameterStatus', + parameterName: 'client_encoding', + parameterValue: 'UTF8', + length: 25, +}; +const expectedBackendKeyDataMessage = { + name: 'backendKeyData', + processID: 1, + secretKey: 2, +}; +const expectedReadyForQueryMessage = { + name: 'readyForQuery', + length: 5, + status: 'I', +}; +const expectedCommandCompleteMessage = { + name: 'commandComplete', + length: 13, + text: 'SELECT 3', +}; +const emptyRowDescriptionBuffer = new buffer_list_1.default() + .addInt16(0) // number of fields + .join(true, 'T'); +const expectedEmptyRowDescriptionMessage = { + name: 'rowDescription', + length: 6, + fieldCount: 0, + fields: [], +}; +const expectedOneRowMessage = { + name: 'rowDescription', + length: 27, + fieldCount: 1, + fields: [ + { + name: 'id', + tableID: 1, + columnID: 2, + dataTypeID: 3, + dataTypeSize: 4, + dataTypeModifier: 5, + format: 'text', + }, + ], +}; +const expectedTwoRowMessage = { + name: 'rowDescription', + length: 53, + fieldCount: 2, + fields: [ + { + name: 'bang', + tableID: 1, + columnID: 2, + dataTypeID: 3, + dataTypeSize: 4, + dataTypeModifier: 5, + format: 'text', + }, + { + name: 'whoah', + tableID: 10, + columnID: 11, + dataTypeID: 12, + dataTypeSize: 13, + dataTypeModifier: 14, + format: 'text', + }, + ], +}; +const expectedBigOidMessage = { + name: 'rowDescription', + length: 31, + fieldCount: 1, + fields: [ + { + name: 'bigoid', + tableID: 3000000001, + columnID: 2, + dataTypeID: 3000000003, + dataTypeSize: 4, + dataTypeModifier: 5, + format: 'text', + }, + ], +}; +const emptyParameterDescriptionBuffer = new buffer_list_1.default() + .addInt16(0) // number of parameters + .join(true, 't'); +const oneParameterDescBuf = test_buffers_1.default.parameterDescription([1111]); +const twoParameterDescBuf = test_buffers_1.default.parameterDescription([2222, 3333]); +const expectedEmptyParameterDescriptionMessage = { + name: 'parameterDescription', + length: 6, + parameterCount: 0, + dataTypeIDs: [], +}; +const expectedOneParameterMessage = { + name: 'parameterDescription', + length: 10, + parameterCount: 1, + dataTypeIDs: [1111], +}; +const expectedTwoParameterMessage = { + name: 'parameterDescription', + length: 14, + parameterCount: 2, + dataTypeIDs: [2222, 3333], +}; +const testForMessage = function (buffer, expectedMessage) { + it('receives and parses ' + expectedMessage.name, () => __awaiter(this, void 0, void 0, function* () { + const messages = yield parseBuffers([buffer]); + const [lastMessage] = messages; + for (const key in expectedMessage) { + assert_1.default.deepEqual(lastMessage[key], expectedMessage[key]); + } + })); +}; +const plainPasswordBuffer = test_buffers_1.default.authenticationCleartextPassword(); +const md5PasswordBuffer = test_buffers_1.default.authenticationMD5Password(); +const SASLBuffer = test_buffers_1.default.authenticationSASL(); +const SASLContinueBuffer = test_buffers_1.default.authenticationSASLContinue(); +const SASLFinalBuffer = test_buffers_1.default.authenticationSASLFinal(); +const expectedPlainPasswordMessage = { + name: 'authenticationCleartextPassword', +}; +const expectedMD5PasswordMessage = { + name: 'authenticationMD5Password', + salt: Buffer.from([1, 2, 3, 4]), +}; +const expectedSASLMessage = { + name: 'authenticationSASL', + mechanisms: ['SCRAM-SHA-256'], +}; +const expectedSASLContinueMessage = { + name: 'authenticationSASLContinue', + data: 'data', +}; +const expectedSASLFinalMessage = { + name: 'authenticationSASLFinal', + data: 'data', +}; +const notificationResponseBuffer = test_buffers_1.default.notification(4, 'hi', 'boom'); +const expectedNotificationResponseMessage = { + name: 'notification', + processId: 4, + channel: 'hi', + payload: 'boom', +}; +const parseBuffers = (buffers) => __awaiter(void 0, void 0, void 0, function* () { + const stream = new stream_1.PassThrough(); + for (const buffer of buffers) { + stream.write(buffer); + } + stream.end(); + const msgs = []; + yield (0, _1.parse)(stream, (msg) => msgs.push(msg)); + return msgs; +}); +describe('PgPacketStream', function () { + testForMessage(authOkBuffer, expectedAuthenticationOkayMessage); + testForMessage(plainPasswordBuffer, expectedPlainPasswordMessage); + testForMessage(md5PasswordBuffer, expectedMD5PasswordMessage); + testForMessage(SASLBuffer, expectedSASLMessage); + testForMessage(SASLContinueBuffer, expectedSASLContinueMessage); + // this exercises a found bug in the parser: + // https://github.com/brianc/node-postgres/pull/2210#issuecomment-627626084 + // and adds a test which is deterministic, rather than relying on network packet chunking + const extendedSASLContinueBuffer = Buffer.concat([SASLContinueBuffer, Buffer.from([1, 2, 3, 4])]); + testForMessage(extendedSASLContinueBuffer, expectedSASLContinueMessage); + testForMessage(SASLFinalBuffer, expectedSASLFinalMessage); + // this exercises a found bug in the parser: + // https://github.com/brianc/node-postgres/pull/2210#issuecomment-627626084 + // and adds a test which is deterministic, rather than relying on network packet chunking + const extendedSASLFinalBuffer = Buffer.concat([SASLFinalBuffer, Buffer.from([1, 2, 4, 5])]); + testForMessage(extendedSASLFinalBuffer, expectedSASLFinalMessage); + testForMessage(paramStatusBuffer, expectedParameterStatusMessage); + testForMessage(backendKeyDataBuffer, expectedBackendKeyDataMessage); + testForMessage(readyForQueryBuffer, expectedReadyForQueryMessage); + testForMessage(commandCompleteBuffer, expectedCommandCompleteMessage); + testForMessage(notificationResponseBuffer, expectedNotificationResponseMessage); + testForMessage(test_buffers_1.default.emptyQuery(), { + name: 'emptyQuery', + length: 4, + }); + testForMessage(Buffer.from([0x6e, 0, 0, 0, 4]), { + name: 'noData', + }); + describe('rowDescription messages', function () { + testForMessage(emptyRowDescriptionBuffer, expectedEmptyRowDescriptionMessage); + testForMessage(oneRowDescBuff, expectedOneRowMessage); + testForMessage(twoRowBuf, expectedTwoRowMessage); + testForMessage(bigOidDescBuff, expectedBigOidMessage); + }); + describe('parameterDescription messages', function () { + testForMessage(emptyParameterDescriptionBuffer, expectedEmptyParameterDescriptionMessage); + testForMessage(oneParameterDescBuf, expectedOneParameterMessage); + testForMessage(twoParameterDescBuf, expectedTwoParameterMessage); + }); + describe('parsing rows', function () { + describe('parsing empty row', function () { + testForMessage(emptyRowFieldBuf, { + name: 'dataRow', + fieldCount: 0, + }); + }); + describe('parsing data row with fields', function () { + testForMessage(oneFieldBuf, { + name: 'dataRow', + fieldCount: 1, + fields: ['test'], + }); + }); + }); + describe('notice message', function () { + // this uses the same logic as error message + const buff = test_buffers_1.default.notice([{ type: 'C', value: 'code' }]); + testForMessage(buff, { + name: 'notice', + code: 'code', + }); + }); + testForMessage(test_buffers_1.default.error([]), { + name: 'error', + }); + describe('with all the fields', function () { + const buffer = test_buffers_1.default.error([ + { + type: 'S', + value: 'ERROR', + }, + { + type: 'C', + value: 'code', + }, + { + type: 'M', + value: 'message', + }, + { + type: 'D', + value: 'details', + }, + { + type: 'H', + value: 'hint', + }, + { + type: 'P', + value: '100', + }, + { + type: 'p', + value: '101', + }, + { + type: 'q', + value: 'query', + }, + { + type: 'W', + value: 'where', + }, + { + type: 'F', + value: 'file', + }, + { + type: 'L', + value: 'line', + }, + { + type: 'R', + value: 'routine', + }, + { + type: 'Z', + value: 'alsdkf', + }, + ]); + testForMessage(buffer, { + name: 'error', + severity: 'ERROR', + code: 'code', + message: 'message', + detail: 'details', + hint: 'hint', + position: '100', + internalPosition: '101', + internalQuery: 'query', + where: 'where', + file: 'file', + line: 'line', + routine: 'routine', + }); + }); + testForMessage(parseCompleteBuffer, { + name: 'parseComplete', + }); + testForMessage(bindCompleteBuffer, { + name: 'bindComplete', + }); + testForMessage(bindCompleteBuffer, { + name: 'bindComplete', + }); + testForMessage(test_buffers_1.default.closeComplete(), { + name: 'closeComplete', + }); + describe('parses portal suspended message', function () { + testForMessage(portalSuspendedBuffer, { + name: 'portalSuspended', + }); + }); + describe('parses replication start message', function () { + testForMessage(Buffer.from([0x57, 0x00, 0x00, 0x00, 0x04]), { + name: 'replicationStart', + length: 4, + }); + }); + describe('copy', () => { + testForMessage(test_buffers_1.default.copyIn(0), { + name: 'copyInResponse', + length: 7, + binary: false, + columnTypes: [], + }); + testForMessage(test_buffers_1.default.copyIn(2), { + name: 'copyInResponse', + length: 11, + binary: false, + columnTypes: [0, 1], + }); + testForMessage(test_buffers_1.default.copyOut(0), { + name: 'copyOutResponse', + length: 7, + binary: false, + columnTypes: [], + }); + testForMessage(test_buffers_1.default.copyOut(3), { + name: 'copyOutResponse', + length: 13, + binary: false, + columnTypes: [0, 1, 2], + }); + testForMessage(test_buffers_1.default.copyDone(), { + name: 'copyDone', + length: 4, + }); + testForMessage(test_buffers_1.default.copyData(Buffer.from([5, 6, 7])), { + name: 'copyData', + length: 7, + chunk: Buffer.from([5, 6, 7]), + }); + }); + // since the data message on a stream can randomly divide the incomming + // tcp packets anywhere, we need to make sure we can parse every single + // split on a tcp message + describe('split buffer, single message parsing', function () { + const fullBuffer = test_buffers_1.default.dataRow([null, 'bang', 'zug zug', null, '!']); + it('parses when full buffer comes in', function () { + return __awaiter(this, void 0, void 0, function* () { + const messages = yield parseBuffers([fullBuffer]); + const message = messages[0]; + assert_1.default.equal(message.fields.length, 5); + assert_1.default.equal(message.fields[0], null); + assert_1.default.equal(message.fields[1], 'bang'); + assert_1.default.equal(message.fields[2], 'zug zug'); + assert_1.default.equal(message.fields[3], null); + assert_1.default.equal(message.fields[4], '!'); + }); + }); + const testMessageReceivedAfterSplitAt = function (split) { + return __awaiter(this, void 0, void 0, function* () { + const firstBuffer = Buffer.alloc(fullBuffer.length - split); + const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length); + fullBuffer.copy(firstBuffer, 0, 0); + fullBuffer.copy(secondBuffer, 0, firstBuffer.length); + const messages = yield parseBuffers([firstBuffer, secondBuffer]); + const message = messages[0]; + assert_1.default.equal(message.fields.length, 5); + assert_1.default.equal(message.fields[0], null); + assert_1.default.equal(message.fields[1], 'bang'); + assert_1.default.equal(message.fields[2], 'zug zug'); + assert_1.default.equal(message.fields[3], null); + assert_1.default.equal(message.fields[4], '!'); + }); + }; + it('parses when split in the middle', function () { + return testMessageReceivedAfterSplitAt(6); + }); + it('parses when split at end', function () { + return testMessageReceivedAfterSplitAt(2); + }); + it('parses when split at beginning', function () { + return Promise.all([ + testMessageReceivedAfterSplitAt(fullBuffer.length - 2), + testMessageReceivedAfterSplitAt(fullBuffer.length - 1), + testMessageReceivedAfterSplitAt(fullBuffer.length - 5), + ]); + }); + }); + describe('split buffer, multiple message parsing', function () { + const dataRowBuffer = test_buffers_1.default.dataRow(['!']); + const readyForQueryBuffer = test_buffers_1.default.readyForQuery(); + const fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length); + dataRowBuffer.copy(fullBuffer, 0, 0); + readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0); + const verifyMessages = function (messages) { + assert_1.default.strictEqual(messages.length, 2); + assert_1.default.deepEqual(messages[0], { + name: 'dataRow', + fieldCount: 1, + length: 11, + fields: ['!'], + }); + assert_1.default.equal(messages[0].fields[0], '!'); + assert_1.default.deepEqual(messages[1], { + name: 'readyForQuery', + length: 5, + status: 'I', + }); + }; + // sanity check + it('receives both messages when packet is not split', function () { + return __awaiter(this, void 0, void 0, function* () { + const messages = yield parseBuffers([fullBuffer]); + verifyMessages(messages); + }); + }); + const splitAndVerifyTwoMessages = function (split) { + return __awaiter(this, void 0, void 0, function* () { + const firstBuffer = Buffer.alloc(fullBuffer.length - split); + const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length); + fullBuffer.copy(firstBuffer, 0, 0); + fullBuffer.copy(secondBuffer, 0, firstBuffer.length); + const messages = yield parseBuffers([firstBuffer, secondBuffer]); + verifyMessages(messages); + }); + }; + describe('receives both messages when packet is split', function () { + it('in the middle', function () { + return splitAndVerifyTwoMessages(11); + }); + it('at the front', function () { + return Promise.all([ + splitAndVerifyTwoMessages(fullBuffer.length - 1), + splitAndVerifyTwoMessages(fullBuffer.length - 4), + splitAndVerifyTwoMessages(fullBuffer.length - 6), + ]); + }); + it('at the end', function () { + return Promise.all([splitAndVerifyTwoMessages(8), splitAndVerifyTwoMessages(1)]); + }); + }); + }); + it('cleans up the reader after handling a packet', function () { + const parser = new parser_1.Parser(); + parser.parse(oneFieldBuf, () => { }); + assert_1.default.strictEqual(parser.reader.buffer.byteLength, 0); + }); +}); +//# sourceMappingURL=inbound-parser.test.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/inbound-parser.test.js.map b/node_modules/pg-protocol/dist/inbound-parser.test.js.map new file mode 100644 index 00000000..aaa00e64 --- /dev/null +++ b/node_modules/pg-protocol/dist/inbound-parser.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inbound-parser.test.js","sourceRoot":"","sources":["../src/inbound-parser.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/index.d.ts b/node_modules/pg-protocol/dist/index.d.ts new file mode 100644 index 00000000..3961def0 --- /dev/null +++ b/node_modules/pg-protocol/dist/index.d.ts @@ -0,0 +1,6 @@ +/// +import { DatabaseError } from './messages'; +import { serialize } from './serializer'; +import { MessageCallback } from './parser'; +export declare function parse(stream: NodeJS.ReadableStream, callback: MessageCallback): Promise; +export { serialize, DatabaseError }; diff --git a/node_modules/pg-protocol/dist/index.js b/node_modules/pg-protocol/dist/index.js new file mode 100644 index 00000000..7eca3bf1 --- /dev/null +++ b/node_modules/pg-protocol/dist/index.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DatabaseError = exports.serialize = exports.parse = void 0; +const messages_1 = require("./messages"); +Object.defineProperty(exports, "DatabaseError", { enumerable: true, get: function () { return messages_1.DatabaseError; } }); +const serializer_1 = require("./serializer"); +Object.defineProperty(exports, "serialize", { enumerable: true, get: function () { return serializer_1.serialize; } }); +const parser_1 = require("./parser"); +function parse(stream, callback) { + const parser = new parser_1.Parser(); + stream.on('data', (buffer) => parser.parse(buffer, callback)); + return new Promise((resolve) => stream.on('end', () => resolve())); +} +exports.parse = parse; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/index.js.map b/node_modules/pg-protocol/dist/index.js.map new file mode 100644 index 00000000..db9423fd --- /dev/null +++ b/node_modules/pg-protocol/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAUtB,8FAVX,wBAAa,OAUW;AATjC,6CAAwC;AAS/B,0FATA,sBAAS,OASA;AARlB,qCAAkD;AAElD,SAAgB,KAAK,CAAC,MAA6B,EAAE,QAAyB;IAC5E,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAA;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IACrE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;AACpE,CAAC;AAJD,sBAIC"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/messages.d.ts b/node_modules/pg-protocol/dist/messages.d.ts new file mode 100644 index 00000000..f8f2e63d --- /dev/null +++ b/node_modules/pg-protocol/dist/messages.d.ts @@ -0,0 +1,162 @@ +/// +export declare type Mode = 'text' | 'binary'; +export declare type MessageName = 'parseComplete' | 'bindComplete' | 'closeComplete' | 'noData' | 'portalSuspended' | 'replicationStart' | 'emptyQuery' | 'copyDone' | 'copyData' | 'rowDescription' | 'parameterDescription' | 'parameterStatus' | 'backendKeyData' | 'notification' | 'readyForQuery' | 'commandComplete' | 'dataRow' | 'copyInResponse' | 'copyOutResponse' | 'authenticationOk' | 'authenticationMD5Password' | 'authenticationCleartextPassword' | 'authenticationSASL' | 'authenticationSASLContinue' | 'authenticationSASLFinal' | 'error' | 'notice'; +export interface BackendMessage { + name: MessageName; + length: number; +} +export declare const parseComplete: BackendMessage; +export declare const bindComplete: BackendMessage; +export declare const closeComplete: BackendMessage; +export declare const noData: BackendMessage; +export declare const portalSuspended: BackendMessage; +export declare const replicationStart: BackendMessage; +export declare const emptyQuery: BackendMessage; +export declare const copyDone: BackendMessage; +interface NoticeOrError { + message: string | undefined; + severity: string | undefined; + code: string | undefined; + detail: string | undefined; + hint: string | undefined; + position: string | undefined; + internalPosition: string | undefined; + internalQuery: string | undefined; + where: string | undefined; + schema: string | undefined; + table: string | undefined; + column: string | undefined; + dataType: string | undefined; + constraint: string | undefined; + file: string | undefined; + line: string | undefined; + routine: string | undefined; +} +export declare class DatabaseError extends Error implements NoticeOrError { + readonly length: number; + readonly name: MessageName; + severity: string | undefined; + code: string | undefined; + detail: string | undefined; + hint: string | undefined; + position: string | undefined; + internalPosition: string | undefined; + internalQuery: string | undefined; + where: string | undefined; + schema: string | undefined; + table: string | undefined; + column: string | undefined; + dataType: string | undefined; + constraint: string | undefined; + file: string | undefined; + line: string | undefined; + routine: string | undefined; + constructor(message: string, length: number, name: MessageName); +} +export declare class CopyDataMessage { + readonly length: number; + readonly chunk: Buffer; + readonly name = "copyData"; + constructor(length: number, chunk: Buffer); +} +export declare class CopyResponse { + readonly length: number; + readonly name: MessageName; + readonly binary: boolean; + readonly columnTypes: number[]; + constructor(length: number, name: MessageName, binary: boolean, columnCount: number); +} +export declare class Field { + readonly name: string; + readonly tableID: number; + readonly columnID: number; + readonly dataTypeID: number; + readonly dataTypeSize: number; + readonly dataTypeModifier: number; + readonly format: Mode; + constructor(name: string, tableID: number, columnID: number, dataTypeID: number, dataTypeSize: number, dataTypeModifier: number, format: Mode); +} +export declare class RowDescriptionMessage { + readonly length: number; + readonly fieldCount: number; + readonly name: MessageName; + readonly fields: Field[]; + constructor(length: number, fieldCount: number); +} +export declare class ParameterDescriptionMessage { + readonly length: number; + readonly parameterCount: number; + readonly name: MessageName; + readonly dataTypeIDs: number[]; + constructor(length: number, parameterCount: number); +} +export declare class ParameterStatusMessage { + readonly length: number; + readonly parameterName: string; + readonly parameterValue: string; + readonly name: MessageName; + constructor(length: number, parameterName: string, parameterValue: string); +} +export declare class AuthenticationMD5Password implements BackendMessage { + readonly length: number; + readonly salt: Buffer; + readonly name: MessageName; + constructor(length: number, salt: Buffer); +} +export declare class BackendKeyDataMessage { + readonly length: number; + readonly processID: number; + readonly secretKey: number; + readonly name: MessageName; + constructor(length: number, processID: number, secretKey: number); +} +export declare class NotificationResponseMessage { + readonly length: number; + readonly processId: number; + readonly channel: string; + readonly payload: string; + readonly name: MessageName; + constructor(length: number, processId: number, channel: string, payload: string); +} +export declare class ReadyForQueryMessage { + readonly length: number; + readonly status: string; + readonly name: MessageName; + constructor(length: number, status: string); +} +export declare class CommandCompleteMessage { + readonly length: number; + readonly text: string; + readonly name: MessageName; + constructor(length: number, text: string); +} +export declare class DataRowMessage { + length: number; + fields: any[]; + readonly fieldCount: number; + readonly name: MessageName; + constructor(length: number, fields: any[]); +} +export declare class NoticeMessage implements BackendMessage, NoticeOrError { + readonly length: number; + readonly message: string | undefined; + constructor(length: number, message: string | undefined); + readonly name = "notice"; + severity: string | undefined; + code: string | undefined; + detail: string | undefined; + hint: string | undefined; + position: string | undefined; + internalPosition: string | undefined; + internalQuery: string | undefined; + where: string | undefined; + schema: string | undefined; + table: string | undefined; + column: string | undefined; + dataType: string | undefined; + constraint: string | undefined; + file: string | undefined; + line: string | undefined; + routine: string | undefined; +} +export {}; diff --git a/node_modules/pg-protocol/dist/messages.js b/node_modules/pg-protocol/dist/messages.js new file mode 100644 index 00000000..b9f2c448 --- /dev/null +++ b/node_modules/pg-protocol/dist/messages.js @@ -0,0 +1,160 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NoticeMessage = exports.DataRowMessage = exports.CommandCompleteMessage = exports.ReadyForQueryMessage = exports.NotificationResponseMessage = exports.BackendKeyDataMessage = exports.AuthenticationMD5Password = exports.ParameterStatusMessage = exports.ParameterDescriptionMessage = exports.RowDescriptionMessage = exports.Field = exports.CopyResponse = exports.CopyDataMessage = exports.DatabaseError = exports.copyDone = exports.emptyQuery = exports.replicationStart = exports.portalSuspended = exports.noData = exports.closeComplete = exports.bindComplete = exports.parseComplete = void 0; +exports.parseComplete = { + name: 'parseComplete', + length: 5, +}; +exports.bindComplete = { + name: 'bindComplete', + length: 5, +}; +exports.closeComplete = { + name: 'closeComplete', + length: 5, +}; +exports.noData = { + name: 'noData', + length: 5, +}; +exports.portalSuspended = { + name: 'portalSuspended', + length: 5, +}; +exports.replicationStart = { + name: 'replicationStart', + length: 4, +}; +exports.emptyQuery = { + name: 'emptyQuery', + length: 4, +}; +exports.copyDone = { + name: 'copyDone', + length: 4, +}; +class DatabaseError extends Error { + constructor(message, length, name) { + super(message); + this.length = length; + this.name = name; + } +} +exports.DatabaseError = DatabaseError; +class CopyDataMessage { + constructor(length, chunk) { + this.length = length; + this.chunk = chunk; + this.name = 'copyData'; + } +} +exports.CopyDataMessage = CopyDataMessage; +class CopyResponse { + constructor(length, name, binary, columnCount) { + this.length = length; + this.name = name; + this.binary = binary; + this.columnTypes = new Array(columnCount); + } +} +exports.CopyResponse = CopyResponse; +class Field { + constructor(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, format) { + this.name = name; + this.tableID = tableID; + this.columnID = columnID; + this.dataTypeID = dataTypeID; + this.dataTypeSize = dataTypeSize; + this.dataTypeModifier = dataTypeModifier; + this.format = format; + } +} +exports.Field = Field; +class RowDescriptionMessage { + constructor(length, fieldCount) { + this.length = length; + this.fieldCount = fieldCount; + this.name = 'rowDescription'; + this.fields = new Array(this.fieldCount); + } +} +exports.RowDescriptionMessage = RowDescriptionMessage; +class ParameterDescriptionMessage { + constructor(length, parameterCount) { + this.length = length; + this.parameterCount = parameterCount; + this.name = 'parameterDescription'; + this.dataTypeIDs = new Array(this.parameterCount); + } +} +exports.ParameterDescriptionMessage = ParameterDescriptionMessage; +class ParameterStatusMessage { + constructor(length, parameterName, parameterValue) { + this.length = length; + this.parameterName = parameterName; + this.parameterValue = parameterValue; + this.name = 'parameterStatus'; + } +} +exports.ParameterStatusMessage = ParameterStatusMessage; +class AuthenticationMD5Password { + constructor(length, salt) { + this.length = length; + this.salt = salt; + this.name = 'authenticationMD5Password'; + } +} +exports.AuthenticationMD5Password = AuthenticationMD5Password; +class BackendKeyDataMessage { + constructor(length, processID, secretKey) { + this.length = length; + this.processID = processID; + this.secretKey = secretKey; + this.name = 'backendKeyData'; + } +} +exports.BackendKeyDataMessage = BackendKeyDataMessage; +class NotificationResponseMessage { + constructor(length, processId, channel, payload) { + this.length = length; + this.processId = processId; + this.channel = channel; + this.payload = payload; + this.name = 'notification'; + } +} +exports.NotificationResponseMessage = NotificationResponseMessage; +class ReadyForQueryMessage { + constructor(length, status) { + this.length = length; + this.status = status; + this.name = 'readyForQuery'; + } +} +exports.ReadyForQueryMessage = ReadyForQueryMessage; +class CommandCompleteMessage { + constructor(length, text) { + this.length = length; + this.text = text; + this.name = 'commandComplete'; + } +} +exports.CommandCompleteMessage = CommandCompleteMessage; +class DataRowMessage { + constructor(length, fields) { + this.length = length; + this.fields = fields; + this.name = 'dataRow'; + this.fieldCount = fields.length; + } +} +exports.DataRowMessage = DataRowMessage; +class NoticeMessage { + constructor(length, message) { + this.length = length; + this.message = message; + this.name = 'notice'; + } +} +exports.NoticeMessage = NoticeMessage; +//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/messages.js.map b/node_modules/pg-protocol/dist/messages.js.map new file mode 100644 index 00000000..9cf2581b --- /dev/null +++ b/node_modules/pg-protocol/dist/messages.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts b/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/pg-protocol/dist/outbound-serializer.test.js b/node_modules/pg-protocol/dist/outbound-serializer.test.js new file mode 100644 index 00000000..9644e1e5 --- /dev/null +++ b/node_modules/pg-protocol/dist/outbound-serializer.test.js @@ -0,0 +1,252 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const assert_1 = __importDefault(require("assert")); +const serializer_1 = require("./serializer"); +const buffer_list_1 = __importDefault(require("./testing/buffer-list")); +describe('serializer', () => { + it('builds startup message', function () { + const actual = serializer_1.serialize.startup({ + user: 'brian', + database: 'bang', + }); + assert_1.default.deepEqual(actual, new buffer_list_1.default() + .addInt16(3) + .addInt16(0) + .addCString('user') + .addCString('brian') + .addCString('database') + .addCString('bang') + .addCString('client_encoding') + .addCString('UTF8') + .addCString('') + .join(true)); + }); + it('builds password message', function () { + const actual = serializer_1.serialize.password('!'); + assert_1.default.deepEqual(actual, new buffer_list_1.default().addCString('!').join(true, 'p')); + }); + it('builds request ssl message', function () { + const actual = serializer_1.serialize.requestSsl(); + const expected = new buffer_list_1.default().addInt32(80877103).join(true); + assert_1.default.deepEqual(actual, expected); + }); + it('builds SASLInitialResponseMessage message', function () { + const actual = serializer_1.serialize.sendSASLInitialResponseMessage('mech', 'data'); + assert_1.default.deepEqual(actual, new buffer_list_1.default().addCString('mech').addInt32(4).addString('data').join(true, 'p')); + }); + it('builds SCRAMClientFinalMessage message', function () { + const actual = serializer_1.serialize.sendSCRAMClientFinalMessage('data'); + assert_1.default.deepEqual(actual, new buffer_list_1.default().addString('data').join(true, 'p')); + }); + it('builds query message', function () { + const txt = 'select * from boom'; + const actual = serializer_1.serialize.query(txt); + assert_1.default.deepEqual(actual, new buffer_list_1.default().addCString(txt).join(true, 'Q')); + }); + describe('parse message', () => { + it('builds parse message', function () { + const actual = serializer_1.serialize.parse({ text: '!' }); + const expected = new buffer_list_1.default().addCString('').addCString('!').addInt16(0).join(true, 'P'); + assert_1.default.deepEqual(actual, expected); + }); + it('builds parse message with named query', function () { + const actual = serializer_1.serialize.parse({ + name: 'boom', + text: 'select * from boom', + types: [], + }); + const expected = new buffer_list_1.default().addCString('boom').addCString('select * from boom').addInt16(0).join(true, 'P'); + assert_1.default.deepEqual(actual, expected); + }); + it('with multiple parameters', function () { + const actual = serializer_1.serialize.parse({ + name: 'force', + text: 'select * from bang where name = $1', + types: [1, 2, 3, 4], + }); + const expected = new buffer_list_1.default() + .addCString('force') + .addCString('select * from bang where name = $1') + .addInt16(4) + .addInt32(1) + .addInt32(2) + .addInt32(3) + .addInt32(4) + .join(true, 'P'); + assert_1.default.deepEqual(actual, expected); + }); + }); + describe('bind messages', function () { + it('with no values', function () { + const actual = serializer_1.serialize.bind(); + const expectedBuffer = new buffer_list_1.default() + .addCString('') + .addCString('') + .addInt16(0) + .addInt16(0) + .addInt16(1) + .addInt16(0) + .join(true, 'B'); + assert_1.default.deepEqual(actual, expectedBuffer); + }); + it('with named statement, portal, and values', function () { + const actual = serializer_1.serialize.bind({ + portal: 'bang', + statement: 'woo', + values: ['1', 'hi', null, 'zing'], + }); + const expectedBuffer = new buffer_list_1.default() + .addCString('bang') // portal name + .addCString('woo') // statement name + .addInt16(4) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(4) + .addInt32(1) + .add(Buffer.from('1')) + .addInt32(2) + .add(Buffer.from('hi')) + .addInt32(-1) + .addInt32(4) + .add(Buffer.from('zing')) + .addInt16(1) + .addInt16(0) + .join(true, 'B'); + assert_1.default.deepEqual(actual, expectedBuffer); + }); + }); + it('with custom valueMapper', function () { + const actual = serializer_1.serialize.bind({ + portal: 'bang', + statement: 'woo', + values: ['1', 'hi', null, 'zing'], + valueMapper: () => null, + }); + const expectedBuffer = new buffer_list_1.default() + .addCString('bang') // portal name + .addCString('woo') // statement name + .addInt16(4) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(4) + .addInt32(-1) + .addInt32(-1) + .addInt32(-1) + .addInt32(-1) + .addInt16(1) + .addInt16(0) + .join(true, 'B'); + assert_1.default.deepEqual(actual, expectedBuffer); + }); + it('with named statement, portal, and buffer value', function () { + const actual = serializer_1.serialize.bind({ + portal: 'bang', + statement: 'woo', + values: ['1', 'hi', null, Buffer.from('zing', 'utf8')], + }); + const expectedBuffer = new buffer_list_1.default() + .addCString('bang') // portal name + .addCString('woo') // statement name + .addInt16(4) // value count + .addInt16(0) // string + .addInt16(0) // string + .addInt16(0) // string + .addInt16(1) // binary + .addInt16(4) + .addInt32(1) + .add(Buffer.from('1')) + .addInt32(2) + .add(Buffer.from('hi')) + .addInt32(-1) + .addInt32(4) + .add(Buffer.from('zing', 'utf-8')) + .addInt16(1) + .addInt16(0) + .join(true, 'B'); + assert_1.default.deepEqual(actual, expectedBuffer); + }); + describe('builds execute message', function () { + it('for unamed portal with no row limit', function () { + const actual = serializer_1.serialize.execute(); + const expectedBuffer = new buffer_list_1.default().addCString('').addInt32(0).join(true, 'E'); + assert_1.default.deepEqual(actual, expectedBuffer); + }); + it('for named portal with row limit', function () { + const actual = serializer_1.serialize.execute({ + portal: 'my favorite portal', + rows: 100, + }); + const expectedBuffer = new buffer_list_1.default().addCString('my favorite portal').addInt32(100).join(true, 'E'); + assert_1.default.deepEqual(actual, expectedBuffer); + }); + }); + it('builds flush command', function () { + const actual = serializer_1.serialize.flush(); + const expected = new buffer_list_1.default().join(true, 'H'); + assert_1.default.deepEqual(actual, expected); + }); + it('builds sync command', function () { + const actual = serializer_1.serialize.sync(); + const expected = new buffer_list_1.default().join(true, 'S'); + assert_1.default.deepEqual(actual, expected); + }); + it('builds end command', function () { + const actual = serializer_1.serialize.end(); + const expected = Buffer.from([0x58, 0, 0, 0, 4]); + assert_1.default.deepEqual(actual, expected); + }); + describe('builds describe command', function () { + it('describe statement', function () { + const actual = serializer_1.serialize.describe({ type: 'S', name: 'bang' }); + const expected = new buffer_list_1.default().addChar('S').addCString('bang').join(true, 'D'); + assert_1.default.deepEqual(actual, expected); + }); + it('describe unnamed portal', function () { + const actual = serializer_1.serialize.describe({ type: 'P' }); + const expected = new buffer_list_1.default().addChar('P').addCString('').join(true, 'D'); + assert_1.default.deepEqual(actual, expected); + }); + }); + describe('builds close command', function () { + it('describe statement', function () { + const actual = serializer_1.serialize.close({ type: 'S', name: 'bang' }); + const expected = new buffer_list_1.default().addChar('S').addCString('bang').join(true, 'C'); + assert_1.default.deepEqual(actual, expected); + }); + it('describe unnamed portal', function () { + const actual = serializer_1.serialize.close({ type: 'P' }); + const expected = new buffer_list_1.default().addChar('P').addCString('').join(true, 'C'); + assert_1.default.deepEqual(actual, expected); + }); + }); + describe('copy messages', function () { + it('builds copyFromChunk', () => { + const actual = serializer_1.serialize.copyData(Buffer.from([1, 2, 3])); + const expected = new buffer_list_1.default().add(Buffer.from([1, 2, 3])).join(true, 'd'); + assert_1.default.deepEqual(actual, expected); + }); + it('builds copy fail', () => { + const actual = serializer_1.serialize.copyFail('err!'); + const expected = new buffer_list_1.default().addCString('err!').join(true, 'f'); + assert_1.default.deepEqual(actual, expected); + }); + it('builds copy done', () => { + const actual = serializer_1.serialize.copyDone(); + const expected = new buffer_list_1.default().join(true, 'c'); + assert_1.default.deepEqual(actual, expected); + }); + }); + it('builds cancel message', () => { + const actual = serializer_1.serialize.cancel(3, 4); + const expected = new buffer_list_1.default().addInt16(1234).addInt16(5678).addInt32(3).addInt32(4).join(true); + assert_1.default.deepEqual(actual, expected); + }); +}); +//# sourceMappingURL=outbound-serializer.test.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/outbound-serializer.test.js.map b/node_modules/pg-protocol/dist/outbound-serializer.test.js.map new file mode 100644 index 00000000..0a3cdce1 --- /dev/null +++ b/node_modules/pg-protocol/dist/outbound-serializer.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"outbound-serializer.test.js","sourceRoot":"","sources":["../src/outbound-serializer.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/parser.d.ts b/node_modules/pg-protocol/dist/parser.d.ts new file mode 100644 index 00000000..f1e37f92 --- /dev/null +++ b/node_modules/pg-protocol/dist/parser.d.ts @@ -0,0 +1,24 @@ +/// +/// +import { TransformOptions } from 'stream'; +import { Mode, BackendMessage } from './messages'; +export declare type Packet = { + code: number; + packet: Buffer; +}; +declare type StreamOptions = TransformOptions & { + mode: Mode; +}; +export declare type MessageCallback = (msg: BackendMessage) => void; +export declare class Parser { + private buffer; + private bufferLength; + private bufferOffset; + private reader; + private mode; + constructor(opts?: StreamOptions); + parse(buffer: Buffer, callback: MessageCallback): void; + private mergeBuffer; + private handlePacket; +} +export {}; diff --git a/node_modules/pg-protocol/dist/parser.js b/node_modules/pg-protocol/dist/parser.js new file mode 100644 index 00000000..b05fe75a --- /dev/null +++ b/node_modules/pg-protocol/dist/parser.js @@ -0,0 +1,324 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Parser = void 0; +const messages_1 = require("./messages"); +const buffer_reader_1 = require("./buffer-reader"); +// every message is prefixed with a single bye +const CODE_LENGTH = 1; +// every message has an int32 length which includes itself but does +// NOT include the code in the length +const LEN_LENGTH = 4; +const HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH; +// A placeholder for a `BackendMessage`’s length value that will be set after construction. +const LATEINIT_LENGTH = -1; +const emptyBuffer = Buffer.allocUnsafe(0); +class Parser { + constructor(opts) { + this.buffer = emptyBuffer; + this.bufferLength = 0; + this.bufferOffset = 0; + this.reader = new buffer_reader_1.BufferReader(); + if ((opts === null || opts === void 0 ? void 0 : opts.mode) === 'binary') { + throw new Error('Binary mode not supported yet'); + } + this.mode = (opts === null || opts === void 0 ? void 0 : opts.mode) || 'text'; + } + parse(buffer, callback) { + this.mergeBuffer(buffer); + const bufferFullLength = this.bufferOffset + this.bufferLength; + let offset = this.bufferOffset; + while (offset + HEADER_LENGTH <= bufferFullLength) { + // code is 1 byte long - it identifies the message type + const code = this.buffer[offset]; + // length is 1 Uint32BE - it is the length of the message EXCLUDING the code + const length = this.buffer.readUInt32BE(offset + CODE_LENGTH); + const fullMessageLength = CODE_LENGTH + length; + if (fullMessageLength + offset <= bufferFullLength) { + const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer); + callback(message); + offset += fullMessageLength; + } + else { + break; + } + } + if (offset === bufferFullLength) { + // No more use for the buffer + this.buffer = emptyBuffer; + this.bufferLength = 0; + this.bufferOffset = 0; + } + else { + // Adjust the cursors of remainingBuffer + this.bufferLength = bufferFullLength - offset; + this.bufferOffset = offset; + } + } + mergeBuffer(buffer) { + if (this.bufferLength > 0) { + const newLength = this.bufferLength + buffer.byteLength; + const newFullLength = newLength + this.bufferOffset; + if (newFullLength > this.buffer.byteLength) { + // We can't concat the new buffer with the remaining one + let newBuffer; + if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) { + // We can move the relevant part to the beginning of the buffer instead of allocating a new buffer + newBuffer = this.buffer; + } + else { + // Allocate a new larger buffer + let newBufferLength = this.buffer.byteLength * 2; + while (newLength >= newBufferLength) { + newBufferLength *= 2; + } + newBuffer = Buffer.allocUnsafe(newBufferLength); + } + // Move the remaining buffer to the new one + this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength); + this.buffer = newBuffer; + this.bufferOffset = 0; + } + // Concat the new buffer with the remaining one + buffer.copy(this.buffer, this.bufferOffset + this.bufferLength); + this.bufferLength = newLength; + } + else { + this.buffer = buffer; + this.bufferOffset = 0; + this.bufferLength = buffer.byteLength; + } + } + handlePacket(offset, code, length, bytes) { + const { reader } = this; + // NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded. + reader.setBuffer(offset, bytes); + let message; + switch (code) { + case 50 /* MessageCodes.BindComplete */: + message = messages_1.bindComplete; + break; + case 49 /* MessageCodes.ParseComplete */: + message = messages_1.parseComplete; + break; + case 51 /* MessageCodes.CloseComplete */: + message = messages_1.closeComplete; + break; + case 110 /* MessageCodes.NoData */: + message = messages_1.noData; + break; + case 115 /* MessageCodes.PortalSuspended */: + message = messages_1.portalSuspended; + break; + case 99 /* MessageCodes.CopyDone */: + message = messages_1.copyDone; + break; + case 87 /* MessageCodes.ReplicationStart */: + message = messages_1.replicationStart; + break; + case 73 /* MessageCodes.EmptyQuery */: + message = messages_1.emptyQuery; + break; + case 68 /* MessageCodes.DataRow */: + message = parseDataRowMessage(reader); + break; + case 67 /* MessageCodes.CommandComplete */: + message = parseCommandCompleteMessage(reader); + break; + case 90 /* MessageCodes.ReadyForQuery */: + message = parseReadyForQueryMessage(reader); + break; + case 65 /* MessageCodes.NotificationResponse */: + message = parseNotificationMessage(reader); + break; + case 82 /* MessageCodes.AuthenticationResponse */: + message = parseAuthenticationResponse(reader, length); + break; + case 83 /* MessageCodes.ParameterStatus */: + message = parseParameterStatusMessage(reader); + break; + case 75 /* MessageCodes.BackendKeyData */: + message = parseBackendKeyData(reader); + break; + case 69 /* MessageCodes.ErrorMessage */: + message = parseErrorMessage(reader, 'error'); + break; + case 78 /* MessageCodes.NoticeMessage */: + message = parseErrorMessage(reader, 'notice'); + break; + case 84 /* MessageCodes.RowDescriptionMessage */: + message = parseRowDescriptionMessage(reader); + break; + case 116 /* MessageCodes.ParameterDescriptionMessage */: + message = parseParameterDescriptionMessage(reader); + break; + case 71 /* MessageCodes.CopyIn */: + message = parseCopyInMessage(reader); + break; + case 72 /* MessageCodes.CopyOut */: + message = parseCopyOutMessage(reader); + break; + case 100 /* MessageCodes.CopyData */: + message = parseCopyData(reader, length); + break; + default: + return new messages_1.DatabaseError('received invalid response: ' + code.toString(16), length, 'error'); + } + reader.setBuffer(0, emptyBuffer); + message.length = length; + return message; + } +} +exports.Parser = Parser; +const parseReadyForQueryMessage = (reader) => { + const status = reader.string(1); + return new messages_1.ReadyForQueryMessage(LATEINIT_LENGTH, status); +}; +const parseCommandCompleteMessage = (reader) => { + const text = reader.cstring(); + return new messages_1.CommandCompleteMessage(LATEINIT_LENGTH, text); +}; +const parseCopyData = (reader, length) => { + const chunk = reader.bytes(length - 4); + return new messages_1.CopyDataMessage(LATEINIT_LENGTH, chunk); +}; +const parseCopyInMessage = (reader) => parseCopyMessage(reader, 'copyInResponse'); +const parseCopyOutMessage = (reader) => parseCopyMessage(reader, 'copyOutResponse'); +const parseCopyMessage = (reader, messageName) => { + const isBinary = reader.byte() !== 0; + const columnCount = reader.int16(); + const message = new messages_1.CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount); + for (let i = 0; i < columnCount; i++) { + message.columnTypes[i] = reader.int16(); + } + return message; +}; +const parseNotificationMessage = (reader) => { + const processId = reader.int32(); + const channel = reader.cstring(); + const payload = reader.cstring(); + return new messages_1.NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload); +}; +const parseRowDescriptionMessage = (reader) => { + const fieldCount = reader.int16(); + const message = new messages_1.RowDescriptionMessage(LATEINIT_LENGTH, fieldCount); + for (let i = 0; i < fieldCount; i++) { + message.fields[i] = parseField(reader); + } + return message; +}; +const parseField = (reader) => { + const name = reader.cstring(); + const tableID = reader.uint32(); + const columnID = reader.int16(); + const dataTypeID = reader.uint32(); + const dataTypeSize = reader.int16(); + const dataTypeModifier = reader.int32(); + const mode = reader.int16() === 0 ? 'text' : 'binary'; + return new messages_1.Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode); +}; +const parseParameterDescriptionMessage = (reader) => { + const parameterCount = reader.int16(); + const message = new messages_1.ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount); + for (let i = 0; i < parameterCount; i++) { + message.dataTypeIDs[i] = reader.int32(); + } + return message; +}; +const parseDataRowMessage = (reader) => { + const fieldCount = reader.int16(); + const fields = new Array(fieldCount); + for (let i = 0; i < fieldCount; i++) { + const len = reader.int32(); + // a -1 for length means the value of the field is null + fields[i] = len === -1 ? null : reader.string(len); + } + return new messages_1.DataRowMessage(LATEINIT_LENGTH, fields); +}; +const parseParameterStatusMessage = (reader) => { + const name = reader.cstring(); + const value = reader.cstring(); + return new messages_1.ParameterStatusMessage(LATEINIT_LENGTH, name, value); +}; +const parseBackendKeyData = (reader) => { + const processID = reader.int32(); + const secretKey = reader.int32(); + return new messages_1.BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey); +}; +const parseAuthenticationResponse = (reader, length) => { + const code = reader.int32(); + // TODO(bmc): maybe better types here + const message = { + name: 'authenticationOk', + length, + }; + switch (code) { + case 0: // AuthenticationOk + break; + case 3: // AuthenticationCleartextPassword + if (message.length === 8) { + message.name = 'authenticationCleartextPassword'; + } + break; + case 5: // AuthenticationMD5Password + if (message.length === 12) { + message.name = 'authenticationMD5Password'; + const salt = reader.bytes(4); + return new messages_1.AuthenticationMD5Password(LATEINIT_LENGTH, salt); + } + break; + case 10: // AuthenticationSASL + { + message.name = 'authenticationSASL'; + message.mechanisms = []; + let mechanism; + do { + mechanism = reader.cstring(); + if (mechanism) { + message.mechanisms.push(mechanism); + } + } while (mechanism); + } + break; + case 11: // AuthenticationSASLContinue + message.name = 'authenticationSASLContinue'; + message.data = reader.string(length - 8); + break; + case 12: // AuthenticationSASLFinal + message.name = 'authenticationSASLFinal'; + message.data = reader.string(length - 8); + break; + default: + throw new Error('Unknown authenticationOk message type ' + code); + } + return message; +}; +const parseErrorMessage = (reader, name) => { + const fields = {}; + let fieldType = reader.string(1); + while (fieldType !== '\0') { + fields[fieldType] = reader.cstring(); + fieldType = reader.string(1); + } + const messageValue = fields.M; + const message = name === 'notice' + ? new messages_1.NoticeMessage(LATEINIT_LENGTH, messageValue) + : new messages_1.DatabaseError(messageValue, LATEINIT_LENGTH, name); + message.severity = fields.S; + message.code = fields.C; + message.detail = fields.D; + message.hint = fields.H; + message.position = fields.P; + message.internalPosition = fields.p; + message.internalQuery = fields.q; + message.where = fields.W; + message.schema = fields.s; + message.table = fields.t; + message.column = fields.c; + message.dataType = fields.d; + message.constraint = fields.n; + message.file = fields.F; + message.line = fields.L; + message.routine = fields.R; + return message; +}; +//# sourceMappingURL=parser.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/parser.js.map b/node_modules/pg-protocol/dist/parser.js.map new file mode 100644 index 00000000..947ab29d --- /dev/null +++ b/node_modules/pg-protocol/dist/parser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/serializer.d.ts b/node_modules/pg-protocol/dist/serializer.d.ts new file mode 100644 index 00000000..a9ef64af --- /dev/null +++ b/node_modules/pg-protocol/dist/serializer.d.ts @@ -0,0 +1,42 @@ +declare type ParseOpts = { + name?: string; + types?: number[]; + text: string; +}; +declare type ValueMapper = (param: any, index: number) => any; +declare type BindOpts = { + portal?: string; + binary?: boolean; + statement?: string; + values?: any[]; + valueMapper?: ValueMapper; +}; +declare type ExecOpts = { + portal?: string; + rows?: number; +}; +declare type PortalOpts = { + type: 'S' | 'P'; + name?: string; +}; +declare const serialize: { + startup: (opts: Record) => Buffer; + password: (password: string) => Buffer; + requestSsl: () => Buffer; + sendSASLInitialResponseMessage: (mechanism: string, initialResponse: string) => Buffer; + sendSCRAMClientFinalMessage: (additionalData: string) => Buffer; + query: (text: string) => Buffer; + parse: (query: ParseOpts) => Buffer; + bind: (config?: BindOpts) => Buffer; + execute: (config?: ExecOpts) => Buffer; + describe: (msg: PortalOpts) => Buffer; + close: (msg: PortalOpts) => Buffer; + flush: () => Buffer; + sync: () => Buffer; + end: () => Buffer; + copyData: (chunk: Buffer) => Buffer; + copyDone: () => Buffer; + copyFail: (message: string) => Buffer; + cancel: (processID: number, secretKey: number) => Buffer; +}; +export { serialize }; diff --git a/node_modules/pg-protocol/dist/serializer.js b/node_modules/pg-protocol/dist/serializer.js new file mode 100644 index 00000000..f3e5d28a --- /dev/null +++ b/node_modules/pg-protocol/dist/serializer.js @@ -0,0 +1,189 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.serialize = void 0; +const buffer_writer_1 = require("./buffer-writer"); +const writer = new buffer_writer_1.Writer(); +const startup = (opts) => { + // protocol version + writer.addInt16(3).addInt16(0); + for (const key of Object.keys(opts)) { + writer.addCString(key).addCString(opts[key]); + } + writer.addCString('client_encoding').addCString('UTF8'); + const bodyBuffer = writer.addCString('').flush(); + // this message is sent without a code + const length = bodyBuffer.length + 4; + return new buffer_writer_1.Writer().addInt32(length).add(bodyBuffer).flush(); +}; +const requestSsl = () => { + const response = Buffer.allocUnsafe(8); + response.writeInt32BE(8, 0); + response.writeInt32BE(80877103, 4); + return response; +}; +const password = (password) => { + return writer.addCString(password).flush(112 /* code.startup */); +}; +const sendSASLInitialResponseMessage = function (mechanism, initialResponse) { + // 0x70 = 'p' + writer.addCString(mechanism).addInt32(Buffer.byteLength(initialResponse)).addString(initialResponse); + return writer.flush(112 /* code.startup */); +}; +const sendSCRAMClientFinalMessage = function (additionalData) { + return writer.addString(additionalData).flush(112 /* code.startup */); +}; +const query = (text) => { + return writer.addCString(text).flush(81 /* code.query */); +}; +const emptyArray = []; +const parse = (query) => { + // expect something like this: + // { name: 'queryName', + // text: 'select * from blah', + // types: ['int8', 'bool'] } + // normalize missing query names to allow for null + const name = query.name || ''; + if (name.length > 63) { + console.error('Warning! Postgres only supports 63 characters for query names.'); + console.error('You supplied %s (%s)', name, name.length); + console.error('This can cause conflicts and silent errors executing queries'); + } + const types = query.types || emptyArray; + const len = types.length; + const buffer = writer + .addCString(name) // name of query + .addCString(query.text) // actual query text + .addInt16(len); + for (let i = 0; i < len; i++) { + buffer.addInt32(types[i]); + } + return writer.flush(80 /* code.parse */); +}; +const paramWriter = new buffer_writer_1.Writer(); +const writeValues = function (values, valueMapper) { + for (let i = 0; i < values.length; i++) { + const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i]; + if (mappedVal == null) { + // add the param type (string) to the writer + writer.addInt16(0 /* ParamType.STRING */); + // write -1 to the param writer to indicate null + paramWriter.addInt32(-1); + } + else if (mappedVal instanceof Buffer) { + // add the param type (binary) to the writer + writer.addInt16(1 /* ParamType.BINARY */); + // add the buffer to the param writer + paramWriter.addInt32(mappedVal.length); + paramWriter.add(mappedVal); + } + else { + // add the param type (string) to the writer + writer.addInt16(0 /* ParamType.STRING */); + paramWriter.addInt32(Buffer.byteLength(mappedVal)); + paramWriter.addString(mappedVal); + } + } +}; +const bind = (config = {}) => { + // normalize config + const portal = config.portal || ''; + const statement = config.statement || ''; + const binary = config.binary || false; + const values = config.values || emptyArray; + const len = values.length; + writer.addCString(portal).addCString(statement); + writer.addInt16(len); + writeValues(values, config.valueMapper); + writer.addInt16(len); + writer.add(paramWriter.flush()); + // all results use the same format code + writer.addInt16(1); + // format code + writer.addInt16(binary ? 1 /* ParamType.BINARY */ : 0 /* ParamType.STRING */); + return writer.flush(66 /* code.bind */); +}; +const emptyExecute = Buffer.from([69 /* code.execute */, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00]); +const execute = (config) => { + // this is the happy path for most queries + if (!config || (!config.portal && !config.rows)) { + return emptyExecute; + } + const portal = config.portal || ''; + const rows = config.rows || 0; + const portalLength = Buffer.byteLength(portal); + const len = 4 + portalLength + 1 + 4; + // one extra bit for code + const buff = Buffer.allocUnsafe(1 + len); + buff[0] = 69 /* code.execute */; + buff.writeInt32BE(len, 1); + buff.write(portal, 5, 'utf-8'); + buff[portalLength + 5] = 0; // null terminate portal cString + buff.writeUInt32BE(rows, buff.length - 4); + return buff; +}; +const cancel = (processID, secretKey) => { + const buffer = Buffer.allocUnsafe(16); + buffer.writeInt32BE(16, 0); + buffer.writeInt16BE(1234, 4); + buffer.writeInt16BE(5678, 6); + buffer.writeInt32BE(processID, 8); + buffer.writeInt32BE(secretKey, 12); + return buffer; +}; +const cstringMessage = (code, string) => { + const stringLen = Buffer.byteLength(string); + const len = 4 + stringLen + 1; + // one extra bit for code + const buffer = Buffer.allocUnsafe(1 + len); + buffer[0] = code; + buffer.writeInt32BE(len, 1); + buffer.write(string, 5, 'utf-8'); + buffer[len] = 0; // null terminate cString + return buffer; +}; +const emptyDescribePortal = writer.addCString('P').flush(68 /* code.describe */); +const emptyDescribeStatement = writer.addCString('S').flush(68 /* code.describe */); +const describe = (msg) => { + return msg.name + ? cstringMessage(68 /* code.describe */, `${msg.type}${msg.name || ''}`) + : msg.type === 'P' + ? emptyDescribePortal + : emptyDescribeStatement; +}; +const close = (msg) => { + const text = `${msg.type}${msg.name || ''}`; + return cstringMessage(67 /* code.close */, text); +}; +const copyData = (chunk) => { + return writer.add(chunk).flush(100 /* code.copyFromChunk */); +}; +const copyFail = (message) => { + return cstringMessage(102 /* code.copyFail */, message); +}; +const codeOnlyBuffer = (code) => Buffer.from([code, 0x00, 0x00, 0x00, 0x04]); +const flushBuffer = codeOnlyBuffer(72 /* code.flush */); +const syncBuffer = codeOnlyBuffer(83 /* code.sync */); +const endBuffer = codeOnlyBuffer(88 /* code.end */); +const copyDoneBuffer = codeOnlyBuffer(99 /* code.copyDone */); +const serialize = { + startup, + password, + requestSsl, + sendSASLInitialResponseMessage, + sendSCRAMClientFinalMessage, + query, + parse, + bind, + execute, + describe, + close, + flush: () => flushBuffer, + sync: () => syncBuffer, + end: () => endBuffer, + copyData, + copyDone: () => copyDoneBuffer, + copyFail, + cancel, +}; +exports.serialize = serialize; +//# sourceMappingURL=serializer.js.map \ No newline at end of file diff --git a/node_modules/pg-protocol/dist/serializer.js.map b/node_modules/pg-protocol/dist/serializer.js.map new file mode 100644 index 00000000..513c2fa5 --- /dev/null +++ b/node_modules/pg-protocol/dist/serializer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/pg-protocol/esm/index.js b/node_modules/pg-protocol/esm/index.js new file mode 100644 index 00000000..c52807d6 --- /dev/null +++ b/node_modules/pg-protocol/esm/index.js @@ -0,0 +1,11 @@ +// ESM wrapper for pg-protocol +import * as protocol from '../dist/index.js' + +// Re-export all the properties +export const DatabaseError = protocol.DatabaseError +export const SASL = protocol.SASL +export const serialize = protocol.serialize +export const parse = protocol.parse + +// Re-export the default +export default protocol diff --git a/node_modules/pg-protocol/package.json b/node_modules/pg-protocol/package.json new file mode 100644 index 00000000..4b7f192f --- /dev/null +++ b/node_modules/pg-protocol/package.json @@ -0,0 +1,45 @@ +{ + "name": "pg-protocol", + "version": "1.11.0", + "description": "The postgres client/server binary protocol, implemented in TypeScript", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./esm/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" + }, + "./dist/*": "./dist/*.js", + "./dist/*.js": "./dist/*.js" + }, + "license": "MIT", + "devDependencies": { + "@types/chai": "^4.2.7", + "@types/mocha": "^10.0.7", + "@types/node": "^12.12.21", + "chai": "^4.2.0", + "chunky": "^0.0.0", + "mocha": "^10.5.2", + "ts-node": "^8.5.4", + "typescript": "^4.0.3" + }, + "scripts": { + "test": "mocha dist/**/*.test.js", + "build": "tsc", + "build:watch": "tsc --watch", + "prepublish": "yarn build", + "pretest": "yarn build" + }, + "repository": { + "type": "git", + "url": "git://github.com/brianc/node-postgres.git", + "directory": "packages/pg-protocol" + }, + "files": [ + "/dist/*{js,ts,map}", + "/src", + "/esm" + ], + "gitHead": "d10e09c888f94abf77382aba6f353ca665a1cf09" +} diff --git a/node_modules/pg-protocol/src/b.ts b/node_modules/pg-protocol/src/b.ts new file mode 100644 index 00000000..c8a24113 --- /dev/null +++ b/node_modules/pg-protocol/src/b.ts @@ -0,0 +1,25 @@ +// file for microbenchmarking + +import { BufferReader } from './buffer-reader' + +const LOOPS = 1000 +let count = 0 +const start = performance.now() + +const reader = new BufferReader() +const buffer = Buffer.from([33, 33, 33, 33, 33, 33, 33, 0]) + +const run = () => { + if (count > LOOPS) { + console.log(performance.now() - start) + return + } + count++ + for (let i = 0; i < LOOPS; i++) { + reader.setBuffer(0, buffer) + reader.cstring() + } + setImmediate(run) +} + +run() diff --git a/node_modules/pg-protocol/src/buffer-reader.ts b/node_modules/pg-protocol/src/buffer-reader.ts new file mode 100644 index 00000000..62b16a2e --- /dev/null +++ b/node_modules/pg-protocol/src/buffer-reader.ts @@ -0,0 +1,60 @@ +const emptyBuffer = Buffer.allocUnsafe(0) + +export class BufferReader { + private buffer: Buffer = emptyBuffer + + // TODO(bmc): support non-utf8 encoding? + private encoding: string = 'utf-8' + + constructor(private offset: number = 0) {} + + public setBuffer(offset: number, buffer: Buffer): void { + this.offset = offset + this.buffer = buffer + } + + public int16(): number { + const result = this.buffer.readInt16BE(this.offset) + this.offset += 2 + return result + } + + public byte(): number { + const result = this.buffer[this.offset] + this.offset++ + return result + } + + public int32(): number { + const result = this.buffer.readInt32BE(this.offset) + this.offset += 4 + return result + } + + public uint32(): number { + const result = this.buffer.readUInt32BE(this.offset) + this.offset += 4 + return result + } + + public string(length: number): string { + const result = this.buffer.toString(this.encoding, this.offset, this.offset + length) + this.offset += length + return result + } + + public cstring(): string { + const start = this.offset + let end = start + // eslint-disable-next-line no-empty + while (this.buffer[end++] !== 0) {} + this.offset = end + return this.buffer.toString(this.encoding, start, end - 1) + } + + public bytes(length: number): Buffer { + const result = this.buffer.slice(this.offset, this.offset + length) + this.offset += length + return result + } +} diff --git a/node_modules/pg-protocol/src/buffer-writer.ts b/node_modules/pg-protocol/src/buffer-writer.ts new file mode 100644 index 00000000..cebb0d9e --- /dev/null +++ b/node_modules/pg-protocol/src/buffer-writer.ts @@ -0,0 +1,85 @@ +//binary data writer tuned for encoding binary specific to the postgres binary protocol + +export class Writer { + private buffer: Buffer + private offset: number = 5 + private headerPosition: number = 0 + constructor(private size = 256) { + this.buffer = Buffer.allocUnsafe(size) + } + + private ensure(size: number): void { + const remaining = this.buffer.length - this.offset + if (remaining < size) { + const oldBuffer = this.buffer + // exponential growth factor of around ~ 1.5 + // https://stackoverflow.com/questions/2269063/buffer-growth-strategy + const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size + this.buffer = Buffer.allocUnsafe(newSize) + oldBuffer.copy(this.buffer) + } + } + + public addInt32(num: number): Writer { + this.ensure(4) + this.buffer[this.offset++] = (num >>> 24) & 0xff + this.buffer[this.offset++] = (num >>> 16) & 0xff + this.buffer[this.offset++] = (num >>> 8) & 0xff + this.buffer[this.offset++] = (num >>> 0) & 0xff + return this + } + + public addInt16(num: number): Writer { + this.ensure(2) + this.buffer[this.offset++] = (num >>> 8) & 0xff + this.buffer[this.offset++] = (num >>> 0) & 0xff + return this + } + + public addCString(string: string): Writer { + if (!string) { + this.ensure(1) + } else { + const len = Buffer.byteLength(string) + this.ensure(len + 1) // +1 for null terminator + this.buffer.write(string, this.offset, 'utf-8') + this.offset += len + } + + this.buffer[this.offset++] = 0 // null terminator + return this + } + + public addString(string: string = ''): Writer { + const len = Buffer.byteLength(string) + this.ensure(len) + this.buffer.write(string, this.offset) + this.offset += len + return this + } + + public add(otherBuffer: Buffer): Writer { + this.ensure(otherBuffer.length) + otherBuffer.copy(this.buffer, this.offset) + this.offset += otherBuffer.length + return this + } + + private join(code?: number): Buffer { + if (code) { + this.buffer[this.headerPosition] = code + //length is everything in this packet minus the code + const length = this.offset - (this.headerPosition + 1) + this.buffer.writeInt32BE(length, this.headerPosition + 1) + } + return this.buffer.slice(code ? 0 : 5, this.offset) + } + + public flush(code?: number): Buffer { + const result = this.join(code) + this.offset = 5 + this.headerPosition = 0 + this.buffer = Buffer.allocUnsafe(this.size) + return result + } +} diff --git a/node_modules/pg-protocol/src/inbound-parser.test.ts b/node_modules/pg-protocol/src/inbound-parser.test.ts new file mode 100644 index 00000000..285f4bf2 --- /dev/null +++ b/node_modules/pg-protocol/src/inbound-parser.test.ts @@ -0,0 +1,575 @@ +import buffers from './testing/test-buffers' +import BufferList from './testing/buffer-list' +import { parse } from '.' +import assert from 'assert' +import { PassThrough } from 'stream' +import { BackendMessage } from './messages' +import { Parser } from './parser' + +const authOkBuffer = buffers.authenticationOk() +const paramStatusBuffer = buffers.parameterStatus('client_encoding', 'UTF8') +const readyForQueryBuffer = buffers.readyForQuery() +const backendKeyDataBuffer = buffers.backendKeyData(1, 2) +const commandCompleteBuffer = buffers.commandComplete('SELECT 3') +const parseCompleteBuffer = buffers.parseComplete() +const bindCompleteBuffer = buffers.bindComplete() +const portalSuspendedBuffer = buffers.portalSuspended() + +const row1 = { + name: 'id', + tableID: 1, + attributeNumber: 2, + dataTypeID: 3, + dataTypeSize: 4, + typeModifier: 5, + formatCode: 0, +} +const oneRowDescBuff = buffers.rowDescription([row1]) +row1.name = 'bang' + +const twoRowBuf = buffers.rowDescription([ + row1, + { + name: 'whoah', + tableID: 10, + attributeNumber: 11, + dataTypeID: 12, + dataTypeSize: 13, + typeModifier: 14, + formatCode: 0, + }, +]) + +const rowWithBigOids = { + name: 'bigoid', + tableID: 3000000001, + attributeNumber: 2, + dataTypeID: 3000000003, + dataTypeSize: 4, + typeModifier: 5, + formatCode: 0, +} +const bigOidDescBuff = buffers.rowDescription([rowWithBigOids]) + +const emptyRowFieldBuf = buffers.dataRow([]) + +const oneFieldBuf = buffers.dataRow(['test']) + +const expectedAuthenticationOkayMessage = { + name: 'authenticationOk', + length: 8, +} + +const expectedParameterStatusMessage = { + name: 'parameterStatus', + parameterName: 'client_encoding', + parameterValue: 'UTF8', + length: 25, +} + +const expectedBackendKeyDataMessage = { + name: 'backendKeyData', + processID: 1, + secretKey: 2, +} + +const expectedReadyForQueryMessage = { + name: 'readyForQuery', + length: 5, + status: 'I', +} + +const expectedCommandCompleteMessage = { + name: 'commandComplete', + length: 13, + text: 'SELECT 3', +} +const emptyRowDescriptionBuffer = new BufferList() + .addInt16(0) // number of fields + .join(true, 'T') + +const expectedEmptyRowDescriptionMessage = { + name: 'rowDescription', + length: 6, + fieldCount: 0, + fields: [], +} +const expectedOneRowMessage = { + name: 'rowDescription', + length: 27, + fieldCount: 1, + fields: [ + { + name: 'id', + tableID: 1, + columnID: 2, + dataTypeID: 3, + dataTypeSize: 4, + dataTypeModifier: 5, + format: 'text', + }, + ], +} + +const expectedTwoRowMessage = { + name: 'rowDescription', + length: 53, + fieldCount: 2, + fields: [ + { + name: 'bang', + tableID: 1, + columnID: 2, + dataTypeID: 3, + dataTypeSize: 4, + dataTypeModifier: 5, + format: 'text', + }, + { + name: 'whoah', + tableID: 10, + columnID: 11, + dataTypeID: 12, + dataTypeSize: 13, + dataTypeModifier: 14, + format: 'text', + }, + ], +} +const expectedBigOidMessage = { + name: 'rowDescription', + length: 31, + fieldCount: 1, + fields: [ + { + name: 'bigoid', + tableID: 3000000001, + columnID: 2, + dataTypeID: 3000000003, + dataTypeSize: 4, + dataTypeModifier: 5, + format: 'text', + }, + ], +} + +const emptyParameterDescriptionBuffer = new BufferList() + .addInt16(0) // number of parameters + .join(true, 't') + +const oneParameterDescBuf = buffers.parameterDescription([1111]) + +const twoParameterDescBuf = buffers.parameterDescription([2222, 3333]) + +const expectedEmptyParameterDescriptionMessage = { + name: 'parameterDescription', + length: 6, + parameterCount: 0, + dataTypeIDs: [], +} + +const expectedOneParameterMessage = { + name: 'parameterDescription', + length: 10, + parameterCount: 1, + dataTypeIDs: [1111], +} + +const expectedTwoParameterMessage = { + name: 'parameterDescription', + length: 14, + parameterCount: 2, + dataTypeIDs: [2222, 3333], +} + +const testForMessage = function (buffer: Buffer, expectedMessage: any) { + it('receives and parses ' + expectedMessage.name, async () => { + const messages = await parseBuffers([buffer]) + const [lastMessage] = messages + + for (const key in expectedMessage) { + assert.deepEqual((lastMessage as any)[key], expectedMessage[key]) + } + }) +} + +const plainPasswordBuffer = buffers.authenticationCleartextPassword() +const md5PasswordBuffer = buffers.authenticationMD5Password() +const SASLBuffer = buffers.authenticationSASL() +const SASLContinueBuffer = buffers.authenticationSASLContinue() +const SASLFinalBuffer = buffers.authenticationSASLFinal() + +const expectedPlainPasswordMessage = { + name: 'authenticationCleartextPassword', +} + +const expectedMD5PasswordMessage = { + name: 'authenticationMD5Password', + salt: Buffer.from([1, 2, 3, 4]), +} + +const expectedSASLMessage = { + name: 'authenticationSASL', + mechanisms: ['SCRAM-SHA-256'], +} + +const expectedSASLContinueMessage = { + name: 'authenticationSASLContinue', + data: 'data', +} + +const expectedSASLFinalMessage = { + name: 'authenticationSASLFinal', + data: 'data', +} + +const notificationResponseBuffer = buffers.notification(4, 'hi', 'boom') +const expectedNotificationResponseMessage = { + name: 'notification', + processId: 4, + channel: 'hi', + payload: 'boom', +} + +const parseBuffers = async (buffers: Buffer[]): Promise => { + const stream = new PassThrough() + for (const buffer of buffers) { + stream.write(buffer) + } + stream.end() + const msgs: BackendMessage[] = [] + await parse(stream, (msg) => msgs.push(msg)) + return msgs +} + +describe('PgPacketStream', function () { + testForMessage(authOkBuffer, expectedAuthenticationOkayMessage) + testForMessage(plainPasswordBuffer, expectedPlainPasswordMessage) + testForMessage(md5PasswordBuffer, expectedMD5PasswordMessage) + testForMessage(SASLBuffer, expectedSASLMessage) + testForMessage(SASLContinueBuffer, expectedSASLContinueMessage) + + // this exercises a found bug in the parser: + // https://github.com/brianc/node-postgres/pull/2210#issuecomment-627626084 + // and adds a test which is deterministic, rather than relying on network packet chunking + const extendedSASLContinueBuffer = Buffer.concat([SASLContinueBuffer, Buffer.from([1, 2, 3, 4])]) + testForMessage(extendedSASLContinueBuffer, expectedSASLContinueMessage) + + testForMessage(SASLFinalBuffer, expectedSASLFinalMessage) + + // this exercises a found bug in the parser: + // https://github.com/brianc/node-postgres/pull/2210#issuecomment-627626084 + // and adds a test which is deterministic, rather than relying on network packet chunking + const extendedSASLFinalBuffer = Buffer.concat([SASLFinalBuffer, Buffer.from([1, 2, 4, 5])]) + testForMessage(extendedSASLFinalBuffer, expectedSASLFinalMessage) + + testForMessage(paramStatusBuffer, expectedParameterStatusMessage) + testForMessage(backendKeyDataBuffer, expectedBackendKeyDataMessage) + testForMessage(readyForQueryBuffer, expectedReadyForQueryMessage) + testForMessage(commandCompleteBuffer, expectedCommandCompleteMessage) + testForMessage(notificationResponseBuffer, expectedNotificationResponseMessage) + testForMessage(buffers.emptyQuery(), { + name: 'emptyQuery', + length: 4, + }) + + testForMessage(Buffer.from([0x6e, 0, 0, 0, 4]), { + name: 'noData', + }) + + describe('rowDescription messages', function () { + testForMessage(emptyRowDescriptionBuffer, expectedEmptyRowDescriptionMessage) + testForMessage(oneRowDescBuff, expectedOneRowMessage) + testForMessage(twoRowBuf, expectedTwoRowMessage) + testForMessage(bigOidDescBuff, expectedBigOidMessage) + }) + + describe('parameterDescription messages', function () { + testForMessage(emptyParameterDescriptionBuffer, expectedEmptyParameterDescriptionMessage) + testForMessage(oneParameterDescBuf, expectedOneParameterMessage) + testForMessage(twoParameterDescBuf, expectedTwoParameterMessage) + }) + + describe('parsing rows', function () { + describe('parsing empty row', function () { + testForMessage(emptyRowFieldBuf, { + name: 'dataRow', + fieldCount: 0, + }) + }) + + describe('parsing data row with fields', function () { + testForMessage(oneFieldBuf, { + name: 'dataRow', + fieldCount: 1, + fields: ['test'], + }) + }) + }) + + describe('notice message', function () { + // this uses the same logic as error message + const buff = buffers.notice([{ type: 'C', value: 'code' }]) + testForMessage(buff, { + name: 'notice', + code: 'code', + }) + }) + + testForMessage(buffers.error([]), { + name: 'error', + }) + + describe('with all the fields', function () { + const buffer = buffers.error([ + { + type: 'S', + value: 'ERROR', + }, + { + type: 'C', + value: 'code', + }, + { + type: 'M', + value: 'message', + }, + { + type: 'D', + value: 'details', + }, + { + type: 'H', + value: 'hint', + }, + { + type: 'P', + value: '100', + }, + { + type: 'p', + value: '101', + }, + { + type: 'q', + value: 'query', + }, + { + type: 'W', + value: 'where', + }, + { + type: 'F', + value: 'file', + }, + { + type: 'L', + value: 'line', + }, + { + type: 'R', + value: 'routine', + }, + { + type: 'Z', // ignored + value: 'alsdkf', + }, + ]) + + testForMessage(buffer, { + name: 'error', + severity: 'ERROR', + code: 'code', + message: 'message', + detail: 'details', + hint: 'hint', + position: '100', + internalPosition: '101', + internalQuery: 'query', + where: 'where', + file: 'file', + line: 'line', + routine: 'routine', + }) + }) + + testForMessage(parseCompleteBuffer, { + name: 'parseComplete', + }) + + testForMessage(bindCompleteBuffer, { + name: 'bindComplete', + }) + + testForMessage(bindCompleteBuffer, { + name: 'bindComplete', + }) + + testForMessage(buffers.closeComplete(), { + name: 'closeComplete', + }) + + describe('parses portal suspended message', function () { + testForMessage(portalSuspendedBuffer, { + name: 'portalSuspended', + }) + }) + + describe('parses replication start message', function () { + testForMessage(Buffer.from([0x57, 0x00, 0x00, 0x00, 0x04]), { + name: 'replicationStart', + length: 4, + }) + }) + + describe('copy', () => { + testForMessage(buffers.copyIn(0), { + name: 'copyInResponse', + length: 7, + binary: false, + columnTypes: [], + }) + + testForMessage(buffers.copyIn(2), { + name: 'copyInResponse', + length: 11, + binary: false, + columnTypes: [0, 1], + }) + + testForMessage(buffers.copyOut(0), { + name: 'copyOutResponse', + length: 7, + binary: false, + columnTypes: [], + }) + + testForMessage(buffers.copyOut(3), { + name: 'copyOutResponse', + length: 13, + binary: false, + columnTypes: [0, 1, 2], + }) + + testForMessage(buffers.copyDone(), { + name: 'copyDone', + length: 4, + }) + + testForMessage(buffers.copyData(Buffer.from([5, 6, 7])), { + name: 'copyData', + length: 7, + chunk: Buffer.from([5, 6, 7]), + }) + }) + + // since the data message on a stream can randomly divide the incomming + // tcp packets anywhere, we need to make sure we can parse every single + // split on a tcp message + describe('split buffer, single message parsing', function () { + const fullBuffer = buffers.dataRow([null, 'bang', 'zug zug', null, '!']) + + it('parses when full buffer comes in', async function () { + const messages = await parseBuffers([fullBuffer]) + const message = messages[0] as any + assert.equal(message.fields.length, 5) + assert.equal(message.fields[0], null) + assert.equal(message.fields[1], 'bang') + assert.equal(message.fields[2], 'zug zug') + assert.equal(message.fields[3], null) + assert.equal(message.fields[4], '!') + }) + + const testMessageReceivedAfterSplitAt = async function (split: number) { + const firstBuffer = Buffer.alloc(fullBuffer.length - split) + const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length) + fullBuffer.copy(firstBuffer, 0, 0) + fullBuffer.copy(secondBuffer, 0, firstBuffer.length) + const messages = await parseBuffers([firstBuffer, secondBuffer]) + const message = messages[0] as any + assert.equal(message.fields.length, 5) + assert.equal(message.fields[0], null) + assert.equal(message.fields[1], 'bang') + assert.equal(message.fields[2], 'zug zug') + assert.equal(message.fields[3], null) + assert.equal(message.fields[4], '!') + } + + it('parses when split in the middle', function () { + return testMessageReceivedAfterSplitAt(6) + }) + + it('parses when split at end', function () { + return testMessageReceivedAfterSplitAt(2) + }) + + it('parses when split at beginning', function () { + return Promise.all([ + testMessageReceivedAfterSplitAt(fullBuffer.length - 2), + testMessageReceivedAfterSplitAt(fullBuffer.length - 1), + testMessageReceivedAfterSplitAt(fullBuffer.length - 5), + ]) + }) + }) + + describe('split buffer, multiple message parsing', function () { + const dataRowBuffer = buffers.dataRow(['!']) + const readyForQueryBuffer = buffers.readyForQuery() + const fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length) + dataRowBuffer.copy(fullBuffer, 0, 0) + readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0) + + const verifyMessages = function (messages: any[]) { + assert.strictEqual(messages.length, 2) + assert.deepEqual(messages[0], { + name: 'dataRow', + fieldCount: 1, + length: 11, + fields: ['!'], + }) + assert.equal(messages[0].fields[0], '!') + assert.deepEqual(messages[1], { + name: 'readyForQuery', + length: 5, + status: 'I', + }) + } + // sanity check + it('receives both messages when packet is not split', async function () { + const messages = await parseBuffers([fullBuffer]) + verifyMessages(messages) + }) + + const splitAndVerifyTwoMessages = async function (split: number) { + const firstBuffer = Buffer.alloc(fullBuffer.length - split) + const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length) + fullBuffer.copy(firstBuffer, 0, 0) + fullBuffer.copy(secondBuffer, 0, firstBuffer.length) + const messages = await parseBuffers([firstBuffer, secondBuffer]) + verifyMessages(messages) + } + + describe('receives both messages when packet is split', function () { + it('in the middle', function () { + return splitAndVerifyTwoMessages(11) + }) + it('at the front', function () { + return Promise.all([ + splitAndVerifyTwoMessages(fullBuffer.length - 1), + splitAndVerifyTwoMessages(fullBuffer.length - 4), + splitAndVerifyTwoMessages(fullBuffer.length - 6), + ]) + }) + + it('at the end', function () { + return Promise.all([splitAndVerifyTwoMessages(8), splitAndVerifyTwoMessages(1)]) + }) + }) + }) + + it('cleans up the reader after handling a packet', function () { + const parser = new Parser() + parser.parse(oneFieldBuf, () => {}) + assert.strictEqual((parser as any).reader.buffer.byteLength, 0) + }) +}) diff --git a/node_modules/pg-protocol/src/index.ts b/node_modules/pg-protocol/src/index.ts new file mode 100644 index 00000000..703ff2e4 --- /dev/null +++ b/node_modules/pg-protocol/src/index.ts @@ -0,0 +1,11 @@ +import { DatabaseError } from './messages' +import { serialize } from './serializer' +import { Parser, MessageCallback } from './parser' + +export function parse(stream: NodeJS.ReadableStream, callback: MessageCallback): Promise { + const parser = new Parser() + stream.on('data', (buffer: Buffer) => parser.parse(buffer, callback)) + return new Promise((resolve) => stream.on('end', () => resolve())) +} + +export { serialize, DatabaseError } diff --git a/node_modules/pg-protocol/src/messages.ts b/node_modules/pg-protocol/src/messages.ts new file mode 100644 index 00000000..c3fbbdd9 --- /dev/null +++ b/node_modules/pg-protocol/src/messages.ts @@ -0,0 +1,262 @@ +export type Mode = 'text' | 'binary' + +export type MessageName = + | 'parseComplete' + | 'bindComplete' + | 'closeComplete' + | 'noData' + | 'portalSuspended' + | 'replicationStart' + | 'emptyQuery' + | 'copyDone' + | 'copyData' + | 'rowDescription' + | 'parameterDescription' + | 'parameterStatus' + | 'backendKeyData' + | 'notification' + | 'readyForQuery' + | 'commandComplete' + | 'dataRow' + | 'copyInResponse' + | 'copyOutResponse' + | 'authenticationOk' + | 'authenticationMD5Password' + | 'authenticationCleartextPassword' + | 'authenticationSASL' + | 'authenticationSASLContinue' + | 'authenticationSASLFinal' + | 'error' + | 'notice' + +export interface BackendMessage { + name: MessageName + length: number +} + +export const parseComplete: BackendMessage = { + name: 'parseComplete', + length: 5, +} + +export const bindComplete: BackendMessage = { + name: 'bindComplete', + length: 5, +} + +export const closeComplete: BackendMessage = { + name: 'closeComplete', + length: 5, +} + +export const noData: BackendMessage = { + name: 'noData', + length: 5, +} + +export const portalSuspended: BackendMessage = { + name: 'portalSuspended', + length: 5, +} + +export const replicationStart: BackendMessage = { + name: 'replicationStart', + length: 4, +} + +export const emptyQuery: BackendMessage = { + name: 'emptyQuery', + length: 4, +} + +export const copyDone: BackendMessage = { + name: 'copyDone', + length: 4, +} + +interface NoticeOrError { + message: string | undefined + severity: string | undefined + code: string | undefined + detail: string | undefined + hint: string | undefined + position: string | undefined + internalPosition: string | undefined + internalQuery: string | undefined + where: string | undefined + schema: string | undefined + table: string | undefined + column: string | undefined + dataType: string | undefined + constraint: string | undefined + file: string | undefined + line: string | undefined + routine: string | undefined +} + +export class DatabaseError extends Error implements NoticeOrError { + public severity: string | undefined + public code: string | undefined + public detail: string | undefined + public hint: string | undefined + public position: string | undefined + public internalPosition: string | undefined + public internalQuery: string | undefined + public where: string | undefined + public schema: string | undefined + public table: string | undefined + public column: string | undefined + public dataType: string | undefined + public constraint: string | undefined + public file: string | undefined + public line: string | undefined + public routine: string | undefined + constructor( + message: string, + public readonly length: number, + public readonly name: MessageName + ) { + super(message) + } +} + +export class CopyDataMessage { + public readonly name = 'copyData' + constructor( + public readonly length: number, + public readonly chunk: Buffer + ) {} +} + +export class CopyResponse { + public readonly columnTypes: number[] + constructor( + public readonly length: number, + public readonly name: MessageName, + public readonly binary: boolean, + columnCount: number + ) { + this.columnTypes = new Array(columnCount) + } +} + +export class Field { + constructor( + public readonly name: string, + public readonly tableID: number, + public readonly columnID: number, + public readonly dataTypeID: number, + public readonly dataTypeSize: number, + public readonly dataTypeModifier: number, + public readonly format: Mode + ) {} +} + +export class RowDescriptionMessage { + public readonly name: MessageName = 'rowDescription' + public readonly fields: Field[] + constructor( + public readonly length: number, + public readonly fieldCount: number + ) { + this.fields = new Array(this.fieldCount) + } +} + +export class ParameterDescriptionMessage { + public readonly name: MessageName = 'parameterDescription' + public readonly dataTypeIDs: number[] + constructor( + public readonly length: number, + public readonly parameterCount: number + ) { + this.dataTypeIDs = new Array(this.parameterCount) + } +} + +export class ParameterStatusMessage { + public readonly name: MessageName = 'parameterStatus' + constructor( + public readonly length: number, + public readonly parameterName: string, + public readonly parameterValue: string + ) {} +} + +export class AuthenticationMD5Password implements BackendMessage { + public readonly name: MessageName = 'authenticationMD5Password' + constructor( + public readonly length: number, + public readonly salt: Buffer + ) {} +} + +export class BackendKeyDataMessage { + public readonly name: MessageName = 'backendKeyData' + constructor( + public readonly length: number, + public readonly processID: number, + public readonly secretKey: number + ) {} +} + +export class NotificationResponseMessage { + public readonly name: MessageName = 'notification' + constructor( + public readonly length: number, + public readonly processId: number, + public readonly channel: string, + public readonly payload: string + ) {} +} + +export class ReadyForQueryMessage { + public readonly name: MessageName = 'readyForQuery' + constructor( + public readonly length: number, + public readonly status: string + ) {} +} + +export class CommandCompleteMessage { + public readonly name: MessageName = 'commandComplete' + constructor( + public readonly length: number, + public readonly text: string + ) {} +} + +export class DataRowMessage { + public readonly fieldCount: number + public readonly name: MessageName = 'dataRow' + constructor( + public length: number, + public fields: any[] + ) { + this.fieldCount = fields.length + } +} + +export class NoticeMessage implements BackendMessage, NoticeOrError { + constructor( + public readonly length: number, + public readonly message: string | undefined + ) {} + public readonly name = 'notice' + public severity: string | undefined + public code: string | undefined + public detail: string | undefined + public hint: string | undefined + public position: string | undefined + public internalPosition: string | undefined + public internalQuery: string | undefined + public where: string | undefined + public schema: string | undefined + public table: string | undefined + public column: string | undefined + public dataType: string | undefined + public constraint: string | undefined + public file: string | undefined + public line: string | undefined + public routine: string | undefined +} diff --git a/node_modules/pg-protocol/src/outbound-serializer.test.ts b/node_modules/pg-protocol/src/outbound-serializer.test.ts new file mode 100644 index 00000000..0d3e387e --- /dev/null +++ b/node_modules/pg-protocol/src/outbound-serializer.test.ts @@ -0,0 +1,276 @@ +import assert from 'assert' +import { serialize } from './serializer' +import BufferList from './testing/buffer-list' + +describe('serializer', () => { + it('builds startup message', function () { + const actual = serialize.startup({ + user: 'brian', + database: 'bang', + }) + assert.deepEqual( + actual, + new BufferList() + .addInt16(3) + .addInt16(0) + .addCString('user') + .addCString('brian') + .addCString('database') + .addCString('bang') + .addCString('client_encoding') + .addCString('UTF8') + .addCString('') + .join(true) + ) + }) + + it('builds password message', function () { + const actual = serialize.password('!') + assert.deepEqual(actual, new BufferList().addCString('!').join(true, 'p')) + }) + + it('builds request ssl message', function () { + const actual = serialize.requestSsl() + const expected = new BufferList().addInt32(80877103).join(true) + assert.deepEqual(actual, expected) + }) + + it('builds SASLInitialResponseMessage message', function () { + const actual = serialize.sendSASLInitialResponseMessage('mech', 'data') + assert.deepEqual(actual, new BufferList().addCString('mech').addInt32(4).addString('data').join(true, 'p')) + }) + + it('builds SCRAMClientFinalMessage message', function () { + const actual = serialize.sendSCRAMClientFinalMessage('data') + assert.deepEqual(actual, new BufferList().addString('data').join(true, 'p')) + }) + + it('builds query message', function () { + const txt = 'select * from boom' + const actual = serialize.query(txt) + assert.deepEqual(actual, new BufferList().addCString(txt).join(true, 'Q')) + }) + + describe('parse message', () => { + it('builds parse message', function () { + const actual = serialize.parse({ text: '!' }) + const expected = new BufferList().addCString('').addCString('!').addInt16(0).join(true, 'P') + assert.deepEqual(actual, expected) + }) + + it('builds parse message with named query', function () { + const actual = serialize.parse({ + name: 'boom', + text: 'select * from boom', + types: [], + }) + const expected = new BufferList().addCString('boom').addCString('select * from boom').addInt16(0).join(true, 'P') + assert.deepEqual(actual, expected) + }) + + it('with multiple parameters', function () { + const actual = serialize.parse({ + name: 'force', + text: 'select * from bang where name = $1', + types: [1, 2, 3, 4], + }) + const expected = new BufferList() + .addCString('force') + .addCString('select * from bang where name = $1') + .addInt16(4) + .addInt32(1) + .addInt32(2) + .addInt32(3) + .addInt32(4) + .join(true, 'P') + assert.deepEqual(actual, expected) + }) + }) + + describe('bind messages', function () { + it('with no values', function () { + const actual = serialize.bind() + + const expectedBuffer = new BufferList() + .addCString('') + .addCString('') + .addInt16(0) + .addInt16(0) + .addInt16(1) + .addInt16(0) + .join(true, 'B') + assert.deepEqual(actual, expectedBuffer) + }) + + it('with named statement, portal, and values', function () { + const actual = serialize.bind({ + portal: 'bang', + statement: 'woo', + values: ['1', 'hi', null, 'zing'], + }) + const expectedBuffer = new BufferList() + .addCString('bang') // portal name + .addCString('woo') // statement name + .addInt16(4) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(4) + .addInt32(1) + .add(Buffer.from('1')) + .addInt32(2) + .add(Buffer.from('hi')) + .addInt32(-1) + .addInt32(4) + .add(Buffer.from('zing')) + .addInt16(1) + .addInt16(0) + .join(true, 'B') + assert.deepEqual(actual, expectedBuffer) + }) + }) + + it('with custom valueMapper', function () { + const actual = serialize.bind({ + portal: 'bang', + statement: 'woo', + values: ['1', 'hi', null, 'zing'], + valueMapper: () => null, + }) + const expectedBuffer = new BufferList() + .addCString('bang') // portal name + .addCString('woo') // statement name + .addInt16(4) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(0) + .addInt16(4) + .addInt32(-1) + .addInt32(-1) + .addInt32(-1) + .addInt32(-1) + .addInt16(1) + .addInt16(0) + .join(true, 'B') + assert.deepEqual(actual, expectedBuffer) + }) + + it('with named statement, portal, and buffer value', function () { + const actual = serialize.bind({ + portal: 'bang', + statement: 'woo', + values: ['1', 'hi', null, Buffer.from('zing', 'utf8')], + }) + const expectedBuffer = new BufferList() + .addCString('bang') // portal name + .addCString('woo') // statement name + .addInt16(4) // value count + .addInt16(0) // string + .addInt16(0) // string + .addInt16(0) // string + .addInt16(1) // binary + .addInt16(4) + .addInt32(1) + .add(Buffer.from('1')) + .addInt32(2) + .add(Buffer.from('hi')) + .addInt32(-1) + .addInt32(4) + .add(Buffer.from('zing', 'utf-8')) + .addInt16(1) + .addInt16(0) + .join(true, 'B') + assert.deepEqual(actual, expectedBuffer) + }) + + describe('builds execute message', function () { + it('for unamed portal with no row limit', function () { + const actual = serialize.execute() + const expectedBuffer = new BufferList().addCString('').addInt32(0).join(true, 'E') + assert.deepEqual(actual, expectedBuffer) + }) + + it('for named portal with row limit', function () { + const actual = serialize.execute({ + portal: 'my favorite portal', + rows: 100, + }) + const expectedBuffer = new BufferList().addCString('my favorite portal').addInt32(100).join(true, 'E') + assert.deepEqual(actual, expectedBuffer) + }) + }) + + it('builds flush command', function () { + const actual = serialize.flush() + const expected = new BufferList().join(true, 'H') + assert.deepEqual(actual, expected) + }) + + it('builds sync command', function () { + const actual = serialize.sync() + const expected = new BufferList().join(true, 'S') + assert.deepEqual(actual, expected) + }) + + it('builds end command', function () { + const actual = serialize.end() + const expected = Buffer.from([0x58, 0, 0, 0, 4]) + assert.deepEqual(actual, expected) + }) + + describe('builds describe command', function () { + it('describe statement', function () { + const actual = serialize.describe({ type: 'S', name: 'bang' }) + const expected = new BufferList().addChar('S').addCString('bang').join(true, 'D') + assert.deepEqual(actual, expected) + }) + + it('describe unnamed portal', function () { + const actual = serialize.describe({ type: 'P' }) + const expected = new BufferList().addChar('P').addCString('').join(true, 'D') + assert.deepEqual(actual, expected) + }) + }) + + describe('builds close command', function () { + it('describe statement', function () { + const actual = serialize.close({ type: 'S', name: 'bang' }) + const expected = new BufferList().addChar('S').addCString('bang').join(true, 'C') + assert.deepEqual(actual, expected) + }) + + it('describe unnamed portal', function () { + const actual = serialize.close({ type: 'P' }) + const expected = new BufferList().addChar('P').addCString('').join(true, 'C') + assert.deepEqual(actual, expected) + }) + }) + + describe('copy messages', function () { + it('builds copyFromChunk', () => { + const actual = serialize.copyData(Buffer.from([1, 2, 3])) + const expected = new BufferList().add(Buffer.from([1, 2, 3])).join(true, 'd') + assert.deepEqual(actual, expected) + }) + + it('builds copy fail', () => { + const actual = serialize.copyFail('err!') + const expected = new BufferList().addCString('err!').join(true, 'f') + assert.deepEqual(actual, expected) + }) + + it('builds copy done', () => { + const actual = serialize.copyDone() + const expected = new BufferList().join(true, 'c') + assert.deepEqual(actual, expected) + }) + }) + + it('builds cancel message', () => { + const actual = serialize.cancel(3, 4) + const expected = new BufferList().addInt16(1234).addInt16(5678).addInt32(3).addInt32(4).join(true) + assert.deepEqual(actual, expected) + }) +}) diff --git a/node_modules/pg-protocol/src/parser.ts b/node_modules/pg-protocol/src/parser.ts new file mode 100644 index 00000000..998077a0 --- /dev/null +++ b/node_modules/pg-protocol/src/parser.ts @@ -0,0 +1,413 @@ +import { TransformOptions } from 'stream' +import { + Mode, + bindComplete, + parseComplete, + closeComplete, + noData, + portalSuspended, + copyDone, + replicationStart, + emptyQuery, + ReadyForQueryMessage, + CommandCompleteMessage, + CopyDataMessage, + CopyResponse, + NotificationResponseMessage, + RowDescriptionMessage, + ParameterDescriptionMessage, + Field, + DataRowMessage, + ParameterStatusMessage, + BackendKeyDataMessage, + DatabaseError, + BackendMessage, + MessageName, + AuthenticationMD5Password, + NoticeMessage, +} from './messages' +import { BufferReader } from './buffer-reader' + +// every message is prefixed with a single bye +const CODE_LENGTH = 1 +// every message has an int32 length which includes itself but does +// NOT include the code in the length +const LEN_LENGTH = 4 + +const HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH + +// A placeholder for a `BackendMessage`’s length value that will be set after construction. +const LATEINIT_LENGTH = -1 + +export type Packet = { + code: number + packet: Buffer +} + +const emptyBuffer = Buffer.allocUnsafe(0) + +type StreamOptions = TransformOptions & { + mode: Mode +} + +const enum MessageCodes { + DataRow = 0x44, // D + ParseComplete = 0x31, // 1 + BindComplete = 0x32, // 2 + CloseComplete = 0x33, // 3 + CommandComplete = 0x43, // C + ReadyForQuery = 0x5a, // Z + NoData = 0x6e, // n + NotificationResponse = 0x41, // A + AuthenticationResponse = 0x52, // R + ParameterStatus = 0x53, // S + BackendKeyData = 0x4b, // K + ErrorMessage = 0x45, // E + NoticeMessage = 0x4e, // N + RowDescriptionMessage = 0x54, // T + ParameterDescriptionMessage = 0x74, // t + PortalSuspended = 0x73, // s + ReplicationStart = 0x57, // W + EmptyQuery = 0x49, // I + CopyIn = 0x47, // G + CopyOut = 0x48, // H + CopyDone = 0x63, // c + CopyData = 0x64, // d +} + +export type MessageCallback = (msg: BackendMessage) => void + +export class Parser { + private buffer: Buffer = emptyBuffer + private bufferLength: number = 0 + private bufferOffset: number = 0 + private reader = new BufferReader() + private mode: Mode + + constructor(opts?: StreamOptions) { + if (opts?.mode === 'binary') { + throw new Error('Binary mode not supported yet') + } + this.mode = opts?.mode || 'text' + } + + public parse(buffer: Buffer, callback: MessageCallback) { + this.mergeBuffer(buffer) + const bufferFullLength = this.bufferOffset + this.bufferLength + let offset = this.bufferOffset + while (offset + HEADER_LENGTH <= bufferFullLength) { + // code is 1 byte long - it identifies the message type + const code = this.buffer[offset] + // length is 1 Uint32BE - it is the length of the message EXCLUDING the code + const length = this.buffer.readUInt32BE(offset + CODE_LENGTH) + const fullMessageLength = CODE_LENGTH + length + if (fullMessageLength + offset <= bufferFullLength) { + const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer) + callback(message) + offset += fullMessageLength + } else { + break + } + } + if (offset === bufferFullLength) { + // No more use for the buffer + this.buffer = emptyBuffer + this.bufferLength = 0 + this.bufferOffset = 0 + } else { + // Adjust the cursors of remainingBuffer + this.bufferLength = bufferFullLength - offset + this.bufferOffset = offset + } + } + + private mergeBuffer(buffer: Buffer): void { + if (this.bufferLength > 0) { + const newLength = this.bufferLength + buffer.byteLength + const newFullLength = newLength + this.bufferOffset + if (newFullLength > this.buffer.byteLength) { + // We can't concat the new buffer with the remaining one + let newBuffer: Buffer + if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) { + // We can move the relevant part to the beginning of the buffer instead of allocating a new buffer + newBuffer = this.buffer + } else { + // Allocate a new larger buffer + let newBufferLength = this.buffer.byteLength * 2 + while (newLength >= newBufferLength) { + newBufferLength *= 2 + } + newBuffer = Buffer.allocUnsafe(newBufferLength) + } + // Move the remaining buffer to the new one + this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength) + this.buffer = newBuffer + this.bufferOffset = 0 + } + // Concat the new buffer with the remaining one + buffer.copy(this.buffer, this.bufferOffset + this.bufferLength) + this.bufferLength = newLength + } else { + this.buffer = buffer + this.bufferOffset = 0 + this.bufferLength = buffer.byteLength + } + } + + private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage { + const { reader } = this + + // NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded. + reader.setBuffer(offset, bytes) + + let message: BackendMessage + + switch (code) { + case MessageCodes.BindComplete: + message = bindComplete + break + case MessageCodes.ParseComplete: + message = parseComplete + break + case MessageCodes.CloseComplete: + message = closeComplete + break + case MessageCodes.NoData: + message = noData + break + case MessageCodes.PortalSuspended: + message = portalSuspended + break + case MessageCodes.CopyDone: + message = copyDone + break + case MessageCodes.ReplicationStart: + message = replicationStart + break + case MessageCodes.EmptyQuery: + message = emptyQuery + break + case MessageCodes.DataRow: + message = parseDataRowMessage(reader) + break + case MessageCodes.CommandComplete: + message = parseCommandCompleteMessage(reader) + break + case MessageCodes.ReadyForQuery: + message = parseReadyForQueryMessage(reader) + break + case MessageCodes.NotificationResponse: + message = parseNotificationMessage(reader) + break + case MessageCodes.AuthenticationResponse: + message = parseAuthenticationResponse(reader, length) + break + case MessageCodes.ParameterStatus: + message = parseParameterStatusMessage(reader) + break + case MessageCodes.BackendKeyData: + message = parseBackendKeyData(reader) + break + case MessageCodes.ErrorMessage: + message = parseErrorMessage(reader, 'error') + break + case MessageCodes.NoticeMessage: + message = parseErrorMessage(reader, 'notice') + break + case MessageCodes.RowDescriptionMessage: + message = parseRowDescriptionMessage(reader) + break + case MessageCodes.ParameterDescriptionMessage: + message = parseParameterDescriptionMessage(reader) + break + case MessageCodes.CopyIn: + message = parseCopyInMessage(reader) + break + case MessageCodes.CopyOut: + message = parseCopyOutMessage(reader) + break + case MessageCodes.CopyData: + message = parseCopyData(reader, length) + break + default: + return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error') + } + + reader.setBuffer(0, emptyBuffer) + + message.length = length + return message + } +} + +const parseReadyForQueryMessage = (reader: BufferReader) => { + const status = reader.string(1) + return new ReadyForQueryMessage(LATEINIT_LENGTH, status) +} + +const parseCommandCompleteMessage = (reader: BufferReader) => { + const text = reader.cstring() + return new CommandCompleteMessage(LATEINIT_LENGTH, text) +} + +const parseCopyData = (reader: BufferReader, length: number) => { + const chunk = reader.bytes(length - 4) + return new CopyDataMessage(LATEINIT_LENGTH, chunk) +} + +const parseCopyInMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyInResponse') + +const parseCopyOutMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyOutResponse') + +const parseCopyMessage = (reader: BufferReader, messageName: MessageName) => { + const isBinary = reader.byte() !== 0 + const columnCount = reader.int16() + const message = new CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount) + for (let i = 0; i < columnCount; i++) { + message.columnTypes[i] = reader.int16() + } + return message +} + +const parseNotificationMessage = (reader: BufferReader) => { + const processId = reader.int32() + const channel = reader.cstring() + const payload = reader.cstring() + return new NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload) +} + +const parseRowDescriptionMessage = (reader: BufferReader) => { + const fieldCount = reader.int16() + const message = new RowDescriptionMessage(LATEINIT_LENGTH, fieldCount) + for (let i = 0; i < fieldCount; i++) { + message.fields[i] = parseField(reader) + } + return message +} + +const parseField = (reader: BufferReader) => { + const name = reader.cstring() + const tableID = reader.uint32() + const columnID = reader.int16() + const dataTypeID = reader.uint32() + const dataTypeSize = reader.int16() + const dataTypeModifier = reader.int32() + const mode = reader.int16() === 0 ? 'text' : 'binary' + return new Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode) +} + +const parseParameterDescriptionMessage = (reader: BufferReader) => { + const parameterCount = reader.int16() + const message = new ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount) + for (let i = 0; i < parameterCount; i++) { + message.dataTypeIDs[i] = reader.int32() + } + return message +} + +const parseDataRowMessage = (reader: BufferReader) => { + const fieldCount = reader.int16() + const fields: any[] = new Array(fieldCount) + for (let i = 0; i < fieldCount; i++) { + const len = reader.int32() + // a -1 for length means the value of the field is null + fields[i] = len === -1 ? null : reader.string(len) + } + return new DataRowMessage(LATEINIT_LENGTH, fields) +} + +const parseParameterStatusMessage = (reader: BufferReader) => { + const name = reader.cstring() + const value = reader.cstring() + return new ParameterStatusMessage(LATEINIT_LENGTH, name, value) +} + +const parseBackendKeyData = (reader: BufferReader) => { + const processID = reader.int32() + const secretKey = reader.int32() + return new BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey) +} + +const parseAuthenticationResponse = (reader: BufferReader, length: number) => { + const code = reader.int32() + // TODO(bmc): maybe better types here + const message: BackendMessage & any = { + name: 'authenticationOk', + length, + } + + switch (code) { + case 0: // AuthenticationOk + break + case 3: // AuthenticationCleartextPassword + if (message.length === 8) { + message.name = 'authenticationCleartextPassword' + } + break + case 5: // AuthenticationMD5Password + if (message.length === 12) { + message.name = 'authenticationMD5Password' + const salt = reader.bytes(4) + return new AuthenticationMD5Password(LATEINIT_LENGTH, salt) + } + break + case 10: // AuthenticationSASL + { + message.name = 'authenticationSASL' + message.mechanisms = [] + let mechanism: string + do { + mechanism = reader.cstring() + if (mechanism) { + message.mechanisms.push(mechanism) + } + } while (mechanism) + } + break + case 11: // AuthenticationSASLContinue + message.name = 'authenticationSASLContinue' + message.data = reader.string(length - 8) + break + case 12: // AuthenticationSASLFinal + message.name = 'authenticationSASLFinal' + message.data = reader.string(length - 8) + break + default: + throw new Error('Unknown authenticationOk message type ' + code) + } + return message +} + +const parseErrorMessage = (reader: BufferReader, name: MessageName) => { + const fields: Record = {} + let fieldType = reader.string(1) + while (fieldType !== '\0') { + fields[fieldType] = reader.cstring() + fieldType = reader.string(1) + } + + const messageValue = fields.M + + const message = + name === 'notice' + ? new NoticeMessage(LATEINIT_LENGTH, messageValue) + : new DatabaseError(messageValue, LATEINIT_LENGTH, name) + + message.severity = fields.S + message.code = fields.C + message.detail = fields.D + message.hint = fields.H + message.position = fields.P + message.internalPosition = fields.p + message.internalQuery = fields.q + message.where = fields.W + message.schema = fields.s + message.table = fields.t + message.column = fields.c + message.dataType = fields.d + message.constraint = fields.n + message.file = fields.F + message.line = fields.L + message.routine = fields.R + return message +} diff --git a/node_modules/pg-protocol/src/serializer.ts b/node_modules/pg-protocol/src/serializer.ts new file mode 100644 index 00000000..bb0441f5 --- /dev/null +++ b/node_modules/pg-protocol/src/serializer.ts @@ -0,0 +1,274 @@ +import { Writer } from './buffer-writer' + +const enum code { + startup = 0x70, + query = 0x51, + parse = 0x50, + bind = 0x42, + execute = 0x45, + flush = 0x48, + sync = 0x53, + end = 0x58, + close = 0x43, + describe = 0x44, + copyFromChunk = 0x64, + copyDone = 0x63, + copyFail = 0x66, +} + +const writer = new Writer() + +const startup = (opts: Record): Buffer => { + // protocol version + writer.addInt16(3).addInt16(0) + for (const key of Object.keys(opts)) { + writer.addCString(key).addCString(opts[key]) + } + + writer.addCString('client_encoding').addCString('UTF8') + + const bodyBuffer = writer.addCString('').flush() + // this message is sent without a code + + const length = bodyBuffer.length + 4 + + return new Writer().addInt32(length).add(bodyBuffer).flush() +} + +const requestSsl = (): Buffer => { + const response = Buffer.allocUnsafe(8) + response.writeInt32BE(8, 0) + response.writeInt32BE(80877103, 4) + return response +} + +const password = (password: string): Buffer => { + return writer.addCString(password).flush(code.startup) +} + +const sendSASLInitialResponseMessage = function (mechanism: string, initialResponse: string): Buffer { + // 0x70 = 'p' + writer.addCString(mechanism).addInt32(Buffer.byteLength(initialResponse)).addString(initialResponse) + + return writer.flush(code.startup) +} + +const sendSCRAMClientFinalMessage = function (additionalData: string): Buffer { + return writer.addString(additionalData).flush(code.startup) +} + +const query = (text: string): Buffer => { + return writer.addCString(text).flush(code.query) +} + +type ParseOpts = { + name?: string + types?: number[] + text: string +} + +const emptyArray: any[] = [] + +const parse = (query: ParseOpts): Buffer => { + // expect something like this: + // { name: 'queryName', + // text: 'select * from blah', + // types: ['int8', 'bool'] } + + // normalize missing query names to allow for null + const name = query.name || '' + if (name.length > 63) { + console.error('Warning! Postgres only supports 63 characters for query names.') + console.error('You supplied %s (%s)', name, name.length) + console.error('This can cause conflicts and silent errors executing queries') + } + + const types = query.types || emptyArray + + const len = types.length + + const buffer = writer + .addCString(name) // name of query + .addCString(query.text) // actual query text + .addInt16(len) + + for (let i = 0; i < len; i++) { + buffer.addInt32(types[i]) + } + + return writer.flush(code.parse) +} + +type ValueMapper = (param: any, index: number) => any + +type BindOpts = { + portal?: string + binary?: boolean + statement?: string + values?: any[] + // optional map from JS value to postgres value per parameter + valueMapper?: ValueMapper +} + +const paramWriter = new Writer() + +// make this a const enum so typescript will inline the value +const enum ParamType { + STRING = 0, + BINARY = 1, +} + +const writeValues = function (values: any[], valueMapper?: ValueMapper): void { + for (let i = 0; i < values.length; i++) { + const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i] + if (mappedVal == null) { + // add the param type (string) to the writer + writer.addInt16(ParamType.STRING) + // write -1 to the param writer to indicate null + paramWriter.addInt32(-1) + } else if (mappedVal instanceof Buffer) { + // add the param type (binary) to the writer + writer.addInt16(ParamType.BINARY) + // add the buffer to the param writer + paramWriter.addInt32(mappedVal.length) + paramWriter.add(mappedVal) + } else { + // add the param type (string) to the writer + writer.addInt16(ParamType.STRING) + paramWriter.addInt32(Buffer.byteLength(mappedVal)) + paramWriter.addString(mappedVal) + } + } +} + +const bind = (config: BindOpts = {}): Buffer => { + // normalize config + const portal = config.portal || '' + const statement = config.statement || '' + const binary = config.binary || false + const values = config.values || emptyArray + const len = values.length + + writer.addCString(portal).addCString(statement) + writer.addInt16(len) + + writeValues(values, config.valueMapper) + + writer.addInt16(len) + writer.add(paramWriter.flush()) + + // all results use the same format code + writer.addInt16(1) + // format code + writer.addInt16(binary ? ParamType.BINARY : ParamType.STRING) + return writer.flush(code.bind) +} + +type ExecOpts = { + portal?: string + rows?: number +} + +const emptyExecute = Buffer.from([code.execute, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00]) + +const execute = (config?: ExecOpts): Buffer => { + // this is the happy path for most queries + if (!config || (!config.portal && !config.rows)) { + return emptyExecute + } + + const portal = config.portal || '' + const rows = config.rows || 0 + + const portalLength = Buffer.byteLength(portal) + const len = 4 + portalLength + 1 + 4 + // one extra bit for code + const buff = Buffer.allocUnsafe(1 + len) + buff[0] = code.execute + buff.writeInt32BE(len, 1) + buff.write(portal, 5, 'utf-8') + buff[portalLength + 5] = 0 // null terminate portal cString + buff.writeUInt32BE(rows, buff.length - 4) + return buff +} + +const cancel = (processID: number, secretKey: number): Buffer => { + const buffer = Buffer.allocUnsafe(16) + buffer.writeInt32BE(16, 0) + buffer.writeInt16BE(1234, 4) + buffer.writeInt16BE(5678, 6) + buffer.writeInt32BE(processID, 8) + buffer.writeInt32BE(secretKey, 12) + return buffer +} + +type PortalOpts = { + type: 'S' | 'P' + name?: string +} + +const cstringMessage = (code: code, string: string): Buffer => { + const stringLen = Buffer.byteLength(string) + const len = 4 + stringLen + 1 + // one extra bit for code + const buffer = Buffer.allocUnsafe(1 + len) + buffer[0] = code + buffer.writeInt32BE(len, 1) + buffer.write(string, 5, 'utf-8') + buffer[len] = 0 // null terminate cString + return buffer +} + +const emptyDescribePortal = writer.addCString('P').flush(code.describe) +const emptyDescribeStatement = writer.addCString('S').flush(code.describe) + +const describe = (msg: PortalOpts): Buffer => { + return msg.name + ? cstringMessage(code.describe, `${msg.type}${msg.name || ''}`) + : msg.type === 'P' + ? emptyDescribePortal + : emptyDescribeStatement +} + +const close = (msg: PortalOpts): Buffer => { + const text = `${msg.type}${msg.name || ''}` + return cstringMessage(code.close, text) +} + +const copyData = (chunk: Buffer): Buffer => { + return writer.add(chunk).flush(code.copyFromChunk) +} + +const copyFail = (message: string): Buffer => { + return cstringMessage(code.copyFail, message) +} + +const codeOnlyBuffer = (code: code): Buffer => Buffer.from([code, 0x00, 0x00, 0x00, 0x04]) + +const flushBuffer = codeOnlyBuffer(code.flush) +const syncBuffer = codeOnlyBuffer(code.sync) +const endBuffer = codeOnlyBuffer(code.end) +const copyDoneBuffer = codeOnlyBuffer(code.copyDone) + +const serialize = { + startup, + password, + requestSsl, + sendSASLInitialResponseMessage, + sendSCRAMClientFinalMessage, + query, + parse, + bind, + execute, + describe, + close, + flush: () => flushBuffer, + sync: () => syncBuffer, + end: () => endBuffer, + copyData, + copyDone: () => copyDoneBuffer, + copyFail, + cancel, +} + +export { serialize } diff --git a/node_modules/pg-protocol/src/testing/buffer-list.ts b/node_modules/pg-protocol/src/testing/buffer-list.ts new file mode 100644 index 00000000..bef75d40 --- /dev/null +++ b/node_modules/pg-protocol/src/testing/buffer-list.ts @@ -0,0 +1,67 @@ +export default class BufferList { + constructor(public buffers: Buffer[] = []) {} + + public add(buffer: Buffer, front?: boolean) { + this.buffers[front ? 'unshift' : 'push'](buffer) + return this + } + + public addInt16(val: number, front?: boolean) { + return this.add(Buffer.from([val >>> 8, val >>> 0]), front) + } + + public getByteLength() { + return this.buffers.reduce(function (previous, current) { + return previous + current.length + }, 0) + } + + public addInt32(val: number, first?: boolean) { + return this.add( + Buffer.from([(val >>> 24) & 0xff, (val >>> 16) & 0xff, (val >>> 8) & 0xff, (val >>> 0) & 0xff]), + first + ) + } + + public addCString(val: string, front?: boolean) { + const len = Buffer.byteLength(val) + const buffer = Buffer.alloc(len + 1) + buffer.write(val) + buffer[len] = 0 + return this.add(buffer, front) + } + + public addString(val: string, front?: boolean) { + const len = Buffer.byteLength(val) + const buffer = Buffer.alloc(len) + buffer.write(val) + return this.add(buffer, front) + } + + public addChar(char: string, first?: boolean) { + return this.add(Buffer.from(char, 'utf8'), first) + } + + public addByte(byte: number) { + return this.add(Buffer.from([byte])) + } + + public join(appendLength?: boolean, char?: string): Buffer { + let length = this.getByteLength() + if (appendLength) { + this.addInt32(length + 4, true) + return this.join(false, char) + } + if (char) { + this.addChar(char, true) + length++ + } + const result = Buffer.alloc(length) + let index = 0 + this.buffers.forEach(function (buffer) { + buffer.copy(result, index, 0) + index += buffer.length + }) + return result + } +} diff --git a/node_modules/pg-protocol/src/testing/test-buffers.ts b/node_modules/pg-protocol/src/testing/test-buffers.ts new file mode 100644 index 00000000..1f0d71f2 --- /dev/null +++ b/node_modules/pg-protocol/src/testing/test-buffers.ts @@ -0,0 +1,166 @@ +// https://www.postgresql.org/docs/current/protocol-message-formats.html +import BufferList from './buffer-list' + +const buffers = { + readyForQuery: function () { + return new BufferList().add(Buffer.from('I')).join(true, 'Z') + }, + + authenticationOk: function () { + return new BufferList().addInt32(0).join(true, 'R') + }, + + authenticationCleartextPassword: function () { + return new BufferList().addInt32(3).join(true, 'R') + }, + + authenticationMD5Password: function () { + return new BufferList() + .addInt32(5) + .add(Buffer.from([1, 2, 3, 4])) + .join(true, 'R') + }, + + authenticationSASL: function () { + return new BufferList().addInt32(10).addCString('SCRAM-SHA-256').addCString('').join(true, 'R') + }, + + authenticationSASLContinue: function () { + return new BufferList().addInt32(11).addString('data').join(true, 'R') + }, + + authenticationSASLFinal: function () { + return new BufferList().addInt32(12).addString('data').join(true, 'R') + }, + + parameterStatus: function (name: string, value: string) { + return new BufferList().addCString(name).addCString(value).join(true, 'S') + }, + + backendKeyData: function (processID: number, secretKey: number) { + return new BufferList().addInt32(processID).addInt32(secretKey).join(true, 'K') + }, + + commandComplete: function (string: string) { + return new BufferList().addCString(string).join(true, 'C') + }, + + rowDescription: function (fields: any[]) { + fields = fields || [] + const buf = new BufferList() + buf.addInt16(fields.length) + fields.forEach(function (field) { + buf + .addCString(field.name) + .addInt32(field.tableID || 0) + .addInt16(field.attributeNumber || 0) + .addInt32(field.dataTypeID || 0) + .addInt16(field.dataTypeSize || 0) + .addInt32(field.typeModifier || 0) + .addInt16(field.formatCode || 0) + }) + return buf.join(true, 'T') + }, + + parameterDescription: function (dataTypeIDs: number[]) { + dataTypeIDs = dataTypeIDs || [] + const buf = new BufferList() + buf.addInt16(dataTypeIDs.length) + dataTypeIDs.forEach(function (dataTypeID) { + buf.addInt32(dataTypeID) + }) + return buf.join(true, 't') + }, + + dataRow: function (columns: any[]) { + columns = columns || [] + const buf = new BufferList() + buf.addInt16(columns.length) + columns.forEach(function (col) { + if (col == null) { + buf.addInt32(-1) + } else { + const strBuf = Buffer.from(col, 'utf8') + buf.addInt32(strBuf.length) + buf.add(strBuf) + } + }) + return buf.join(true, 'D') + }, + + error: function (fields: any) { + return buffers.errorOrNotice(fields).join(true, 'E') + }, + + notice: function (fields: any) { + return buffers.errorOrNotice(fields).join(true, 'N') + }, + + errorOrNotice: function (fields: any) { + fields = fields || [] + const buf = new BufferList() + fields.forEach(function (field: any) { + buf.addChar(field.type) + buf.addCString(field.value) + }) + return buf.add(Buffer.from([0])) // terminator + }, + + parseComplete: function () { + return new BufferList().join(true, '1') + }, + + bindComplete: function () { + return new BufferList().join(true, '2') + }, + + notification: function (id: number, channel: string, payload: string) { + return new BufferList().addInt32(id).addCString(channel).addCString(payload).join(true, 'A') + }, + + emptyQuery: function () { + return new BufferList().join(true, 'I') + }, + + portalSuspended: function () { + return new BufferList().join(true, 's') + }, + + closeComplete: function () { + return new BufferList().join(true, '3') + }, + + copyIn: function (cols: number) { + const list = new BufferList() + // text mode + .addByte(0) + // column count + .addInt16(cols) + for (let i = 0; i < cols; i++) { + list.addInt16(i) + } + return list.join(true, 'G') + }, + + copyOut: function (cols: number) { + const list = new BufferList() + // text mode + .addByte(0) + // column count + .addInt16(cols) + for (let i = 0; i < cols; i++) { + list.addInt16(i) + } + return list.join(true, 'H') + }, + + copyData: function (bytes: Buffer) { + return new BufferList().add(bytes).join(true, 'd') + }, + + copyDone: function () { + return new BufferList().join(true, 'c') + }, +} + +export default buffers diff --git a/node_modules/pg-protocol/src/types/chunky.d.ts b/node_modules/pg-protocol/src/types/chunky.d.ts new file mode 100644 index 00000000..7389bda6 --- /dev/null +++ b/node_modules/pg-protocol/src/types/chunky.d.ts @@ -0,0 +1 @@ +declare module 'chunky' diff --git a/node_modules/pg-types/.travis.yml b/node_modules/pg-types/.travis.yml new file mode 100644 index 00000000..dd6b0332 --- /dev/null +++ b/node_modules/pg-types/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - '4' + - 'lts/*' + - 'node' +env: + - PGUSER=postgres diff --git a/node_modules/pg-types/Makefile b/node_modules/pg-types/Makefile new file mode 100644 index 00000000..d7ec83d5 --- /dev/null +++ b/node_modules/pg-types/Makefile @@ -0,0 +1,14 @@ +.PHONY: publish-patch test + +test: + npm test + +patch: test + npm version patch -m "Bump version" + git push origin master --tags + npm publish + +minor: test + npm version minor -m "Bump version" + git push origin master --tags + npm publish diff --git a/node_modules/pg-types/README.md b/node_modules/pg-types/README.md new file mode 100644 index 00000000..54a3f2c6 --- /dev/null +++ b/node_modules/pg-types/README.md @@ -0,0 +1,75 @@ +# pg-types + +This is the code that turns all the raw text from postgres into JavaScript types for [node-postgres](https://github.com/brianc/node-postgres.git) + +## use + +This module is consumed and exported from the root `pg` object of node-postgres. To access it, do the following: + +```js +var types = require('pg').types +``` + +Generally what you'll want to do is override how a specific data-type is parsed and turned into a JavaScript type. By default the PostgreSQL backend server returns everything as strings. Every data type corresponds to a unique `OID` within the server, and these `OIDs` are sent back with the query response. So, you need to match a particluar `OID` to a function you'd like to use to take the raw text input and produce a valid JavaScript object as a result. `null` values are never parsed. + +Let's do something I commonly like to do on projects: return 64-bit integers `(int8)` as JavaScript integers. Because JavaScript doesn't have support for 64-bit integers node-postgres cannot confidently parse `int8` data type results as numbers because if you have a _huge_ number it will overflow and the result you'd get back from node-postgres would not be the result in the datbase. That would be a __very bad thing__ so node-postgres just returns `int8` results as strings and leaves the parsing up to you. Let's say that you know you don't and wont ever have numbers greater than `int4` in your database, but you're tired of recieving results from the `COUNT(*)` function as strings (because that function returns `int8`). You would do this: + +```js +var types = require('pg').types +types.setTypeParser(20, function(val) { + return parseInt(val) +}) +``` + +__boom__: now you get numbers instead of strings. + +Just as another example -- not saying this is a good idea -- let's say you want to return all dates from your database as [moment](http://momentjs.com/docs/) objects. Okay, do this: + +```js +var types = require('pg').types +var moment = require('moment') +var parseFn = function(val) { + return val === null ? null : moment(val) +} +types.setTypeParser(types.builtins.TIMESTAMPTZ, parseFn) +types.setTypeParser(types.builtins.TIMESTAMP, parseFn) +``` +_note: I've never done that with my dates, and I'm not 100% sure moment can parse all the date strings returned from postgres. It's just an example!_ + +If you're thinking "gee, this seems pretty handy, but how can I get a list of all the OIDs in the database and what they correspond to?!?!?!" worry not: + +```bash +$ psql -c "select typname, oid, typarray from pg_type order by oid" +``` + +If you want to find out the OID of a specific type: + +```bash +$ psql -c "select typname, oid, typarray from pg_type where typname = 'daterange' order by oid" +``` + +:smile: + +## license + +The MIT License (MIT) + +Copyright (c) 2014 Brian M. Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pg-types/index.d.ts b/node_modules/pg-types/index.d.ts new file mode 100644 index 00000000..4bebcbe6 --- /dev/null +++ b/node_modules/pg-types/index.d.ts @@ -0,0 +1,137 @@ +export enum TypeId { + BOOL = 16, + BYTEA = 17, + CHAR = 18, + INT8 = 20, + INT2 = 21, + INT4 = 23, + REGPROC = 24, + TEXT = 25, + OID = 26, + TID = 27, + XID = 28, + CID = 29, + JSON = 114, + XML = 142, + PG_NODE_TREE = 194, + SMGR = 210, + PATH = 602, + POLYGON = 604, + CIDR = 650, + FLOAT4 = 700, + FLOAT8 = 701, + ABSTIME = 702, + RELTIME = 703, + TINTERVAL = 704, + CIRCLE = 718, + MACADDR8 = 774, + MONEY = 790, + MACADDR = 829, + INET = 869, + ACLITEM = 1033, + BPCHAR = 1042, + VARCHAR = 1043, + DATE = 1082, + TIME = 1083, + TIMESTAMP = 1114, + TIMESTAMPTZ = 1184, + INTERVAL = 1186, + TIMETZ = 1266, + BIT = 1560, + VARBIT = 1562, + NUMERIC = 1700, + REFCURSOR = 1790, + REGPROCEDURE = 2202, + REGOPER = 2203, + REGOPERATOR = 2204, + REGCLASS = 2205, + REGTYPE = 2206, + UUID = 2950, + TXID_SNAPSHOT = 2970, + PG_LSN = 3220, + PG_NDISTINCT = 3361, + PG_DEPENDENCIES = 3402, + TSVECTOR = 3614, + TSQUERY = 3615, + GTSVECTOR = 3642, + REGCONFIG = 3734, + REGDICTIONARY = 3769, + JSONB = 3802, + REGNAMESPACE = 4089, + REGROLE = 4096 +} + +export type builtinsTypes = + 'BOOL' | + 'BYTEA' | + 'CHAR' | + 'INT8' | + 'INT2' | + 'INT4' | + 'REGPROC' | + 'TEXT' | + 'OID' | + 'TID' | + 'XID' | + 'CID' | + 'JSON' | + 'XML' | + 'PG_NODE_TREE' | + 'SMGR' | + 'PATH' | + 'POLYGON' | + 'CIDR' | + 'FLOAT4' | + 'FLOAT8' | + 'ABSTIME' | + 'RELTIME' | + 'TINTERVAL' | + 'CIRCLE' | + 'MACADDR8' | + 'MONEY' | + 'MACADDR' | + 'INET' | + 'ACLITEM' | + 'BPCHAR' | + 'VARCHAR' | + 'DATE' | + 'TIME' | + 'TIMESTAMP' | + 'TIMESTAMPTZ' | + 'INTERVAL' | + 'TIMETZ' | + 'BIT' | + 'VARBIT' | + 'NUMERIC' | + 'REFCURSOR' | + 'REGPROCEDURE' | + 'REGOPER' | + 'REGOPERATOR' | + 'REGCLASS' | + 'REGTYPE' | + 'UUID' | + 'TXID_SNAPSHOT' | + 'PG_LSN' | + 'PG_NDISTINCT' | + 'PG_DEPENDENCIES' | + 'TSVECTOR' | + 'TSQUERY' | + 'GTSVECTOR' | + 'REGCONFIG' | + 'REGDICTIONARY' | + 'JSONB' | + 'REGNAMESPACE' | + 'REGROLE'; + +export type TypesBuiltins = {[key in builtinsTypes]: TypeId}; + +export type TypeFormat = 'text' | 'binary'; + +export const builtins: TypesBuiltins; + +export function setTypeParser (id: TypeId, parseFn: ((value: string) => any)): void; +export function setTypeParser (id: TypeId, format: TypeFormat, parseFn: (value: string) => any): void; + +export const getTypeParser: (id: TypeId, format?: TypeFormat) => any + +export const arrayParser: (source: string, transform: (entry: any) => any) => any[]; diff --git a/node_modules/pg-types/index.js b/node_modules/pg-types/index.js new file mode 100644 index 00000000..952d8c27 --- /dev/null +++ b/node_modules/pg-types/index.js @@ -0,0 +1,47 @@ +var textParsers = require('./lib/textParsers'); +var binaryParsers = require('./lib/binaryParsers'); +var arrayParser = require('./lib/arrayParser'); +var builtinTypes = require('./lib/builtins'); + +exports.getTypeParser = getTypeParser; +exports.setTypeParser = setTypeParser; +exports.arrayParser = arrayParser; +exports.builtins = builtinTypes; + +var typeParsers = { + text: {}, + binary: {} +}; + +//the empty parse function +function noParse (val) { + return String(val); +}; + +//returns a function used to convert a specific type (specified by +//oid) into a result javascript type +//note: the oid can be obtained via the following sql query: +//SELECT oid FROM pg_type WHERE typname = 'TYPE_NAME_HERE'; +function getTypeParser (oid, format) { + format = format || 'text'; + if (!typeParsers[format]) { + return noParse; + } + return typeParsers[format][oid] || noParse; +}; + +function setTypeParser (oid, format, parseFn) { + if(typeof format == 'function') { + parseFn = format; + format = 'text'; + } + typeParsers[format][oid] = parseFn; +}; + +textParsers.init(function(oid, converter) { + typeParsers.text[oid] = converter; +}); + +binaryParsers.init(function(oid, converter) { + typeParsers.binary[oid] = converter; +}); diff --git a/node_modules/pg-types/index.test-d.ts b/node_modules/pg-types/index.test-d.ts new file mode 100644 index 00000000..d530e6ef --- /dev/null +++ b/node_modules/pg-types/index.test-d.ts @@ -0,0 +1,21 @@ +import * as types from '.'; +import { expectType } from 'tsd'; + +// builtins +expectType(types.builtins); + +// getTypeParser +const noParse = types.getTypeParser(types.builtins.NUMERIC, 'text'); +const numericParser = types.getTypeParser(types.builtins.NUMERIC, 'binary'); +expectType(noParse('noParse')); +expectType(numericParser([200, 1, 0, 15])); + +// getArrayParser +const value = types.arrayParser('{1,2,3}', (num) => parseInt(num)); +expectType(value); + +//setTypeParser +types.setTypeParser(types.builtins.INT8, parseInt); +types.setTypeParser(types.builtins.FLOAT8, parseFloat); +types.setTypeParser(types.builtins.FLOAT8, 'binary', (data) => data[0]); +types.setTypeParser(types.builtins.FLOAT8, 'text', parseFloat); diff --git a/node_modules/pg-types/lib/arrayParser.js b/node_modules/pg-types/lib/arrayParser.js new file mode 100644 index 00000000..81ccffbc --- /dev/null +++ b/node_modules/pg-types/lib/arrayParser.js @@ -0,0 +1,11 @@ +var array = require('postgres-array'); + +module.exports = { + create: function (source, transform) { + return { + parse: function() { + return array.parse(source, transform); + } + }; + } +}; diff --git a/node_modules/pg-types/lib/binaryParsers.js b/node_modules/pg-types/lib/binaryParsers.js new file mode 100644 index 00000000..e12c2f46 --- /dev/null +++ b/node_modules/pg-types/lib/binaryParsers.js @@ -0,0 +1,257 @@ +var parseInt64 = require('pg-int8'); + +var parseBits = function(data, bits, offset, invert, callback) { + offset = offset || 0; + invert = invert || false; + callback = callback || function(lastValue, newValue, bits) { return (lastValue * Math.pow(2, bits)) + newValue; }; + var offsetBytes = offset >> 3; + + var inv = function(value) { + if (invert) { + return ~value & 0xff; + } + + return value; + }; + + // read first (maybe partial) byte + var mask = 0xff; + var firstBits = 8 - (offset % 8); + if (bits < firstBits) { + mask = (0xff << (8 - bits)) & 0xff; + firstBits = bits; + } + + if (offset) { + mask = mask >> (offset % 8); + } + + var result = 0; + if ((offset % 8) + bits >= 8) { + result = callback(0, inv(data[offsetBytes]) & mask, firstBits); + } + + // read bytes + var bytes = (bits + offset) >> 3; + for (var i = offsetBytes + 1; i < bytes; i++) { + result = callback(result, inv(data[i]), 8); + } + + // bits to read, that are not a complete byte + var lastBits = (bits + offset) % 8; + if (lastBits > 0) { + result = callback(result, inv(data[bytes]) >> (8 - lastBits), lastBits); + } + + return result; +}; + +var parseFloatFromBits = function(data, precisionBits, exponentBits) { + var bias = Math.pow(2, exponentBits - 1) - 1; + var sign = parseBits(data, 1); + var exponent = parseBits(data, exponentBits, 1); + + if (exponent === 0) { + return 0; + } + + // parse mantissa + var precisionBitsCounter = 1; + var parsePrecisionBits = function(lastValue, newValue, bits) { + if (lastValue === 0) { + lastValue = 1; + } + + for (var i = 1; i <= bits; i++) { + precisionBitsCounter /= 2; + if ((newValue & (0x1 << (bits - i))) > 0) { + lastValue += precisionBitsCounter; + } + } + + return lastValue; + }; + + var mantissa = parseBits(data, precisionBits, exponentBits + 1, false, parsePrecisionBits); + + // special cases + if (exponent == (Math.pow(2, exponentBits + 1) - 1)) { + if (mantissa === 0) { + return (sign === 0) ? Infinity : -Infinity; + } + + return NaN; + } + + // normale number + return ((sign === 0) ? 1 : -1) * Math.pow(2, exponent - bias) * mantissa; +}; + +var parseInt16 = function(value) { + if (parseBits(value, 1) == 1) { + return -1 * (parseBits(value, 15, 1, true) + 1); + } + + return parseBits(value, 15, 1); +}; + +var parseInt32 = function(value) { + if (parseBits(value, 1) == 1) { + return -1 * (parseBits(value, 31, 1, true) + 1); + } + + return parseBits(value, 31, 1); +}; + +var parseFloat32 = function(value) { + return parseFloatFromBits(value, 23, 8); +}; + +var parseFloat64 = function(value) { + return parseFloatFromBits(value, 52, 11); +}; + +var parseNumeric = function(value) { + var sign = parseBits(value, 16, 32); + if (sign == 0xc000) { + return NaN; + } + + var weight = Math.pow(10000, parseBits(value, 16, 16)); + var result = 0; + + var digits = []; + var ndigits = parseBits(value, 16); + for (var i = 0; i < ndigits; i++) { + result += parseBits(value, 16, 64 + (16 * i)) * weight; + weight /= 10000; + } + + var scale = Math.pow(10, parseBits(value, 16, 48)); + return ((sign === 0) ? 1 : -1) * Math.round(result * scale) / scale; +}; + +var parseDate = function(isUTC, value) { + var sign = parseBits(value, 1); + var rawValue = parseBits(value, 63, 1); + + // discard usecs and shift from 2000 to 1970 + var result = new Date((((sign === 0) ? 1 : -1) * rawValue / 1000) + 946684800000); + + if (!isUTC) { + result.setTime(result.getTime() + result.getTimezoneOffset() * 60000); + } + + // add microseconds to the date + result.usec = rawValue % 1000; + result.getMicroSeconds = function() { + return this.usec; + }; + result.setMicroSeconds = function(value) { + this.usec = value; + }; + result.getUTCMicroSeconds = function() { + return this.usec; + }; + + return result; +}; + +var parseArray = function(value) { + var dim = parseBits(value, 32); + + var flags = parseBits(value, 32, 32); + var elementType = parseBits(value, 32, 64); + + var offset = 96; + var dims = []; + for (var i = 0; i < dim; i++) { + // parse dimension + dims[i] = parseBits(value, 32, offset); + offset += 32; + + // ignore lower bounds + offset += 32; + } + + var parseElement = function(elementType) { + // parse content length + var length = parseBits(value, 32, offset); + offset += 32; + + // parse null values + if (length == 0xffffffff) { + return null; + } + + var result; + if ((elementType == 0x17) || (elementType == 0x14)) { + // int/bigint + result = parseBits(value, length * 8, offset); + offset += length * 8; + return result; + } + else if (elementType == 0x19) { + // string + result = value.toString(this.encoding, offset >> 3, (offset += (length << 3)) >> 3); + return result; + } + else { + console.log("ERROR: ElementType not implemented: " + elementType); + } + }; + + var parse = function(dimension, elementType) { + var array = []; + var i; + + if (dimension.length > 1) { + var count = dimension.shift(); + for (i = 0; i < count; i++) { + array[i] = parse(dimension, elementType); + } + dimension.unshift(count); + } + else { + for (i = 0; i < dimension[0]; i++) { + array[i] = parseElement(elementType); + } + } + + return array; + }; + + return parse(dims, elementType); +}; + +var parseText = function(value) { + return value.toString('utf8'); +}; + +var parseBool = function(value) { + if(value === null) return null; + return (parseBits(value, 8) > 0); +}; + +var init = function(register) { + register(20, parseInt64); + register(21, parseInt16); + register(23, parseInt32); + register(26, parseInt32); + register(1700, parseNumeric); + register(700, parseFloat32); + register(701, parseFloat64); + register(16, parseBool); + register(1114, parseDate.bind(null, false)); + register(1184, parseDate.bind(null, true)); + register(1000, parseArray); + register(1007, parseArray); + register(1016, parseArray); + register(1008, parseArray); + register(1009, parseArray); + register(25, parseText); +}; + +module.exports = { + init: init +}; diff --git a/node_modules/pg-types/lib/builtins.js b/node_modules/pg-types/lib/builtins.js new file mode 100644 index 00000000..f0c134a8 --- /dev/null +++ b/node_modules/pg-types/lib/builtins.js @@ -0,0 +1,73 @@ +/** + * Following query was used to generate this file: + + SELECT json_object_agg(UPPER(PT.typname), PT.oid::int4 ORDER BY pt.oid) + FROM pg_type PT + WHERE typnamespace = (SELECT pgn.oid FROM pg_namespace pgn WHERE nspname = 'pg_catalog') -- Take only builting Postgres types with stable OID (extension types are not guaranted to be stable) + AND typtype = 'b' -- Only basic types + AND typelem = 0 -- Ignore aliases + AND typisdefined -- Ignore undefined types + */ + +module.exports = { + BOOL: 16, + BYTEA: 17, + CHAR: 18, + INT8: 20, + INT2: 21, + INT4: 23, + REGPROC: 24, + TEXT: 25, + OID: 26, + TID: 27, + XID: 28, + CID: 29, + JSON: 114, + XML: 142, + PG_NODE_TREE: 194, + SMGR: 210, + PATH: 602, + POLYGON: 604, + CIDR: 650, + FLOAT4: 700, + FLOAT8: 701, + ABSTIME: 702, + RELTIME: 703, + TINTERVAL: 704, + CIRCLE: 718, + MACADDR8: 774, + MONEY: 790, + MACADDR: 829, + INET: 869, + ACLITEM: 1033, + BPCHAR: 1042, + VARCHAR: 1043, + DATE: 1082, + TIME: 1083, + TIMESTAMP: 1114, + TIMESTAMPTZ: 1184, + INTERVAL: 1186, + TIMETZ: 1266, + BIT: 1560, + VARBIT: 1562, + NUMERIC: 1700, + REFCURSOR: 1790, + REGPROCEDURE: 2202, + REGOPER: 2203, + REGOPERATOR: 2204, + REGCLASS: 2205, + REGTYPE: 2206, + UUID: 2950, + TXID_SNAPSHOT: 2970, + PG_LSN: 3220, + PG_NDISTINCT: 3361, + PG_DEPENDENCIES: 3402, + TSVECTOR: 3614, + TSQUERY: 3615, + GTSVECTOR: 3642, + REGCONFIG: 3734, + REGDICTIONARY: 3769, + JSONB: 3802, + REGNAMESPACE: 4089, + REGROLE: 4096 +}; diff --git a/node_modules/pg-types/lib/textParsers.js b/node_modules/pg-types/lib/textParsers.js new file mode 100644 index 00000000..b1218bfe --- /dev/null +++ b/node_modules/pg-types/lib/textParsers.js @@ -0,0 +1,215 @@ +var array = require('postgres-array') +var arrayParser = require('./arrayParser'); +var parseDate = require('postgres-date'); +var parseInterval = require('postgres-interval'); +var parseByteA = require('postgres-bytea'); + +function allowNull (fn) { + return function nullAllowed (value) { + if (value === null) return value + return fn(value) + } +} + +function parseBool (value) { + if (value === null) return value + return value === 'TRUE' || + value === 't' || + value === 'true' || + value === 'y' || + value === 'yes' || + value === 'on' || + value === '1'; +} + +function parseBoolArray (value) { + if (!value) return null + return array.parse(value, parseBool) +} + +function parseBaseTenInt (string) { + return parseInt(string, 10) +} + +function parseIntegerArray (value) { + if (!value) return null + return array.parse(value, allowNull(parseBaseTenInt)) +} + +function parseBigIntegerArray (value) { + if (!value) return null + return array.parse(value, allowNull(function (entry) { + return parseBigInteger(entry).trim() + })) +} + +var parsePointArray = function(value) { + if(!value) { return null; } + var p = arrayParser.create(value, function(entry) { + if(entry !== null) { + entry = parsePoint(entry); + } + return entry; + }); + + return p.parse(); +}; + +var parseFloatArray = function(value) { + if(!value) { return null; } + var p = arrayParser.create(value, function(entry) { + if(entry !== null) { + entry = parseFloat(entry); + } + return entry; + }); + + return p.parse(); +}; + +var parseStringArray = function(value) { + if(!value) { return null; } + + var p = arrayParser.create(value); + return p.parse(); +}; + +var parseDateArray = function(value) { + if (!value) { return null; } + + var p = arrayParser.create(value, function(entry) { + if (entry !== null) { + entry = parseDate(entry); + } + return entry; + }); + + return p.parse(); +}; + +var parseIntervalArray = function(value) { + if (!value) { return null; } + + var p = arrayParser.create(value, function(entry) { + if (entry !== null) { + entry = parseInterval(entry); + } + return entry; + }); + + return p.parse(); +}; + +var parseByteAArray = function(value) { + if (!value) { return null; } + + return array.parse(value, allowNull(parseByteA)); +}; + +var parseInteger = function(value) { + return parseInt(value, 10); +}; + +var parseBigInteger = function(value) { + var valStr = String(value); + if (/^\d+$/.test(valStr)) { return valStr; } + return value; +}; + +var parseJsonArray = function(value) { + if (!value) { return null; } + + return array.parse(value, allowNull(JSON.parse)); +}; + +var parsePoint = function(value) { + if (value[0] !== '(') { return null; } + + value = value.substring( 1, value.length - 1 ).split(','); + + return { + x: parseFloat(value[0]) + , y: parseFloat(value[1]) + }; +}; + +var parseCircle = function(value) { + if (value[0] !== '<' && value[1] !== '(') { return null; } + + var point = '('; + var radius = ''; + var pointParsed = false; + for (var i = 2; i < value.length - 1; i++){ + if (!pointParsed) { + point += value[i]; + } + + if (value[i] === ')') { + pointParsed = true; + continue; + } else if (!pointParsed) { + continue; + } + + if (value[i] === ','){ + continue; + } + + radius += value[i]; + } + var result = parsePoint(point); + result.radius = parseFloat(radius); + + return result; +}; + +var init = function(register) { + register(20, parseBigInteger); // int8 + register(21, parseInteger); // int2 + register(23, parseInteger); // int4 + register(26, parseInteger); // oid + register(700, parseFloat); // float4/real + register(701, parseFloat); // float8/double + register(16, parseBool); + register(1082, parseDate); // date + register(1114, parseDate); // timestamp without timezone + register(1184, parseDate); // timestamp + register(600, parsePoint); // point + register(651, parseStringArray); // cidr[] + register(718, parseCircle); // circle + register(1000, parseBoolArray); + register(1001, parseByteAArray); + register(1005, parseIntegerArray); // _int2 + register(1007, parseIntegerArray); // _int4 + register(1028, parseIntegerArray); // oid[] + register(1016, parseBigIntegerArray); // _int8 + register(1017, parsePointArray); // point[] + register(1021, parseFloatArray); // _float4 + register(1022, parseFloatArray); // _float8 + register(1231, parseFloatArray); // _numeric + register(1014, parseStringArray); //char + register(1015, parseStringArray); //varchar + register(1008, parseStringArray); + register(1009, parseStringArray); + register(1040, parseStringArray); // macaddr[] + register(1041, parseStringArray); // inet[] + register(1115, parseDateArray); // timestamp without time zone[] + register(1182, parseDateArray); // _date + register(1185, parseDateArray); // timestamp with time zone[] + register(1186, parseInterval); + register(1187, parseIntervalArray); + register(17, parseByteA); + register(114, JSON.parse.bind(JSON)); // json + register(3802, JSON.parse.bind(JSON)); // jsonb + register(199, parseJsonArray); // json[] + register(3807, parseJsonArray); // jsonb[] + register(3907, parseStringArray); // numrange[] + register(2951, parseStringArray); // uuid[] + register(791, parseStringArray); // money[] + register(1183, parseStringArray); // time[] + register(1270, parseStringArray); // timetz[] +}; + +module.exports = { + init: init +}; diff --git a/node_modules/pg-types/package.json b/node_modules/pg-types/package.json new file mode 100644 index 00000000..5f18026f --- /dev/null +++ b/node_modules/pg-types/package.json @@ -0,0 +1,42 @@ +{ + "name": "pg-types", + "version": "2.2.0", + "description": "Query result type converters for node-postgres", + "main": "index.js", + "scripts": { + "test": "tape test/*.js | tap-spec && npm run test-ts", + "test-ts": "if-node-version '>= 8' tsd" + }, + "repository": { + "type": "git", + "url": "git://github.com/brianc/node-pg-types.git" + }, + "keywords": [ + "postgres", + "PostgreSQL", + "pg" + ], + "author": "Brian M. Carlson", + "license": "MIT", + "bugs": { + "url": "https://github.com/brianc/node-pg-types/issues" + }, + "homepage": "https://github.com/brianc/node-pg-types", + "devDependencies": { + "if-node-version": "^1.1.1", + "pff": "^1.0.0", + "tap-spec": "^4.0.0", + "tape": "^4.0.0", + "tsd": "^0.7.4" + }, + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } +} diff --git a/node_modules/pg-types/test/index.js b/node_modules/pg-types/test/index.js new file mode 100644 index 00000000..b7d05cd6 --- /dev/null +++ b/node_modules/pg-types/test/index.js @@ -0,0 +1,24 @@ + +var test = require('tape') +var printf = require('pff') +var getTypeParser = require('../').getTypeParser +var types = require('./types') + +test('types', function (t) { + Object.keys(types).forEach(function (typeName) { + var type = types[typeName] + t.test(typeName, function (t) { + var parser = getTypeParser(type.id, type.format) + type.tests.forEach(function (tests) { + var input = tests[0] + var expected = tests[1] + var result = parser(input) + if (typeof expected === 'function') { + return expected(t, result) + } + t.equal(result, expected) + }) + t.end() + }) + }) +}) diff --git a/node_modules/pg-types/test/types.js b/node_modules/pg-types/test/types.js new file mode 100644 index 00000000..af708a5c --- /dev/null +++ b/node_modules/pg-types/test/types.js @@ -0,0 +1,597 @@ +'use strict' + +exports['string/varchar'] = { + format: 'text', + id: 1043, + tests: [ + ['bang', 'bang'] + ] +} + +exports['integer/int4'] = { + format: 'text', + id: 23, + tests: [ + ['2147483647', 2147483647] + ] +} + +exports['smallint/int2'] = { + format: 'text', + id: 21, + tests: [ + ['32767', 32767] + ] +} + +exports['bigint/int8'] = { + format: 'text', + id: 20, + tests: [ + ['9223372036854775807', '9223372036854775807'] + ] +} + +exports.oid = { + format: 'text', + id: 26, + tests: [ + ['103', 103] + ] +} + +var bignum = '31415926535897932384626433832795028841971693993751058.16180339887498948482045868343656381177203091798057628' +exports.numeric = { + format: 'text', + id: 1700, + tests: [ + [bignum, bignum] + ] +} + +exports['real/float4'] = { + format: 'text', + id: 700, + tests: [ + ['123.456', 123.456] + ] +} + +exports['double precision / float 8'] = { + format: 'text', + id: 701, + tests: [ + ['12345678.12345678', 12345678.12345678] + ] +} + +exports.boolean = { + format: 'text', + id: 16, + tests: [ + ['TRUE', true], + ['t', true], + ['true', true], + ['y', true], + ['yes', true], + ['on', true], + ['1', true], + ['f', false], + [null, null] + ] +} + +exports.timestamptz = { + format: 'text', + id: 1184, + tests: [ + [ + '2010-10-31 14:54:13.74-05:30', + dateEquals(2010, 9, 31, 20, 24, 13, 740) + ], + [ + '2011-01-23 22:05:00.68-06', + dateEquals(2011, 0, 24, 4, 5, 0, 680) + ], + [ + '2010-10-30 14:11:12.730838Z', + dateEquals(2010, 9, 30, 14, 11, 12, 730) + ], + [ + '2010-10-30 13:10:01+05', + dateEquals(2010, 9, 30, 8, 10, 1, 0) + ] + ] +} + +exports.timestamp = { + format: 'text', + id: 1114, + tests: [ + [ + '2010-10-31 00:00:00', + function (t, value) { + t.equal( + value.toUTCString(), + new Date(2010, 9, 31, 0, 0, 0, 0, 0).toUTCString() + ) + t.equal( + value.toString(), + new Date(2010, 9, 31, 0, 0, 0, 0, 0, 0).toString() + ) + } + ] + ] +} + +exports.date = { + format: 'text', + id: 1082, + tests: [ + ['2010-10-31', function (t, value) { + var now = new Date(2010, 9, 31) + dateEquals( + 2010, + now.getUTCMonth(), + now.getUTCDate(), + now.getUTCHours(), 0, 0, 0)(t, value) + t.equal(value.getHours(), now.getHours()) + }] + ] +} + +exports.inet = { + format: 'text', + id: 869, + tests: [ + ['8.8.8.8', '8.8.8.8'], + ['2001:4860:4860::8888', '2001:4860:4860::8888'], + ['127.0.0.1', '127.0.0.1'], + ['fd00:1::40e', 'fd00:1::40e'], + ['1.2.3.4', '1.2.3.4'] + ] +} + +exports.cidr = { + format: 'text', + id: 650, + tests: [ + ['172.16.0.0/12', '172.16.0.0/12'], + ['fe80::/10', 'fe80::/10'], + ['fc00::/7', 'fc00::/7'], + ['192.168.0.0/24', '192.168.0.0/24'], + ['10.0.0.0/8', '10.0.0.0/8'] + ] +} + +exports.macaddr = { + format: 'text', + id: 829, + tests: [ + ['08:00:2b:01:02:03', '08:00:2b:01:02:03'], + ['16:10:9f:0d:66:00', '16:10:9f:0d:66:00'] + ] +} + +exports.numrange = { + format: 'text', + id: 3906, + tests: [ + ['[,]', '[,]'], + ['(,)', '(,)'], + ['(,]', '(,]'], + ['[1,)', '[1,)'], + ['[,1]', '[,1]'], + ['(1,2)', '(1,2)'], + ['(1,20.5]', '(1,20.5]'] + ] +} + +exports.interval = { + format: 'text', + id: 1186, + tests: [ + ['01:02:03', function (t, value) { + t.equal(value.toPostgres(), '3 seconds 2 minutes 1 hours') + t.deepEqual(value, {hours: 1, minutes: 2, seconds: 3}) + }], + ['01:02:03.456', function (t, value) { + t.deepEqual(value, {hours: 1, minutes:2, seconds: 3, milliseconds: 456}) + }], + ['1 year -32 days', function (t, value) { + t.equal(value.toPostgres(), '-32 days 1 years') + t.deepEqual(value, {years: 1, days: -32}) + }], + ['1 day -00:00:03', function (t, value) { + t.equal(value.toPostgres(), '-3 seconds 1 days') + t.deepEqual(value, {days: 1, seconds: -3}) + }] + ] +} + +exports.bytea = { + format: 'text', + id: 17, + tests: [ + ['foo\\000\\200\\\\\\377', function (t, value) { + var buffer = new Buffer([102, 111, 111, 0, 128, 92, 255]) + t.ok(buffer.equals(value)) + }], + ['', function (t, value) { + var buffer = new Buffer(0) + t.ok(buffer.equals(value)) + }] + ] +} + +exports['array/boolean'] = { + format: 'text', + id: 1000, + tests: [ + ['{true,false}', function (t, value) { + t.deepEqual(value, [true, false]) + }] + ] +} + +exports['array/char'] = { + format: 'text', + id: 1014, + tests: [ + ['{foo,bar}', function (t, value) { + t.deepEqual(value, ['foo', 'bar']) + }] + ] +} + +exports['array/varchar'] = { + format: 'text', + id: 1015, + tests: [ + ['{foo,bar}', function (t, value) { + t.deepEqual(value, ['foo', 'bar']) + }] + ] +} + +exports['array/text'] = { + format: 'text', + id: 1008, + tests: [ + ['{foo}', function (t, value) { + t.deepEqual(value, ['foo']) + }] + ] +} + +exports['array/bytea'] = { + format: 'text', + id: 1001, + tests: [ + ['{"\\\\x00000000"}', function (t, value) { + var buffer = new Buffer('00000000', 'hex') + t.ok(Array.isArray(value)) + t.equal(value.length, 1) + t.ok(buffer.equals(value[0])) + }], + ['{NULL,"\\\\x4e554c4c"}', function (t, value) { + var buffer = new Buffer('4e554c4c', 'hex') + t.ok(Array.isArray(value)) + t.equal(value.length, 2) + t.equal(value[0], null) + t.ok(buffer.equals(value[1])) + }], + ] +} + +exports['array/numeric'] = { + format: 'text', + id: 1231, + tests: [ + ['{1.2,3.4}', function (t, value) { + t.deepEqual(value, [1.2, 3.4]) + }] + ] +} + +exports['array/int2'] = { + format: 'text', + id: 1005, + tests: [ + ['{-32768, -32767, 32766, 32767}', function (t, value) { + t.deepEqual(value, [-32768, -32767, 32766, 32767]) + }] + ] +} + +exports['array/int4'] = { + format: 'text', + id: 1005, + tests: [ + ['{-2147483648, -2147483647, 2147483646, 2147483647}', function (t, value) { + t.deepEqual(value, [-2147483648, -2147483647, 2147483646, 2147483647]) + }] + ] +} + +exports['array/int8'] = { + format: 'text', + id: 1016, + tests: [ + [ + '{-9223372036854775808, -9223372036854775807, 9223372036854775806, 9223372036854775807}', + function (t, value) { + t.deepEqual(value, [ + '-9223372036854775808', + '-9223372036854775807', + '9223372036854775806', + '9223372036854775807' + ]) + } + ] + ] +} + +exports['array/json'] = { + format: 'text', + id: 199, + tests: [ + [ + '{{1,2},{[3],"[4,5]"},{null,NULL}}', + function (t, value) { + t.deepEqual(value, [ + [1, 2], + [[3], [4, 5]], + [null, null], + ]) + } + ] + ] +} + +exports['array/jsonb'] = { + format: 'text', + id: 3807, + tests: exports['array/json'].tests +} + +exports['array/point'] = { + format: 'text', + id: 1017, + tests: [ + ['{"(25.1,50.5)","(10.1,40)"}', function (t, value) { + t.deepEqual(value, [{x: 25.1, y: 50.5}, {x: 10.1, y: 40}]) + }] + ] +} + +exports['array/oid'] = { + format: 'text', + id: 1028, + tests: [ + ['{25864,25860}', function (t, value) { + t.deepEqual(value, [25864, 25860]) + }] + ] +} + +exports['array/float4'] = { + format: 'text', + id: 1021, + tests: [ + ['{1.2, 3.4}', function (t, value) { + t.deepEqual(value, [1.2, 3.4]) + }] + ] +} + +exports['array/float8'] = { + format: 'text', + id: 1022, + tests: [ + ['{-12345678.1234567, 12345678.12345678}', function (t, value) { + t.deepEqual(value, [-12345678.1234567, 12345678.12345678]) + }] + ] +} + +exports['array/date'] = { + format: 'text', + id: 1182, + tests: [ + ['{2014-01-01,2015-12-31}', function (t, value) { + var expecteds = [new Date(2014, 0, 1), new Date(2015, 11, 31)] + t.equal(value.length, 2) + value.forEach(function (date, index) { + var expected = expecteds[index] + dateEquals( + expected.getUTCFullYear(), + expected.getUTCMonth(), + expected.getUTCDate(), + expected.getUTCHours(), 0, 0, 0)(t, date) + }) + }] + ] +} + +exports['array/interval'] = { + format: 'text', + id: 1187, + tests: [ + ['{01:02:03,1 day -00:00:03}', function (t, value) { + var expecteds = [{hours: 1, minutes: 2, seconds: 3}, + {days: 1, seconds: -3}] + t.equal(value.length, 2) + t.deepEqual(value, expecteds); + }] + ] +} + +exports['array/inet'] = { + format: 'text', + id: 1041, + tests: [ + ['{8.8.8.8}', function (t, value) { + t.deepEqual(value, ['8.8.8.8']); + }], + ['{2001:4860:4860::8888}', function (t, value) { + t.deepEqual(value, ['2001:4860:4860::8888']); + }], + ['{127.0.0.1,fd00:1::40e,1.2.3.4}', function (t, value) { + t.deepEqual(value, ['127.0.0.1', 'fd00:1::40e', '1.2.3.4']); + }] + ] +} + +exports['array/cidr'] = { + format: 'text', + id: 651, + tests: [ + ['{172.16.0.0/12}', function (t, value) { + t.deepEqual(value, ['172.16.0.0/12']); + }], + ['{fe80::/10}', function (t, value) { + t.deepEqual(value, ['fe80::/10']); + }], + ['{10.0.0.0/8,fc00::/7,192.168.0.0/24}', function (t, value) { + t.deepEqual(value, ['10.0.0.0/8', 'fc00::/7', '192.168.0.0/24']); + }] + ] +} + +exports['array/macaddr'] = { + format: 'text', + id: 1040, + tests: [ + ['{08:00:2b:01:02:03,16:10:9f:0d:66:00}', function (t, value) { + t.deepEqual(value, ['08:00:2b:01:02:03', '16:10:9f:0d:66:00']); + }] + ] +} + +exports['array/numrange'] = { + format: 'text', + id: 3907, + tests: [ + ['{"[1,2]","(4.5,8)","[10,40)","(-21.2,60.3]"}', function (t, value) { + t.deepEqual(value, ['[1,2]', '(4.5,8)', '[10,40)', '(-21.2,60.3]']); + }], + ['{"[,20]","[3,]","[,]","(,35)","(1,)","(,)"}', function (t, value) { + t.deepEqual(value, ['[,20]', '[3,]', '[,]', '(,35)', '(1,)', '(,)']); + }], + ['{"[,20)","[3,)","[,)","[,35)","[1,)","[,)"}', function (t, value) { + t.deepEqual(value, ['[,20)', '[3,)', '[,)', '[,35)', '[1,)', '[,)']); + }] + ] +} + +exports['binary-string/varchar'] = { + format: 'binary', + id: 1043, + tests: [ + ['bang', 'bang'] + ] +} + +exports['binary-integer/int4'] = { + format: 'binary', + id: 23, + tests: [ + [[0, 0, 0, 100], 100] + ] +} + +exports['binary-smallint/int2'] = { + format: 'binary', + id: 21, + tests: [ + [[0, 101], 101] + ] +} + +exports['binary-bigint/int8'] = { + format: 'binary', + id: 20, + tests: [ + [new Buffer([0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]), '9223372036854775807'] + ] +} + +exports['binary-oid'] = { + format: 'binary', + id: 26, + tests: [ + [[0, 0, 0, 103], 103] + ] +} + +exports['binary-numeric'] = { + format: 'binary', + id: 1700, + tests: [ + [ + [0, 2, 0, 0, 0, 0, 0, hex('0x64'), 0, 12, hex('0xd'), hex('0x48'), 0, 0, 0, 0], + 12.34 + ] + ] +} + +exports['binary-real/float4'] = { + format: 'binary', + id: 700, + tests: [ + [['0x41', '0x48', '0x00', '0x00'].map(hex), 12.5] + ] +} + +exports['binary-boolean'] = { + format: 'binary', + id: 16, + tests: [ + [[1], true], + [[0], false], + [null, null] + ] +} + +exports['binary-string'] = { + format: 'binary', + id: 25, + tests: [ + [ + new Buffer(['0x73', '0x6c', '0x61', '0x64', '0x64', '0x61'].map(hex)), + 'sladda' + ] + ] +} + +exports.point = { + format: 'text', + id: 600, + tests: [ + ['(25.1,50.5)', function (t, value) { + t.deepEqual(value, {x: 25.1, y: 50.5}) + }] + ] +} + +exports.circle = { + format: 'text', + id: 718, + tests: [ + ['<(25,10),5>', function (t, value) { + t.deepEqual(value, {x: 25, y: 10, radius: 5}) + }] + ] +} + +function hex (string) { + return parseInt(string, 16) +} + +function dateEquals () { + var timestamp = Date.UTC.apply(Date, arguments) + return function (t, value) { + t.equal(value.toUTCString(), new Date(timestamp).toUTCString()) + } +} diff --git a/node_modules/pg/LICENSE b/node_modules/pg/LICENSE new file mode 100644 index 00000000..5c140564 --- /dev/null +++ b/node_modules/pg/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2010 - 2021 Brian Carlson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/pg/README.md b/node_modules/pg/README.md new file mode 100644 index 00000000..bf4effef --- /dev/null +++ b/node_modules/pg/README.md @@ -0,0 +1,95 @@ +# node-postgres + +[![Build Status](https://secure.travis-ci.org/brianc/node-postgres.svg?branch=master)](http://travis-ci.org/brianc/node-postgres) +NPM version +NPM downloads + +Non-blocking PostgreSQL client for Node.js. Pure JavaScript and optional native libpq bindings. + +## Install + +```sh +$ npm install pg +``` + +--- + +## :star: [Documentation](https://node-postgres.com) :star: + +### Features + +- Pure JavaScript client and native libpq bindings share _the same API_ +- Connection pooling +- Extensible JS ↔ PostgreSQL data-type coercion +- Supported PostgreSQL features + - Parameterized queries + - Named statements with query plan caching + - Async notifications with `LISTEN/NOTIFY` + - Bulk import & export with `COPY TO/COPY FROM` + +### Extras + +node-postgres is by design pretty light on abstractions. These are some handy modules we've been using over the years to complete the picture. +The entire list can be found on our [wiki](https://github.com/brianc/node-postgres/wiki/Extras). + +## Support + +node-postgres is free software. If you encounter a bug with the library please open an issue on the [GitHub repo](https://github.com/brianc/node-postgres). If you have questions unanswered by the documentation please open an issue pointing out how the documentation was unclear & I will do my best to make it better! + +When you open an issue please provide: + +- version of Node +- version of Postgres +- smallest possible snippet of code to reproduce the problem + +You can also follow me [@briancarlson](https://twitter.com/briancarlson) if that's your thing. I try to always announce noteworthy changes & developments with node-postgres on Twitter. + +## Sponsorship :two_hearts: + +node-postgres's continued development has been made possible in part by generous financial support from [the community](https://github.com/brianc/node-postgres/blob/master/SPONSORS.md). + +If you or your company are benefiting from node-postgres and would like to help keep the project financially sustainable [please consider supporting](https://github.com/sponsors/brianc) its development. + +### Featured sponsor + +Special thanks to [medplum](https://medplum.com) for their generous and thoughtful support of node-postgres! + +![medplum](https://raw.githubusercontent.com/medplum/medplum-logo/refs/heads/main/medplum-logo.png) + +## Contributing + +**:heart: contributions!** + +I will **happily** accept your pull request if it: + +- **has tests** +- looks reasonable +- does not break backwards compatibility + +If your change involves breaking backwards compatibility please please point that out in the pull request & we can discuss & plan when and how to release it and what type of documentation or communicate it will require. + +## Troubleshooting and FAQ + +The causes and solutions to common errors can be found among the [Frequently Asked Questions (FAQ)](https://github.com/brianc/node-postgres/wiki/FAQ) + +## License + +Copyright (c) 2010-2020 Brian Carlson (brian.m.carlson@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pg/esm/index.mjs b/node_modules/pg/esm/index.mjs new file mode 100644 index 00000000..587d80c1 --- /dev/null +++ b/node_modules/pg/esm/index.mjs @@ -0,0 +1,20 @@ +// ESM wrapper for pg +import pg from '../lib/index.js' + +// Re-export all the properties +export const Client = pg.Client +export const Pool = pg.Pool +export const Connection = pg.Connection +export const types = pg.types +export const Query = pg.Query +export const DatabaseError = pg.DatabaseError +export const escapeIdentifier = pg.escapeIdentifier +export const escapeLiteral = pg.escapeLiteral +export const Result = pg.Result +export const TypeOverrides = pg.TypeOverrides + +// Also export the defaults +export const defaults = pg.defaults + +// Re-export the default +export default pg diff --git a/node_modules/pg/lib/client.js b/node_modules/pg/lib/client.js new file mode 100644 index 00000000..b0214e3d --- /dev/null +++ b/node_modules/pg/lib/client.js @@ -0,0 +1,733 @@ +'use strict' + +const EventEmitter = require('events').EventEmitter +const utils = require('./utils') +const nodeUtils = require('util') +const sasl = require('./crypto/sasl') +const TypeOverrides = require('./type-overrides') + +const ConnectionParameters = require('./connection-parameters') +const Query = require('./query') +const defaults = require('./defaults') +const Connection = require('./connection') +const crypto = require('./crypto/utils') + +const activeQueryDeprecationNotice = nodeUtils.deprecate( + () => {}, + 'Client.activeQuery is deprecated and will be removed in a future version.' +) + +const queryQueueDeprecationNotice = nodeUtils.deprecate( + () => {}, + 'Client.queryQueue is deprecated and will be removed in a future version.' +) + +const pgPassDeprecationNotice = nodeUtils.deprecate( + () => {}, + 'pgpass support is deprecated and will be removed in a future version. ' + + 'You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this funciton you can call the pgpass module in your own code.' +) + +const byoPromiseDeprecationNotice = nodeUtils.deprecate( + () => {}, + 'Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in a future version.' +) + +class Client extends EventEmitter { + constructor(config) { + super() + + this.connectionParameters = new ConnectionParameters(config) + this.user = this.connectionParameters.user + this.database = this.connectionParameters.database + this.port = this.connectionParameters.port + this.host = this.connectionParameters.host + + // "hiding" the password so it doesn't show up in stack traces + // or if the client is console.logged + Object.defineProperty(this, 'password', { + configurable: true, + enumerable: false, + writable: true, + value: this.connectionParameters.password, + }) + + this.replication = this.connectionParameters.replication + + const c = config || {} + + if (c.Promise) { + byoPromiseDeprecationNotice() + } + this._Promise = c.Promise || global.Promise + this._types = new TypeOverrides(c.types) + this._ending = false + this._ended = false + this._connecting = false + this._connected = false + this._connectionError = false + this._queryable = true + this._activeQuery = null + + this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered + this.connection = + c.connection || + new Connection({ + stream: c.stream, + ssl: this.connectionParameters.ssl, + keepAlive: c.keepAlive || false, + keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0, + encoding: this.connectionParameters.client_encoding || 'utf8', + }) + this._queryQueue = [] + this.binary = c.binary || defaults.binary + this.processID = null + this.secretKey = null + this.ssl = this.connectionParameters.ssl || false + // As with Password, make SSL->Key (the private key) non-enumerable. + // It won't show up in stack traces + // or if the client is console.logged + if (this.ssl && this.ssl.key) { + Object.defineProperty(this.ssl, 'key', { + enumerable: false, + }) + } + + this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0 + } + + get activeQuery() { + activeQueryDeprecationNotice() + return this._activeQuery + } + + set activeQuery(val) { + activeQueryDeprecationNotice() + this._activeQuery = val + } + + _getActiveQuery() { + return this._activeQuery + } + + _errorAllQueries(err) { + const enqueueError = (query) => { + process.nextTick(() => { + query.handleError(err, this.connection) + }) + } + + const activeQuery = this._getActiveQuery() + if (activeQuery) { + enqueueError(activeQuery) + this._activeQuery = null + } + + this._queryQueue.forEach(enqueueError) + this._queryQueue.length = 0 + } + + _connect(callback) { + const self = this + const con = this.connection + this._connectionCallback = callback + + if (this._connecting || this._connected) { + const err = new Error('Client has already been connected. You cannot reuse a client.') + process.nextTick(() => { + callback(err) + }) + return + } + this._connecting = true + + if (this._connectionTimeoutMillis > 0) { + this.connectionTimeoutHandle = setTimeout(() => { + con._ending = true + con.stream.destroy(new Error('timeout expired')) + }, this._connectionTimeoutMillis) + + if (this.connectionTimeoutHandle.unref) { + this.connectionTimeoutHandle.unref() + } + } + + if (this.host && this.host.indexOf('/') === 0) { + con.connect(this.host + '/.s.PGSQL.' + this.port) + } else { + con.connect(this.port, this.host) + } + + // once connection is established send startup message + con.on('connect', function () { + if (self.ssl) { + con.requestSsl() + } else { + con.startup(self.getStartupConf()) + } + }) + + con.on('sslconnect', function () { + con.startup(self.getStartupConf()) + }) + + this._attachListeners(con) + + con.once('end', () => { + const error = this._ending ? new Error('Connection terminated') : new Error('Connection terminated unexpectedly') + + clearTimeout(this.connectionTimeoutHandle) + this._errorAllQueries(error) + this._ended = true + + if (!this._ending) { + // if the connection is ended without us calling .end() + // on this client then we have an unexpected disconnection + // treat this as an error unless we've already emitted an error + // during connection. + if (this._connecting && !this._connectionError) { + if (this._connectionCallback) { + this._connectionCallback(error) + } else { + this._handleErrorEvent(error) + } + } else if (!this._connectionError) { + this._handleErrorEvent(error) + } + } + + process.nextTick(() => { + this.emit('end') + }) + }) + } + + connect(callback) { + if (callback) { + this._connect(callback) + return + } + + return new this._Promise((resolve, reject) => { + this._connect((error) => { + if (error) { + reject(error) + } else { + resolve(this) + } + }) + }) + } + + _attachListeners(con) { + // password request handling + con.on('authenticationCleartextPassword', this._handleAuthCleartextPassword.bind(this)) + // password request handling + con.on('authenticationMD5Password', this._handleAuthMD5Password.bind(this)) + // password request handling (SASL) + con.on('authenticationSASL', this._handleAuthSASL.bind(this)) + con.on('authenticationSASLContinue', this._handleAuthSASLContinue.bind(this)) + con.on('authenticationSASLFinal', this._handleAuthSASLFinal.bind(this)) + con.on('backendKeyData', this._handleBackendKeyData.bind(this)) + con.on('error', this._handleErrorEvent.bind(this)) + con.on('errorMessage', this._handleErrorMessage.bind(this)) + con.on('readyForQuery', this._handleReadyForQuery.bind(this)) + con.on('notice', this._handleNotice.bind(this)) + con.on('rowDescription', this._handleRowDescription.bind(this)) + con.on('dataRow', this._handleDataRow.bind(this)) + con.on('portalSuspended', this._handlePortalSuspended.bind(this)) + con.on('emptyQuery', this._handleEmptyQuery.bind(this)) + con.on('commandComplete', this._handleCommandComplete.bind(this)) + con.on('parseComplete', this._handleParseComplete.bind(this)) + con.on('copyInResponse', this._handleCopyInResponse.bind(this)) + con.on('copyData', this._handleCopyData.bind(this)) + con.on('notification', this._handleNotification.bind(this)) + } + + _getPassword(cb) { + const con = this.connection + if (typeof this.password === 'function') { + this._Promise + .resolve() + .then(() => this.password()) + .then((pass) => { + if (pass !== undefined) { + if (typeof pass !== 'string') { + con.emit('error', new TypeError('Password must be a string')) + return + } + this.connectionParameters.password = this.password = pass + } else { + this.connectionParameters.password = this.password = null + } + cb() + }) + .catch((err) => { + con.emit('error', err) + }) + } else if (this.password !== null) { + cb() + } else { + try { + const pgPass = require('pgpass') + pgPass(this.connectionParameters, (pass) => { + if (undefined !== pass) { + pgPassDeprecationNotice() + this.connectionParameters.password = this.password = pass + } + cb() + }) + } catch (e) { + this.emit('error', e) + } + } + } + + _handleAuthCleartextPassword(msg) { + this._getPassword(() => { + this.connection.password(this.password) + }) + } + + _handleAuthMD5Password(msg) { + this._getPassword(async () => { + try { + const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt) + this.connection.password(hashedPassword) + } catch (e) { + this.emit('error', e) + } + }) + } + + _handleAuthSASL(msg) { + this._getPassword(() => { + try { + this.saslSession = sasl.startSession(msg.mechanisms, this.enableChannelBinding && this.connection.stream) + this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response) + } catch (err) { + this.connection.emit('error', err) + } + }) + } + + async _handleAuthSASLContinue(msg) { + try { + await sasl.continueSession( + this.saslSession, + this.password, + msg.data, + this.enableChannelBinding && this.connection.stream + ) + this.connection.sendSCRAMClientFinalMessage(this.saslSession.response) + } catch (err) { + this.connection.emit('error', err) + } + } + + _handleAuthSASLFinal(msg) { + try { + sasl.finalizeSession(this.saslSession, msg.data) + this.saslSession = null + } catch (err) { + this.connection.emit('error', err) + } + } + + _handleBackendKeyData(msg) { + this.processID = msg.processID + this.secretKey = msg.secretKey + } + + _handleReadyForQuery(msg) { + if (this._connecting) { + this._connecting = false + this._connected = true + clearTimeout(this.connectionTimeoutHandle) + + // process possible callback argument to Client#connect + if (this._connectionCallback) { + this._connectionCallback(null, this) + // remove callback for proper error handling + // after the connect event + this._connectionCallback = null + } + this.emit('connect') + } + const activeQuery = this._getActiveQuery() + this._activeQuery = null + this.readyForQuery = true + if (activeQuery) { + activeQuery.handleReadyForQuery(this.connection) + } + this._pulseQueryQueue() + } + + // if we receive an error event or error message + // during the connection process we handle it here + _handleErrorWhileConnecting(err) { + if (this._connectionError) { + // TODO(bmc): this is swallowing errors - we shouldn't do this + return + } + this._connectionError = true + clearTimeout(this.connectionTimeoutHandle) + if (this._connectionCallback) { + return this._connectionCallback(err) + } + this.emit('error', err) + } + + // if we're connected and we receive an error event from the connection + // this means the socket is dead - do a hard abort of all queries and emit + // the socket error on the client as well + _handleErrorEvent(err) { + if (this._connecting) { + return this._handleErrorWhileConnecting(err) + } + this._queryable = false + this._errorAllQueries(err) + this.emit('error', err) + } + + // handle error messages from the postgres backend + _handleErrorMessage(msg) { + if (this._connecting) { + return this._handleErrorWhileConnecting(msg) + } + const activeQuery = this._getActiveQuery() + + if (!activeQuery) { + this._handleErrorEvent(msg) + return + } + + this._activeQuery = null + activeQuery.handleError(msg, this.connection) + } + + _handleRowDescription(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected rowDescription message from backend.') + this._handleErrorEvent(error) + return + } + // delegate rowDescription to active query + activeQuery.handleRowDescription(msg) + } + + _handleDataRow(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected dataRow message from backend.') + this._handleErrorEvent(error) + return + } + // delegate dataRow to active query + activeQuery.handleDataRow(msg) + } + + _handlePortalSuspended(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected portalSuspended message from backend.') + this._handleErrorEvent(error) + return + } + // delegate portalSuspended to active query + activeQuery.handlePortalSuspended(this.connection) + } + + _handleEmptyQuery(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected emptyQuery message from backend.') + this._handleErrorEvent(error) + return + } + // delegate emptyQuery to active query + activeQuery.handleEmptyQuery(this.connection) + } + + _handleCommandComplete(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected commandComplete message from backend.') + this._handleErrorEvent(error) + return + } + // delegate commandComplete to active query + activeQuery.handleCommandComplete(msg, this.connection) + } + + _handleParseComplete() { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected parseComplete message from backend.') + this._handleErrorEvent(error) + return + } + // if a prepared statement has a name and properly parses + // we track that its already been executed so we don't parse + // it again on the same client + if (activeQuery.name) { + this.connection.parsedStatements[activeQuery.name] = activeQuery.text + } + } + + _handleCopyInResponse(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected copyInResponse message from backend.') + this._handleErrorEvent(error) + return + } + activeQuery.handleCopyInResponse(this.connection) + } + + _handleCopyData(msg) { + const activeQuery = this._getActiveQuery() + if (activeQuery == null) { + const error = new Error('Received unexpected copyData message from backend.') + this._handleErrorEvent(error) + return + } + activeQuery.handleCopyData(msg, this.connection) + } + + _handleNotification(msg) { + this.emit('notification', msg) + } + + _handleNotice(msg) { + this.emit('notice', msg) + } + + getStartupConf() { + const params = this.connectionParameters + + const data = { + user: params.user, + database: params.database, + } + + const appName = params.application_name || params.fallback_application_name + if (appName) { + data.application_name = appName + } + if (params.replication) { + data.replication = '' + params.replication + } + if (params.statement_timeout) { + data.statement_timeout = String(parseInt(params.statement_timeout, 10)) + } + if (params.lock_timeout) { + data.lock_timeout = String(parseInt(params.lock_timeout, 10)) + } + if (params.idle_in_transaction_session_timeout) { + data.idle_in_transaction_session_timeout = String(parseInt(params.idle_in_transaction_session_timeout, 10)) + } + if (params.options) { + data.options = params.options + } + + return data + } + + cancel(client, query) { + if (client.activeQuery === query) { + const con = this.connection + + if (this.host && this.host.indexOf('/') === 0) { + con.connect(this.host + '/.s.PGSQL.' + this.port) + } else { + con.connect(this.port, this.host) + } + + // once connection is established send cancel message + con.on('connect', function () { + con.cancel(client.processID, client.secretKey) + }) + } else if (client._queryQueue.indexOf(query) !== -1) { + client._queryQueue.splice(client._queryQueue.indexOf(query), 1) + } + } + + setTypeParser(oid, format, parseFn) { + return this._types.setTypeParser(oid, format, parseFn) + } + + getTypeParser(oid, format) { + return this._types.getTypeParser(oid, format) + } + + // escapeIdentifier and escapeLiteral moved to utility functions & exported + // on PG + // re-exported here for backwards compatibility + escapeIdentifier(str) { + return utils.escapeIdentifier(str) + } + + escapeLiteral(str) { + return utils.escapeLiteral(str) + } + + _pulseQueryQueue() { + if (this.readyForQuery === true) { + this._activeQuery = this._queryQueue.shift() + const activeQuery = this._getActiveQuery() + if (activeQuery) { + this.readyForQuery = false + this.hasExecuted = true + + const queryError = activeQuery.submit(this.connection) + if (queryError) { + process.nextTick(() => { + activeQuery.handleError(queryError, this.connection) + this.readyForQuery = true + this._pulseQueryQueue() + }) + } + } else if (this.hasExecuted) { + this._activeQuery = null + this.emit('drain') + } + } + } + + query(config, values, callback) { + // can take in strings, config object or query object + let query + let result + let readTimeout + let readTimeoutTimer + let queryCallback + + if (config === null || config === undefined) { + throw new TypeError('Client was passed a null or undefined query') + } else if (typeof config.submit === 'function') { + readTimeout = config.query_timeout || this.connectionParameters.query_timeout + result = query = config + if (typeof values === 'function') { + query.callback = query.callback || values + } + } else { + readTimeout = config.query_timeout || this.connectionParameters.query_timeout + query = new Query(config, values, callback) + if (!query.callback) { + result = new this._Promise((resolve, reject) => { + query.callback = (err, res) => (err ? reject(err) : resolve(res)) + }).catch((err) => { + // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the + // application that created the query + Error.captureStackTrace(err) + throw err + }) + } + } + + if (readTimeout) { + queryCallback = query.callback + + readTimeoutTimer = setTimeout(() => { + const error = new Error('Query read timeout') + + process.nextTick(() => { + query.handleError(error, this.connection) + }) + + queryCallback(error) + + // we already returned an error, + // just do nothing if query completes + query.callback = () => {} + + // Remove from queue + const index = this._queryQueue.indexOf(query) + if (index > -1) { + this._queryQueue.splice(index, 1) + } + + this._pulseQueryQueue() + }, readTimeout) + + query.callback = (err, res) => { + clearTimeout(readTimeoutTimer) + queryCallback(err, res) + } + } + + if (this.binary && !query.binary) { + query.binary = true + } + + if (query._result && !query._result._types) { + query._result._types = this._types + } + + if (!this._queryable) { + process.nextTick(() => { + query.handleError(new Error('Client has encountered a connection error and is not queryable'), this.connection) + }) + return result + } + + if (this._ending) { + process.nextTick(() => { + query.handleError(new Error('Client was closed and is not queryable'), this.connection) + }) + return result + } + + this._queryQueue.push(query) + this._pulseQueryQueue() + return result + } + + ref() { + this.connection.ref() + } + + unref() { + this.connection.unref() + } + + end(cb) { + this._ending = true + + // if we have never connected, then end is a noop, callback immediately + if (!this.connection._connecting || this._ended) { + if (cb) { + cb() + } else { + return this._Promise.resolve() + } + } + + if (this._getActiveQuery() || !this._queryable) { + // if we have an active query we need to force a disconnect + // on the socket - otherwise a hung query could block end forever + this.connection.stream.destroy() + } else { + this.connection.end() + } + + if (cb) { + this.connection.once('end', cb) + } else { + return new this._Promise((resolve) => { + this.connection.once('end', resolve) + }) + } + } + get queryQueue() { + queryQueueDeprecationNotice() + return this._queryQueue + } +} + +// expose a Query constructor +Client.Query = Query + +module.exports = Client diff --git a/node_modules/pg/lib/connection-parameters.js b/node_modules/pg/lib/connection-parameters.js new file mode 100644 index 00000000..c153932b --- /dev/null +++ b/node_modules/pg/lib/connection-parameters.js @@ -0,0 +1,171 @@ +'use strict' + +const dns = require('dns') + +const defaults = require('./defaults') + +const parse = require('pg-connection-string').parse // parses a connection string + +const val = function (key, config, envVar) { + if (config[key]) { + return config[key] + } + + if (envVar === undefined) { + envVar = process.env['PG' + key.toUpperCase()] + } else if (envVar === false) { + // do nothing ... use false + } else { + envVar = process.env[envVar] + } + + return envVar || defaults[key] +} + +const readSSLConfigFromEnvironment = function () { + switch (process.env.PGSSLMODE) { + case 'disable': + return false + case 'prefer': + case 'require': + case 'verify-ca': + case 'verify-full': + return true + case 'no-verify': + return { rejectUnauthorized: false } + } + return defaults.ssl +} + +// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes +const quoteParamValue = function (value) { + return "'" + ('' + value).replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'" +} + +const add = function (params, config, paramName) { + const value = config[paramName] + if (value !== undefined && value !== null) { + params.push(paramName + '=' + quoteParamValue(value)) + } +} + +class ConnectionParameters { + constructor(config) { + // if a string is passed, it is a raw connection string so we parse it into a config + config = typeof config === 'string' ? parse(config) : config || {} + + // if the config has a connectionString defined, parse IT into the config we use + // this will override other default values with what is stored in connectionString + if (config.connectionString) { + config = Object.assign({}, config, parse(config.connectionString)) + } + + this.user = val('user', config) + this.database = val('database', config) + + if (this.database === undefined) { + this.database = this.user + } + + this.port = parseInt(val('port', config), 10) + this.host = val('host', config) + + // "hiding" the password so it doesn't show up in stack traces + // or if the client is console.logged + Object.defineProperty(this, 'password', { + configurable: true, + enumerable: false, + writable: true, + value: val('password', config), + }) + + this.binary = val('binary', config) + this.options = val('options', config) + + this.ssl = typeof config.ssl === 'undefined' ? readSSLConfigFromEnvironment() : config.ssl + + if (typeof this.ssl === 'string') { + if (this.ssl === 'true') { + this.ssl = true + } + } + // support passing in ssl=no-verify via connection string + if (this.ssl === 'no-verify') { + this.ssl = { rejectUnauthorized: false } + } + if (this.ssl && this.ssl.key) { + Object.defineProperty(this.ssl, 'key', { + enumerable: false, + }) + } + + this.client_encoding = val('client_encoding', config) + this.replication = val('replication', config) + // a domain socket begins with '/' + this.isDomainSocket = !(this.host || '').indexOf('/') + + this.application_name = val('application_name', config, 'PGAPPNAME') + this.fallback_application_name = val('fallback_application_name', config, false) + this.statement_timeout = val('statement_timeout', config, false) + this.lock_timeout = val('lock_timeout', config, false) + this.idle_in_transaction_session_timeout = val('idle_in_transaction_session_timeout', config, false) + this.query_timeout = val('query_timeout', config, false) + + if (config.connectionTimeoutMillis === undefined) { + this.connect_timeout = process.env.PGCONNECT_TIMEOUT || 0 + } else { + this.connect_timeout = Math.floor(config.connectionTimeoutMillis / 1000) + } + + if (config.keepAlive === false) { + this.keepalives = 0 + } else if (config.keepAlive === true) { + this.keepalives = 1 + } + + if (typeof config.keepAliveInitialDelayMillis === 'number') { + this.keepalives_idle = Math.floor(config.keepAliveInitialDelayMillis / 1000) + } + } + + getLibpqConnectionString(cb) { + const params = [] + add(params, this, 'user') + add(params, this, 'password') + add(params, this, 'port') + add(params, this, 'application_name') + add(params, this, 'fallback_application_name') + add(params, this, 'connect_timeout') + add(params, this, 'options') + + const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {} + add(params, ssl, 'sslmode') + add(params, ssl, 'sslca') + add(params, ssl, 'sslkey') + add(params, ssl, 'sslcert') + add(params, ssl, 'sslrootcert') + + if (this.database) { + params.push('dbname=' + quoteParamValue(this.database)) + } + if (this.replication) { + params.push('replication=' + quoteParamValue(this.replication)) + } + if (this.host) { + params.push('host=' + quoteParamValue(this.host)) + } + if (this.isDomainSocket) { + return cb(null, params.join(' ')) + } + if (this.client_encoding) { + params.push('client_encoding=' + quoteParamValue(this.client_encoding)) + } + dns.lookup(this.host, function (err, address) { + if (err) return cb(err, null) + params.push('hostaddr=' + quoteParamValue(address)) + return cb(null, params.join(' ')) + }) + } +} + +module.exports = ConnectionParameters diff --git a/node_modules/pg/lib/connection.js b/node_modules/pg/lib/connection.js new file mode 100644 index 00000000..027f9393 --- /dev/null +++ b/node_modules/pg/lib/connection.js @@ -0,0 +1,221 @@ +'use strict' + +const EventEmitter = require('events').EventEmitter + +const { parse, serialize } = require('pg-protocol') +const { getStream, getSecureStream } = require('./stream') + +const flushBuffer = serialize.flush() +const syncBuffer = serialize.sync() +const endBuffer = serialize.end() + +// TODO(bmc) support binary mode at some point +class Connection extends EventEmitter { + constructor(config) { + super() + config = config || {} + + this.stream = config.stream || getStream(config.ssl) + if (typeof this.stream === 'function') { + this.stream = this.stream(config) + } + + this._keepAlive = config.keepAlive + this._keepAliveInitialDelayMillis = config.keepAliveInitialDelayMillis + this.parsedStatements = {} + this.ssl = config.ssl || false + this._ending = false + this._emitMessage = false + const self = this + this.on('newListener', function (eventName) { + if (eventName === 'message') { + self._emitMessage = true + } + }) + } + + connect(port, host) { + const self = this + + this._connecting = true + this.stream.setNoDelay(true) + this.stream.connect(port, host) + + this.stream.once('connect', function () { + if (self._keepAlive) { + self.stream.setKeepAlive(true, self._keepAliveInitialDelayMillis) + } + self.emit('connect') + }) + + const reportStreamError = function (error) { + // errors about disconnections should be ignored during disconnect + if (self._ending && (error.code === 'ECONNRESET' || error.code === 'EPIPE')) { + return + } + self.emit('error', error) + } + this.stream.on('error', reportStreamError) + + this.stream.on('close', function () { + self.emit('end') + }) + + if (!this.ssl) { + return this.attachListeners(this.stream) + } + + this.stream.once('data', function (buffer) { + const responseCode = buffer.toString('utf8') + switch (responseCode) { + case 'S': // Server supports SSL connections, continue with a secure connection + break + case 'N': // Server does not support SSL connections + self.stream.end() + return self.emit('error', new Error('The server does not support SSL connections')) + default: + // Any other response byte, including 'E' (ErrorResponse) indicating a server error + self.stream.end() + return self.emit('error', new Error('There was an error establishing an SSL connection')) + } + const options = { + socket: self.stream, + } + + if (self.ssl !== true) { + Object.assign(options, self.ssl) + + if ('key' in self.ssl) { + options.key = self.ssl.key + } + } + + const net = require('net') + if (net.isIP && net.isIP(host) === 0) { + options.servername = host + } + try { + self.stream = getSecureStream(options) + } catch (err) { + return self.emit('error', err) + } + self.attachListeners(self.stream) + self.stream.on('error', reportStreamError) + + self.emit('sslconnect') + }) + } + + attachListeners(stream) { + parse(stream, (msg) => { + const eventName = msg.name === 'error' ? 'errorMessage' : msg.name + if (this._emitMessage) { + this.emit('message', msg) + } + this.emit(eventName, msg) + }) + } + + requestSsl() { + this.stream.write(serialize.requestSsl()) + } + + startup(config) { + this.stream.write(serialize.startup(config)) + } + + cancel(processID, secretKey) { + this._send(serialize.cancel(processID, secretKey)) + } + + password(password) { + this._send(serialize.password(password)) + } + + sendSASLInitialResponseMessage(mechanism, initialResponse) { + this._send(serialize.sendSASLInitialResponseMessage(mechanism, initialResponse)) + } + + sendSCRAMClientFinalMessage(additionalData) { + this._send(serialize.sendSCRAMClientFinalMessage(additionalData)) + } + + _send(buffer) { + if (!this.stream.writable) { + return false + } + return this.stream.write(buffer) + } + + query(text) { + this._send(serialize.query(text)) + } + + // send parse message + parse(query) { + this._send(serialize.parse(query)) + } + + // send bind message + bind(config) { + this._send(serialize.bind(config)) + } + + // send execute message + execute(config) { + this._send(serialize.execute(config)) + } + + flush() { + if (this.stream.writable) { + this.stream.write(flushBuffer) + } + } + + sync() { + this._ending = true + this._send(syncBuffer) + } + + ref() { + this.stream.ref() + } + + unref() { + this.stream.unref() + } + + end() { + // 0x58 = 'X' + this._ending = true + if (!this._connecting || !this.stream.writable) { + this.stream.end() + return + } + return this.stream.write(endBuffer, () => { + this.stream.end() + }) + } + + close(msg) { + this._send(serialize.close(msg)) + } + + describe(msg) { + this._send(serialize.describe(msg)) + } + + sendCopyFromChunk(chunk) { + this._send(serialize.copyData(chunk)) + } + + endCopyFrom() { + this._send(serialize.copyDone()) + } + + sendCopyFail(msg) { + this._send(serialize.copyFail(msg)) + } +} + +module.exports = Connection diff --git a/node_modules/pg/lib/crypto/cert-signatures.js b/node_modules/pg/lib/crypto/cert-signatures.js new file mode 100644 index 00000000..8d8df342 --- /dev/null +++ b/node_modules/pg/lib/crypto/cert-signatures.js @@ -0,0 +1,122 @@ +function x509Error(msg, cert) { + return new Error('SASL channel binding: ' + msg + ' when parsing public certificate ' + cert.toString('base64')) +} + +function readASN1Length(data, index) { + let length = data[index++] + if (length < 0x80) return { length, index } + + const lengthBytes = length & 0x7f + if (lengthBytes > 4) throw x509Error('bad length', data) + + length = 0 + for (let i = 0; i < lengthBytes; i++) { + length = (length << 8) | data[index++] + } + + return { length, index } +} + +function readASN1OID(data, index) { + if (data[index++] !== 0x6) throw x509Error('non-OID data', data) // 6 = OID + + const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index) + index = indexAfterOIDLength + const lastIndex = index + OIDLength + + const byte1 = data[index++] + let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40) + + while (index < lastIndex) { + // loop over numbers in OID + let value = 0 + while (index < lastIndex) { + // loop over bytes in number + const nextByte = data[index++] + value = (value << 7) | (nextByte & 0x7f) + if (nextByte < 0x80) break + } + oid += '.' + value + } + + return { oid, index } +} + +function expectASN1Seq(data, index) { + if (data[index++] !== 0x30) throw x509Error('non-sequence data', data) // 30 = Sequence + return readASN1Length(data, index) +} + +function signatureAlgorithmHashFromCertificate(data, index) { + // read this thread: https://www.postgresql.org/message-id/17760-b6c61e752ec07060%40postgresql.org + if (index === undefined) index = 0 + index = expectASN1Seq(data, index).index + const { length: certInfoLength, index: indexAfterCertInfoLength } = expectASN1Seq(data, index) + index = indexAfterCertInfoLength + certInfoLength // skip over certificate info + index = expectASN1Seq(data, index).index // skip over signature length field + const { oid, index: indexAfterOID } = readASN1OID(data, index) + switch (oid) { + // RSA + case '1.2.840.113549.1.1.4': + return 'MD5' + case '1.2.840.113549.1.1.5': + return 'SHA-1' + case '1.2.840.113549.1.1.11': + return 'SHA-256' + case '1.2.840.113549.1.1.12': + return 'SHA-384' + case '1.2.840.113549.1.1.13': + return 'SHA-512' + case '1.2.840.113549.1.1.14': + return 'SHA-224' + case '1.2.840.113549.1.1.15': + return 'SHA512-224' + case '1.2.840.113549.1.1.16': + return 'SHA512-256' + // ECDSA + case '1.2.840.10045.4.1': + return 'SHA-1' + case '1.2.840.10045.4.3.1': + return 'SHA-224' + case '1.2.840.10045.4.3.2': + return 'SHA-256' + case '1.2.840.10045.4.3.3': + return 'SHA-384' + case '1.2.840.10045.4.3.4': + return 'SHA-512' + // RSASSA-PSS: hash is indicated separately + case '1.2.840.113549.1.1.10': { + index = indexAfterOID + index = expectASN1Seq(data, index).index + if (data[index++] !== 0xa0) throw x509Error('non-tag data', data) // a0 = constructed tag 0 + index = readASN1Length(data, index).index // skip over tag length field + index = expectASN1Seq(data, index).index // skip over sequence length field + const { oid: hashOID } = readASN1OID(data, index) + switch (hashOID) { + // standalone hash OIDs + case '1.2.840.113549.2.5': + return 'MD5' + case '1.3.14.3.2.26': + return 'SHA-1' + case '2.16.840.1.101.3.4.2.1': + return 'SHA-256' + case '2.16.840.1.101.3.4.2.2': + return 'SHA-384' + case '2.16.840.1.101.3.4.2.3': + return 'SHA-512' + } + throw x509Error('unknown hash OID ' + hashOID, data) + } + // Ed25519 -- see https: return//github.com/openssl/openssl/issues/15477 + case '1.3.101.110': + case '1.3.101.112': // ph + return 'SHA-512' + // Ed448 -- still not in pg 17.2 (if supported, digest would be SHAKE256 x 64 bytes) + case '1.3.101.111': + case '1.3.101.113': // ph + throw x509Error('Ed448 certificate channel binding is not currently supported by Postgres') + } + throw x509Error('unknown OID ' + oid, data) +} + +module.exports = { signatureAlgorithmHashFromCertificate } diff --git a/node_modules/pg/lib/crypto/sasl.js b/node_modules/pg/lib/crypto/sasl.js new file mode 100644 index 00000000..47b77610 --- /dev/null +++ b/node_modules/pg/lib/crypto/sasl.js @@ -0,0 +1,212 @@ +'use strict' +const crypto = require('./utils') +const { signatureAlgorithmHashFromCertificate } = require('./cert-signatures') + +function startSession(mechanisms, stream) { + const candidates = ['SCRAM-SHA-256'] + if (stream) candidates.unshift('SCRAM-SHA-256-PLUS') // higher-priority, so placed first + + const mechanism = candidates.find((candidate) => mechanisms.includes(candidate)) + + if (!mechanism) { + throw new Error('SASL: Only mechanism(s) ' + candidates.join(' and ') + ' are supported') + } + + if (mechanism === 'SCRAM-SHA-256-PLUS' && typeof stream.getPeerCertificate !== 'function') { + // this should never happen if we are really talking to a Postgres server + throw new Error('SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate') + } + + const clientNonce = crypto.randomBytes(18).toString('base64') + const gs2Header = mechanism === 'SCRAM-SHA-256-PLUS' ? 'p=tls-server-end-point' : stream ? 'y' : 'n' + + return { + mechanism, + clientNonce, + response: gs2Header + ',,n=*,r=' + clientNonce, + message: 'SASLInitialResponse', + } +} + +async function continueSession(session, password, serverData, stream) { + if (session.message !== 'SASLInitialResponse') { + throw new Error('SASL: Last message was not SASLInitialResponse') + } + if (typeof password !== 'string') { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string') + } + if (password === '') { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string') + } + if (typeof serverData !== 'string') { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string') + } + + const sv = parseServerFirstMessage(serverData) + + if (!sv.nonce.startsWith(session.clientNonce)) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce') + } else if (sv.nonce.length === session.clientNonce.length) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short') + } + + const clientFirstMessageBare = 'n=*,r=' + session.clientNonce + const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration + + // without channel binding: + let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded + + // override if channel binding is in use: + if (session.mechanism === 'SCRAM-SHA-256-PLUS') { + const peerCert = stream.getPeerCertificate().raw + let hashName = signatureAlgorithmHashFromCertificate(peerCert) + if (hashName === 'MD5' || hashName === 'SHA-1') hashName = 'SHA-256' + const certHash = await crypto.hashByName(hashName, peerCert) + const bindingData = Buffer.concat([Buffer.from('p=tls-server-end-point,,'), Buffer.from(certHash)]) + channelBinding = bindingData.toString('base64') + } + + const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce + const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof + + const saltBytes = Buffer.from(sv.salt, 'base64') + const saltedPassword = await crypto.deriveKey(password, saltBytes, sv.iteration) + const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key') + const storedKey = await crypto.sha256(clientKey) + const clientSignature = await crypto.hmacSha256(storedKey, authMessage) + const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64') + const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key') + const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage) + + session.message = 'SASLResponse' + session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64') + session.response = clientFinalMessageWithoutProof + ',p=' + clientProof +} + +function finalizeSession(session, serverData) { + if (session.message !== 'SASLResponse') { + throw new Error('SASL: Last message was not SASLResponse') + } + if (typeof serverData !== 'string') { + throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string') + } + + const { serverSignature } = parseServerFinalMessage(serverData) + + if (serverSignature !== session.serverSignature) { + throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match') + } +} + +/** + * printable = %x21-2B / %x2D-7E + * ;; Printable ASCII except ",". + * ;; Note that any "printable" is also + * ;; a valid "value". + */ +function isPrintableChars(text) { + if (typeof text !== 'string') { + throw new TypeError('SASL: text must be a string') + } + return text + .split('') + .map((_, i) => text.charCodeAt(i)) + .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e)) +} + +/** + * base64-char = ALPHA / DIGIT / "/" / "+" + * + * base64-4 = 4base64-char + * + * base64-3 = 3base64-char "=" + * + * base64-2 = 2base64-char "==" + * + * base64 = *base64-4 [base64-3 / base64-2] + */ +function isBase64(text) { + return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text) +} + +function parseAttributePairs(text) { + if (typeof text !== 'string') { + throw new TypeError('SASL: attribute pairs text must be a string') + } + + return new Map( + text.split(',').map((attrValue) => { + if (!/^.=/.test(attrValue)) { + throw new Error('SASL: Invalid attribute pair entry') + } + const name = attrValue[0] + const value = attrValue.substring(2) + return [name, value] + }) + ) +} + +function parseServerFirstMessage(data) { + const attrPairs = parseAttributePairs(data) + + const nonce = attrPairs.get('r') + if (!nonce) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing') + } else if (!isPrintableChars(nonce)) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters') + } + const salt = attrPairs.get('s') + if (!salt) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing') + } else if (!isBase64(salt)) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64') + } + const iterationText = attrPairs.get('i') + if (!iterationText) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing') + } else if (!/^[1-9][0-9]*$/.test(iterationText)) { + throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count') + } + const iteration = parseInt(iterationText, 10) + + return { + nonce, + salt, + iteration, + } +} + +function parseServerFinalMessage(serverData) { + const attrPairs = parseAttributePairs(serverData) + const serverSignature = attrPairs.get('v') + if (!serverSignature) { + throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing') + } else if (!isBase64(serverSignature)) { + throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64') + } + return { + serverSignature, + } +} + +function xorBuffers(a, b) { + if (!Buffer.isBuffer(a)) { + throw new TypeError('first argument must be a Buffer') + } + if (!Buffer.isBuffer(b)) { + throw new TypeError('second argument must be a Buffer') + } + if (a.length !== b.length) { + throw new Error('Buffer lengths must match') + } + if (a.length === 0) { + throw new Error('Buffers cannot be empty') + } + return Buffer.from(a.map((_, i) => a[i] ^ b[i])) +} + +module.exports = { + startSession, + continueSession, + finalizeSession, +} diff --git a/node_modules/pg/lib/crypto/utils-legacy.js b/node_modules/pg/lib/crypto/utils-legacy.js new file mode 100644 index 00000000..d70fdb63 --- /dev/null +++ b/node_modules/pg/lib/crypto/utils-legacy.js @@ -0,0 +1,43 @@ +'use strict' +// This file contains crypto utility functions for versions of Node.js < 15.0.0, +// which does not support the WebCrypto.subtle API. + +const nodeCrypto = require('crypto') + +function md5(string) { + return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex') +} + +// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html +function postgresMd5PasswordHash(user, password, salt) { + const inner = md5(password + user) + const outer = md5(Buffer.concat([Buffer.from(inner), salt])) + return 'md5' + outer +} + +function sha256(text) { + return nodeCrypto.createHash('sha256').update(text).digest() +} + +function hashByName(hashName, text) { + hashName = hashName.replace(/(\D)-/, '$1') // e.g. SHA-256 -> SHA256 + return nodeCrypto.createHash(hashName).update(text).digest() +} + +function hmacSha256(key, msg) { + return nodeCrypto.createHmac('sha256', key).update(msg).digest() +} + +async function deriveKey(password, salt, iterations) { + return nodeCrypto.pbkdf2Sync(password, salt, iterations, 32, 'sha256') +} + +module.exports = { + postgresMd5PasswordHash, + randomBytes: nodeCrypto.randomBytes, + deriveKey, + sha256, + hashByName, + hmacSha256, + md5, +} diff --git a/node_modules/pg/lib/crypto/utils-webcrypto.js b/node_modules/pg/lib/crypto/utils-webcrypto.js new file mode 100644 index 00000000..65aa4a18 --- /dev/null +++ b/node_modules/pg/lib/crypto/utils-webcrypto.js @@ -0,0 +1,89 @@ +const nodeCrypto = require('crypto') + +module.exports = { + postgresMd5PasswordHash, + randomBytes, + deriveKey, + sha256, + hashByName, + hmacSha256, + md5, +} + +/** + * The Web Crypto API - grabbed from the Node.js library or the global + * @type Crypto + */ +// eslint-disable-next-line no-undef +const webCrypto = nodeCrypto.webcrypto || globalThis.crypto +/** + * The SubtleCrypto API for low level crypto operations. + * @type SubtleCrypto + */ +const subtleCrypto = webCrypto.subtle +const textEncoder = new TextEncoder() + +/** + * + * @param {*} length + * @returns + */ +function randomBytes(length) { + return webCrypto.getRandomValues(Buffer.alloc(length)) +} + +async function md5(string) { + try { + return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex') + } catch (e) { + // `createHash()` failed so we are probably not in Node.js, use the WebCrypto API instead. + // Note that the MD5 algorithm on WebCrypto is not available in Node.js. + // This is why we cannot just use WebCrypto in all environments. + const data = typeof string === 'string' ? textEncoder.encode(string) : string + const hash = await subtleCrypto.digest('MD5', data) + return Array.from(new Uint8Array(hash)) + .map((b) => b.toString(16).padStart(2, '0')) + .join('') + } +} + +// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html +async function postgresMd5PasswordHash(user, password, salt) { + const inner = await md5(password + user) + const outer = await md5(Buffer.concat([Buffer.from(inner), salt])) + return 'md5' + outer +} + +/** + * Create a SHA-256 digest of the given data + * @param {Buffer} data + */ +async function sha256(text) { + return await subtleCrypto.digest('SHA-256', text) +} + +async function hashByName(hashName, text) { + return await subtleCrypto.digest(hashName, text) +} + +/** + * Sign the message with the given key + * @param {ArrayBuffer} keyBuffer + * @param {string} msg + */ +async function hmacSha256(keyBuffer, msg) { + const key = await subtleCrypto.importKey('raw', keyBuffer, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']) + return await subtleCrypto.sign('HMAC', key, textEncoder.encode(msg)) +} + +/** + * Derive a key from the password and salt + * @param {string} password + * @param {Uint8Array} salt + * @param {number} iterations + */ +async function deriveKey(password, salt, iterations) { + const key = await subtleCrypto.importKey('raw', textEncoder.encode(password), 'PBKDF2', false, ['deriveBits']) + const params = { name: 'PBKDF2', hash: 'SHA-256', salt: salt, iterations: iterations } + return await subtleCrypto.deriveBits(params, key, 32 * 8, ['deriveBits']) +} diff --git a/node_modules/pg/lib/crypto/utils.js b/node_modules/pg/lib/crypto/utils.js new file mode 100644 index 00000000..9644b150 --- /dev/null +++ b/node_modules/pg/lib/crypto/utils.js @@ -0,0 +1,9 @@ +'use strict' + +const useLegacyCrypto = parseInt(process.versions && process.versions.node && process.versions.node.split('.')[0]) < 15 +if (useLegacyCrypto) { + // We are on an old version of Node.js that requires legacy crypto utilities. + module.exports = require('./utils-legacy') +} else { + module.exports = require('./utils-webcrypto') +} diff --git a/node_modules/pg/lib/defaults.js b/node_modules/pg/lib/defaults.js new file mode 100644 index 00000000..673696f7 --- /dev/null +++ b/node_modules/pg/lib/defaults.js @@ -0,0 +1,91 @@ +'use strict' + +let user +try { + user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER +} catch { + // ignore, e.g., Deno without --allow-env +} + +module.exports = { + // database host. defaults to localhost + host: 'localhost', + + // database user's name + user, + + // name of database to connect + database: undefined, + + // database user's password + password: null, + + // a Postgres connection string to be used instead of setting individual connection items + // NOTE: Setting this value will cause it to override any other value (such as database or user) defined + // in the defaults object. + connectionString: undefined, + + // database port + port: 5432, + + // number of rows to return at a time from a prepared statement's + // portal. 0 will return all rows at once + rows: 0, + + // binary result mode + binary: false, + + // Connection pool options - see https://github.com/brianc/node-pg-pool + + // number of connections to use in connection pool + // 0 will disable connection pooling + max: 10, + + // max milliseconds a client can go unused before it is removed + // from the pool and destroyed + idleTimeoutMillis: 30000, + + client_encoding: '', + + ssl: false, + + application_name: undefined, + + fallback_application_name: undefined, + + options: undefined, + + parseInputDatesAsUTC: false, + + // max milliseconds any query using this connection will execute for before timing out in error. + // false=unlimited + statement_timeout: false, + + // Abort any statement that waits longer than the specified duration in milliseconds while attempting to acquire a lock. + // false=unlimited + lock_timeout: false, + + // Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds + // false=unlimited + idle_in_transaction_session_timeout: false, + + // max milliseconds to wait for query to complete (client side) + query_timeout: false, + + connect_timeout: 0, + + keepalives: 1, + + keepalives_idle: 0, +} + +const pgTypes = require('pg-types') +// save default parsers +const parseBigInteger = pgTypes.getTypeParser(20, 'text') +const parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text') + +// parse int8 so you can get your count values as actual numbers +module.exports.__defineSetter__('parseInt8', function (val) { + pgTypes.setTypeParser(20, 'text', val ? pgTypes.getTypeParser(23, 'text') : parseBigInteger) + pgTypes.setTypeParser(1016, 'text', val ? pgTypes.getTypeParser(1007, 'text') : parseBigIntegerArray) +}) diff --git a/node_modules/pg/lib/index.js b/node_modules/pg/lib/index.js new file mode 100644 index 00000000..e8b74614 --- /dev/null +++ b/node_modules/pg/lib/index.js @@ -0,0 +1,73 @@ +'use strict' + +const Client = require('./client') +const defaults = require('./defaults') +const Connection = require('./connection') +const Result = require('./result') +const utils = require('./utils') +const Pool = require('pg-pool') +const TypeOverrides = require('./type-overrides') +const { DatabaseError } = require('pg-protocol') +const { escapeIdentifier, escapeLiteral } = require('./utils') + +const poolFactory = (Client) => { + return class BoundPool extends Pool { + constructor(options) { + super(options, Client) + } + } +} + +const PG = function (clientConstructor) { + this.defaults = defaults + this.Client = clientConstructor + this.Query = this.Client.Query + this.Pool = poolFactory(this.Client) + this._pools = [] + this.Connection = Connection + this.types = require('pg-types') + this.DatabaseError = DatabaseError + this.TypeOverrides = TypeOverrides + this.escapeIdentifier = escapeIdentifier + this.escapeLiteral = escapeLiteral + this.Result = Result + this.utils = utils +} + +let clientConstructor = Client + +let forceNative = false +try { + forceNative = !!process.env.NODE_PG_FORCE_NATIVE +} catch { + // ignore, e.g., Deno without --allow-env +} + +if (forceNative) { + clientConstructor = require('./native') +} + +module.exports = new PG(clientConstructor) + +// lazy require native module...the native module may not have installed +Object.defineProperty(module.exports, 'native', { + configurable: true, + enumerable: false, + get() { + let native = null + try { + native = new PG(require('./native')) + } catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') { + throw err + } + } + + // overwrite module.exports.native so that getter is never called again + Object.defineProperty(module.exports, 'native', { + value: native, + }) + + return native + }, +}) diff --git a/node_modules/pg/lib/native/client.js b/node_modules/pg/lib/native/client.js new file mode 100644 index 00000000..4bee7ce3 --- /dev/null +++ b/node_modules/pg/lib/native/client.js @@ -0,0 +1,308 @@ +'use strict' + +// eslint-disable-next-line +var Native +// eslint-disable-next-line no-useless-catch +try { + // Wrap this `require()` in a try-catch to avoid upstream bundlers from complaining that this might not be available since it is an optional import + Native = require('pg-native') +} catch (e) { + throw e +} +const TypeOverrides = require('../type-overrides') +const EventEmitter = require('events').EventEmitter +const util = require('util') +const ConnectionParameters = require('../connection-parameters') + +const NativeQuery = require('./query') + +const Client = (module.exports = function (config) { + EventEmitter.call(this) + config = config || {} + + this._Promise = config.Promise || global.Promise + this._types = new TypeOverrides(config.types) + + this.native = new Native({ + types: this._types, + }) + + this._queryQueue = [] + this._ending = false + this._connecting = false + this._connected = false + this._queryable = true + + // keep these on the object for legacy reasons + // for the time being. TODO: deprecate all this jazz + const cp = (this.connectionParameters = new ConnectionParameters(config)) + if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString + this.user = cp.user + + // "hiding" the password so it doesn't show up in stack traces + // or if the client is console.logged + Object.defineProperty(this, 'password', { + configurable: true, + enumerable: false, + writable: true, + value: cp.password, + }) + this.database = cp.database + this.host = cp.host + this.port = cp.port + + // a hash to hold named queries + this.namedQueries = {} +}) + +Client.Query = NativeQuery + +util.inherits(Client, EventEmitter) + +Client.prototype._errorAllQueries = function (err) { + const enqueueError = (query) => { + process.nextTick(() => { + query.native = this.native + query.handleError(err) + }) + } + + if (this._hasActiveQuery()) { + enqueueError(this._activeQuery) + this._activeQuery = null + } + + this._queryQueue.forEach(enqueueError) + this._queryQueue.length = 0 +} + +// connect to the backend +// pass an optional callback to be called once connected +// or with an error if there was a connection error +Client.prototype._connect = function (cb) { + const self = this + + if (this._connecting) { + process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.'))) + return + } + + this._connecting = true + + this.connectionParameters.getLibpqConnectionString(function (err, conString) { + if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString + if (err) return cb(err) + self.native.connect(conString, function (err) { + if (err) { + self.native.end() + return cb(err) + } + + // set internal states to connected + self._connected = true + + // handle connection errors from the native layer + self.native.on('error', function (err) { + self._queryable = false + self._errorAllQueries(err) + self.emit('error', err) + }) + + self.native.on('notification', function (msg) { + self.emit('notification', { + channel: msg.relname, + payload: msg.extra, + }) + }) + + // signal we are connected now + self.emit('connect') + self._pulseQueryQueue(true) + + cb(null, this) + }) + }) +} + +Client.prototype.connect = function (callback) { + if (callback) { + this._connect(callback) + return + } + + return new this._Promise((resolve, reject) => { + this._connect((error) => { + if (error) { + reject(error) + } else { + resolve(this) + } + }) + }) +} + +// send a query to the server +// this method is highly overloaded to take +// 1) string query, optional array of parameters, optional function callback +// 2) object query with { +// string query +// optional array values, +// optional function callback instead of as a separate parameter +// optional string name to name & cache the query plan +// optional string rowMode = 'array' for an array of results +// } +Client.prototype.query = function (config, values, callback) { + let query + let result + let readTimeout + let readTimeoutTimer + let queryCallback + + if (config === null || config === undefined) { + throw new TypeError('Client was passed a null or undefined query') + } else if (typeof config.submit === 'function') { + readTimeout = config.query_timeout || this.connectionParameters.query_timeout + result = query = config + // accept query(new Query(...), (err, res) => { }) style + if (typeof values === 'function') { + config.callback = values + } + } else { + readTimeout = config.query_timeout || this.connectionParameters.query_timeout + query = new NativeQuery(config, values, callback) + if (!query.callback) { + let resolveOut, rejectOut + result = new this._Promise((resolve, reject) => { + resolveOut = resolve + rejectOut = reject + }).catch((err) => { + Error.captureStackTrace(err) + throw err + }) + query.callback = (err, res) => (err ? rejectOut(err) : resolveOut(res)) + } + } + + if (readTimeout) { + queryCallback = query.callback + + readTimeoutTimer = setTimeout(() => { + const error = new Error('Query read timeout') + + process.nextTick(() => { + query.handleError(error, this.connection) + }) + + queryCallback(error) + + // we already returned an error, + // just do nothing if query completes + query.callback = () => {} + + // Remove from queue + const index = this._queryQueue.indexOf(query) + if (index > -1) { + this._queryQueue.splice(index, 1) + } + + this._pulseQueryQueue() + }, readTimeout) + + query.callback = (err, res) => { + clearTimeout(readTimeoutTimer) + queryCallback(err, res) + } + } + + if (!this._queryable) { + query.native = this.native + process.nextTick(() => { + query.handleError(new Error('Client has encountered a connection error and is not queryable')) + }) + return result + } + + if (this._ending) { + query.native = this.native + process.nextTick(() => { + query.handleError(new Error('Client was closed and is not queryable')) + }) + return result + } + + this._queryQueue.push(query) + this._pulseQueryQueue() + return result +} + +// disconnect from the backend server +Client.prototype.end = function (cb) { + const self = this + + this._ending = true + + if (!this._connected) { + this.once('connect', this.end.bind(this, cb)) + } + let result + if (!cb) { + result = new this._Promise(function (resolve, reject) { + cb = (err) => (err ? reject(err) : resolve()) + }) + } + this.native.end(function () { + self._errorAllQueries(new Error('Connection terminated')) + + process.nextTick(() => { + self.emit('end') + if (cb) cb() + }) + }) + return result +} + +Client.prototype._hasActiveQuery = function () { + return this._activeQuery && this._activeQuery.state !== 'error' && this._activeQuery.state !== 'end' +} + +Client.prototype._pulseQueryQueue = function (initialConnection) { + if (!this._connected) { + return + } + if (this._hasActiveQuery()) { + return + } + const query = this._queryQueue.shift() + if (!query) { + if (!initialConnection) { + this.emit('drain') + } + return + } + this._activeQuery = query + query.submit(this) + const self = this + query.once('_done', function () { + self._pulseQueryQueue() + }) +} + +// attempt to cancel an in-progress query +Client.prototype.cancel = function (query) { + if (this._activeQuery === query) { + this.native.cancel(function () {}) + } else if (this._queryQueue.indexOf(query) !== -1) { + this._queryQueue.splice(this._queryQueue.indexOf(query), 1) + } +} + +Client.prototype.ref = function () {} +Client.prototype.unref = function () {} + +Client.prototype.setTypeParser = function (oid, format, parseFn) { + return this._types.setTypeParser(oid, format, parseFn) +} + +Client.prototype.getTypeParser = function (oid, format) { + return this._types.getTypeParser(oid, format) +} diff --git a/node_modules/pg/lib/native/index.js b/node_modules/pg/lib/native/index.js new file mode 100644 index 00000000..eead422a --- /dev/null +++ b/node_modules/pg/lib/native/index.js @@ -0,0 +1,2 @@ +'use strict' +module.exports = require('./client') diff --git a/node_modules/pg/lib/native/query.js b/node_modules/pg/lib/native/query.js new file mode 100644 index 00000000..e02294f6 --- /dev/null +++ b/node_modules/pg/lib/native/query.js @@ -0,0 +1,165 @@ +'use strict' + +const EventEmitter = require('events').EventEmitter +const util = require('util') +const utils = require('../utils') + +const NativeQuery = (module.exports = function (config, values, callback) { + EventEmitter.call(this) + config = utils.normalizeQueryConfig(config, values, callback) + this.text = config.text + this.values = config.values + this.name = config.name + this.queryMode = config.queryMode + this.callback = config.callback + this.state = 'new' + this._arrayMode = config.rowMode === 'array' + + // if the 'row' event is listened for + // then emit them as they come in + // without setting singleRowMode to true + // this has almost no meaning because libpq + // reads all rows into memory before returning any + this._emitRowEvents = false + this.on( + 'newListener', + function (event) { + if (event === 'row') this._emitRowEvents = true + }.bind(this) + ) +}) + +util.inherits(NativeQuery, EventEmitter) + +const errorFieldMap = { + sqlState: 'code', + statementPosition: 'position', + messagePrimary: 'message', + context: 'where', + schemaName: 'schema', + tableName: 'table', + columnName: 'column', + dataTypeName: 'dataType', + constraintName: 'constraint', + sourceFile: 'file', + sourceLine: 'line', + sourceFunction: 'routine', +} + +NativeQuery.prototype.handleError = function (err) { + // copy pq error fields into the error object + const fields = this.native.pq.resultErrorFields() + if (fields) { + for (const key in fields) { + const normalizedFieldName = errorFieldMap[key] || key + err[normalizedFieldName] = fields[key] + } + } + if (this.callback) { + this.callback(err) + } else { + this.emit('error', err) + } + this.state = 'error' +} + +NativeQuery.prototype.then = function (onSuccess, onFailure) { + return this._getPromise().then(onSuccess, onFailure) +} + +NativeQuery.prototype.catch = function (callback) { + return this._getPromise().catch(callback) +} + +NativeQuery.prototype._getPromise = function () { + if (this._promise) return this._promise + this._promise = new Promise( + function (resolve, reject) { + this._once('end', resolve) + this._once('error', reject) + }.bind(this) + ) + return this._promise +} + +NativeQuery.prototype.submit = function (client) { + this.state = 'running' + const self = this + this.native = client.native + client.native.arrayMode = this._arrayMode + + let after = function (err, rows, results) { + client.native.arrayMode = false + setImmediate(function () { + self.emit('_done') + }) + + // handle possible query error + if (err) { + return self.handleError(err) + } + + // emit row events for each row in the result + if (self._emitRowEvents) { + if (results.length > 1) { + rows.forEach((rowOfRows, i) => { + rowOfRows.forEach((row) => { + self.emit('row', row, results[i]) + }) + }) + } else { + rows.forEach(function (row) { + self.emit('row', row, results) + }) + } + } + + // handle successful result + self.state = 'end' + self.emit('end', results) + if (self.callback) { + self.callback(null, results) + } + } + + if (process.domain) { + after = process.domain.bind(after) + } + + // named query + if (this.name) { + if (this.name.length > 63) { + console.error('Warning! Postgres only supports 63 characters for query names.') + console.error('You supplied %s (%s)', this.name, this.name.length) + console.error('This can cause conflicts and silent errors executing queries') + } + const values = (this.values || []).map(utils.prepareValue) + + // check if the client has already executed this named query + // if so...just execute it again - skip the planning phase + if (client.namedQueries[this.name]) { + if (this.text && client.namedQueries[this.name] !== this.text) { + const err = new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`) + return after(err) + } + return client.native.execute(this.name, values, after) + } + // plan the named query the first time, then execute it + return client.native.prepare(this.name, this.text, values.length, function (err) { + if (err) return after(err) + client.namedQueries[self.name] = self.text + return self.native.execute(self.name, values, after) + }) + } else if (this.values) { + if (!Array.isArray(this.values)) { + const err = new Error('Query values must be an array') + return after(err) + } + const vals = this.values.map(utils.prepareValue) + client.native.query(this.text, vals, after) + } else if (this.queryMode === 'extended') { + client.native.query(this.text, [], after) + } else { + client.native.query(this.text, after) + } +} diff --git a/node_modules/pg/lib/query.js b/node_modules/pg/lib/query.js new file mode 100644 index 00000000..64aab5ff --- /dev/null +++ b/node_modules/pg/lib/query.js @@ -0,0 +1,252 @@ +'use strict' + +const { EventEmitter } = require('events') + +const Result = require('./result') +const utils = require('./utils') + +class Query extends EventEmitter { + constructor(config, values, callback) { + super() + + config = utils.normalizeQueryConfig(config, values, callback) + + this.text = config.text + this.values = config.values + this.rows = config.rows + this.types = config.types + this.name = config.name + this.queryMode = config.queryMode + this.binary = config.binary + // use unique portal name each time + this.portal = config.portal || '' + this.callback = config.callback + this._rowMode = config.rowMode + if (process.domain && config.callback) { + this.callback = process.domain.bind(config.callback) + } + this._result = new Result(this._rowMode, this.types) + + // potential for multiple results + this._results = this._result + this._canceledDueToError = false + } + + requiresPreparation() { + if (this.queryMode === 'extended') { + return true + } + + // named queries must always be prepared + if (this.name) { + return true + } + // always prepare if there are max number of rows expected per + // portal execution + if (this.rows) { + return true + } + // don't prepare empty text queries + if (!this.text) { + return false + } + // prepare if there are values + if (!this.values) { + return false + } + return this.values.length > 0 + } + + _checkForMultirow() { + // if we already have a result with a command property + // then we've already executed one query in a multi-statement simple query + // turn our results into an array of results + if (this._result.command) { + if (!Array.isArray(this._results)) { + this._results = [this._result] + } + this._result = new Result(this._rowMode, this._result._types) + this._results.push(this._result) + } + } + + // associates row metadata from the supplied + // message with this query object + // metadata used when parsing row results + handleRowDescription(msg) { + this._checkForMultirow() + this._result.addFields(msg.fields) + this._accumulateRows = this.callback || !this.listeners('row').length + } + + handleDataRow(msg) { + let row + + if (this._canceledDueToError) { + return + } + + try { + row = this._result.parseRow(msg.fields) + } catch (err) { + this._canceledDueToError = err + return + } + + this.emit('row', row, this._result) + if (this._accumulateRows) { + this._result.addRow(row) + } + } + + handleCommandComplete(msg, connection) { + this._checkForMultirow() + this._result.addCommandComplete(msg) + // need to sync after each command complete of a prepared statement + // if we were using a row count which results in multiple calls to _getRows + if (this.rows) { + connection.sync() + } + } + + // if a named prepared statement is created with empty query text + // the backend will send an emptyQuery message but *not* a command complete message + // since we pipeline sync immediately after execute we don't need to do anything here + // unless we have rows specified, in which case we did not pipeline the initial sync call + handleEmptyQuery(connection) { + if (this.rows) { + connection.sync() + } + } + + handleError(err, connection) { + // need to sync after error during a prepared statement + if (this._canceledDueToError) { + err = this._canceledDueToError + this._canceledDueToError = false + } + // if callback supplied do not emit error event as uncaught error + // events will bubble up to node process + if (this.callback) { + return this.callback(err) + } + this.emit('error', err) + } + + handleReadyForQuery(con) { + if (this._canceledDueToError) { + return this.handleError(this._canceledDueToError, con) + } + if (this.callback) { + try { + this.callback(null, this._results) + } catch (err) { + process.nextTick(() => { + throw err + }) + } + } + this.emit('end', this._results) + } + + submit(connection) { + if (typeof this.text !== 'string' && typeof this.name !== 'string') { + return new Error('A query must have either text or a name. Supplying neither is unsupported.') + } + const previous = connection.parsedStatements[this.name] + if (this.text && previous && this.text !== previous) { + return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`) + } + if (this.values && !Array.isArray(this.values)) { + return new Error('Query values must be an array') + } + if (this.requiresPreparation()) { + // If we're using the extended query protocol we fire off several separate commands + // to the backend. On some versions of node & some operating system versions + // the network stack writes each message separately instead of buffering them together + // causing the client & network to send more slowly. Corking & uncorking the stream + // allows node to buffer up the messages internally before sending them all off at once. + // note: we're checking for existence of cork/uncork because some versions of streams + // might not have this (cloudflare?) + connection.stream.cork && connection.stream.cork() + try { + this.prepare(connection) + } finally { + // while unlikely for this.prepare to throw, if it does & we don't uncork this stream + // this client becomes unresponsive, so put in finally block "just in case" + connection.stream.uncork && connection.stream.uncork() + } + } else { + connection.query(this.text) + } + return null + } + + hasBeenParsed(connection) { + return this.name && connection.parsedStatements[this.name] + } + + handlePortalSuspended(connection) { + this._getRows(connection, this.rows) + } + + _getRows(connection, rows) { + connection.execute({ + portal: this.portal, + rows: rows, + }) + // if we're not reading pages of rows send the sync command + // to indicate the pipeline is finished + if (!rows) { + connection.sync() + } else { + // otherwise flush the call out to read more rows + connection.flush() + } + } + + // http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY + prepare(connection) { + // TODO refactor this poor encapsulation + if (!this.hasBeenParsed(connection)) { + connection.parse({ + text: this.text, + name: this.name, + types: this.types, + }) + } + + // because we're mapping user supplied values to + // postgres wire protocol compatible values it could + // throw an exception, so try/catch this section + try { + connection.bind({ + portal: this.portal, + statement: this.name, + values: this.values, + binary: this.binary, + valueMapper: utils.prepareValue, + }) + } catch (err) { + this.handleError(err, connection) + return + } + + connection.describe({ + type: 'P', + name: this.portal || '', + }) + + this._getRows(connection, this.rows) + } + + handleCopyInResponse(connection) { + connection.sendCopyFail('No source stream defined') + } + + handleCopyData(msg, connection) { + // noop + } +} + +module.exports = Query diff --git a/node_modules/pg/lib/result.js b/node_modules/pg/lib/result.js new file mode 100644 index 00000000..0ab7bb80 --- /dev/null +++ b/node_modules/pg/lib/result.js @@ -0,0 +1,109 @@ +'use strict' + +const types = require('pg-types') + +const matchRegexp = /^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/ + +// result object returned from query +// in the 'end' event and also +// passed as second argument to provided callback +class Result { + constructor(rowMode, types) { + this.command = null + this.rowCount = null + this.oid = null + this.rows = [] + this.fields = [] + this._parsers = undefined + this._types = types + this.RowCtor = null + this.rowAsArray = rowMode === 'array' + if (this.rowAsArray) { + this.parseRow = this._parseRowAsArray + } + this._prebuiltEmptyResultObject = null + } + + // adds a command complete message + addCommandComplete(msg) { + let match + if (msg.text) { + // pure javascript + match = matchRegexp.exec(msg.text) + } else { + // native bindings + match = matchRegexp.exec(msg.command) + } + if (match) { + this.command = match[1] + if (match[3]) { + // COMMAND OID ROWS + this.oid = parseInt(match[2], 10) + this.rowCount = parseInt(match[3], 10) + } else if (match[2]) { + // COMMAND ROWS + this.rowCount = parseInt(match[2], 10) + } + } + } + + _parseRowAsArray(rowData) { + const row = new Array(rowData.length) + for (let i = 0, len = rowData.length; i < len; i++) { + const rawValue = rowData[i] + if (rawValue !== null) { + row[i] = this._parsers[i](rawValue) + } else { + row[i] = null + } + } + return row + } + + parseRow(rowData) { + const row = { ...this._prebuiltEmptyResultObject } + for (let i = 0, len = rowData.length; i < len; i++) { + const rawValue = rowData[i] + const field = this.fields[i].name + if (rawValue !== null) { + const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue + row[field] = this._parsers[i](v) + } else { + row[field] = null + } + } + return row + } + + addRow(row) { + this.rows.push(row) + } + + addFields(fieldDescriptions) { + // clears field definitions + // multiple query statements in 1 action can result in multiple sets + // of rowDescriptions...eg: 'select NOW(); select 1::int;' + // you need to reset the fields + this.fields = fieldDescriptions + if (this.fields.length) { + this._parsers = new Array(fieldDescriptions.length) + } + + const row = {} + + for (let i = 0; i < fieldDescriptions.length; i++) { + const desc = fieldDescriptions[i] + row[desc.name] = null + + if (this._types) { + this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text') + } else { + this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text') + } + } + + this._prebuiltEmptyResultObject = { ...row } + } +} + +module.exports = Result diff --git a/node_modules/pg/lib/stream.js b/node_modules/pg/lib/stream.js new file mode 100644 index 00000000..edc30183 --- /dev/null +++ b/node_modules/pg/lib/stream.js @@ -0,0 +1,83 @@ +const { getStream, getSecureStream } = getStreamFuncs() + +module.exports = { + /** + * Get a socket stream compatible with the current runtime environment. + * @returns {Duplex} + */ + getStream, + /** + * Get a TLS secured socket, compatible with the current environment, + * using the socket and other settings given in `options`. + * @returns {Duplex} + */ + getSecureStream, +} + +/** + * The stream functions that work in Node.js + */ +function getNodejsStreamFuncs() { + function getStream(ssl) { + const net = require('net') + return new net.Socket() + } + + function getSecureStream(options) { + const tls = require('tls') + return tls.connect(options) + } + return { + getStream, + getSecureStream, + } +} + +/** + * The stream functions that work in Cloudflare Workers + */ +function getCloudflareStreamFuncs() { + function getStream(ssl) { + const { CloudflareSocket } = require('pg-cloudflare') + return new CloudflareSocket(ssl) + } + + function getSecureStream(options) { + options.socket.startTls(options) + return options.socket + } + return { + getStream, + getSecureStream, + } +} + +/** + * Are we running in a Cloudflare Worker? + * + * @returns true if the code is currently running inside a Cloudflare Worker. + */ +function isCloudflareRuntime() { + // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers + // which means that `navigator.userAgent` will be defined. + // eslint-disable-next-line no-undef + if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') { + // eslint-disable-next-line no-undef + return navigator.userAgent === 'Cloudflare-Workers' + } + // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach + if (typeof Response === 'function') { + const resp = new Response(null, { cf: { thing: true } }) + if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) { + return true + } + } + return false +} + +function getStreamFuncs() { + if (isCloudflareRuntime()) { + return getCloudflareStreamFuncs() + } + return getNodejsStreamFuncs() +} diff --git a/node_modules/pg/lib/type-overrides.js b/node_modules/pg/lib/type-overrides.js new file mode 100644 index 00000000..9d219e52 --- /dev/null +++ b/node_modules/pg/lib/type-overrides.js @@ -0,0 +1,35 @@ +'use strict' + +const types = require('pg-types') + +function TypeOverrides(userTypes) { + this._types = userTypes || types + this.text = {} + this.binary = {} +} + +TypeOverrides.prototype.getOverrides = function (format) { + switch (format) { + case 'text': + return this.text + case 'binary': + return this.binary + default: + return {} + } +} + +TypeOverrides.prototype.setTypeParser = function (oid, format, parseFn) { + if (typeof format === 'function') { + parseFn = format + format = 'text' + } + this.getOverrides(format)[oid] = parseFn +} + +TypeOverrides.prototype.getTypeParser = function (oid, format) { + format = format || 'text' + return this.getOverrides(format)[oid] || this._types.getTypeParser(oid, format) +} + +module.exports = TypeOverrides diff --git a/node_modules/pg/lib/utils.js b/node_modules/pg/lib/utils.js new file mode 100644 index 00000000..e23a55e9 --- /dev/null +++ b/node_modules/pg/lib/utils.js @@ -0,0 +1,217 @@ +'use strict' + +const defaults = require('./defaults') + +const util = require('util') +const { isDate } = util.types || util // Node 8 doesn't have `util.types` + +function escapeElement(elementRepresentation) { + const escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + + return '"' + escaped + '"' +} + +// convert a JS array to a postgres array literal +// uses comma separator so won't work for types like box that use +// a different array separator. +function arrayString(val) { + let result = '{' + for (let i = 0; i < val.length; i++) { + if (i > 0) { + result = result + ',' + } + if (val[i] === null || typeof val[i] === 'undefined') { + result = result + 'NULL' + } else if (Array.isArray(val[i])) { + result = result + arrayString(val[i]) + } else if (ArrayBuffer.isView(val[i])) { + let item = val[i] + if (!(item instanceof Buffer)) { + const buf = Buffer.from(item.buffer, item.byteOffset, item.byteLength) + if (buf.length === item.byteLength) { + item = buf + } else { + item = buf.slice(item.byteOffset, item.byteOffset + item.byteLength) + } + } + result += '\\\\x' + item.toString('hex') + } else { + result += escapeElement(prepareValue(val[i])) + } + } + result = result + '}' + return result +} + +// converts values from javascript types +// to their 'raw' counterparts for use as a postgres parameter +// note: you can override this function to provide your own conversion mechanism +// for complex types, etc... +const prepareValue = function (val, seen) { + // null and undefined are both null for postgres + if (val == null) { + return null + } + if (typeof val === 'object') { + if (val instanceof Buffer) { + return val + } + if (ArrayBuffer.isView(val)) { + const buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength) + if (buf.length === val.byteLength) { + return buf + } + return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params + } + if (isDate(val)) { + if (defaults.parseInputDatesAsUTC) { + return dateToStringUTC(val) + } else { + return dateToString(val) + } + } + if (Array.isArray(val)) { + return arrayString(val) + } + + return prepareObject(val, seen) + } + return val.toString() +} + +function prepareObject(val, seen) { + if (val && typeof val.toPostgres === 'function') { + seen = seen || [] + if (seen.indexOf(val) !== -1) { + throw new Error('circular reference detected while preparing "' + val + '" for query') + } + seen.push(val) + + return prepareValue(val.toPostgres(prepareValue), seen) + } + return JSON.stringify(val) +} + +function dateToString(date) { + let offset = -date.getTimezoneOffset() + + let year = date.getFullYear() + const isBCYear = year < 1 + if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation + + let ret = + String(year).padStart(4, '0') + + '-' + + String(date.getMonth() + 1).padStart(2, '0') + + '-' + + String(date.getDate()).padStart(2, '0') + + 'T' + + String(date.getHours()).padStart(2, '0') + + ':' + + String(date.getMinutes()).padStart(2, '0') + + ':' + + String(date.getSeconds()).padStart(2, '0') + + '.' + + String(date.getMilliseconds()).padStart(3, '0') + + if (offset < 0) { + ret += '-' + offset *= -1 + } else { + ret += '+' + } + + ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0') + if (isBCYear) ret += ' BC' + return ret +} + +function dateToStringUTC(date) { + let year = date.getUTCFullYear() + const isBCYear = year < 1 + if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation + + let ret = + String(year).padStart(4, '0') + + '-' + + String(date.getUTCMonth() + 1).padStart(2, '0') + + '-' + + String(date.getUTCDate()).padStart(2, '0') + + 'T' + + String(date.getUTCHours()).padStart(2, '0') + + ':' + + String(date.getUTCMinutes()).padStart(2, '0') + + ':' + + String(date.getUTCSeconds()).padStart(2, '0') + + '.' + + String(date.getUTCMilliseconds()).padStart(3, '0') + + ret += '+00:00' + if (isBCYear) ret += ' BC' + return ret +} + +function normalizeQueryConfig(config, values, callback) { + // can take in strings or config objects + config = typeof config === 'string' ? { text: config } : config + if (values) { + if (typeof values === 'function') { + config.callback = values + } else { + config.values = values + } + } + if (callback) { + config.callback = callback + } + return config +} + +// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c +const escapeIdentifier = function (str) { + return '"' + str.replace(/"/g, '""') + '"' +} + +const escapeLiteral = function (str) { + let hasBackslash = false + let escaped = "'" + + if (str == null) { + return "''" + } + + if (typeof str !== 'string') { + return "''" + } + + for (let i = 0; i < str.length; i++) { + const c = str[i] + if (c === "'") { + escaped += c + c + } else if (c === '\\') { + escaped += c + c + hasBackslash = true + } else { + escaped += c + } + } + + escaped += "'" + + if (hasBackslash === true) { + escaped = ' E' + escaped + } + + return escaped +} + +module.exports = { + prepareValue: function prepareValueWrapper(value) { + // this ensures that extra arguments do not get passed into prepareValue + // by accident, eg: from calling values.map(utils.prepareValue) + return prepareValue(value) + }, + normalizeQueryConfig, + escapeIdentifier, + escapeLiteral, +} diff --git a/node_modules/pg/package.json b/node_modules/pg/package.json new file mode 100644 index 00000000..a11d3291 --- /dev/null +++ b/node_modules/pg/package.json @@ -0,0 +1,76 @@ +{ + "name": "pg", + "version": "8.18.0", + "description": "PostgreSQL client - pure javascript & libpq with the same API", + "keywords": [ + "database", + "libpq", + "pg", + "postgre", + "postgres", + "postgresql", + "rdbms" + ], + "homepage": "https://github.com/brianc/node-postgres", + "repository": { + "type": "git", + "url": "git://github.com/brianc/node-postgres.git", + "directory": "packages/pg" + }, + "author": "Brian Carlson ", + "main": "./lib", + "exports": { + ".": { + "import": "./esm/index.mjs", + "require": "./lib/index.js", + "default": "./lib/index.js" + }, + "./package.json": { + "default": "./package.json" + }, + "./lib/*": "./lib/*.js", + "./lib/*.js": "./lib/*.js" + }, + "dependencies": { + "pg-connection-string": "^2.11.0", + "pg-pool": "^3.11.0", + "pg-protocol": "^1.11.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "devDependencies": { + "@cloudflare/vitest-pool-workers": "0.8.23", + "@cloudflare/workers-types": "^4.20230404.0", + "async": "2.6.4", + "bluebird": "3.7.2", + "co": "4.6.0", + "pg-copy-streams": "0.3.0", + "typescript": "^4.0.3", + "vitest": "~3.0.9", + "wrangler": "^3.x" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.3.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + }, + "scripts": { + "test": "make test-all" + }, + "files": [ + "lib", + "esm", + "SPONSORS.md" + ], + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "gitHead": "fc4de3c62ad350d0e1b392a0d132aff906d1cec6" +} diff --git a/node_modules/pgpass/README.md b/node_modules/pgpass/README.md new file mode 100644 index 00000000..bbc51939 --- /dev/null +++ b/node_modules/pgpass/README.md @@ -0,0 +1,74 @@ +# pgpass + +[![Build Status](https://github.com/hoegaarden/pgpass/workflows/CI/badge.svg?branch=master)](https://github.com/hoegaarden/pgpass/actions?query=workflow%3ACI+branch%3Amaster) + +## Install + +```sh +npm install pgpass +``` + +## Usage +```js +var pgPass = require('pgpass'); + +var connInfo = { + 'host' : 'pgserver' , + 'user' : 'the_user_name' , +}; + +pgPass(connInfo, function(pass){ + conn_info.password = pass; + // connect to postgresql server +}); +``` + +## Description + +This module tries to read the `~/.pgpass` file (or the equivalent for windows systems). If the environment variable `PGPASSFILE` is set, this file is used instead. If everything goes right, the password from said file is passed to the callback; if the password cannot be read `undefined` is passed to the callback. + +Cases where `undefined` is returned: + +- the environment variable `PGPASSWORD` is set +- the file cannot be read (wrong permissions, no such file, ...) +- for non windows systems: the file is write-/readable by the group or by other users +- there is no matching line for the given connection info + +There should be no need to use this module directly; it is already included in `node-postgres`. + +## Configuration + +The module reads the environment variable `PGPASS_NO_DEESCAPE` to decide if the the read tokens from the password file should be de-escaped or not. Default is to do de-escaping. For further information on this see [this commit](https://github.com/postgres/postgres/commit/8d15e3ec4fcb735875a8a70a09ec0c62153c3329). + + +## Tests + +There are tests in `./test/`; including linting and coverage testing. Running `npm test` runs: + +- `jshint` +- `mocha` tests +- `jscoverage` and `mocha -R html-cov` + +You can see the coverage report in `coverage.html`. + + +## Development, Patches, Bugs, ... + +If you find Bugs or have improvements, please feel free to open a issue on GitHub. If you provide a pull request, I'm more than happy to merge them, just make sure to add tests for your changes. + +## Links + +- https://github.com/hoegaarden/node-pgpass +- http://www.postgresql.org/docs/current/static/libpq-pgpass.html +- https://wiki.postgresql.org/wiki/Pgpass +- https://github.com/postgres/postgres/blob/master/src/interfaces/libpq/fe-connect.c + +## License + +Copyright (c) 2013-2016 Hannes Hörl + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/pgpass/lib/helper.js b/node_modules/pgpass/lib/helper.js new file mode 100644 index 00000000..f9884601 --- /dev/null +++ b/node_modules/pgpass/lib/helper.js @@ -0,0 +1,233 @@ +'use strict'; + +var path = require('path') + , Stream = require('stream').Stream + , split = require('split2') + , util = require('util') + , defaultPort = 5432 + , isWin = (process.platform === 'win32') + , warnStream = process.stderr +; + + +var S_IRWXG = 56 // 00070(8) + , S_IRWXO = 7 // 00007(8) + , S_IFMT = 61440 // 00170000(8) + , S_IFREG = 32768 // 0100000(8) +; +function isRegFile(mode) { + return ((mode & S_IFMT) == S_IFREG); +} + +var fieldNames = [ 'host', 'port', 'database', 'user', 'password' ]; +var nrOfFields = fieldNames.length; +var passKey = fieldNames[ nrOfFields -1 ]; + + +function warn() { + var isWritable = ( + warnStream instanceof Stream && + true === warnStream.writable + ); + + if (isWritable) { + var args = Array.prototype.slice.call(arguments).concat("\n"); + warnStream.write( util.format.apply(util, args) ); + } +} + + +Object.defineProperty(module.exports, 'isWin', { + get : function() { + return isWin; + } , + set : function(val) { + isWin = val; + } +}); + + +module.exports.warnTo = function(stream) { + var old = warnStream; + warnStream = stream; + return old; +}; + +module.exports.getFileName = function(rawEnv){ + var env = rawEnv || process.env; + var file = env.PGPASSFILE || ( + isWin ? + path.join( env.APPDATA || './' , 'postgresql', 'pgpass.conf' ) : + path.join( env.HOME || './', '.pgpass' ) + ); + return file; +}; + +module.exports.usePgPass = function(stats, fname) { + if (Object.prototype.hasOwnProperty.call(process.env, 'PGPASSWORD')) { + return false; + } + + if (isWin) { + return true; + } + + fname = fname || ''; + + if (! isRegFile(stats.mode)) { + warn('WARNING: password file "%s" is not a plain file', fname); + return false; + } + + if (stats.mode & (S_IRWXG | S_IRWXO)) { + /* If password file is insecure, alert the user and ignore it. */ + warn('WARNING: password file "%s" has group or world access; permissions should be u=rw (0600) or less', fname); + return false; + } + + return true; +}; + + +var matcher = module.exports.match = function(connInfo, entry) { + return fieldNames.slice(0, -1).reduce(function(prev, field, idx){ + if (idx == 1) { + // the port + if ( Number( connInfo[field] || defaultPort ) === Number( entry[field] ) ) { + return prev && true; + } + } + return prev && ( + entry[field] === '*' || + entry[field] === connInfo[field] + ); + }, true); +}; + + +module.exports.getPassword = function(connInfo, stream, cb) { + var pass; + var lineStream = stream.pipe(split()); + + function onLine(line) { + var entry = parseLine(line); + if (entry && isValidEntry(entry) && matcher(connInfo, entry)) { + pass = entry[passKey]; + lineStream.end(); // -> calls onEnd(), but pass is set now + } + } + + var onEnd = function() { + stream.destroy(); + cb(pass); + }; + + var onErr = function(err) { + stream.destroy(); + warn('WARNING: error on reading file: %s', err); + cb(undefined); + }; + + stream.on('error', onErr); + lineStream + .on('data', onLine) + .on('end', onEnd) + .on('error', onErr) + ; + +}; + + +var parseLine = module.exports.parseLine = function(line) { + if (line.length < 11 || line.match(/^\s+#/)) { + return null; + } + + var curChar = ''; + var prevChar = ''; + var fieldIdx = 0; + var startIdx = 0; + var endIdx = 0; + var obj = {}; + var isLastField = false; + var addToObj = function(idx, i0, i1) { + var field = line.substring(i0, i1); + + if (! Object.hasOwnProperty.call(process.env, 'PGPASS_NO_DEESCAPE')) { + field = field.replace(/\\([:\\])/g, '$1'); + } + + obj[ fieldNames[idx] ] = field; + }; + + for (var i = 0 ; i < line.length-1 ; i += 1) { + curChar = line.charAt(i+1); + prevChar = line.charAt(i); + + isLastField = (fieldIdx == nrOfFields-1); + + if (isLastField) { + addToObj(fieldIdx, startIdx); + break; + } + + if (i >= 0 && curChar == ':' && prevChar !== '\\') { + addToObj(fieldIdx, startIdx, i+1); + + startIdx = i+2; + fieldIdx += 1; + } + } + + obj = ( Object.keys(obj).length === nrOfFields ) ? obj : null; + + return obj; +}; + + +var isValidEntry = module.exports.isValidEntry = function(entry){ + var rules = { + // host + 0 : function(x){ + return x.length > 0; + } , + // port + 1 : function(x){ + if (x === '*') { + return true; + } + x = Number(x); + return ( + isFinite(x) && + x > 0 && + x < 9007199254740992 && + Math.floor(x) === x + ); + } , + // database + 2 : function(x){ + return x.length > 0; + } , + // username + 3 : function(x){ + return x.length > 0; + } , + // password + 4 : function(x){ + return x.length > 0; + } + }; + + for (var idx = 0 ; idx < fieldNames.length ; idx += 1) { + var rule = rules[idx]; + var value = entry[ fieldNames[idx] ] || ''; + + var res = rule(value); + if (!res) { + return false; + } + } + + return true; +}; + diff --git a/node_modules/pgpass/lib/index.js b/node_modules/pgpass/lib/index.js new file mode 100644 index 00000000..ecfcf308 --- /dev/null +++ b/node_modules/pgpass/lib/index.js @@ -0,0 +1,23 @@ +'use strict'; + +var path = require('path') + , fs = require('fs') + , helper = require('./helper.js') +; + + +module.exports = function(connInfo, cb) { + var file = helper.getFileName(); + + fs.stat(file, function(err, stat){ + if (err || !helper.usePgPass(stat, file)) { + return cb(undefined); + } + + var st = fs.createReadStream(file); + + helper.getPassword(connInfo, st, cb); + }); +}; + +module.exports.warnTo = helper.warnTo; diff --git a/node_modules/pgpass/package.json b/node_modules/pgpass/package.json new file mode 100644 index 00000000..22bfe84e --- /dev/null +++ b/node_modules/pgpass/package.json @@ -0,0 +1,41 @@ +{ + "name": "pgpass", + "version": "1.0.5", + "description": "Module for reading .pgpass", + "main": "lib/index", + "scripts": { + "pretest": "chmod 600 ./test/_pgpass", + "_hint": "jshint --exclude node_modules --verbose lib test", + "_test": "mocha --recursive -R list", + "_covered_test": "nyc --reporter html --reporter text \"$npm_execpath\" run _test", + "test": "\"$npm_execpath\" run _hint && \"$npm_execpath\" run _covered_test" + }, + "author": "Hannes Hörl ", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + }, + "devDependencies": { + "jshint": "^2.12.0", + "mocha": "^8.2.0", + "nyc": "^15.1.0", + "pg": "^8.4.1", + "pg-escape": "^0.2.0", + "pg-native": "3.0.0", + "resumer": "0.0.0", + "tmp": "^0.2.1", + "which": "^2.0.2" + }, + "keywords": [ + "postgres", + "pg", + "pgpass", + "password", + "postgresql" + ], + "bugs": "https://github.com/hoegaarden/pgpass/issues", + "repository": { + "type": "git", + "url": "https://github.com/hoegaarden/pgpass.git" + } +} diff --git a/node_modules/possible-typed-array-names/.eslintrc b/node_modules/possible-typed-array-names/.eslintrc new file mode 100644 index 00000000..3b5d9e90 --- /dev/null +++ b/node_modules/possible-typed-array-names/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/possible-typed-array-names/.github/FUNDING.yml b/node_modules/possible-typed-array-names/.github/FUNDING.yml new file mode 100644 index 00000000..7afce20a --- /dev/null +++ b/node_modules/possible-typed-array-names/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/possible-typed-array-names +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/possible-typed-array-names/CHANGELOG.md b/node_modules/possible-typed-array-names/CHANGELOG.md new file mode 100644 index 00000000..e3bf2a10 --- /dev/null +++ b/node_modules/possible-typed-array-names/CHANGELOG.md @@ -0,0 +1,29 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.0](https://github.com/ljharb/possible-typed-array-names/compare/v1.0.0...v1.1.0) - 2025-02-06 + +### Commits + +- [types] use shared tsconfig [`7d3057f`](https://github.com/ljharb/possible-typed-array-names/commit/7d3057f723d221c032951e618f45ad9044cae80d) +- [actions] split out node 10-20, and 20+ [`3cc8138`](https://github.com/ljharb/possible-typed-array-names/commit/3cc81385d6af59c096475080d76a4c78e6fef664) +- [actions] remove redundant finisher; use reusable workflows [`b46fe5d`](https://github.com/ljharb/possible-typed-array-names/commit/b46fe5d2d47054922f7be81acc0f3c2b7882ddab) +- [New] add `Float16Array` [`77df613`](https://github.com/ljharb/possible-typed-array-names/commit/77df61313d3491acfd23da0d4452673cca476644) +- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/tape`, `auto-changelog`, `tape` [`85bba2e`](https://github.com/ljharb/possible-typed-array-names/commit/85bba2e359add86b19ef058d4a0560d369bf55a2) +- [Tests] tiny refactor [`b2ddd5a`](https://github.com/ljharb/possible-typed-array-names/commit/b2ddd5a9bc86b63631d9f2c17f21f0503492dbb3) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape` [`ed4447f`](https://github.com/ljharb/possible-typed-array-names/commit/ed4447f9ef1ad8657186282140a74ab474240d4e) +- [Tests] add attw; `postlint` [`b5b808c`](https://github.com/ljharb/possible-typed-array-names/commit/b5b808cebf0bc0bdb8636f4981cc8ffabb58bbbb) +- [Tests] replace `aud` with `npm audit` [`ce71c4e`](https://github.com/ljharb/possible-typed-array-names/commit/ce71c4e993e03b41034a4ca96fb8531dd8b8cc14) + +## v1.0.0 - 2024-02-19 + +### Commits + +- Initial implementation, tests, readme, types [`c279f55`](https://github.com/ljharb/possible-typed-array-names/commit/c279f550021896afa50c1169b3111618a96cf898) +- Initial commit [`0f22bf2`](https://github.com/ljharb/possible-typed-array-names/commit/0f22bf24d16fc8ea29483ed7ed378afb3758a4df) +- npm init [`25d6cff`](https://github.com/ljharb/possible-typed-array-names/commit/25d6cffe4091921e4e210704dabed37ae3d7b261) +- Only apps should have lockfiles [`a1bd592`](https://github.com/ljharb/possible-typed-array-names/commit/a1bd592fa037430d401b1d6d26cfea2c2d6789db) diff --git a/node_modules/possible-typed-array-names/LICENSE b/node_modules/possible-typed-array-names/LICENSE new file mode 100644 index 00000000..f82f3896 --- /dev/null +++ b/node_modules/possible-typed-array-names/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/possible-typed-array-names/README.md b/node_modules/possible-typed-array-names/README.md new file mode 100644 index 00000000..0580d2f7 --- /dev/null +++ b/node_modules/possible-typed-array-names/README.md @@ -0,0 +1,50 @@ +# possible-typed-array-names [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A simple list of possible Typed Array names. + +## Example + +```js +const assert = require('assert'); + +const names = require('possible-typed-array-names'); + +assert(Array.isArray(names)); +assert(names.every(name => ( + typeof name === 'string' + && (( + typeof globalThis[name] === 'function' + && globalThis[name].name === name + ) || typeof globalThis[name] === 'undefined') +))); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/possible-typed-array-names +[npm-version-svg]: https://versionbadg.es/ljharb/possible-typed-array-names.svg +[deps-svg]: https://david-dm.org/ljharb/possible-typed-array-names.svg +[deps-url]: https://david-dm.org/ljharb/possible-typed-array-names +[dev-deps-svg]: https://david-dm.org/ljharb/possible-typed-array-names/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/possible-typed-array-names#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/possible-typed-array-names.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/possible-typed-array-names.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/possible-typed-array-names.svg +[downloads-url]: https://npm-stat.com/charts.html?package=possible-typed-array-names +[codecov-image]: https://codecov.io/gh/ljharb/possible-typed-array-names/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/possible-typed-array-names/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/possible-typed-array-names +[actions-url]: https://github.com/ljharb/possible-typed-array-names/actions diff --git a/node_modules/possible-typed-array-names/index.d.ts b/node_modules/possible-typed-array-names/index.d.ts new file mode 100644 index 00000000..92131596 --- /dev/null +++ b/node_modules/possible-typed-array-names/index.d.ts @@ -0,0 +1,16 @@ +declare const names: [ + 'Float16Array', + 'Float32Array', + 'Float64Array', + 'Int8Array', + 'Int16Array', + 'Int32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Uint16Array', + 'Uint32Array', + 'BigInt64Array', + 'BigUint64Array' +]; + +export = names; \ No newline at end of file diff --git a/node_modules/possible-typed-array-names/index.js b/node_modules/possible-typed-array-names/index.js new file mode 100644 index 00000000..5551ab60 --- /dev/null +++ b/node_modules/possible-typed-array-names/index.js @@ -0,0 +1,17 @@ +'use strict'; + +/** @type {import('.')} */ +module.exports = [ + 'Float16Array', + 'Float32Array', + 'Float64Array', + 'Int8Array', + 'Int16Array', + 'Int32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Uint16Array', + 'Uint32Array', + 'BigInt64Array', + 'BigUint64Array' +]; diff --git a/node_modules/possible-typed-array-names/package.json b/node_modules/possible-typed-array-names/package.json new file mode 100644 index 00000000..5285efa4 --- /dev/null +++ b/node_modules/possible-typed-array-names/package.json @@ -0,0 +1,84 @@ +{ + "name": "possible-typed-array-names", + "version": "1.1.0", + "description": "A simple list of possible Typed Array names.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "types": "./index.d.ts", + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "npx npm@'>= 10.2' audit --production", + "prelint": "evalmd README.md && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/possible-typed-array-names.git" + }, + "keywords": [ + "typed", + "array", + "typedarray", + "Float32Array", + "Float64Array", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "BigInt64Array", + "BigUint64Array" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/possible-typed-array-names/issues" + }, + "homepage": "https://github.com/ljharb/possible-typed-array-names#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.3", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "eclint": "^2.8.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/possible-typed-array-names/test/index.js b/node_modules/possible-typed-array-names/test/index.js new file mode 100644 index 00000000..e115695a --- /dev/null +++ b/node_modules/possible-typed-array-names/test/index.js @@ -0,0 +1,19 @@ +'use strict'; + +var test = require('tape'); + +var names = require('../'); + +test('typed array names', function (t) { + for (var i = 0; i < names.length; i++) { + var name = names[i]; + + t.equal(typeof name, 'string', 'is string'); + t.equal(names.indexOf(name), i, 'is unique (from start)'); + t.equal(names.lastIndexOf(name), i, 'is unique (from end)'); + + t.match(typeof global[name], /^(?:function|undefined)$/, 'is a global function, or `undefined`'); + } + + t.end(); +}); diff --git a/node_modules/possible-typed-array-names/tsconfig.json b/node_modules/possible-typed-array-names/tsconfig.json new file mode 100644 index 00000000..4e940905 --- /dev/null +++ b/node_modules/possible-typed-array-names/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ESNext", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/postgres-array/index.d.ts b/node_modules/postgres-array/index.d.ts new file mode 100644 index 00000000..88665bd9 --- /dev/null +++ b/node_modules/postgres-array/index.d.ts @@ -0,0 +1,4 @@ + +export function parse(source: string): string[]; +export function parse(source: string, transform: (value: string) => T): T[]; + diff --git a/node_modules/postgres-array/index.js b/node_modules/postgres-array/index.js new file mode 100644 index 00000000..18bfd163 --- /dev/null +++ b/node_modules/postgres-array/index.js @@ -0,0 +1,97 @@ +'use strict' + +exports.parse = function (source, transform) { + return new ArrayParser(source, transform).parse() +} + +class ArrayParser { + constructor (source, transform) { + this.source = source + this.transform = transform || identity + this.position = 0 + this.entries = [] + this.recorded = [] + this.dimension = 0 + } + + isEof () { + return this.position >= this.source.length + } + + nextCharacter () { + var character = this.source[this.position++] + if (character === '\\') { + return { + value: this.source[this.position++], + escaped: true + } + } + return { + value: character, + escaped: false + } + } + + record (character) { + this.recorded.push(character) + } + + newEntry (includeEmpty) { + var entry + if (this.recorded.length > 0 || includeEmpty) { + entry = this.recorded.join('') + if (entry === 'NULL' && !includeEmpty) { + entry = null + } + if (entry !== null) entry = this.transform(entry) + this.entries.push(entry) + this.recorded = [] + } + } + + consumeDimensions () { + if (this.source[0] === '[') { + while (!this.isEof()) { + var char = this.nextCharacter() + if (char.value === '=') break + } + } + } + + parse (nested) { + var character, parser, quote + this.consumeDimensions() + while (!this.isEof()) { + character = this.nextCharacter() + if (character.value === '{' && !quote) { + this.dimension++ + if (this.dimension > 1) { + parser = new ArrayParser(this.source.substr(this.position - 1), this.transform) + this.entries.push(parser.parse(true)) + this.position += parser.position - 2 + } + } else if (character.value === '}' && !quote) { + this.dimension-- + if (!this.dimension) { + this.newEntry() + if (nested) return this.entries + } + } else if (character.value === '"' && !character.escaped) { + if (quote) this.newEntry(true) + quote = !quote + } else if (character.value === ',' && !quote) { + this.newEntry() + } else { + this.record(character.value) + } + } + if (this.dimension !== 0) { + throw new Error('array dimension not balanced') + } + return this.entries + } +} + +function identity (value) { + return value +} diff --git a/node_modules/postgres-array/license b/node_modules/postgres-array/license new file mode 100644 index 00000000..25c62470 --- /dev/null +++ b/node_modules/postgres-array/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Ben Drucker (bendrucker.me) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/postgres-array/package.json b/node_modules/postgres-array/package.json new file mode 100644 index 00000000..d6aa94e5 --- /dev/null +++ b/node_modules/postgres-array/package.json @@ -0,0 +1,35 @@ +{ + "name": "postgres-array", + "main": "index.js", + "version": "2.0.0", + "description": "Parse postgres array columns", + "license": "MIT", + "repository": "bendrucker/postgres-array", + "author": { + "name": "Ben Drucker", + "email": "bvdrucker@gmail.com", + "url": "bendrucker.me" + }, + "engines": { + "node": ">=4" + }, + "scripts": { + "test": "standard && tape test.js" + }, + "types": "index.d.ts", + "keywords": [ + "postgres", + "array", + "parser" + ], + "dependencies": {}, + "devDependencies": { + "standard": "^12.0.1", + "tape": "^4.0.0" + }, + "files": [ + "index.js", + "index.d.ts", + "readme.md" + ] +} diff --git a/node_modules/postgres-array/readme.md b/node_modules/postgres-array/readme.md new file mode 100644 index 00000000..b74b369d --- /dev/null +++ b/node_modules/postgres-array/readme.md @@ -0,0 +1,43 @@ +# postgres-array [![Build Status](https://travis-ci.org/bendrucker/postgres-array.svg?branch=master)](https://travis-ci.org/bendrucker/postgres-array) + +> Parse postgres array columns + + +## Install + +``` +$ npm install --save postgres-array +``` + + +## Usage + +```js +var postgresArray = require('postgres-array') + +postgresArray.parse('{1,2,3}', (value) => parseInt(value, 10)) +//=> [1, 2, 3] +``` + +## API + +#### `parse(input, [transform])` -> `array` + +##### input + +*Required* +Type: `string` + +A Postgres array string. + +##### transform + +Type: `function` +Default: `identity` + +A function that transforms non-null values inserted into the array. + + +## License + +MIT © [Ben Drucker](http://bendrucker.me) diff --git a/node_modules/postgres-bytea/index.js b/node_modules/postgres-bytea/index.js new file mode 100644 index 00000000..b0dc4c78 --- /dev/null +++ b/node_modules/postgres-bytea/index.js @@ -0,0 +1,33 @@ +'use strict' + +var bufferFrom = Buffer.from || Buffer + +module.exports = function parseBytea (input) { + if (/^\\x/.test(input)) { + // new 'hex' style response (pg >9.0) + return bufferFrom(input.substr(2), 'hex') + } + var output = '' + var i = 0 + while (i < input.length) { + if (input[i] !== '\\') { + output += input[i] + ++i + } else { + if (/[0-7]{3}/.test(input.substr(i + 1, 3))) { + output += String.fromCharCode(parseInt(input.substr(i + 1, 3), 8)) + i += 4 + } else { + var backslashes = 1 + while (i + backslashes < input.length && input[i + backslashes] === '\\') { + backslashes++ + } + for (var k = 0; k < Math.floor(backslashes / 2); ++k) { + output += '\\' + } + i += Math.floor(backslashes / 2) * 2 + } + } + } + return bufferFrom(output, 'binary') +} diff --git a/node_modules/postgres-bytea/license b/node_modules/postgres-bytea/license new file mode 100644 index 00000000..25c62470 --- /dev/null +++ b/node_modules/postgres-bytea/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Ben Drucker (bendrucker.me) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/postgres-bytea/package.json b/node_modules/postgres-bytea/package.json new file mode 100644 index 00000000..344b9a01 --- /dev/null +++ b/node_modules/postgres-bytea/package.json @@ -0,0 +1,34 @@ +{ + "name": "postgres-bytea", + "main": "index.js", + "version": "1.0.1", + "description": "Postgres bytea parser", + "license": "MIT", + "repository": "bendrucker/postgres-bytea", + "author": { + "name": "Ben Drucker", + "email": "bvdrucker@gmail.com", + "url": "bendrucker.me" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "standard && tape test.js" + }, + "keywords": [ + "bytea", + "postgres", + "binary", + "parser" + ], + "dependencies": {}, + "devDependencies": { + "tape": "^4.0.0", + "standard": "^4.0.0" + }, + "files": [ + "index.js", + "readme.md" + ] +} diff --git a/node_modules/postgres-bytea/readme.md b/node_modules/postgres-bytea/readme.md new file mode 100644 index 00000000..4939c3be --- /dev/null +++ b/node_modules/postgres-bytea/readme.md @@ -0,0 +1,34 @@ +# postgres-bytea [![Build Status](https://travis-ci.org/bendrucker/postgres-bytea.svg?branch=master)](https://travis-ci.org/bendrucker/postgres-bytea) + +> Postgres bytea parser + + +## Install + +``` +$ npm install --save postgres-bytea +``` + + +## Usage + +```js +var bytea = require('postgres-bytea'); +bytea('\\000\\100\\200') +//=> buffer +``` + +## API + +#### `bytea(input)` -> `buffer` + +##### input + +*Required* +Type: `string` + +A Postgres bytea binary string. + +## License + +MIT © [Ben Drucker](http://bendrucker.me) diff --git a/node_modules/postgres-date/index.js b/node_modules/postgres-date/index.js new file mode 100644 index 00000000..5dc73fbd --- /dev/null +++ b/node_modules/postgres-date/index.js @@ -0,0 +1,116 @@ +'use strict' + +var DATE_TIME = /(\d{1,})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(\.\d{1,})?.*?( BC)?$/ +var DATE = /^(\d{1,})-(\d{2})-(\d{2})( BC)?$/ +var TIME_ZONE = /([Z+-])(\d{2})?:?(\d{2})?:?(\d{2})?/ +var INFINITY = /^-?infinity$/ + +module.exports = function parseDate (isoDate) { + if (INFINITY.test(isoDate)) { + // Capitalize to Infinity before passing to Number + return Number(isoDate.replace('i', 'I')) + } + var matches = DATE_TIME.exec(isoDate) + + if (!matches) { + // Force YYYY-MM-DD dates to be parsed as local time + return getDate(isoDate) || null + } + + var isBC = !!matches[8] + var year = parseInt(matches[1], 10) + if (isBC) { + year = bcYearToNegativeYear(year) + } + + var month = parseInt(matches[2], 10) - 1 + var day = matches[3] + var hour = parseInt(matches[4], 10) + var minute = parseInt(matches[5], 10) + var second = parseInt(matches[6], 10) + + var ms = matches[7] + ms = ms ? 1000 * parseFloat(ms) : 0 + + var date + var offset = timeZoneOffset(isoDate) + if (offset != null) { + date = new Date(Date.UTC(year, month, day, hour, minute, second, ms)) + + // Account for years from 0 to 99 being interpreted as 1900-1999 + // by Date.UTC / the multi-argument form of the Date constructor + if (is0To99(year)) { + date.setUTCFullYear(year) + } + + if (offset !== 0) { + date.setTime(date.getTime() - offset) + } + } else { + date = new Date(year, month, day, hour, minute, second, ms) + + if (is0To99(year)) { + date.setFullYear(year) + } + } + + return date +} + +function getDate (isoDate) { + var matches = DATE.exec(isoDate) + if (!matches) { + return + } + + var year = parseInt(matches[1], 10) + var isBC = !!matches[4] + if (isBC) { + year = bcYearToNegativeYear(year) + } + + var month = parseInt(matches[2], 10) - 1 + var day = matches[3] + // YYYY-MM-DD will be parsed as local time + var date = new Date(year, month, day) + + if (is0To99(year)) { + date.setFullYear(year) + } + + return date +} + +// match timezones: +// Z (UTC) +// -05 +// +06:30 +function timeZoneOffset (isoDate) { + if (isoDate.endsWith('+00')) { + return 0 + } + + var zone = TIME_ZONE.exec(isoDate.split(' ')[1]) + if (!zone) return + var type = zone[1] + + if (type === 'Z') { + return 0 + } + var sign = type === '-' ? -1 : 1 + var offset = parseInt(zone[2], 10) * 3600 + + parseInt(zone[3] || 0, 10) * 60 + + parseInt(zone[4] || 0, 10) + + return offset * sign * 1000 +} + +function bcYearToNegativeYear (year) { + // Account for numerical difference between representations of BC years + // See: https://github.com/bendrucker/postgres-date/issues/5 + return -(year - 1) +} + +function is0To99 (num) { + return num >= 0 && num < 100 +} diff --git a/node_modules/postgres-date/license b/node_modules/postgres-date/license new file mode 100644 index 00000000..25c62470 --- /dev/null +++ b/node_modules/postgres-date/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Ben Drucker (bendrucker.me) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/postgres-date/package.json b/node_modules/postgres-date/package.json new file mode 100644 index 00000000..6fddec71 --- /dev/null +++ b/node_modules/postgres-date/package.json @@ -0,0 +1,33 @@ +{ + "name": "postgres-date", + "main": "index.js", + "version": "1.0.7", + "description": "Postgres date column parser", + "license": "MIT", + "repository": "bendrucker/postgres-date", + "author": { + "name": "Ben Drucker", + "email": "bvdrucker@gmail.com", + "url": "bendrucker.me" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "standard && tape test.js" + }, + "keywords": [ + "postgres", + "date", + "parser" + ], + "dependencies": {}, + "devDependencies": { + "standard": "^14.0.0", + "tape": "^5.0.0" + }, + "files": [ + "index.js", + "readme.md" + ] +} diff --git a/node_modules/postgres-date/readme.md b/node_modules/postgres-date/readme.md new file mode 100644 index 00000000..095431a0 --- /dev/null +++ b/node_modules/postgres-date/readme.md @@ -0,0 +1,49 @@ +# postgres-date [![Build Status](https://travis-ci.org/bendrucker/postgres-date.svg?branch=master)](https://travis-ci.org/bendrucker/postgres-date) [![Greenkeeper badge](https://badges.greenkeeper.io/bendrucker/postgres-date.svg)](https://greenkeeper.io/) + +> Postgres date output parser + +This package parses [date/time outputs](https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT) from Postgres into Javascript `Date` objects. Its goal is to match Postgres behavior and preserve data accuracy. + +If you find a case where a valid Postgres output results in incorrect parsing (including loss of precision), please [create a pull request](https://github.com/bendrucker/postgres-date/compare) and provide a failing test. + +**Supported Postgres Versions:** `>= 9.6` + +All prior versions of Postgres are likely compatible but not officially supported. + +## Install + +``` +$ npm install --save postgres-date +``` + + +## Usage + +```js +var parse = require('postgres-date') +parse('2011-01-23 22:15:51Z') +// => 2011-01-23T22:15:51.000Z +``` + +## API + +#### `parse(isoDate)` -> `date` + +##### isoDate + +*Required* +Type: `string` + +A date string from Postgres. + +## Releases + +The following semantic versioning increments will be used for changes: + +* **Major**: Removal of support for Node.js versions or Postgres versions (not expected) +* **Minor**: Unused, since Postgres returns dates in standard ISO 8601 format +* **Patch**: Any fix for parsing behavior + +## License + +MIT © [Ben Drucker](http://bendrucker.me) diff --git a/node_modules/postgres-interval/index.d.ts b/node_modules/postgres-interval/index.d.ts new file mode 100644 index 00000000..f82b4c37 --- /dev/null +++ b/node_modules/postgres-interval/index.d.ts @@ -0,0 +1,20 @@ +declare namespace PostgresInterval { + export interface IPostgresInterval { + years?: number; + months?: number; + days?: number; + hours?: number; + minutes?: number; + seconds?: number; + milliseconds?: number; + + toPostgres(): string; + + toISO(): string; + toISOString(): string; + } +} + +declare function PostgresInterval(raw: string): PostgresInterval.IPostgresInterval; + +export = PostgresInterval; diff --git a/node_modules/postgres-interval/index.js b/node_modules/postgres-interval/index.js new file mode 100644 index 00000000..8ecca800 --- /dev/null +++ b/node_modules/postgres-interval/index.js @@ -0,0 +1,125 @@ +'use strict' + +var extend = require('xtend/mutable') + +module.exports = PostgresInterval + +function PostgresInterval (raw) { + if (!(this instanceof PostgresInterval)) { + return new PostgresInterval(raw) + } + extend(this, parse(raw)) +} +var properties = ['seconds', 'minutes', 'hours', 'days', 'months', 'years'] +PostgresInterval.prototype.toPostgres = function () { + var filtered = properties.filter(this.hasOwnProperty, this) + + // In addition to `properties`, we need to account for fractions of seconds. + if (this.milliseconds && filtered.indexOf('seconds') < 0) { + filtered.push('seconds') + } + + if (filtered.length === 0) return '0' + return filtered + .map(function (property) { + var value = this[property] || 0 + + // Account for fractional part of seconds, + // remove trailing zeroes. + if (property === 'seconds' && this.milliseconds) { + value = (value + this.milliseconds / 1000).toFixed(6).replace(/\.?0+$/, '') + } + + return value + ' ' + property + }, this) + .join(' ') +} + +var propertiesISOEquivalent = { + years: 'Y', + months: 'M', + days: 'D', + hours: 'H', + minutes: 'M', + seconds: 'S' +} +var dateProperties = ['years', 'months', 'days'] +var timeProperties = ['hours', 'minutes', 'seconds'] +// according to ISO 8601 +PostgresInterval.prototype.toISOString = PostgresInterval.prototype.toISO = function () { + var datePart = dateProperties + .map(buildProperty, this) + .join('') + + var timePart = timeProperties + .map(buildProperty, this) + .join('') + + return 'P' + datePart + 'T' + timePart + + function buildProperty (property) { + var value = this[property] || 0 + + // Account for fractional part of seconds, + // remove trailing zeroes. + if (property === 'seconds' && this.milliseconds) { + value = (value + this.milliseconds / 1000).toFixed(6).replace(/0+$/, '') + } + + return value + propertiesISOEquivalent[property] + } +} + +var NUMBER = '([+-]?\\d+)' +var YEAR = NUMBER + '\\s+years?' +var MONTH = NUMBER + '\\s+mons?' +var DAY = NUMBER + '\\s+days?' +var TIME = '([+-])?([\\d]*):(\\d\\d):(\\d\\d)\\.?(\\d{1,6})?' +var INTERVAL = new RegExp([YEAR, MONTH, DAY, TIME].map(function (regexString) { + return '(' + regexString + ')?' +}) + .join('\\s*')) + +// Positions of values in regex match +var positions = { + years: 2, + months: 4, + days: 6, + hours: 9, + minutes: 10, + seconds: 11, + milliseconds: 12 +} +// We can use negative time +var negatives = ['hours', 'minutes', 'seconds', 'milliseconds'] + +function parseMilliseconds (fraction) { + // add omitted zeroes + var microseconds = fraction + '000000'.slice(fraction.length) + return parseInt(microseconds, 10) / 1000 +} + +function parse (interval) { + if (!interval) return {} + var matches = INTERVAL.exec(interval) + var isNegative = matches[8] === '-' + return Object.keys(positions) + .reduce(function (parsed, property) { + var position = positions[property] + var value = matches[position] + // no empty string + if (!value) return parsed + // milliseconds are actually microseconds (up to 6 digits) + // with omitted trailing zeroes. + value = property === 'milliseconds' + ? parseMilliseconds(value) + : parseInt(value, 10) + // no zeros + if (!value) return parsed + if (isNegative && ~negatives.indexOf(property)) { + value *= -1 + } + parsed[property] = value + return parsed + }, {}) +} diff --git a/node_modules/postgres-interval/license b/node_modules/postgres-interval/license new file mode 100644 index 00000000..25c62470 --- /dev/null +++ b/node_modules/postgres-interval/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Ben Drucker (bendrucker.me) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/postgres-interval/package.json b/node_modules/postgres-interval/package.json new file mode 100644 index 00000000..95520a0e --- /dev/null +++ b/node_modules/postgres-interval/package.json @@ -0,0 +1,36 @@ +{ + "name": "postgres-interval", + "main": "index.js", + "version": "1.2.0", + "description": "Parse Postgres interval columns", + "license": "MIT", + "repository": "bendrucker/postgres-interval", + "author": { + "name": "Ben Drucker", + "email": "bvdrucker@gmail.com", + "url": "bendrucker.me" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "standard && tape test.js" + }, + "keywords": [ + "postgres", + "interval", + "parser" + ], + "dependencies": { + "xtend": "^4.0.0" + }, + "devDependencies": { + "tape": "^4.0.0", + "standard": "^12.0.1" + }, + "files": [ + "index.js", + "index.d.ts", + "readme.md" + ] +} diff --git a/node_modules/postgres-interval/readme.md b/node_modules/postgres-interval/readme.md new file mode 100644 index 00000000..53cda4ad --- /dev/null +++ b/node_modules/postgres-interval/readme.md @@ -0,0 +1,48 @@ +# postgres-interval [![Build Status](https://travis-ci.org/bendrucker/postgres-interval.svg?branch=master)](https://travis-ci.org/bendrucker/postgres-interval) [![Greenkeeper badge](https://badges.greenkeeper.io/bendrucker/postgres-interval.svg)](https://greenkeeper.io/) + +> Parse Postgres interval columns + + +## Install + +``` +$ npm install --save postgres-interval +``` + + +## Usage + +```js +var parse = require('postgres-interval') +var interval = parse('01:02:03') +//=> {hours: 1, minutes: 2, seconds: 3} +interval.toPostgres() +// 3 seconds 2 minutes 1 hours +interval.toISO() +// P0Y0M0DT1H2M3S +``` + +## API + +#### `parse(pgInterval)` -> `interval` + +##### pgInterval + +*Required* +Type: `string` + +A Postgres interval string. + +#### `interval.toPostgres()` -> `string` + +Returns an interval string. This allows the interval object to be passed into prepared statements. + +#### `interval.toISOString()` -> `string` + +Returns an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations) compliant string. + +Also available as `interval.toISO()` for backwards compatibility. + +## License + +MIT © [Ben Drucker](http://bendrucker.me) diff --git a/node_modules/proxy-from-env/.eslintrc b/node_modules/proxy-from-env/.eslintrc new file mode 100644 index 00000000..a51449b2 --- /dev/null +++ b/node_modules/proxy-from-env/.eslintrc @@ -0,0 +1,29 @@ +{ + "env": { + "node": true + }, + "rules": { + "array-bracket-spacing": [2, "never"], + "block-scoped-var": 2, + "brace-style": [2, "1tbs"], + "camelcase": 1, + "computed-property-spacing": [2, "never"], + "curly": 2, + "eol-last": 2, + "eqeqeq": [2, "smart"], + "max-depth": [1, 3], + "max-len": [1, 80], + "max-statements": [1, 15], + "new-cap": 1, + "no-extend-native": 2, + "no-mixed-spaces-and-tabs": 2, + "no-trailing-spaces": 2, + "no-unused-vars": 1, + "no-use-before-define": [2, "nofunc"], + "object-curly-spacing": [2, "never"], + "quotes": [2, "single", "avoid-escape"], + "semi": [2, "always"], + "keyword-spacing": [2, {"before": true, "after": true}], + "space-unary-ops": 2 + } +} diff --git a/node_modules/proxy-from-env/.travis.yml b/node_modules/proxy-from-env/.travis.yml new file mode 100644 index 00000000..64a05f94 --- /dev/null +++ b/node_modules/proxy-from-env/.travis.yml @@ -0,0 +1,10 @@ +language: node_js +node_js: + - node + - lts/* +script: + - npm run lint + # test-coverage will also run the tests, but does not print helpful output upon test failure. + # So we also run the tests separately. + - npm run test + - npm run test-coverage && cat coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf coverage diff --git a/node_modules/proxy-from-env/LICENSE b/node_modules/proxy-from-env/LICENSE new file mode 100644 index 00000000..8f25097d --- /dev/null +++ b/node_modules/proxy-from-env/LICENSE @@ -0,0 +1,20 @@ +The MIT License + +Copyright (C) 2016-2018 Rob Wu + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/proxy-from-env/README.md b/node_modules/proxy-from-env/README.md new file mode 100644 index 00000000..e82520c1 --- /dev/null +++ b/node_modules/proxy-from-env/README.md @@ -0,0 +1,131 @@ +# proxy-from-env + +[![Build Status](https://travis-ci.org/Rob--W/proxy-from-env.svg?branch=master)](https://travis-ci.org/Rob--W/proxy-from-env) +[![Coverage Status](https://coveralls.io/repos/github/Rob--W/proxy-from-env/badge.svg?branch=master)](https://coveralls.io/github/Rob--W/proxy-from-env?branch=master) + +`proxy-from-env` is a Node.js package that exports a function (`getProxyForUrl`) +that takes an input URL (a string or +[`url.parse`](https://nodejs.org/docs/latest/api/url.html#url_url_parsing)'s +return value) and returns the desired proxy URL (also a string) based on +standard proxy environment variables. If no proxy is set, an empty string is +returned. + +It is your responsibility to actually proxy the request using the given URL. + +Installation: + +```sh +npm install proxy-from-env +``` + +## Example +This example shows how the data for a URL can be fetched via the +[`http` module](https://nodejs.org/api/http.html), in a proxy-aware way. + +```javascript +var http = require('http'); +var parseUrl = require('url').parse; +var getProxyForUrl = require('proxy-from-env').getProxyForUrl; + +var some_url = 'http://example.com/something'; + +// // Example, if there is a proxy server at 10.0.0.1:1234, then setting the +// // http_proxy environment variable causes the request to go through a proxy. +// process.env.http_proxy = 'http://10.0.0.1:1234'; +// +// // But if the host to be proxied is listed in NO_PROXY, then the request is +// // not proxied (but a direct request is made). +// process.env.no_proxy = 'example.com'; + +var proxy_url = getProxyForUrl(some_url); // <-- Our magic. +if (proxy_url) { + // Should be proxied through proxy_url. + var parsed_some_url = parseUrl(some_url); + var parsed_proxy_url = parseUrl(proxy_url); + // A HTTP proxy is quite simple. It is similar to a normal request, except the + // path is an absolute URL, and the proxied URL's host is put in the header + // instead of the server's actual host. + httpOptions = { + protocol: parsed_proxy_url.protocol, + hostname: parsed_proxy_url.hostname, + port: parsed_proxy_url.port, + path: parsed_some_url.href, + headers: { + Host: parsed_some_url.host, // = host name + optional port. + }, + }; +} else { + // Direct request. + httpOptions = some_url; +} +http.get(httpOptions, function(res) { + var responses = []; + res.on('data', function(chunk) { responses.push(chunk); }); + res.on('end', function() { console.log(responses.join('')); }); +}); + +``` + +## Environment variables +The environment variables can be specified in lowercase or uppercase, with the +lowercase name having precedence over the uppercase variant. A variable that is +not set has the same meaning as a variable that is set but has no value. + +### NO\_PROXY + +`NO_PROXY` is a list of host names (optionally with a port). If the input URL +matches any of the entries in `NO_PROXY`, then the input URL should be fetched +by a direct request (i.e. without a proxy). + +Matching follows the following rules: + +- `NO_PROXY=*` disables all proxies. +- Space and commas may be used to separate the entries in the `NO_PROXY` list. +- If `NO_PROXY` does not contain any entries, then proxies are never disabled. +- If a port is added after the host name, then the ports must match. If the URL + does not have an explicit port name, the protocol's default port is used. +- Generally, the proxy is only disabled if the host name is an exact match for + an entry in the `NO_PROXY` list. The only exceptions are entries that start + with a dot or with a wildcard; then the proxy is disabled if the host name + ends with the entry. + +See `test.js` for examples of what should match and what does not. + +### \*\_PROXY + +The environment variable used for the proxy depends on the protocol of the URL. +For example, `https://example.com` uses the "https" protocol, and therefore the +proxy to be used is `HTTPS_PROXY` (_NOT_ `HTTP_PROXY`, which is _only_ used for +http:-URLs). + +The library is not limited to http(s), other schemes such as +`FTP_PROXY` (ftp:), +`WSS_PROXY` (wss:), +`WS_PROXY` (ws:) +are also supported. + +If present, `ALL_PROXY` is used as fallback if there is no other match. + + +## External resources +The exact way of parsing the environment variables is not codified in any +standard. This library is designed to be compatible with formats as expected by +existing software. +The following resources were used to determine the desired behavior: + +- cURL: + https://curl.haxx.se/docs/manpage.html#ENVIRONMENT + https://github.com/curl/curl/blob/4af40b3646d3b09f68e419f7ca866ff395d1f897/lib/url.c#L4446-L4514 + https://github.com/curl/curl/blob/4af40b3646d3b09f68e419f7ca866ff395d1f897/lib/url.c#L4608-L4638 + +- wget: + https://www.gnu.org/software/wget/manual/wget.html#Proxies + http://git.savannah.gnu.org/cgit/wget.git/tree/src/init.c?id=636a5f9a1c508aa39e35a3a8e9e54520a284d93d#n383 + http://git.savannah.gnu.org/cgit/wget.git/tree/src/retr.c?id=93c1517c4071c4288ba5a4b038e7634e4c6b5482#n1278 + +- W3: + https://www.w3.org/Daemon/User/Proxies/ProxyClients.html + +- Python's urllib: + https://github.com/python/cpython/blob/936135bb97fe04223aa30ca6e98eac8f3ed6b349/Lib/urllib/request.py#L755-L782 + https://github.com/python/cpython/blob/936135bb97fe04223aa30ca6e98eac8f3ed6b349/Lib/urllib/request.py#L2444-L2479 diff --git a/node_modules/proxy-from-env/index.js b/node_modules/proxy-from-env/index.js new file mode 100644 index 00000000..df75004a --- /dev/null +++ b/node_modules/proxy-from-env/index.js @@ -0,0 +1,108 @@ +'use strict'; + +var parseUrl = require('url').parse; + +var DEFAULT_PORTS = { + ftp: 21, + gopher: 70, + http: 80, + https: 443, + ws: 80, + wss: 443, +}; + +var stringEndsWith = String.prototype.endsWith || function(s) { + return s.length <= this.length && + this.indexOf(s, this.length - s.length) !== -1; +}; + +/** + * @param {string|object} url - The URL, or the result from url.parse. + * @return {string} The URL of the proxy that should handle the request to the + * given URL. If no proxy is set, this will be an empty string. + */ +function getProxyForUrl(url) { + var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {}; + var proto = parsedUrl.protocol; + var hostname = parsedUrl.host; + var port = parsedUrl.port; + if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') { + return ''; // Don't proxy URLs without a valid scheme or host. + } + + proto = proto.split(':', 1)[0]; + // Stripping ports in this way instead of using parsedUrl.hostname to make + // sure that the brackets around IPv6 addresses are kept. + hostname = hostname.replace(/:\d*$/, ''); + port = parseInt(port) || DEFAULT_PORTS[proto] || 0; + if (!shouldProxy(hostname, port)) { + return ''; // Don't proxy URLs that match NO_PROXY. + } + + var proxy = + getEnv('npm_config_' + proto + '_proxy') || + getEnv(proto + '_proxy') || + getEnv('npm_config_proxy') || + getEnv('all_proxy'); + if (proxy && proxy.indexOf('://') === -1) { + // Missing scheme in proxy, default to the requested URL's scheme. + proxy = proto + '://' + proxy; + } + return proxy; +} + +/** + * Determines whether a given URL should be proxied. + * + * @param {string} hostname - The host name of the URL. + * @param {number} port - The effective port of the URL. + * @returns {boolean} Whether the given URL should be proxied. + * @private + */ +function shouldProxy(hostname, port) { + var NO_PROXY = + (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase(); + if (!NO_PROXY) { + return true; // Always proxy if NO_PROXY is not set. + } + if (NO_PROXY === '*') { + return false; // Never proxy if wildcard is set. + } + + return NO_PROXY.split(/[,\s]/).every(function(proxy) { + if (!proxy) { + return true; // Skip zero-length hosts. + } + var parsedProxy = proxy.match(/^(.+):(\d+)$/); + var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy; + var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0; + if (parsedProxyPort && parsedProxyPort !== port) { + return true; // Skip if ports don't match. + } + + if (!/^[.*]/.test(parsedProxyHostname)) { + // No wildcards, so stop proxying if there is an exact match. + return hostname !== parsedProxyHostname; + } + + if (parsedProxyHostname.charAt(0) === '*') { + // Remove leading wildcard. + parsedProxyHostname = parsedProxyHostname.slice(1); + } + // Stop proxying if the hostname ends with the no_proxy host. + return !stringEndsWith.call(hostname, parsedProxyHostname); + }); +} + +/** + * Get the value for an environment variable. + * + * @param {string} key - The name of the environment variable. + * @return {string} The value of the environment variable. + * @private + */ +function getEnv(key) { + return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || ''; +} + +exports.getProxyForUrl = getProxyForUrl; diff --git a/node_modules/proxy-from-env/package.json b/node_modules/proxy-from-env/package.json new file mode 100644 index 00000000..be2b845b --- /dev/null +++ b/node_modules/proxy-from-env/package.json @@ -0,0 +1,34 @@ +{ + "name": "proxy-from-env", + "version": "1.1.0", + "description": "Offers getProxyForUrl to get the proxy URL for a URL, respecting the *_PROXY (e.g. HTTP_PROXY) and NO_PROXY environment variables.", + "main": "index.js", + "scripts": { + "lint": "eslint *.js", + "test": "mocha ./test.js --reporter spec", + "test-coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter spec" + }, + "repository": { + "type": "git", + "url": "https://github.com/Rob--W/proxy-from-env.git" + }, + "keywords": [ + "proxy", + "http_proxy", + "https_proxy", + "no_proxy", + "environment" + ], + "author": "Rob Wu (https://robwu.nl/)", + "license": "MIT", + "bugs": { + "url": "https://github.com/Rob--W/proxy-from-env/issues" + }, + "homepage": "https://github.com/Rob--W/proxy-from-env#readme", + "devDependencies": { + "coveralls": "^3.0.9", + "eslint": "^6.8.0", + "istanbul": "^0.4.5", + "mocha": "^7.1.0" + } +} diff --git a/node_modules/proxy-from-env/test.js b/node_modules/proxy-from-env/test.js new file mode 100644 index 00000000..abf65423 --- /dev/null +++ b/node_modules/proxy-from-env/test.js @@ -0,0 +1,483 @@ +/* eslint max-statements:0 */ +'use strict'; + +var assert = require('assert'); +var parseUrl = require('url').parse; + +var getProxyForUrl = require('./').getProxyForUrl; + +// Runs the callback with process.env temporarily set to env. +function runWithEnv(env, callback) { + var originalEnv = process.env; + process.env = env; + try { + callback(); + } finally { + process.env = originalEnv; + } +} + +// Defines a test case that checks whether getProxyForUrl(input) === expected. +function testProxyUrl(env, expected, input) { + assert(typeof env === 'object' && env !== null); + // Copy object to make sure that the in param does not get modified between + // the call of this function and the use of it below. + env = JSON.parse(JSON.stringify(env)); + + var title = 'getProxyForUrl(' + JSON.stringify(input) + ')' + + ' === ' + JSON.stringify(expected); + + // Save call stack for later use. + var stack = {}; + Error.captureStackTrace(stack, testProxyUrl); + // Only use the last stack frame because that shows where this function is + // called, and that is sufficient for our purpose. No need to flood the logs + // with an uninteresting stack trace. + stack = stack.stack.split('\n', 2)[1]; + + it(title, function() { + var actual; + runWithEnv(env, function() { + actual = getProxyForUrl(input); + }); + if (expected === actual) { + return; // Good! + } + try { + assert.strictEqual(expected, actual); // Create a formatted error message. + // Should not happen because previously we determined expected !== actual. + throw new Error('assert.strictEqual passed. This is impossible!'); + } catch (e) { + // Use the original stack trace, so we can see a helpful line number. + e.stack = e.message + stack; + throw e; + } + }); +} + +describe('getProxyForUrl', function() { + describe('No proxy variables', function() { + var env = {}; + testProxyUrl(env, '', 'http://example.com'); + testProxyUrl(env, '', 'https://example.com'); + testProxyUrl(env, '', 'ftp://example.com'); + }); + + describe('Invalid URLs', function() { + var env = {}; + env.ALL_PROXY = 'http://unexpected.proxy'; + testProxyUrl(env, '', 'bogus'); + testProxyUrl(env, '', '//example.com'); + testProxyUrl(env, '', '://example.com'); + testProxyUrl(env, '', '://'); + testProxyUrl(env, '', '/path'); + testProxyUrl(env, '', ''); + testProxyUrl(env, '', 'http:'); + testProxyUrl(env, '', 'http:/'); + testProxyUrl(env, '', 'http://'); + testProxyUrl(env, '', 'prototype://'); + testProxyUrl(env, '', 'hasOwnProperty://'); + testProxyUrl(env, '', '__proto__://'); + testProxyUrl(env, '', undefined); + testProxyUrl(env, '', null); + testProxyUrl(env, '', {}); + testProxyUrl(env, '', {host: 'x', protocol: 1}); + testProxyUrl(env, '', {host: 1, protocol: 'x'}); + }); + + describe('http_proxy and HTTP_PROXY', function() { + var env = {}; + env.HTTP_PROXY = 'http://http-proxy'; + + testProxyUrl(env, '', 'https://example'); + testProxyUrl(env, 'http://http-proxy', 'http://example'); + testProxyUrl(env, 'http://http-proxy', parseUrl('http://example')); + + // eslint-disable-next-line camelcase + env.http_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'http://example'); + }); + + describe('http_proxy with non-sensical value', function() { + var env = {}; + // Crazy values should be passed as-is. It is the responsibility of the + // one who launches the application that the value makes sense. + // TODO: Should we be stricter and perform validation? + env.HTTP_PROXY = 'Crazy \n!() { ::// }'; + testProxyUrl(env, 'Crazy \n!() { ::// }', 'http://wow'); + + // The implementation assumes that the HTTP_PROXY environment variable is + // somewhat reasonable, and if the scheme is missing, it is added. + // Garbage in, garbage out some would say... + env.HTTP_PROXY = 'crazy without colon slash slash'; + testProxyUrl(env, 'http://crazy without colon slash slash', 'http://wow'); + }); + + describe('https_proxy and HTTPS_PROXY', function() { + var env = {}; + // Assert that there is no fall back to http_proxy + env.HTTP_PROXY = 'http://unexpected.proxy'; + testProxyUrl(env, '', 'https://example'); + + env.HTTPS_PROXY = 'http://https-proxy'; + testProxyUrl(env, 'http://https-proxy', 'https://example'); + + // eslint-disable-next-line camelcase + env.https_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'https://example'); + }); + + describe('ftp_proxy', function() { + var env = {}; + // Something else than http_proxy / https, as a sanity check. + env.FTP_PROXY = 'http://ftp-proxy'; + + testProxyUrl(env, 'http://ftp-proxy', 'ftp://example'); + testProxyUrl(env, '', 'ftps://example'); + }); + + describe('all_proxy', function() { + var env = {}; + env.ALL_PROXY = 'http://catch-all'; + testProxyUrl(env, 'http://catch-all', 'https://example'); + + // eslint-disable-next-line camelcase + env.all_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'https://example'); + }); + + describe('all_proxy without scheme', function() { + var env = {}; + env.ALL_PROXY = 'noscheme'; + testProxyUrl(env, 'http://noscheme', 'http://example'); + testProxyUrl(env, 'https://noscheme', 'https://example'); + + // The module does not impose restrictions on the scheme. + testProxyUrl(env, 'bogus-scheme://noscheme', 'bogus-scheme://example'); + + // But the URL should still be valid. + testProxyUrl(env, '', 'bogus'); + }); + + describe('no_proxy empty', function() { + var env = {}; + env.HTTPS_PROXY = 'http://proxy'; + + // NO_PROXY set but empty. + env.NO_PROXY = ''; + testProxyUrl(env, 'http://proxy', 'https://example'); + + // No entries in NO_PROXY (comma). + env.NO_PROXY = ','; + testProxyUrl(env, 'http://proxy', 'https://example'); + + // No entries in NO_PROXY (whitespace). + env.NO_PROXY = ' '; + testProxyUrl(env, 'http://proxy', 'https://example'); + + // No entries in NO_PROXY (multiple whitespace / commas). + env.NO_PROXY = ',\t,,,\n, ,\r'; + testProxyUrl(env, 'http://proxy', 'https://example'); + }); + + describe('no_proxy=example (single host)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = 'example'; + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, '', 'http://example:80'); + testProxyUrl(env, '', 'http://example:0'); + testProxyUrl(env, '', 'http://example:1337'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, 'http://proxy', 'http://a.b.example'); + testProxyUrl(env, 'http://proxy', 'http://host/example'); + }); + + describe('no_proxy=sub.example (subdomain)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = 'sub.example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://example:80'); + testProxyUrl(env, 'http://proxy', 'http://example:0'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://no.sub.example'); + testProxyUrl(env, 'http://proxy', 'http://sub-example'); + testProxyUrl(env, 'http://proxy', 'http://example.sub'); + }); + + describe('no_proxy=example:80 (host + port)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = 'example:80'; + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, '', 'http://example:80'); + testProxyUrl(env, '', 'http://example:0'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, 'http://proxy', 'http://a.b.example'); + }); + + describe('no_proxy=.example (host suffix)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '.example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://example:80'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, '', 'http://sub.example:80'); + testProxyUrl(env, '', 'http://sub.example:1337'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, '', 'http://a.b.example'); + }); + + describe('no_proxy=*', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + env.NO_PROXY = '*'; + testProxyUrl(env, '', 'http://example.com'); + }); + + describe('no_proxy=*.example (host suffix with *.)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '*.example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://example:80'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, '', 'http://sub.example:80'); + testProxyUrl(env, '', 'http://sub.example:1337'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, '', 'http://a.b.example'); + }); + + describe('no_proxy=*example (substring suffix)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '*example'; + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, '', 'http://example:80'); + testProxyUrl(env, '', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, '', 'http://sub.example:80'); + testProxyUrl(env, '', 'http://sub.example:1337'); + testProxyUrl(env, '', 'http://prefexample'); + testProxyUrl(env, '', 'http://a.b.example'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, 'http://proxy', 'http://host/example'); + }); + + describe('no_proxy=.*example (arbitrary wildcards are NOT supported)', + function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '.*example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://x.prefexample'); + testProxyUrl(env, 'http://proxy', 'http://a.b.example'); + }); + + describe('no_proxy=[::1],[::2]:80,10.0.0.1,10.0.0.2:80 (IP addresses)', + function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '[::1],[::2]:80,10.0.0.1,10.0.0.2:80'; + testProxyUrl(env, '', 'http://[::1]/'); + testProxyUrl(env, '', 'http://[::1]:80/'); + testProxyUrl(env, '', 'http://[::1]:1337/'); + + testProxyUrl(env, '', 'http://[::2]/'); + testProxyUrl(env, '', 'http://[::2]:80/'); + testProxyUrl(env, 'http://proxy', 'http://[::2]:1337/'); + + testProxyUrl(env, '', 'http://10.0.0.1/'); + testProxyUrl(env, '', 'http://10.0.0.1:80/'); + testProxyUrl(env, '', 'http://10.0.0.1:1337/'); + + testProxyUrl(env, '', 'http://10.0.0.2/'); + testProxyUrl(env, '', 'http://10.0.0.2:80/'); + testProxyUrl(env, 'http://proxy', 'http://10.0.0.2:1337/'); + }); + + describe('no_proxy=127.0.0.1/32 (CIDR is NOT supported)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '127.0.0.1/32'; + testProxyUrl(env, 'http://proxy', 'http://127.0.0.1'); + testProxyUrl(env, 'http://proxy', 'http://127.0.0.1/32'); + }); + + describe('no_proxy=127.0.0.1 does NOT match localhost', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '127.0.0.1'; + testProxyUrl(env, '', 'http://127.0.0.1'); + // We're not performing DNS queries, so this shouldn't match. + testProxyUrl(env, 'http://proxy', 'http://localhost'); + }); + + describe('no_proxy with protocols that have a default port', function() { + var env = {}; + env.WS_PROXY = 'http://ws'; + env.WSS_PROXY = 'http://wss'; + env.HTTP_PROXY = 'http://http'; + env.HTTPS_PROXY = 'http://https'; + env.GOPHER_PROXY = 'http://gopher'; + env.FTP_PROXY = 'http://ftp'; + env.ALL_PROXY = 'http://all'; + + env.NO_PROXY = 'xxx:21,xxx:70,xxx:80,xxx:443'; + + testProxyUrl(env, '', 'http://xxx'); + testProxyUrl(env, '', 'http://xxx:80'); + testProxyUrl(env, 'http://http', 'http://xxx:1337'); + + testProxyUrl(env, '', 'ws://xxx'); + testProxyUrl(env, '', 'ws://xxx:80'); + testProxyUrl(env, 'http://ws', 'ws://xxx:1337'); + + testProxyUrl(env, '', 'https://xxx'); + testProxyUrl(env, '', 'https://xxx:443'); + testProxyUrl(env, 'http://https', 'https://xxx:1337'); + + testProxyUrl(env, '', 'wss://xxx'); + testProxyUrl(env, '', 'wss://xxx:443'); + testProxyUrl(env, 'http://wss', 'wss://xxx:1337'); + + testProxyUrl(env, '', 'gopher://xxx'); + testProxyUrl(env, '', 'gopher://xxx:70'); + testProxyUrl(env, 'http://gopher', 'gopher://xxx:1337'); + + testProxyUrl(env, '', 'ftp://xxx'); + testProxyUrl(env, '', 'ftp://xxx:21'); + testProxyUrl(env, 'http://ftp', 'ftp://xxx:1337'); + }); + + describe('no_proxy should not be case-sensitive', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + env.NO_PROXY = 'XXX,YYY,ZzZ'; + + testProxyUrl(env, '', 'http://xxx'); + testProxyUrl(env, '', 'http://XXX'); + testProxyUrl(env, '', 'http://yyy'); + testProxyUrl(env, '', 'http://YYY'); + testProxyUrl(env, '', 'http://ZzZ'); + testProxyUrl(env, '', 'http://zZz'); + }); + + describe('NPM proxy configuration', function() { + describe('npm_config_http_proxy should work', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://http-proxy'; + + testProxyUrl(env, '', 'https://example'); + testProxyUrl(env, 'http://http-proxy', 'http://example'); + + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'http://example'); + }); + // eslint-disable-next-line max-len + describe('npm_config_http_proxy should take precedence over HTTP_PROXY and npm_config_proxy', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://http-proxy'; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://unexpected-proxy'; + env.HTTP_PROXY = 'http://unexpected-proxy'; + + testProxyUrl(env, 'http://http-proxy', 'http://example'); + }); + describe('npm_config_https_proxy should work', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://unexpected.proxy'; + testProxyUrl(env, '', 'https://example'); + + // eslint-disable-next-line camelcase + env.npm_config_https_proxy = 'http://https-proxy'; + testProxyUrl(env, 'http://https-proxy', 'https://example'); + + // eslint-disable-next-line camelcase + env.npm_config_https_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'https://example'); + }); + // eslint-disable-next-line max-len + describe('npm_config_https_proxy should take precedence over HTTPS_PROXY and npm_config_proxy', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_https_proxy = 'http://https-proxy'; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://unexpected-proxy'; + env.HTTPS_PROXY = 'http://unexpected-proxy'; + + testProxyUrl(env, 'http://https-proxy', 'https://example'); + }); + describe('npm_config_proxy should work', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://http-proxy'; + testProxyUrl(env, 'http://http-proxy', 'http://example'); + testProxyUrl(env, 'http://http-proxy', 'https://example'); + + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'http://example'); + testProxyUrl(env, 'http://priority', 'https://example'); + }); + // eslint-disable-next-line max-len + describe('HTTP_PROXY and HTTPS_PROXY should take precedence over npm_config_proxy', function() { + var env = {}; + env.HTTP_PROXY = 'http://http-proxy'; + env.HTTPS_PROXY = 'http://https-proxy'; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://unexpected-proxy'; + testProxyUrl(env, 'http://http-proxy', 'http://example'); + testProxyUrl(env, 'http://https-proxy', 'https://example'); + }); + describe('npm_config_no_proxy should work', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + // eslint-disable-next-line camelcase + env.npm_config_no_proxy = 'example'; + + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://otherwebsite'); + }); + // eslint-disable-next-line max-len + describe('npm_config_no_proxy should take precedence over NO_PROXY', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + env.NO_PROXY = 'otherwebsite'; + // eslint-disable-next-line camelcase + env.npm_config_no_proxy = 'example'; + + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://otherwebsite'); + }); + }); +}); diff --git a/node_modules/randombytes/.travis.yml b/node_modules/randombytes/.travis.yml new file mode 100644 index 00000000..69fdf713 --- /dev/null +++ b/node_modules/randombytes/.travis.yml @@ -0,0 +1,15 @@ +sudo: false +language: node_js +matrix: + include: + - node_js: '7' + env: TEST_SUITE=test + - node_js: '6' + env: TEST_SUITE=test + - node_js: '5' + env: TEST_SUITE=test + - node_js: '4' + env: TEST_SUITE=test + - node_js: '4' + env: TEST_SUITE=phantom +script: "npm run-script $TEST_SUITE" diff --git a/node_modules/randombytes/.zuul.yml b/node_modules/randombytes/.zuul.yml new file mode 100644 index 00000000..96d9cfbd --- /dev/null +++ b/node_modules/randombytes/.zuul.yml @@ -0,0 +1 @@ +ui: tape diff --git a/node_modules/randombytes/LICENSE b/node_modules/randombytes/LICENSE new file mode 100644 index 00000000..fea9d48a --- /dev/null +++ b/node_modules/randombytes/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 crypto-browserify + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/randombytes/README.md b/node_modules/randombytes/README.md new file mode 100644 index 00000000..3bacba4d --- /dev/null +++ b/node_modules/randombytes/README.md @@ -0,0 +1,14 @@ +randombytes +=== + +[![Version](http://img.shields.io/npm/v/randombytes.svg)](https://www.npmjs.org/package/randombytes) [![Build Status](https://travis-ci.org/crypto-browserify/randombytes.svg?branch=master)](https://travis-ci.org/crypto-browserify/randombytes) + +randombytes from node that works in the browser. In node you just get crypto.randomBytes, but in the browser it uses .crypto/msCrypto.getRandomValues + +```js +var randomBytes = require('randombytes'); +randomBytes(16);//get 16 random bytes +randomBytes(16, function (err, resp) { + // resp is 16 random bytes +}); +``` diff --git a/node_modules/randombytes/browser.js b/node_modules/randombytes/browser.js new file mode 100644 index 00000000..0fb0b715 --- /dev/null +++ b/node_modules/randombytes/browser.js @@ -0,0 +1,50 @@ +'use strict' + +// limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues +var MAX_BYTES = 65536 + +// Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 +var MAX_UINT32 = 4294967295 + +function oldBrowser () { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') +} + +var Buffer = require('safe-buffer').Buffer +var crypto = global.crypto || global.msCrypto + +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes +} else { + module.exports = oldBrowser +} + +function randomBytes (size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') + + var bytes = Buffer.allocUnsafe(size) + + if (size > 0) { // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) + } + } else { + crypto.getRandomValues(bytes) + } + } + + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes) + }) + } + + return bytes +} diff --git a/node_modules/randombytes/index.js b/node_modules/randombytes/index.js new file mode 100644 index 00000000..a2d9e391 --- /dev/null +++ b/node_modules/randombytes/index.js @@ -0,0 +1 @@ +module.exports = require('crypto').randomBytes diff --git a/node_modules/randombytes/package.json b/node_modules/randombytes/package.json new file mode 100644 index 00000000..36236526 --- /dev/null +++ b/node_modules/randombytes/package.json @@ -0,0 +1,36 @@ +{ + "name": "randombytes", + "version": "2.1.0", + "description": "random bytes from browserify stand alone", + "main": "index.js", + "scripts": { + "test": "standard && node test.js | tspec", + "phantom": "zuul --phantom -- test.js", + "local": "zuul --local --no-coverage -- test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:crypto-browserify/randombytes.git" + }, + "keywords": [ + "crypto", + "random" + ], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/crypto-browserify/randombytes/issues" + }, + "homepage": "https://github.com/crypto-browserify/randombytes", + "browser": "browser.js", + "devDependencies": { + "phantomjs": "^1.9.9", + "standard": "^10.0.2", + "tap-spec": "^2.1.2", + "tape": "^4.6.3", + "zuul": "^3.7.2" + }, + "dependencies": { + "safe-buffer": "^5.1.0" + } +} diff --git a/node_modules/randombytes/test.js b/node_modules/randombytes/test.js new file mode 100644 index 00000000..f2669769 --- /dev/null +++ b/node_modules/randombytes/test.js @@ -0,0 +1,81 @@ +var test = require('tape') +var randomBytes = require('./') +var MAX_BYTES = 65536 +var MAX_UINT32 = 4294967295 + +test('sync', function (t) { + t.plan(9) + t.equals(randomBytes(0).length, 0, 'len: ' + 0) + t.equals(randomBytes(3).length, 3, 'len: ' + 3) + t.equals(randomBytes(30).length, 30, 'len: ' + 30) + t.equals(randomBytes(300).length, 300, 'len: ' + 300) + t.equals(randomBytes(17 + MAX_BYTES).length, 17 + MAX_BYTES, 'len: ' + 17 + MAX_BYTES) + t.equals(randomBytes(MAX_BYTES * 100).length, MAX_BYTES * 100, 'len: ' + MAX_BYTES * 100) + t.throws(function () { + randomBytes(MAX_UINT32 + 1) + }) + t.throws(function () { + t.equals(randomBytes(-1)) + }) + t.throws(function () { + t.equals(randomBytes('hello')) + }) +}) + +test('async', function (t) { + t.plan(9) + + randomBytes(0, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 0, 'len: ' + 0) + }) + + randomBytes(3, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 3, 'len: ' + 3) + }) + + randomBytes(30, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 30, 'len: ' + 30) + }) + + randomBytes(300, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 300, 'len: ' + 300) + }) + + randomBytes(17 + MAX_BYTES, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 17 + MAX_BYTES, 'len: ' + 17 + MAX_BYTES) + }) + + randomBytes(MAX_BYTES * 100, function (err, resp) { + if (err) throw err + + t.equals(resp.length, MAX_BYTES * 100, 'len: ' + MAX_BYTES * 100) + }) + + t.throws(function () { + randomBytes(MAX_UINT32 + 1, function () { + t.ok(false, 'should not get here') + }) + }) + + t.throws(function () { + randomBytes(-1, function () { + t.ok(false, 'should not get here') + }) + }) + + t.throws(function () { + randomBytes('hello', function () { + t.ok(false, 'should not get here') + }) + }) +}) diff --git a/node_modules/require-addon/LICENSE b/node_modules/require-addon/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/node_modules/require-addon/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/require-addon/README.md b/node_modules/require-addon/README.md new file mode 100644 index 00000000..96557594 --- /dev/null +++ b/node_modules/require-addon/README.md @@ -0,0 +1,19 @@ +# require-addon + +Import native addons across JavaScript runtimes. + +``` +npm i require-addon +``` + +## Usage + +```js +require.addon = require('require-addon') + +const bindings = require.addon('.', __filename) +``` + +## License + +Apache-2.0 diff --git a/node_modules/require-addon/lib/bare.js b/node_modules/require-addon/lib/bare.js new file mode 100644 index 00000000..37597a52 --- /dev/null +++ b/node_modules/require-addon/lib/bare.js @@ -0,0 +1 @@ +module.exports = require.addon.bind(require) diff --git a/node_modules/require-addon/lib/default.js b/node_modules/require-addon/lib/default.js new file mode 100644 index 00000000..2bed0a57 --- /dev/null +++ b/node_modules/require-addon/lib/default.js @@ -0,0 +1,7 @@ +if (typeof require.addon === 'function') { + module.exports = require.addon.bind(require) +} else { + module.exports = function addon(specifier, parentURL) { + throw new Error(`Cannot find addon '${specifier}' imported from '${parentURL}'`) + } +} diff --git a/node_modules/require-addon/lib/node.js b/node_modules/require-addon/lib/node.js new file mode 100644 index 00000000..21a7682b --- /dev/null +++ b/node_modules/require-addon/lib/node.js @@ -0,0 +1,71 @@ +if (typeof require.addon === 'function') { + module.exports = require.addon.bind(require) +} else { + const url = require('url') + const fs = require('fs') + const resolve = require('bare-addon-resolve') + + let host = process.platform + '-' + process.arch + const conditions = ['addon', 'node', process.platform, process.arch] + const extensions = ['.node'] + + if (isAlpine()) { + host += '-musl' + conditions.push('musl') + } + + module.exports = function addon(specifier, parentURL) { + if (typeof parentURL === 'string') parentURL = url.pathToFileURL(parentURL) + + const candidates = [] + + let cause + + for (const resolution of resolve( + specifier, + parentURL, + { host, conditions, extensions }, + readPackage + )) { + candidates.push(resolution) + + switch (resolution.protocol) { + case 'file:': + try { + return require(url.fileURLToPath(resolution)) + } catch (err) { + cause = err + continue + } + } + } + + let message = `Cannot find addon '${specifier}' imported from '${parentURL.href}'` + + if (candidates.length > 0) { + message += '\nCandidates:' + message += '\n' + candidates.map((url) => '- ' + url.href).join('\n') + } + + const err = new Error(message, cause ? { cause } : {}) + + err.code = 'ADDON_NOT_FOUND' + err.specifier = specifier + err.referrer = parentURL + err.candidates = candidates + + throw err + } + + function readPackage(packageURL) { + try { + return require(url.fileURLToPath(packageURL)) + } catch (err) { + return null + } + } + + function isAlpine() { + return process.platform === 'linux' && fs.existsSync('/etc/alpine-release') + } +} diff --git a/node_modules/require-addon/package.json b/node_modules/require-addon/package.json new file mode 100644 index 00000000..2d72e873 --- /dev/null +++ b/node_modules/require-addon/package.json @@ -0,0 +1,63 @@ +{ + "name": "require-addon", + "version": "1.2.0", + "description": "Import native addons across JavaScript runtimes", + "exports": { + "./package": "./package.json", + ".": { + "bare": "./lib/bare.js", + "node": "./lib/node.js", + "default": "./lib/default.js" + } + }, + "imports": { + "fs": { + "bare": "bare-fs", + "default": "fs" + }, + "path": { + "bare": "bare-path", + "default": "path" + }, + "url": { + "bare": "bare-url", + "default": "url" + } + }, + "files": [ + "lib" + ], + "scripts": { + "test": "npm run lint && npm run test:bare && npm run test:node", + "test:bare": "bare test.js", + "test:node": "node test.js", + "lint": "prettier --check .", + "format": "prettier --write ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/holepunchto/require-addon.git" + }, + "author": "Holepunch", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/holepunchto/require-addon/issues" + }, + "homepage": "https://github.com/holepunchto/require-addon#readme", + "engines": { + "bare": ">=1.10.0" + }, + "dependencies": { + "bare-addon-resolve": "^1.3.0" + }, + "devDependencies": { + "bare-bundle": "^1.8.1", + "bare-bundle-evaluate": "^1.1.0", + "bare-fs": "^4.0.0", + "bare-path": "^3.0.0", + "bare-url": "^2.1.0", + "brittle": "^3.7.0", + "prettier": "^3.6.2", + "prettier-config-holepunch": "^2.0.0" + } +} diff --git a/node_modules/safe-buffer/LICENSE b/node_modules/safe-buffer/LICENSE new file mode 100644 index 00000000..0c068cee --- /dev/null +++ b/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/safe-buffer/README.md b/node_modules/safe-buffer/README.md new file mode 100644 index 00000000..e9a81afd --- /dev/null +++ b/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/safe-buffer/index.d.ts b/node_modules/safe-buffer/index.d.ts new file mode 100644 index 00000000..e9fed809 --- /dev/null +++ b/node_modules/safe-buffer/index.d.ts @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff --git a/node_modules/safe-buffer/index.js b/node_modules/safe-buffer/index.js new file mode 100644 index 00000000..f8d3ec98 --- /dev/null +++ b/node_modules/safe-buffer/index.js @@ -0,0 +1,65 @@ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_modules/safe-buffer/package.json b/node_modules/safe-buffer/package.json new file mode 100644 index 00000000..f2869e25 --- /dev/null +++ b/node_modules/safe-buffer/package.json @@ -0,0 +1,51 @@ +{ + "name": "safe-buffer", + "description": "Safer Node.js Buffer API", + "version": "5.2.1", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "devDependencies": { + "standard": "*", + "tape": "^5.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/set-function-length/.eslintrc b/node_modules/set-function-length/.eslintrc new file mode 100644 index 00000000..7cff5071 --- /dev/null +++ b/node_modules/set-function-length/.eslintrc @@ -0,0 +1,27 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "id-length": "off", + "new-cap": ["error", { + "capIsNewExceptions": [ + "GetIntrinsic" + ], + }], + "no-extra-parens": "off", + }, + + "overrides": [ + { + "files": ["test/**/*.js"], + "rules": { + "id-length": "off", + "max-lines-per-function": "off", + "multiline-comment-style": "off", + "no-empty-function": "off", + }, + }, + ], +} diff --git a/node_modules/set-function-length/.github/FUNDING.yml b/node_modules/set-function-length/.github/FUNDING.yml new file mode 100644 index 00000000..92feb6f9 --- /dev/null +++ b/node_modules/set-function-length/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/set-function-name +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/set-function-length/.nycrc b/node_modules/set-function-length/.nycrc new file mode 100644 index 00000000..1826526e --- /dev/null +++ b/node_modules/set-function-length/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/set-function-length/CHANGELOG.md b/node_modules/set-function-length/CHANGELOG.md new file mode 100644 index 00000000..bac439d8 --- /dev/null +++ b/node_modules/set-function-length/CHANGELOG.md @@ -0,0 +1,70 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.2](https://github.com/ljharb/set-function-length/compare/v1.2.1...v1.2.2) - 2024-03-09 + +### Commits + +- [types] use shared config [`027032f`](https://github.com/ljharb/set-function-length/commit/027032fe9cc439644a07248ea6a8d813fcc767cb) +- [actions] remove redundant finisher; use reusable workflow [`1fd4fb1`](https://github.com/ljharb/set-function-length/commit/1fd4fb1c58bd5170f0dcff7e320077c0aa2ffdeb) +- [types] use a handwritten d.ts file instead of emit [`01b9761`](https://github.com/ljharb/set-function-length/commit/01b9761742c95e1118e8c2d153ce2ae43d9731aa) +- [Deps] update `define-data-property`, `get-intrinsic`, `has-property-descriptors` [`bee8eaf`](https://github.com/ljharb/set-function-length/commit/bee8eaf7749f325357ade85cffeaeef679e513d4) +- [Dev Deps] update `call-bind`, `tape` [`5dae579`](https://github.com/ljharb/set-function-length/commit/5dae579fdc3aab91b14ebb58f9c19ee3f509d434) +- [Tests] use `@arethetypeswrong/cli` [`7e22425`](https://github.com/ljharb/set-function-length/commit/7e22425d15957fd3d6da0b6bca4afc0c8d255d2d) + +## [v1.2.1](https://github.com/ljharb/set-function-length/compare/v1.2.0...v1.2.1) - 2024-02-06 + +### Commits + +- [Dev Deps] update `call-bind`, `tape`, `typescript` [`d9a4601`](https://github.com/ljharb/set-function-length/commit/d9a460199c4c1fa37da9ebe055e2c884128f0738) +- [Deps] update `define-data-property`, `get-intrinsic` [`38d39ae`](https://github.com/ljharb/set-function-length/commit/38d39aed13a757ed36211d5b0437b88485090c6b) +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`b4bfe5a`](https://github.com/ljharb/set-function-length/commit/b4bfe5ae0953b906d55b85f867eca5e7f673ebf4) + +## [v1.2.0](https://github.com/ljharb/set-function-length/compare/v1.1.1...v1.2.0) - 2024-01-14 + +### Commits + +- [New] add types [`f6d9088`](https://github.com/ljharb/set-function-length/commit/f6d9088b9283a3112b21c6776e8bef6d1f30558a) +- [Fix] ensure `env` properties are always booleans [`0c42f84`](https://github.com/ljharb/set-function-length/commit/0c42f84979086389b3229e1b4272697fd352275a) +- [Dev Deps] update `aud`, `call-bind`, `npmignore`, `tape` [`2b75f75`](https://github.com/ljharb/set-function-length/commit/2b75f75468093a4bb8ce8ca989b2edd2e80d95d1) +- [Deps] update `get-intrinsic`, `has-property-descriptors` [`19bf0fc`](https://github.com/ljharb/set-function-length/commit/19bf0fc4ffaa5ad425acbfa150516be9f3b6263a) +- [meta] add `sideEffects` flag [`8bb9b78`](https://github.com/ljharb/set-function-length/commit/8bb9b78c11c621123f725c9470222f43466c01d0) + +## [v1.1.1](https://github.com/ljharb/set-function-length/compare/v1.1.0...v1.1.1) - 2023-10-19 + +### Fixed + +- [Fix] move `define-data-property` to runtime deps [`#2`](https://github.com/ljharb/set-function-length/issues/2) + +### Commits + +- [Dev Deps] update `object-inspect`; add missing `call-bind` [`5aecf79`](https://github.com/ljharb/set-function-length/commit/5aecf79e7d6400957a5d9bd9ac20d4528908ca18) + +## [v1.1.0](https://github.com/ljharb/set-function-length/compare/v1.0.1...v1.1.0) - 2023-10-13 + +### Commits + +- [New] add `env` entry point [`475c87a`](https://github.com/ljharb/set-function-length/commit/475c87aa2f59b700aaed589d980624ec596acdcb) +- [Tests] add coverage with `nyc` [`14f0bf8`](https://github.com/ljharb/set-function-length/commit/14f0bf8c145ae60bf14a026420a06bb7be132c36) +- [eslint] fix linting failure [`fb516f9`](https://github.com/ljharb/set-function-length/commit/fb516f93c664057138c53559ef63c8622a093335) +- [Deps] update `define-data-property` [`d727e7c`](https://github.com/ljharb/set-function-length/commit/d727e7c6c9a40d7bf26797694e500ea68741feea) + +## [v1.0.1](https://github.com/ljharb/set-function-length/compare/v1.0.0...v1.0.1) - 2023-10-12 + +### Commits + +- [Refactor] use `get-intrinsic`, since it‘s in the dep graph anyways [`278a954`](https://github.com/ljharb/set-function-length/commit/278a954a06cd849051c569ff7aee56df6798933e) +- [meta] add `exports` [`72acfe5`](https://github.com/ljharb/set-function-length/commit/72acfe5a0310071fb205a72caba5ecbab24336a0) + +## v1.0.0 - 2023-10-12 + +### Commits + +- Initial implementation, tests, readme [`fce14e1`](https://github.com/ljharb/set-function-length/commit/fce14e17586460e4f294405173be72b6ffdf7e5f) +- Initial commit [`ca7ba85`](https://github.com/ljharb/set-function-length/commit/ca7ba857c7c283f9d26e21f14e71cd388f2cb722) +- npm init [`6a7e493`](https://github.com/ljharb/set-function-length/commit/6a7e493927736cebcaf5c1a84e69b8e6b7b744d8) +- Only apps should have lockfiles [`d2bf6c4`](https://github.com/ljharb/set-function-length/commit/d2bf6c43de8a51b02a0aa53e8d62cb50c4a2b0da) diff --git a/node_modules/set-function-length/LICENSE b/node_modules/set-function-length/LICENSE new file mode 100644 index 00000000..03149290 --- /dev/null +++ b/node_modules/set-function-length/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/set-function-length/README.md b/node_modules/set-function-length/README.md new file mode 100644 index 00000000..15e3ac4b --- /dev/null +++ b/node_modules/set-function-length/README.md @@ -0,0 +1,56 @@ +# set-function-length [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Set a function’s length. + +Arguments: + - `fn`: the function + - `length`: the new length. Must be an integer between 0 and 2**32. + - `loose`: Optional. If true, and the length fails to be set, do not throw. Default false. + +Returns `fn`. + +## Usage + +```javascript +var setFunctionLength = require('set-function-length'); +var assert = require('assert'); + +function zero() {} +function one(_) {} +function two(_, __) {} + +assert.equal(zero.length, 0); +assert.equal(one.length, 1); +assert.equal(two.length, 2); + +assert.equal(setFunctionLength(zero, 10), zero); +assert.equal(setFunctionLength(one, 11), one); +assert.equal(setFunctionLength(two, 12), two); + +assert.equal(zero.length, 10); +assert.equal(one.length, 11); +assert.equal(two.length, 12); +``` + +[package-url]: https://npmjs.org/package/set-function-length +[npm-version-svg]: https://versionbadg.es/ljharb/set-function-length.svg +[deps-svg]: https://david-dm.org/ljharb/set-function-length.svg +[deps-url]: https://david-dm.org/ljharb/set-function-length +[dev-deps-svg]: https://david-dm.org/ljharb/set-function-length/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/set-function-length#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/set-function-length.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/set-function-length.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/set-function-length.svg +[downloads-url]: https://npm-stat.com/charts.html?package=set-function-length +[codecov-image]: https://codecov.io/gh/ljharb/set-function-length/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/set-function-length/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/set-function-length +[actions-url]: https://github.com/ljharb/set-function-length/actions diff --git a/node_modules/set-function-length/env.d.ts b/node_modules/set-function-length/env.d.ts new file mode 100644 index 00000000..970ea535 --- /dev/null +++ b/node_modules/set-function-length/env.d.ts @@ -0,0 +1,9 @@ +declare const env: { + __proto__: null, + boundFnsHaveConfigurableLengths: boolean; + boundFnsHaveWritableLengths: boolean; + functionsHaveConfigurableLengths: boolean; + functionsHaveWritableLengths: boolean; +}; + +export = env; \ No newline at end of file diff --git a/node_modules/set-function-length/env.js b/node_modules/set-function-length/env.js new file mode 100644 index 00000000..d9b0a299 --- /dev/null +++ b/node_modules/set-function-length/env.js @@ -0,0 +1,25 @@ +'use strict'; + +var gOPD = require('gopd'); +var bind = require('function-bind'); + +var unbound = gOPD && gOPD(function () {}, 'length'); +// @ts-expect-error ts(2555) TS is overly strict with .call +var bound = gOPD && gOPD(bind.call(function () {}), 'length'); + +var functionsHaveConfigurableLengths = !!(unbound && unbound.configurable); + +var functionsHaveWritableLengths = !!(unbound && unbound.writable); + +var boundFnsHaveConfigurableLengths = !!(bound && bound.configurable); + +var boundFnsHaveWritableLengths = !!(bound && bound.writable); + +/** @type {import('./env')} */ +module.exports = { + __proto__: null, + boundFnsHaveConfigurableLengths: boundFnsHaveConfigurableLengths, + boundFnsHaveWritableLengths: boundFnsHaveWritableLengths, + functionsHaveConfigurableLengths: functionsHaveConfigurableLengths, + functionsHaveWritableLengths: functionsHaveWritableLengths +}; diff --git a/node_modules/set-function-length/index.d.ts b/node_modules/set-function-length/index.d.ts new file mode 100644 index 00000000..0451ecd3 --- /dev/null +++ b/node_modules/set-function-length/index.d.ts @@ -0,0 +1,7 @@ +declare namespace setFunctionLength { + type Func = (...args: unknown[]) => unknown; +} + +declare function setFunctionLength(fn: T, length: number, loose?: boolean): T; + +export = setFunctionLength; \ No newline at end of file diff --git a/node_modules/set-function-length/index.js b/node_modules/set-function-length/index.js new file mode 100644 index 00000000..14ce74da --- /dev/null +++ b/node_modules/set-function-length/index.js @@ -0,0 +1,42 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); +var define = require('define-data-property'); +var hasDescriptors = require('has-property-descriptors')(); +var gOPD = require('gopd'); + +var $TypeError = require('es-errors/type'); +var $floor = GetIntrinsic('%Math.floor%'); + +/** @type {import('.')} */ +module.exports = function setFunctionLength(fn, length) { + if (typeof fn !== 'function') { + throw new $TypeError('`fn` is not a function'); + } + if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { + throw new $TypeError('`length` must be a positive 32-bit integer'); + } + + var loose = arguments.length > 2 && !!arguments[2]; + + var functionLengthIsConfigurable = true; + var functionLengthIsWritable = true; + if ('length' in fn && gOPD) { + var desc = gOPD(fn, 'length'); + if (desc && !desc.configurable) { + functionLengthIsConfigurable = false; + } + if (desc && !desc.writable) { + functionLengthIsWritable = false; + } + } + + if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { + if (hasDescriptors) { + define(/** @type {Parameters[0]} */ (fn), 'length', length, true, true); + } else { + define(/** @type {Parameters[0]} */ (fn), 'length', length); + } + } + return fn; +}; diff --git a/node_modules/set-function-length/package.json b/node_modules/set-function-length/package.json new file mode 100644 index 00000000..f6b88819 --- /dev/null +++ b/node_modules/set-function-length/package.json @@ -0,0 +1,102 @@ +{ + "name": "set-function-length", + "version": "1.2.2", + "description": "Set a function's length property", + "main": "index.js", + "exports": { + ".": "./index.js", + "./env": "./env.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "directories": { + "test": "test" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "tsc": "tsc -p .", + "posttsc": "attw -P", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "npm run tsc", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/set-function-length.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "set", + "function", + "length", + "function.length" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/set-function-length/issues" + }, + "homepage": "https://github.com/ljharb/set-function-length#readme", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.15.1", + "@ljharb/eslint-config": "^21.1.0", + "@ljharb/tsconfig": "^0.1.1", + "@types/call-bind": "^1.0.5", + "@types/define-properties": "^1.1.5", + "@types/es-value-fixtures": "^1.4.4", + "@types/for-each": "^0.3.3", + "@types/function-bind": "^1.1.10", + "@types/gopd": "^1.0.3", + "@types/has-property-descriptors": "^1.0.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "call-bind": "^1.0.7", + "es-value-fixtures": "^1.4.2", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.5", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "test" + ] + } +} diff --git a/node_modules/set-function-length/tsconfig.json b/node_modules/set-function-length/tsconfig.json new file mode 100644 index 00000000..d9a6668c --- /dev/null +++ b/node_modules/set-function-length/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/sha.js/.eslintrc b/node_modules/sha.js/.eslintrc new file mode 100644 index 00000000..33bd34c4 --- /dev/null +++ b/node_modules/sha.js/.eslintrc @@ -0,0 +1,76 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-style": "off", + "no-magic-numbers": "off", + }, + + "overrides": [ + { + "files": "bin.js", + "extends": "@ljharb/eslint-config/node/0.4", + "rules": { + "func-style": "off", + }, + }, + { + "files": [ + "hash.js", + "sha.js", + "sha1.js", + "sha224.js", + "sha256.js", + "sha384.js", + "sha512.js", + "test/vectors.js", + ], + "rules": { + "no-underscore-dangle": "off", + }, + }, + { + "files": [ + "sha.js", + "sha1.js", + "sha224.js", + ], + "rules": { + "max-params": "off", + }, + }, + { + "files": [ + "sha256.js", + "sha512.js", + ], + "rules": { + "max-statements": "off", + }, + }, + { + "files": [ + "sha512.js", + ], + "rules": { + "new-cap": "warn", + "max-lines": "off", + "max-lines-per-function": "off", + }, + }, + { + "files": "hash.js", + "globals": { + "Uint8Array": false, + }, + }, + { + "files": "test/test.js", + "globals": { + "Uint16Array": false, + }, + }, + ], +} diff --git a/node_modules/sha.js/CHANGELOG.md b/node_modules/sha.js/CHANGELOG.md new file mode 100644 index 00000000..6fe1d94e --- /dev/null +++ b/node_modules/sha.js/CHANGELOG.md @@ -0,0 +1,423 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v2.4.12](https://github.com/browserify/sha.js/compare/v2.4.11...v2.4.12) - 2025-07-01 + +### Commits + +- [eslint] switch to eslint [`7acadfb`](https://github.com/browserify/sha.js/commit/7acadfbd3abb558880212b20669fcb09e1aa1c58) +- [meta] add `auto-changelog` [`b46e711`](https://github.com/browserify/sha.js/commit/b46e7116ebeaa82f34bbf2d7494fff7ef46eab3e) +- [eslint] fix package.json indentation [`df9d521`](https://github.com/browserify/sha.js/commit/df9d521e16ddf55dc877c43c05706d43c057fad4) +- [Tests] migrate from travis to GHA [`c43c64a`](https://github.com/browserify/sha.js/commit/c43c64adc6d3607d470538df72338fc02e63bc24) +- [Fix] support multi-byte wide typed arrays [`f2a258e`](https://github.com/browserify/sha.js/commit/f2a258e9f2d0fcd113bfbaa49706e1ac0d979ba5) +- [meta] reorder package.json [`d8d77c0`](https://github.com/browserify/sha.js/commit/d8d77c0a729c99593e304047f9d4335b498fd9ed) +- [meta] add `npmignore` [`35aec35`](https://github.com/browserify/sha.js/commit/35aec35c667b606b2495be3e4186bbe977b9e087) +- [Tests] avoid console logs [`73e33ae`](https://github.com/browserify/sha.js/commit/73e33ae0ca6bca232627cac7473028e1d218f67e) +- [Tests] fix tests run in batch [`2629130`](https://github.com/browserify/sha.js/commit/262913006e94616c8cd245ef6bd61bc4410b29e3) +- [Tests] drop node requirement to 0.10 [`00c7f23`](https://github.com/browserify/sha.js/commit/00c7f234aa3bdbd427ffeb929bacbb05334eb3e9) +- [Dev Deps] update `buffer`, `hash-test-vectors`, `standard`, `tape`, `typedarray` [`92b5de5`](https://github.com/browserify/sha.js/commit/92b5de5f67472d9f18413d38ad5b9aba29ff4c22) +- [Tests] drop node requirement to v3 [`9b5eca8`](https://github.com/browserify/sha.js/commit/9b5eca80fd9bb21cf05bdf43ce42661f1bbafeaa) +- [meta] set engines to `>= 4` [`807084c`](https://github.com/browserify/sha.js/commit/807084c5c0f943459e89838252cafbd175b549b7) +- Only apps should have lockfiles [`c72789c`](https://github.com/browserify/sha.js/commit/c72789c7a129cf453d44008ba27a88b90ac7989b) +- [Deps] update `inherits`, `safe-buffer` [`5428cfc`](https://github.com/browserify/sha.js/commit/5428cfc6f7177ad1a41c837b9387308848db96de) +- [Dev Deps] update `@ljharb/eslint-config` [`2dbe0aa`](https://github.com/browserify/sha.js/commit/2dbe0aab419e90add5032c70c9663b8fc562adb8) +- update README to reflect LICENSE [`8938256`](https://github.com/browserify/sha.js/commit/8938256dbb2241a7c749e4a399dbaff48cbe8e95) +- [Dev Deps] add missing peer dep [`d528896`](https://github.com/browserify/sha.js/commit/d52889688ce524e63570f35e448635a29e6dd791) +- [Dev Deps] remove unused `buffer` dep [`94ca724`](https://github.com/browserify/sha.js/commit/94ca7247f467ef045f41d534708bf7c700e03828) + +## [v2.4.11](https://github.com/browserify/sha.js/compare/v2.4.10...v2.4.11) - 2018-03-20 + +### Merged + +- Project is bound by MIT AND BSD-3-Clause licenses. [`#55`](https://github.com/browserify/sha.js/pull/55) + +## [v2.4.10](https://github.com/browserify/sha.js/compare/v2.4.9...v2.4.10) - 2018-01-22 + +### Merged + +- Modified greater than uint32 bits data test [`#53`](https://github.com/browserify/sha.js/pull/53) +- convert lowBits to unsigned in hash.js [`#51`](https://github.com/browserify/sha.js/pull/51) + +### Commits + +- Simplify bigData allocation [`107141a`](https://github.com/browserify/sha.js/commit/107141ac2c4ca61538e4ad9622cd0c2e21d38095) +- Modified large file test [`9d037bd`](https://github.com/browserify/sha.js/commit/9d037bd51e84d0d77aa56bb94ed2af2b436d9d66) + +## [v2.4.9](https://github.com/browserify/sha.js/compare/v2.4.8...v2.4.9) - 2017-09-25 + +### Merged + +- Buffer: use alloc/allocUnsafe/from instead new [`#50`](https://github.com/browserify/sha.js/pull/50) +- Change "new shajs.SHA256()" to lowercase to make it actually work. [`#48`](https://github.com/browserify/sha.js/pull/48) +- drop Node <4 [`#46`](https://github.com/browserify/sha.js/pull/46) +- hash: _update never returns anything [`#45`](https://github.com/browserify/sha.js/pull/45) +- README: remove typed array comments, re-format support algorithms [`#40`](https://github.com/browserify/sha.js/pull/40) +- Fix digesting of large data (more than MAX_UINT32 bits) [`#43`](https://github.com/browserify/sha.js/pull/43) +- use buffer module [`#41`](https://github.com/browserify/sha.js/pull/41) + +### Commits + +- tests: compare hex, not byte-by-byte (easier debugging) [`5d5a8d8`](https://github.com/browserify/sha.js/commit/5d5a8d882b614060b774e195821a43051f3345b7) +- hash: remove repeated remainder calculation [`158bc83`](https://github.com/browserify/sha.js/commit/158bc835fbffbbd80f93c97ba0db8e7da7db9c0e) +- tests: use safe-buffer constructors [`1ac913b`](https://github.com/browserify/sha.js/commit/1ac913b8e043d495c899a1c52258e8e4e970ee95) +- hash: increase readability of block-by-block hashing [`e9ff865`](https://github.com/browserify/sha.js/commit/e9ff865980615cb8ee2730c6868e7f6781af3c5b) +- use safe-buffer [`22adba6`](https://github.com/browserify/sha.js/commit/22adba6c745ca703cce356faa988dfe1d84eefa4) +- Add test for large data [`e963695`](https://github.com/browserify/sha.js/commit/e9636950b88c8e2a0b012c19f4957229d409b04f) +- tests: formatting [`678c338`](https://github.com/browserify/sha.js/commit/678c3380273516094e32eb79c50e4bce18da6346) +- Fix digesting of large data [`aee24f1`](https://github.com/browserify/sha.js/commit/aee24f1e0d7fefca68633e6c1be52670fb65a1a5) +- hash: update never returns anything [`d308cb0`](https://github.com/browserify/sha.js/commit/d308cb0004a0f3e0fcb7a27ea52868384c654c95) +- hash: rm unnecessary _s state [`388d45e`](https://github.com/browserify/sha.js/commit/388d45ec3a040e7f6ffeecd077498baf32e270e9) +- npmignore: ignore test/ [`03702a8`](https://github.com/browserify/sha.js/commit/03702a8032fe2bc0b033860bec37c09c1d4af44b) +- package: bump standard [`8551e53`](https://github.com/browserify/sha.js/commit/8551e53f389cbe3728b21cd62e2df917b4dad9d6) + +## [v2.4.8](https://github.com/browserify/sha.js/compare/v2.4.7...v2.4.8) - 2016-11-11 + +### Commits + +- travis: add 6 [`62a582c`](https://github.com/browserify/sha.js/commit/62a582ccebffa04f7b281c680095ffd7a7107e12) + +## [v2.4.7](https://github.com/browserify/sha.js/compare/v2.4.6...v2.4.7) - 2016-11-10 + +### Commits + +- re-add bin.js [`30546ca`](https://github.com/browserify/sha.js/commit/30546ca68e683e7fcb4d6c372e48c6b9fda35b4c) + +## [v2.4.6](https://github.com/browserify/sha.js/compare/v2.4.5...v2.4.6) - 2016-11-10 + +### Merged + +- use hash-base [`#36`](https://github.com/browserify/sha.js/pull/36) +- travis: add node 6 [`#38`](https://github.com/browserify/sha.js/pull/38) +- 2.4.5 [`#35`](https://github.com/browserify/sha.js/pull/35) + +### Commits + +- update implementations [`aba27f9`](https://github.com/browserify/sha.js/commit/aba27f9132de39dca4089a120b6c66e097fcd865) +- update tests [`8522be9`](https://github.com/browserify/sha.js/commit/8522be9bc5abc34adf3cf4b17c132471c0f4f80a) +- remove bin.js [`f7c86a7`](https://github.com/browserify/sha.js/commit/f7c86a70d6a70dd807cce06f811d3cbf9cbebff0) +- update README.md [`8eec0fb`](https://github.com/browserify/sha.js/commit/8eec0fbf2025cdf9c5d2f8877d3fe3e276dbda88) +- move shaX to lib directory [`cf2ab1d`](https://github.com/browserify/sha.js/commit/cf2ab1dc9bdd434dfd3afd043f0956894c931ad2) +- travis: add 6 [`891c962`](https://github.com/browserify/sha.js/commit/891c96228dd4cb9777fbae169e8ee8f2c3dc022c) + +## [v2.4.5](https://github.com/browserify/sha.js/compare/v2.4.4...v2.4.5) - 2016-02-26 + +### Merged + +- Improve performace [`#34`](https://github.com/browserify/sha.js/pull/34) +- Add node v4 and v5 to travis config [`#33`](https://github.com/browserify/sha.js/pull/33) + +### Commits + +- Update package.json [`2b250d6`](https://github.com/browserify/sha.js/commit/2b250d6358efed8c9476805ccb86e20c63e721a6) + +## [v2.4.4](https://github.com/browserify/sha.js/compare/v2.4.3...v2.4.4) - 2015-09-19 + +### Merged + +- inline Sigma functions [`#32`](https://github.com/browserify/sha.js/pull/32) + +## [v2.4.3](https://github.com/browserify/sha.js/compare/v2.4.2...v2.4.3) - 2015-09-15 + +### Merged + +- Remove testling [`#31`](https://github.com/browserify/sha.js/pull/31) + +### Fixed + +- Adds npm badge (resolves #28) [`#28`](https://github.com/browserify/sha.js/issues/28) + +### Commits + +- fix standard issues [`52659f7`](https://github.com/browserify/sha.js/commit/52659f73bdc9ce1147da010cb303f3f008428498) +- README: update badge paths [`66a0b4c`](https://github.com/browserify/sha.js/commit/66a0b4c50b3499e2db37c4d1b0545d6536bc2f3b) +- Update README.md [`ca03356`](https://github.com/browserify/sha.js/commit/ca03356cbf74ea5b57df4d4f5ccc1e5557a75966) + +## [v2.4.2](https://github.com/browserify/sha.js/compare/v2.4.1...v2.4.2) - 2015-06-05 + +### Merged + +- Use standard [`#26`](https://github.com/browserify/sha.js/pull/26) + +### Commits + +- sha*: adhere to standard [`74f5fc4`](https://github.com/browserify/sha.js/commit/74f5fc4741447385f5691cb3140cf716a1288312) +- tests: adhere to standard [`e6851ca`](https://github.com/browserify/sha.js/commit/e6851ca9bb0843fa90d8eee7d3f7b3f9d1bbe4fb) +- bin: adhere to standard [`d1a23ab`](https://github.com/browserify/sha.js/commit/d1a23ab987eed4a6b940161693a805fa67c6e16d) +- vectors: adhere to standard [`5657c76`](https://github.com/browserify/sha.js/commit/5657c76f23e92d268010e0fd5880d5c52014eab2) +- hexpp: adhere to stnadard [`2aa2707`](https://github.com/browserify/sha.js/commit/2aa27074799df136b6b49cd0cdb272fe39c742a9) +- tests: remove unused generateCount function [`4a0b095`](https://github.com/browserify/sha.js/commit/4a0b0958e287070efe0bc3d9addff9401e4bbf18) +- adds standard [`0041dbb`](https://github.com/browserify/sha.js/commit/0041dbbd440c0f2e279c6a965485d1d841db3e9e) +- index: adhere to standard [`1839fb7`](https://github.com/browserify/sha.js/commit/1839fb715518fb18077e2b02449ad3627efc3ecb) +- hash: adhere to standard [`1334d89`](https://github.com/browserify/sha.js/commit/1334d89fe96a5854c2871c6352bc6d1a7f843145) +- package: use standard 4.0.0 [`ace4747`](https://github.com/browserify/sha.js/commit/ace474780c743368934c63df64cf12f556bb86a6) +- example is sha256 not sha1 [`8eb102b`](https://github.com/browserify/sha.js/commit/8eb102b6c3faa4a87c134644d019e8c8806a5801) + +## [v2.4.1](https://github.com/browserify/sha.js/compare/v2.4.0...v2.4.1) - 2015-05-19 + +### Merged + +- Update README.md [`#22`](https://github.com/browserify/sha.js/pull/22) + +## [v2.4.0](https://github.com/browserify/sha.js/compare/v2.3.6...v2.4.0) - 2015-04-05 + +### Commits + +- sha0: add implementation [`ca6950d`](https://github.com/browserify/sha.js/commit/ca6950d53c064aa5d767e7166ea29dd0cb61a1b6) +- document legacyness of sha1 and sha0 [`4563da6`](https://github.com/browserify/sha.js/commit/4563da67ee0e86e4eea55b844c6ec73f677e094a) +- README: not just SHA1 anymore [`2a67456`](https://github.com/browserify/sha.js/commit/2a67456d5ab2c6197f8314a83ddb4a9dc59ebfd1) + +## [v2.3.6](https://github.com/browserify/sha.js/compare/v2.3.5...v2.3.6) - 2015-01-14 + +### Commits + +- transfer to crypto-browserify org [`40f1aa9`](https://github.com/browserify/sha.js/commit/40f1aa960c0e7ddc4dc933013d63df41e6362737) + +## [v2.3.5](https://github.com/browserify/sha.js/compare/v2.3.4...v2.3.5) - 2015-01-14 + +### Commits + +- sha512: same branch extraction as #18 [`f985426`](https://github.com/browserify/sha.js/commit/f9854264d841f7138f65eec36010f54043868fdd) +- sha256: extract branches out [`e5486fd`](https://github.com/browserify/sha.js/commit/e5486fde95542a1f79c568f010810b8c7b9889c4) + +## [v2.3.4](https://github.com/browserify/sha.js/compare/v2.3.3...v2.3.4) - 2015-01-13 + +### Commits + +- sha1: use a closure over separate loops [`26a75ec`](https://github.com/browserify/sha.js/commit/26a75eca5f841850a05384d8a3a95e22ee8d9617) + +## [v2.3.3](https://github.com/browserify/sha.js/compare/v2.3.2...v2.3.3) - 2015-01-13 + +### Commits + +- sha1: unroll conditionals [`f830142`](https://github.com/browserify/sha.js/commit/f8301422051bd82cdb490881904b4bd418d5049d) +- sha1: use a closure over seperate loops [`bf46619`](https://github.com/browserify/sha.js/commit/bf46619c437f14c8aec95049fc054a13ee42c779) +- sha1: inline _ft, _kt functions [`3b32ff2`](https://github.com/browserify/sha.js/commit/3b32ff2b18642d57c069152d0dba2dfdc8f6c3ac) + +## [v2.3.2](https://github.com/browserify/sha.js/compare/v2.3.1...v2.3.2) - 2015-01-12 + +### Commits + +- improve sha* code structuring consistency [`d35623d`](https://github.com/browserify/sha.js/commit/d35623d4eddad7bc6f74c6c4f20e59cfc582215d) +- sha*: avoid unnecessary var declaration separation [`d985016`](https://github.com/browserify/sha.js/commit/d9850165dd29f662ff5c9490f9922a2bc65fec73) +- sha1: format sha1_kt similar to sha1_ft for clarity [`c18e7eb`](https://github.com/browserify/sha.js/commit/c18e7eb5ea14c7f5bb99f2664b04e132feeff296) +- adds .gitignore for node_modules [`9dc2814`](https://github.com/browserify/sha.js/commit/9dc2814271d9f119f8b30367d823e72b4f98e1ed) + +## [v2.3.1](https://github.com/browserify/sha.js/compare/v2.3.0...v2.3.1) - 2015-01-12 + +### Commits + +- Use inherits module instead of util [`aef9b82`](https://github.com/browserify/sha.js/commit/aef9b82c629f6ebaf346dab15c2a9bd30fb05aa6) + +## [v2.3.0](https://github.com/browserify/sha.js/compare/v2.2.7...v2.3.0) - 2014-11-18 + +### Commits + +- clean up factories [`996be1c`](https://github.com/browserify/sha.js/commit/996be1cb6a62a479dfb4758c5c431c6381c226cd) +- sha224 and 384 [`56694e5`](https://github.com/browserify/sha.js/commit/56694e5db70844f11a6a4082a549339d3b24ea95) +- add prepublish safety script [`84bde3c`](https://github.com/browserify/sha.js/commit/84bde3cb011f2370034c135727d602522d34e078) + +## [v2.2.7](https://github.com/browserify/sha.js/compare/v2.2.6...v2.2.7) - 2014-11-06 + +### Commits + +- use hash-test-vectors module [`526e246`](https://github.com/browserify/sha.js/commit/526e246cd58f108b410eeae3982756acd06c659c) + +## [v2.2.6](https://github.com/browserify/sha.js/compare/v2.2.5...v2.2.6) - 2014-09-18 + +### Commits + +- don't use global module [`8734884`](https://github.com/browserify/sha.js/commit/87348845d238ba6d8609f22a0972a438d4fc6ab1) +- safely check for IntArray32 existance [`e2376fd`](https://github.com/browserify/sha.js/commit/e2376fd5824fa89ad571e0ea666367511d3a02b5) + +## [v2.2.5](https://github.com/browserify/sha.js/compare/v2.2.4...v2.2.5) - 2014-09-16 + +### Commits + +- move buffer and typedarray into devdeps [`68797f9`](https://github.com/browserify/sha.js/commit/68797f971f55bcf53014e13d9b83adcc0e113ea0) + +## [v2.2.4](https://github.com/browserify/sha.js/compare/v2.2.3...v2.2.4) - 2014-09-16 + +### Commits + +- merge [`7d8b28f`](https://github.com/browserify/sha.js/commit/7d8b28f7627c82ea289e9396d1b93139264e4e1f) +- Fall back to normal array if no typed arrays [`8ca8dfc`](https://github.com/browserify/sha.js/commit/8ca8dfc025e5b2de4a126235b2f3eb4a1046b2d6) +- Don't use console.error [`6e0bd2d`](https://github.com/browserify/sha.js/commit/6e0bd2d8f3db4c267fbaebcbd1b542bc03b1e356) + +## [v2.2.3](https://github.com/browserify/sha.js/compare/v2.2.2...v2.2.3) - 2014-09-16 + +### Commits + +- fix test [`b4e83fa`](https://github.com/browserify/sha.js/commit/b4e83fa8ef732e90c399fcde5f55f8417d623524) + +## [v2.2.2](https://github.com/browserify/sha.js/compare/v2.2.1...v2.2.2) - 2014-09-16 + +### Merged + +- Copyright to contributors [`#10`](https://github.com/browserify/sha.js/pull/10) + +### Commits + +- LICENSE: update to include all contributors [`ac05b4d`](https://github.com/browserify/sha.js/commit/ac05b4d8bfca0c67edd8f20808d61b1aea980ebd) + +## [v2.2.1](https://github.com/browserify/sha.js/compare/v2.2.0...v2.2.1) - 2014-09-16 + +### Commits + +- document implemented hashes [`d123901`](https://github.com/browserify/sha.js/commit/d123901fe28148dce55637ed7942cd4953c9f448) + +## [v2.2.0](https://github.com/browserify/sha.js/compare/v2.1.8...v2.2.0) - 2014-09-16 + +### Commits + +- sha512: add implementation [`3e19416`](https://github.com/browserify/sha.js/commit/3e1941651b20741579c4adfcf69aa0bd607ef932) +- fixtures: remove unused md4 data [`13e43c5`](https://github.com/browserify/sha.js/commit/13e43c59a7109d31147f45a6619af6f8bfa11923) +- get tests working correctly [`01e393f`](https://github.com/browserify/sha.js/commit/01e393fbc4253ce82cf1f57f10c76b087a4b7787) +- remove utils.js [`418d59d`](https://github.com/browserify/sha.js/commit/418d59d40315a50972244ab4103c6d2a59dd86a2) +- fixtures: cleanup of vectors generation [`40f50cc`](https://github.com/browserify/sha.js/commit/40f50ccc29db3f689a04ebfecac2753c895398be) +- sha: jshint cleanup [`a04fae0`](https://github.com/browserify/sha.js/commit/a04fae03acdfb3bbfc7fbf15d928244364b5083a) +- hash: adhere to NIST paper properly [`fb2e39f`](https://github.com/browserify/sha.js/commit/fb2e39f86ce80948b697ac7d0d5f9b7f99c0672c) +- hash: increase verbosity [`b431a1a`](https://github.com/browserify/sha.js/commit/b431a1a24d5d37f856592aabe4593196d60b3b7f) +- hash: use update() argument instead [`0703b9d`](https://github.com/browserify/sha.js/commit/0703b9d38e816d71794a6604060a30e26072b6b7) +- sha: remove unused POOL [`0299989`](https://github.com/browserify/sha.js/commit/02999896280b859d5526820716c737ecbc46d0f6) +- README: add newline before testling badge [`a184d68`](https://github.com/browserify/sha.js/commit/a184d680dae744e7a6adfb73839c3feb6bd5f840) +- LICENSE: update to include all contributors [`edf48c3`](https://github.com/browserify/sha.js/commit/edf48c3b12638cafd509d51b84c39d63f6f00d3b) +- index: remove unused export [`b4de630`](https://github.com/browserify/sha.js/commit/b4de630c9e2092072d0baa5a0a5e93d00ce43c44) + +## [v2.1.8](https://github.com/browserify/sha.js/compare/v2.1.7...v2.1.8) - 2014-08-31 + +### Merged + +- check if DataView exist before using instanceof check [`#6`](https://github.com/browserify/sha.js/pull/6) + +## [v2.1.7](https://github.com/browserify/sha.js/compare/v2.1.6...v2.1.7) - 2014-07-24 + +### Commits + +- check for streaming updates [`4fc22d2`](https://github.com/browserify/sha.js/commit/4fc22d239c87d62155292ed7ccef2e36819bd7a6) +- also test with 3 partial updates [`37981e0`](https://github.com/browserify/sha.js/commit/37981e0b751e4cbb0631472aa19f5facb220cc31) +- Fix streaming updates (limit writing so it doesn't go over block size) [`50b8ddb`](https://github.com/browserify/sha.js/commit/50b8ddb4a5ec8fdaef7c51a01540b237e14a9b5e) + +## [v2.1.6](https://github.com/browserify/sha.js/compare/v2.1.5...v2.1.6) - 2014-07-19 + +### Merged + +- Fixes disparity between 'SHA1' working on node but failing in browser [`#3`](https://github.com/browserify/sha.js/pull/3) + +## [v2.1.5](https://github.com/browserify/sha.js/compare/v2.1.4...v2.1.5) - 2014-06-07 + +### Commits + +- use buffer/ [`23ee33f`](https://github.com/browserify/sha.js/commit/23ee33f8d9ebd5226f6f2fcc6dfcbfddda18af17) + +## v2.1.4 - 2014-06-07 + +### Commits + +- add tests from NIST [`422aa1f`](https://github.com/browserify/sha.js/commit/422aa1fccbd4efc5d2a72fbe7404971c45348c16) +- code to prepare nist-vectors.json [`e799a6f`](https://github.com/browserify/sha.js/commit/e799a6f8b15a9a3796dce295d9485defc7246568) +- inject Buffer dep, so can test with different implementations [`3d89958`](https://github.com/browserify/sha.js/commit/3d8995821e8da1cbf85114589e15843b371b9285) +- initial [`c1cabff`](https://github.com/browserify/sha.js/commit/c1cabff65dc811bd9c7e7530aab90db3b1080f04) +- expose createHash, like node's crypto [`41a1c53`](https://github.com/browserify/sha.js/commit/41a1c531c7947f1bc16ff33ba8dc9335a1a932fd) +- update stuff, still one problem with finalizing some lengths... [`d91aabb`](https://github.com/browserify/sha.js/commit/d91aabb27b0320708aa19943626029510aab3cbb) +- inject Buffer dep into hash [`21df559`](https://github.com/browserify/sha.js/commit/21df55938c274a75d5d04dfd7a4c9abe41d0ce7c) +- refactor tests [`fa6f893`](https://github.com/browserify/sha.js/commit/fa6f893ea0459caa71cd603f244e35f11a617b3b) +- this is quite a bit faster [`84379b3`](https://github.com/browserify/sha.js/commit/84379b3651daca535cbc9aba987563c26d84816f) +- implement sha256! [`70a6101`](https://github.com/browserify/sha.js/commit/70a6101ba6c6a4ae2bf6b89a9feae41c2bcd9559) +- tidy [`dce6d28`](https://github.com/browserify/sha.js/commit/dce6d28d15672d8c95cfc855b8071398b8aaca67) +- move of string stuff, use dataview [`55c7003`](https://github.com/browserify/sha.js/commit/55c7003b99880e54bbd709138028f66c94f51c64) +- update to buffer incrementally [`8cbcade`](https://github.com/browserify/sha.js/commit/8cbcade0875305d3005b97b94b7cdaa61cb93f34) +- refactor, to use buffers in tests [`8e7119b`](https://github.com/browserify/sha.js/commit/8e7119b5c079f51e5c24bfa2d5c3e25536e8b677) +- this is a little faster, but not much... [`55dfc90`](https://github.com/browserify/sha.js/commit/55dfc909269e7b21fb748a5bb594ba3b92a3e03e) +- refactor util functions out [`283f192`](https://github.com/browserify/sha.js/commit/283f1923bdf0bfe48167f240062071cdd2340f78) +- more encodings [`e5071ca`](https://github.com/browserify/sha.js/commit/e5071ca79c80b4d10a2fac860026cdaa291aee27) +- more tests [`655a7be`](https://github.com/browserify/sha.js/commit/655a7be9914298ad63ea77ba4c85dc34ed5f7f9b) +- deal with endianness [`1331b1f`](https://github.com/browserify/sha.js/commit/1331b1f4a1a449c0314cdaec9b0c363a8d8357dd) +- remove custom encoding stuff - just use buffer [`b464d5b`](https://github.com/browserify/sha.js/commit/b464d5bf5cd34de2cb294108179e6967bf3aef28) +- add more encodings to write [`19ce345`](https://github.com/browserify/sha.js/commit/19ce345a06206dda644f21c602aa326597998822) +- separate basic stuff into Hash function [`fe59f0c`](https://github.com/browserify/sha.js/commit/fe59f0cb949fa9e4b5f162f54ebe7b3312b1fc0f) +- experiment using node buffers [`27f6767`](https://github.com/browserify/sha.js/commit/27f676750b9e6e042d2d2ea11ef2c4196f3b417c) +- Several Memory Related Performance Improvements [`9b9badc`](https://github.com/browserify/sha.js/commit/9b9badccae5585d0a1f563ce171635404f97108d) +- tidy [`51c40fa`](https://github.com/browserify/sha.js/commit/51c40fa0c632c5114b574199063f8366621eaaa8) +- use toggle to compare with forge, but inlining makes this the same perf, although removing safe_add improved perf a lot [`15f80b9`](https://github.com/browserify/sha.js/commit/15f80b9e7d1677962f4f0f930e13e0d90de2ef13) +- remove unused utils [`a331a15`](https://github.com/browserify/sha.js/commit/a331a1513efa3bc2cdebc955fa3832ff6306d34f) +- tests for Hash [`417c298`](https://github.com/browserify/sha.js/commit/417c29858090b53b74d91f91b8f8e830dc0384a8) +- for some reason, this is MUCH faster! [`91649a6`](https://github.com/browserify/sha.js/commit/91649a61d6fe8ab2b1f785c1833efa89feeff3b0) +- leaking globals [`7e94cf7`](https://github.com/browserify/sha.js/commit/7e94cf7758ebf70f4c876518495445e971e2eff0) +- delete fakebuffer.js [`e42d66c`](https://github.com/browserify/sha.js/commit/e42d66cf5190a8a0c45e19231ddcd2ef983f1380) +- use bigendian [`f633b94`](https://github.com/browserify/sha.js/commit/f633b94aef9504607b14a2c2805b1e491f3e61b8) +- fix digest [`fdee30b`](https://github.com/browserify/sha.js/commit/fdee30be69cc3fa58a25ae3e32d629251e0a005d) +- tidy [`6f03926`](https://github.com/browserify/sha.js/commit/6f0392697e73f03c8900ccebd4a7d706c77bdea9) +- test incremental update [`d11e6f6`](https://github.com/browserify/sha.js/commit/d11e6f69f4be8d2d1c89f8492d4de2cf2b42027b) +- fake buffer, based on DataView [`71a31b6`](https://github.com/browserify/sha.js/commit/71a31b642d3212076dbd9e54cf6b6072b03c61ad) +- command to hash a large file [`618f16d`](https://github.com/browserify/sha.js/commit/618f16de80ee4b499ab6a493e88845f161dbb0dc) +- { on end of line [`8c1a1a7`](https://github.com/browserify/sha.js/commit/8c1a1a743e740df2e04fa4a9d97a9aea5831529d) +- hammer in a piton, incase I fall off this cliff [`0a211b2`](https://github.com/browserify/sha.js/commit/0a211b2b0abda6252f59f6f3892df1411670c72f) +- basic tests for encoding [`dece220`](https://github.com/browserify/sha.js/commit/dece220424b1d2776a88b35f28d46001e13b10d7) +- tests for hex encoding [`f860f65`](https://github.com/browserify/sha.js/commit/f860f65c173ff92b07643ae55a76516de0b1dded) +- fix fakebuffer [`c421953`](https://github.com/browserify/sha.js/commit/c421953c135fbb1fa3b46df0c3710bc39e50ac4d) +- remove encoding utils [`b0a9d4b`](https://github.com/browserify/sha.js/commit/b0a9d4bc153bd8ffd23d85e5c6a51ac8d7f81d51) +- tidy [`72b825b`](https://github.com/browserify/sha.js/commit/72b825b5a071a37de7bf00f2701bc0af66618ec2) +- tests for fakebuffer [`391fc9f`](https://github.com/browserify/sha.js/commit/391fc9f84988ebc32e8e14687568d8a2418fa34f) +- avoid unnecessary overwrite, 5% improvement [`d061547`](https://github.com/browserify/sha.js/commit/d0615475d9d23ab97814f55fab2e7c6db7adb9bb) +- use dataview [`04b9dee`](https://github.com/browserify/sha.js/commit/04b9deefaf8b1646bc9191f6d955e50c36441da0) +- update vector test to cover sha256 [`aa0d4fa`](https://github.com/browserify/sha.js/commit/aa0d4faef9f05aedf388bf9ca0e5012c4fc14326) +- readme [`6a9992a`](https://github.com/browserify/sha.js/commit/6a9992a77747286d059f0335d5358a013cd0096b) +- toHex supports strings and buffers [`9e17355`](https://github.com/browserify/sha.js/commit/9e173551bba96b7a6d395311948a4887e1461e5e) +- remove redundant tests [`9c701f4`](https://github.com/browserify/sha.js/commit/9c701f4b390b25fd154f85f6b8a5b187542bc463) +- testling [`3515f2f`](https://github.com/browserify/sha.js/commit/3515f2f8c958e3b598a1b6be87ba33cd70ae1591) +- support hex encoding [`b1488b5`](https://github.com/browserify/sha.js/commit/b1488b5dd416c4525e6bc817d7b87da27b275c94) +- remove logging [`ce7d53a`](https://github.com/browserify/sha.js/commit/ce7d53af357062def163f895aa5386e3f6b7e605) +- the working buffer can use system default endianness [`3da2747`](https://github.com/browserify/sha.js/commit/3da27472f74929d223c9ca47c59c219748989981) +- use dataview [`bdba2ec`](https://github.com/browserify/sha.js/commit/bdba2ecbd5877d4e2db012eaaa489467a08fb143) +- support binary encoding [`7b0cae7`](https://github.com/browserify/sha.js/commit/7b0cae71407ec363dc0150c1676fcd0a96a7ea48) +- refactor tests, for createHash [`f424197`](https://github.com/browserify/sha.js/commit/f4241979e140b8317abeb84773136e92d8811ca6) +- Int32 is a little faster than Uint32 [`c61542e`](https://github.com/browserify/sha.js/commit/c61542e06a4c06245aca3860aa36d97e250f08b9) +- simplify bit manipulations [`7e2fc4c`](https://github.com/browserify/sha.js/commit/7e2fc4c06350b35c83d7336c4c36b0acef274373) +- tidy [`e34e8b5`](https://github.com/browserify/sha.js/commit/e34e8b540202f4f548a70d44600287f9e2bd6e82) +- load browserify.js to force native-buffer-browserify [`fd5e58a`](https://github.com/browserify/sha.js/commit/fd5e58a4caa4223fe8f69614d137f219cc11d640) +- tidyup [`12e401b`](https://github.com/browserify/sha.js/commit/12e401b47e7f62ac47edea70efa2db4a044df015) +- this tiny change make it 11% faster on 174mb file! [`f58c321`](https://github.com/browserify/sha.js/commit/f58c3212e40b9c65dc81dcf4765052d4181cf96d) +- support multiple encodings [`36506c6`](https://github.com/browserify/sha.js/commit/36506c6ded807f9a23014b4eb2385ec8ae5d681b) +- tidy [`2c664aa`](https://github.com/browserify/sha.js/commit/2c664aadf9008111c8f19d30f0b8125d0133b79c) +- update hash tests - for some reason, t.deepEqual doesn't work well on buffers? [`8e8e854`](https://github.com/browserify/sha.js/commit/8e8e8547612af4cb628400be0933edeb856f28a5) +- rename to Sha1 [`6620d1a`](https://github.com/browserify/sha.js/commit/6620d1a9a8598e7cf2799e72a786f5bafbaef7a2) +- tidy [`2313658`](https://github.com/browserify/sha.js/commit/2313658f0330b3b851ba55ada7f9ab8a11734802) +- use bops for encoding/decoding [`48d1eb9`](https://github.com/browserify/sha.js/commit/48d1eb9eeee33c2bf55aaae4112ffdf236e20fa2) +- handle large updates all at once, to pass NIST tests [`f2adc77`](https://github.com/browserify/sha.js/commit/f2adc77e49c74d34d8d6715f8b172f3d898bbe32) +- use bops [`5167411`](https://github.com/browserify/sha.js/commit/51674113e9dc35a54d1ec564c51374ad869252b9) +- use fakebuffer instead of buffer [`a6398fe`](https://github.com/browserify/sha.js/commit/a6398fe0582e88aa837a6058494ff7a9c783bd23) +- remove final, and force to Uint8Array [`c42eb76`](https://github.com/browserify/sha.js/commit/c42eb76a6afb318202fd63aff4e6de2145fe4d51) +- todo [`52ef73e`](https://github.com/browserify/sha.js/commit/52ef73e7db22937a2f47ad69e4c4e75fb03215a1) +- remove debugging stuff [`afeb954`](https://github.com/browserify/sha.js/commit/afeb95445f1aff601dba5436ef6024c818d5ed06) +- use bops@0.1.1 [`ccb7eaf`](https://github.com/browserify/sha.js/commit/ccb7eaf1f6e65d590fb4d56797f342e1139a643b) +- convert to string [`abe5373`](https://github.com/browserify/sha.js/commit/abe5373aaf0742cf10dc82b879c0848e22a611fe) +- work around tape/ff [`b95d57c`](https://github.com/browserify/sha.js/commit/b95d57c596a455b3a7b9ad8de95e4374a7d84cf8) +- remove bops [`4d9fb4d`](https://github.com/browserify/sha.js/commit/4d9fb4d8fd8332d69b055e9d1dd1ba5aad5ebb8c) +- this made no difference [`0a0ee38`](https://github.com/browserify/sha.js/commit/0a0ee38c5fead881b3bdb96c9b47a59b62451b13) +- drop support for legacy versions [`e7c530f`](https://github.com/browserify/sha.js/commit/e7c530f19a33aac5768e50dffc8fc93df4070af3) +- a few more test cases [`48ce51b`](https://github.com/browserify/sha.js/commit/48ce51b50b62bb53bd6effdfe42be232f31ffa52) +- use buffer methods [`6a572d2`](https://github.com/browserify/sha.js/commit/6a572d2a27e20c990f8a32d7c39606a0571f9fe7) +- getter for buffer length [`56c1e35`](https://github.com/browserify/sha.js/commit/56c1e35583aa53b1aaaff68d43a4bf4a0c206eea) +- more debuging [`f1c9d10`](https://github.com/browserify/sha.js/commit/f1c9d104d188fbc5ff447a8dc7976400646d3ffb) +- HAHA IT WORKS [`ee95185`](https://github.com/browserify/sha.js/commit/ee9518599957a64d46d8d45aeaae649ec85641c9) +- test coverage for binary encoding [`96e417c`](https://github.com/browserify/sha.js/commit/96e417cd12df156f6f0d3608bdd62ef9d661c41d) +- set debug mode to show time elapsed [`36d4639`](https://github.com/browserify/sha.js/commit/36d46393bde62248e5949b1954b61a96e7220c1c) +- interpret utf-8 as utf8 [`53bd808`](https://github.com/browserify/sha.js/commit/53bd8080ed929d408856b762a43076b1cad19584) +- use browserify edge case to get browser version of core module in node [`657c0a9`](https://github.com/browserify/sha.js/commit/657c0a94c914dee1a473b21f1f3c736a5e715a45) +- native-buffer-browserify -> buffer [`c6a2777`](https://github.com/browserify/sha.js/commit/c6a2777e3ec85de16215f79171fbf2b561556b17) +- do not run test/test.js in the browser, it depends on node.js [`d1d4ac8`](https://github.com/browserify/sha.js/commit/d1d4ac8d27ef65c3fb1dac6b7ef612fabceeea26) +- compute correct length for binary string [`c616d74`](https://github.com/browserify/sha.js/commit/c616d7435493c67d399954d8b5673691b5405e83) +- tidy [`d176073`](https://github.com/browserify/sha.js/commit/d176073dbba34810b86e656dac3a268b438abafe) +- this is twice as fast! turns out creating DataViews is quite slow! /cc @feross [`3ba9a1f`](https://github.com/browserify/sha.js/commit/3ba9a1fe2c33cc4e88ff953ba5c5544d4be311d1) +- use _blockLength property [`fdf1030`](https://github.com/browserify/sha.js/commit/fdf10309e4334347e8f668d6ec6d25ea16856f8e) +- allow subclass to give hash by _hash method [`d47673b`](https://github.com/browserify/sha.js/commit/d47673bc4b2b66f46f0eec342f5e424f5147c48d) +- use my toHex [`76ffe66`](https://github.com/browserify/sha.js/commit/76ffe66ba119e9e8fc88d6a5b5dcd5ffabf2a9da) +- didin't work [`254a4e8`](https://github.com/browserify/sha.js/commit/254a4e8c3e4fe79c8ce4cacd23a91426e9d8f32f) +- always run all tests [`18f39f8`](https://github.com/browserify/sha.js/commit/18f39f8e96ddebd86d32604b55c388e0c72306e1) +- remove hexpp [`e7f3030`](https://github.com/browserify/sha.js/commit/e7f30308c64bfc5f00a9b8ccf4c17ae65a3ddc55) +- make installable as a command [`f6842dd`](https://github.com/browserify/sha.js/commit/f6842dde37f0b37042e513fc63d214989417fff4) +- 0.11 is not working... [`a6aacc6`](https://github.com/browserify/sha.js/commit/a6aacc66f417ee17a4363cc1d20350bfa7a682cc) diff --git a/node_modules/sha.js/LICENSE b/node_modules/sha.js/LICENSE new file mode 100644 index 00000000..11888c13 --- /dev/null +++ b/node_modules/sha.js/LICENSE @@ -0,0 +1,49 @@ +Copyright (c) 2013-2018 sha.js contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Copyright (c) 1998 - 2009, Paul Johnston & Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +Neither the name of the author nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/node_modules/sha.js/README.md b/node_modules/sha.js/README.md new file mode 100644 index 00000000..2a6ad74b --- /dev/null +++ b/node_modules/sha.js/README.md @@ -0,0 +1,44 @@ +# sha.js +[![NPM Package](https://img.shields.io/npm/v/sha.js.svg?style=flat-square)](https://www.npmjs.org/package/sha.js) +[![Build Status](https://img.shields.io/travis/crypto-browserify/sha.js.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/sha.js) +[![Dependency status](https://img.shields.io/david/crypto-browserify/sha.js.svg?style=flat-square)](https://david-dm.org/crypto-browserify/sha.js#info=dependencies) + +[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) + +Node style `SHA` on pure JavaScript. + +```js +var shajs = require('sha.js') + +console.log(shajs('sha256').update('42').digest('hex')) +// => 73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049 +console.log(new shajs.sha256().update('42').digest('hex')) +// => 73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049 + +var sha256stream = shajs('sha256') +sha256stream.end('42') +console.log(sha256stream.read().toString('hex')) +// => 73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049 +``` + +## supported hashes +`sha.js` currently implements: + + - SHA (SHA-0) -- **legacy, do not use in new systems** + - SHA-1 -- **legacy, do not use in new systems** + - SHA-224 + - SHA-256 + - SHA-384 + - SHA-512 + + +## Not an actual stream +Note, this doesn't actually implement a stream, but wrapping this in a stream is trivial. +It does update incrementally, so you can hash things larger than RAM, as it uses a constant amount of memory (except when using base64 or utf8 encoding, see code comments). + + +## Acknowledgements +This work is derived from Paul Johnston's [A JavaScript implementation of the Secure Hash Algorithm](http://pajhome.org.uk/crypt/md5/sha1.html). + + +## LICENSE [MIT AND BSD-3-Clause](LICENSE) diff --git a/node_modules/sha.js/bin.js b/node_modules/sha.js/bin.js new file mode 100644 index 00000000..596f292f --- /dev/null +++ b/node_modules/sha.js/bin.js @@ -0,0 +1,44 @@ +#! /usr/bin/env node + +'use strict'; + +var createHash = require('./browserify'); +var argv = process.argv.slice(2); + +function pipe(algorithm, s) { + var start = Date.now(); + var hash = createHash(algorithm || 'sha1'); + + s.on('data', function (data) { + hash.update(data); + }); + + s.on('end', function () { + if (process.env.DEBUG) { + console.log(hash.digest('hex'), Date.now() - start); + } else { + console.log(hash.digest('hex')); + } + }); +} + +function usage() { + console.error('sha.js [algorithm=sha1] [filename] # hash filename with algorithm'); + console.error('input | sha.js [algorithm=sha1] # hash stdin with algorithm'); + console.error('sha.js --help # display this message'); +} + +if (!process.stdin.isTTY) { + pipe(argv[0], process.stdin); +} else if (argv.length) { + if ((/--help|-h/).test(argv[0])) { + usage(); + } else { + var filename = argv.pop(); + var algorithm = argv.pop(); + // eslint-disable-next-line global-require + pipe(algorithm, require('fs').createReadStream(filename)); + } +} else { + usage(); +} diff --git a/node_modules/sha.js/hash.js b/node_modules/sha.js/hash.js new file mode 100644 index 00000000..397b87a5 --- /dev/null +++ b/node_modules/sha.js/hash.js @@ -0,0 +1,84 @@ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var toBuffer = require('to-buffer'); + +// prototype class for hash functions +function Hash(blockSize, finalSize) { + this._block = Buffer.alloc(blockSize); + this._finalSize = finalSize; + this._blockSize = blockSize; + this._len = 0; +} + +Hash.prototype.update = function (data, enc) { + /* eslint no-param-reassign: 0 */ + data = toBuffer(data, enc || 'utf8'); + + var block = this._block; + var blockSize = this._blockSize; + var length = data.length; + var accum = this._len; + + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize; + var remainder = Math.min(length - offset, blockSize - assigned); + + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i]; + } + + accum += remainder; + offset += remainder; + + if ((accum % blockSize) === 0) { + this._update(block); + } + } + + this._len += length; + return this; +}; + +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize; + + this._block[rem] = 0x80; + + /* + * zero (rem + 1) trailing bits, where (rem + 1) is the smallest + * non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + */ + this._block.fill(0, rem + 1); + + if (rem >= this._finalSize) { + this._update(this._block); + this._block.fill(0); + } + + var bits = this._len * 8; + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4); + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0; + var highBits = (bits - lowBits) / 0x100000000; + + this._block.writeUInt32BE(highBits, this._blockSize - 8); + this._block.writeUInt32BE(lowBits, this._blockSize - 4); + } + + this._update(this._block); + var hash = this._hash(); + + return enc ? hash.toString(enc) : hash; +}; + +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass'); +}; + +module.exports = Hash; diff --git a/node_modules/sha.js/index.js b/node_modules/sha.js/index.js new file mode 100644 index 00000000..912e5976 --- /dev/null +++ b/node_modules/sha.js/index.js @@ -0,0 +1,19 @@ +'use strict'; + +module.exports = function SHA(algorithm) { + var alg = algorithm.toLowerCase(); + + var Algorithm = module.exports[alg]; + if (!Algorithm) { + throw new Error(alg + ' is not supported (we accept pull requests)'); + } + + return new Algorithm(); +}; + +module.exports.sha = require('./sha'); +module.exports.sha1 = require('./sha1'); +module.exports.sha224 = require('./sha224'); +module.exports.sha256 = require('./sha256'); +module.exports.sha384 = require('./sha384'); +module.exports.sha512 = require('./sha512'); diff --git a/node_modules/sha.js/package.json b/node_modules/sha.js/package.json new file mode 100644 index 00000000..16c91b5e --- /dev/null +++ b/node_modules/sha.js/package.json @@ -0,0 +1,58 @@ +{ + "name": "sha.js", + "description": "Streamable SHA hashes in pure javascript", + "version": "2.4.12", + "repository": { + "type": "git", + "url": "git://github.com/crypto-browserify/sha.js.git" + }, + "bin": "./bin.js", + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "tape 'test/**/*.js'", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "license": "(MIT AND BSD-3-Clause)", + "author": "Dominic Tarr (dominictarr.com)", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "homepage": "https://github.com/crypto-browserify/sha.js", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.2.0", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "hash-test-vectors": "^1.3.2", + "npmignore": "^0.3.1", + "tape": "^5.9.0", + "typedarray": "^0.0.7" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + ".github" + ] + }, + "engines": { + "node": ">= 0.10" + } +} diff --git a/node_modules/sha.js/sha.js b/node_modules/sha.js/sha.js new file mode 100644 index 00000000..fdfe4c14 --- /dev/null +++ b/node_modules/sha.js/sha.js @@ -0,0 +1,104 @@ +'use strict'; + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +]; + +var W = new Array(80); + +function Sha() { + this.init(); + this._w = W; + + Hash.call(this, 64, 56); +} + +inherits(Sha, Hash); + +Sha.prototype.init = function () { + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; + + return this; +}; + +function rotl5(num) { + return (num << 5) | (num >>> 27); +} + +function rotl30(num) { + return (num << 30) | (num >>> 2); +} + +function ft(s, b, c, d) { + if (s === 0) { + return (b & c) | (~b & d); + } + if (s === 2) { + return (b & c) | (b & d) | (c & d); + } + return b ^ c ^ d; +} + +Sha.prototype._update = function (M) { + var w = this._w; + + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + + for (var i = 0; i < 16; ++i) { + w[i] = M.readInt32BE(i * 4); + } + for (; i < 80; ++i) { + w[i] = w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]; + } + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = (rotl5(a) + ft(s, b, c, d) + e + w[j] + K[s]) | 0; + + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + + this._a = (a + this._a) | 0; + this._b = (b + this._b) | 0; + this._c = (c + this._c) | 0; + this._d = (d + this._d) | 0; + this._e = (e + this._e) | 0; +}; + +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20); + + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + + return H; +}; + +module.exports = Sha; diff --git a/node_modules/sha.js/sha1.js b/node_modules/sha.js/sha1.js new file mode 100644 index 00000000..0891453c --- /dev/null +++ b/node_modules/sha.js/sha1.js @@ -0,0 +1,109 @@ +'use strict'; + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +]; + +var W = new Array(80); + +function Sha1() { + this.init(); + this._w = W; + + Hash.call(this, 64, 56); +} + +inherits(Sha1, Hash); + +Sha1.prototype.init = function () { + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; + + return this; +}; + +function rotl1(num) { + return (num << 1) | (num >>> 31); +} + +function rotl5(num) { + return (num << 5) | (num >>> 27); +} + +function rotl30(num) { + return (num << 30) | (num >>> 2); +} + +function ft(s, b, c, d) { + if (s === 0) { + return (b & c) | (~b & d); + } + if (s === 2) { + return (b & c) | (b & d) | (c & d); + } + return b ^ c ^ d; +} + +Sha1.prototype._update = function (M) { + var w = this._w; + + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + + for (var i = 0; i < 16; ++i) { + w[i] = M.readInt32BE(i * 4); + } + for (; i < 80; ++i) { + w[i] = rotl1(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); + } + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = (rotl5(a) + ft(s, b, c, d) + e + w[j] + K[s]) | 0; + + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + + this._a = (a + this._a) | 0; + this._b = (b + this._b) | 0; + this._c = (c + this._c) | 0; + this._d = (d + this._d) | 0; + this._e = (e + this._e) | 0; +}; + +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20); + + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + + return H; +}; + +module.exports = Sha1; diff --git a/node_modules/sha.js/sha224.js b/node_modules/sha.js/sha224.js new file mode 100644 index 00000000..9cd0702c --- /dev/null +++ b/node_modules/sha.js/sha224.js @@ -0,0 +1,55 @@ +'use strict'; + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits'); +var Sha256 = require('./sha256'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; + +var W = new Array(64); + +function Sha224() { + this.init(); + + this._w = W; // new Array(64) + + Hash.call(this, 64, 56); +} + +inherits(Sha224, Sha256); + +Sha224.prototype.init = function () { + this._a = 0xc1059ed8; + this._b = 0x367cd507; + this._c = 0x3070dd17; + this._d = 0xf70e5939; + this._e = 0xffc00b31; + this._f = 0x68581511; + this._g = 0x64f98fa7; + this._h = 0xbefa4fa4; + + return this; +}; + +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28); + + H.writeInt32BE(this._a, 0); + H.writeInt32BE(this._b, 4); + H.writeInt32BE(this._c, 8); + H.writeInt32BE(this._d, 12); + H.writeInt32BE(this._e, 16); + H.writeInt32BE(this._f, 20); + H.writeInt32BE(this._g, 24); + + return H; +}; + +module.exports = Sha224; diff --git a/node_modules/sha.js/sha256.js b/node_modules/sha.js/sha256.js new file mode 100644 index 00000000..6741589d --- /dev/null +++ b/node_modules/sha.js/sha256.js @@ -0,0 +1,189 @@ +'use strict'; + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; + +var K = [ + 0x428A2F98, + 0x71374491, + 0xB5C0FBCF, + 0xE9B5DBA5, + 0x3956C25B, + 0x59F111F1, + 0x923F82A4, + 0xAB1C5ED5, + 0xD807AA98, + 0x12835B01, + 0x243185BE, + 0x550C7DC3, + 0x72BE5D74, + 0x80DEB1FE, + 0x9BDC06A7, + 0xC19BF174, + 0xE49B69C1, + 0xEFBE4786, + 0x0FC19DC6, + 0x240CA1CC, + 0x2DE92C6F, + 0x4A7484AA, + 0x5CB0A9DC, + 0x76F988DA, + 0x983E5152, + 0xA831C66D, + 0xB00327C8, + 0xBF597FC7, + 0xC6E00BF3, + 0xD5A79147, + 0x06CA6351, + 0x14292967, + 0x27B70A85, + 0x2E1B2138, + 0x4D2C6DFC, + 0x53380D13, + 0x650A7354, + 0x766A0ABB, + 0x81C2C92E, + 0x92722C85, + 0xA2BFE8A1, + 0xA81A664B, + 0xC24B8B70, + 0xC76C51A3, + 0xD192E819, + 0xD6990624, + 0xF40E3585, + 0x106AA070, + 0x19A4C116, + 0x1E376C08, + 0x2748774C, + 0x34B0BCB5, + 0x391C0CB3, + 0x4ED8AA4A, + 0x5B9CCA4F, + 0x682E6FF3, + 0x748F82EE, + 0x78A5636F, + 0x84C87814, + 0x8CC70208, + 0x90BEFFFA, + 0xA4506CEB, + 0xBEF9A3F7, + 0xC67178F2 +]; + +var W = new Array(64); + +function Sha256() { + this.init(); + + this._w = W; // new Array(64) + + Hash.call(this, 64, 56); +} + +inherits(Sha256, Hash); + +Sha256.prototype.init = function () { + this._a = 0x6a09e667; + this._b = 0xbb67ae85; + this._c = 0x3c6ef372; + this._d = 0xa54ff53a; + this._e = 0x510e527f; + this._f = 0x9b05688c; + this._g = 0x1f83d9ab; + this._h = 0x5be0cd19; + + return this; +}; + +function ch(x, y, z) { + return z ^ (x & (y ^ z)); +} + +function maj(x, y, z) { + return (x & y) | (z & (x | y)); +} + +function sigma0(x) { + return ((x >>> 2) | (x << 30)) ^ ((x >>> 13) | (x << 19)) ^ ((x >>> 22) | (x << 10)); +} + +function sigma1(x) { + return ((x >>> 6) | (x << 26)) ^ ((x >>> 11) | (x << 21)) ^ ((x >>> 25) | (x << 7)); +} + +function gamma0(x) { + return ((x >>> 7) | (x << 25)) ^ ((x >>> 18) | (x << 14)) ^ (x >>> 3); +} + +function gamma1(x) { + return ((x >>> 17) | (x << 15)) ^ ((x >>> 19) | (x << 13)) ^ (x >>> 10); +} + +Sha256.prototype._update = function (M) { + var w = this._w; + + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + var f = this._f | 0; + var g = this._g | 0; + var h = this._h | 0; + + for (var i = 0; i < 16; ++i) { + w[i] = M.readInt32BE(i * 4); + } + for (; i < 64; ++i) { + w[i] = (gamma1(w[i - 2]) + w[i - 7] + gamma0(w[i - 15]) + w[i - 16]) | 0; + } + + for (var j = 0; j < 64; ++j) { + var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + w[j]) | 0; + var T2 = (sigma0(a) + maj(a, b, c)) | 0; + + h = g; + g = f; + f = e; + e = (d + T1) | 0; + d = c; + c = b; + b = a; + a = (T1 + T2) | 0; + } + + this._a = (a + this._a) | 0; + this._b = (b + this._b) | 0; + this._c = (c + this._c) | 0; + this._d = (d + this._d) | 0; + this._e = (e + this._e) | 0; + this._f = (f + this._f) | 0; + this._g = (g + this._g) | 0; + this._h = (h + this._h) | 0; +}; + +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32); + + H.writeInt32BE(this._a, 0); + H.writeInt32BE(this._b, 4); + H.writeInt32BE(this._c, 8); + H.writeInt32BE(this._d, 12); + H.writeInt32BE(this._e, 16); + H.writeInt32BE(this._f, 20); + H.writeInt32BE(this._g, 24); + H.writeInt32BE(this._h, 28); + + return H; +}; + +module.exports = Sha256; diff --git a/node_modules/sha.js/sha384.js b/node_modules/sha.js/sha384.js new file mode 100644 index 00000000..ad260ddb --- /dev/null +++ b/node_modules/sha.js/sha384.js @@ -0,0 +1,59 @@ +'use strict'; + +var inherits = require('inherits'); +var SHA512 = require('./sha512'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; + +var W = new Array(160); + +function Sha384() { + this.init(); + this._w = W; + + Hash.call(this, 128, 112); +} + +inherits(Sha384, SHA512); + +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d; + this._bh = 0x629a292a; + this._ch = 0x9159015a; + this._dh = 0x152fecd8; + this._eh = 0x67332667; + this._fh = 0x8eb44a87; + this._gh = 0xdb0c2e0d; + this._hh = 0x47b5481d; + + this._al = 0xc1059ed8; + this._bl = 0x367cd507; + this._cl = 0x3070dd17; + this._dl = 0xf70e5939; + this._el = 0xffc00b31; + this._fl = 0x68581511; + this._gl = 0x64f98fa7; + this._hl = 0xbefa4fa4; + + return this; +}; + +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48); + + function writeInt64BE(h, l, offset) { + H.writeInt32BE(h, offset); + H.writeInt32BE(l, offset + 4); + } + + writeInt64BE(this._ah, this._al, 0); + writeInt64BE(this._bh, this._bl, 8); + writeInt64BE(this._ch, this._cl, 16); + writeInt64BE(this._dh, this._dl, 24); + writeInt64BE(this._eh, this._el, 32); + writeInt64BE(this._fh, this._fl, 40); + + return H; +}; + +module.exports = Sha384; diff --git a/node_modules/sha.js/sha512.js b/node_modules/sha.js/sha512.js new file mode 100644 index 00000000..9328a763 --- /dev/null +++ b/node_modules/sha.js/sha512.js @@ -0,0 +1,382 @@ +'use strict'; + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; + +var K = [ + 0x428a2f98, + 0xd728ae22, + 0x71374491, + 0x23ef65cd, + 0xb5c0fbcf, + 0xec4d3b2f, + 0xe9b5dba5, + 0x8189dbbc, + 0x3956c25b, + 0xf348b538, + 0x59f111f1, + 0xb605d019, + 0x923f82a4, + 0xaf194f9b, + 0xab1c5ed5, + 0xda6d8118, + 0xd807aa98, + 0xa3030242, + 0x12835b01, + 0x45706fbe, + 0x243185be, + 0x4ee4b28c, + 0x550c7dc3, + 0xd5ffb4e2, + 0x72be5d74, + 0xf27b896f, + 0x80deb1fe, + 0x3b1696b1, + 0x9bdc06a7, + 0x25c71235, + 0xc19bf174, + 0xcf692694, + 0xe49b69c1, + 0x9ef14ad2, + 0xefbe4786, + 0x384f25e3, + 0x0fc19dc6, + 0x8b8cd5b5, + 0x240ca1cc, + 0x77ac9c65, + 0x2de92c6f, + 0x592b0275, + 0x4a7484aa, + 0x6ea6e483, + 0x5cb0a9dc, + 0xbd41fbd4, + 0x76f988da, + 0x831153b5, + 0x983e5152, + 0xee66dfab, + 0xa831c66d, + 0x2db43210, + 0xb00327c8, + 0x98fb213f, + 0xbf597fc7, + 0xbeef0ee4, + 0xc6e00bf3, + 0x3da88fc2, + 0xd5a79147, + 0x930aa725, + 0x06ca6351, + 0xe003826f, + 0x14292967, + 0x0a0e6e70, + 0x27b70a85, + 0x46d22ffc, + 0x2e1b2138, + 0x5c26c926, + 0x4d2c6dfc, + 0x5ac42aed, + 0x53380d13, + 0x9d95b3df, + 0x650a7354, + 0x8baf63de, + 0x766a0abb, + 0x3c77b2a8, + 0x81c2c92e, + 0x47edaee6, + 0x92722c85, + 0x1482353b, + 0xa2bfe8a1, + 0x4cf10364, + 0xa81a664b, + 0xbc423001, + 0xc24b8b70, + 0xd0f89791, + 0xc76c51a3, + 0x0654be30, + 0xd192e819, + 0xd6ef5218, + 0xd6990624, + 0x5565a910, + 0xf40e3585, + 0x5771202a, + 0x106aa070, + 0x32bbd1b8, + 0x19a4c116, + 0xb8d2d0c8, + 0x1e376c08, + 0x5141ab53, + 0x2748774c, + 0xdf8eeb99, + 0x34b0bcb5, + 0xe19b48a8, + 0x391c0cb3, + 0xc5c95a63, + 0x4ed8aa4a, + 0xe3418acb, + 0x5b9cca4f, + 0x7763e373, + 0x682e6ff3, + 0xd6b2b8a3, + 0x748f82ee, + 0x5defb2fc, + 0x78a5636f, + 0x43172f60, + 0x84c87814, + 0xa1f0ab72, + 0x8cc70208, + 0x1a6439ec, + 0x90befffa, + 0x23631e28, + 0xa4506ceb, + 0xde82bde9, + 0xbef9a3f7, + 0xb2c67915, + 0xc67178f2, + 0xe372532b, + 0xca273ece, + 0xea26619c, + 0xd186b8c7, + 0x21c0c207, + 0xeada7dd6, + 0xcde0eb1e, + 0xf57d4f7f, + 0xee6ed178, + 0x06f067aa, + 0x72176fba, + 0x0a637dc5, + 0xa2c898a6, + 0x113f9804, + 0xbef90dae, + 0x1b710b35, + 0x131c471b, + 0x28db77f5, + 0x23047d84, + 0x32caab7b, + 0x40c72493, + 0x3c9ebe0a, + 0x15c9bebc, + 0x431d67c4, + 0x9c100d4c, + 0x4cc5d4be, + 0xcb3e42b6, + 0x597f299c, + 0xfc657e2a, + 0x5fcb6fab, + 0x3ad6faec, + 0x6c44198c, + 0x4a475817 +]; + +var W = new Array(160); + +function Sha512() { + this.init(); + this._w = W; + + Hash.call(this, 128, 112); +} + +inherits(Sha512, Hash); + +Sha512.prototype.init = function () { + this._ah = 0x6a09e667; + this._bh = 0xbb67ae85; + this._ch = 0x3c6ef372; + this._dh = 0xa54ff53a; + this._eh = 0x510e527f; + this._fh = 0x9b05688c; + this._gh = 0x1f83d9ab; + this._hh = 0x5be0cd19; + + this._al = 0xf3bcc908; + this._bl = 0x84caa73b; + this._cl = 0xfe94f82b; + this._dl = 0x5f1d36f1; + this._el = 0xade682d1; + this._fl = 0x2b3e6c1f; + this._gl = 0xfb41bd6b; + this._hl = 0x137e2179; + + return this; +}; + +function Ch(x, y, z) { + return z ^ (x & (y ^ z)); +} + +function maj(x, y, z) { + return (x & y) | (z & (x | y)); +} + +function sigma0(x, xl) { + return ((x >>> 28) | (xl << 4)) ^ ((xl >>> 2) | (x << 30)) ^ ((xl >>> 7) | (x << 25)); +} + +function sigma1(x, xl) { + return ((x >>> 14) | (xl << 18)) ^ ((x >>> 18) | (xl << 14)) ^ ((xl >>> 9) | (x << 23)); +} + +function Gamma0(x, xl) { + return ((x >>> 1) | (xl << 31)) ^ ((x >>> 8) | (xl << 24)) ^ (x >>> 7); +} + +function Gamma0l(x, xl) { + return ((x >>> 1) | (xl << 31)) ^ ((x >>> 8) | (xl << 24)) ^ ((x >>> 7) | (xl << 25)); +} + +function Gamma1(x, xl) { + return ((x >>> 19) | (xl << 13)) ^ ((xl >>> 29) | (x << 3)) ^ (x >>> 6); +} + +function Gamma1l(x, xl) { + return ((x >>> 19) | (xl << 13)) ^ ((xl >>> 29) | (x << 3)) ^ ((x >>> 6) | (xl << 26)); +} + +function getCarry(a, b) { + return (a >>> 0) < (b >>> 0) ? 1 : 0; +} + +Sha512.prototype._update = function (M) { + var w = this._w; + + var ah = this._ah | 0; + var bh = this._bh | 0; + var ch = this._ch | 0; + var dh = this._dh | 0; + var eh = this._eh | 0; + var fh = this._fh | 0; + var gh = this._gh | 0; + var hh = this._hh | 0; + + var al = this._al | 0; + var bl = this._bl | 0; + var cl = this._cl | 0; + var dl = this._dl | 0; + var el = this._el | 0; + var fl = this._fl | 0; + var gl = this._gl | 0; + var hl = this._hl | 0; + + for (var i = 0; i < 32; i += 2) { + w[i] = M.readInt32BE(i * 4); + w[i + 1] = M.readInt32BE((i * 4) + 4); + } + for (; i < 160; i += 2) { + var xh = w[i - (15 * 2)]; + var xl = w[i - (15 * 2) + 1]; + var gamma0 = Gamma0(xh, xl); + var gamma0l = Gamma0l(xl, xh); + + xh = w[i - (2 * 2)]; + xl = w[i - (2 * 2) + 1]; + var gamma1 = Gamma1(xh, xl); + var gamma1l = Gamma1l(xl, xh); + + // w[i] = gamma0 + w[i - 7] + gamma1 + w[i - 16] + var Wi7h = w[i - (7 * 2)]; + var Wi7l = w[i - (7 * 2) + 1]; + + var Wi16h = w[i - (16 * 2)]; + var Wi16l = w[i - (16 * 2) + 1]; + + var Wil = (gamma0l + Wi7l) | 0; + var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0; + Wil = (Wil + gamma1l) | 0; + Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0; + Wil = (Wil + Wi16l) | 0; + Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0; + + w[i] = Wih; + w[i + 1] = Wil; + } + + for (var j = 0; j < 160; j += 2) { + Wih = w[j]; + Wil = w[j + 1]; + + var majh = maj(ah, bh, ch); + var majl = maj(al, bl, cl); + + var sigma0h = sigma0(ah, al); + var sigma0l = sigma0(al, ah); + var sigma1h = sigma1(eh, el); + var sigma1l = sigma1(el, eh); + + // t1 = h + sigma1 + ch + K[j] + w[j] + var Kih = K[j]; + var Kil = K[j + 1]; + + var chh = Ch(eh, fh, gh); + var chl = Ch(el, fl, gl); + + var t1l = (hl + sigma1l) | 0; + var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0; + t1l = (t1l + chl) | 0; + t1h = (t1h + chh + getCarry(t1l, chl)) | 0; + t1l = (t1l + Kil) | 0; + t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0; + t1l = (t1l + Wil) | 0; + t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0; + + // t2 = sigma0 + maj + var t2l = (sigma0l + majl) | 0; + var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0; + + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = (dl + t1l) | 0; + eh = (dh + t1h + getCarry(el, dl)) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = (t1l + t2l) | 0; + ah = (t1h + t2h + getCarry(al, t1l)) | 0; + } + + this._al = (this._al + al) | 0; + this._bl = (this._bl + bl) | 0; + this._cl = (this._cl + cl) | 0; + this._dl = (this._dl + dl) | 0; + this._el = (this._el + el) | 0; + this._fl = (this._fl + fl) | 0; + this._gl = (this._gl + gl) | 0; + this._hl = (this._hl + hl) | 0; + + this._ah = (this._ah + ah + getCarry(this._al, al)) | 0; + this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0; + this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0; + this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0; + this._eh = (this._eh + eh + getCarry(this._el, el)) | 0; + this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0; + this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0; + this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0; +}; + +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64); + + function writeInt64BE(h, l, offset) { + H.writeInt32BE(h, offset); + H.writeInt32BE(l, offset + 4); + } + + writeInt64BE(this._ah, this._al, 0); + writeInt64BE(this._bh, this._bl, 8); + writeInt64BE(this._ch, this._cl, 16); + writeInt64BE(this._dh, this._dl, 24); + writeInt64BE(this._eh, this._el, 32); + writeInt64BE(this._fh, this._fl, 40); + writeInt64BE(this._gh, this._gl, 48); + writeInt64BE(this._hh, this._hl, 56); + + return H; +}; + +module.exports = Sha512; diff --git a/node_modules/sha.js/test/hash.js b/node_modules/sha.js/test/hash.js new file mode 100644 index 00000000..fd844530 --- /dev/null +++ b/node_modules/sha.js/test/hash.js @@ -0,0 +1,80 @@ +'use strict'; + +var tape = require('tape'); +var Buffer = require('safe-buffer').Buffer; + +var Hash = require('../hash'); + +var hex = '0A1B2C3D4E5F6G7H'; + +function equal(t, a, b) { + t.equal(a.length, b.length); + t.equal(a.toString('hex'), b.toString('hex')); +} + +var hexBuf = Buffer.from('0A1B2C3D4E5F6G7H', 'utf8'); +var count16 = { + strings: ['0A1B2C3D4E5F6G7H'], + buffers: [ + hexBuf, + Buffer.from('80000000000000000000000000000080', 'hex') + ] +}; + +var empty = { + strings: [''], + buffers: [ + Buffer.from('80000000000000000000000000000000', 'hex') + ] +}; + +var multi = { + strings: ['abcd', 'efhijk', 'lmnopq'], + buffers: [ + Buffer.from('abcdefhijklmnopq', 'ascii'), + Buffer.from('80000000000000000000000000000080', 'hex') + ] +}; + +var long = { + strings: [hex + hex], + buffers: [ + hexBuf, + hexBuf, + Buffer.from('80000000000000000000000000000100', 'hex') + ] +}; + +function makeTest(name, data) { + tape(name, function (t) { + var h = new Hash(16, 8); + var hash = Buffer.alloc(20); + var n = 2; + var expected = data.buffers.slice(); + // t.plan(expected.length + 1) + + h._update = function (block) { + var e = expected.shift(); + equal(t, block, e); + + if (n < 0) { + throw new Error('expecting only 2 calls to _update'); + } + }; + h._hash = function () { + return hash; + }; + + data.strings.forEach(function (string) { + h.update(string, 'ascii'); + }); + + equal(t, h.digest(), hash); + t.end(); + }); +} + +makeTest('Hash#update 1 in 1', count16); +makeTest('empty Hash#update', empty); +makeTest('Hash#update 1 in 3', multi); +makeTest('Hash#update 2 in 1', long); diff --git a/node_modules/sha.js/test/test.js b/node_modules/sha.js/test/test.js new file mode 100644 index 00000000..f1732528 --- /dev/null +++ b/node_modules/sha.js/test/test.js @@ -0,0 +1,138 @@ +'use strict'; + +var crypto = require('crypto'); +var tape = require('tape'); +var Buffer = require('safe-buffer').Buffer; + +var Sha1 = require('../').sha1; + +var nodeSupportsUint16 = false; +try { + crypto.createHash('sha1').update(new Uint16Array()); + nodeSupportsUint16 = true; +} catch (err) {} + +var inputs = [ + ['', 'ascii'], + ['abc', 'ascii'], + ['123', 'ascii'], + ['123456789abcdef123456789abcdef123456789abcdef123456789abcdef', 'ascii'], + ['123456789abcdef123456789abcdef123456789abcdef123456789abc', 'ascii'], + ['123456789abcdef123456789abcdef123456789abcdef123456789ab', 'ascii'], + ['0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde', 'ascii'], + ['0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', 'ascii'], + ['foobarbaz', 'ascii'], + [Buffer.from('buffer')], + nodeSupportsUint16 ? [new Uint16Array([1, 2, 3])] : null +].filter(Boolean); + +tape("hash is the same as node's crypto", function (t) { + inputs.forEach(function (v) { + var a = new Sha1().update(v[0], v[1]).digest('hex'); + var e = crypto.createHash('sha1').update(v[0], v[1]).digest('hex'); + t.equal(a, e, a + ' == ' + e); + }); + + t.end(); +}); + +tape('call update multiple times', function (t) { + inputs.forEach(function (v) { + var hash = new Sha1(); + var sha1hash = crypto.createHash('sha1'); + + for (var i = 0; i < v[0].length; i = (i + 1) * 2) { + var s = v[0].slice(i, (i + 1) * 2); + hash.update(s, v[1]); + sha1hash.update(s, v[1]); + } + + var a = hash.digest('hex'); + var e = sha1hash.digest('hex'); + t.equal(a, e, a + ' == ' + e); + }); + t.end(); +}); + +tape('call update twice', function (t) { + var sha1hash = crypto.createHash('sha1'); + var hash = new Sha1(); + + sha1hash.update('foo', 'ascii'); + hash.update('foo', 'ascii'); + + sha1hash.update('bar', 'ascii'); + hash.update('bar', 'ascii'); + + sha1hash.update('baz', 'ascii'); + hash.update('baz', 'ascii'); + + var a = hash.digest('hex'); + var e = sha1hash.digest('hex'); + + t.equal(a, e); + t.end(); +}); + +tape('hex encoding', function (t) { + inputs.forEach(function (v) { + var hash = new Sha1(); + var sha1hash = crypto.createHash('sha1'); + + for (var i = 0; i < v[0].length; i = (i + 1) * 2) { + var s = v[0].slice(i, (i + 1) * 2); + hash.update(Buffer.from(s, 'ascii').toString('hex'), 'hex'); + sha1hash.update(Buffer.from(s, 'ascii').toString('hex'), 'hex'); + } + var a = hash.digest('hex'); + var e = sha1hash.digest('hex'); + + t.equal(a, e, a + ' == ' + e); + }); + + t.end(); +}); + +tape('throws on invalid input', function (t) { + var invalid = [ + {}, // non-arrayish + { length: 20 }, // undefined values + [NaN], // non-numbers + [[]], // non-numbers + [1, 1.5], // non-integers + [1, 256], // out of bounds + [-1, 0] // out of bounds + ]; + + invalid.forEach(function (input) { + var hash = new Sha1(); + + t['throws'](function () { + hash.update(input); + hash.digest('hex'); + }); + }); + + t.end(); +}); + +tape('call digest for more than MAX_UINT32 bits of data', function (t) { + var sha1hash = crypto.createHash('sha1'); + var hash = new Sha1(); + var bigData; + try { + bigData = Buffer.alloc(0x1ffffffff / 8); + } catch (err) { + // node < 3 has a lower buffer size limit than node 3+. node 0.10 requires the `/8`, 0.12 - 2 are fine with `-8` + bigData = Buffer.alloc(0x3fffffff / 8); + } + + hash.update(bigData); + sha1hash.update(bigData); + + var a = hash.digest('hex'); + var e = sha1hash.digest('hex'); + + t.equal(a, e, a + ' == ' + e); + t.end(); +}); diff --git a/node_modules/sha.js/test/vectors.js b/node_modules/sha.js/test/vectors.js new file mode 100644 index 00000000..25874f06 --- /dev/null +++ b/node_modules/sha.js/test/vectors.js @@ -0,0 +1,72 @@ +'use strict'; + +var tape = require('tape'); +var vectors = require('hash-test-vectors'); +// var from = require('bops/typedarray/from') +var Buffer = require('safe-buffer').Buffer; + +var createHash = require('../'); + +function makeTest(alg, i, verbose) { + var v = vectors[i]; + + tape(alg + ': NIST vector ' + i, function (t) { + if (verbose) { + t.comment(v); + t.comment('VECTOR', i); + t.comment('INPUT', v.input); + t.comment(Buffer.from(v.input, 'base64').toString('hex')); + } + + var buf = Buffer.from(v.input, 'base64'); + t.equal(createHash(alg).update(buf).digest('hex'), v[alg]); + + // eslint-disable-next-line no-param-reassign + i = ~~(buf.length / 2); + var buf1 = buf.slice(0, i); + var buf2 = buf.slice(i, buf.length); + + t.comment(buf1.length + ', ' + buf2.length + ', ' + buf.length); + t.comment(createHash(alg)._block.length); + + t.equal( + createHash(alg) + .update(buf1) + .update(buf2) + .digest('hex'), + v[alg] + ); + + var j, buf3; + + // eslint-disable-next-line no-param-reassign + i = ~~(buf.length / 3); + j = ~~(buf.length * 2 / 3); + buf1 = buf.slice(0, i); + buf2 = buf.slice(i, j); + buf3 = buf.slice(j, buf.length); + + t.equal( + createHash(alg) + .update(buf1) + .update(buf2) + .update(buf3) + .digest('hex'), + v[alg] + ); + + setTimeout(function () { + // avoid "too much recursion" errors in tape in firefox + t.end(); + }); + }); +} + +vectors.forEach(function (v, i) { + makeTest('sha', i); + makeTest('sha1', i); + makeTest('sha224', i); + makeTest('sha256', i); + makeTest('sha384', i); + makeTest('sha512', i); +}); diff --git a/node_modules/sodium-native/CMakeLists.txt b/node_modules/sodium-native/CMakeLists.txt new file mode 100644 index 00000000..b4908f00 --- /dev/null +++ b/node_modules/sodium-native/CMakeLists.txt @@ -0,0 +1,249 @@ +cmake_minimum_required(VERSION 3.25) + +find_package(cmake-bare REQUIRED PATHS node_modules/cmake-bare) +find_package(cmake-fetch REQUIRED PATHS node_modules/cmake-fetch) +find_package(cmake-napi REQUIRED PATHS node_modules/cmake-napi) + +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +project(sodium_native C ASM) + +fetch_package("github:jedisct1/libsodium#stable" SOURCE_DIR sodium) + +bare_target(target) + +if(target MATCHES "win32") + add_compile_options(/MT$<$:d>) +endif() + +file(COPY_FILE "${sodium}/builds/msvc/version.h" "${sodium}/src/libsodium/include/sodium/version.h") + +file(GLOB_RECURSE sodium_headers CONFIGURE_DEPENDS "${sodium}/src/libsodium/**/*.h") +file(GLOB_RECURSE sodium_sources CONFIGURE_DEPENDS "${sodium}/src/libsodium/**/*.c") +file(GLOB_RECURSE sodium_asm_sources CONFIGURE_DEPENDS "${sodium}/src/libsodium/**/*.S") + +add_library(sodium OBJECT) + +target_sources( + sodium + INTERFACE + ${sodium_headers} + PRIVATE + ${sodium_sources} +) + +target_include_directories( + sodium + INTERFACE + "${sodium}/src/libsodium/include" + PRIVATE + "${sodium}/src/libsodium/include/sodium" +) + +if(NOT target MATCHES "win32") + target_compile_options( + sodium + PRIVATE + -fvisibility=hidden + -fno-strict-aliasing + -fwrapv + -flax-vector-conversions + ) +endif() + +target_compile_definitions( + sodium + PUBLIC + SODIUM_STATIC=1 + PRIVATE + _GNU_SOURCE=1 + CONFIGURED=1 + DEV_MODE=1 + HAVE_ATOMIC_OPS=1 + HAVE_C11_MEMORY_FENCES=1 + HAVE_CET_H=1 + HAVE_GCC_MEMORY_FENCES=1 + HAVE_INLINE_ASM=1 + HAVE_INTTYPES_H=1 + HAVE_STDINT_H=1 + HAVE_TI_MODE=1 +) + +if(target MATCHES "darwin|ios") + target_compile_definitions( + sodium + PRIVATE + ASM_HIDE_SYMBOL=.private_extern + TLS=_Thread_local + HAVE_ARC4RANDOM=1 + HAVE_ARC4RANDOM_BUF=1 + HAVE_CATCHABLE_ABRT=1 + HAVE_CATCHABLE_SEGV=1 + HAVE_CLOCK_GETTIME=1 + HAVE_GETPID=1 + HAVE_MADVISE=1 + HAVE_MEMSET_S=1 + HAVE_MLOCK=1 + HAVE_MMAP=1 + HAVE_MPROTECT=1 + HAVE_NANOSLEEP=1 + HAVE_POSIX_MEMALIGN=1 + HAVE_PTHREAD=1 + HAVE_PTHREAD_PRIO_INHERIT=1 + HAVE_RAISE=1 + HAVE_SYSCONF=1 + HAVE_SYS_MMAN_H=1 + HAVE_SYS_PARAM_H=1 + HAVE_WEAK_SYMBOLS=1 + ) + + if(NOT target MATCHES "ios") + target_compile_definitions( + sodium + PRIVATE + HAVE_GETENTROPY=1 + HAVE_SYS_RANDOM_H=1 + ) + endif() +endif() + +if(target MATCHES "linux") + target_compile_definitions( + sodium + PRIVATE + ASM_HIDE_SYMBOL=.hidden + TLS=_Thread_local + HAVE_CATCHABLE_ABRT=1 + HAVE_CATCHABLE_SEGV=1 + HAVE_CLOCK_GETTIME=1 + HAVE_GETPID=1 + HAVE_MADVISE=1 + HAVE_MLOCK=1 + HAVE_MMAP=1 + HAVE_MPROTECT=1 + HAVE_NANOSLEEP=1 + HAVE_POSIX_MEMALIGN=1 + HAVE_PTHREAD_PRIO_INHERIT=1 + HAVE_PTHREAD=1 + HAVE_RAISE=1 + HAVE_SYSCONF=1 + HAVE_SYS_AUXV_H=1 + HAVE_SYS_MMAN_H=1 + HAVE_SYS_PARAM_H=1 + HAVE_SYS_RANDOM_H=1 + HAVE_WEAK_SYMBOLS=1 + ) +endif() + +if(target MATCHES "win32") + target_compile_definitions( + sodium + PRIVATE + _CRT_SECURE_NO_WARNINGS=1 + HAVE_RAISE=1 + ) +endif() + +if(target MATCHES "x64") + target_compile_definitions( + sodium + PRIVATE + HAVE_CPUID=1 + HAVE_RDRAND=1 + HAVE_EMMINTRIN_H=1 # SSE2 + HAVE_PMMINTRIN_H=1 # SSE3 + HAVE_TMMINTRIN_H=1 # SSSE3 + HAVE_SMMINTRIN_H=1 # SSE4.1 + HAVE_WMMINTRIN_H=1 # AES + HAVE_AVXINTRIN_H=1 # AVX + HAVE_AVX2INTRIN_H=1 # AVX2 + HAVE_AVX512FINTRIN_H # AVX512F + ) + + if(NOT target MATCHES "win32") + target_compile_definitions( + sodium + PRIVATE + HAVE_AMD64_ASM=1 + HAVE_AVX_ASM=1 + ) + + target_sources( + sodium + PRIVATE + ${sodium_asm_sources} + ) + endif() +endif() + +if(target MATCHES "arm64") + target_compile_definitions( + sodium + PRIVATE + HAVE_ARMCRYPTO=1 + ) +endif() + +if(CMAKE_C_BYTE_ORDER MATCHES "BIG_ENDIAN") + target_compile_definitions( + sodium + PRIVATE + NATIVE_BIG_ENDIAN=1 + ) +else() + target_compile_definitions( + sodium + PRIVATE + NATIVE_LITTLE_ENDIAN=1 + ) +endif() + +if(target MATCHES "linux|android") + target_link_options( + sodium + PUBLIC + -Wl,-z,noexecstack + ) +endif() + +add_bare_module(sodium_native_bare) + +target_sources( + ${sodium_native_bare} + PRIVATE + binding.c + macros.h + extensions/tweak/tweak.c + extensions/tweak/tweak.h + extensions/pbkdf2/pbkdf2.c + extensions/pbkdf2/pbkdf2.h +) + +target_link_libraries( + ${sodium_native_bare} + PRIVATE + $ + PUBLIC + sodium +) + +add_napi_module(sodium_native_node) + +target_sources( + ${sodium_native_node} + PRIVATE + binding.c + macros.h + extensions/tweak/tweak.c + extensions/tweak/tweak.h + extensions/pbkdf2/pbkdf2.c + extensions/pbkdf2/pbkdf2.h +) + +target_link_libraries( + ${sodium_native_node} + PRIVATE + $ + PUBLIC + sodium +) diff --git a/node_modules/sodium-native/LICENSE b/node_modules/sodium-native/LICENSE new file mode 100644 index 00000000..aebbe8df --- /dev/null +++ b/node_modules/sodium-native/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Mathias Buus and Emil Bay + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/sodium-native/README.md b/node_modules/sodium-native/README.md new file mode 100644 index 00000000..93a11b6b --- /dev/null +++ b/node_modules/sodium-native/README.md @@ -0,0 +1,51 @@ +# sodium-native + +Low level bindings for [libsodium](https://github.com/jedisct1/libsodium). + +``` +npm install sodium-native +``` + +The goal of this project is to be thin, stable, unopionated wrapper around libsodium. + +All methods exposed are more or less a direct translation of the libsodium c-api. +This means that most data types are buffers and you have to manage allocating return values and passing them in as arguments instead of receiving them as return values. + +This makes this API harder to use than other libsodium wrappers out there, but also means that you'll be able to get a lot of perf / memory improvements as you can do stuff like inline encryption / decryption, reuse buffers etc. + +This also makes this library useful as a foundation for more high level crypto abstractions that you want to make. + +## Usage + +``` js +var sodium = require('sodium-native') + +var nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) +var key = sodium.sodium_malloc(sodium.crypto_secretbox_KEYBYTES) // secure buffer +var message = Buffer.from('Hello, World!') +var ciphertext = Buffer.alloc(message.length + sodium.crypto_secretbox_MACBYTES) + +sodium.randombytes_buf(nonce) // insert random data into nonce +sodium.randombytes_buf(key) // insert random data into key + +// encrypted message is stored in ciphertext. +sodium.crypto_secretbox_easy(ciphertext, message, nonce, key) + +console.log('Encrypted message:', ciphertext) + +var plainText = Buffer.alloc(ciphertext.length - sodium.crypto_secretbox_MACBYTES) + +if (!sodium.crypto_secretbox_open_easy(plainText, ciphertext, nonce, key)) { + console.log('Decryption failed!') +} else { + console.log('Decrypted message:', plainText, '(' + plainText.toString() + ')') +} +``` + +## Documentation + +Complete documentation may be found on the [sodium-friends website](https://sodium-friends.github.io/docs/docs/getstarted) + +## License + +MIT diff --git a/node_modules/sodium-native/binding.c b/node_modules/sodium-native/binding.c new file mode 100644 index 00000000..a7b2e769 --- /dev/null +++ b/node_modules/sodium-native/binding.c @@ -0,0 +1,3470 @@ +#include +#include +#include +#include +#include "macros.h" +#include "extensions/tweak/tweak.h" +#include "extensions/pbkdf2/pbkdf2.h" + +static uint8_t typedarray_width (napi_typedarray_type type) { + switch (type) { + case napi_int8_array: return 1; + case napi_uint8_array: return 1; + case napi_uint8_clamped_array: return 1; + case napi_int16_array: return 2; + case napi_uint16_array: return 2; + case napi_int32_array: return 4; + case napi_uint32_array: return 4; + case napi_float32_array: return 4; + case napi_float64_array: return 8; + case napi_bigint64_array: return 8; + case napi_biguint64_array: return 8; + default: return 0; + } +} + +static void sn_sodium_free_finalise (napi_env env, void *finalise_data, void *finalise_hint) { + napi_adjust_external_memory(env, -4 * 4096, NULL); + sodium_free(finalise_data); +} + +napi_value sn_sodium_memzero (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_memzero) + + SN_ARGV_TYPEDARRAY(buf, 0) + + sodium_memzero(buf_data, buf_size); + + return NULL; +} + +napi_value sn_sodium_mlock (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_mlock) + + SN_ARGV_TYPEDARRAY(buf, 0) + + SN_RETURN(sodium_mlock(buf_data, buf_size), "memory lock failed") +} + +napi_value sn_sodium_munlock (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_munlock) + + SN_ARGV_TYPEDARRAY(buf, 0) + + SN_RETURN(sodium_munlock(buf_data, buf_size), "memory unlock failed") +} + +napi_value sn_sodium_free (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_free) + + SN_ARGV_TYPEDARRAY_PTR(buf, 0) + + if (buf_data == NULL) return NULL; + + napi_value array_buf; + + SN_STATUS_THROWS(napi_get_named_property(env, argv[0], "buffer", &array_buf), "failed to get arraybuffer"); + SN_STATUS_THROWS(napi_remove_wrap(env, array_buf, NULL), "failed to remove wrap"); // remove the finalizer + SN_STATUS_THROWS(napi_detach_arraybuffer(env, array_buf), "failed to detach array buffer"); + napi_adjust_external_memory(env, -4 * 4096, NULL); + sodium_free(buf_data); + + return NULL; +} + +napi_value sn_sodium_malloc (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_malloc); + + SN_ARGV_UINT32(size, 0) + + void *ptr = sodium_malloc(size); + + SN_THROWS(ptr == NULL, "ENOMEM") + napi_adjust_external_memory(env, 4 * 4096, NULL); + + SN_THROWS(ptr == NULL, "sodium_malloc failed"); + + napi_value buf, value, array_buf; + + SN_STATUS_THROWS(napi_create_external_buffer(env, size, ptr, NULL, NULL, &buf), "failed to create a n-api buffer") + SN_STATUS_THROWS(napi_get_boolean(env, true, &value), "failed to create boolean") + + SN_STATUS_THROWS(napi_get_named_property(env, buf, "buffer", &array_buf), "failed to get arraybuffer") + SN_STATUS_THROWS(napi_set_named_property(env, buf, "secure", value), "failed to set secure property") + + SN_STATUS_THROWS(napi_wrap(env, array_buf, ptr, sn_sodium_free_finalise, NULL, NULL), "failed to wrap") + + return buf; +} + +napi_value sn_sodium_mprotect_noaccess (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_mprotect_noaccess); + + SN_ARGV_TYPEDARRAY_PTR(buf, 0) + + SN_RETURN(sodium_mprotect_noaccess(buf_data), "failed to lock buffer") +} + + +napi_value sn_sodium_mprotect_readonly (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_readonly); + + SN_ARGV_TYPEDARRAY_PTR(buf, 0) + + SN_RETURN(sodium_mprotect_readonly(buf_data), "failed to unlock buffer") +} + + +napi_value sn_sodium_mprotect_readwrite (napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_readwrite); + + SN_ARGV_TYPEDARRAY_PTR(buf, 0) + + SN_RETURN(sodium_mprotect_readwrite(buf_data), "failed to unlock buffer") +} + +napi_value sn_randombytes_random (napi_env env, napi_callback_info info) { + napi_value result; + + napi_create_uint32(env, randombytes_random(), &result); + return result; +} + +napi_value sn_randombytes_uniform (napi_env env, napi_callback_info info) { + SN_ARGV(1, randombytes_uniform); + + SN_ARGV_UINT32(upper_bound, 0) + + napi_value result; + napi_create_uint32(env, randombytes_uniform(upper_bound), &result); + return result; +} + +napi_value sn_randombytes_buf (napi_env env, napi_callback_info info) { + SN_ARGV(1, randombytes_buf) + + SN_ARGV_TYPEDARRAY(buf, 0) + + randombytes_buf(buf_data, buf_size); + + return NULL; +} + +napi_value sn_randombytes_buf_deterministic (napi_env env, napi_callback_info info) { + SN_ARGV(2, randombytes_buf) + + SN_ARGV_TYPEDARRAY(buf, 0) + SN_ARGV_TYPEDARRAY(seed, 1) + + SN_ASSERT_LENGTH(seed_size, randombytes_SEEDBYTES, "seed") + + randombytes_buf_deterministic(buf_data, buf_size, seed_data); + + return NULL; +} + +napi_value sn_sodium_memcmp(napi_env env, napi_callback_info info) { + SN_ARGV(2, sodium_memcmp); + + SN_ARGV_TYPEDARRAY(b1, 0) + SN_ARGV_TYPEDARRAY(b2, 1) + + SN_THROWS(b1_size != b2_size, "buffers must be of same length") + + SN_RETURN_BOOLEAN(sodium_memcmp(b1_data, b2_data, b1_size)) +} + +napi_value sn_sodium_increment(napi_env env, napi_callback_info info) { + SN_ARGV(1, sodium_increment); + SN_ARGV_TYPEDARRAY(n, 0) + + sodium_increment(n_data, n_size); + + return NULL; +} + +napi_value sn_sodium_add(napi_env env, napi_callback_info info) { + SN_ARGV(2, sodium_add); + + SN_ARGV_TYPEDARRAY(a, 0) + SN_ARGV_TYPEDARRAY(b, 1) + + SN_THROWS(a_size != b_size, "buffers must be of same length") + sodium_add(a_data, b_data, a_size); + + return NULL; +} + +napi_value sn_sodium_sub(napi_env env, napi_callback_info info) { + SN_ARGV(2, sodium_sub); + + SN_ARGV_TYPEDARRAY(a, 0) + SN_ARGV_TYPEDARRAY(b, 1) + + SN_THROWS(a_size != b_size, "buffers must be of same length") + sodium_sub(a_data, b_data, a_size); + + return NULL; +} + +napi_value sn_sodium_compare(napi_env env, napi_callback_info info) { + SN_ARGV(2, sodium_compare); + + SN_ARGV_TYPEDARRAY(a, 0) + SN_ARGV_TYPEDARRAY(b, 1) + + SN_THROWS(a_size != b_size, "buffers must be of same length") + int cmp = sodium_compare(a_data, b_data, a_size); + + napi_value result; + napi_create_int32(env, cmp, &result); + + return result; +} + +napi_value sn_sodium_is_zero(napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(1, 2, sodium_is_zero); + + SN_ARGV_TYPEDARRAY(a, 0) + + size_t a_full = a_size; + + if (argc == 2) { + SN_OPT_ARGV_UINT32(a_size, 1) + SN_THROWS(a_size > a_full, "len must be shorter than 'buf.byteLength'") + } + + SN_RETURN_BOOLEAN_FROM_1(sodium_is_zero(a_data, a_size)) +} + +napi_value sn_sodium_pad(napi_env env, napi_callback_info info) { + SN_ARGV(3, sodium_pad); + + SN_ARGV_TYPEDARRAY(buf, 0) + SN_ARGV_UINT32(unpadded_buflen, 1) + SN_ARGV_UINT32(blocksize, 2) + + SN_THROWS(unpadded_buflen > buf_size, "unpadded length cannot exceed buffer length") + SN_THROWS(blocksize > buf_size, "block size cannot exceed buffer length") + SN_THROWS(blocksize < 1, "block sizemust be at least 1 byte") + SN_THROWS(buf_size < unpadded_buflen + (blocksize - (unpadded_buflen % blocksize)), "buf not long enough") + + napi_value result; + size_t padded_buflen; + sodium_pad(&padded_buflen, buf_data, unpadded_buflen, blocksize, buf_size); + napi_create_uint32(env, padded_buflen, &result); + return result; +} + +napi_value sn_sodium_unpad(napi_env env, napi_callback_info info) { + SN_ARGV(3, sodium_unpad); + + SN_ARGV_TYPEDARRAY(buf, 0) + SN_ARGV_UINT32(padded_buflen, 1) + SN_ARGV_UINT32(blocksize, 2) + + SN_THROWS(padded_buflen > buf_size, "unpadded length cannot exceed buffer length") + SN_THROWS(blocksize > buf_size, "block size cannot exceed buffer length") + SN_THROWS(blocksize < 1, "block size must be at least 1 byte") + + napi_value result; + size_t unpadded_buflen; + sodium_unpad(&unpadded_buflen, buf_data, padded_buflen, blocksize); + napi_create_uint32(env, unpadded_buflen, &result); + return result; +} + +napi_value sn_crypto_sign_keypair(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_sign_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_sign_SECRETKEYBYTES, "sk") + + SN_RETURN(crypto_sign_keypair(pk_data, sk_data), "keypair generation failed") +} + +napi_value sn_crypto_sign_seed_keypair(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_sign_seed_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + SN_ARGV_TYPEDARRAY(seed, 2) + + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_sign_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(seed_size, crypto_sign_SEEDBYTES, "seed") + + SN_RETURN(crypto_sign_seed_keypair(pk_data, sk_data, seed_data), "keypair generation failed") +} + +napi_value sn_crypto_sign(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_sign) + + SN_ARGV_TYPEDARRAY(sm, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(sk, 2) + + SN_THROWS(sm_size != crypto_sign_BYTES + m_size, "sm must be 'm.byteLength + crypto_sign_BYTES' bytes") + SN_ASSERT_LENGTH(sk_size, crypto_sign_SECRETKEYBYTES, "sk") + + SN_RETURN(crypto_sign(sm_data, NULL, m_data, m_size, sk_data), "signature failed") +} + +napi_value sn_crypto_sign_open(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_sign_open) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_TYPEDARRAY(sm, 1) + SN_ARGV_TYPEDARRAY(pk, 2) + + SN_THROWS(m_size != sm_size - crypto_sign_BYTES, "m must be 'sm.byteLength - crypto_sign_BYTES' bytes") + SN_ASSERT_MIN_LENGTH(sm_size, crypto_sign_BYTES, "sm") + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + + SN_RETURN_BOOLEAN(crypto_sign_open(m_data, NULL, sm_data, sm_size, pk_data)) +} + +napi_value sn_crypto_sign_detached(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_sign_detached) + + SN_ARGV_TYPEDARRAY(sig, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(sk, 2) + + SN_ASSERT_LENGTH(sig_size, crypto_sign_BYTES, "sm") + SN_ASSERT_LENGTH(sk_size, crypto_sign_SECRETKEYBYTES, "sk") + + SN_RETURN(crypto_sign_detached(sig_data, NULL, m_data, m_size, sk_data), "signature failed") +} + +napi_value sn_crypto_sign_verify_detached(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_sign_verify_detached) + + SN_ARGV_TYPEDARRAY(sig, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(pk, 2) + + SN_ASSERT_MIN_LENGTH(sig_size, crypto_sign_BYTES, "sig") + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + + SN_RETURN_BOOLEAN(crypto_sign_verify_detached(sig_data, m_data, m_size, pk_data)) +} + +napi_value sn_crypto_sign_ed25519_sk_to_pk(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_sign_ed25519_sk_to_pk) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_sign_SECRETKEYBYTES, "sk") + + SN_RETURN(crypto_sign_ed25519_sk_to_pk(pk_data, sk_data), "public key generation failed") +} + +napi_value sn_crypto_sign_ed25519_pk_to_curve25519(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_sign_ed25519_sk_to_pk) + + SN_ARGV_TYPEDARRAY(x25519_pk, 0) + SN_ARGV_TYPEDARRAY(ed25519_pk, 1) + + SN_ASSERT_LENGTH(x25519_pk_size, crypto_box_PUBLICKEYBYTES, "x25519_pk") + SN_ASSERT_LENGTH(ed25519_pk_size, crypto_sign_PUBLICKEYBYTES, "ed25519_pk") + + SN_RETURN(crypto_sign_ed25519_pk_to_curve25519(x25519_pk_data, ed25519_pk_data), "public key conversion failed") +} + +napi_value sn_crypto_sign_ed25519_sk_to_curve25519(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_sign_ed25519_sk_to_pk) + + SN_ARGV_TYPEDARRAY(x25519_sk, 0) + SN_ARGV_TYPEDARRAY(ed25519_sk, 1) + + SN_ASSERT_LENGTH(x25519_sk_size, crypto_box_SECRETKEYBYTES, "x25519_sk") + SN_THROWS(ed25519_sk_size != crypto_sign_SECRETKEYBYTES && ed25519_sk_size != crypto_box_SECRETKEYBYTES, "ed25519_sk should either be 'crypto_sign_SECRETKEYBYTES' bytes or 'crypto_sign_SECRETKEYBYTES - crypto_sign_PUBLICKEYBYTES' bytes") + + SN_RETURN(crypto_sign_ed25519_sk_to_curve25519(x25519_sk_data, ed25519_sk_data), "secret key conversion failed") +} + +napi_value sn_crypto_generichash(napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(2, 3, crypto_generichash) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_ASSERT_MIN_LENGTH(out_size, crypto_generichash_BYTES_MIN, "out") + SN_ASSERT_MAX_LENGTH(out_size, crypto_generichash_BYTES_MAX, "out") + + void *key_data = NULL; + size_t key_size = 0; + + if (argc == 3) { + SN_OPT_ARGV_TYPEDARRAY(key, 2) + SN_THROWS(key_size < crypto_generichash_KEYBYTES_MIN, "key") + SN_ASSERT_MIN_LENGTH(key_size, crypto_generichash_KEYBYTES_MIN, "key") + SN_ASSERT_MAX_LENGTH(key_size, crypto_generichash_KEYBYTES_MAX, "key") + } + + SN_RETURN(crypto_generichash(out_data, out_size, in_data, in_size, key_data, key_size), "hash failed") +} + +napi_value sn_crypto_generichash_batch(napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(2, 3, crypto_generichash) + + SN_ARGV_TYPEDARRAY(out, 0) + + uint32_t batch_length; + napi_get_array_length(env, argv[1], &batch_length); + + SN_ASSERT_MIN_LENGTH(out_size, crypto_generichash_BYTES_MIN, "out") + SN_ASSERT_MAX_LENGTH(out_size, crypto_generichash_BYTES_MAX, "out") + + void *key_data = NULL; + size_t key_size = 0; + + if (argc == 3) { + SN_OPT_ARGV_TYPEDARRAY(key, 2) + SN_ASSERT_MIN_LENGTH(key_size, crypto_generichash_KEYBYTES_MIN, "key") + SN_ASSERT_MAX_LENGTH(key_size, crypto_generichash_KEYBYTES_MAX, "key") + } + + crypto_generichash_state state; + crypto_generichash_init(&state, key_data, key_size, out_size); + for (uint32_t i = 0; i < batch_length; i++) { + napi_value element; + napi_get_element(env, argv[1], i, &element); + SN_TYPEDARRAY_ASSERT(buf, element, "batch element should be passed as a TypedArray") + SN_TYPEDARRAY(buf, element) + crypto_generichash_update(&state, buf_data, buf_size); + } + + SN_RETURN(crypto_generichash_final(&state, out_data, out_size), "batch failed") +} + +napi_value sn_crypto_generichash_keygen(napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_generichash_keygen) + + SN_ARGV_TYPEDARRAY(key, 0) + + SN_ASSERT_LENGTH(key_size, crypto_generichash_KEYBYTES, "key") + + crypto_generichash_keygen(key_data); + + return NULL; +} + +napi_value sn_crypto_generichash_init(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_generichash_init) + + SN_ARGV_BUFFER_CAST(crypto_generichash_state *, state, 0) + SN_ARGV_OPTS_TYPEDARRAY(key, 1) + SN_ARGV_UINT32(outlen, 2) + + SN_THROWS(state_size != sizeof(crypto_generichash_state), "state must be 'crypto_generichash_STATEBYTES' bytes") + + if (key_data != NULL) { + SN_ASSERT_MIN_LENGTH(key_size, crypto_generichash_KEYBYTES_MIN, "key") + SN_ASSERT_MAX_LENGTH(key_size, crypto_generichash_KEYBYTES_MAX, "key") + } + + SN_RETURN(crypto_generichash_init(state, key_data, key_size, outlen), "hash failed to initialise") +} + +napi_value sn_crypto_generichash_update(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_generichash_update) + + SN_ARGV_BUFFER_CAST(crypto_generichash_state *, state, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_THROWS(state_size != sizeof(crypto_generichash_state), "state must be 'crypto_generichash_STATEBYTES' bytes") + + SN_RETURN(crypto_generichash_update(state, in_data, in_size), "update failed") +} + +napi_value sn_crypto_generichash_final(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_generichash_final) + + SN_ARGV_BUFFER_CAST(crypto_generichash_state *, state, 0) + SN_ARGV_TYPEDARRAY(out, 1) + + SN_THROWS(state_size != sizeof(crypto_generichash_state), "state must be 'crypto_generichash_STATEBYTES' bytes") + + SN_RETURN(crypto_generichash_final(state, out_data, out_size), "digest failed") +} + +napi_value sn_crypto_box_keypair(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_box_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + + SN_RETURN(crypto_box_keypair(pk_data, sk_data), "keypair generation failed") +} + +napi_value sn_crypto_box_seed_keypair(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_box_seed_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + SN_ARGV_TYPEDARRAY(seed, 2) + + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(seed_size, crypto_box_SEEDBYTES, "seed") + + SN_RETURN(crypto_box_seed_keypair(pk_data, sk_data, seed_data), "keypair generation failed") +} + +napi_value sn_crypto_box_easy(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_box_easy) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(pk, 3) + SN_ARGV_TYPEDARRAY(sk, 4) + + SN_THROWS(c_size != m_size + crypto_box_MACBYTES, "c must be 'm.byteLength + crypto_box_MACBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_box_NONCEBYTES, "n") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + + SN_RETURN(crypto_box_easy(c_data, m_data, m_size, n_data, pk_data, sk_data), "crypto box failed") +} + +napi_value sn_crypto_box_open_easy(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_box_open_easy) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_TYPEDARRAY(c, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(pk, 3) + SN_ARGV_TYPEDARRAY(sk, 4) + + SN_THROWS(m_size != c_size - crypto_box_MACBYTES, "m must be 'c.byteLength - crypto_box_MACBYTES' bytes") + SN_ASSERT_MIN_LENGTH(c_size, crypto_box_MACBYTES, "c") + SN_ASSERT_LENGTH(n_size, crypto_box_NONCEBYTES, "n") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + + SN_RETURN_BOOLEAN(crypto_box_open_easy(m_data, c_data, c_size, n_data, pk_data, sk_data)) +} + +napi_value sn_crypto_box_detached(napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_box_detached) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(mac, 1) + SN_ARGV_TYPEDARRAY(m, 2) + SN_ARGV_TYPEDARRAY(n, 3) + SN_ARGV_TYPEDARRAY(pk, 4) + SN_ARGV_TYPEDARRAY(sk, 5) + + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_box_MACBYTES, "mac") + SN_ASSERT_LENGTH(n_size, crypto_box_NONCEBYTES, "n") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + + SN_RETURN(crypto_box_detached(c_data, mac_data, m_data, m_size, n_data, pk_data, sk_data), "signature failed") +} + +napi_value sn_crypto_box_open_detached(napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_box_open_detached) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_TYPEDARRAY(c, 1) + SN_ARGV_TYPEDARRAY(mac, 2) + SN_ARGV_TYPEDARRAY(n, 3) + SN_ARGV_TYPEDARRAY(pk, 4) + SN_ARGV_TYPEDARRAY(sk, 5) + + SN_THROWS(m_size != c_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_box_MACBYTES, "mac") + SN_ASSERT_LENGTH(n_size, crypto_box_NONCEBYTES, "n") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + + SN_RETURN_BOOLEAN(crypto_box_open_detached(m_data, c_data, mac_data, c_size, n_data, pk_data, sk_data)) +} + +napi_value sn_crypto_box_seal(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_box_seal) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(pk, 2) + + SN_THROWS(c_size != m_size + crypto_box_SEALBYTES, "c must be 'm.byteLength + crypto_box_SEALBYTES' bytes") + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + + SN_RETURN(crypto_box_seal(c_data, m_data, m_size, pk_data), "failed to create seal") +} + +napi_value sn_crypto_box_seal_open(napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_box_seal_open) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_TYPEDARRAY(c, 1) + SN_ARGV_TYPEDARRAY(pk, 2) + SN_ARGV_TYPEDARRAY(sk, 3) + + SN_THROWS(m_size != c_size - crypto_box_SEALBYTES, "m must be 'c.byteLength - crypto_box_SEALBYTES' bytes") + SN_ASSERT_MIN_LENGTH(c_size, crypto_box_SEALBYTES, "c") + SN_ASSERT_LENGTH(sk_size, crypto_box_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(pk_size, crypto_box_PUBLICKEYBYTES, "pk") + + SN_RETURN_BOOLEAN(crypto_box_seal_open(m_data, c_data, c_size, pk_data, sk_data)) +} + +napi_value sn_crypto_secretbox_easy(napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_secretbox_easy) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(c_size != m_size + crypto_secretbox_MACBYTES, "c must be 'm.byteLength + crypto_secretbox_MACBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_secretbox_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_secretbox_KEYBYTES, "k") + + SN_RETURN(crypto_secretbox_easy(c_data, m_data, m_size, n_data, k_data), "crypto secretbox failed") +} + +napi_value sn_crypto_secretbox_open_easy(napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_secretbox_open_easy) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_TYPEDARRAY(c, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(m_size != c_size - crypto_secretbox_MACBYTES, "m must be 'c - crypto_secretbox_MACBYTES' bytes") + SN_ASSERT_MIN_LENGTH(c_size, crypto_secretbox_MACBYTES, "c") + SN_ASSERT_LENGTH(n_size, crypto_secretbox_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_secretbox_KEYBYTES, "k") + + SN_RETURN_BOOLEAN(crypto_secretbox_open_easy(m_data, c_data, c_size, n_data, k_data)) +} + +napi_value sn_crypto_secretbox_detached(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_secretbox_detached) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(mac, 1) + SN_ARGV_TYPEDARRAY(m, 2) + SN_ARGV_TYPEDARRAY(n, 3) + SN_ARGV_TYPEDARRAY(k, 4) + + SN_THROWS(c_size != m_size, "c must 'm.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_secretbox_MACBYTES, "mac") + SN_ASSERT_LENGTH(n_size, crypto_secretbox_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_secretbox_KEYBYTES, "k") + + SN_RETURN(crypto_secretbox_detached(c_data, mac_data, m_data, m_size, n_data, k_data), "failed to open box") +} + +napi_value sn_crypto_secretbox_open_detached(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_secretbox_open_detached) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_TYPEDARRAY(c, 1) + SN_ARGV_TYPEDARRAY(mac, 2) + SN_ARGV_TYPEDARRAY(n, 3) + SN_ARGV_TYPEDARRAY(k, 4) + + SN_THROWS(m_size != c_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_secretbox_MACBYTES, "mac") + SN_ASSERT_LENGTH(n_size, crypto_secretbox_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_secretbox_KEYBYTES, "k") + + SN_RETURN_BOOLEAN(crypto_secretbox_open_detached(m_data, c_data, mac_data, c_size, n_data, k_data)) +} + +napi_value sn_crypto_stream(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(n_size, crypto_stream_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_KEYBYTES, "k") + + SN_RETURN(crypto_stream(c_data, c_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_xor(napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_stream_xor) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_KEYBYTES, "k") + + SN_RETURN(crypto_stream_xor(c_data, m_data, m_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_chacha20(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_chacha20) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_chacha20(c_data, c_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_chacha20_xor (napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_stream_chacha20_xor) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_chacha20_xor(c_data, m_data, m_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_chacha20_xor_ic(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_stream_chacha20_xor_ic) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_UINT32(ic, 3) + SN_ARGV_TYPEDARRAY(k, 4) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_chacha20_xor_ic(c_data, m_data, m_size, n_data, ic, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_chacha20_ietf(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_chacha20_ietf) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_ietf_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_ietf_KEYBYTES, "k") + + SN_RETURN(crypto_stream_chacha20_ietf(c_data, c_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_chacha20_ietf_xor(napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_stream_chacha20_ietf_xor) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_ietf_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_ietf_KEYBYTES, "k") + + SN_RETURN(crypto_stream_chacha20_ietf_xor(c_data, m_data, m_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_chacha20_ietf_xor_ic(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_stream_chacha20_ietf_xor_ic) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_UINT32(ic, 3) + SN_ARGV_TYPEDARRAY(k, 4) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_ietf_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_ietf_KEYBYTES, "k") + + SN_RETURN(crypto_stream_chacha20_ietf_xor_ic(c_data, m_data, m_size, n_data, ic, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_xchacha20(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_xchacha20) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(n_size, crypto_stream_xchacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_xchacha20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_xchacha20(c_data, c_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_xchacha20_xor (napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_stream_xchacha20_xor) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_xchacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_xchacha20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_xchacha20_xor(c_data, m_data, m_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_xchacha20_xor_ic(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_stream_xchacha20_xor_ic) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_UINT32(ic, 3) + SN_ARGV_TYPEDARRAY(k, 4) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_xchacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_xchacha20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_xchacha20_xor_ic(c_data, m_data, m_size, n_data, ic, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_salsa20(napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_salsa20) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(n_size, crypto_stream_salsa20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_salsa20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_salsa20(c_data, c_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_salsa20_xor (napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_stream_salsa20_xor) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_TYPEDARRAY(k, 3) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_salsa20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_salsa20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_salsa20_xor(c_data, m_data, m_size, n_data, k_data), "stream encryption failed") +} + +napi_value sn_crypto_stream_salsa20_xor_ic(napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_stream_salsa20_xor_ic) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(n, 2) + SN_ARGV_UINT32(ic, 3) + SN_ARGV_TYPEDARRAY(k, 4) + + SN_THROWS(c_size != m_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_salsa20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_salsa20_KEYBYTES, "k") + + SN_RETURN(crypto_stream_salsa20_xor_ic(c_data, m_data, m_size, n_data, ic, k_data), "stream encryption failed") +} + +napi_value sn_crypto_auth (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_auth) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(out_size, crypto_auth_BYTES, "out") + SN_ASSERT_LENGTH(k_size, crypto_auth_KEYBYTES, "k") + + SN_RETURN(crypto_auth(out_data, in_data, in_size, k_data), "failed to generate authentication tag") +} + +napi_value sn_crypto_auth_verify (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_auth_verify) + + SN_ARGV_TYPEDARRAY(h, 0) + SN_ARGV_TYPEDARRAY(in, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(h_size, crypto_auth_BYTES, "h") + SN_ASSERT_LENGTH(k_size, crypto_auth_KEYBYTES, "k") + + SN_RETURN_BOOLEAN(crypto_auth_verify(h_data, in_data, in_size, k_data)) +} + +napi_value sn_crypto_onetimeauth (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_onetimeauth) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(out_size, crypto_onetimeauth_BYTES, "out") + SN_ASSERT_LENGTH(k_size, crypto_onetimeauth_KEYBYTES, "k") + + SN_RETURN(crypto_onetimeauth(out_data, in_data, in_size, k_data), "failed to generate onetime authentication tag") +} + +napi_value sn_crypto_onetimeauth_init (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_onetimeauth_init) + + SN_ARGV_BUFFER_CAST(crypto_onetimeauth_state *, state, 0) + SN_ARGV_TYPEDARRAY(k, 1) + + SN_THROWS(state_size != sizeof(crypto_onetimeauth_state), "state must be 'crypto_onetimeauth_STATEBYTES' bytes") + SN_ASSERT_LENGTH(k_size, crypto_onetimeauth_KEYBYTES, "k") + + SN_RETURN(crypto_onetimeauth_init(state, k_data), "failed to initialise onetime authentication") +} + +napi_value sn_crypto_onetimeauth_update(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_onetimeauth_update) + + SN_ARGV_BUFFER_CAST(crypto_onetimeauth_state *, state, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_THROWS(state_size != sizeof(crypto_onetimeauth_state), "state must be 'crypto_onetimeauth_STATEBYTES' bytes") + + SN_RETURN(crypto_onetimeauth_update(state, in_data, in_size), "update failed") +} + +napi_value sn_crypto_onetimeauth_final(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_onetimeauth_final) + + SN_ARGV_BUFFER_CAST(crypto_onetimeauth_state *, state, 0) + SN_ARGV_TYPEDARRAY(out, 1) + + SN_THROWS(state_size != sizeof(crypto_onetimeauth_state), "state must be 'crypto_onetimeauth_STATEBYTES' bytes") + SN_ASSERT_LENGTH(out_size, crypto_onetimeauth_BYTES, "out") + + SN_RETURN(crypto_onetimeauth_final(state, out_data), "failed to generate authentication tag") +} + +napi_value sn_crypto_onetimeauth_verify (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_onetimeauth_verify) + + SN_ARGV_TYPEDARRAY(h, 0) + SN_ARGV_TYPEDARRAY(in, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(h_size, crypto_onetimeauth_BYTES, "h") + SN_ASSERT_LENGTH(k_size, crypto_onetimeauth_KEYBYTES, "k") + + SN_RETURN_BOOLEAN(crypto_onetimeauth_verify(h_data, in_data, in_size, k_data)) +} + +// CHECK: memlimit can be >32bit +napi_value sn_crypto_pwhash (napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_pwhash) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(passwd, 1) + SN_ARGV_TYPEDARRAY(salt, 2) + SN_ARGV_UINT64(opslimit, 3) + SN_ARGV_UINT64(memlimit, 4) + SN_ARGV_UINT8(alg, 5) + + SN_ASSERT_MIN_LENGTH(out_size, crypto_pwhash_BYTES_MIN, "out") + SN_ASSERT_MAX_LENGTH(out_size, crypto_pwhash_BYTES_MAX, "out") + SN_ASSERT_LENGTH(salt_size, crypto_pwhash_SALTBYTES, "salt") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_MEMLIMIT_MAX, "memlimit") + SN_THROWS(alg < 1 || alg > 2, "alg must be either Argon2i 1.3 or Argon2id 1.3") + + SN_RETURN(crypto_pwhash(out_data, out_size, passwd_data, passwd_size, salt_data, opslimit, memlimit, alg), "password hashing failed, check memory requirements.") +} + +napi_value sn_crypto_pwhash_str (napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_pwhash_str) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(passwd, 1) + SN_ARGV_UINT64(opslimit, 2) + SN_ARGV_UINT64(memlimit, 3) + + SN_ASSERT_LENGTH(out_size, crypto_pwhash_STRBYTES, "out") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_MEMLIMIT_MAX, "memlimit") + + SN_RETURN(crypto_pwhash_str(out_data, passwd_data, passwd_size, opslimit, memlimit), "password hashing failed, check memory requirements.") +} + +napi_value sn_crypto_pwhash_str_verify (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_pwhash_str_verify) + + SN_ARGV_TYPEDARRAY(str, 0) + SN_ARGV_TYPEDARRAY(passwd, 1) + + SN_ASSERT_LENGTH(str_size, crypto_pwhash_STRBYTES, "str") + + SN_RETURN_BOOLEAN(crypto_pwhash_str_verify(str_data, passwd_data, passwd_size)) +} + +// CHECK: returns 1, 0, -1 +napi_value sn_crypto_pwhash_str_needs_rehash (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_pwhash_str_needs_rehash) + + SN_ARGV_TYPEDARRAY(str, 0) + SN_ARGV_UINT64(opslimit, 1) + SN_ARGV_UINT64(memlimit, 2) + + SN_ASSERT_LENGTH(str_size, crypto_pwhash_STRBYTES, "str") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_MEMLIMIT_MAX, "memlimit") + + SN_RETURN_BOOLEAN_FROM_1(crypto_pwhash_str_needs_rehash(str_data, opslimit, memlimit)) +} + +// CHECK: memlimit can be >32bit +napi_value sn_crypto_pwhash_scryptsalsa208sha256 (napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_pwhash_scryptsalsa208sha256) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(passwd, 1) + SN_ARGV_TYPEDARRAY(salt, 2) + SN_ARGV_UINT64(opslimit, 3) + SN_ARGV_UINT64(memlimit, 4) + + SN_ASSERT_MIN_LENGTH(out_size, crypto_pwhash_scryptsalsa208sha256_BYTES_MIN, "out") + SN_ASSERT_MAX_LENGTH(out_size, crypto_pwhash_scryptsalsa208sha256_BYTES_MAX, "out") + SN_ASSERT_LENGTH(salt_size, crypto_pwhash_scryptsalsa208sha256_SALTBYTES, "salt") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX, "memlimit") + + SN_RETURN(crypto_pwhash_scryptsalsa208sha256(out_data, out_size, passwd_data, passwd_size, salt_data, opslimit, memlimit), "password hashing failed, check memory requirements.") +} + +napi_value sn_crypto_pwhash_scryptsalsa208sha256_str (napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_pwhash_scryptsalsa208sha256_str) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(passwd, 1) + SN_ARGV_UINT64(opslimit, 2) + SN_ARGV_UINT64(memlimit, 3) + + SN_ASSERT_LENGTH(out_size, crypto_pwhash_scryptsalsa208sha256_STRBYTES, "out") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX, "memlimit") + + SN_RETURN(crypto_pwhash_scryptsalsa208sha256_str(out_data, passwd_data, passwd_size, opslimit, memlimit), "password hashing failed, check memory requirements.") +} + +napi_value sn_crypto_pwhash_scryptsalsa208sha256_str_verify (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_pwhash_scryptsalsa208sha256_str_verify) + + SN_ARGV_TYPEDARRAY(str, 0) + SN_ARGV_TYPEDARRAY(passwd, 1) + + SN_ASSERT_LENGTH(str_size, crypto_pwhash_scryptsalsa208sha256_STRBYTES, "str") + + SN_RETURN_BOOLEAN(crypto_pwhash_scryptsalsa208sha256_str_verify(str_data, passwd_data, passwd_size)) +} + +napi_value sn_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_pwhash_scryptsalsa208sha256_str_needs_rehash) + + SN_ARGV_TYPEDARRAY(str, 0) + SN_ARGV_UINT64(opslimit, 1) + SN_ARGV_UINT64(memlimit, 2) + + SN_ASSERT_LENGTH(str_size, crypto_pwhash_scryptsalsa208sha256_STRBYTES, "str") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_MEMLIMIT_MAX, "memlimit") + + SN_RETURN_BOOLEAN_FROM_1(crypto_pwhash_scryptsalsa208sha256_str_needs_rehash(str_data, opslimit, memlimit)) +} + +napi_value sn_crypto_kx_keypair (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_kx_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + + SN_ASSERT_LENGTH(pk_size, crypto_kx_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_kx_SECRETKEYBYTES, "sk") + + SN_RETURN(crypto_kx_keypair(pk_data, sk_data), "failed to generate keypair") +} + +napi_value sn_crypto_kx_seed_keypair (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_kx_seed_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + SN_ARGV_TYPEDARRAY(seed, 2) + + SN_ASSERT_LENGTH(pk_size, crypto_kx_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(sk_size, crypto_kx_SECRETKEYBYTES, "sk") + SN_ASSERT_LENGTH(seed_size, crypto_kx_SEEDBYTES, "seed") + + SN_RETURN(crypto_kx_seed_keypair(pk_data, sk_data, seed_data), "failed to derive keypair from seed") +} + +napi_value sn_crypto_kx_client_session_keys (napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_kx_client_session_keys) + + SN_ARGV_OPTS_TYPEDARRAY(rx, 0) + SN_ARGV_OPTS_TYPEDARRAY(tx, 1) + + SN_THROWS(rx_data == NULL && tx_data == NULL, "at least one session key must be specified") + + SN_ARGV_TYPEDARRAY(client_pk, 2) + SN_ARGV_TYPEDARRAY(client_sk, 3) + SN_ARGV_TYPEDARRAY(server_pk, 4) + + SN_ASSERT_LENGTH(client_pk_size, crypto_kx_PUBLICKEYBYTES, "client_pk") + SN_ASSERT_LENGTH(client_sk_size, crypto_kx_SECRETKEYBYTES, "client_sk") + SN_ASSERT_LENGTH(server_pk_size, crypto_kx_PUBLICKEYBYTES, "server_pk") + + SN_THROWS(tx_size != crypto_kx_SESSIONKEYBYTES && tx_data != NULL, "transmitting key buffer must be 'crypto_kx_SESSIONKEYBYTES' bytes or null") + SN_THROWS(rx_size != crypto_kx_SESSIONKEYBYTES && rx_data != NULL, "receiving key buffer must be 'crypto_kx_SESSIONKEYBYTES' bytes or null") + + SN_RETURN(crypto_kx_client_session_keys(rx_data, tx_data, client_pk_data, client_sk_data, server_pk_data), "failed to derive session keys") +} + +napi_value sn_crypto_kx_server_session_keys (napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_kx_server_session_keys) + + SN_ARGV_OPTS_TYPEDARRAY(rx, 0) + SN_ARGV_OPTS_TYPEDARRAY(tx, 1) + + SN_THROWS(rx_data == NULL && tx_data == NULL, "at least one session key must be specified") + + SN_ARGV_TYPEDARRAY(server_pk, 2) + SN_ARGV_TYPEDARRAY(server_sk, 3) + SN_ARGV_TYPEDARRAY(client_pk, 4) + + SN_ASSERT_LENGTH(server_pk_size, crypto_kx_PUBLICKEYBYTES, "server_pk") + SN_ASSERT_LENGTH(server_sk_size, crypto_kx_SECRETKEYBYTES, "server_sk") + SN_ASSERT_LENGTH(client_pk_size, crypto_kx_PUBLICKEYBYTES, "client_pk") + + SN_THROWS(tx_size != crypto_kx_SESSIONKEYBYTES && tx_data != NULL, "transmitting key buffer must be 'crypto_kx_SESSIONKEYBYTES' bytes or null") + SN_THROWS(rx_size != crypto_kx_SESSIONKEYBYTES && rx_data != NULL, "receiving key buffer must be 'crypto_kx_SESSIONKEYBYTES' bytes or null") + + SN_RETURN(crypto_kx_server_session_keys(rx_data, tx_data, server_pk_data, server_sk_data, client_pk_data), "failed to derive session keys") +} + +napi_value sn_crypto_scalarmult_base (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_scalarmult_base) + + SN_ARGV_TYPEDARRAY(q, 0) + SN_ARGV_TYPEDARRAY(n, 1) + + SN_ASSERT_LENGTH(q_size, crypto_scalarmult_BYTES, "q") + SN_ASSERT_LENGTH(n_size, crypto_scalarmult_SCALARBYTES, "n") + + SN_RETURN(crypto_scalarmult_base(q_data, n_data), "failed to derive public key") +} + +napi_value sn_crypto_scalarmult (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_scalarmult) + + SN_ARGV_TYPEDARRAY(q, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(p, 2) + + SN_ASSERT_LENGTH(q_size, crypto_scalarmult_BYTES, "q") + SN_ASSERT_LENGTH(n_size, crypto_scalarmult_SCALARBYTES, "n") + SN_ASSERT_LENGTH(p_size, crypto_scalarmult_BYTES, "p") + + SN_RETURN(crypto_scalarmult(q_data, n_data, p_data), "failed to derive shared secret") +} + +napi_value sn_crypto_scalarmult_ed25519_base (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_scalarmult_ed25519_base) + + SN_ARGV_TYPEDARRAY(q, 0) + SN_ARGV_TYPEDARRAY(n, 1) + + SN_ASSERT_LENGTH(q_size, crypto_scalarmult_ed25519_BYTES, "q") + SN_ASSERT_LENGTH(n_size, crypto_scalarmult_ed25519_SCALARBYTES, "n") + + SN_RETURN(crypto_scalarmult_ed25519_base(q_data, n_data), "failed to derive public key") +} + +napi_value sn_crypto_scalarmult_ed25519 (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_scalarmult_ed25519) + + SN_ARGV_TYPEDARRAY(q, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(p, 2) + + SN_ASSERT_LENGTH(q_size, crypto_scalarmult_ed25519_BYTES, "q") + SN_ASSERT_LENGTH(n_size, crypto_scalarmult_ed25519_SCALARBYTES, "n") + SN_ASSERT_LENGTH(p_size, crypto_scalarmult_ed25519_BYTES, "p") + + SN_RETURN(crypto_scalarmult_ed25519(q_data, n_data, p_data), "failed to derive shared secret") +} + +napi_value sn_crypto_core_ed25519_is_valid_point (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_core_ed25519_is_valid_point) + + SN_ARGV_TYPEDARRAY(p, 0) + + SN_ASSERT_LENGTH(p_size, crypto_core_ed25519_BYTES, "p") + + SN_RETURN_BOOLEAN_FROM_1(crypto_core_ed25519_is_valid_point(p_data)) +} + +napi_value sn_crypto_core_ed25519_from_uniform (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_core_ed25519_from_uniform) + + SN_ARGV_TYPEDARRAY(p, 0) + SN_ARGV_TYPEDARRAY(r, 1) + + SN_ASSERT_LENGTH(p_size, crypto_core_ed25519_BYTES, "p") + SN_ASSERT_LENGTH(r_size, crypto_core_ed25519_UNIFORMBYTES, "r") + + SN_RETURN(crypto_core_ed25519_from_uniform(p_data, r_data), "could not generate curve point from input") +} + +napi_value sn_crypto_scalarmult_ed25519_base_noclamp (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_scalarmult_ed25519_base_noclamp) + + SN_ARGV_TYPEDARRAY(q, 0) + SN_ARGV_TYPEDARRAY(n, 1) + + SN_ASSERT_LENGTH(q_size, crypto_scalarmult_ed25519_BYTES, "q") + SN_ASSERT_LENGTH(n_size, crypto_scalarmult_ed25519_SCALARBYTES, "n") + + SN_RETURN(crypto_scalarmult_ed25519_base_noclamp(q_data, n_data), "failed to derive public key") +} + +napi_value sn_crypto_scalarmult_ed25519_noclamp (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_scalarmult_ed25519_noclamp) + + SN_ARGV_TYPEDARRAY(q, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(p, 2) + + SN_ASSERT_LENGTH(q_size, crypto_scalarmult_ed25519_BYTES, "q") + SN_ASSERT_LENGTH(n_size, crypto_scalarmult_ed25519_SCALARBYTES, "n") + SN_ASSERT_LENGTH(p_size, crypto_scalarmult_ed25519_BYTES, "p") + + SN_RETURN(crypto_scalarmult_ed25519_noclamp(q_data, n_data, p_data), "failed to derive shared secret") +} + +napi_value sn_crypto_core_ed25519_add (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_core_ed25519_add) + + SN_ARGV_TYPEDARRAY(r, 0) + SN_ARGV_TYPEDARRAY(p, 1) + SN_ARGV_TYPEDARRAY(q, 2) + + SN_ASSERT_LENGTH(r_size, crypto_core_ed25519_BYTES, "r") + SN_ASSERT_LENGTH(p_size, crypto_core_ed25519_BYTES, "p") + SN_ASSERT_LENGTH(q_size, crypto_core_ed25519_BYTES, "q") + + SN_RETURN(crypto_core_ed25519_add(r_data, p_data, q_data), "could not add curve points") +} + +napi_value sn_crypto_core_ed25519_sub (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_core_ed25519_sub) + + SN_ARGV_TYPEDARRAY(r, 0) + SN_ARGV_TYPEDARRAY(p, 1) + SN_ARGV_TYPEDARRAY(q, 2) + + SN_ASSERT_LENGTH(r_size, crypto_core_ed25519_BYTES, "r") + SN_ASSERT_LENGTH(p_size, crypto_core_ed25519_BYTES, "p") + SN_ASSERT_LENGTH(q_size, crypto_core_ed25519_BYTES, "q") + + SN_RETURN(crypto_core_ed25519_sub(r_data, p_data, q_data), "could not add curve points") +} + +napi_value sn_crypto_core_ed25519_scalar_random (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_core_ed25519_scalar_random) + + SN_ARGV_TYPEDARRAY(r, 0) + + SN_ASSERT_LENGTH(r_size, crypto_core_ed25519_SCALARBYTES, "r") + + crypto_core_ed25519_scalar_random(r_data); + + return NULL; +} + +napi_value sn_crypto_core_ed25519_scalar_reduce (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_core_ed25519_scalar_reduce) + + SN_ARGV_TYPEDARRAY(r, 0) + SN_ARGV_TYPEDARRAY(s, 1) + + SN_ASSERT_LENGTH(r_size, crypto_core_ed25519_SCALARBYTES, "r") + SN_ASSERT_LENGTH(s_size, crypto_core_ed25519_NONREDUCEDSCALARBYTES, "s") + + crypto_core_ed25519_scalar_reduce(r_data, s_data); + + return NULL; +} + +napi_value sn_crypto_core_ed25519_scalar_invert (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_core_ed25519_scalar_invert) + + SN_ARGV_TYPEDARRAY(recip, 0) + SN_ARGV_TYPEDARRAY(s, 1) + + SN_ASSERT_LENGTH(recip_size, crypto_core_ed25519_SCALARBYTES, "recip") + SN_ASSERT_LENGTH(s_size, crypto_core_ed25519_SCALARBYTES, "s") + + crypto_core_ed25519_scalar_invert(recip_data, s_data); + + return NULL; +} + +napi_value sn_crypto_core_ed25519_scalar_negate (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_core_ed25519_scalar_negate) + + SN_ARGV_TYPEDARRAY(neg, 0) + SN_ARGV_TYPEDARRAY(s, 1) + + SN_ASSERT_LENGTH(neg_size, crypto_core_ed25519_SCALARBYTES, "neg") + SN_ASSERT_LENGTH(s_size, crypto_core_ed25519_SCALARBYTES, "s") + + crypto_core_ed25519_scalar_negate(neg_data, s_data); + + return NULL; +} + +napi_value sn_crypto_core_ed25519_scalar_complement (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_core_ed25519_scalar_complement) + + SN_ARGV_TYPEDARRAY(comp, 0) + SN_ARGV_TYPEDARRAY(s, 1) + + SN_ASSERT_LENGTH(comp_size, crypto_core_ed25519_SCALARBYTES, "comp") + SN_ASSERT_LENGTH(s_size, crypto_core_ed25519_SCALARBYTES, "s") + + crypto_core_ed25519_scalar_complement(comp_data, s_data); + + return NULL; +} + +napi_value sn_crypto_core_ed25519_scalar_add (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_core_ed25519_scalar_add) + + SN_ARGV_TYPEDARRAY(z, 0) + SN_ARGV_TYPEDARRAY(x, 1) + SN_ARGV_TYPEDARRAY(y, 2) + + SN_ASSERT_LENGTH(z_size, crypto_core_ed25519_SCALARBYTES, "z") + SN_ASSERT_LENGTH(x_size, crypto_core_ed25519_SCALARBYTES, "x") + SN_ASSERT_LENGTH(y_size, crypto_core_ed25519_SCALARBYTES, "y") + + crypto_core_ed25519_scalar_add(z_data, x_data, y_data); + + return NULL; +} + +napi_value sn_crypto_core_ed25519_scalar_sub (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_core_ed25519_scalar_sub) + + SN_ARGV_TYPEDARRAY(z, 0) + SN_ARGV_TYPEDARRAY(x, 1) + SN_ARGV_TYPEDARRAY(y, 2) + + SN_ASSERT_LENGTH(z_size, crypto_core_ed25519_SCALARBYTES, "z") + SN_ASSERT_LENGTH(x_size, crypto_core_ed25519_SCALARBYTES, "x") + SN_ASSERT_LENGTH(y_size, crypto_core_ed25519_SCALARBYTES, "y") + + crypto_core_ed25519_scalar_sub(z_data, x_data, y_data); + + return NULL; +} + +napi_value sn_crypto_shorthash (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_shorthash) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_ASSERT_LENGTH(out_size, crypto_shorthash_BYTES, "out") + SN_ASSERT_LENGTH(k_size, crypto_shorthash_KEYBYTES, "k") + + SN_RETURN(crypto_shorthash(out_data, in_data, in_size, k_data), "could not compute hash") +} + +napi_value sn_crypto_kdf_keygen (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_kdf_keygen) + + SN_ARGV_TYPEDARRAY(key, 0) + + SN_ASSERT_LENGTH(key_size, crypto_kdf_KEYBYTES, "key") + + crypto_kdf_keygen(key_data); + + return NULL; +} + +napi_value sn_crypto_kdf_derive_from_key (napi_env env, napi_callback_info info) { + SN_ARGV(4, crypto_kdf_derive_from_key) + + SN_ARGV_TYPEDARRAY(subkey, 0) + SN_ARGV_UINT64(subkey_id, 1) + SN_ARGV_TYPEDARRAY(ctx, 2) + SN_ARGV_TYPEDARRAY(key, 3) + + SN_ASSERT_MIN_LENGTH(subkey_size, crypto_kdf_BYTES_MIN, "subkey") + SN_ASSERT_MAX_LENGTH(subkey_size, crypto_kdf_BYTES_MAX, "subkey") + SN_ASSERT_LENGTH(ctx_size, crypto_kdf_CONTEXTBYTES, "ctx") + SN_ASSERT_LENGTH(key_size, crypto_kdf_KEYBYTES, "key") + + SN_RETURN(crypto_kdf_derive_from_key(subkey_data, subkey_size, subkey_id, ctx_data, key_data), "could not generate key") +} + +napi_value sn_crypto_hash (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha256) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_ASSERT_LENGTH(out_size, crypto_hash_BYTES, "out") + + SN_RETURN(crypto_hash(out_data, in_data, in_size), "could not compute hash") +} + +napi_value sn_crypto_hash_sha256 (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha256) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_ASSERT_LENGTH(out_size, crypto_hash_sha256_BYTES, "out") + + SN_RETURN(crypto_hash_sha256(out_data, in_data, in_size), "could not compute hash") +} + +napi_value sn_crypto_hash_sha256_init (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_hash_sha256_init) + + SN_ARGV_BUFFER_CAST(crypto_hash_sha256_state *, state, 0) + + SN_THROWS(state_size != sizeof(crypto_hash_sha256_state), "state must be 'crypto_hash_sha256_STATEBYTES' bytes") + + SN_RETURN(crypto_hash_sha256_init(state), "failed to initialise sha256") +} + +napi_value sn_crypto_hash_sha256_update(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha256_update) + + SN_ARGV_BUFFER_CAST(crypto_hash_sha256_state *, state, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_THROWS(state_size != sizeof(crypto_hash_sha256_state), "state must be 'crypto_hash_sha256_STATEBYTES' bytes") + + SN_RETURN(crypto_hash_sha256_update(state, in_data, in_size), "update failed") +} + +napi_value sn_crypto_hash_sha256_final(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha256_final) + + SN_ARGV_BUFFER_CAST(crypto_hash_sha256_state *, state, 0) + SN_ARGV_TYPEDARRAY(out, 1) + + SN_THROWS(state_size != sizeof(crypto_hash_sha256_state), "state must be 'crypto_hash_sha256_STATEBYTES' bytes") + SN_ASSERT_LENGTH(out_size, crypto_hash_sha256_BYTES, "state") + + SN_RETURN(crypto_hash_sha256_final(state, out_data), "failed to finalise") +} + +napi_value sn_crypto_hash_sha512 (napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha512) + + SN_ARGV_TYPEDARRAY(out, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_ASSERT_LENGTH(out_size, crypto_hash_sha512_BYTES, "out") + + SN_RETURN(crypto_hash_sha512(out_data, in_data, in_size), "could not compute hash") +} + +napi_value sn_crypto_hash_sha512_init (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_hash_sha512_init) + + SN_ARGV_BUFFER_CAST(crypto_hash_sha512_state *, state, 0) + + SN_THROWS(state_size != sizeof(crypto_hash_sha512_state), "state must be 'crypto_hash_sha256_STATEBYTES' bytes") + + SN_RETURN(crypto_hash_sha512_init(state), "failed to initialise sha512") +} + +napi_value sn_crypto_hash_sha512_update(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha512_update) + + SN_ARGV_BUFFER_CAST(crypto_hash_sha512_state *, state, 0) + SN_ARGV_TYPEDARRAY(in, 1) + + SN_THROWS(state_size != sizeof(crypto_hash_sha512_state), "state must be 'crypto_hash_sha256_STATEBYTES' bytes") + + SN_RETURN(crypto_hash_sha512_update(state, in_data, in_size), "update failed") +} + +napi_value sn_crypto_hash_sha512_final(napi_env env, napi_callback_info info) { + SN_ARGV(2, crypto_hash_sha512_final) + + SN_ARGV_BUFFER_CAST(crypto_hash_sha512_state *, state, 0) + SN_ARGV_TYPEDARRAY(out, 1) + + SN_THROWS(state_size != sizeof(crypto_hash_sha512_state), "state must be 'crypto_hash_sha256_STATEBYTES' bytes") + SN_ASSERT_LENGTH(out_size, crypto_hash_sha512_BYTES, "out") + + SN_RETURN(crypto_hash_sha512_final(state, out_data), "failed to finalise hash") +} + +napi_value sn_crypto_aead_xchacha20poly1305_ietf_keygen (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_aead_xchacha20poly1305_ietf_keygen) + + SN_ARGV_TYPEDARRAY(k, 0) + + SN_ASSERT_LENGTH(k_size, crypto_aead_xchacha20poly1305_ietf_KEYBYTES, "k") + + crypto_aead_xchacha20poly1305_ietf_keygen(k_data); + return NULL; +} + +napi_value sn_crypto_aead_xchacha20poly1305_ietf_encrypt (napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_aead_xchacha20poly1305_ietf_encrypt) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_OPTS_TYPEDARRAY(ad, 2) + SN_ARGV_CHECK_NULL(nsec, 3) + SN_ARGV_TYPEDARRAY(npub, 4) + SN_ARGV_TYPEDARRAY(k, 5) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(c_size != m_size + crypto_aead_xchacha20poly1305_ietf_ABYTES, "c must 'm.byteLength + crypto_aead_xchacha20poly1305_ietf_ABYTES' bytes") + SN_THROWS(c_size > 0xffffffff, "c.byteLength must be a 32bit integer") + SN_ASSERT_LENGTH(npub_size, crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_xchacha20poly1305_ietf_KEYBYTES, "k") + + unsigned long long clen; + SN_CALL(crypto_aead_xchacha20poly1305_ietf_encrypt(c_data, &clen, m_data, m_size, ad_data, ad_size, NULL, npub_data, k_data), "could not encrypt data") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) clen, &result), "") + return result; +} + +napi_value sn_crypto_aead_xchacha20poly1305_ietf_decrypt (napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_aead_xchacha20poly1305_ietf_decrypt) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_CHECK_NULL(nsec, 1) + SN_ARGV_TYPEDARRAY(c, 2) + SN_ARGV_OPTS_TYPEDARRAY(ad, 3) + SN_ARGV_TYPEDARRAY(npub, 4) + SN_ARGV_TYPEDARRAY(k, 5) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(m_size != c_size - crypto_aead_xchacha20poly1305_ietf_ABYTES, "m must 'c.byteLength - crypto_aead_xchacha20poly1305_ietf_ABYTES' bytes") + SN_ASSERT_LENGTH(npub_size, crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_xchacha20poly1305_ietf_KEYBYTES, "k") + SN_THROWS(m_size > 0xffffffff, "m.byteLength must be a 32bit integer") + + unsigned long long mlen; + SN_CALL(crypto_aead_xchacha20poly1305_ietf_decrypt(m_data, &mlen, NULL, c_data, c_size, ad_data, ad_size, npub_data, k_data), "could not verify data") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) mlen, &result), "") + return result; +} + +napi_value sn_crypto_aead_xchacha20poly1305_ietf_encrypt_detached (napi_env env, napi_callback_info info) { + SN_ARGV(7, crypto_aead_xchacha20poly1305_ietf_encrypt_detached) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(mac, 1) + SN_ARGV_TYPEDARRAY(m, 2) + SN_ARGV_OPTS_TYPEDARRAY(ad, 3) + SN_ARGV_CHECK_NULL(nsec, 4) + SN_ARGV_TYPEDARRAY(npub, 5) + SN_ARGV_TYPEDARRAY(k, 6) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_aead_xchacha20poly1305_ietf_ABYTES, "mac") + SN_ASSERT_LENGTH(npub_size, crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_xchacha20poly1305_ietf_KEYBYTES, "k") + + unsigned long long maclen; + SN_CALL(crypto_aead_xchacha20poly1305_ietf_encrypt_detached(c_data, mac_data, &maclen, m_data, m_size, ad_data, ad_size, NULL, npub_data, k_data), "could not encrypt data") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) maclen, &result), "") + return result; +} + +napi_value sn_crypto_aead_xchacha20poly1305_ietf_decrypt_detached (napi_env env, napi_callback_info info) { + SN_ARGV(7, crypto_aead_xchacha20poly1305_ietf_decrypt_detached) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_CHECK_NULL(nsec, 1) + SN_ARGV_TYPEDARRAY(c, 2) + SN_ARGV_TYPEDARRAY(mac, 3) + SN_ARGV_OPTS_TYPEDARRAY(ad, 4) + SN_ARGV_TYPEDARRAY(npub, 5) + SN_ARGV_TYPEDARRAY(k, 6) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(m_size != c_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_aead_xchacha20poly1305_ietf_ABYTES, "mac") + SN_ASSERT_LENGTH(npub_size, crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_xchacha20poly1305_ietf_KEYBYTES, "k") + + SN_RETURN(crypto_aead_xchacha20poly1305_ietf_decrypt_detached(m_data, NULL, c_data, c_size, mac_data, ad_data, ad_size, npub_data, k_data), "could not verify data") +} + +napi_value sn_crypto_aead_chacha20poly1305_ietf_keygen (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_aead_chacha20poly1305_ietf_keygen) + + SN_ARGV_TYPEDARRAY(k, 0) + + SN_ASSERT_LENGTH(k_size, crypto_aead_chacha20poly1305_ietf_KEYBYTES, "k") + + crypto_aead_chacha20poly1305_ietf_keygen(k_data); + return NULL; +} + +napi_value sn_crypto_aead_chacha20poly1305_ietf_encrypt (napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_aead_chacha20poly1305_ietf_encrypt) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_OPTS_TYPEDARRAY(ad, 2) + SN_ARGV_CHECK_NULL(nsec, 3) + SN_ARGV_TYPEDARRAY(npub, 4) + SN_ARGV_TYPEDARRAY(k, 5) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(c_size != m_size + crypto_aead_chacha20poly1305_ietf_ABYTES, "c must 'm.byteLength + crypto_aead_chacha20poly1305_ietf_ABYTES' bytes") + SN_THROWS(c_size > 0xffffffff, "c.byteLength must be a 32bit integer") + SN_ASSERT_LENGTH(npub_size, crypto_aead_chacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_chacha20poly1305_ietf_KEYBYTES, "k") + + unsigned long long clen; + SN_CALL(crypto_aead_chacha20poly1305_ietf_encrypt(c_data, &clen, m_data, m_size, ad_data, ad_size, NULL, npub_data, k_data), "could not encrypt data") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) clen, &result), "") + return result; +} + +napi_value sn_crypto_aead_chacha20poly1305_ietf_decrypt (napi_env env, napi_callback_info info) { + SN_ARGV(6, crypto_aead_chacha20poly1305_ietf_decrypt) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_CHECK_NULL(nsec, 1) + SN_ARGV_TYPEDARRAY(c, 2) + SN_ARGV_OPTS_TYPEDARRAY(ad, 3) + SN_ARGV_TYPEDARRAY(npub, 4) + SN_ARGV_TYPEDARRAY(k, 5) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(m_size != c_size - crypto_aead_chacha20poly1305_ietf_ABYTES, "m must 'c.byteLength - crypto_aead_chacha20poly1305_ietf_ABYTES' bytes") + SN_ASSERT_LENGTH(npub_size, crypto_aead_chacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_chacha20poly1305_ietf_KEYBYTES, "k") + SN_THROWS(m_size > 0xffffffff, "m.byteLength must be a 32bit integer") + + unsigned long long mlen; + SN_CALL(crypto_aead_chacha20poly1305_ietf_decrypt(m_data, &mlen, NULL, c_data, c_size, ad_data, ad_size, npub_data, k_data), "could not verify data") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) mlen, &result), "") + return result; +} + +napi_value sn_crypto_aead_chacha20poly1305_ietf_encrypt_detached (napi_env env, napi_callback_info info) { + SN_ARGV(7, crypto_aead_chacha20poly1305_ietf_encrypt_detached) + + SN_ARGV_TYPEDARRAY(c, 0) + SN_ARGV_TYPEDARRAY(mac, 1) + SN_ARGV_TYPEDARRAY(m, 2) + SN_ARGV_OPTS_TYPEDARRAY(ad, 3) + SN_ARGV_CHECK_NULL(nsec, 4) + SN_ARGV_TYPEDARRAY(npub, 5) + SN_ARGV_TYPEDARRAY(k, 6) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_aead_chacha20poly1305_ietf_ABYTES, "mac") + SN_ASSERT_LENGTH(npub_size, crypto_aead_chacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_chacha20poly1305_ietf_KEYBYTES, "k") + + unsigned long long maclen; + SN_CALL(crypto_aead_chacha20poly1305_ietf_encrypt_detached(c_data, mac_data, &maclen, m_data, m_size, ad_data, ad_size, NULL, npub_data, k_data), "could not encrypt data") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) maclen, &result), "") + return result; +} + +napi_value sn_crypto_aead_chacha20poly1305_ietf_decrypt_detached (napi_env env, napi_callback_info info) { + SN_ARGV(7, crypto_aead_chacha20poly1305_ietf_decrypt_detached) + + SN_ARGV_TYPEDARRAY(m, 0) + SN_ARGV_CHECK_NULL(nsec, 1) + SN_ARGV_TYPEDARRAY(c, 2) + SN_ARGV_TYPEDARRAY(mac, 3) + SN_ARGV_OPTS_TYPEDARRAY(ad, 4) + SN_ARGV_TYPEDARRAY(npub, 5) + SN_ARGV_TYPEDARRAY(k, 6) + + SN_THROWS(!nsec_is_null, "nsec must always be set to null") + + SN_THROWS(m_size != c_size, "m must be 'c.byteLength' bytes") + SN_ASSERT_LENGTH(mac_size, crypto_aead_chacha20poly1305_ietf_ABYTES, "mac") + SN_ASSERT_LENGTH(npub_size, crypto_aead_chacha20poly1305_ietf_NPUBBYTES, "npub") + SN_ASSERT_LENGTH(k_size, crypto_aead_chacha20poly1305_ietf_KEYBYTES, "k") + + SN_RETURN(crypto_aead_chacha20poly1305_ietf_decrypt_detached(m_data, NULL, c_data, c_size, mac_data, ad_data, ad_size, npub_data, k_data), "could not verify data") +} + +napi_value sn_crypto_secretstream_xchacha20poly1305_keygen (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_secretstream_xchacha20poly1305_keygen) + + SN_ARGV_TYPEDARRAY(k, 0) + + SN_ASSERT_LENGTH(k_size, crypto_secretstream_xchacha20poly1305_KEYBYTES, "k") + + crypto_secretstream_xchacha20poly1305_keygen(k_data); + + return NULL; +} + +napi_value sn_crypto_secretstream_xchacha20poly1305_init_push (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_secretstream_xchacha20poly1305_init_push) + + SN_ARGV_BUFFER_CAST(crypto_secretstream_xchacha20poly1305_state *, state, 0) + SN_ARGV_TYPEDARRAY(header, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(crypto_secretstream_xchacha20poly1305_state), "state must be 'crypto_secretstream_xchacha20poly1305_STATEBYTES' bytes") + SN_ASSERT_LENGTH(header_size, crypto_secretstream_xchacha20poly1305_HEADERBYTES, "header") + SN_ASSERT_LENGTH(k_size, crypto_secretstream_xchacha20poly1305_KEYBYTES, "k") + + SN_RETURN(crypto_secretstream_xchacha20poly1305_init_push(state, header_data, k_data), "initial push failed") +} + +napi_value sn_crypto_secretstream_xchacha20poly1305_push (napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_secretstream_xchacha20poly1305_push) + + SN_ARGV_BUFFER_CAST(crypto_secretstream_xchacha20poly1305_state *, state, 0) + SN_ARGV_TYPEDARRAY(c, 1) + SN_ARGV_TYPEDARRAY(m, 2) + SN_ARGV_OPTS_TYPEDARRAY(ad, 3) + SN_ARGV_UINT8(tag, 4) + + SN_THROWS(state_size != sizeof(crypto_secretstream_xchacha20poly1305_state), "state must be state must be 'crypto_secretstream_xchacha20poly1305_STATEBYTES' bytes") + SN_ASSERT_MAX_LENGTH(m_size, crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX, "m") + SN_THROWS(c_size != m_size + crypto_secretstream_xchacha20poly1305_ABYTES, "c must be 'm.byteLength + crypto_secretstream_xchacha20poly1305_ABYTES' bytes") + SN_THROWS(c_size > 0xffffffff, "c.byteLength must be a 32bit integer") + + unsigned long long clen; + SN_CALL(crypto_secretstream_xchacha20poly1305_push(state, c_data, &clen, m_data, m_size, ad_data, ad_size, tag), "push failed") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) clen, &result), "") + return result; +} + +napi_value sn_crypto_secretstream_xchacha20poly1305_init_pull (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_secretstream_xchacha20poly1305_init_pull) + + SN_ARGV_BUFFER_CAST(crypto_secretstream_xchacha20poly1305_state *, state, 0) + SN_ARGV_TYPEDARRAY(header, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(crypto_secretstream_xchacha20poly1305_state), "state must be 'crypto_secretstream_xchacha20poly1305_STATEBYTES' bytes") + SN_ASSERT_LENGTH(header_size, crypto_secretstream_xchacha20poly1305_HEADERBYTES, "header") + SN_ASSERT_LENGTH(k_size, crypto_secretstream_xchacha20poly1305_KEYBYTES, "k") + + SN_RETURN(crypto_secretstream_xchacha20poly1305_init_pull(state, header_data, k_data), "initial pull failed") +} + +napi_value sn_crypto_secretstream_xchacha20poly1305_pull (napi_env env, napi_callback_info info) { + SN_ARGV(5, crypto_secretstream_xchacha20poly1305_pull) + + SN_ARGV_BUFFER_CAST(crypto_secretstream_xchacha20poly1305_state *, state, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(tag, 2) + SN_ARGV_TYPEDARRAY(c, 3) + SN_ARGV_OPTS_TYPEDARRAY(ad, 4) + + SN_THROWS(state_size != sizeof(crypto_secretstream_xchacha20poly1305_state), "state must be 'crypto_secretstream_xchacha20poly1305_STATEBYTES' bytes") + SN_ASSERT_MIN_LENGTH(c_size, crypto_secretstream_xchacha20poly1305_ABYTES, "c") + SN_ASSERT_LENGTH(tag_size, 1, "tag") + SN_THROWS(m_size != c_size - crypto_secretstream_xchacha20poly1305_ABYTES, "m must be 'c.byteLength - crypto_secretstream_xchacha20poly1305_ABYTES") + SN_THROWS(m_size > 0xffffffff, "m.byteLength must be a 32bit integer") + + unsigned long long mlen; + SN_CALL(crypto_secretstream_xchacha20poly1305_pull(state, m_data, &mlen, tag_data, c_data, c_size, ad_data, ad_size), "pull failed") + + napi_value result; + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) mlen, &result), "") + return result; +} + +napi_value sn_crypto_secretstream_xchacha20poly1305_rekey (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_secretstream_xchacha20poly1305_rekey) + + SN_ARGV_BUFFER_CAST(crypto_secretstream_xchacha20poly1305_state *, state, 0) + + SN_THROWS(state_size != sizeof(crypto_secretstream_xchacha20poly1305_state), "state must be 'crypto_secretstream_xchacha20poly1305_STATEBYTES' bytes") + + crypto_secretstream_xchacha20poly1305_rekey(state); + + return NULL; +} + +typedef struct sn_async_task_t { + uv_work_t task; + + enum { + sn_async_task_promise, + sn_async_task_callback + } type; + + void *req; + int code; + + napi_deferred deferred; + napi_ref cb; +} sn_async_task_t; + +typedef struct sn_async_pwhash_request { + napi_env env; + napi_ref out_ref; + unsigned char *out_data; + size_t out_size; + napi_ref pwd_ref; + const char *pwd_data; + size_t pwd_size; + napi_ref salt_ref; + unsigned char *salt; + uint32_t opslimit; + uint32_t memlimit; + uint32_t alg; +} sn_async_pwhash_request; + +static void async_pwhash_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_request *req = (sn_async_pwhash_request *) task->req; + task->code = crypto_pwhash(req->out_data, + req->out_size, + req->pwd_data, + req->pwd_size, + req->salt, + req->opslimit, + req->memlimit, + req->alg); +} + +static void async_pwhash_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_request *req = (sn_async_pwhash_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + SN_ASYNC_COMPLETE("failed to compute password hash") + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->out_ref); + napi_delete_reference(req->env, req->pwd_ref); + napi_delete_reference(req->env, req->salt_ref); + + free(req); + free(task); +} + +napi_value sn_crypto_pwhash_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(6, 7, crypto_pwhash_async) + + SN_ARGV_BUFFER_CAST(unsigned char *, out, 0) + SN_ARGV_BUFFER_CAST(char *, pwd, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, salt, 2) + SN_ARGV_UINT64(opslimit, 3) + SN_ARGV_UINT64(memlimit, 4) + SN_ARGV_UINT8(alg, 5) + + SN_ASSERT_MIN_LENGTH(out_size, crypto_pwhash_BYTES_MIN, "out") + SN_ASSERT_MAX_LENGTH(out_size, crypto_pwhash_BYTES_MAX, "out") + SN_ASSERT_LENGTH(salt_size, crypto_pwhash_SALTBYTES, "salt") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_MEMLIMIT_MAX, "memlimit") + SN_THROWS(alg < 1 || alg > 2, "alg must be either Argon2i 1.3 or Argon2id 1.3") + + sn_async_pwhash_request *req = (sn_async_pwhash_request *) malloc(sizeof(sn_async_pwhash_request)); + + req->env = env; + req->out_data = out; + req->out_size = out_size; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + req->salt = salt; + req->opslimit = opslimit; + req->memlimit = memlimit; + req->alg = alg; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(6) + + SN_STATUS_THROWS(napi_create_reference(env, out_argv, 1, &req->out_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, salt_argv, 1, &req->salt_ref), "") + + SN_QUEUE_TASK(task, async_pwhash_execute, async_pwhash_complete) + + return promise; +} + +typedef struct sn_async_pwhash_str_request { + uv_work_t task; + napi_env env; + napi_ref out_ref; + char *out_data; + napi_ref pwd_ref; + const char *pwd_data; + size_t pwd_size; + uint32_t opslimit; + uint32_t memlimit; +} sn_async_pwhash_str_request; + +static void async_pwhash_str_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_str_request *req = (sn_async_pwhash_str_request *) task->req; + task->code = crypto_pwhash_str(req->out_data, + req->pwd_data, + req->pwd_size, + req->opslimit, + req->memlimit); +} + +static void async_pwhash_str_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_str_request *req = (sn_async_pwhash_str_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + SN_ASYNC_COMPLETE("failed to compute password hash") + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->out_ref); + napi_delete_reference(req->env, req->pwd_ref); + + free(req); + free(task); +} + +napi_value sn_crypto_pwhash_str_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(4, 5, crypto_pwhash_str_async) + + SN_ARGV_BUFFER_CAST(char *, out, 0) + SN_ARGV_BUFFER_CAST(char *, pwd, 1) + SN_ARGV_UINT64(opslimit, 2) + SN_ARGV_UINT64(memlimit, 3) + + SN_ASSERT_LENGTH(out_size, crypto_pwhash_STRBYTES, "out") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_MEMLIMIT_MAX, "memlimit") + + sn_async_pwhash_str_request *req = (sn_async_pwhash_str_request *) malloc(sizeof(sn_async_pwhash_str_request)); + req->env = env; + req->out_data = out; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + req->opslimit = opslimit; + req->memlimit = memlimit; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(4) + + SN_STATUS_THROWS(napi_create_reference(env, out_argv, 1, &req->out_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + + SN_QUEUE_TASK(task, async_pwhash_str_execute, async_pwhash_str_complete) + + return promise; +} + +typedef struct sn_async_pwhash_str_verify_request { + uv_work_t task; + napi_env env; + napi_ref str_ref; + char *str_data; + napi_ref pwd_ref; + const char *pwd_data; + size_t pwd_size; +} sn_async_pwhash_str_verify_request; + +static void async_pwhash_str_verify_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_str_verify_request *req = (sn_async_pwhash_str_verify_request *) task->req; + task->code = crypto_pwhash_str_verify(req->str_data, req->pwd_data, req->pwd_size); +} + +static void async_pwhash_str_verify_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_str_verify_request *req = (sn_async_pwhash_str_verify_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + napi_value argv[2]; + + // Due to the way that crypto_pwhash_str_verify signals error different + // from a verification mismatch, we will count all errors as mismatch. + // The other possible error is wrong argument sizes, which is protected + // by macros above + napi_get_null(req->env, &argv[0]); + napi_get_boolean(req->env, task->code == 0, &argv[1]); + + switch (task->type) { + case sn_async_task_promise: { + napi_resolve_deferred(req->env, task->deferred, argv[1]); + task->deferred = NULL; + break; + } + + case sn_async_task_callback: { + napi_value callback; + napi_get_reference_value(req->env, task->cb, &callback); + + napi_value return_val; + SN_CALL_FUNCTION(req->env, global, callback, 2, argv, &return_val) + break; + } + } + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->str_ref); + napi_delete_reference(req->env, req->pwd_ref); + + free(req); + free(task); +} + +napi_value sn_crypto_pwhash_str_verify_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(2, 3, crypto_pwhash_str_async) + + SN_ARGV_BUFFER_CAST(char *, str, 0) + SN_ARGV_BUFFER_CAST(char *, pwd, 1) + + SN_ASSERT_LENGTH(str_size, crypto_pwhash_STRBYTES, "str") + + sn_async_pwhash_str_verify_request *req = (sn_async_pwhash_str_verify_request *) malloc(sizeof(sn_async_pwhash_str_verify_request)); + req->env = env; + req->str_data = str; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(2) + + SN_STATUS_THROWS(napi_create_reference(env, str_argv, 1, &req->str_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + + SN_QUEUE_TASK(task, async_pwhash_str_verify_execute, async_pwhash_str_verify_complete) + + return promise; +} + +typedef struct sn_async_pwhash_scryptsalsa208sha256_request { + uv_work_t task; + napi_env env; + napi_ref out_ref; + unsigned char *out_data; + size_t out_size; + napi_ref pwd_ref; + const char *pwd_data; + size_t pwd_size; + napi_ref salt_ref; + unsigned char *salt; + uint32_t opslimit; + uint32_t memlimit; +} sn_async_pwhash_scryptsalsa208sha256_request; + +static void async_pwhash_scryptsalsa208sha256_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_scryptsalsa208sha256_request *req = (sn_async_pwhash_scryptsalsa208sha256_request *) task->req; + task->code = crypto_pwhash_scryptsalsa208sha256(req->out_data, + req->out_size, + req-> pwd_data, + req->pwd_size, + req->salt, + req->opslimit, + req->memlimit); +} + +static void async_pwhash_scryptsalsa208sha256_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_scryptsalsa208sha256_request *req = (sn_async_pwhash_scryptsalsa208sha256_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + SN_ASYNC_COMPLETE("failed to compute password hash") + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->out_ref); + napi_delete_reference(req->env, req->pwd_ref); + napi_delete_reference(req->env, req->salt_ref); + + free(req); + free(task); +} + +napi_value sn_crypto_pwhash_scryptsalsa208sha256_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(5, 6, crypto_pwhash_scryptsalsa208sha256_async) + + SN_ARGV_BUFFER_CAST(unsigned char *, out, 0) + SN_ARGV_BUFFER_CAST(char *, pwd, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, salt, 2) + SN_ARGV_UINT64(opslimit, 3) + SN_ARGV_UINT64(memlimit, 4) + + SN_ASSERT_MIN_LENGTH(out_size, crypto_pwhash_scryptsalsa208sha256_BYTES_MIN, "out") + SN_ASSERT_MAX_LENGTH(out_size, crypto_pwhash_scryptsalsa208sha256_BYTES_MAX, "out") + SN_ASSERT_LENGTH(salt_size, crypto_pwhash_scryptsalsa208sha256_SALTBYTES, "salt") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX, "memlimit") + + sn_async_pwhash_scryptsalsa208sha256_request *req = (sn_async_pwhash_scryptsalsa208sha256_request *) malloc(sizeof(sn_async_pwhash_scryptsalsa208sha256_request)); + req->env = env; + req->out_data = out; + req->out_size = out_size; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + req-> salt = salt; + req->opslimit = opslimit; + req->memlimit = memlimit; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(5) + + SN_STATUS_THROWS(napi_create_reference(env, out_argv, 1, &req->out_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, salt_argv, 1, &req->salt_ref), "") + + SN_QUEUE_TASK(task, async_pwhash_scryptsalsa208sha256_execute, async_pwhash_scryptsalsa208sha256_complete) + + return promise; +} + +typedef struct sn_async_pwhash_scryptsalsa208sha256_str_request { + uv_work_t task; + napi_env env; + napi_ref out_ref; + char *out_data; + napi_ref pwd_ref; + const char *pwd_data; + size_t pwd_size; + uint32_t opslimit; + uint32_t memlimit; +} sn_async_pwhash_scryptsalsa208sha256_str_request; + +static void async_pwhash_scryptsalsa208sha256_str_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_scryptsalsa208sha256_str_request *req = (sn_async_pwhash_scryptsalsa208sha256_str_request *) task->req; + task->code = crypto_pwhash_scryptsalsa208sha256_str(req->out_data, + req->pwd_data, + req->pwd_size, + req->opslimit, + req->memlimit); +} + +static void async_pwhash_scryptsalsa208sha256_str_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_scryptsalsa208sha256_str_request *req = (sn_async_pwhash_scryptsalsa208sha256_str_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + SN_ASYNC_COMPLETE("failed to compute password hash") + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->out_ref); + napi_delete_reference(req->env, req->pwd_ref); + + free(req); + free(task); +} + +napi_value sn_crypto_pwhash_scryptsalsa208sha256_str_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(4, 5, crypto_pwhash_scryptsalsa208sha256_str_async) + + SN_ARGV_BUFFER_CAST(char *, out, 0) + SN_ARGV_BUFFER_CAST(char *, pwd, 1) + SN_ARGV_UINT64(opslimit, 2) + SN_ARGV_UINT64(memlimit, 3) + + SN_ASSERT_LENGTH(out_size, crypto_pwhash_scryptsalsa208sha256_STRBYTES, "out") + SN_ASSERT_MIN_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN, "opslimit") + SN_ASSERT_MAX_LENGTH(opslimit, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX, "opslimit") + SN_ASSERT_MIN_LENGTH(memlimit, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN, "memlimit") + SN_ASSERT_MAX_LENGTH(memlimit, (int64_t) crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX, "memlimit") + + sn_async_pwhash_scryptsalsa208sha256_str_request *req = (sn_async_pwhash_scryptsalsa208sha256_str_request *) malloc(sizeof(sn_async_pwhash_scryptsalsa208sha256_str_request)); + req->env = env; + req->out_data = out; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + req->opslimit = opslimit; + req->memlimit = memlimit; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(4) + + SN_STATUS_THROWS(napi_create_reference(env, out_argv, 1, &req->out_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + + SN_QUEUE_TASK(task, async_pwhash_scryptsalsa208sha256_str_execute, async_pwhash_scryptsalsa208sha256_str_complete) + + return promise; +} + +typedef struct sn_async_pwhash_scryptsalsa208sha256_str_verify_request { + uv_work_t task; + napi_env env; + napi_ref str_ref; + char *str_data; + napi_ref pwd_ref; + const char *pwd_data; + size_t pwd_size; +} sn_async_pwhash_scryptsalsa208sha256_str_verify_request; + +static void async_pwhash_scryptsalsa208sha256_str_verify_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_scryptsalsa208sha256_str_verify_request *req = (sn_async_pwhash_scryptsalsa208sha256_str_verify_request *) task->req; + task->code = crypto_pwhash_scryptsalsa208sha256_str_verify(req->str_data, req->pwd_data, req->pwd_size); +} + +static void async_pwhash_scryptsalsa208sha256_str_verify_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pwhash_scryptsalsa208sha256_str_verify_request *req = (sn_async_pwhash_scryptsalsa208sha256_str_verify_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + napi_value argv[2]; + + // Due to the way that crypto_pwhash_scryptsalsa208sha256_str_verify + // signal serror different from a verification mismatch, we will count + // all errors as mismatch. The other possible error is wrong argument + // sizes, which is protected by macros above + napi_get_null(req->env, &argv[0]); + napi_get_boolean(req->env, task->code == 0, &argv[1]); + + switch (task->type) { + case sn_async_task_promise: { + napi_resolve_deferred(req->env, task->deferred, argv[1]); + task->deferred = NULL; + break; + } + + case sn_async_task_callback: { + napi_value callback; + napi_get_reference_value(req->env, task->cb, &callback); + + napi_value return_val; + SN_CALL_FUNCTION(req->env, global, callback, 2, argv, &return_val) + break; + } + } + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->str_ref); + napi_delete_reference(req->env, req->pwd_ref); + + free(req); + free(task); +} + +napi_value sn_crypto_pwhash_scryptsalsa208sha256_str_verify_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(2, 3, crypto_pwhash_scryptsalsa208sha256_str_async) + + SN_ARGV_BUFFER_CAST(char *, str, 0) + SN_ARGV_BUFFER_CAST(char *, pwd, 1) + + SN_ASSERT_LENGTH(str_size, crypto_pwhash_scryptsalsa208sha256_STRBYTES, "str") + + sn_async_pwhash_scryptsalsa208sha256_str_verify_request *req = (sn_async_pwhash_scryptsalsa208sha256_str_verify_request *) malloc(sizeof(sn_async_pwhash_scryptsalsa208sha256_str_verify_request)); + req->env = env; + req->str_data = str; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(2) + + SN_STATUS_THROWS(napi_create_reference(env, str_argv, 1, &req->str_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + + SN_QUEUE_TASK(task, async_pwhash_scryptsalsa208sha256_str_verify_execute, async_pwhash_scryptsalsa208sha256_str_verify_complete) + + return promise; +} + +typedef struct sn_crypto_stream_xor_state { + unsigned char n[crypto_stream_NONCEBYTES]; + unsigned char k[crypto_stream_KEYBYTES]; + unsigned char next_block[64]; + int remainder; + uint64_t block_counter; +} sn_crypto_stream_xor_state; + +napi_value sn_crypto_stream_xor_wrap_init (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_xor_instance_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_xor_state *, state, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_xor_state), "state must be 'sn_crypto_stream_xor_STATEBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_KEYBYTES, "k") + + state->remainder = 0; + state->block_counter = 0; + memcpy(state->n, n_data, crypto_stream_NONCEBYTES); + memcpy(state->k, k_data, crypto_stream_KEYBYTES); + + return NULL; +} + +napi_value sn_crypto_stream_xor_wrap_update (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_xor_instance_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_xor_state *, state, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, c, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, m, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_xor_state), "state must be 'sn_crypto_stream_xor_STATEBYTES' bytes") + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + + unsigned char *next_block = state->next_block; + + if (state->remainder) { + uint64_t offset = 0; + int rem = state->remainder; + + while (rem < 64 && offset < m_size) { + c[offset] = next_block[rem] ^ m[offset]; + offset++; + rem++; + } + + c += offset; + m += offset; + m_size -= offset; + state->remainder = rem == 64 ? 0 : rem; + + if (!m_size) return NULL; + } + + state->remainder = m_size & 63; + m_size -= state->remainder; + crypto_stream_xsalsa20_xor_ic(c, m, m_size, state->n, state->block_counter, state->k); + state->block_counter += m_size / 64; + + if (state->remainder) { + sodium_memzero(next_block + state->remainder, 64 - state->remainder); + memcpy(next_block, m + m_size, state->remainder); + + crypto_stream_xsalsa20_xor_ic(next_block, next_block, 64, state->n, state->block_counter, state->k); + memcpy(c + m_size, next_block, state->remainder); + + state->block_counter++; + } + + return NULL; +} + +napi_value sn_crypto_stream_xor_wrap_final (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_stream_xor_instance_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_xor_state *, state, 0) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_xor_state), "state must be 'sn_crypto_stream_xor_STATEBYTES' bytes") + + sodium_memzero(state->n, sizeof(state->n)); + sodium_memzero(state->k, sizeof(state->k)); + sodium_memzero(state->next_block, sizeof(state->next_block)); + state->remainder = 0; + + return NULL; +} + +typedef struct sn_crypto_stream_chacha20_xor_state { + unsigned char n[crypto_stream_chacha20_NONCEBYTES]; + unsigned char k[crypto_stream_chacha20_KEYBYTES]; + unsigned char next_block[64]; + int remainder; + uint64_t block_counter; +} sn_crypto_stream_chacha20_xor_state; + +napi_value sn_crypto_stream_chacha20_xor_wrap_init (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_chacha20_xor_instance_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_chacha20_xor_state *, state, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_chacha20_xor_state), "state must be 'crypto_stream_chacha20_xor_STATEBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_KEYBYTES, "k") + + state->remainder = 0; + state->block_counter = 0; + memcpy(state->n, n_data, crypto_stream_chacha20_NONCEBYTES); + memcpy(state->k, k_data, crypto_stream_chacha20_KEYBYTES); + + return NULL; +} + +napi_value sn_crypto_stream_chacha20_xor_wrap_update (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_chacha20_xor_instance_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_chacha20_xor_state *, state, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, c, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, m, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_chacha20_xor_state), "state must be 'crypto_stream_chacha20_xor_STATEBYTES' bytes") + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + + unsigned char *next_block = state->next_block; + + if (state->remainder) { + uint64_t offset = 0; + int rem = state->remainder; + + while (rem < 64 && offset < m_size) { + c[offset] = next_block[rem] ^ m[offset]; + offset++; + rem++; + } + + c += offset; + m += offset; + m_size -= offset; + state->remainder = rem == 64 ? 0 : rem; + + if (!m_size) return NULL; + } + + state->remainder = m_size & 63; + m_size -= state->remainder; + crypto_stream_chacha20_xor_ic(c, m, m_size, state->n, state->block_counter, state->k); + state->block_counter += m_size / 64; + + if (state->remainder) { + sodium_memzero(next_block + state->remainder, 64 - state->remainder); + memcpy(next_block, m + m_size, state->remainder); + + crypto_stream_chacha20_xor_ic(next_block, next_block, 64, state->n, state->block_counter, state->k); + memcpy(c + m_size, next_block, state->remainder); + + state->block_counter++; + } + + return NULL; +} + +napi_value sn_crypto_stream_chacha20_xor_wrap_final (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_stream_chacha20_xor_instance_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_chacha20_xor_state *, state, 0) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_chacha20_xor_state), "state must be 'crypto_stream_chacha20_xor_STATEBYTES' bytes") + + sodium_memzero(state->n, sizeof(state->n)); + sodium_memzero(state->k, sizeof(state->k)); + sodium_memzero(state->next_block, sizeof(state->next_block)); + state->remainder = 0; + + return NULL; +} + +typedef struct sn_crypto_stream_chacha20_ietf_xor_state { + unsigned char n[crypto_stream_chacha20_ietf_NONCEBYTES]; + unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]; + unsigned char next_block[64]; + int remainder; + uint64_t block_counter; +} sn_crypto_stream_chacha20_ietf_xor_state; + +napi_value sn_crypto_stream_chacha20_ietf_xor_wrap_init (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_chacha20_ietf_xor_wrap_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_chacha20_ietf_xor_state *, state, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_chacha20_ietf_xor_state), "state must be 'crypto_stream_chacha20_ietf_xor_STATEBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_chacha20_ietf_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_chacha20_ietf_KEYBYTES, "k") + + state->remainder = 0; + state->block_counter = 0; + memcpy(state->n, n_data, crypto_stream_chacha20_ietf_NONCEBYTES); + memcpy(state->k, k_data, crypto_stream_chacha20_ietf_KEYBYTES); + + return NULL; +} + +napi_value sn_crypto_stream_chacha20_ietf_xor_wrap_update (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_chacha20_ietf_xor_wrap_update) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_chacha20_ietf_xor_state *, state, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, c, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, m, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_chacha20_ietf_xor_state), "state must be 'crypto_stream_chacha20_ietf_xor_STATEBYTES' bytes") + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + + unsigned char *next_block = state->next_block; + + if (state->remainder) { + uint64_t offset = 0; + int rem = state->remainder; + + while (rem < 64 && offset < m_size) { + c[offset] = next_block[rem] ^ m[offset]; + offset++; + rem++; + } + + c += offset; + m += offset; + m_size -= offset; + state->remainder = rem == 64 ? 0 : rem; + + if (!m_size) return NULL; + } + + state->remainder = m_size & 63; + m_size -= state->remainder; + crypto_stream_chacha20_ietf_xor_ic(c, m, m_size, state->n, state->block_counter, state->k); + state->block_counter += m_size / 64; + + if (state->remainder) { + sodium_memzero(next_block + state->remainder, 64 - state->remainder); + memcpy(next_block, m + m_size, state->remainder); + + crypto_stream_chacha20_ietf_xor_ic(next_block, next_block, 64, state->n, state->block_counter, state->k); + memcpy(c + m_size, next_block, state->remainder); + + state->block_counter++; + } + + return NULL; +} + +napi_value sn_crypto_stream_chacha20_ietf_xor_wrap_final (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_stream_chacha20_ietf_xor_wrap_final) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_chacha20_ietf_xor_state *, state, 0) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_chacha20_ietf_xor_state), "state must be 'crypto_stream_chacha20_ietf_xor_STATEBYTES' bytes") + + sodium_memzero(state->n, sizeof(state->n)); + sodium_memzero(state->k, sizeof(state->k)); + sodium_memzero(state->next_block, sizeof(state->next_block)); + state->remainder = 0; + + return NULL; +} + +typedef struct sn_crypto_stream_xchacha20_xor_state { + unsigned char n[crypto_stream_xchacha20_NONCEBYTES]; + unsigned char k[crypto_stream_xchacha20_KEYBYTES]; + unsigned char next_block[64]; + int remainder; + uint64_t block_counter; +} sn_crypto_stream_xchacha20_xor_state; + +napi_value sn_crypto_stream_xchacha20_xor_wrap_init (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_xchacha20_xor_wrap_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_xchacha20_xor_state *, state, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_xchacha20_xor_state), "state must be 'crypto_stream_xchacha20_xor_STATEBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_xchacha20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_xchacha20_KEYBYTES, "k") + + state->remainder = 0; + state->block_counter = 0; + memcpy(state->n, n_data, crypto_stream_xchacha20_NONCEBYTES); + memcpy(state->k, k_data, crypto_stream_xchacha20_KEYBYTES); + + return NULL; +} + +napi_value sn_crypto_stream_xchacha20_xor_wrap_update (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_xchacha20_xor_wrap_update) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_xchacha20_xor_state *, state, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, c, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, m, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_xchacha20_xor_state), "state must be 'crypto_stream_xchacha20_xor_STATEBYTES' bytes") + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + + unsigned char *next_block = state->next_block; + + if (state->remainder) { + uint64_t offset = 0; + int rem = state->remainder; + + while (rem < 64 && offset < m_size) { + c[offset] = next_block[rem] ^ m[offset]; + offset++; + rem++; + } + + c += offset; + m += offset; + m_size -= offset; + state->remainder = rem == 64 ? 0 : rem; + + if (!m_size) return NULL; + } + + state->remainder = m_size & 63; + m_size -= state->remainder; + crypto_stream_xchacha20_xor_ic(c, m, m_size, state->n, state->block_counter, state->k); + state->block_counter += m_size / 64; + + if (state->remainder) { + sodium_memzero(next_block + state->remainder, 64 - state->remainder); + memcpy(next_block, m + m_size, state->remainder); + + crypto_stream_xchacha20_xor_ic(next_block, next_block, 64, state->n, state->block_counter, state->k); + memcpy(c + m_size, next_block, state->remainder); + + state->block_counter++; + } + + return NULL; +} + +napi_value sn_crypto_stream_xchacha20_xor_wrap_final (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_stream_xchacha20_xor_wrap_final) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_xchacha20_xor_state *, state, 0) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_xchacha20_xor_state), "state must be 'crypto_stream_xchacha20_xor_STATEBYTES' bytes") + + sodium_memzero(state->n, sizeof(state->n)); + sodium_memzero(state->k, sizeof(state->k)); + sodium_memzero(state->next_block, sizeof(state->next_block)); + state->remainder = 0; + + return NULL; +} + +typedef struct sn_crypto_stream_salsa20_xor_state { + unsigned char n[crypto_stream_salsa20_NONCEBYTES]; + unsigned char k[crypto_stream_salsa20_KEYBYTES]; + unsigned char next_block[64]; + int remainder; + uint64_t block_counter; +} sn_crypto_stream_salsa20_xor_state; + +napi_value sn_crypto_stream_salsa20_xor_wrap_init (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_salsa20_xor_wrap_init) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_salsa20_xor_state *, state, 0) + SN_ARGV_TYPEDARRAY(n, 1) + SN_ARGV_TYPEDARRAY(k, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_salsa20_xor_state), "state must be 'crypto_stream_salsa20_xor_STATEBYTES' bytes") + SN_ASSERT_LENGTH(n_size, crypto_stream_salsa20_NONCEBYTES, "n") + SN_ASSERT_LENGTH(k_size, crypto_stream_salsa20_KEYBYTES, "k") + + state->remainder = 0; + state->block_counter = 0; + memcpy(state->n, n_data, crypto_stream_salsa20_NONCEBYTES); + memcpy(state->k, k_data, crypto_stream_salsa20_KEYBYTES); + + return NULL; +} + +napi_value sn_crypto_stream_salsa20_xor_wrap_update (napi_env env, napi_callback_info info) { + SN_ARGV(3, crypto_stream_salsa20_xor_wrap_update) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_salsa20_xor_state *, state, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, c, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, m, 2) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_salsa20_xor_state), "state must be 'crypto_stream_salsa20_xor_STATEBYTES' bytes") + SN_THROWS(c_size != m_size, "c must be 'm.byteLength' bytes") + + unsigned char *next_block = state->next_block; + + if (state->remainder) { + uint64_t offset = 0; + int rem = state->remainder; + + while (rem < 64 && offset < m_size) { + c[offset] = next_block[rem] ^ m[offset]; + offset++; + rem++; + } + + c += offset; + m += offset; + m_size -= offset; + state->remainder = rem == 64 ? 0 : rem; + + if (!m_size) return NULL; + } + + state->remainder = m_size & 63; + m_size -= state->remainder; + crypto_stream_salsa20_xor_ic(c, m, m_size, state->n, state->block_counter, state->k); + state->block_counter += m_size / 64; + + if (state->remainder) { + sodium_memzero(next_block + state->remainder, 64 - state->remainder); + memcpy(next_block, m + m_size, state->remainder); + + crypto_stream_salsa20_xor_ic(next_block, next_block, 64, state->n, state->block_counter, state->k); + memcpy(c + m_size, next_block, state->remainder); + + state->block_counter++; + } + + return NULL; +} + +napi_value sn_crypto_stream_salsa20_xor_wrap_final (napi_env env, napi_callback_info info) { + SN_ARGV(1, crypto_stream_salsa20_xor_wrap_final) + + SN_ARGV_BUFFER_CAST(sn_crypto_stream_salsa20_xor_state *, state, 0) + + SN_THROWS(state_size != sizeof(sn_crypto_stream_salsa20_xor_state), "state must be 'crypto_stream_salsa20_xor_STATEBYTES' bytes") + + sodium_memzero(state->n, sizeof(state->n)); + sodium_memzero(state->k, sizeof(state->k)); + sodium_memzero(state->next_block, sizeof(state->next_block)); + state->remainder = 0; + + return NULL; +} + +// Experimental API + +napi_value sn_extension_tweak_ed25519_base (napi_env env, napi_callback_info info) { + SN_ARGV(3, extension_tweak_ed25519_base) + + SN_ARGV_TYPEDARRAY(n, 0) + SN_ARGV_TYPEDARRAY(p, 1) + SN_ARGV_TYPEDARRAY(ns, 2) + + SN_ASSERT_LENGTH(n_size, sn__extension_tweak_ed25519_SCALARBYTES, "n") + SN_ASSERT_LENGTH(p_size, sn__extension_tweak_ed25519_BYTES, "p") + + sn__extension_tweak_ed25519_base(p_data, n_data, ns_data, ns_size); + + return NULL; +} + +napi_value sn_extension_tweak_ed25519_sign_detached (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(3, 4, extension_tweak_ed25519_sign_detached) + + SN_ARGV_TYPEDARRAY(sig, 0) + SN_ARGV_TYPEDARRAY(m, 1) + SN_ARGV_TYPEDARRAY(scalar, 2) + SN_ARGV_OPTS_TYPEDARRAY(pk, 3) + + SN_ASSERT_LENGTH(sig_size, crypto_sign_BYTES, "sig") + SN_ASSERT_LENGTH(scalar_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar") + + if (pk_data != NULL) { + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + } + + SN_RETURN(sn__extension_tweak_ed25519_sign_detached(sig_data, NULL, m_data, m_size, scalar_data, pk_data), "failed to compute signature") +} + +napi_value sn_extension_tweak_ed25519_sk_to_scalar (napi_env env, napi_callback_info info) { + SN_ARGV(2, extension_tweak_ed25519_sk_to_scalar) + + SN_ARGV_TYPEDARRAY(n, 0) + SN_ARGV_TYPEDARRAY(sk, 1) + + SN_ASSERT_LENGTH(n_size, sn__extension_tweak_ed25519_SCALARBYTES, "n") + SN_ASSERT_LENGTH(sk_size, crypto_sign_SECRETKEYBYTES, "sk") + + sn__extension_tweak_ed25519_sk_to_scalar(n_data, sk_data); + + return NULL; +} + +napi_value sn_extension_tweak_ed25519_scalar (napi_env env, napi_callback_info info) { + SN_ARGV(3, extension_tweak_ed25519_scalar) + + SN_ARGV_TYPEDARRAY(scalar_out, 0) + SN_ARGV_TYPEDARRAY(scalar, 1) + SN_ARGV_TYPEDARRAY(ns, 2) + + SN_ASSERT_LENGTH(scalar_out_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar_out") + SN_ASSERT_LENGTH(scalar_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar") + + sn__extension_tweak_ed25519_scalar(scalar_out_data, scalar_data, ns_data, ns_size); + + return NULL; +} + +napi_value sn_extension_tweak_ed25519_pk (napi_env env, napi_callback_info info) { + SN_ARGV(3, extension_tweak_ed25519_pk) + + SN_ARGV_TYPEDARRAY(tpk, 0) + SN_ARGV_TYPEDARRAY(pk, 1) + SN_ARGV_TYPEDARRAY(ns, 2) + + SN_ASSERT_LENGTH(tpk_size, crypto_sign_PUBLICKEYBYTES, "tpk") + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + + SN_RETURN(sn__extension_tweak_ed25519_pk(tpk_data, pk_data, ns_data, ns_size), "failed to tweak public key") +} + +napi_value sn_extension_tweak_ed25519_keypair (napi_env env, napi_callback_info info) { + SN_ARGV(4, extension_tweak_ed25519_keypair) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(scalar_out, 1) + SN_ARGV_TYPEDARRAY(scalar_in, 2) + SN_ARGV_TYPEDARRAY(ns, 3) + + SN_ASSERT_LENGTH(pk_size, sn__extension_tweak_ed25519_BYTES, "pk") + SN_ASSERT_LENGTH(scalar_out_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar_out") + SN_ASSERT_LENGTH(scalar_in_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar_in") + + sn__extension_tweak_ed25519_keypair(pk_data, scalar_out_data, scalar_in_data, ns_data, ns_size); + + return NULL; +} + +napi_value sn_extension_tweak_ed25519_scalar_add (napi_env env, napi_callback_info info) { + SN_ARGV(3, extension_tweak_ed25519_scalar_add) + + SN_ARGV_TYPEDARRAY(scalar_out, 0) + SN_ARGV_TYPEDARRAY(scalar, 1) + SN_ARGV_TYPEDARRAY(n, 2) + + SN_ASSERT_LENGTH(scalar_out_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar_out") + SN_ASSERT_LENGTH(scalar_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar") + SN_ASSERT_LENGTH(n_size, sn__extension_tweak_ed25519_SCALARBYTES, "n") + + sn__extension_tweak_ed25519_scalar_add(scalar_out_data, scalar_data, n_data); + + return NULL; +} + +napi_value sn_extension_tweak_ed25519_pk_add (napi_env env, napi_callback_info info) { + SN_ARGV(3, extension_tweak_ed25519_pk) + + SN_ARGV_TYPEDARRAY(tpk, 0) + SN_ARGV_TYPEDARRAY(pk, 1) + SN_ARGV_TYPEDARRAY(p, 2) + + SN_ASSERT_LENGTH(tpk_size, crypto_sign_PUBLICKEYBYTES, "tpk") + SN_ASSERT_LENGTH(pk_size, crypto_sign_PUBLICKEYBYTES, "pk") + SN_ASSERT_LENGTH(p_size, crypto_sign_PUBLICKEYBYTES, "p") + + SN_RETURN(sn__extension_tweak_ed25519_pk_add(tpk_data, pk_data, p_data), "failed to add tweak to public key") +} + +napi_value sn_extension_tweak_ed25519_keypair_add (napi_env env, napi_callback_info info) { + SN_ARGV(4, extension_tweak_ed25519_keypair_add) + + SN_ARGV_TYPEDARRAY(pk, 0) + SN_ARGV_TYPEDARRAY(scalar_out, 1) + SN_ARGV_TYPEDARRAY(scalar_in, 2) + SN_ARGV_TYPEDARRAY(tweak, 3) + + SN_ASSERT_LENGTH(pk_size, sn__extension_tweak_ed25519_BYTES, "pk") + SN_ASSERT_LENGTH(scalar_out_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar_out") + SN_ASSERT_LENGTH(scalar_in_size, sn__extension_tweak_ed25519_SCALARBYTES, "scalar_in") + SN_ASSERT_LENGTH(tweak_size, sn__extension_tweak_ed25519_SCALARBYTES, "tweak") + + SN_RETURN(sn__extension_tweak_ed25519_keypair_add(pk_data, scalar_out_data, scalar_in_data, tweak_data), "failed to add tweak to keypair") +} + +napi_value sn_extension_pbkdf2_sha512 (napi_env env, napi_callback_info info) { + SN_ARGV(5, extension_pbkdf2_sha512) + + SN_ARGV_BUFFER_CAST(unsigned char *, out, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, passwd, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, salt, 2) + SN_ARGV_UINT64(iter, 3) + SN_ARGV_UINT64(outlen, 4) + + SN_ASSERT_MIN_LENGTH(iter, sn__extension_pbkdf2_sha512_ITERATIONS_MIN, "iterations") + SN_ASSERT_MAX_LENGTH(outlen, sn__extension_pbkdf2_sha512_BYTES_MAX, "outlen") + + SN_ASSERT_MIN_LENGTH(out_size, outlen, "out") + + SN_RETURN(sn__extension_pbkdf2_sha512(passwd, passwd_size, salt, salt_size, iter, out, outlen), "failed to add tweak to public key") +} + +typedef struct sn_async_pbkdf2_sha512_request { + napi_env env; + unsigned char *out_data; + size_t out_size; + napi_ref out_ref; + size_t outlen; + napi_ref pwd_ref; + const unsigned char *pwd_data; + size_t pwd_size; + napi_ref salt_ref; + unsigned char *salt_data; + size_t salt_size; + uint64_t iter; +} sn_async_pbkdf2_sha512_request; + +static void async_pbkdf2_sha512_execute (uv_work_t *uv_req) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pbkdf2_sha512_request *req = (sn_async_pbkdf2_sha512_request *) task->req; + task->code = sn__extension_pbkdf2_sha512(req->pwd_data, + req->pwd_size, + req->salt_data, + req->salt_size, + req->iter, + req->out_data, + req->outlen); +} + +static void async_pbkdf2_sha512_complete (uv_work_t *uv_req, int status) { + sn_async_task_t *task = (sn_async_task_t *) uv_req; + sn_async_pbkdf2_sha512_request *req = (sn_async_pbkdf2_sha512_request *) task->req; + + napi_handle_scope scope; + napi_open_handle_scope(req->env, &scope); + + napi_value global; + napi_get_global(req->env, &global); + + SN_ASYNC_COMPLETE("failed to compute kdf") + + napi_close_handle_scope(req->env, scope); + + napi_delete_reference(req->env, req->out_ref); + napi_delete_reference(req->env, req->pwd_ref); + napi_delete_reference(req->env, req->salt_ref); + + free(req); + free(task); +} + +napi_value sn_extension_pbkdf2_sha512_async (napi_env env, napi_callback_info info) { + SN_ARGV_OPTS(5, 6, extension_pbkdf2_sha512_async) + + SN_ARGV_BUFFER_CAST(unsigned char *, out, 0) + SN_ARGV_BUFFER_CAST(unsigned char *, pwd, 1) + SN_ARGV_BUFFER_CAST(unsigned char *, salt, 2) + SN_ARGV_UINT64(iter, 3) + SN_ARGV_UINT64(outlen, 4) + + SN_ASSERT_MIN_LENGTH(iter, sn__extension_pbkdf2_sha512_ITERATIONS_MIN, "iterations") + SN_ASSERT_MAX_LENGTH(outlen, sn__extension_pbkdf2_sha512_BYTES_MAX, "outlen") + SN_ASSERT_MIN_LENGTH(out_size, outlen, "output") + + sn_async_pbkdf2_sha512_request *req = (sn_async_pbkdf2_sha512_request *) malloc(sizeof(sn_async_pbkdf2_sha512_request)); + + req->env = env; + req->out_data = out; + req->out_size = out_size; + req->pwd_data = pwd; + req->pwd_size = pwd_size; + req->salt_data = salt; + req->salt_size = salt_size; + req->iter = iter; + req->outlen = outlen; + + sn_async_task_t *task = (sn_async_task_t *) malloc(sizeof(sn_async_task_t)); + SN_ASYNC_TASK(5); + + SN_STATUS_THROWS(napi_create_reference(env, out_argv, 1, &req->out_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, pwd_argv, 1, &req->pwd_ref), "") + SN_STATUS_THROWS(napi_create_reference(env, salt_argv, 1, &req->salt_ref), "") + + SN_QUEUE_TASK(task, async_pbkdf2_sha512_execute, async_pbkdf2_sha512_complete) + + return promise; +} + +static napi_value create_sodium_native (napi_env env) { + SN_THROWS(sodium_init() == -1, "sodium_init() failed") + + napi_value exports; + napi_create_object(env, &exports); + + // memory + + SN_EXPORT_FUNCTION(sodium_memzero, sn_sodium_memzero) + SN_EXPORT_FUNCTION(sodium_mlock, sn_sodium_mlock) + SN_EXPORT_FUNCTION(sodium_munlock, sn_sodium_munlock) + SN_EXPORT_FUNCTION(sodium_malloc, sn_sodium_malloc) + SN_EXPORT_FUNCTION(sodium_free, sn_sodium_free) + SN_EXPORT_FUNCTION(sodium_mprotect_noaccess, sn_sodium_mprotect_noaccess) + SN_EXPORT_FUNCTION(sodium_mprotect_readonly, sn_sodium_mprotect_readonly) + SN_EXPORT_FUNCTION(sodium_mprotect_readwrite, sn_sodium_mprotect_readwrite) + + // randombytes + + SN_EXPORT_FUNCTION(randombytes_buf, sn_randombytes_buf) + SN_EXPORT_FUNCTION(randombytes_buf_deterministic, sn_randombytes_buf_deterministic) + SN_EXPORT_FUNCTION(randombytes_uniform, sn_randombytes_uniform) + SN_EXPORT_FUNCTION(randombytes_random, sn_randombytes_random) + SN_EXPORT_UINT32(randombytes_SEEDBYTES, randombytes_SEEDBYTES) + + // sodium helpers + + SN_EXPORT_FUNCTION(sodium_memcmp, sn_sodium_memcmp) + SN_EXPORT_FUNCTION(sodium_increment, sn_sodium_increment) + SN_EXPORT_FUNCTION(sodium_add, sn_sodium_add) + SN_EXPORT_FUNCTION(sodium_sub, sn_sodium_sub) + SN_EXPORT_FUNCTION(sodium_compare, sn_sodium_compare) + SN_EXPORT_FUNCTION(sodium_is_zero, sn_sodium_is_zero) + SN_EXPORT_FUNCTION(sodium_pad, sn_sodium_pad) + SN_EXPORT_FUNCTION(sodium_unpad, sn_sodium_unpad) + + // crypto_aead + + SN_EXPORT_FUNCTION(crypto_aead_xchacha20poly1305_ietf_keygen, sn_crypto_aead_xchacha20poly1305_ietf_keygen) + SN_EXPORT_FUNCTION(crypto_aead_xchacha20poly1305_ietf_encrypt, sn_crypto_aead_xchacha20poly1305_ietf_encrypt) + SN_EXPORT_FUNCTION(crypto_aead_xchacha20poly1305_ietf_decrypt, sn_crypto_aead_xchacha20poly1305_ietf_decrypt) + SN_EXPORT_FUNCTION(crypto_aead_xchacha20poly1305_ietf_encrypt_detached, sn_crypto_aead_xchacha20poly1305_ietf_encrypt_detached) + SN_EXPORT_FUNCTION(crypto_aead_xchacha20poly1305_ietf_decrypt_detached, sn_crypto_aead_xchacha20poly1305_ietf_decrypt_detached) + SN_EXPORT_UINT32(crypto_aead_xchacha20poly1305_ietf_ABYTES, crypto_aead_xchacha20poly1305_ietf_ABYTES) + SN_EXPORT_UINT32(crypto_aead_xchacha20poly1305_ietf_KEYBYTES, crypto_aead_xchacha20poly1305_ietf_KEYBYTES) + SN_EXPORT_UINT32(crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, crypto_aead_xchacha20poly1305_ietf_NPUBBYTES) + SN_EXPORT_UINT32(crypto_aead_xchacha20poly1305_ietf_NSECBYTES, crypto_aead_xchacha20poly1305_ietf_NSECBYTES) + SN_EXPORT_UINT64(crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX, crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX) + + SN_EXPORT_FUNCTION(crypto_aead_chacha20poly1305_ietf_keygen, sn_crypto_aead_chacha20poly1305_ietf_keygen) + SN_EXPORT_FUNCTION(crypto_aead_chacha20poly1305_ietf_encrypt, sn_crypto_aead_chacha20poly1305_ietf_encrypt) + SN_EXPORT_FUNCTION(crypto_aead_chacha20poly1305_ietf_decrypt, sn_crypto_aead_chacha20poly1305_ietf_decrypt) + SN_EXPORT_FUNCTION(crypto_aead_chacha20poly1305_ietf_encrypt_detached, sn_crypto_aead_chacha20poly1305_ietf_encrypt_detached) + SN_EXPORT_FUNCTION(crypto_aead_chacha20poly1305_ietf_decrypt_detached, sn_crypto_aead_chacha20poly1305_ietf_decrypt_detached) + SN_EXPORT_UINT32(crypto_aead_chacha20poly1305_ietf_ABYTES, crypto_aead_chacha20poly1305_ietf_ABYTES) + SN_EXPORT_UINT32(crypto_aead_chacha20poly1305_ietf_KEYBYTES, crypto_aead_chacha20poly1305_ietf_KEYBYTES) + SN_EXPORT_UINT32(crypto_aead_chacha20poly1305_ietf_NPUBBYTES, crypto_aead_chacha20poly1305_ietf_NPUBBYTES) + SN_EXPORT_UINT32(crypto_aead_chacha20poly1305_ietf_NSECBYTES, crypto_aead_chacha20poly1305_ietf_NSECBYTES) + SN_EXPORT_UINT64(crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX) + + // crypto_auth + + SN_EXPORT_FUNCTION(crypto_auth, sn_crypto_auth) + SN_EXPORT_FUNCTION(crypto_auth_verify, sn_crypto_auth_verify) + SN_EXPORT_UINT32(crypto_auth_BYTES, crypto_auth_BYTES) + SN_EXPORT_UINT32(crypto_auth_KEYBYTES, crypto_auth_KEYBYTES) + SN_EXPORT_STRING(crypto_auth_PRIMITIVE, crypto_auth_PRIMITIVE) + + // crypto_box + + SN_EXPORT_FUNCTION(crypto_box_keypair, sn_crypto_box_keypair) + SN_EXPORT_FUNCTION(crypto_box_seed_keypair, sn_crypto_box_seed_keypair) + SN_EXPORT_FUNCTION(crypto_box_easy, sn_crypto_box_easy) + SN_EXPORT_FUNCTION(crypto_box_open_easy, sn_crypto_box_open_easy) + SN_EXPORT_FUNCTION(crypto_box_detached, sn_crypto_box_detached) + SN_EXPORT_FUNCTION(crypto_box_open_detached, sn_crypto_box_open_detached) + SN_EXPORT_FUNCTION(crypto_box_seal, sn_crypto_box_seal) + SN_EXPORT_FUNCTION(crypto_box_seal_open, sn_crypto_box_seal_open) + SN_EXPORT_UINT32(crypto_box_SEEDBYTES, crypto_box_SEEDBYTES) + SN_EXPORT_UINT32(crypto_box_PUBLICKEYBYTES, crypto_box_PUBLICKEYBYTES) + SN_EXPORT_UINT32(crypto_box_SECRETKEYBYTES, crypto_box_SECRETKEYBYTES) + SN_EXPORT_UINT32(crypto_box_NONCEBYTES, crypto_box_NONCEBYTES) + SN_EXPORT_UINT32(crypto_box_MACBYTES, crypto_box_MACBYTES) + SN_EXPORT_UINT32(crypto_box_SEALBYTES, crypto_box_SEALBYTES) + SN_EXPORT_STRING(crypto_box_PRIMITIVE, crypto_box_PRIMITIVE) + + // crypto_core + + SN_EXPORT_FUNCTION(crypto_core_ed25519_is_valid_point, sn_crypto_core_ed25519_is_valid_point) + SN_EXPORT_FUNCTION(crypto_core_ed25519_from_uniform, sn_crypto_core_ed25519_from_uniform) + SN_EXPORT_FUNCTION(crypto_core_ed25519_add, sn_crypto_core_ed25519_add) + SN_EXPORT_FUNCTION(crypto_core_ed25519_sub, sn_crypto_core_ed25519_sub) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_random, sn_crypto_core_ed25519_scalar_random) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_reduce, sn_crypto_core_ed25519_scalar_reduce) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_invert, sn_crypto_core_ed25519_scalar_invert) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_negate, sn_crypto_core_ed25519_scalar_negate) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_complement, sn_crypto_core_ed25519_scalar_complement) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_add, sn_crypto_core_ed25519_scalar_add) + SN_EXPORT_FUNCTION(crypto_core_ed25519_scalar_sub, sn_crypto_core_ed25519_scalar_sub) + SN_EXPORT_UINT32(crypto_core_ed25519_BYTES, crypto_core_ed25519_BYTES) + SN_EXPORT_UINT32(crypto_core_ed25519_UNIFORMBYTES, crypto_core_ed25519_UNIFORMBYTES) + SN_EXPORT_UINT32(crypto_core_ed25519_SCALARBYTES, crypto_core_ed25519_SCALARBYTES) + SN_EXPORT_UINT32(crypto_core_ed25519_NONREDUCEDSCALARBYTES, crypto_core_ed25519_NONREDUCEDSCALARBYTES) + + // crypto_kdf + + SN_EXPORT_FUNCTION(crypto_kdf_keygen, sn_crypto_kdf_keygen) + SN_EXPORT_FUNCTION(crypto_kdf_derive_from_key, sn_crypto_kdf_derive_from_key) + SN_EXPORT_UINT32(crypto_kdf_BYTES_MIN, crypto_kdf_BYTES_MIN) + SN_EXPORT_UINT32(crypto_kdf_BYTES_MAX, crypto_kdf_BYTES_MAX) + SN_EXPORT_UINT32(crypto_kdf_CONTEXTBYTES, crypto_kdf_CONTEXTBYTES) + SN_EXPORT_UINT32(crypto_kdf_KEYBYTES, crypto_kdf_KEYBYTES) + SN_EXPORT_STRING(crypto_kdf_PRIMITIVE, crypto_kdf_PRIMITIVE) + + // crypto_kx + + SN_EXPORT_FUNCTION(crypto_kx_keypair, sn_crypto_kx_keypair) + SN_EXPORT_FUNCTION(crypto_kx_seed_keypair, sn_crypto_kx_seed_keypair) + SN_EXPORT_FUNCTION(crypto_kx_client_session_keys, sn_crypto_kx_client_session_keys) + SN_EXPORT_FUNCTION(crypto_kx_server_session_keys, sn_crypto_kx_server_session_keys) + SN_EXPORT_UINT32(crypto_kx_PUBLICKEYBYTES, crypto_kx_PUBLICKEYBYTES) + SN_EXPORT_UINT32(crypto_kx_SECRETKEYBYTES, crypto_kx_SECRETKEYBYTES) + SN_EXPORT_UINT32(crypto_kx_SEEDBYTES, crypto_kx_SEEDBYTES) + SN_EXPORT_UINT32(crypto_kx_SESSIONKEYBYTES, crypto_kx_SESSIONKEYBYTES) + SN_EXPORT_STRING(crypto_kx_PRIMITIVE, crypto_kx_PRIMITIVE) + + // crypto_generichash + + SN_EXPORT_FUNCTION(crypto_generichash, sn_crypto_generichash) + SN_EXPORT_FUNCTION(crypto_generichash_batch, sn_crypto_generichash_batch) + SN_EXPORT_FUNCTION(crypto_generichash_keygen, sn_crypto_generichash_keygen) + SN_EXPORT_FUNCTION(crypto_generichash_init, sn_crypto_generichash_init) + SN_EXPORT_FUNCTION(crypto_generichash_update, sn_crypto_generichash_update) + SN_EXPORT_FUNCTION(crypto_generichash_final, sn_crypto_generichash_final) + SN_EXPORT_UINT32(crypto_generichash_STATEBYTES, sizeof(crypto_generichash_state)) + SN_EXPORT_STRING(crypto_generichash_PRIMITIVE, crypto_generichash_PRIMITIVE) + SN_EXPORT_UINT32(crypto_generichash_BYTES_MIN, crypto_generichash_BYTES_MIN) + SN_EXPORT_UINT32(crypto_generichash_BYTES_MAX, crypto_generichash_BYTES_MAX) + SN_EXPORT_UINT32(crypto_generichash_BYTES, crypto_generichash_BYTES) + SN_EXPORT_UINT32(crypto_generichash_KEYBYTES_MIN, crypto_generichash_KEYBYTES_MIN) + SN_EXPORT_UINT32(crypto_generichash_KEYBYTES_MAX, crypto_generichash_KEYBYTES_MAX) + SN_EXPORT_UINT32(crypto_generichash_KEYBYTES, crypto_generichash_KEYBYTES) + + // crypto_hash + + SN_EXPORT_FUNCTION(crypto_hash, sn_crypto_hash) + SN_EXPORT_UINT32(crypto_hash_BYTES, crypto_hash_BYTES) + SN_EXPORT_STRING(crypto_hash_PRIMITIVE, crypto_hash_PRIMITIVE) + + SN_EXPORT_FUNCTION(crypto_hash_sha256, sn_crypto_hash_sha256) + SN_EXPORT_FUNCTION(crypto_hash_sha256_init, sn_crypto_hash_sha256_init) + SN_EXPORT_FUNCTION(crypto_hash_sha256_update, sn_crypto_hash_sha256_update) + SN_EXPORT_FUNCTION(crypto_hash_sha256_final, sn_crypto_hash_sha256_final) + SN_EXPORT_UINT32(crypto_hash_sha256_STATEBYTES, sizeof(crypto_hash_sha256_state)) + SN_EXPORT_UINT32(crypto_hash_sha256_BYTES, crypto_hash_sha256_BYTES) + + SN_EXPORT_FUNCTION(crypto_hash_sha512, sn_crypto_hash_sha512) + SN_EXPORT_FUNCTION(crypto_hash_sha512_init, sn_crypto_hash_sha512_init) + SN_EXPORT_FUNCTION(crypto_hash_sha512_update, sn_crypto_hash_sha512_update) + SN_EXPORT_FUNCTION(crypto_hash_sha512_final, sn_crypto_hash_sha512_final) + SN_EXPORT_UINT32(crypto_hash_sha512_STATEBYTES, sizeof(crypto_hash_sha512_state)) + SN_EXPORT_UINT32(crypto_hash_sha512_BYTES, crypto_hash_sha512_BYTES) + + // crypto_onetimeauth + + SN_EXPORT_FUNCTION(crypto_onetimeauth, sn_crypto_onetimeauth) + SN_EXPORT_FUNCTION(crypto_onetimeauth_verify, sn_crypto_onetimeauth_verify) + SN_EXPORT_FUNCTION(crypto_onetimeauth_init, sn_crypto_onetimeauth_init) + SN_EXPORT_FUNCTION(crypto_onetimeauth_update, sn_crypto_onetimeauth_update) + SN_EXPORT_FUNCTION(crypto_onetimeauth_final, sn_crypto_onetimeauth_final) + SN_EXPORT_UINT32(crypto_onetimeauth_STATEBYTES, sizeof(crypto_onetimeauth_state)) + SN_EXPORT_UINT32(crypto_onetimeauth_BYTES, crypto_onetimeauth_BYTES) + SN_EXPORT_UINT32(crypto_onetimeauth_KEYBYTES, crypto_onetimeauth_KEYBYTES) + SN_EXPORT_STRING(crypto_onetimeauth_PRIMITIVE, crypto_onetimeauth_PRIMITIVE) + + // crypto_pwhash + + SN_EXPORT_FUNCTION(crypto_pwhash, sn_crypto_pwhash) + SN_EXPORT_FUNCTION(crypto_pwhash_str, sn_crypto_pwhash_str) + SN_EXPORT_FUNCTION(crypto_pwhash_str_verify, sn_crypto_pwhash_str_verify) + SN_EXPORT_FUNCTION(crypto_pwhash_str_needs_rehash, sn_crypto_pwhash_str_needs_rehash) + SN_EXPORT_FUNCTION(crypto_pwhash_async, sn_crypto_pwhash_async) + SN_EXPORT_FUNCTION(crypto_pwhash_str_async, sn_crypto_pwhash_str_async) + SN_EXPORT_FUNCTION(crypto_pwhash_str_verify_async, sn_crypto_pwhash_str_verify_async) + SN_EXPORT_UINT32(crypto_pwhash_ALG_ARGON2I13, crypto_pwhash_ALG_ARGON2I13) + SN_EXPORT_UINT32(crypto_pwhash_ALG_ARGON2ID13, crypto_pwhash_ALG_ARGON2ID13) + SN_EXPORT_UINT32(crypto_pwhash_ALG_DEFAULT, crypto_pwhash_ALG_DEFAULT) + SN_EXPORT_UINT32(crypto_pwhash_BYTES_MIN, crypto_pwhash_BYTES_MIN) + SN_EXPORT_UINT32(crypto_pwhash_BYTES_MAX, crypto_pwhash_BYTES_MAX) + SN_EXPORT_UINT32(crypto_pwhash_PASSWD_MIN, crypto_pwhash_PASSWD_MIN) + SN_EXPORT_UINT32(crypto_pwhash_PASSWD_MAX, crypto_pwhash_PASSWD_MAX) + SN_EXPORT_UINT32(crypto_pwhash_SALTBYTES, crypto_pwhash_SALTBYTES) + SN_EXPORT_UINT32(crypto_pwhash_STRBYTES, crypto_pwhash_STRBYTES) + SN_EXPORT_STRING(crypto_pwhash_STRPREFIX, crypto_pwhash_STRPREFIX) + SN_EXPORT_UINT32(crypto_pwhash_OPSLIMIT_MIN, crypto_pwhash_OPSLIMIT_MIN) + SN_EXPORT_UINT32(crypto_pwhash_OPSLIMIT_MAX, crypto_pwhash_OPSLIMIT_MAX) + SN_EXPORT_UINT32(crypto_pwhash_MEMLIMIT_MIN, crypto_pwhash_MEMLIMIT_MIN) + SN_EXPORT_UINT32(crypto_pwhash_MEMLIMIT_MAX, crypto_pwhash_MEMLIMIT_MAX) + SN_EXPORT_UINT32(crypto_pwhash_OPSLIMIT_INTERACTIVE, crypto_pwhash_OPSLIMIT_INTERACTIVE) + SN_EXPORT_UINT32(crypto_pwhash_MEMLIMIT_INTERACTIVE, crypto_pwhash_MEMLIMIT_INTERACTIVE) + SN_EXPORT_UINT32(crypto_pwhash_OPSLIMIT_MODERATE, crypto_pwhash_OPSLIMIT_MODERATE) + SN_EXPORT_UINT32(crypto_pwhash_MEMLIMIT_MODERATE, crypto_pwhash_MEMLIMIT_MODERATE) + SN_EXPORT_UINT32(crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_OPSLIMIT_SENSITIVE) + SN_EXPORT_UINT32(crypto_pwhash_MEMLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE) + SN_EXPORT_STRING(crypto_pwhash_PRIMITIVE, crypto_pwhash_PRIMITIVE) + + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256, sn_crypto_pwhash_scryptsalsa208sha256) + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256_str, sn_crypto_pwhash_scryptsalsa208sha256_str) + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256_str_verify, sn_crypto_pwhash_scryptsalsa208sha256_str_verify) + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256_str_needs_rehash, sn_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash) + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256_async, sn_crypto_pwhash_scryptsalsa208sha256_async) + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256_str_async, sn_crypto_pwhash_scryptsalsa208sha256_str_async) + SN_EXPORT_FUNCTION(crypto_pwhash_scryptsalsa208sha256_str_verify_async, sn_crypto_pwhash_scryptsalsa208sha256_str_verify_async) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_BYTES_MIN, crypto_pwhash_scryptsalsa208sha256_BYTES_MIN) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_BYTES_MAX, crypto_pwhash_scryptsalsa208sha256_BYTES_MAX) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN, crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX, crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_SALTBYTES, crypto_pwhash_scryptsalsa208sha256_SALTBYTES) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_STRBYTES, crypto_pwhash_scryptsalsa208sha256_STRBYTES) + SN_EXPORT_STRING(crypto_pwhash_scryptsalsa208sha256_STRPREFIX, crypto_pwhash_scryptsalsa208sha256_STRPREFIX) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE, crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE) + SN_EXPORT_UINT32(crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE, crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE) + + // crypto_scalarmult + + SN_EXPORT_FUNCTION(crypto_scalarmult_base, sn_crypto_scalarmult_base) + SN_EXPORT_FUNCTION(crypto_scalarmult, sn_crypto_scalarmult) + SN_EXPORT_STRING(crypto_scalarmult_PRIMITIVE, crypto_scalarmult_PRIMITIVE) + SN_EXPORT_UINT32(crypto_scalarmult_BYTES, crypto_scalarmult_BYTES) + SN_EXPORT_UINT32(crypto_scalarmult_SCALARBYTES, crypto_scalarmult_SCALARBYTES) + + SN_EXPORT_FUNCTION(crypto_scalarmult_ed25519_base, sn_crypto_scalarmult_ed25519_base) + SN_EXPORT_FUNCTION(crypto_scalarmult_ed25519, sn_crypto_scalarmult_ed25519) + SN_EXPORT_FUNCTION(crypto_scalarmult_ed25519_base_noclamp, sn_crypto_scalarmult_ed25519_base_noclamp) + SN_EXPORT_FUNCTION(crypto_scalarmult_ed25519_noclamp, sn_crypto_scalarmult_ed25519_noclamp) + SN_EXPORT_UINT32(crypto_scalarmult_ed25519_BYTES, crypto_scalarmult_ed25519_BYTES) + SN_EXPORT_UINT32(crypto_scalarmult_ed25519_SCALARBYTES, crypto_scalarmult_ed25519_SCALARBYTES) + + // crypto_secretbox + + SN_EXPORT_FUNCTION(crypto_secretbox_easy, sn_crypto_secretbox_easy) + SN_EXPORT_FUNCTION(crypto_secretbox_open_easy, sn_crypto_secretbox_open_easy) + SN_EXPORT_FUNCTION(crypto_secretbox_detached, sn_crypto_secretbox_detached) + SN_EXPORT_FUNCTION(crypto_secretbox_open_detached, sn_crypto_secretbox_open_detached) + SN_EXPORT_UINT32(crypto_secretbox_KEYBYTES, crypto_secretbox_KEYBYTES) + SN_EXPORT_UINT32(crypto_secretbox_NONCEBYTES, crypto_secretbox_NONCEBYTES) + SN_EXPORT_UINT32(crypto_secretbox_MACBYTES, crypto_secretbox_MACBYTES) + SN_EXPORT_STRING(crypto_secretbox_PRIMITIVE, crypto_secretbox_PRIMITIVE) + + // crypto_secretstream + + SN_EXPORT_FUNCTION(crypto_secretstream_xchacha20poly1305_keygen, sn_crypto_secretstream_xchacha20poly1305_keygen) + SN_EXPORT_FUNCTION(crypto_secretstream_xchacha20poly1305_init_push, sn_crypto_secretstream_xchacha20poly1305_init_push) + SN_EXPORT_FUNCTION(crypto_secretstream_xchacha20poly1305_init_pull, sn_crypto_secretstream_xchacha20poly1305_init_pull) + SN_EXPORT_FUNCTION(crypto_secretstream_xchacha20poly1305_push, sn_crypto_secretstream_xchacha20poly1305_push) + SN_EXPORT_FUNCTION(crypto_secretstream_xchacha20poly1305_pull, sn_crypto_secretstream_xchacha20poly1305_pull) + SN_EXPORT_FUNCTION(crypto_secretstream_xchacha20poly1305_rekey, sn_crypto_secretstream_xchacha20poly1305_rekey) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_STATEBYTES, sizeof(crypto_secretstream_xchacha20poly1305_state)) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_ABYTES, crypto_secretstream_xchacha20poly1305_ABYTES) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_HEADERBYTES, crypto_secretstream_xchacha20poly1305_HEADERBYTES) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_KEYBYTES, crypto_secretstream_xchacha20poly1305_KEYBYTES) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_TAGBYTES, 1) + SN_EXPORT_UINT64(crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX, crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_TAG_MESSAGE, crypto_secretstream_xchacha20poly1305_TAG_MESSAGE) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_TAG_PUSH, crypto_secretstream_xchacha20poly1305_TAG_PUSH) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_TAG_REKEY, crypto_secretstream_xchacha20poly1305_TAG_REKEY) + SN_EXPORT_UINT32(crypto_secretstream_xchacha20poly1305_TAG_FINAL, crypto_secretstream_xchacha20poly1305_TAG_FINAL) + + // crypto_shorthash + + SN_EXPORT_FUNCTION(crypto_shorthash, sn_crypto_shorthash) + SN_EXPORT_UINT32(crypto_shorthash_BYTES, crypto_shorthash_BYTES) + SN_EXPORT_UINT32(crypto_shorthash_KEYBYTES, crypto_shorthash_KEYBYTES) + SN_EXPORT_STRING(crypto_shorthash_PRIMITIVE, crypto_shorthash_PRIMITIVE) + + // crypto_sign + + SN_EXPORT_FUNCTION(crypto_sign_keypair, sn_crypto_sign_keypair) + SN_EXPORT_FUNCTION(crypto_sign_seed_keypair, sn_crypto_sign_seed_keypair) + SN_EXPORT_FUNCTION(crypto_sign, sn_crypto_sign) + SN_EXPORT_FUNCTION(crypto_sign_open, sn_crypto_sign_open) + SN_EXPORT_FUNCTION(crypto_sign_detached, sn_crypto_sign_detached) + SN_EXPORT_FUNCTION(crypto_sign_verify_detached, sn_crypto_sign_verify_detached) + SN_EXPORT_FUNCTION(crypto_sign_ed25519_sk_to_pk, sn_crypto_sign_ed25519_sk_to_pk) + SN_EXPORT_FUNCTION(crypto_sign_ed25519_pk_to_curve25519, sn_crypto_sign_ed25519_pk_to_curve25519) + SN_EXPORT_FUNCTION(crypto_sign_ed25519_sk_to_curve25519, sn_crypto_sign_ed25519_sk_to_curve25519) + SN_EXPORT_UINT32(crypto_sign_SEEDBYTES, crypto_sign_SEEDBYTES) + SN_EXPORT_UINT32(crypto_sign_PUBLICKEYBYTES, crypto_sign_PUBLICKEYBYTES) + SN_EXPORT_UINT32(crypto_sign_SECRETKEYBYTES, crypto_sign_SECRETKEYBYTES) + SN_EXPORT_UINT32(crypto_sign_BYTES, crypto_sign_BYTES) + + // crypto_stream + + SN_EXPORT_FUNCTION(crypto_stream, sn_crypto_stream) + SN_EXPORT_UINT32(crypto_stream_KEYBYTES, crypto_stream_KEYBYTES) + SN_EXPORT_UINT32(crypto_stream_NONCEBYTES, crypto_stream_NONCEBYTES) + SN_EXPORT_STRING(crypto_stream_PRIMITIVE, crypto_stream_PRIMITIVE) + + SN_EXPORT_FUNCTION(crypto_stream_xor, sn_crypto_stream_xor) + SN_EXPORT_FUNCTION(crypto_stream_xor_init, sn_crypto_stream_xor_wrap_init) + SN_EXPORT_FUNCTION(crypto_stream_xor_update, sn_crypto_stream_xor_wrap_update) + SN_EXPORT_FUNCTION(crypto_stream_xor_final, sn_crypto_stream_xor_wrap_final) + SN_EXPORT_UINT32(crypto_stream_xor_STATEBYTES, sizeof(sn_crypto_stream_xor_state)) + + SN_EXPORT_FUNCTION(crypto_stream_chacha20, sn_crypto_stream_chacha20) + SN_EXPORT_UINT32(crypto_stream_chacha20_KEYBYTES, crypto_stream_chacha20_KEYBYTES) + SN_EXPORT_UINT32(crypto_stream_chacha20_NONCEBYTES, crypto_stream_chacha20_NONCEBYTES) + SN_EXPORT_UINT64(crypto_stream_chacha20_MESSAGEBYTES_MAX, crypto_stream_chacha20_MESSAGEBYTES_MAX) + + SN_EXPORT_FUNCTION(crypto_stream_chacha20_xor, sn_crypto_stream_chacha20_xor) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_xor_ic, sn_crypto_stream_chacha20_xor_ic) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_xor_init, sn_crypto_stream_chacha20_xor_wrap_init) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_xor_update, sn_crypto_stream_chacha20_xor_wrap_update) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_xor_final, sn_crypto_stream_chacha20_xor_wrap_final) + SN_EXPORT_UINT32(crypto_stream_chacha20_xor_STATEBYTES, sizeof(sn_crypto_stream_chacha20_xor_state)) + + SN_EXPORT_FUNCTION(crypto_stream_chacha20_ietf, sn_crypto_stream_chacha20_ietf) + SN_EXPORT_UINT32(crypto_stream_chacha20_ietf_KEYBYTES, crypto_stream_chacha20_ietf_KEYBYTES) + SN_EXPORT_UINT32(crypto_stream_chacha20_ietf_NONCEBYTES, crypto_stream_chacha20_ietf_NONCEBYTES) + SN_EXPORT_UINT64(crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX, crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX) + SN_EXPORT_UINT32(crypto_stream_chacha20_ietf_xor_STATEBYTES, sizeof(sn_crypto_stream_chacha20_ietf_xor_state)) + + SN_EXPORT_FUNCTION(crypto_stream_chacha20_ietf_xor, sn_crypto_stream_chacha20_ietf_xor) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_ietf_xor_ic, sn_crypto_stream_chacha20_ietf_xor_ic) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_ietf_xor_init, sn_crypto_stream_chacha20_ietf_xor_wrap_init) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_ietf_xor_update, sn_crypto_stream_chacha20_ietf_xor_wrap_update) + SN_EXPORT_FUNCTION(crypto_stream_chacha20_ietf_xor_final, sn_crypto_stream_chacha20_ietf_xor_wrap_final) + + SN_EXPORT_FUNCTION(crypto_stream_xchacha20, sn_crypto_stream_xchacha20) + SN_EXPORT_UINT32(crypto_stream_xchacha20_KEYBYTES, crypto_stream_xchacha20_KEYBYTES) + SN_EXPORT_UINT32(crypto_stream_xchacha20_NONCEBYTES, crypto_stream_xchacha20_NONCEBYTES) + SN_EXPORT_UINT64(crypto_stream_xchacha20_MESSAGEBYTES_MAX, crypto_stream_xchacha20_MESSAGEBYTES_MAX) + + SN_EXPORT_FUNCTION(crypto_stream_xchacha20_xor, sn_crypto_stream_xchacha20_xor) + SN_EXPORT_FUNCTION(crypto_stream_xchacha20_xor_ic, sn_crypto_stream_xchacha20_xor_ic) + SN_EXPORT_FUNCTION(crypto_stream_xchacha20_xor_init, sn_crypto_stream_xchacha20_xor_wrap_init) + SN_EXPORT_FUNCTION(crypto_stream_xchacha20_xor_update, sn_crypto_stream_xchacha20_xor_wrap_update) + SN_EXPORT_FUNCTION(crypto_stream_xchacha20_xor_final, sn_crypto_stream_xchacha20_xor_wrap_final) + SN_EXPORT_FUNCTION(crypto_stream_xchacha20, sn_crypto_stream_xchacha20) + SN_EXPORT_UINT32(crypto_stream_xchacha20_xor_STATEBYTES, sizeof(sn_crypto_stream_xchacha20_xor_state)) + + SN_EXPORT_FUNCTION(crypto_stream_salsa20, sn_crypto_stream_salsa20) + SN_EXPORT_UINT32(crypto_stream_salsa20_KEYBYTES, crypto_stream_salsa20_KEYBYTES) + SN_EXPORT_UINT32(crypto_stream_salsa20_NONCEBYTES, crypto_stream_salsa20_NONCEBYTES) + SN_EXPORT_UINT64(crypto_stream_salsa20_MESSAGEBYTES_MAX, crypto_stream_salsa20_MESSAGEBYTES_MAX) + + SN_EXPORT_FUNCTION(crypto_stream_salsa20_xor, sn_crypto_stream_salsa20_xor) + SN_EXPORT_FUNCTION(crypto_stream_salsa20_xor_ic, sn_crypto_stream_salsa20_xor_ic) + SN_EXPORT_FUNCTION(crypto_stream_salsa20_xor_init, sn_crypto_stream_salsa20_xor_wrap_init) + SN_EXPORT_FUNCTION(crypto_stream_salsa20_xor_update, sn_crypto_stream_salsa20_xor_wrap_update) + SN_EXPORT_FUNCTION(crypto_stream_salsa20_xor_final, sn_crypto_stream_salsa20_xor_wrap_final) + SN_EXPORT_UINT32(crypto_stream_salsa20_xor_STATEBYTES, sizeof(sn_crypto_stream_salsa20_xor_state)) + + // extensions + + // tweak + + SN_EXPORT_FUNCTION(extension_tweak_ed25519_base, sn_extension_tweak_ed25519_base) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_sign_detached, sn_extension_tweak_ed25519_sign_detached) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_sk_to_scalar, sn_extension_tweak_ed25519_sk_to_scalar) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_scalar, sn_extension_tweak_ed25519_scalar) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_pk, sn_extension_tweak_ed25519_pk) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_keypair, sn_extension_tweak_ed25519_keypair) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_scalar_add, sn_extension_tweak_ed25519_scalar_add) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_pk_add, sn_extension_tweak_ed25519_pk_add) + SN_EXPORT_FUNCTION(extension_tweak_ed25519_keypair_add, sn_extension_tweak_ed25519_keypair_add) + SN_EXPORT_UINT32(extension_tweak_ed25519_BYTES, sn__extension_tweak_ed25519_BYTES) + SN_EXPORT_UINT32(extension_tweak_ed25519_SCALARBYTES, sn__extension_tweak_ed25519_SCALARBYTES) + + // pbkdf2 + + SN_EXPORT_FUNCTION(extension_pbkdf2_sha512, sn_extension_pbkdf2_sha512) + SN_EXPORT_FUNCTION(extension_pbkdf2_sha512_async, sn_extension_pbkdf2_sha512_async) + SN_EXPORT_UINT32(extension_pbkdf2_sha512_SALTBYTES, sn__extension_pbkdf2_sha512_SALTBYTES) + SN_EXPORT_UINT32(extension_pbkdf2_sha512_HASHBYTES, sn__extension_pbkdf2_sha512_HASHBYTES) + SN_EXPORT_UINT32(extension_pbkdf2_sha512_ITERATIONS_MIN, sn__extension_pbkdf2_sha512_ITERATIONS_MIN) + SN_EXPORT_UINT64(extension_pbkdf2_sha512_BYTES_MAX, sn__extension_pbkdf2_sha512_BYTES_MAX) + + return exports; +} + +static napi_value Init(napi_env env, napi_value exports) { + return create_sodium_native(env); +} + +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) diff --git a/node_modules/sodium-native/extensions/pbkdf2/pbkdf2.c b/node_modules/sodium-native/extensions/pbkdf2/pbkdf2.c new file mode 100644 index 00000000..c1bad309 --- /dev/null +++ b/node_modules/sodium-native/extensions/pbkdf2/pbkdf2.c @@ -0,0 +1,90 @@ +/*- + * Copyright 2005,2007,2009 Colin Percival + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Adapted from libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf-sha256.c + */ + +#include +#include + +#include "pbkdf2.h" + +/** + * pbkdf2_sha512(passwd, passwdlen, salt, saltlen, c, buf, dkLen): + * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and + * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). + */ +int +sn__extension_pbkdf2_sha512(const unsigned char *passwd, size_t passwdlen, + const unsigned char *salt, size_t saltlen, uint64_t c, + unsigned char *buf, size_t dkLen) +{ + crypto_auth_hmacsha512_state PShctx, hctx; + size_t i; + unsigned char ivec[4]; + unsigned char U[64]; + unsigned char T[64]; + uint64_t j; + unsigned int k; + size_t clen; + + if (dkLen > sn__extension_pbkdf2_sha512_BYTES_MAX) { + return -1; + } + + crypto_auth_hmacsha512_init(&PShctx, passwd, passwdlen); + crypto_auth_hmacsha512_update(&PShctx, salt, saltlen); + + for (i = 0; i * crypto_auth_hmacsha512_BYTES < dkLen; i++) { + SN_PBKDF2_STORE32_BE(ivec, (uint32_t)(i + 1)); + memcpy(&hctx, &PShctx, sizeof(crypto_auth_hmacsha512_state)); + crypto_auth_hmacsha512_update(&hctx, ivec, 4); + crypto_auth_hmacsha512_final(&hctx, U); + + memcpy(T, U, crypto_auth_hmacsha512_BYTES); + /* LCOV_EXCL_START */ + for (j = 2; j <= c; j++) { + crypto_auth_hmacsha512_init(&hctx, passwd, passwdlen); + crypto_auth_hmacsha512_update(&hctx, U, crypto_auth_hmacsha512_BYTES); + crypto_auth_hmacsha512_final(&hctx, U); + + for (k = 0; k < crypto_auth_hmacsha512_BYTES; k++) { + T[k] ^= U[k]; + } + } + /* LCOV_EXCL_STOP */ + + clen = dkLen - i * crypto_auth_hmacsha512_BYTES; + if (clen > crypto_auth_hmacsha512_BYTES) { + clen = crypto_auth_hmacsha512_BYTES; + } + memcpy(&buf[i * crypto_auth_hmacsha512_BYTES], T, clen); + } + sodium_memzero((void *) &PShctx, sizeof PShctx); + + return 0; +} diff --git a/node_modules/sodium-native/extensions/pbkdf2/pbkdf2.h b/node_modules/sodium-native/extensions/pbkdf2/pbkdf2.h new file mode 100644 index 00000000..562d34fb --- /dev/null +++ b/node_modules/sodium-native/extensions/pbkdf2/pbkdf2.h @@ -0,0 +1,54 @@ +/*- + * Copyright 2005,2007,2009 Colin Percival + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/* + * Adapted from libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf-sha256.c + */ + +#include + +#define SN_PBKDF2_STORE32_BE(buf, n32) \ + buf[0] = n32 >> 24 & 0xff; \ + buf[1] = n32 >> 16 & 0xff; \ + buf[2] = n32 >> 8 & 0xff; \ + buf[3] = n32 >> 0 & 0xff; + +#define sn__extension_pbkdf2_sha512_SALTBYTES 16U + +#define sn__extension_pbkdf2_sha512_HASHBYTES crypto_hash_sha512_BYTES + +#define sn__extension_pbkdf2_sha512_ITERATIONS_MIN 1U + +#define sn__extension_pbkdf2_sha512_BYTES_MAX 0x3fffffffc0ULL + +/** + * extension_pbkdf2_sha512(passwd, passwdlen, salt, saltlen, c, buf, dkLen): + * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and + * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). + */ +int sn__extension_pbkdf2_sha512(const unsigned char *, size_t, const unsigned char *, size_t, + uint64_t, unsigned char *, size_t); diff --git a/node_modules/sodium-native/extensions/tweak/tweak.c b/node_modules/sodium-native/extensions/tweak/tweak.c new file mode 100644 index 00000000..a4813a06 --- /dev/null +++ b/node_modules/sodium-native/extensions/tweak/tweak.c @@ -0,0 +1,206 @@ +#include "tweak.h" + +/* + *EXPERIMENTAL API* + + This module is an experimental implementation of a key tweaking protocol + over ed25519 keys. The signature algorithm has been reimplemented from + libsodium, but the nonce generation algorithm is *non-standard*. + + Use at your own risk +*/ + +static void _extension_tweak_nonce (unsigned char *nonce, const unsigned char *n, + const unsigned char *m, unsigned long long mlen) +{ + // dom2(x, y) with x = 0 (not prehashed) and y = "crypto_tweak_ed25519" + static const unsigned char TWEAK_PREFIX[32 + 2 + 20] = { + 'S', 'i', 'g', 'E', 'd', '2', '5', '5', '1', '9', ' ', + 'n', 'o', ' ', 'E', 'd', '2', '5', '5', '1', '9', ' ', + 'c', 'o', 'l', 'l', 'i', 's', 'i', 'o', 'n', 's', 0, + 20, 'c', 'r', 'y', 'p', 't', 'o', '_', 't', 'w', 'e', + 'a', 'k', '_', 'e', 'd', '2', '5', '5', '1', '9' + }; + + crypto_hash_sha512_state hs; + + crypto_hash_sha512_init(&hs); + crypto_hash_sha512_update(&hs, TWEAK_PREFIX, sizeof TWEAK_PREFIX); + crypto_hash_sha512_update(&hs, n, 32); + crypto_hash_sha512_update(&hs, m, mlen); + crypto_hash_sha512_final(&hs, nonce); +} + +static inline void +_crypto_sign_ed25519_clamp(unsigned char k[32]) +{ + k[0] &= 248; + k[31] &= 127; + k[31] |= 64; +} + +static void _extension_tweak_ed25519(unsigned char *q, unsigned char *n, + const unsigned char *ns, unsigned long long nslen) +{ + sodium_memzero(q, sizeof q); + + crypto_hash(n, ns, nslen); + n[31] &= 127; // clear highest bit + + crypto_scalarmult_ed25519_base_noclamp(q, n); + + // hash tweak until we get a valid tweaked q + while (crypto_core_ed25519_is_valid_point(q) != 1) { + crypto_hash(n, n, 32); + n[31] &= 127; // clear highest bit + + crypto_scalarmult_ed25519_base_noclamp(q, n); + } +} + +void sn__extension_tweak_ed25519_base(unsigned char *pk, unsigned char *scalar, + const unsigned char *ns, unsigned long long nslen) +{ + unsigned char n64[64]; + + _extension_tweak_ed25519(pk, n64, ns, nslen); + + SN_TWEAK_COPY_32(scalar, n64) +} + +int sn__extension_tweak_ed25519_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, unsigned char *pk) +{ + crypto_hash_sha512_state hs; + + unsigned char nonce[64]; + unsigned char R[32]; + unsigned char hram[64]; + unsigned char _pk[32]; + + // check if pk was passed + if (pk == NULL) { + pk = _pk; + + // derive pk from scalar + if (crypto_scalarmult_ed25519_base_noclamp(pk, n) != 0) { + return -1; + } + } + + _extension_tweak_nonce(nonce, n, m, mlen); + crypto_core_ed25519_scalar_reduce(nonce, nonce); + + // R = G ^ nonce : curve point from nonce + if (crypto_scalarmult_ed25519_base_noclamp(R, nonce) != 0) { + return -1; + } + + // generate challenge as h(ram) = hash(R, pk, message) + crypto_hash_sha512_init(&hs); + crypto_hash_sha512_update(&hs, R, 32); + crypto_hash_sha512_update(&hs, pk, 32); + crypto_hash_sha512_update(&hs, m, mlen); + + crypto_hash_sha512_final(&hs, hram); + + crypto_core_ed25519_scalar_reduce(hram, hram); + + // sig = nonce + n * h(ram) + crypto_core_ed25519_scalar_mul(sig, hram, n); + crypto_core_ed25519_scalar_add(sig + 32, nonce, sig); + + SN_TWEAK_COPY_32(sig, R) + + if (siglen_p != NULL) { + *siglen_p = 64U; + } + + return 0; +} + +// tweak a secret key +void sn__extension_tweak_ed25519_sk_to_scalar(unsigned char *n, const unsigned char *sk) +{ + unsigned char n64[64]; + + // get sk scalar from seed, cf. crypto_sign_keypair_seed + crypto_hash(n64, sk, 32); + _crypto_sign_ed25519_clamp(n64); + + SN_TWEAK_COPY_32(n, n64) +} + +// tweak a secret key +void sn__extension_tweak_ed25519_scalar(unsigned char *scalar_out, + const unsigned char *scalar, + const unsigned char *ns, + unsigned long long nslen) +{ + unsigned char n[64]; + unsigned char q[32]; + + _extension_tweak_ed25519(q, n, ns, nslen); + crypto_core_ed25519_scalar_add(scalar_out, scalar, n); +} + +// tweak a public key +int sn__extension_tweak_ed25519_pk(unsigned char *tpk, + const unsigned char *pk, + const unsigned char *ns, + unsigned long long nslen) +{ + unsigned char n[64]; + unsigned char q[32]; + + _extension_tweak_ed25519(q, n, ns, nslen); + return crypto_core_ed25519_add(tpk, q, pk); +} + + +void sn__extension_tweak_ed25519_keypair(unsigned char *pk, unsigned char *scalar_out, + unsigned char *scalar, const unsigned char *ns, + unsigned long long nslen) +{ + unsigned char n64[64]; + + crypto_hash(n64, ns, nslen); + n64[31] &= 127; // clear highest bit + + sn__extension_tweak_ed25519_scalar_add(scalar_out, scalar, n64); + crypto_scalarmult_ed25519_base_noclamp(pk, scalar_out); + + // hash tweak until we get a valid tweaked point + while (crypto_core_ed25519_is_valid_point(pk) != 1) { + crypto_hash(n64, n64, 32); + n64[31] &= 127; // clear highest bit + + sn__extension_tweak_ed25519_scalar_add(scalar_out, scalar, n64); + crypto_scalarmult_ed25519_base_noclamp(pk, scalar_out); + } +} + +// add tweak to scalar +void sn__extension_tweak_ed25519_scalar_add(unsigned char *scalar_out, + const unsigned char *scalar, + const unsigned char *n) +{ + crypto_core_ed25519_scalar_add(scalar_out, scalar, n); +} + +// add tweak point to public key +int sn__extension_tweak_ed25519_pk_add(unsigned char *tpk, + const unsigned char *pk, + const unsigned char *q) +{ + return crypto_core_ed25519_add(tpk, pk, q); +} + + +int sn__extension_tweak_ed25519_keypair_add(unsigned char *pk, unsigned char *scalar_out, + unsigned char *scalar, const unsigned char *tweak) +{ + sn__extension_tweak_ed25519_scalar_add(scalar_out, scalar, tweak); + return crypto_scalarmult_ed25519_base_noclamp(pk, scalar_out); +} \ No newline at end of file diff --git a/node_modules/sodium-native/extensions/tweak/tweak.h b/node_modules/sodium-native/extensions/tweak/tweak.h new file mode 100644 index 00000000..2fdb6caf --- /dev/null +++ b/node_modules/sodium-native/extensions/tweak/tweak.h @@ -0,0 +1,54 @@ +#include + +// copy 32 bytes using int64_t pointers +#define SN_TWEAK_COPY_32(a, b) \ + { \ + long long *dst = (long long *) a; \ + long long *src = (long long *) b; \ + dst[0] = src[0]; \ + dst[1] = src[1]; \ + dst[2] = src[2]; \ + dst[3] = src[3]; \ + } + +#define sn__extension_tweak_ed25519_BYTES crypto_sign_ed25519_PUBLICKEYBYTES + +#define sn__extension_tweak_ed25519_SCALARBYTES crypto_scalarmult_ed25519_SCALARBYTES + +int sn__extension_tweak_ed25519_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, unsigned char *pk); + +void sn__extension_tweak_ed25519_base(unsigned char *pk, unsigned char *scalar, + const unsigned char *ns, unsigned long long nslen); + +void sn__extension_tweak_ed25519_sk_to_scalar(unsigned char *scalar, const unsigned char *sk); + +// tweak a secret key +void sn__extension_tweak_ed25519_scalar(unsigned char *scalar_out, + const unsigned char *scalar, + const unsigned char *ns, + unsigned long long nslen); + +// tweak a public key +int sn__extension_tweak_ed25519_pk(unsigned char *tpk, + const unsigned char *pk, + const unsigned char *ns, + unsigned long long nslen); + +void sn__extension_tweak_ed25519_keypair(unsigned char *pk, unsigned char *scalar_out, + unsigned char *scalar, const unsigned char *ns, + unsigned long long nslen); + +// add tweak scalar to private key +void sn__extension_tweak_ed25519_scalar_add(unsigned char *scalar_out, + const unsigned char *scalar, + const unsigned char *n); + +// add tweak point to public key +int sn__extension_tweak_ed25519_pk_add(unsigned char *tpk, + const unsigned char *pk, + const unsigned char *q); + +int sn__extension_tweak_ed25519_keypair_add(unsigned char *pk, unsigned char *scalar_out, + unsigned char *scalar, const unsigned char *tweak); diff --git a/node_modules/sodium-native/index.js b/node_modules/sodium-native/index.js new file mode 100644 index 00000000..6f7d6f0c --- /dev/null +++ b/node_modules/sodium-native/index.js @@ -0,0 +1,3 @@ +require.addon = require('require-addon') + +module.exports = require.addon('.', __filename) diff --git a/node_modules/sodium-native/macros.h b/node_modules/sodium-native/macros.h new file mode 100644 index 00000000..4d5003b1 --- /dev/null +++ b/node_modules/sodium-native/macros.h @@ -0,0 +1,319 @@ +#define SN_STATUS_THROWS(call, message) \ + if ((call) != napi_ok) { \ + napi_throw_error(env, NULL, message); \ + return NULL; \ + } + +#define SN_STATUS_THROWS_VOID(call, message) \ + if ((call) != napi_ok) { \ + napi_throw_error(env, NULL, message); \ + return; \ + } + +#define SN_THROWS(condition, message) \ + if ((condition)) { \ + napi_throw_error(env, NULL, message); \ + return NULL; \ + } + +#define SN_BUFFER_CAST(type, name, val) \ + type name; \ + size_t name##_size; \ + SN_STATUS_THROWS(napi_get_buffer_info(env, val, (void **) &name, &name##_size), "") + +#define SN_TYPE_ASSERT(name, var, type, message) \ + napi_valuetype name##_valuetype; \ + SN_STATUS_THROWS(napi_typeof(env, var, &name##_valuetype), ""); \ + if (name##_valuetype != type) { \ + napi_throw_type_error(env, NULL, message); \ + return NULL; \ + } + +#define SN_TYPEDARRAY_ASSERT(name, var, message) \ + bool name##_is_typedarray; \ + SN_STATUS_THROWS(napi_is_typedarray(env, var, &name##_is_typedarray), ""); \ + if (name##_is_typedarray != true) { \ + napi_throw_type_error(env, NULL, message); \ + return NULL; \ + } + +#define SN_ASSERT_MIN_LENGTH(length, constant, name) \ + SN_THROWS(length < constant, #name " must be at least " #constant " bytes long") + + +#define SN_ASSERT_MAX_LENGTH(length, constant, name) \ + SN_THROWS(length > constant, #name " must be at most " #constant " bytes long") + + +#define SN_ASSERT_LENGTH(length, constant, name) \ + SN_THROWS(length != constant, #name " must be " #constant " bytes long") + +#define SN_RANGE_THROWS(condition, message) \ + if (condition) { \ + napi_throw_range_error(env, NULL, message); \ + return NULL; \ + } + +#define SN_ARGV(n, method_name) \ + napi_value argv[n]; \ + size_t argc = n; \ + SN_STATUS_THROWS(napi_get_cb_info(env, info, &argc, argv, NULL, NULL), ""); \ + if (argc != n) { \ + napi_throw_type_error(env, NULL, #method_name " requires " #n " argument(s)"); \ + return NULL; \ + } + +#define SN_ARGV_OPTS(required, total, method_name) \ + napi_value argv[total]; \ + size_t argc = total; \ + SN_STATUS_THROWS(napi_get_cb_info(env, info, &argc, argv, NULL, NULL), ""); \ + if (argc < required) { \ + napi_throw_type_error(env, NULL, #method_name " requires at least " #required " argument(s)"); \ + return NULL; \ + } + +#define SN_EXPORT_FUNCTION(name, cb) \ + { \ + napi_value name##_fn; \ + SN_STATUS_THROWS(napi_create_function(env, #name, NAPI_AUTO_LENGTH, cb, NULL, &name##_fn), "") \ + SN_STATUS_THROWS(napi_set_named_property(env, exports, #name, name##_fn), "") \ + } + +#define SN_EXPORT_UINT32(name, num) \ + { \ + napi_value name##_num; \ + SN_STATUS_THROWS(napi_create_uint32(env, (uint32_t) num, &name##_num), "") \ + SN_STATUS_THROWS(napi_set_named_property(env, exports, #name, name##_num), "") \ + } + +#define SN_EXPORT_UINT64(name, num) \ + { \ + napi_value name##_num; \ + uint64_t max = 0x1fffffffffffffULL; \ + SN_STATUS_THROWS(napi_create_int64(env, (uint64_t) (max < num ? max : num), &name##_num), "") \ + SN_STATUS_THROWS(napi_set_named_property(env, exports, #name, name##_num), "") \ + } + +#define SN_EXPORT_STRING(name, string) \ + { \ + napi_value name##_string; \ + SN_STATUS_THROWS(napi_create_string_utf8(env, string, NAPI_AUTO_LENGTH, &name##_string), "") \ + SN_STATUS_THROWS(napi_set_named_property(env, exports, #name, name##_string), "") \ + } + +#define SN_ARGV_CHECK_NULL(name, index) \ + napi_valuetype name##_valuetype; \ + SN_STATUS_THROWS(napi_typeof(env, argv[index], &name##_valuetype), "") \ + bool name##_is_null = name##_valuetype == napi_null; + +#define SN_ARGV_OPTS_TYPEDARRAY(name, index) \ + napi_valuetype name##_valuetype; \ + void *name##_data = NULL; \ + size_t name##_size = 0; \ + SN_STATUS_THROWS(napi_typeof(env, argv[index], &name##_valuetype), "") \ + if (name##_valuetype != napi_null && name##_valuetype != napi_undefined) { \ + napi_value name##_argv = argv[index]; \ + SN_TYPEDARRAY_ASSERT(name, name##_argv, #name " must be an instance of TypedArray") \ + SN_OPT_TYPEDARRAY(name, name##_argv) \ + } + +#define SN_TYPEDARRAY(name, var) \ + napi_typedarray_type name##_type; \ + size_t name##_length; \ + void *name##_data; \ + napi_get_typedarray_info(env, (var), &name##_type, &name##_length, &name##_data, NULL, NULL); \ + uint8_t name##_width = typedarray_width(name##_type); \ + SN_THROWS(name##_width == 0, "Unexpected TypedArray type") \ + size_t name##_size = name##_length * name##_width; + +#define SN_TYPEDARRAY_PTR(name, var) \ + napi_typedarray_type name##_type; \ + size_t name##_length; \ + void *name##_data; \ + napi_get_typedarray_info(env, (var), &name##_type, &name##_length, &name##_data, NULL, NULL); \ + uint8_t name##_width = typedarray_width(name##_type); \ + SN_THROWS(name##_width == 0, "Unexpected TypedArray type") \ + +#define SN_OPT_TYPEDARRAY(name, var) \ + napi_typedarray_type name##_type; \ + size_t name##_length; \ + napi_get_typedarray_info(env, (var), &name##_type, &name##_length, &name##_data, NULL, NULL); \ + uint8_t name##_width = typedarray_width(name##_type); \ + SN_THROWS(name##_width == 0, "Unexpected TypedArray type") \ + name##_size = name##_length * name##_width; + +#define SN_UINT8(name, val) \ + uint32_t name##_int32; \ + if (napi_get_value_uint32(env, val, &name##_int32) != napi_ok) { \ + napi_throw_error(env, "EINVAL", "Expected number"); \ + return NULL; \ + } \ + SN_THROWS(name##_int32 > 255, "expect uint8") \ + unsigned char name = 0xff & name##_int32; + +#define SN_UINT32(name, val) \ + uint32_t name; \ + if (napi_get_value_uint32(env, val, &name) != napi_ok) { \ + napi_throw_error(env, "EINVAL", "Expected number"); \ + return NULL; \ + } + +#define SN_OPT_UINT32(name, val) \ + if (napi_get_value_uint32(env, val, (uint32_t *) &name) != napi_ok) { \ + napi_throw_error(env, "EINVAL", "Expected number"); \ + return NULL; \ + } + +#define SN_UINT64(name, val) \ + int64_t name##_i64; \ + if (napi_get_value_int64(env, val, &name##_i64) != napi_ok) { \ + napi_throw_error(env, "EINVAL", "Expected number"); \ + return NULL; \ + } \ + if (name##_i64 < 0) { \ + napi_throw_error(env, "EINVAL", "Expected positive number"); \ + return NULL; \ + } \ + uint64_t name = (uint64_t) name##_i64; + +#define SN_ARGV_TYPEDARRAY(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPEDARRAY_ASSERT(name, name##_argv, #name " must be an instance of TypedArray") \ + SN_TYPEDARRAY(name, name##_argv) + +#define SN_ARGV_TYPEDARRAY_PTR(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPEDARRAY_ASSERT(name, name##_argv, #name " must be an instance of TypedArray") \ + SN_TYPEDARRAY_PTR(name, name##_argv) + +#define SN_ARGV_BUFFER_CAST(type, name, index) \ + napi_value name##_argv = argv[index]; \ + SN_BUFFER_CAST(type, name, name##_argv) + +#define SN_OPT_ARGV_TYPEDARRAY(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPEDARRAY_ASSERT(name, name##_argv, #name " must be an instance of TypedArray") \ + SN_OPT_TYPEDARRAY(name, name##_argv) + +#define SN_ARGV_UINT8(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPE_ASSERT(name, name##_argv, napi_number, #name " must be an instance of Number") \ + SN_UINT8(name, name##_argv) + +#define SN_ARGV_UINT32(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPE_ASSERT(name, name##_argv, napi_number, #name " must be an instance of Number") \ + SN_UINT32(name, name##_argv) + +#define SN_ARGV_UINT64(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPE_ASSERT(name, name##_argv, napi_number, #name " must be an instance of Number") \ + SN_UINT64(name, name##_argv) + +#define SN_OPT_ARGV_UINT32(name, index) \ + napi_value name##_argv = argv[index]; \ + SN_TYPE_ASSERT(name, name##_argv, napi_number, #name " must be an instance of Number") \ + SN_OPT_UINT32(name, name##_argv) + +#define SN_CALL(call, message) \ + int success = call; \ + SN_THROWS(success != 0, message) + +#define SN_CALL_FUNCTION(env, ctx, cb, n, argv, res) \ + if (napi_make_callback(env, NULL, ctx, cb, n, argv, res) == napi_pending_exception) { \ + napi_value fatal_exception; \ + napi_get_and_clear_last_exception(env, &fatal_exception); \ + napi_fatal_exception(env, fatal_exception); \ + } + +#define SN_RETURN(call, message) \ + int success = call; \ + SN_THROWS(success != 0, message) \ + return NULL; + +#define SN_RETURN_BOOLEAN(call) \ + int success = call; \ + napi_value result; \ + SN_THROWS(napi_get_boolean(env, success == 0, &result) != napi_ok, "result not boolean") \ + return result; + +#define SN_RETURN_BOOLEAN_FROM_1(call) \ + int success = call; \ + napi_value result; \ + SN_THROWS(napi_get_boolean(env, success != 0, &result) != napi_ok, "result not boolean") \ + return result; + +#define SN_ASYNC_CHECK_FOR_ERROR(message) \ + if (req->n == 0) { \ + napi_get_null(req->env, &argv[0]); \ + } else { \ + napi_value err_msg; \ + napi_create_string_utf8(req->env, #message, NAPI_AUTO_LENGTH, &err_msg); \ + napi_create_error(req->env, NULL, err_msg, &argv[0]); \ + } + +#define SN_CALLBACK_CHECK_FOR_ERROR(message) \ + if (task->code == 0) { \ + napi_get_null(req->env, &argv[0]); \ + } else { \ + napi_value err_msg; \ + napi_create_string_utf8(req->env, #message, NAPI_AUTO_LENGTH, &err_msg); \ + napi_create_error(req->env, NULL, err_msg, &argv[0]); \ + } + +#define SN_QUEUE_WORK(req, execute, complete) \ + uv_loop_t *loop; \ + napi_get_uv_event_loop(env, &loop); \ + uv_queue_work(loop, (uv_work_t *) req, execute, complete); + +#define SN_QUEUE_TASK(task, execute, complete) \ + uv_loop_t *loop; \ + napi_get_uv_event_loop(env, &loop); \ + uv_queue_work(loop, (uv_work_t *) task, execute, complete); + +#define SN_ASYNC_TASK(cb_pos) \ + task->req = (void *) req; \ + napi_value promise; \ + if (argc > cb_pos) { \ + task->type = sn_async_task_callback; \ + promise = NULL; \ + napi_value cb = argv[cb_pos]; \ + napi_valuetype type; \ + SN_STATUS_THROWS(napi_typeof(env, cb, &type), "") \ + if (type != napi_function) { \ + napi_throw_error(env, "EINVAL", "Callback must be a function"); \ + return NULL; \ + } \ + SN_STATUS_THROWS(napi_create_reference(env, cb, 1, &task->cb), "") \ + } else { \ + task->type = sn_async_task_promise; \ + napi_create_promise(env, &task->deferred, &promise); \ + } + +#define SN_ASYNC_COMPLETE(message) \ + napi_value argv[1]; \ + switch (task->type) { \ + case sn_async_task_promise: { \ + if (task->code == 0) { \ + napi_get_null(req->env, &argv[0]); \ + napi_resolve_deferred(req->env, task->deferred, argv[0]); \ + } else { \ + napi_value err_msg; \ + napi_create_string_utf8(req->env, #message, NAPI_AUTO_LENGTH, &err_msg); \ + napi_create_error(req->env, NULL, err_msg, &argv[0]); \ + napi_reject_deferred(req->env, task->deferred, argv[0]); \ + } \ + task->deferred = NULL; \ + break; \ + } \ + case sn_async_task_callback: { \ + SN_CALLBACK_CHECK_FOR_ERROR(#message) \ + napi_value callback; \ + napi_get_reference_value(req->env, task->cb, &callback); \ + napi_value return_val; \ + SN_CALL_FUNCTION(req->env, global, callback, 1, argv, &return_val) \ + napi_close_handle_scope(req->env, scope); \ + napi_delete_reference(req->env, task->cb); \ + break; \ + } \ + } diff --git a/node_modules/sodium-native/package.json b/node_modules/sodium-native/package.json new file mode 100644 index 00000000..3fa26116 --- /dev/null +++ b/node_modules/sodium-native/package.json @@ -0,0 +1,47 @@ +{ + "name": "sodium-native", + "version": "4.3.3", + "description": "Low level bindings for libsodium", + "main": "index.js", + "files": [ + "index.js", + "binding.c", + "macros.h", + "extensions", + "prebuilds", + "CMakeLists.txt" + ], + "addon": true, + "dependencies": { + "require-addon": "^1.1.0" + }, + "devDependencies": { + "brittle": "^3.5.0", + "cmake-bare": "^1.1.10", + "cmake-fetch": "^1.0.1", + "cmake-napi": "^1.0.5", + "standard": "^17.1.0" + }, + "scripts": { + "test": "standard && brittle test/*.js" + }, + "standard": { + "ignore": [ + "/test/fixtures/*.js" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/holepunchto/sodium-native.git" + }, + "contributors": [ + "Emil Bay (http://bayes.dk)", + "Mathias Buus (https://mafinto.sh)", + "Christophe Diederichs " + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/holepunchto/sodium-native/issues" + }, + "homepage": "https://github.com/holepunchto/sodium-native" +} diff --git a/node_modules/sodium-native/prebuilds/android-arm/sodium-native.bare b/node_modules/sodium-native/prebuilds/android-arm/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..f60eed5fac28bcf1504b8b4f1c2f1ba48d205696 GIT binary patch literal 508800 zcmeFad0LD^F#~41e}beyoVV9wYqNBge<9@V9%mnb>1uE^qO>;I|U~ zc#Qba0*SJ8JhDy>p1mo`Z0+hka-Hcly&F?J9k_Y#s3( z!JPht^x@0Gg`*PkvjcASFn=kH?uBrp@UV6WNQ_QNii<|O5vBMx zjspCT{~GxEHEvSBf&c$B0am`^cno-2x9?0_r?&LVH)!nmaY0iG3@$Qm+!3Ertmvvg zo|Z-N1>|%5F?R)ri-@@cI5!L1MdMD=xWCZ2Cu`hGI5$gw6X#~>|Eh8SrEx#w+(q!- zl&cVn-$~<+(zu6c+?g8p295iG#(iDmexz|1V9YH2vGSDAxaVlxdo}KSjF{3Ni|?ax zf30zUuW@hJxP2ItNPjH7212J5J(xR4<8GTz3JhT1ZLE={KSr;3&dt7OXx!gw+-o)N z?Hc!Sjr)qm{aE7`m{KYa%io(7O8R5&cQx*&8uw=!w_W3&p>bzw+}kzo6B_rQoSVH? zFD92xY|nSgsNH@VcWaINbB#Mi;~u4P&*R)I|CJi|dX4)Bjr&K9`+&xMQscg$ao^Oq zjb)YkvhozvxJzieolvs&9I*Nxsb2oze9(Pzr52WvZ6dDSok-{e`g~l|2oL;-UvO7lD;>B{P{3L=O|w|q>N^$kD4$tRSEcWD3lS}Aqoh9s^$Ge}PhF+_x+1?}qjfYz3SR~Ft8-aT z$&z~);;-+F^rY}>N)UBEqqIjyq*r;Lo~lUsKQD#!+ZY5}fYrAQ;+Z~E%D)=vcDCur zE~Pgg@oK`+Ov>**+{2)BYD?}Mu^9}sMyu2TE2gL^jIYb3WF?XmthrG3t$ zJ;oK(Q*Ehyb=MEj?GttY$m{Sf5OwQYKemGZxY^dc`R={D z^_BGYyhAi-ke-6kuB`r*AdhcP(o-|3zA@m>m78=_P|9yO+?#*U(PJsU@6g_t!}N4Y z3f~`gRg+$NIxK}>2)8L(Pv<0e4DvhOU->=*?(fo+@6n~v9uM{OTuOf<`0@5b9gUUT zMue{#kM@zuTN&j^TcxApQu-g@dq*&X%%A>ZLw$6VF4g}j(hGQ3Y2P~#iieQdZYllmQSKuX z6n@!{{_^Jn#eD(oIrUTICzbDg(0AuDJz1stUPAgMDx?0=_fHr-Yw3yEIgEavgFpIz zsmKF=3d1g>oPhoD>tjp zedrte*JgpgeBkZ{`pqW2<9jmd{~;PfZjat*uNQ0ev`LDe5A8Cdo6?^lny5`r9idAJ z>91tZFVZ{8Hn^wjMUK@DZLUX z@5AXj3YWq^0sThoQ~13A@;hBs$?pvEYxJ=~zxP1T+t3fPe42ptn#|P^M6^&|f20?* z4sI#^j-bzXe<|`L1N``+q{8oW;GS4U=}*s*-^xHGzX0$<8&2N7hkVBM(9v!wzb(jb z^G>Dx!yvx~9aH$BEc!=<)_R9LxPkI?e5#c92>A7Kj3UqSp?>FYDEeU%!XLV;$deif ze;UeC))(y||Ef-b{E+(FB0qJdi2mCI5e+K!sXBg6#$~O)CF>$k= z=1Jd2qW`@6}{{Zc|xtpFsr23hW?#f|`Jje%nm{#a0 zS)zY9+!Zj0njpm=!{k*bCB6;$&Hr8D*HH-fBpURT^6wA+Iy4LEN%5zHz8{`e_^Bn* ztJxOvPRcJ5?l$ced6*1$La5?4q5g5`Y;yg-2E9+;hP;x}zk~Xoc%~`Y#aty}762Zjbh9b5rl2ADb*<|8$Oj^1F=67f)|_3#|<$=Kb&g@2MpJ@7w>h z1%Ag^1?ormiz=mykb-8m$As& z0<4%H9YAMA0j5+Wot{SMy^W@B-gUeve}H%WqNmV_^A+*YBi?Sx$j}GtPGu0a@0yU>8)Pg_~tco#7M$lV4z-4BYnFf7jGZ9GssHTK=K|%y}WhavvBsxG~jm)>x|dAY+oXT;jm_KmR_V z@v@$s#$UfRVAijLeRY`unO^KQ!G=8X8)1jQ0{8Ri2`w> zrWXnrem8vdl&Wn8ZTReSpHd$6HvHMi(OaW_j$YG z+5Y8&m(DN0<>c08g*VLGf4^|&GBa}4-u$#t)3KZPzP$8py}`Cx{g19HJfgi%$=Utq zCGES>?bW3^XKo*>RQL0)lW(F89>?{F-*IGEq2Bkd_bC~-^7Vp+b0*fDdZ#zX zTDpGamgAy7`m*4;w~6zI+h?bG8CQoU*Qj{l%E*>O<|T|@UL|Ev$ei{`^AiTvOz6`8 zNW-PKDh*ik>U^<5Uwm+-?~xC)@4Qnne?YxStKV;TVp%jT-F!G=TK!dBdIt8K@$6C^ z--^r1=Z`sjD*?Y+P?Yj?48l5!KdxoSF#sO&RIOG*ZRG|s}Ifhov~|F=FwBjdPVKK zF{^g9z7cP)ZZB}g`pul=l$JFXRbR9^xO053gHem;J(}@PXdnB?3gf39exS?$=+=&; z`vr8BGcUhevD5gKJqu(lO*ybF`|$YCrYR%4G!N^rzr>(16cG`X9vRUmE-^AbZm>;q zM%r!ZadtRTY%y`Ec3VnBq`gm4N`{bGCsa{ zWK_S1xWqn5lo**D7m*6@_{dayge@f{DMkE%(DvArq=BLziyQ}^LCLo0$dr`GLCiz^ z&itf65fQ0&mU2{Vzlc7Oaq)7NN;EFhsCZjsic_{idH9U^G-J{tQ=<8r#V19nYMPd) z@#&Ldvx#+NRZomeuti5Crz9oYQtX37{}fw7(g0h;z?8^j(IeW1I>bf@wd|eNr;jZ~ z^pA}0o5q?b9gPeUux3q48N`@(wurR2M0-PDF{!8&8|bDa z#b?9H**hr-jgu$_X2fw-aG}JYLhj{4h3&Q|q>>aF6=h3J<;yI8Ly4l36600%;lB+` ziL={S#FWUy=%j?+gY33c>7CV6s*zMlO|Z1YIIv`bs_w2sq9L?-z$*eIv85!$C4#}@ zqQqoaGr43dC#F<&gs6mMuJ&<>D0hM_(a!lrM)Mq&n%0~97L}Bc9GN09lvHJrtV$;6 zB|>i#8Chfm;hmLO#R^KCJt|i2enLl%h_@xi*d2bh zcn8^~Lh{kko^ZNJ8(b)`i;H+^$b7yd2?>a)u_q(;W4x@;TigX?s;kLpw-)6lP!hGNbLQCM)kNr^UlT!Kv#mh**S zpz2rrC#QbJf7JFX{+m-Vk_QS>LnDtN!r%Af3M+7NP~ZS=m2j9r9sQyMoR-51ea1UKdG=SoPy(~XS6m#FwSC{zSUO^r(u^p;?6 z2>B*O2vH&XQ``keg?Sp8l8_b;D=0FR7pBS=uEiA32w8KujV6cSqDLjAzzmaA7c?jI za~urBByfbgP<>L85+Y=aMqzt51%b^K6(1=Y9a0mx2aa9N%o1$PeMz| zHkwjWb$lt1EjlfVZ){hA;u1kOx9uWUDk z`NP*;PVAH0oY+TgPLZ(pBOJOSIVpZngNF4R32M!`wLAs3!G?yJ$`#jB=xEpuc@Hh6 z?aJuPLndyc$+|T!wRRoWO{HB2c2j59fpe>}>sV42u4*h=R+9PROmL^3kxO`{rX!Nm zRHk<>QT|zrta*LYKCQ<7)1%<7+x?CqyZjA!3lBDM7&>$4buW3 z6*sq#HXy<_fN8$?q@-kmtACme!~TJ6E(QZ+!K{tN*g4)7ks1Y;JUoesPwEY`TNy)x zRB?$h5oz{5{&JYaG*nOtAM$uKW*<{DGmOvkupF}fH3L&+DJcZ&MK@dP{6U=SmuEK&o z|2n*?gi4X*UWvg5o6XS*ckO2<0j~|974p(|S!M{M4G$SPhjW*sbI9DXc8qrNlD|4| zu7ywscT*CF=*z7YTm*Di0vAEuo1kD6dQQp_#9bod zhHjDP>D;Ekg>jdRWKB!p2tB?`07_7u!P;v+opB7_7hvK0ftFDf=g@Wba6 zyt7mi((Lh~MhE#)go*n>jNw~u=Zl7K2eEw_MOe=%jvP?k})sN zyr9lglWkFPeK5NP4ONUK^br!XkwA3PdA^}IbVp}-EgCk%a zFh#HO5?h-Pm@U9id|dCSx~WMN(&poq%#pwx!034PA}(dsNsP2($kxKIZf`aXPr^AH zY}KHBI4{HSpoGUIJSAc2wc_{k5?Up!B4G^)+1VT+9SILhcwE9$5}uRrl7v?!ydmK& z3GYhyK*GloK9?{@Li$n6*Gs~J5-we3rV`l8bBQ4q(|fE2_Q3fAhM(hX&Kh7(qS6c_ zh$b-Xg>yX&BZ;oEcvygsX5piWmNG=cd9m+(u%gc}hA4-H!y>(veUHO>J;T0Oqi5I; z?aVNqs5T3qfc9pXi2Rv97WVHlcQW=6FvKGNRfZ{u#}EttYgqbN^gqaO0MRXm1Bo6p zOoy9=8-zWKEIn)tILL4q(F2A!Of!XjA5N6TFazag{@6S)iXq#*!2G`?N@q9<=c*Wv zCJJHSvB4me;aAwK!2HLe9T|?pCI*Js&XCOTYvj*x0`}*FA4*IlTEyaEb3!chpN#m- zjg1QN%smzD&D_|uki~F1>dkNlQF-?L8|*z`hz$*=7|z5V1y)~dY`De3%_f@1{O4f9 z1#@GwLw$zxh=Q5_e9(*G0;I$I7oxowE<(MT|9422rH9QCHyAF#*){fkDb9E?T!wnH zaLYj_R-Y9(C&m1+k>VWlUx|E~|0>jz#mDA~!_0pT_N%aP*l3Z>5SuNYGt9ys4EB9J zkcGzvj7oO3v^}Qe?)sS+zom$+=Fx&?ghWHa6b{%VDA0kKZXauFART1z6=kd|1dm6RE35A z1@vO&z=n~o%>M}J&+sVHVc(CTe$0Iw{f4+^67Xcp7wJcozMN zwdXm|g@wZ=l;X_)0{EEacL{vO{4b-O8D2sEV&8uU`!c+Wax%OIzGaAwE6-WHKZ%;L z@PC0X7~X`NeZPft8Qw;Fvv7A%Klc4^^aF->!B6b_J@5s?e?T9G_d#!l5754>ybn=M zhW|nNS-eN+KMWs({w&-R$PjWASpp-|YJv z)Q{m?_%kHzn`Yl}KC>%By^eAi8gz840^5~^dP#U!LfKz-8!L+83IeMXK|5B`QC3z~ z##o>gZewN9Kf?!mnBn%Xg1w@^uGO#y8#oW>2h6FCJ&nK~HE~t}xTBViS^$e1>9fbnR`(iIKa6&`Wfng&Z^`6uyz~L~Faqt(adriG zqXqVK0=-(|tORgI5caeJt-(4P3f%XJPB=>z(hhsE;Xc;^dvJj{9kG{`g$u`-4q$K> z?9BvvVbAs~U^w;$&jTL+9DAyP{=IaxlzqpZ%uL`Z?4?`-e2z03S-?@)Sh)#!sh^Ir zfq_Xn+5s$>iao~6AA7U+0efN3?LlDlP#qlxh7QLW0$}(^>;(s|8I3)~K<{xnx&)l@ zHTGNrhhne$4Ip7p_buQp?7hAVERBuj4}kM#<7@lZgZf3$zRPrE z1cqc{4=M2YD)0<2d#z45>vk(kN5$ce-Ke9|z~`HFR34a~4f+E^u{Xa8(7FTkXWw^% z{=l)jL4RQSKF}YSi8DR^z;lN{e_+;O&>t9l9P|gqp9KAZ^RV|e1ZY18`U7WO0R4eg zE`$ESt5-pP;Jh24KX5npen$gCuxBvU@yZvSW{ji627BJ9+y}iIJ3-;gx%jehAQsBIT zIP(B3U06?Rfc3ElHVYV141529u_g4B4P1l0={tbw*zmj?7+My4(}D5j^>h%Jg|i=r zfkP|l={PXFGWHGwk7IY?IpB1T~AivSnTDk0$c;E0qoivd%=NsqxDoDm;>|!&cH@vf8d&aILiaP0c-)x zPSR5#Fgg``Awa)@dI|*|#95$l;5lGdVDeC$MF1ZE0%sn8cSq2KobAWP<*{eXBr!;1rzs$O7hk5BdYgZUFs( z>DU{;12`)i^an250r~?E0}nFyZp4Fpod;z8;bw#2KM!~q?yJD#Krb%?odU)J&jGW6 zmzaM(16>8K0kU)$GXH&&|EU6^KSLJo77kL~0JbP(pj*KB!UnnvJO^a)88UxwZ_z&% z_yF##A_jU4EMHU%=Lcl|$;AxhHEL#t9mvu-4rKlXONjp7K;|D0Wd7%XES=brVmk3a z!5_%{yOuK0bKpK;4luB^0i6?cD}ys~z}-MEV3o24DhTukdIQG-ivw=}O9SoY3{)Oy z#K9g`J})5iuM1@U&45z*HXQCaz=Oz>F241(AXdiH1K9kViYk{96na{ksk`(Q~*D0CRxbz7W&h1!VrCGDLqGWx_!_ z&<|(?)(5hD{U!fk$sG=4>C74}hQA7A;fIb9!v}vQ`umR;-F`q8zBW5(g>YkmEPVDP zl!N6n*@V7}c3W(s;=mdkOjH_p3RoU^aHEN=z^A|}z-pUJR09|etPLEsStr{=Puwp9y5?W&`U3%WpT4A20*x54-_v2Ar_N zL@j{!T_y?yhU_*`FmN9*1XyyPi9&(C2TT+WYaWERpf zdWqq^fXsh+LD9{S(c`(~&H=J^8CA$Ev`hKIV*2w+i0ONk6w}WEvUr6{iT?9|EZ-eK zmVW6nV!ri(tX}(of?kpQGs=qo{^iU;W7FoB|vR%mz*X zo&!z+l8>2Y0Ik4TKs#_Aa2Al|w+P6}xdzC>7px+N_p2uQhXR@ZP#{ZZDNu+f`R7Rf z(bdKD4+B~Hel^Ur2$%_63M^lf#nWdLe^2yp0c82wfh_z%$^Vw*PqoE-j6fF756J43 zT}Ld>*t%kQ4gy)dvYLwN1~wP-TMA_H&H-6@uL?*R4+PX_RQpK$J_?wXMH!g_W@T)X z{JXah>68Lw@e_e8y?MYM$S*KJr0WhK8!yJU711B#*pl#Q#t^1t3x-h5feel4KMWyK zLKvE%w-{O=7Z`d$PBP2~x-!fUy~nTs^bo^>kT(nqBR_`kKwmNR23;9q{F2TPcI;4w zunRI6GI_}m!!zJlhP}~m81937W;hsfp5YM44Tg5eF^0c_-x*$nd}8)+^k>)!^k*0b`ZEj% z{TX%!{TX%v{TY4=`ZMeb`ZMeX`ZMf~^I0=>BeJpzi~>dS^xl$%U!9SW*YM8i7ZUPv zmyYP~Eu_!C^Xc&Zp5MiC;yw+OIZH^Bf9KfaJyub75xO?Z*ZzYuHfsmJTy*#%q zpT4^^`Sjhr|2J{@G~K1+&Oa}4|4)bE%f`R+v~c&%hv&=5zwkyvhUeq*Wys6>|6g(W zGV}Sm^B40K+reFUF)lABMY+ev&3hPcL8dw9C8nSEbn;RjF)zOEeEQDi=fm?dme)uB zcf#4 zG~;=lf9LDsOeeAYe3&+%M^?rN&?9R#qlZ|B(j{&AIPThsZ%aPB zJAXdR|A}|Loc~Q3`1a0AI(!)Z{lBRrUk1Kje46b9USRYSd4d1N^92i+oS}sC%zw_h zh)WacH+y&zq>03pCYpa~FoMBOl&f zzI+(|ozIs~ldn5p20n~Ce|K^Dy!dx_;rVik@6I|kFJbsHyUU9&5C6{B(UaZ9hvVPf zl@FUVao2^FZ3DHki#>4GL^v8DT}~h!Z;&^KTT^WP)8epU)!NV+nG%!6Zdj<1TGJ6l zb5t(6#lu3~VJ}78>Ttb}P$C`l4I;_2I)=0Y*Cs*(;6Sp)qRw@v!kEbQfy6*OijhvsAwxY^5`S&?~P!mIi;$2I^gGYNY1JHaw_5m zdEq#5XeUP6HeG@o-!yzE93yEL6c!fHI!LHvM7w~la>>}{Y2gkOg&GZ1tQU!UItJSu zZ5x?rjZ4IiZ0x1BCiStlPfO^Hi)3)IM>H<%z?~+ng&ZvEGOQ0fW9>{~b{R-mP*9)~ zUB#m!a`$w}vi#Y2r})TEIGCN>&nZ)!+79jfaY&n%ZG*Zw#dB(V;o!E?OzIvQm6R4A zZB0zFThSC&;eHRRa0o3`CQBX&uO$AyiUx_vX}#UGYB;;PC_uQnNGXHFNLJk25s97p ztWU~BQM;61(1%2#JOcRzG1`*XWX3Pmzuzd8RR-jk~K6SEbP-jCPL*8qCjC6hR7Pi@x@&| zgxetGHrKRvgv^Dc=_35qL@v8XZ>GTV&`lK)sp-bfZKXQvq!7`y;$wYRmhAFHIZ7N& zN0Bc75h||)QYY-=+*h@nCN~x@kKHt^yIiE;vgXA3NB*`5cd-%umn0oh zRI^DyNb87zPOUq%_iYo{prIU1;vvP*f`*m3(Y5vCxIse>=D2-G<_Jduo@KLe3|&sd zo!n96Cv{G=rGrE5wrH!;?X7mG5fX0b%CjPu^F;4=M=ZWuxEDE+VI^xQO+d-Sh;sC= z>IuAg_nuWM2cvaZP(X;F$hB(9(YUgtR!ZDRrE29$NwV3!36GPic1MvkMONBXrlBHZ zl#De)0x>Z+mGfjgh=!}C#!`mD>2f7YM=w;{7t)1_OgYu4DO*}xv$hLpDYU9w8@`ip zoF&DOvhENXCJs8)0wq6s2k(*;!rZF+ZYa(HrDh;5P zK0YpNLP37Hw+d79qCl5oF{ymz;k?}DO7PjH;1Y3$VASEU#(KpW8pl(Aem|t>6Gq+qC znU{saNe8y2JD=DgQ0a~)rHpD7B~#V2RLmu|a`%lAP(yqn{RoH_M-AO~Qq6^;QW1qd zCv%< zL21ocx3<62$Wf-C=RO=B&^n@3oAv=Aavg+@#dERhgVua>d=v#Se=mS|C4f8oLu~2P zL8+qE?2r`Vxn6hdq739k1p%Fa%V4e21*S0c({L`Ax5M$pU0PE6@Iq1=!#V_&x=XmX zc9n}5WTU`^xyvq}Q_7;2a7w)#lQS$h#8O-o&KxHtTJ4cBnh~NrCgeqjBIRX0<4Sfq z4WV3=7GZcMa94265J>J(OvSsHBT%X-UVbIdKv~%(STNE#Tik`n_gHM7!A>$&WktF% zsT097qU4E;9~e0(m5G0xC1>(oxb=ovZ5mB0^+2B0g)21#eplK_Bj-dVr`-4|wUlsO zp-SqgN-f#G+=XRw3qxkfye9WS{`M{@7|$Ep;IjPDjHl$(w1Ot0eTVif#mNOyI<@NN zgorlGf(UQZp?#Pj=zLP02ULQ1@i3%vr~x+?mNJ-^tsR-uovW-6L*3hWeX7wmk`?Qd z;+dN|w{O#`L#K8E;rPyzf~yUZ9aYez&6%4Xr&Sbb;$})ktIZkkDEE0LjS`N$2oXR>!xI#us%5l?P zgsR8_cgf+M?(mi4ItC5WwR8$QtH;$sYVt^gV|sNcc@~{rCBarHBn>9YI#NWQc+6?;Roo1N`A#lmoQHru0z)Yh$J13rZuFQ`1y6!NZc@32d9a)1 zD+A?JxjS_wFIQTM6G&1|7y7243aVfsjty9%tH{}lf?TU*9QM1TwCNH; zv}D|@kL&Bx65Y~A67ao!^FSA+2j(HL)G+c?mclt|Uh_#*=qyE%+CY}doTAmJ7F*na z|GESDIIr5NXz8TVd<0$PRA^ZV;09q)1oLH;`6ky(K9yEdn@cWC?YyuyUj`qx8sk)K zPpPz*6(FAsUlo}`4ki_r>_i3Yt|l^#J&(dXr=eaMm{?>v*dIxFL+$_#BNd|$sbTUgRX{g18 zyrICI0Fv$1q~uiRjRy%ydE0m3m;!{Y#`At|RarOletl0z4JX(6@m!L1Ig6Z29M&yyX>NSH z(iUni!{kC<8Un$TRuIk9RB4Bb{eNJkI%}d_>{^ND&iYCgCeHSw{Dny)`CSq@;*G9S znv!3t;M5FF9I}ZU%5cLI)v$yKBDG;I=csH(x`$BQHXrAv(v0Lqu69h> z%JN-dV)c@c3!6b|Qn`_M*%qgCM9m077O5`gF4U8pu99_624v_EWw{nym=^MoJ{Vmd z32{Gk;4TBHP^x|-%`D;CX5755L{!gsVm}ltlZd$7tZB7@B4y`f0PxK(g^{}*=Ahgy zfvE>xKHxk>2Fb0>Sjow7RYu-ytB)|mV$*uC3gbZw)QcONt3u$DaEB_Z74}If*+IPv zDpfr`Q%`|OLmssv^*{jW2MeSSyfGz{pI za%kkA!#oHJY9FTF!Y2RTfzw>1rsv7oXk{EHpJZBUhIi^IFikqLm~*yNrHteNNQJ~X z2gNwSwzyRMARD%43O~)HEErZ#Rjphr8xtLDCJQQsm#k4q?B^-i#mDk=F_)n0jgCyR zIZa|Z^ss9FQ_j#sBYBW791E)xP-YsH7UX+rtfMp<8Od34LGmtz`!zkA+-r81?Ppf z=hZMNf^$a`?~>O>R_Eq}U-L^57PeAV;#H)vC;6&gV&EH9S{)XDzD_EgJR2kahM43j zC{ONp>m+YpwyI1nPt;Wzks5=AUt^YWEvaBg^Y1*=5Z}t@-P!7n82=ME3}lih@M3S#eRixVb^v+rV2B+#t$P zOsyf|xCJTKCO=}(! z=jYp0>8rGpl#tv@J*`8@VOURQbD{1yLy^9M{fC{M!tpTKGGp4B{q6%#6>gyI_)TGX z#ZudgRXtzxYmZWzsvwf6@ZoZj$h4DcLm{$Y3{;WQ&`18 zOwFK35h${y4_nxA>cv%O7xkFj&v^23l1AKqBX?SPpdd$*{FU%rDR6EOXACvVm?~RL zZQ5}Al%gUN*|ACXt9sZQFKytF=Fa3Hm^0IhL>Bh^IM0wtq+$b1*}zuXRJ~f~<8p!1 z)s&D+it|E@XC$BgPF+fry26oNncwp?x5EE0uTl$jbNV>h)p(0XzdsRv0ds_b8s)RQ!+%njvSHkt5KWlG-@_Wh~quQZaH zOQb-Ox#2F9Pr7fTMh%)oxY%RMs;pj|<9Xio-c!CY+zyFc>SsZTyItH;8bI3e%^k&b zoVj-Hb4sn%YB;wo2~J&AJqykE2dAJ)Q6){r3_$UBkI9vlt_&D*owd*y^tq@$L4i6t zoVo{jSgMy6E~Pq3v{I({8J!%z{phZJ#bq*wT2k*qN==JCSlB1Gj@iE}mmDFhWtU za(lDkpfr`FZ4Fob#;y3^lmJyp_)t4%X8YMxUj@+HGpxKc-MRgOUJ`m97TE~Ll#33oP{G*O_kbCLNh5o{S%HcjRdUKuhtGLY9m z9UkK3pHtbjjjRc;kpfYg&$0|~8YsFGdHDTo*0pmtan+N94r0oBSYc_G#8-6^HFGJG zDvm;E&VISwo5)$5)kFZ|WrXI;J3${x2n@YIH0gbqWgX+%hQ8Mc3!85uv7Xx)R$s z>{q9bn+sp5E`B3->#Vt$Dw1h~oePRMP!ALoDHPPEeHUDfB44;A?G?6qS_@Hhw`xgW znJna$vpg^8Vx5i!bG=B%Zw2D6*pkz7^I6$6BvMy%16OY5gyYICzK=adfzt3}1zP2zAK z)p32Dio%OtK6ssc#^I8pU0IjO~uOc{1~S5^pWOGYx0autQH z6piP}DG#z)D^NX{N9vYy$)w6ij)?=MDb!K`5Qp$ZwKX z#`3gf19RPZHuG>Z5GFqDXmN-2#i?l5e5SNSE&@)?hidsIFMhi#seEKjJ}s=+J=&3> zL`;Y2tT{KKu7hJBqx6Sc-n`0J^YTG}gdeOE4_0pv66Y7gq z)Dyo_TPZ_ZcHI*Qi<`r&n6SYG681sN_)mTc6E&w>v`&xWuC;YEMkx2khoq25x_wBRyyCBU7uGJ(g7#Q2M0Et_Lnb{l%Ym{i(A*hGFt}eH==4H0r zEnjj?;lmwuk_xZlE0;qmUOwcO05=ljqq)jUG6dOLfOPw*W4nP%V&pQUQr|7$l1`qi z2zPVxE)$Xrg*=;o9+zMpY{QaM=CI|Vl+<({B#6_rvm6EE8o5s~PL^j{Wj|(nDKp{n zCKKm-wWP!QQmXubNDwn}a-Lcj4VK4Xnjw>6S^Ge+rJ)J#uwXa{wKqY0=`_2_9>2eInYpz_1=6ndwL$8sIf4&Vh{S@Y-RD8Kr zJ@rs6e>m>W$aTY$GKSD_QNIW~eqKoE14=8Y=^+)6^>59XNoY7#59OOu5j1i?ko&Jg ztIJ){ai~BJ=@^1=;zQj~4(?Ni9&Y=JaCb?S0UtW2?s1{o!_t#dK37xEZc56?r8Kg7 z46cr%8j>hc)H+^@A~&kwbg>kimtT=k3@c$GQ@HHgG1(&>$q|0NMO{n>4b+UN?L+FC z@+&eh&*XI%T#PQ0$J6*ov+b1|+~X*SW={q$)0||j)NBr0NX}gHcTC>$zp&z@D&$Da zp5)&hH+bRN8T2nIfuGAgJgp?QfEedu;ws;`W=WC70tmf<*Baf`9S5GlK2Q zPo*gQr6!cZ6v8GD^nbbZDp4ybqBwRj1UJQ`mLWdO22;lC5*w+~@od+55VP9hjZz== z)(MwuNFLG^S2B6wEpxx;**!M+5jGVl1yMJwtHn^yNeVwfpd_c}1%*zmk=f6FImY#* z8qoi%xr$g!8HolPx4BigQ$QT2b5}XYY{B<8S@#LQ?j^MwuN>T4d~Vf-to!Bcq@L=S zUh?qI)0$W=;~r-bDQPcuy@zU_g~WMM89ixu^$}{-6=5=s7$-Sa>SRw@ zx;PH9V|p{0dHVXvL4=;C?xl`?=jw!}rZ35w*_Oa|h$!5k?ln><#~t|Y!sY3=;+)28 zs{P)4H&6twdW*Nz;+*xa6iBV3xsYs1R=7+?39Gg}`6VNn?-W7kMwL79KJ*K2W|P(% z2sfDIp#!yBw+ zIk3ti;;-MA12BVElpGPl3@t`v@+W@UM6}uEFCJuCgxhl_E;XTI7IU)}Oc6NkqY(O< zddrJk9G5yvQftaURlQk3(bqbiPOmo_jb2_}B>w3E>@ji=`zAm4PCn^THmYdXGxMG; zzVhNqaeU(cymfG~M^1;KfqU}fojvR?EG{M}S}^6YZQ3foMkU4L7m{$~BbACv-9a_Z z7UTZg|1U}JR_vE{2HKfe;)5EQI;y!_*K6@j6K!v{DC$5H3%%WP{pkBv6J;$b{7Ln4 zW}07ma?Y~TM7;{`oY(Wdg%*TlEdOS-g(~D2gMG90)a~JhYBT1VY4GJ*142U$)G5QT zJMfr+1`cZR^Mq70y-nCZKcR)5Mt?Bj$${xcdRFzP5&eHB`XQuwfdWs6d_$Iwp6+X+ zwjVAz`C=$h^QkS)nwk(TPCZkq#x|m%e?6{Vqq&~^%I>}TTSFaeF~ZApFejMs&h(D2Of;uQtF|Z>d*WqBs0rIH#+w}#9l6*< z4Yx1z3f!TmkHZ&T{yUxM-GD|#*T2+nLr&e;TQy|J;B7 z&*++Z3Zw8!Bd6)8$E5TH4`1kM^ZMpDSA^?m^vGHx9$qxi%$Xl;EA^7d>OXJOyr*WG zIC^8D?x5%Pjo<#Yx~Y+VT+)8V@g91LYF9QpwTp#L?LJX;Yp9Nj2h=?8|B;RkeK~FU zu1F)Tuk5>OPHhXddu9(D7z6rbY`C2jO?0UG2T$5RFi?X(e>;8ejE)v>%+?)DFi`!T z(@(9qN;Is{;iErX(NXQo*7hsIh+Zr@u>RFb3)PFtTs}U=Oty{Z#x}lVqCp?eK69p= zp8mK|rrXUm7CO7u|Kx(U28zy@Z}_6JnG(Ke=(Y5Unam@57u_@1M5)FB8Z$rG1tf z>G!brI@vB6C}B7)_SsAH&%ldwf9PVMqeb6Tyj9Ui!}3{nuC(eX$?xtLul@8i{m0?H zALuMpsPDadiQwPwA8lW3+pMR~Wx9+yG9QQiYN1}QuUz@| z8v|V_I(({6MKcvRHlfv+BL*6=yR1*xXd@-&Z{N1nAu}0_rAKXxu#jnD!to@1kdlnEu!L@7ey%rsv!=Qs9Oy zZvu|#X+YUw`O9~;&;#FgVRcGb=(n$4M(v(rqRi8qKJK+lM`0%xlsG(2N5*x{R$a+9 z(YehjkaK{yE)1T`T%}-_9`8kELTx z`AtCI&Xo?=GE>!;hYkmf(9@TH^?w}MPEXwfe}3F>ke>3r9kB2AD+7Jpw(hKc-xK|r zzO7@?wM1iw{&R0#2@8cadiv|}7nc7udDWnQiGhFrW26Af!xClCZ@SEjzc8gd^(Z~22X>=XS;1C^b+_|W+$I(nY-a>k${7TQ1Y`Y)O1^z>E1d>ht(VxfI^ z_wKjE>8ZlJdQpWh8|nNqpK2$L>gmGAts`$w)X}NU7n4@bv(P^@=Tzg%X6o5-Rh#fA z1FinN_3`v;1}Zx9yP~ZNm}u?ecgF0!q^AZSJ~%U=kb!=_VXj;%&`4wJ-21*`QKIf0 z?#<2dGm&4XV@d17k>z9kbpEIrndj%#L>AfeJ{eNg}qzWhFe76lW zP)6vJZ7)6`x)QN#SoM7dnig{E`$kJl)I4o=i;{bwH*X}-S4ImZo!RwEWKTUA`*b~A z1LeB@^W?f;e`}&+kvmT>X+!ka(~6&kmef&VSHCf5`z3vA_e{3SF{rTbEJxvri zWqstmcV_S*3KKrx(yw`fVeC7L2>oyY2yiumliupR4)cLn?^Gh?G3h4P; znUNOicp%L_Ak{!qY*mW?`VCR+n&q`Xe(D&!z7ZsiYe`)9X>^4EO6{=36Qn!Ns}E_Yt(X#8gZ*B+)@=<%NW_O8#& zG+bY%McjBjwY$`BW#jiu)M$CkvC376ZuG1-&>CYTpEKPa?e;ZOr|V1J%eO&K8P$pm zt=ij6XNE5PFb#(Aj860O7x>3Q)qe^3`_%{o&5vr{w9+UGMFjp-|IPq2jVyL^1-&$o z-^CBVt@EyqCRz&IoCdvGY4E_}zqHoV@tj-zI$t!?B;(8L5%1|}TE(Qb)rK1A&mlhj z^Fcp{%&k+XUW$>LUTtq}1^tW}sAjiO?sk9Ve7o-z?8QdH*J=8HPN`k_t!OQ zWu$HY`6{^OTO9?~DeN=i1?bbP^op`mjP&4n*$Lr4=&0m~_roTjJ#K&Ke>1uq(d40B zvtH%X(TQq5e3f0!Nb9Ed8QLwxK>OaAy(JX(s@-SW{J%kmvSXtA-z#jPl?Rfq_D4B) zwQ6Y(97a?jGkV#Uk$UR)ZrbyVdqxT^7*t``D>GfpDLNtLZzGKxx1;Us%{uC34#^zS z)x692uxwg2G9u}_m zWoT)laj$Ck9eT<_Kb#r1;6`WIvkOi~Ri0p=psrM_(ij6BTK8*6#cO&hI;iG=68<{6 zdgj5T;>Y#$>Z_X*YjrZvZ!hdUP5THU!3fE4E-n}?Z%v8^(^#B&O31x z`&+1Fq0bsE9%-UYTSnhHc8TcDom1Q1r0c2r1HVB}ry1!~jm{&EU$IcpK4m*bqF)A< zxDr|ycId^^e}7l+t%3S9nLeRXtezT`oL<>93geV9^*?!NH`A2hm1F1ag#CWI-tl(c zM#}D+@1nWAj;dt+HEv#I9bH^J=G1EBWBsPrv<(=?{Bl3I`)4JIYJFU#NY5Yj)MZ_l znBo}c)W7xBob#XP=ygVx?Uy?`dh#-VR@6b*D}6^TvM)5QbY9=IoE4cR*;T#hM4D@ z#u@45+)Wwf3t6aYtEt1jIE{Ax(^ffUw}CobE#trSPZK@M9C}xO#X$F`{oS;Vx1L%x zEqK~zf|=Tn8$CUi0lLvwD3J*`}$5mj8HZ z%qP7}v?aRK&{HSC-*x*o@Pgh73Oy8baig9J)}J_{LzIr}*B9OzmrqZ1@7@{xHSF@E z*N51;K|d#d)iv$}=v}`+HPeRM7*{60^Uc=!78-uIPSe)|E#%v#=&O}8O!T0{FBy|6 z5yko5ZFZu#g<^g=exi8`qE7qUf7Pgtfog7jIMMh>NAJ!p^}$(;xC;zh^5>AhVE2Am zKit04M70LpEKwQb(CqqKw{QK_NY#AHeEm7>tS+Z2PHtb)NW;zVt{=ADM0-Ov)cEFv zo*vb!pWSDTkvgt@ef}Wq!s?Ab>#=c&|+mZsJSJ*T62r>=ZaG1@}?pM;#gcUMPQ zd%JY{Xt$o)A3fH|@(Ui`3DurC~$T zN?WLMy?4I8R>n-myL)c@{>nttwpTnj>#T|Toxk{XtJxSolv&yLuMbUBZf>`-&x44j z2UOmf`3!bL!=g*uRj|E^*+-U6NNmu z`QX4Cl(Tj1xE)6g)N^H-zOx1rz4P_J?^fM0)9U>p_v<~xczWnQYqty&)t>pHe`}0; zTkKx=`%c(#BQ{JUdZwel$KSa$;1fNy_<8s58+=R@d@aMT%q-J!JeI1oPP`6&AojMwGXYAZ`*ausK@02Qn`H8>!SbXO<)YFQ3 zO*@V`k8y9gYqOhvgz@r*Gsg-;|4yEGtx@a;Ch9-C^0@CBVEmGjHos{-9sRN|>^2pG z-maHaoBH!l4ztklMFEvtVmwuKZ+81PV~M_g5D?X}DD0JL zb;|zH26}e=^5KJv5ncLX;Iwrk%+&GH^Zh^i=xNHtQcG%ef*v2&{;P`tm=7s8>QzP^ zGtGQi{Xt@LqFW8WUC?Zih3@~E@7-OAM)GeH85dTM=quCWwSPkI>tFO+c(5Gg@4+(B z_VJ}P&d-3HTd@x_}>BXmIFn*X& zpy0R5(XMUE-PnH(c5T3tgpMCU{w=tf`P$G|M@VjH66mkD_KzO25PW?%v`eWvgLSlE&yNYsVJ{WlmFi!i zxrLtRFL(OsG6O}dDYU%HS7xeqcl?kv$kCk{5syDadoKTW;e?OU&2(fz`U*e2o;qzv z@4uxG?C`?1FD!xlJegd6chD3Ib@Q%TVhHrWn`2?`#vZZIqsMDvdmS;+Vf)~mITizL ziY{QAiT*OX{k%1+ha2h0h7Do*`v%(b@~d;7E!EM`JqecJPtBBBWEEv#JZsPAb?EMQ zM%ukIYV3qB^;AE!)hEZY3{+?ElXclXL~Exr@=vIV*>ISX=LACFp8 zu9pP7~u)`J_QON6!?U;qWE2ryoe!qd99(a1O1?>ET3+GROc|#NW4GJH9!9-Q* zo8(>D2Fka5d7W{m&D7wNGF~6<0N-3&Sig`z#ykIH*KT&!NLzMqTRSq_OuIrZUtXPP zpfYQGdskm-pkKcTyqE&JfB1?YO#7c3$or$=FFwsQ!>$|NWp|E|%C;Z5pdjSP%TdYW zYq!)>?8?k$&xRN&rbe{^Q=wmudS`U_{g#QYl)N*v6zr|nn>Po|Ij^I;v#WH7dDle6 zs+F$x@;TA03C3BelTAb=PIaiZ&_LIQ?)X#Jkr9i(92ZV@e58B)Hgvn%dDnZ_4Ksnb>f`M3nAZX)L1#=fQ6d2 zz46Zx*sVYH*kJMPZlVd@{M(f+Wu#x9FK9mgeLWRebKPrII2wG#4H@$ z2I}4VOnd<5_a=lKn!O71BY|(J6g>t1=_UlXkF(I3e}ZqnK25aKzN|xKFB6?H91q)G z0^^&^+JhF9LceKougm@pA>-3l7^v-=GtEn2{McgF^L6jmve3M^ z*`0QEA}aZAvHO35-?zOyQ21NaV?gM-=}(JbJpRj!RX_e=ps%tA%or48q(Q;0ispm- z9)9I{iPw;46+4~%r&c>7-B_{rHyg^);*Ni(&yw{t^MlVfB*zlaIhm)>EZ;VDrG zC%uf+yVvrk&tF2HUCFF7Zo8iTy8iQnQ>f3Y=f%4{@-&|kL=oAA?4GevE>wqnys^slwoue8N{ z!s@7RtFQglNNJs{%fH)VpkoQgr&hlOeco*4FDW1D>G7)A)jvEiQBc&jQ&q2ko|Von zsxn1KWxXSc*dlb~HM4lkl-ox7e%Y@l&Xv)T#ro#xE6hL6n6mfL{?Fk*XtT9bkb%aV zD@N^szN|dAaMbR8dYX77q0EsNM$*;jSFLYF3w{3k_0)B9pikGA*>J9qkqTWY74)i= ziPDDLY7{=xM6r#B^kwq|zEL6dx_@b;UI8s5>La~%UE1p|f2pHIU$ykQjQ%?PaIcus zql^^UFwEAarG<3a??=T#zBXw2v{g9tXu&eUna#QxsFblGiVHbK`J%xGQf)&mb-U&ImV$P_Zb4p_#X+yV4+t-+>U{qM^`%f|Ms8g$EE7)6S z7Ei1{D;4wCRg&|E6vnvv?2skjUqJrjnqTS%JM*s#cQ3t#J@C`C@ELnk&<{`bY*}L> z=Cf+dF4MsbIo9&Yu6JT#Crv#4<>gffckA!L-N1Ld>K{21^fUBC`tO|w!X92Se0sy! zfja73IFRG-AL!pFcIFcU&2F;g zi>|AP${d)s`R6|%w*yV_Q#Y9DgQ?r{pYSu##bYBjAAz0t{^X{eul`}84R0$NH)8&W z-dY|ReuCTyI$x-(0sYA~ZP>GkM!M5x;~xuAziZ#;A3g34QQzd%9oNH-9z9`0sWTs7 z{L+2c&AKs$O4!v>pI>s5BbTRiZ zA5e`J55IQONMRpO7@ITILVLzrW^V&sOB9(K_p&VHX6Og4%Qw?gaE0p?Vs2u-=DXIN zUsf~F`R^n4wkwSB{p6otHLzg3y(O&4T-aAz4>zmvxU-3F_A2u#<}%h_-hBU^r8Vro z_vY0tUK#U|rJo0v{+Vb@vv<#(Z)>FbUEfUl^p=@62P7waW;9ZXFZ>>z*=MBWGLvWJ zV7~5}ZAtS|PchFHwC=@)AkeAz#i+&@Z@(CuKlBCcaQ zd%jtX-uKLOt<&9>B|gXc)h_QwrD2B*A6&nsuD_mEKl*ypN=6{_j}*xx!3c6kF_qxYV&axv0B6oHWnh}h}zZf9;n}J zXWOp@P~ayOFMD++kx71Dj}B~oj{f9+wP7faMNZ~4_{@lcXG^7)Gxfk?2&KosB3zE_KbtqNogyk^VI@R?KX|Ri5I;}Wo4O>AB7A} z{@t+?IH_&XXQfu0 zwRM7DYv!|qq!dzcZy&eOOezj}0zykcbf{T{x{Bi$BEGm|8K|k;s)_I@AAU8YzF(!o>r1$(r z`tHY6A{=#l$QZgy(^#fz?hq*8ymVp14h9h&JK?Q|zPjv%vv#}(orD${v9bbD--mBl zskKvx&hpRqv@|Frb=1;S+?7gVOJ^qcaWcu$)43O`fmaz$k>R%;fWt+3Up$qf5KB3U zfgkAe$M1$norj(>9sF0V>>6-}R*HkhJkE7))ti)ObmDN3Lpl)e?N2k$^B3?94kuP? z7yuXS<=^@>Ii5+p(rtB?ZK0CQGuM*KP}iNKx0D~)#3V)8)6s(9RmCi?qO~~B-|Ww; zv-v@XeYH+^HFUdu7tik91mDestyNY7JSb~pPTgBxDtS}hsrfz~IA-DJALDB1US+#P zn!5?f6ngB`PNkE5iF`M{zhV*9*6PEn;Ac1pDs+5={wt7^(Y=n7MR+ey6km#h4!Unc z%j6*nDZAYg9?6G$;ZjAPab*${2Or)5IrvLoobTX8RS<<@!8YRlON3w z-f03}+oig(?$;pB@ylHwDt@3ZFX`o8GDIh15?LjV@S$29$BqBs=T23r=f4Gfs{HcQ z>JlaR;&FXXA2l+`ukv@7Hyg1?&ywr4ygN|;q>h;07pD=~iML%JZxa%_H1zB*_%m{o z*6jcH*AAht@h;F4?!1)OS0>P%S8QCr-H}SZ7BU=|vxKC3)5Emi(@EslzQLE;;7@mC z6$%WXZ(98PCd*04wxF5a_iPB^ZA>b3LOpG5o=VmZMqORFm)8b8>iLNQ#bpx&`rjJ+ z=WH~xr)_4}tOojGQj(P}+FH=inNP#$m+!=mC?x0$1nWvbfy_}OO zfuB#o|BUBL@W-4dfgZKcW8}=c#AmV?yxiMag0LLMenZ5 zb7hgkM#0(v9jGIMA^iv8zXWgHbK;&Kg-|0-O%1NZy&v5mw7Z8%me?n+*r&@NkBS50 zJ&-eaYyZ3a`8NvL#-Gh4bXJH+;K}KU*zRsN`pV{Y%JxL@L|EJ7^NT{FH*h zgZ(%cb#f!CEh*%3(_Wg`Vj8(2o_}rwJB`o=x;S~_X(ZpYVA2vgcJW1Np%5MT_`eG? z-$J*2pS0HEVJU?uMTWZZgD3VDIk4L*QwaaJ*7G0js3c8QZ1*>uJ00nLk;}hQ$?1Xk zzV5&1tIO*N{g+oe3?p6wMur?a0`^+H4i`8$^SJMbrL2};)=#ojJ z77WG*JXggu6@4m$#Lx8Zzxka)I)g88iQ?yON+_^&h5qR8%(%;mJVy7wUzH0Y;91`c z$4d3-L{ee6s}z0j&Pw@jZs?C@QbxY{$T0+!dOR1(WfGpw9xJb%=z|P(4=((>G~uFu ze{$(WY#Bd&<3z+}_{Ug7JMd3fqvW341L*AhwGk<(T6#Vv-lCWgp;+T8O8;eeZ7Ye%Q z9R#mD6<^41jC)&s^yEUrrxkrx1l+@vo&9@b4RsmSo_(bd0k}t_M$ya5GuL z2bescdXja2$81g8x^Pc2>f@&NG2Pv2e7guXCHr$S*=I`Fkc?eUq2 zO)NrHdyyFgeBZZfWy<2agjijyI+F_@$ajE=@n~y> z(m6u56Wef)7&>vKSYC;bho73DMu`BfZ){YxE=K;t-0*Iuyd{myMUPoL)25KAE6Ue7 zP=9}%vz%Vqi#oCJOeou!K~Cp=oHz?(&S&1zXoyNBy9+hSsN<-wDnSKqK{V1owq@^) zH89Eq5(PKn{w`A9wBs1gXWk06J&^+p^6vfkatVBn3upi79YhZ37faXf>_;l8TDd!V zuAEBBZQB}39?{9_vdn@{4(Lx70^C=bz!mqm`}g=%efp^yvWPEYEK=p?3R%0HFeBd z=B^@7wOdi59p|(z#$)L<c4V-#G+D%VX@AqPQxvk}v!a*5 zHsoPcuBK%P0q5tut&D^Y7#C|PybeFthVA|w60zvZ{bwFj9-xs29@gXMIS5&IH6hv4 zjzwmaAMfKWgdQa=(&D8^AxRB3YF*0k|90HI-#dt0TylZI-nGz=WuNI?4rP)jpPZE= z&FDl&CCpL&8X@0xHg;Q6dUtH3+KXCy0mlY%VKjs)L5@TAnY6$t03a{_NI(O+LYRlR){KzYCaUPsH z5exqH+GT39A%ncX=+ts`nnhN)Nrt)_z%QaKkG_fjpK>&FMiY3hGMy)T40x$lOOf7; zdi~`jCF@uya(B-6i_4R#WR3m0Q)9(9mkiAd;V!=bN5@ulvyJGT#w88LZSeCxre~D0|ZU z4{%I4hHwt!{ru+LzUA2CL&f1_{DD#>lW&Om-5TtG0>4Z8L9Qzb9aAKQF-U+6*y zS$U|ZN8}KZIgWwl>*=tKnwV-eBzH?P^ltv;yjqqJgM4w4LU-R-H z{Fo2ag&_C_r-tW>9!LUz+|hY)1NZEges}Ho zuA1$Mg)aR$R%x>U`hePfb2~K`2H|lctCSa(&nV=r=lpA_Ca`CLdLOkMMQ z<0%T6)yM+)}5mULs6LfNOgqwP+6FN_nM}m7J>e;T7SL!#TuX_m`9<^eU%ss_I zz0ir*9J8|vz&Y6+>uj!?#Uho7skbIkhbi5u>^sYVhdI>Fr_UjuS+Sg~^!leoylYH=f zAEG{5e*Md30bNA*b-XEXP-)CL84C;KBA#3J1cC2bEyKKA4 zcbro)ko~0zx?bkE)>17Rx!p9oT}*^Zm<#0VNBn%oY(CL9Bp9Sk>TS}=W5BtZwd@|1 z(2Y&HUR?$s-Ey}2Q(Gp3jQr@M^)i5ea*OT+Kqq=}DxzSeEb8~DLs~h`qvoI(+x zwPAJ;_;}M3!6!Wd(B&&W)q5h(!qd-I7Ka?;KNpj3bqmxjq16ja_+JzJx3ZXh=nvy6 z?E9Wmi21WqlA6x&eS4PNHA@EX`EprP8tbrGljnN^X+%GzsVv2TU@zS@6Xz@L(!;*&;<*WLbCp$kJ2r0gRg} zg24+dMc54(&ynA#@;$E({8PU=zL~Cz!a0*4GlJYl!s&A{B2Lf`@*-V0a2^kA{dCMb z5<23AWXq{!GWOCIYH|JOGQiZx<+S2)K&r2qG>iN;Z2Krf2|EU$_OQ1`NtD1-% z2j5$Emg@%i$3N#^$3A>vl0=)-GEMXk&XC{inW&$ud6LS6y&2?QwzAbT^sz@(2c}0> zF-er7tMmW--wy%g&Uy;jtH-BiAcyMY}5$o(c6TU+K3RpL@;zJ6P1Uvewh33My z$*H&YR0D6cPS{Kh1K)BBESok*-Q?6-e1{HPmAlZ=1zz)2vBh`c6OC+bo%$5A8#xlm zQRYR|GY7saVVivMx!ZDI?b`v}??~)58~6dYlU*1k{4_GXDwAypy4Ru?COqG#fDc^O zErvZzYJNo*r6B(v)%w!qSs(n1-6r{A@XKU>`TFP)_)7yTYs@#Wi0AoYmf=n05j5v_ z9mn?#&t+$h`mMSO z%aQw27*&X(u}FW_?;Vo3Cy9~ChvUxC3Der(myRcX&b^1SYNg=6wa0rXnWFynZJy~x z9Vk$XuX1dMuDhbkMH}ZPH&f6>-5)uahH68N2fzUbVU!!A>x`_;^wBpg7$9Cr%Rp%l=G<{Bw0L!75l&(a_vG58l{ zk90QR-e`GUeRcl_A@XOI2^<_^5ch&_77S?`nF(oK-E@FLZVM#Eap8OlDP+kkM&Es+ zcfsfg81j)8Q=wxwaE^(m{Ta2R{ipqL73C^-`HQE?}pjUyu$mxASfv758cN7 zcWhxF{M@WtuQ_h7jEg<+<^Dcj=5`8cIn-R`4BasPcz9<6 z=A4uq?;CpNQAoSg>F%*X_!go9k9~2TqFdvo#LAKTG?fr+;y~U`KIlw7^nuZ6d!N5i z@QwFWRvZORFqUH`@W4O%%X3&udIb97Et$WGwscaI=JGu!m_qh+9{D^CJhJb`w@btD z5f|45sLqxlpEPdaTa3A>)H9(~19u2XluLi=oJJuB)vN8exuMGkE8XM)FOWR9KH)Oz z$hD4T5@+D&U31xKnvT!&NQ`xNkUM>Ky!+$Y&m}2&^Cr}}A3`g_caB0Y(^2hKKs}r$$+z3Q2&p^wo>bVO zj&FQ2{Rwz8c8h9HgCLE>w2Nk~Nnn!fQ}vJhp|_atn%VRkd64;q&}v!uGkeSxMN$_r zh|t16S(+uC7!5ey{eZmI^hL$8qXNj8P22Cbx{m&qUWNX<^tvMT-(lpgd1|@(k=NjUXCbmm;0J7#+bih`-F-}oZA+60m82$bYcBRi4qM)MW!ZJi z57DYhy^~pF!P0)?{TSo~ukX{!YXP5CE?zV83GXN1jnb_m)yLr1-#_=VPj3); z#&Z!%-hkh7vNskR##2dr-?e3&Y|zUy#HKES4|#jXyK~J^2`ycF_a$o@i8@rRo``$i zVxpv!2mYv1y45xox`})2(6e{QpB$?#kQ2KEoU@NRZ8P-GxM%&=Q?2k5dP_c!SD${TC=>vAeB z<1v`Gh|Np2e&I`qvoz&T-!JHz50@m*(5d9a#PmspztAJ}Jw9@Qho7excr+Q%$W_Vp zPRXf=>)djwy-|U=xQCzR)zNRLLUn1`W;Aj@>P@XnA>NyySV95v3E?sq^Ou-`CrA}@ z9LNOjTq(>x10Q$t?#eDH)Vmr1x93~o(+duY&ev*Di5vfuwO2M$$-6+qXR*(jqV{SQ*(49^s7^eEzc&jG3RF39k3sI-nXNho7Nja#}idFwlgF||JM=UED7+ro|n2i z@H~(DS?9!{&M$B@1y3*FJy!kJNb3PlEiCUBsKT5^R$A%fR`dyzv|ZQR=;RIu{ctGy zefTxonbZtAF_7Jq7Y-g4qrI?NelhTigK?vmG?nZq*j_y;#3G9|R`4Cog#TlmZ%q}1 z53+E^_f!aQSkI4L+R)Fvw|gucM_*Uye_69-bG4*Wz6H zt&)0w=oO0$cbMc`wSk{!-ffw^Pa~n9>0I{kr=FcLXnl!(pp|`B+Y|n(@h(Z7IN;)t zQ~Wdb+)R?kt!5_u8P7NKh2}@(!d7Q5Hv8_uAe&UXs$P{cVs zdc@Ldy9MTfO5Q5xLf5^Q%`a?!kxn=@Eu98Yck(rU_N=IZpJ{h{(@yYJr-82NbS4u% zvTem{AqClXK6;ZZvYtJTO$vU>S^CEYYZm;xm7-aG8sHs~-zPY#pnFNu zww0(NAD6T=d>Hw$3md{0^W4Na$<01C*F+&^wq|2zO_0ky+z>GbzmHeT-LI_%`Gjm{ z<-!8Kq1M$4zoFaM{r#vL`j|p~i5k`t;Omoz?wTL;!F*JwR+-yh)Je-s@jpFOvh?ZV z8JS+>IE3Wammv4@(?TcM2YOTSqJN?{x6{Z=-#SZkaoqDa*5}MFAYUY%#Z!6!_w($H zL-o-AZIrindOm^Qs`;eo5Au%j))l^+>X}5A5t@y1d_` zmL=exUJ7`x!nlUq;#EoB;(5#uI9^#^1D+7hXTl6bU%Ohk^_VWc&xhL`?40jW2l7kL zY{vO`czjR89!tC@@r@?u1mJ@`3ie4kMWE9@xI2>vUpwR#bvz8ZvGJEP(I)T<8gqgb zN-#GjFqkI<{E4fe=#t8DdJ&!Qg-b@8%K(>;p19t7 z7jq&%&c$9mOD8X=sySQm+`T?5JvE4ae4ZnswZaei{DzWS>oeWF3lz#tzl2Xf7fPYInY>|= z&LCCyc4;Pgb#SAzAAHdrZ^ zzV*qX+rUFlolREto+ZqJN2sLrqi*`mapalqD7of=7bJ(~WLKgNvVyrUg~P91 z(x2|QYzO8lMc0P$cS4{2d@w<~5O}Ua{qqqwD*4E<>~U8(l?>f~ccQTs`L&oCTkrc+ za_PvK1S5Imo8#U(wDIA7Iwvi+hmVl$^mVl$bmKq&zOp9t;D=Rry$?aK_!aBu&pP;K zXBYV=okHF2(Dr-yb__i6h|+$COz>F6QJG`C43eNDblXaWMmAj^FZS}o^S=8!$PT*J zic@`UFY=-5KK@ttv6)F4S7Z+a)gebg`}f@K2a}WvebBH0Uegh&Gu4KFJ>$8MwI+-~ zzQ0_2rt%o_1=nQ!YuV6mlxj!E!51CmK1nX$4BqIk|2kZ&<2a4v zNSOT&gHL__U6SM#;M<+dr~eiofbN{Kh9>G93Do z=lJ7?`1{-0HZNI0Mb3I~`%`y3pV4>k>ztQiPIK{jy=(8GXM6DlCE(|mpE~L!W` z`n$k;FJ2nI*Ybx-WZM!>@kCKc0YjE@CW%f~9x$xG)d!tuyG`RY4$Q@V-Fc`2JT@cu zOYkH3X{9q-eL8<>MDr z0vz-xWl~{W5B`|ILEiJ=12I;rHlDcG`;!hd=tIYgNN1U7UZIh=Co_(tsOKhexyQFd zFD)_obm{X41`%0y@Wvc;hX;(vP(|>H*cws4t2k$@m7>?8z98SRe&*lNSt?P@eXp8< zz9n56H2zJRP8!^c|doK+{)tIy1s`ie|9mK#6XZ!JT^B}Ed=&{%E#a)F7lq!ti2Jx>KKe;rlf>?1=qmvqrpA)# z|?9_Uv3M)liCgNEJ11CU}FA#H{}1m6%U4c_h4D8oJA>&6YDaSmcmi+`31T zRI(>}!}(R{=PN7Ke095+M6at;pd0#4%*Lu0Bo6*V{4Rx1@b1F*+?V~~o4fKo5cs5q zd2fT9_G3brV}0ZrRm)%{(-6k<~kzy%YCgEN)6JoDlc29m<#C>oi%VJ()w_c%^o>^xn4AsBxi#fiD}w(<`gC4cn~Kk$;CcCY1N7%T4d<-Z6A~L> zWZMUyQT~K~>KXWZfA1T%HRHVqdVc*|3ccB3YhZxNM;6hTKmTq5I@+1Xn;Z@l0>5<_ z4oN}ZGOdd`x6_wOcD{V_`V{g9H+&7o3#|uv67aq9C8vzGyJilKdv<&~= zx*hqI3GjcSPn>@MojHFh(6n=@Eh|g^QNLg&?ELP;=dNpjq|Fz zZe95*+0c;NVQR>4Hm+>13cx(RlXPYW_&u+QZB4c;aKL$wV~Nm*JHAFNX&!=ax^zlf z7x?Ta&$r;tavCY7Kk6!ajk(&XYthxn_v|T?93EF=LJ!H&e7*{KT)7WPL%@CQ$~8?L z`N(^@-7R*6{$#rN=HU<}8Zi+zxul3WihIjDZ7m8Y#O>yz6*>m^`R}ne^FxPz_av@l zDe%YUtz&#~>G0`mQ@yW!f_~<|>P*-?^pTAH#@g^Ds%w8=Pz8_t{d3m$JoMA20X5bq z9-xoAC#+{8pJAG?q;NNQ`Yp<_>Q)8lEms`l)t?bk#eJOrC7!o~cf3??I*lB}lX5(b%`~@xL4fE9A>Xxd|EB*{rs7sV!k5P*0=ndq{)(Vy#SKbCZKhid^ zgbVpv-QtsC(eTG-J)@h~VovbD)m-`*@J7U}PVN`v#6?v6_Sn+NBPE_0VM7YxhmhS z`o|<`7T4Mm(N`)d%?VFJ2??297v2Cpa`8-c@Rf1sdU=fkBgp-&ez#dO81*vsh~?HY z1wzEwb}w1zVUe{nC-^$yQ!Q#0<7^&&K%+O@=oKSqwBO7N0B z^n}#p(why)V>E7OL<}NN=g%?w_dpW-&%ln6x;hFu^wxlP$N+wyv!aW+Ch`+fXRqJV zgKtvB{QC|5+TR^w)chSOPN)1sY!fWHfZ9!E@0AU{>MSGejC zg9y5C1fN2E$xs}xS4aI2<2~C~9Y!I;W?|xX!|+owtr@1KR5Iz$8KMLnTYgsfjwEy~ zmxEziqiXPN60$?9z~`$&?j#KEW)P2u>+g5SgKt&FI_|`I&Eewam$(Lkol zq6=>#b5KW`$YqT_LRRgXACiY&v`F)mLu4zR3>N-ew*WnQG<<35Fme*-Dbpqy$cr33 zy6C;eAMlP7r%N`XKIR`}Ieg*9z79$1yFlnT!eY0oj8IRlJzq~Bv4uZrwb0lv1)W7v zXRuQcdGhVIZU&>TpLjM<$a9)Tl8dF(VpqYRdek_vv#AHNAZ?f zTDzkab$utlXE^S^;dU)n*gYEj6thQ8R?r2{^;z8o-@E$M-(&9-@{}76%m1!ql7619 z0v{-|C^IIFan4U{PcE@oa9y+kQuVE5L4XOH3 zA38bzN5^G2nvmv$Cn&Dy+dadq%v$KDYMW2pcmbUDw%KYGXg@KJU9s6N8uPi&=U2x3 zK#nr-+sUuun2UP3T!{S{=D!mp;+%2rDjqaji+SLjK2xCI)n}4VyoD*MsPD(Qmw#Is zjd{`@`s=yv(0T7B9$JL?KSK}oO@rVOLTfG^PI?2KBu!^ehA{T2wO5O|g)>Qw)Kp|9;lKeeF=Z8MgKX*ZwPIMLZDvyneU4)UhR?oV%;uiYvr^P2r z@E&UGv^H=O?6Ej=_T4>6LOx#Nx#G%)oL2G5OETyK7x>l-zrPKCh-;+Z|2ljobv@-D zRp4PK1CI51AqN>6M!y7Ja4NOJu?xU`#VQZ6W#DDv7ki~oBhOS4TfbZsc>3htdpjkN z_i0yuW?$?KAGwF~i{k<03ilS#Vm|{fHHG)L!Z*>q{@B|L`LOf*PHt1mg>Sy-iBhx> zd^0=gi~Qj8jnff7HFcT9@B44IRQTpxKZ-Yt0Z&RbEVEVt-#YB0Z1M@Yg|H88{aL67 zBRj<_#>IfUUn;NDKtEW>>$%*#1p5h{#~$90qLcTodzXqRU=Mt@4@^ zaGjld;tJrR=L}_u{6-eJBoMEA6}nckXUzKT7cmFA(4b?EyvljG@b!d>6Nje5Rc(3D>D1bc!^B-Zs%k-ME9{P4sX zKB?WloM>g}OaZ)!eV?K8Iy~asAP?TM{qwh4)EV{Fsb$Gk*gvqLv|b*3yE?dV`8aeC zTZ@6CX5ep))9z}P=$|J-drjU{f)~p+Xhixkh?h%7*lH^V@ez%9ZmkOZY0F!ya~N~Z z!&k2N8{+&3)oC@qqLOgK>?3x__4br!WT#CbcPlxY`wad_(iLNcN}R9N{MQp&!=cMr zU*r9SyiR!9czxb{& z9T;H?yy5%%aE$h4=wHp!b&5vl13t4Gw4#6)q=eu6uPf|$I+EpY3cWo=+vLG__<2j0 zob-jh@nGe59~J1~X-#ei|KEc*>y;nQl}I54Gq#_V7BNYiq3qZ;A>>Qv_M}BZ?^F-k zQsR67`nKAUyZcn2>-nyKUnT&&qEReQQAa)|ujQ$1B=)r}Z#VkBh(_4W_a?4~zA4z* zn$v~;Ahz=T%Ac6)dVk5v>CIl~BR^g4JSPm2Vv+81_%8eckFd8A+1PtS`IdPtl1lVX zIka(i(}{UO6xSg7+$_WV#n=xzS-7)LMICieb@I@qOLuAHi}Hrpy|KRz16U-np7b>!2H)5XS zocy_mi|}3to~XV(03Iwe|KkeusV8Z5e7~x(*R^R|+)+deP$4 zdiOuz5$ksyz9V}FxJ#C>>M>`ewXEg#(Fg`vHYL0|^*8dY>;?8W;a{BZt1rBPxeD(4 zvN5CRBg=(_e?}(I$ZyAEv$sDoh^qT_d39aXnH4TawD5dZwb%zs;r`1w*a?(10e_u% z|K?u_&QHb`?rP}yjD&+UX;1jC=C@+{c2No2x}2^5^WL*hf9#=ffj18RRr^7Ozb~@4 za1i~(v;+JZxe#y3&#i38EC0&9yQCTCdOX$AwH)WTZl~FmtP(btvJcvDdxbEF{Uk@*&zIOwL$NE`&5r%27cVL)p2VC|dVJNF zBIuUCE@tdSpDW~QbeV(C*%QO&#PI~W=IFnEx+V7VRNB@}04H(TTi9>i1YYu*YhMHM zLnXJ*8RUTnuUe5Dst^Bq$1!yvTNBx zBg}W4a<4vO9?Qj`=iLHyxyqf<+cpC)JgJTOn}b&BAr^U+yV-UX_*#npjhZdT zz{`qNWNrlF{dCW*Q~{2RpA4R$MEpF;5xf(3gHzW;^DI zdFP~4;VVfLF`0kh_w~l9B!3lTkc=8@DoMktUr@&vo z+?cvHkQ4h363A`uY3#35(0{y?z-P%|cd$o}sBwFa89Q*$i@(gGSmaw?RyuXC@xp&x zz3zI9I`$4Y)@^f4g#WMmwCXAH`k^$pS{3kn-niN`<f%EozKS)OMC-GOS; zB33Gn&zYC1n+rXyx<{Ggq7v%S#)5r0+c3}ldPPl31M*jA%w-RH z{RZp*q-M+*Tb6w#Y zH+S5I?$SSBr;omEa_c>h9&$XEZ6`I3J%%sxRC;b)0l10FC8fj-bM3nx5bKM`dD0sF z&!g_&iKs8gJVeM(yYKZg=(G10j`wmShj8i5t+2RHG3}FwO#0GF5!pHM> zMVTXC;uYqv4c_+b&>DSp=>Hwr`z$iRkGZ*4cx&SxoAAu@>plc7eL7m>T@An3-S$yR z4tTPf1<%L^^r38h!|tUNGH@~NH9PR-j@<9rtIM$m;-+a>7Cy&Jryx&$HjDHU*OCL}-tG?@e-1!B0L7jS&#Rq|Rx1FFTp+2{7) zA(_h`*VNe{Kd~``^9OQnVid>e`+^iwLQ7_uK}Y?5Mf&@|9Xi>1p3TSK33a)tzqS$Q zXYL+*%Tm|?49k}be_uj>p7?HZ{Wy!5uHsw&6nUXVi>mw>K{O&N%}yj1(06yWMG3kx zh*57#QurR^U>H^PmC!9KGS|N}GGY>!ir|_2%h<_n@aIs(R`?;y1^+HPfcNO*zV`eG z`ua7^C_(VeJLd-cWG5)3>Zozo1pIn+PC30gckt+lO3goa3E@x@pZ*lYAWqeW_Dp9kmyhvG=p)2|mVLRz@5&XM< zRJs3M9_H3^Rf6|JFH;_VlVpHC%OO9UAq^j=_V=IMXP7JUweuBEnxqoHz)Ld8{>YOQ z-)~CU%OC;W@8z~X!5*z^QCdUtOmZMIgQW(&wr}a<9m;g%=&yAsUA4wug}FR>SULRU zqp^Qk^YHoGHr2N;p_BQ=kse3vSS0>+zp#WKwB-vn+BPf(x^2q&P4q zV{5RhG8pHxLA=xaHF%ruz?($eV}l}RjV;Klbs7g*^O_*1u>1zQ0CeJuj=atm8z^M= zz^3HB1^8xJm9NS?vERbpa9bwk)WZZ1K8i!G+{b6|Tek`J{H*UQRq_XaxXlw4&4;{s zfWSs4s%A>uW&`Zr* z_uXnwMcw^E%!h9xzk5Eqauo|YTcV191#;;;$xBlMPg965!>IE;bnj&jfH#S=f zGz0<+SX`4_Gp#JP6fdV3A-2mj&y zt}f6=YCm?pI<*2i-?fR|yukO?ny+^J1aExf>*;0*{pMw}^7d~lsN`|qb#;9Y>^GOY zFNd$sp=(R-uK!kz{4m=|Az2~Ry-yUEhi8Bftw(j_ z*_YuxCZy^JYhs?Y#`ZuzJN7On3`{)ELat6o_+DiI>W}A7s}MHmcaQ%_|Gyve`LN#5 zQ-AD@980CVDZ~E4#h$d^$b$o8$5tLz`PlKeTw5@(FkynTiBFaR1b1;`*$l3 z>tpW|eb=Tc_?FKUx4UVz&vK>o2L@K@Y#%~1GVYZKk-vQY;ncchh;T*F>jlhy0Z zvuI>X_sguShVU_mU8_Rtfe+@3B=@a@Z*k$r7U>S`{m;F&qJJBed?~s7;~37-TFuSA zZQvU#R5z!sF^2CI(IObPhEDXZYx!!0nd3F z7W`v!Ia~V1v-rFtfk6t;4~7m4>z%#_9jKz-ZYA)d#v`^3OjQ~wcx^U1TZ*|!bEj`V zE+B{eCgIAPKI|1JvN#~Yfjy9tXLhpw;NCdM-EB(*z8UFn_Be+5v;O4_L+~ymuNwN& zE5P+@mma9)#Xh{EdD>nR7GaZ&6`jz;-t}rVr4_3PIhHsVvtt;~SI9tP5$X~Tt>N-z z7|MQOKg!)kupfAWL+AoGD?^Ju8r3`#!kys}vzguceir;Qn_nX&2v8 zLLo;|PMTq$w^eej1b`)D-%0pCy$`Qkd@%_6Qcb7XcL zIkMdbDn;y*&%}cmgf?FeLoEy+Vu5@$T;A{MRjV&DlpghsYkX7 zKCd;WYU9BS2D$y#Rx~)AkhoS(={@b(NA!4;Q5JA#7vKJ~?O1{d&|S{MCT5$GL%JRYQN#2!_zduki*P)JH%%|rS# z=oC*MDh4TF?(yREJp(+ydYeJ{E6}T28o2iR`7%guT+Q1Z@SEg{=a|_#*gJJLp_?G5 z%5&XSL`;Q7hBrjm-{V04X%%VN_87Q&vAf2>?cl!xie^>nsE=p5{_X-Frw#F5xBdzL z@ZXyP3Cz7}*GB6YSVG76`QzWva_p1&VRmu|Jh=0lg)$#iQW9qM7g0Jp2u-JJT{*^(>f}$zr!8=#QT+P1;UbsqeZ#(!yZdTE-9CWAj zI5Cg&f#9W;Oh^K zd=Roh9zeo!rq&q##zcICgDLcrL4l7)ZGfK)#oy*ZN1MoRel4ZLBvnsby|a*8Wp_TY ziiLYH8EVub2;cK`XWHb}A2iI(?)3JjVBgWY#=#MD?2QVR7b-&Tx=?XBm%cNDtlQ{a zHi>#)7h=TTT8Zbf@x;bE4S3HM^W&ws-`BU@w0U?Mb2`U)t{t?&@6{M_uiF}meRG+S zJ)Zb;0h_1fMSbicw;QFozlA>_#gX)G0KdQGpN(%i9e!`{z}Dthm>)Z~M7L7}dq-6x zL#m*^^N)V0ZqdhH*nM)vohP8XTv9Kd!#NG9?c05Y2|d=+zIPvdlg#rEyB zAAE_j7fMV~CV6-E&(E^e*pn9dk2&y|M$(o(l}TksPUCcMr2_uF6W;Htw-hkQ@l}2Q zRP^wBCLEWYrU19)eiK;o5W0b^=ADqDUoMFUPkg zZ{yfPC+t^)H?x5EEqmfi??U%EclKUrF7hZ!y;R#DzzM;P-m({$VjgUf<&)#WsF&F` zd_GU%OGqm?XhMH-zvLm#b-F~Eb)qo>o}L6(@(%cRAR6HekKx8d=!J%^^{IZs#?jwJ3-*lPP9Xt70TLCpGMV=dEgo2X>^p|vIf`I~>1;tHRzKkT>oe8P5|ueH1jTuJap=1+;~9KwEr^$+JJ zq5r)WxN*!FdW+)Tr?TT$pqFaai8|e)ki=KZ#;+Rzua|B6xuc$t1N$p$Xidm@Tn^6+ zzK*#r+ir^JFXXsxziTDXPnXM-QzV~aUvN!H&^0sQl6!O4DskTv$3k0QZNqzwF~4*h zI^|8FRM`a`_yR(n-n#`5yL;;OyZH|0%`)oLOwVFJR2=V7wlU=E6MI;X(a-FSZ#7DV zGKlH1kEJ^3>&J>IMbdK=$E%n(wpP;*c`(6^e6#3w>qob#tkwdK;5NLXnf!`}LJzh3OL*8@cir+59{LxzS;>8`{gI({HPCzHPHf%6dg#4kt$M;^YweV3q>cq$4$A?e%7cNr6 zzTasb^OeXy*;H&OjVoc2BNn^fq@fNyTRC?8wl8uyf9mA(M1XJhXA8#8BS$f58;6vZrazi2FKjPjyE{f}W zA0J@pRYgP*T(Ds;v0y_)L|EE_ny4|x-eMGM>>_q-ShJ`YEK$S;witViJr*Ep(5PAK z(z)0`(4F6NXJ=+%3-bPc{`m2F?Ota0&fS@N&pqcn&pG!F?nmX(;-DMwTTh=2yJX-= z?wZ&)`0FC_WbVJ;5x5-BN$J~ph0heM7mn}xs`-2D3%qu-+8K6Z?Oz)&3{`_~R{a(C z2)lQT1Hc*fNYX zZ}$DY{SzXBXF+5e4M%w)}Ni6_j1O!Sf_C7{;#P+5l2tlaLhUi`vktb8zcD*O^h8FbN zySZL_#NqZOOX7V^n1#!`)xE*s`Bp#K$GJg%cdb3PaKmh@i&FkOd!{{}+puP(-!SlQ z|K4e{xDO1+v`KagZ+FCgaWAs}D~G&&`^sWy-8P8Rge=PL+{Kbv^KNc4mnmk9^k)nE z9fJ`U4A@t%1b*-C195*5*tenXE5qaN;&*;Xud^V?oY^wEm09!Uup2=eFM1A0O->9vk9@DF*jEp>!H)?p z+B#tk?99%|p1+NSzKH$(&wecMmiLxNPJ11&?|%PJhw7Pt-z@#h^m;n%b?AVC3y4pS z^e-BF@?Y#nwqR+KcF2$R+xXL}XWM}rOE=&BaRb&@v~Z}|xHWi*vf>|edSG6Dd@KI} z@sc(tQ~wx(xc*64f z;DWeJ&u3?{edZ$XD89|6Z^3)@Tz`JE^LE7P%Ih@>PeFWt_WGWg=*P?1zyDhX`x#`X zZV?54asS|=#nuJj3r{Sc*)Wq~-kX2b{DKeiqeo{o`VM+YJ!8}KK$mN%WY2Y#K!!g>B4$ah=)z0aUd3{(EY%!j!cSEk9tuRa7Ke`xFcD{Cep z49k)-Y8ps9{i1! zTG}Zc*OR*Bz>sp_^QEyr`9{*XNaJ=s-$1gyq*ijry@VTjqP_Kz*qAAgPd|0?7Ke2e2O{n%`nG)UeUx9_;3&DKzZlg zBmR>S;JcHnju$A+8MBM!dt`qCmmM4u9uE6{v{#3Boo|8XJ$&azG5p*7!G{jkhkpHL z;*|8&u*3d!H%+SryS}A(YDwU3@Y3zC4H=C1WDQxP`$^z^YAx?IHq`}wWx;^e^WpE9 z`8aKlxr%iV6CORU8Hu>W=^i#cIw3yrZttoab>YWP+HFSnX`EN|;rANgor-c>N4`C1 z!i;Y|zKa6aYiYi?!>;k*`OGZrHmpM4#Hjj-Mc`A;IQ;j1aRTyJ6`NN!&V`-3ZMJ;m z9r)o(SI%+)Zy&vD>)kuYzyqC|*6nmO)&(tlRx$&8;dZ3@{*N;N{?Dof|cVeIq|8BX$wvQw7sbcH=V1~TH zD~o2PZf=EqQu7TT>&N4HC;3Asjf=;AVJ^}CCG^1jxcJKR&!KqEh2Oi*FS;V1yH(Fc zYZ>H~*sX2T)DQc>41JaJ<3;GR@jtSD@CVBlcD7#O20kb>W5@`s+s~-ey73Vg#Krzr zm2Lqa@%*yy?gw+QPv_q?9$%@0eNq}K1~~7;^8ugll-~jV`S+4~r_Wv3i6Le7qoG%8 zZz@i9K_1hrnySe+?6FSO_w|yd-@|SV+x7QN@H~gkJXu+uY{7J1@bG@e)fo4dMbkS? z0-y7w-@(4UvHxR@Ukm!y#<;w{5gRrV>o6Yd9k&5_1to13j{ET|;Esn)!Xv=n_v*i? z2gH*3d)c7RU2?!PY%}TW2|IRld%9}OW!OKn%+24HVSkie9d^s%X9UmfKeZ41)t_qB zUo>zC;*xc4b-wzygn7|n{`9sz;4kkhJH25m@Z8<;Ckh@|GD$5T|GEi!Zm-kO>4T17 z|AQdL_dV?StRwSV?kzN9!kcbI9rL&qWx zvh^>a-~*!Fzl{gqo{>8}^ZF+VGwZ;(g_EG~zKL?!dcYa+_f-qOrq7v*?e5=v?s52` zm*>3t2Yl`Fbz=vIAdafCOxiU9e$S*Zu0A#NM-I}O{X4{HH=T(#(GQ>sT)YxbRmUmHHXZjB`@|s~1 zkKV7ZiXs~0xe)t?U3m`sP(1$FGq*pH59|Ne$Bp1CTe(jA_hTuZNA&D;ZpWk8M`b{> zm2OwW^vDvf{8{go$Y1{im&i-u4 zsDfKXhRVUOUg@@=U^&$DwP2Gp#Cc~-_gU8$exq;P*oQxFgugZO#@CDHAs@UPGj#;Z>H?@ zuo=+bZEhWS>!$_Q#(Je=9X85aVI6Sv;g(K_Q}%i1 zcHbWDdn%5!83VtkY*oOS}-IBT&;D5D@2)`YSb=MEA>;BXl*OwV}#Mp;;gQt+E_AkcSKz5^Azh$%G$1ZU;#VRX07jsEf!3x z4aBvj3D(mkULX7lynxA+eCOkczs1`{&7z8>>6c4>dyjDsX?bg9Ci1t! z&lW$I1CPJk(5B1A+gN}3!=?##o#8ip9_-#7`0T634OTox+{NO`%u#Q^Gyd#6J<~D+ zaih`Wny6sdcvK z*BA-Y!0V3x%TUB)TpI6-S&96uF{kWHr(&PJs7DRHf?d46e&)S)$RC{|9bsat!oDv% zOHYg}#{S3m>UB6W0nd4Ao7HiP0{!q8GjrD*zF6QPVPs2-ny$HvJk*VW17Cpm z-)DX7n^`hEKQJs~=?VC|&peO4NPj6|{0?TmXwV0K=>Ec4AI4x@)nk_}1>Rm0`ufjS z$metHdM{}x_}G$L|IDwo2=R@rzn!M>wh4Pz26#5d{&+3E+TP{^@@>BF_FyIAg& z&;AHrJNfsiwX^eZ9pi_8x6lpOKXSK88SIgK!p7AOEf7b!eR5zo-d3HwiHrq%5aJI40dvtQ?+iA|&ygTf=3%tZ8lexZFQkI*joc$)PI?a^)4knGdft9QYS%(ZE zU6KF2Y<0@P7aM?|JI49ubU_e-QRL8k6}!1-^adG_#^%!_1gvHQn=90LP`S?OQ)!Ira(d|J8)thTxg|=N+51 z81bP^>-MGGL!Rco8QG>uSWlKVw$@Vc*)J>ywo0pqeQ;a7=oOE=j&`QjEiAr8p5Sk) zF?DWWy`s;~0gjlbaqC-pY}pMx-?QP{0NB-07fpBkauxGtT$5L?CSX16s=puo0iLAS zxre!Tz)K{Zd0ndPCSkgT5C8PvItxbG?b`$HInak~Ja61fgTIm1^Ue>5?>k-k=dHsH zJfC*?qNMj*uwK2(rPZZ~GyGdRvF-N1kOwFK)_&$@%(JGZpYw2RUL(JG>?!2Ao^6tO z7xVJ`l;Ekx0YySu~G5zn7WbsCxi`w`Z7 zz+xqM(lwV}%paJC{SMB||K$vD&$;Q%2j4_I_bcCm*2gT7caq&bHEufg9dJ6e)gJ35 zR_8R@H43=j`Om#s_rZhozQ1{H`ylKSy645BF|hx3;eQ@-2HtDCwwc4^HxlOQwVHjr zreb~MjQ##`XR!XS&JV}$BVO?;x}Della|cu-(K{b(hqrNKP>#*@n__@b+{6IWCQj; zH5>fj5aibmJHzht@x(rGfq@w%I}t|-h%5fi4LHRAx_^2+@+cp#YyP6hgz>3)ST%G5 z;zQZ#i#8m=dUyA_H9jK#4p$G)fS_;h=^KENrua;YxAe`DzA>1Q{4p?-<_~Bef80A) z5y|h|CtPb>eZEP?QTsXfCD)|b4)^8%A8(KrX6$S02}=);Ju~&~r0!kcNBp`l${}*~ zIP+}>9xiTB_qOs|MVmPP^#Pry+%3O&;@5vqn_DLiU;k9?YZIp(E0}yDVA9# z-!86serdZ#f6liXF#WspQ`KotWA<4*-Zs5>+aG_7-}Z7@-}6OR6aR3$wbQQAH)>IHf!d*)aJLQ zKAvu^KmFJ;td_k`zy8x~MxU{nFthcION*AaoVsCW_Jv&`W9lVGuL`-eJ96T+y4f2t z8d)SfSlZFyU3Ag}Czn6=)U}$}*(3C)pr$9zrgk`HSHFuaB`ZAQ=Js#jPHsJ}Fm~Pa z$s>QA95-ZbdtIOE)@p%*FdrEeHJpX3al&dlS$APiBarQ0k<8J$IE}{M0qI8p* z_H}V5_wQ+cXT-ifMEktKMBf&)-+wsQtDN@zY|jO?X#aa1_Wp;C!R^sS4e242 zWA*$vd!LTiQw|u~Ylwt>`%S^ek7< zv3}`Lbe@j)rFF?Y=$JR&XS0!x`{Y>6RA8r9eHFGm5Jn|KXs>a@%nHtIv`50wZ97<)xq^>UZUt(!>w=qS{-etxGkA4 zY54x9f4w(0y5=|cz|Hn&&)=wRbACtnP2zTfz7>b0;op&yCr%tcZT#d((~xyFe#ErNqsGtpF(9gMrBmUd{qhQ4fU-2)B-a@@ z!Gmq{Y-E@TJSq7L{BPofW5y}znH}ocNi}s%rR$Ug^_48kz64hzY5U77v$pG$MffZo z$EhbwkHn=)0_8y#DOLw&1u)~7an|uBQj2&-dOHVPabQ1kufR0Ww5_SPBr7O*c0gpQ z)QM4AdrAYDhW*H$g6Oo~GW_p3Cx9MlYI+zye3{D&q={t4ySlgkHVP6j5ZW`jCpbumfXq zaURPab7$EtC@0Kf*=UrlaJ)H+WnCRvcJ*AAHAOue?Pbk|%1z!^aYaPk5@%Ajs;CPuS%gzLc zP@ORd<$Fbvr9TFN`4z_?kgw^PRn-`DuW}4J=#7E1kumTV$H26jW8hL@3|#-`F-XtT z9fN;9R~~~8d2|fcV(oD1Y?j?!5B-cXu@=h?L+Os=r4cM^XUDShFjtc6vh161?HGJt z#XN}16LiuyyxeN%!IHe_v?x)Am+&<`v%>kBhUUQ>zE*>*zI-h=rB<&^<-gU=gQz@f zMQ_y9od;v`gn8hXCr#^EX&z)7)JgsGuR zZB9Tzed!&^uDh{@eIrcT*&LdSnvBfyP#Rt5VVH)=% z<8rMPgTyg4x!@gWllon$bEm1y6Q@8P0z>f(%$Y3vZ5@{N zMLA&t%htmG^@p(Rh8Zjy(H~C6c$T%4L*Mpc*{fYywm1a!+p_E$*uEp*vg{9VY07%A z?A8#?JdaJKQi!{jQYmEOy*W9w!+o~p`%#i*SwT9yIj>_wjx^9T^;~wUUljS{jBL8r zc7|3VZ_zn|yaiNf5%&o{Wqv%2v$4e5+we60pq9r#*q%C=$~1Nm>Y zI>RT&TG1Lcb#+E)jvy6Ha-?ZqdRllG8D)jTzY}(J0kV_Chm1P&h{*6It_5;iMq5NEvWyc1wY;VkuLJ7-e_N`t& zTUF7|rj`2Hv>N>!MM{e_<7TLzqX^-@75X`fq!$_L=P2^BNYl?z8KOn;B|vjzIkdkX9o`c)kb|NE1g%|f{uHi`{o*?$MY4>5!O z3N&ZZfq!CQr)maiu#ZW+oE%V_1WpK)21bz&{5?yuY;`n76pA%WKPZoG?PjP&aqsa9_Y6}T$p>Q2d_?E4+T=;7>7xj~1 z3!})vLhm$3*g{9%7Md&M#8PdRV#19<_ad{zQ>w1$%OU8~2q%_pk8(~c*ctq9g}JnB z66Oy4k+&mQc5Q%m?ik0kQDg${!7!%92o`EFEj`lItP0ack->Z|Lzp&-MDgEh=T7@V zLzp&-1QrT&M_O1NOdCZypw~5+Hi~pA{NFHb6e$!jZ4{9fYB8;xO#e(V?akiE&;OBS z|8rp3ODG#zvFvt~gK+#uZ{vZn-wO;oLX^zCB8DBx*K}7}D@?&B*n&@J%<&0PWV={Pzyj_{!PAQ(oA__FeLuax zUNNA8Y%@{^D%-0FX74hdQ-~tNz$paqSMobJg~lAGV7cE0b6CqMM3Lz{r(ly9MP_oG zf@>zvYsAzRd5zNst#K4-UC<61q@FT@m{{52p4#D_EO*d3+*a(R#(KR}v!HF7CvU~0 zNI=0BTwgo8bodHpxIRgx>)TUcqfnPzV;S!o>5_z?-coP-42yEBVzaFlm}i?m%~A=h z2JBnG6qN(o%~XZ^n={cE*OB&6nJ9ni!m?775A9gCmp{w;z;?;->V@NF(5KhcYWClc zYW8R^tsKNd4rT?}rr7gx;0QUetsn=#&Z@*NeluEryyTFyz7gcu%8N0A{w)1iDjr$kAx-fsuS ztfC}D^Jv-*k}#D+({(d>+#lnj>>oG=Zj%%zetvmAVAPpDQ$~21vNWq(+-m(65Gt3jL z6p^I&XKE`XDZMyrF)%+S&6Se{jYr8eo)duikw04Hgio(=@0V4Q#P3vre!vC50^iyK z7ohC+6}T>xcWr$O);g z&dwCkm@oqcz9ov>0#?`R>|1+Jry#&q`AVlV0IY@ghUI(tHHRXY1-F4frupENpKn5VWGW(gLU zr!UJZ>g=<*g3jLB-JCf)1~}UicpRmBOO~C8vN4W-00+HfGyD?ZfBNthQ7WJ z{H{jMdv)dDj)>Q>F*%45dr4moI^T|Cl{A`5`@gR5b?Hvs8VNuaiSQ#O@^x|zP3D}n9q`bFC<%WiMPc87{R)q=k> zt>$cdXUW3Q!I z!%{ z@Ek=XnFx*|TpVA)&o|$1RmqR0t!X60DlwA87EuZD&g6MSrjgQDY{8IsXWb-{_!J3o zwMf#Hzgn{_8rOtBH;i6$yTILuDVisklr!%w;oVwoZkb`T!z_h<6G^g)eA1d>6seaN zNn}M#<8>-Cg_*Z)h815Uy=YvT7jU!}hokdV9{e>$k`&aQrLs~a`~f}Y{;WGYIf51EGx$=44)@8O5RWx|uZAfU$>u8Nj#jyFrvluclsM7{;wJhYjo#ZBxMImrCR5o#9cahi}ESpUyLUIt=9fU5~l)31=XvDwxulsI9v2uhX|p;RltJ?Y*G`dG7}lM1RJ_K$RWjvx1qJ-&7=+$Y-p*7MwjUI z!W&@rg`$pnBcgF?@o0a!D;+o+>csO<)G}m?wWf=;qQy3p{I`ORiX<0vYbmI;)yj%9 zwV;;Nf@boV9rgy8eRu^~(O6Ks{f^*|wd@*gO(QFg&`_6n%>K3JIv^{Nd<({8WlpY4 zl$9E|ryk&0?ZB-?l6hh;(R_}|vN9Byy(iAo$Vxni*?ZVA-o4WqsTHo!y3!SrTt`St z&CglKYT_4yO&1}4@uaj-68#k$NczK!I;FvOvmj}b{T3LD*RW3M6R?#@{JMMj# zie`HJ!o6>Ye9j3-06+8^duCWc&dP!No_@`;Q$oPu(-Oz_b&;Dx_0s@gL%be-P_rs< zyz{cv?CIXfXG1vya@zDQ&Q+?}?vPs<+M}2NejO*1YpRgR!y+g zf?vA6RG!E6XK_-QWKb%X~xa8&V@qUDzJ=v_X zOm3_~CP#?~eU+X}4h5I7Oq8dgd`-`+SW(*a^<;m(mRFXbO+A!9iERjcfFP69V`-jU zOR)eg3YyY8P^&4s^IS$GaRrw#mTyPv%js*%mOPh1rLr~8Wl*L>gEa>7Eg19VVX0L)%X(46VX87z-shX9dt%~~7 zxJ{Q62XO>+ZMvLTfm0D|Iz1BnKS2uh^{1SuMf9w1)8*uY4lb6H2Zgm1KUI)aMk+|E zoMiK;SWYeh6@S^L)7Au=E+<(WDt67Ru1%Md_(H=rT~0Re*DcA?wdsg!7iw*~oa`;6 z{vXw!eGTYOIk70Ba_SA6>#L_f<-`M=kVb#T8<14YmqIG3)*st)R^6{zW6qlUc{k#$ zyVX`(1=B>b&2*zidxnyY$e-=`E}YYyheh2fCpQawbGma+1>L!W)0*43cZI5EWB8U4 z@GYVLY*0o%RkJUFH4=;P@atyqEukwvg~7MPXXf~9|6?_q1UW4M2fPWT8*F?C?0P$3 z=9$4tP? zkl0hYHeF7dgOi~)UC^C_3pBb@VL*4v$yp%(PbE*;VS2g~GYZ$Q(VZ00==zzoM=Wse zMK+p4G(DR+Wzp>7OPqex=u0^=CI)ai@;8+`zI&_Ec%ZeY%)X&MsALY1H!+Y`R%ud+5nn?BBU3lx2SghM9x%k9%siKT2C1E1IxuDdcnl{LeXfP00sG z^GMB}L43G9m0$RqCXm~u@HJn0YGe|5#b3b4ax%{-MwXMA6)-YA5_IG!Q6_aUvYbp5 zYw2TTIT^)&E7)^63CK5wk>%uTKC3`Z+Jc$+GDfDY2^d*U0{I;M>SAQ*cOw{CP8hM5 zbTP7=JgQdbmSYt$b}8e87CQXBcY342O}Qw zP|aRMIUD|8ZRn_R&|6vHlXLNU2AuL0xaM2`s@V+4%VOBmO|~o>g*K@Es*bFT5t#yA zJ_T2ZoC1MQp-0t`m9NEGhGZq2|5ht2t&Q?2a^lDHDRNS;T6~I}v=;dk$k+eKr@(&a z8s<~vBv-`9`m%Bh7@6jyQ|$qH6taU3ccbd*3w4E2a9d^@ZV}>#T7Xa-=jSN zC1|-fSP-610apn=C4_IqIQJ$eu3`=ZQASdl}$8-GK%}TjSTioz$;y#E;K~JnjX>wo9jzj5*RsQW;ZfR|^R1vxGu#tjpNzY!!`Rd7tj_V>y z+CS7Q>Q_FF%FBDlR(4swIP;mRn|Qu=&KQ*sj{Z^gYGwL2{V!AHkbw1_R$%Gk&6?dV ztsi5XQFF(>;xN-#aChwjp;2>^(^{kEIThC9cv_b;AE?)kr=hiLM%T=Y>q&mby2GCD zx*nl9cqzEPFgtpEmix{5_;EXK?Wvq7v(0gRX5~R?bk(R+Gb=8}wVq?}4y))2tyL<& zW~LA6f6G*s+vI`Q;6IJ2i?}QNpt-=4Ls3p_g?t_G#>K#qmfcxa2^p5-cm!U9@Yx7o zmK}`GdLq{&2K@0q&w)j8d9c8x_Ql<}eBKChT>PB`z2Dh_X#FO>t(&UE(ryf0>1)5=36W%s2fxxcf=0Z# zd=96?2y&2%*1Kk|)U+mdRxagRFuay70{QdvF$zkhN#p4WG%jkt1M-zUqqlJXLJV1u z)Ck1m9b1`ZO~YANlvKK=;J=GXM+M_)v);_xCS%49x;~6blmzU?@bn4zK2^zhIVHCU z>`9h>1`_lROP>&KU);#bzPO<^q|#x)z-mSS^2@1DTTHt2s17p{@^ z2r{9_32m@N5Rr|`NBp2iEhe=+d!n+!EO3$M>u)Aq0> z%l60jOaDV`2J>n)KK~E?L``RH9;@*++!3Uu$WG|4AC4eRklP@v;igA|&uM)9a0IE( z*D|z*I|A{0O&fwA5rGTE;@2aM#9GrMCpw6rc#too~YTc z)4>bh1uqO;co{hWM{A1y+&Q`qVQG+6iVd&N?4i%BD(JIuA|e+U39Sr{0CzEq*AmbN ze9aD70!!9bX@&ThR|X@sNU=%aay_KhDRh^C2r`k2c(;3Ejf@OSZ_BLle2-Wpn3OTZ zf~zy4VAe4qZ{&_@nD|S+{4d?)tvp5-s}-mhspIuwRcZuQ4;aevh#;mIm%ACZSlelx zV$S{EV0_XP`EAx1sYV4cXOcZEz1wHeRTLe0t$V5<{!E?Hj$p!~Fr&@)TUXjUA%es} zYRXG?V;waC$b~~(7sP>D%3JEP*h#;@?<5lP- z89|i0(J!qWc9L4`GM3zNzmoF2r8!32AALtsJvxY~cxKGd1(OYr#a0 ztN5Fn{pp;2r=0CyDzk0P11%v{_c&xR_z0D_i_imCYv4ID-LMu6c=9~TBJf@`PjW7f z6M-j}<5hMWa&@x;j*&&xBG zoUB=LW8X4=95l9OH14SUL|GFu1hlgD8fcVi8jY;coi-e>(?$d-18&t{{TxB=0B>e+ zc~+XWIGC?I!j)t-mS1&c;5P9nO`To~+V&dh^upA0-0 zh4KV+yc+ozjyT?gayc+z490)nUuyO)^4t6_gPU^D=yE!)qpBF!K=FS02ulS!<_G@Z z8}a)5_?jKE`c-3GWqFmym0$5tXJs{?8p z8rSE*hLy)v%K&)mjq5ES&W4r7l^7h?VL<=oC9$7V`EjMWtJF8pjH)F@^#Heqx#FmX z=k4THBvl;MTe&~0V)49*J)OZT0<+CQ*$=UmCMY}O_$=n=5#YAp+pz538*26=?7|<2 z4PLYpZNnEh#0WB2#QM6tPz31@tS|6F^hmJL#yLdzhhi;Z{%iAWB8a~Z){h`w7%{_n zHW8!)kM$#n1A6|;93pK^;1Hqxd8}Vu4l#l}&N0jjMUbZ=uGHm)BFIHxeSsH>Aa8iA zZ-^I)AW^{j7Uc3^4jf%hvt+=LUosi2w^BIE5)T{&As2Bq=9+Qh80b(!c#^i8?!1+Q< zjvfiJVmu~?@fB+c-iEtU$g_cc;J?-Sb9P2^8X|}XpVI*U3^@PGF*)D~5$8j`c${C| zm|O(8nr%2H7eTIzQFh&!9MBqYzK~}FdCL}Ja)$D3B1m^2{qmBb<@$Lx5#(!Jz41I7 z+8-7;*RQ;Co{dy5&&G|UbG)@~o=pUia5IaFQ$5+9TFV z65Dvre=EpjIJs0LRnYddUaKd~{c46qgEU zp0=jZU-c5h$z>kR^GsQMZKV)nG|W|olX*pR;1O_KrFDHSGfNs+2f1J2WP#XA)AV|2 zSW(-w$-E~Kj`admCWGM}Gh}NFBdvvNbgp!bq^KSws}}rBhQ!CX<97ydEYg!wd1^Cw zzE;5f50Gm!fNLWbZ8+|)f!sYUYY|TF6xBc*#gM#7=^kidv?)akPfGn_=+$PU7fzss z(RR0yL(O=PfS+!=-@X#_5e~M)9&Ox38=>h95@Q1G6#I&2m`czNZR0B1*oZb};41py zd`tNG6<4u_V?PDz=O6ia{g`dJ%^M5k{g@UznI-sl$as=tUTaWq*JkZAthk)Cb{P@{ zQ*K41-fc2$chpL7Q8;e1OvL?kVj7xmb|aIyOrY|^)Czpd`RCLt3&#!#Q}#f2i474Uy|ztY+Q8^`6G@MBw^uc#W&gvTgAy$9jfvw9V^$ zZhl>?Vt&a)41Y>basq(ikBM_5K*aC@Yi4MEb>(Y$WhL|Nc_{aYZM4_H@J!=y;#4SA z&=!Rm<{hY=VO~6v4<~9Md4VsZac^TYtR|m{L1&mVzdnKI%i>)`zRXzMJDl7spo|$8 z_tu$Xw?vdJMDztjfccNO_f(vxiF=2Wr(E2d&a%0XP5n9MTS({FaLCoPbln*iP6py0 z{^4iX7@V&^zdQ=*{OX1C`|xcyZ-{ecHDA*+>k41fT`5&qz@B+QqxRz1j&Kqy);cfNIxV&_ zhyPY<&j#mvE3Q?TZH%;;XwN3{G5v7F=cQ=}_*SSr>&4kKkNuu0?v?cX;Czie^Tcc$ z!pHQJG}n<-Te*#I!I(XB&fkPFT;_06ikSXNoTt&j z&AFI<7-x&F!xq)UHM&*0#ufRVin5Xeh;A_Cd`u(!&LGppTt@Rm&Kf1*9;iJV#I=!% zHeB|*rqrp_#+ZCpw6T(FV|z?vv@zb)nwxP$uyzUd7i}Cz8{=WoFxvQ~b!eyNe&>{0 zmD=&ocSbv-(ax;&CW(szYr&??Hl^$aZDj~rS&vp`<4UGr&N_gNcC2*1SH2U@?}PJA z0xjadPH&1US!wF1ptGO0&=oB#d>4JBPU%XtLHREm?3_?B|2!P|5_V{#A=>DZ{v^k$ zrbW5U+sNLl{Cj0smD?6OHS@~==K^c#+RPWs8|5>5P>bnA|Ld0FvK3suL%jrdg+pS^ z9ZyQVFTzgxB91ircB#|FdgK?Z_3ruZ_Tg3-p;jtkCqHO_yi2d?3~k8S&vz=iQl*%C zFI3SrQhD6FGiOO_aPJPBCAH<=t+*L&4!c>8F=x7i>uv*%qb5psJ0hwhqYQfgSCP zasi9ImlDY@@`j$8s_lU^(I$zUW>BY@w zDwD!|-pbeV%KC$^<)J($wy{A6UsK&0o!eY-19i3bvxPXLV|j!fPKE+uAL84g_ER&X zrTZJEG^iwDQ+b5l5Hor@hp_8r?$TUIl8bT&--2=b**td(Mw7FjHgulQIW6VpbW5?P zbfd`O!2dpJt8kuRKYep)-k4@q-@;6)kL#?gd3NMBgcM(dv@zt*m?rooVOCG)X7x$j z$9-{DpFkU~@O0}|y4QKR_0Yx+u8o~BbS{lIwc%#1@6)tk_c^M03< z+LhWFnCpUe=AfPV>E4*twYgbs#m~uTv=YzH>Y134PWx-7)Tng6Pi{?|KN#nm1X{*_ zo8AmpveLAMg8IyKR?E@C!grJTS^W*#u-or|-DoO$+%CBeXv61|5*eB{Z|O{4<=+SM z*1BdSVzj+sRW)cxGosE@YL_oQH67UPSqe`FW`I_D&&}et|eAPl>tobNHJ2 z`JnI+#aaSFb5~9l+t|y0tF_b1kV#MdOkq}Q^OM7gu>W5;q5J;{F&E=G58-5)m`NW_ zR&bg0u996kyC;nnD`RnykBXA)!b3tRLzZSU=iq>?q z9>U2<<${KjbTN;9g@Ig9+8-7;_jH*zUEKksX9c9!7D!LZWhqO&8$kMn zY|nZ`#zj!%TyAozn41iAo!y7aP2O7}H#v#RN>1e7x2mR=N|;Sv;MsxACZP0(oCcu$ zd`Zn(AO|ZSGCIT)c?o!p#%K1autoT64e}XEk0DnX|IY!ovw_S$C=q4RaT{#R{vc;? z1)9D4>cvZ>&Z3P8BeO(wzf-4|!^l){Alv!zqelV3;lDP1_9F^r7k zYk6g@=WBT=*NANlWIo>xwJ}{d zud(L-+LiQO81ds-klKl1#Ghk9>Sj*WTnW~YPvToJW@ExgY2g^il_od24(_WD?yDwj zOc*H>(Jaj`tLQg|k;jETSV1hgX@lUaA9N_?tx;oNSq&t^L72KFcMls{jA9!laAHJ*~2;J;z?;sa42D949-4< zvxmc9v`YVHL{D_a->JUz-Q4I3cOx9@X}M@qxIO2{1nQ`IR5D{;vK&Rip>nQT|=is#ndOQei3jP+I3%jeB3vWaezD;k0^AYRb zBFb?-U(+*d17Fk7TzD?l64p$)E0>FHJmS9<=0X@bT~JREkM@L_z(}<-;TE5zA4c|q ztq`K_R4*Hw38(qI13DAV@_7e*oCbPXh|L(*%VF5DZ#c$Cqn9hsgPCG44c60&Z1DiE+rS^5DQeagb72tj(~cpB*8=~4fbWu=sb&u#M*BPBc)n<} zqRdyR|3x%xK>vd?sG$EvHlRxV&(|`d|M_nPndkI>eiizkXAPjSz#3Fb|L1F115W?* z`wRY0`ajR8{uiUz2K0ZPj{fKN7py}6=hueZtpiRrsQ+;fU(o-+*&joI*Jn$3G=Q{~v_@hd=%lulv74|6`5TQeg1^z_$e)P_w$AiMibFr3wJSdDj(!tx% z|GCEEL1EZGQ1FEI0&Rae9zwIX&9Pn`Gr(Yj_3D7Ed=nst zicuj)ii_=NJjgQ9b_YDA?v&>WBHOr#s%|_ej10;Be~$+}%7=|{fsOeMHU^~%Hsm16 z(Kw!jHD>+y!^R-K^8l~gz_^`(H!kf{v%l>|E+_EBH{hsKaJ(Ax>k8&vAn;e~jsTfD$e!ygxO0CeL)VTf02<3aRDm|xm>kQ*0or4bFf zF9r22~bDbOjYHO@=ycCBkcv#+n4MnU`kIw=KBOic#_2WTx_t#Hxt-y490!c<*lHy#B45BuS1<3VBM z0kL14sSozVj2sA<&I6;Yva@Yn3I_lHBJHr@b- ze=KoE8&T<=h`Ks(QCAJWtm(}SXoE&wLvX$|_6M`6bbe;GEzW;erT`CR{g%$HRsLNl z*TnHqow-aYI?Fm{AdeY7TZfDq+$^h|;Ht1rw68GBUYAltV#Onpnb}Uq=-x;J#P}^ zXNz-<+e5@S#}tYPwVTyh=WCyNZlW!AafMcTlVS#g3e3WuKh`2Vx&LN!q zdS!rbdL!9ptFTIdg{Z|el#%Z^`w+=7Olh3#QPdF%Mj((w6#KY$&CVe^Ikrhy1J7J= zcr9VtIw4L0tZaeu&@XCM2^^6CE@>Ay&J~c&Qs568d}e~rO2BdM+NoxHBj0xm%KI5u zcMJ@&2**?L%wR$9Q(V2vD6S60e*JQa_n{pQws`Az}6)-u5%F z@f?&FA-nxi+T+;eCH8oL+)o5%i0kzYl2;F?ChC_q5&YWyP|_W%9;%~z<^0Ru_g7b0bL4C~&QyxNebU62$*x>teg7dTDBx_4Nf z9nO!%`G$1wESxWJJH~XcZ=Mxe82;Ii?zL)WjL!@v8-RWd>0Xb#|3&v&Je4rsz>IFd zlxoDIX2oMK3Y6=?-)x0%8v|WSkP~5w&prZEMs5a2lYn??nVNk8OxX$l%fRQDU|w9u zcTMjh9`-~l@4vv;NDHciXuAeudH`eAi5D;?EV9T>?AP-(Y{20N`GTRuMr3FBtRn2^ zSck)yluOoN%uvFJwS;xH?n>>PDb>N4p(HEELqVBTt*_C5N0^}`mq(bPE0oB~LpPY`>PsCGLxcmqoVA4?X4tIVg!%l%L-c&P0m*@&(`Z>W` z^Ill{){9&Fc39O_ywaQ4JCCkc-=*q|_jlZTv5N8qKXQBl?LnIBupYS%Kibh~uWs&P zC`rQ82TM!-EcdS9w|D_z(wttaW>P+Xut7!*x+31rSz*7;c86sm-RTGH%|yxOV3NT_ zfIlCmyQqD~c`!#fwD=A8-k=qa*<74hN_oty+%0HZkxp(LE&-7l1QS1Tuh zwx;!2eE-Lsgb+N@&alrCBCal%Wa;`WA> zimH5;aO5PEmPD6nd=|SZeHQwZz@G2)eU=W{U-ns^{v%-+V8FM)g%7ai@9(!*$BA-0 zj;Cf}Z;-u~4mpm*u|L|X9$pL~twmI>>$8O5 z`FvWRg&qk=&^TTU!47mnEq$LQ1iSZZz7>2HjK5L57=j%GHFz-uPyefq&q7-h@FL{r zf5eL+B(>16&k}<5`o{2L2-yVgLhxBa$W?CtK4U&h2x)?Bgwm2ANQ%DC5`z4Us(qFa z?Ego77P|kRzRyB?|4Tkg2zgmZeHP1)hI|&gDtwmnz^M8@O9;7K_`mopQTHXxbi_@^ zCc*bWxdCg88lijwocJ2K1-I5?jk8+KhU3)-pCzuw+Bo<%_lwnBu4pX&-vUnLn-gmG zCg#Pozp&rsJ*~Va!e>bhs*Su~jn7gaK1*%UX9*#~etr^hU4sx&!T2NZU^j2)>5(AG z!mc3h%G#XILSytApCtqt0zxfqq*mawL$JG@uDmZOsIQnpQRQu7AtxLA!Grcci@s3g7xs4=LPYW0zS)(Dt(p^;!`jQmQ&-i(99UhiPwV9 z5<-OC|0P+vPgM%R`v10RBXJ((M?y$A$Bzg;izBYE;tHY=tf+8Nl$4}{Yw+Xv4Z&ye zgU^E5g6r4%EV^qOLa_UxJ>s^&QIB;qU##oaqq<{>PKmO7TSYapCuYTi}`+jXA-Ao+@3ih zB(T5|*E1g1qvcu}&}yQ^G9ygjg)F>R^#u~6$9Z4&S6bhdF!GP!tAR0_plk;DV^IE{fOsZiD9NjkJ5!3iUh(q8 zXLS%?xfF*S{VUMdD9gaRbcgS}6UQ6wh_d(vjwOUV5HY8|zmg8jDd0uOgNP=p@>i~k zwG8+}e;Q0?cX1UwO@APMSAnh+~2N&$Yw(={Vnzzj77lSIx16 zkkz?XXyM2wL;i}ZQGX?f*cjxuL&(J3|HWU~bxXor{s7zue7F_m&1^M09c3#Vce;(d zcF6te_iA}aTjP3a801)7 ztHH4Zkv1F;Up$Awn*$OdvdL+yn<35W_d?KJBjzxyu{WNU|^F~JEjK<_;WIK;*Wn^ZxV)C>#fn$*& z+d$*zSJ!8ekpLqci;M({y`<~2$bk2?K8uVDt}-SsBc~CQFDZF!ASN%v{t8ubEVMtU z&vKrR$yXH@3L=v+Gxa$Z8J>XnWuIlvRpg2g$Qm%_RFuAuuTYfcICi+EX5YmkP6VHM zCSE_r!&kw24+ng9j$0Eb}f5SeDj4)y^ z>G~`(?Ek0bSY+4_fbM-^%x96|i3-$b*uM4m~7Ue~hvw<07FJq6F z7{rO-kLTj`4A`*CTs7NvA#x0rYWA<+!ENLJ_TW`0*S#A4z2j;4E@-oQK8uV<#Ow-P zp9SL&yeRlA^hl6o<35Xwyc28b`z$h&uY(t5OXMuj?V)Dj(78&`3RqY>2JUEU; zH!g(PQi)^H^;u-(G0^6R5>~D2v&cv`?p!}EBqJ~L4abFKiI0{ixNhf2Ob?h#)n+&)dH-Vj&ddN>xMrtcjhBb1Yf=kui`j0 zyM7jOx8`B((-W*^1qNscF6D3h|I112$%=Vof#X%c1;g;&4SY5N?N{_!;*73Um635G zgAl6|DU^{B$R7~aWY8mF-puA}>aSImk%3|@epLpduEMH38IkkfYJHZr;8|u=;wFXt zyJf_m=UHUf%}<*4J$lPPQqlXAZIJE zCn(BP_#g_DkvJX;UF|nV^Bkv3@R@&K4&UWDxW3uQBR__`R+Mg6)okm{YW6$$+0D^b zMLAqog&Z~#dw98C4|{-PiRH&mMm$9Jggz~duG2Imht7O0uPpkcCR)owIZbTCj{jDW zL#8oC9~sb8vIUl0`wSguJ05k)5V4nniKe|dCxEU~H71GqJnD2zl#xO{cYL7cO0Z6~ zKi`6}b*eJ5Cnpp#rT+{a8QCkM^FI8YX?6ID9G|paI8U<|0_;tW<{3JMpNuEN^AD&r zb^}w=OYg}}m_cAl=sKlfyJRray3f&(kuvNf_o1Y|_`F8VlbxiRCp%SmN{$Qpfy>9% zJWWhS4(FtDJMJ71^IK{EKg#jta{V;xrr&ZBx|Ng4pYgo0w%EVJ_l$%Y_6k^S8F&zs zBY@MKP+kL`8>m1m@+aW7m-r5^R`~4Ze`9E1D&9y&MabY;1$NgdNLF>WrS z`R{msyK83k_2b}dWBO5u_e-+$^`kGi5UqZU7USlI^OO9J?9F>v)EIYrGO-v2G1^y8Cp*8V|$YMVUPjF%rn+y;I2PKwHAT$zzP}uNzFZ zh=^HuMv5@wgGoGig+aVFp+_1U-64xd>Q(HU989(rRo-7$rqL%A_SdB?jyopo#ePTC zOZ=sY{4WXn>jq=@e|tr5QGW{iCI^$DsHwldZZK&NgkEuf-C)vHywB!3nk^VB)TL>S z`Cm7_Z*nk6EwX_OWPa4_n;gUKn@rb=)W#YuD@AwG1-dRJo$edrpsXq0&Gw=s?kOn} zr6ayE;ohl^561HZHmbZ%N|*rHzRs{|^-z8Up1BI$@(;#-2+9bQ?+;?Er@~IcK874Y zydewz*a_|U8s8T?7|-9+jG81%*cVqjzDdC9!oJwSB#EzCoqe%`NlIbm@eMXGzDb3K z_Qehs`2+3v4lXpbFLp4QgljT1zW%_hmB&}RUtlx6@ofnvpiwo(_hKO(-{++j$5*>A zc6Sm2u10rX>|k=RP3)6lqn4Qy9=T!)JHsXuT1kX2Bfd3&$GM)AJn16y%igL*rO^L98` z3jKL|vB228?Ow1^HQ}g)S^XF>k@@fyP!0o!=76#Rj`u)U|2z*E>K^!pNzm2s5q!sD zzZI0pX_fs0<9=(fnBgzU()C+|@dN;^-%5`J{AAp34F*G?sb$D-g?7{79hkqw^BK&;m;F}gd!Bi4Ohm>ozrMcuerqrZ$~Ww{!aj)HgRb8ijMe`Y{nlXY zW>=Np8cfcDKX_mAAF>-(+2*uU>fe(SPS36uN?`^W*SFF@G~ayJmABaV~6g?)lgFbO(l0bVm;KWg4bF6dr0 zYlYAMnT&jj{c3g}Y)|$PQ7#=1A?N7-qwU-Sqo~gQze$!PgpeDzfDjXI21FVVDU#c6 zve^VgMQRZ#Dk5T3N|9QMcp*}&NUe>CxB-Jm(Lz)pqE_)nt+h%OvuJI!K%=#6?wlYs z5efVIoS8GTo4q9Q{k`uWvu9`K?3vk_=lVU*^PJj}F;!z#%+UmD%Z)K(j(FduUtbd> zYggje|IO5WD@~7G)^^nWsWDn@IawJ^k2#tlmYTf|n7v*%$5Tl zl74}TIhrBnD!+aP{<^QSoG<2R6cIfm{W3%4XgVG?7^-wCzka)ZANci^>OMlpNzah$ z@uAgqzg|{qlQBo5h&h^pw{B?Oz`AlX$nMY5>dNVMz(CEfH}J5uUFltF-^~!WH>E>U zo3JZw)Nzv)tStTRZdEwFVm4m7VyW+J9aWk~_64#tszh@9@keu&MQRC0zx`*5YT+)IV zcJ%zpUpZ4;$yNQ-Zw7K!){0E#Hv`>C>NhD(>#ApPPcyW8TI?y{dx7@-S}e!aj@{bl zvz{bYv?yB>`LT^-mwRMXQ{wnYZKbjjYPlvv%|q_T65$k|m0B26!>SF{G75aU7CrSt z?Q@E!pX(=$v$G=Ias|E%JQ3;rw!C-JVo4o#XB#1{AInviMta^$llm*NR@Rd|#}mJW zJhd~?kM`d((iQV)KdKkSPO@aAZKZ+{5mS+WvOZ?nlrLs!Gx$&K&fqr@*axl8gKJ~U zMS*P`{|CM#w%q~RJFo?Q2UcBr3%K^D;M#0o;D26&oxchj;Z=^WdJT;4CFb7`5;OQB zF@+BjFNHmkjUTXv{U31L0#@>Cj(__W`iOS(PS$DIk6rnDWC8sDbB@j79t<430=|E? zWB_>tdaPk8^}Yu9@qL+z4*Xv6sn3>N&D_0Fg>i;hZO+OYGejfm259xZ21393ia0aG zaE>ojOzP~75);v$9j+K8T zpBzo+`&jsXrkcB#-Y`-MzBkqb2*>x44L9=^b-o|Of0A`FlQq7#nons_&{H~&zbZLL z+5cL8ggxGd#~D~TafVpckO1Fq`OdO$aAm(Lo#Ury9Dg5o{!e#5_+yYeR`JL7hVtr5 z;E78#o~ZH2mE!fQENHmFQ^?*so&r8kd02~Y?`v>g>d_&UF;%Rxr1)+gqwaObFlw^f zszzPOTg_(FY;Dx1Js0u)BJKN=9?2aadirQw-2W(?)>bwy(H&KBMPt8+gqqjdEQtv< zlj*b0Gl5@C(0+BF=X{Q=(LV3;Shvh>{L!RH_c)II!V{4JmqlDXY`Ml|V>ouJN7l__ zT{KtJ)<`W+!g6cAsMq}K)4S8?G2ipeE~_OKJF6eQaVztg_mvV?PJ1tW@c0MB2`(W| z`7l^ETf@)MeO2UZ-Uxp4NAMba<;1^&FYd)Q2lrWt&g{#vSKkHq;aEL5&o3T$MSQTbBmo5b?S^nNDal!&iP-}ANriYO7s@Ue~6 zA?2Q7#~E=SBkKCOBB_(t9~#rw04ibr*|6iTSL3DCU85+zL>TM;8GK_IQ^I_HqD%HQ zG-jqVY40^1*58OXN{AQGXG}|k3qSZ$HIBp|$7r0>mrA|<73@o>fUk2-d}RqM3`nGB z=-~qWPQV}Y)Cl45#}ew(%ZODSe@x(iO@ep&!aF5ovl}||2SHD&Lp}U#KS#jz7^W)re#_ztFiK4ENdLOwYox9t%^els}Gb_OTWDa zWKeRAWz1?vi8yfL2F-K-i}v}p$6EOl&zsL!Ep^D|k8i^dr(JY4m<(+(`+vEQnARJJ z_4tT$Y|k&JuG}BU*<1uIzDZ0Way^~j8}jy1=;jG<>qJF2DXgEC;72#_nZEnRpr`RR zzPlkSOT^o%XGX2BT3iC0oajze&sRQOV?Dr;wZ=LsX?2FAEFoJ!fA;=#^Kfg5OOEKH zn*mDVmVg%+baNN}wIMJ4aqHMF6`o5(xteK@g>E*e8u)VMH6-q~!FAX7NH-;|SM!cW z*Ih0m;*u(*+&s4s-19Ze3Q!AC=Wd%El$R=QZ|?NUC`iNtsk5?TD8>=gl}zyXv1k za@F|1YM;+~q%7R&u~y7(ykc^sdo+7bc_Kz4EhE<}X(?l{AIEMfa9-lHJd!V5-$hkL zI4zm!&eXReGD^hA)+CL-e+}9_$aDV=e1=2#4A}qo(C)n!pMf@!{ojHso>_>`09J9s zGW^#USQq>`X!}q2v(I9mfJdd`$DWJ78-d?2aNAk$`Sf{jGj)BC!S%oQ(f8BP_n%AB zux53+IGWsrG(Y;DXZrT91=05$FpQTKMU;p+s%J*+3##Xcx->0!K~|*E>xY(z60?`D zveqBWF>LCrLEj}Jy=AmZUfG~-OZpg-x+kmLg%S}D%HUF?NP9xBnK+yp=>B%L98H&s zNl^DlmAjy-#A8paQzL}7Cy-ao_wo*PdqUR8k+nmIYclbO>DwCdT!z(E!u)hr^-6vx zWfl?n+Pu1qBa!)*Lv{`AQgf(8%x)R#I@P{Hn^(`^8b3hnPqqJuT!E35DVnveue?$sa`@$I?iBopOwEtbZT1o|kKBbHq5FTN(e!SQ^xpM5 zO(Azdu4A;_BcsnxX`gMLU1h%Yzd z9?x{HHC?;bDv!*Qc+b;cvreL=b%GxdTPu&2`dKlH@d@I{bx0oM5Xv@HwYFD6R_lyV@;1^)2u@e{qC&yCC*QrLrxO5 zzQn5HxW1u(q`kj0ti4|%eEI)IG>eb&Wd6UgjzWp><^Ml!@@JsEkH$9rd|9bfM*|*G zd{H6-^Z%jOrc~F~F8pcO`z1sS7}_TXKi`-s3vchs(F}VZd7}J$qq^gux}WyIpK)4k z$6$LO`C$6_fwdh=gv|e!wS9G}*Yp2F+xsP=tSJHh`h91hyJsR^ zM5Ff_&9>LCvbgC6)}WO3zFhGuoV|~J6yf6 zhP@xB+51bz#bfXPq|rU8pIdUtZ#?JI|9q|g1KRp2Ydz8rh^&zozHaXixIWS?b=xoC zA*t7H3t{8i#A+?##iGR+Ec8Tgr7pmG(D=>N1;Ac^9sjkK_K{Mss{`=CeCh&Vvqy65 z+ncc8w=xHYUH192VC>lK=i)2(r=1A?bw4_8DBs`54?ens@$kKWayfp&L+}{q8ZX0N z_%*tWzPD8BywV#R|D@^l1>5+|cu_tZzuEM9yR-4XRJ}&lhO+TLS7!}fCT)^eh}8~f z;~!MsaS1d0y|eN6EALp^_^+!NgYRSGuV@Hoe=#xMTadMLk-wZPLXPL~dqc+dWaEEo#sCD{_%*};_-y|?QM9rV?(54noAj(rqU!O!Sr%xC-7c`X)~sj~)s7gG-)+&ZttR1nl{ zh+;7eFG~U|J|^(ip2-5 zzI9%U#aS&@d{Vpx)FXvXX~vqo3$8H&XFRAC+1v&2_~ zTIcoc$E=pGz>fd1klYp82;|#F+DqAQ!1v3+u6z!=^G&vwt~=|Efv&b)0Ue=xOE*I& zCB#fIhLVL^j!XD;UW>(S^C=kkgzqWL1n*d*o-g-n;vFh-IYgWu@7L^gyGc=o3@aAX z)L9>`q_z%lt)i#TA2i}ci zUgxz~d}4ada%Npx(Y~kja*J=BSLjX4WtVxmq2i&6MM-NS)N)Hla6DA8Sj63b7B*f~ zK96XAJFCMNFDfhbr3bC^I$ey?Y`MU7UW=)J*xPkpH$7^#yz&M$>aRWPeVBHlq%YbG z_TN}ToZf6~K=6nSY!6-o)&|Zy0h{g?u-(STs_(U(#4xC5q^9GY96QvLIaY-`k zq3IY!Di}qwiBS}bX!B|RE$C@m@IT)*Y0{#4PO5!d^}L`i8I0mw_kar4T&qd~XD=q> z-jaDC74cG_ilmmh*LJ4GWaiZls7$DmK5el$uDtyl%{t=O*X=Q{aZH{4@H2xN-y~MP zD~4hCNX4Rt-oa58ma)ZRdvm7gy*=fzj2)=mp`05mCOg5BnWFCS&E~pScRm{J6&Lc-Y+K?C#TR74!s~GuZO4(%OaDDgp~?bb%C zVYEdxa_yQc)Ecz1@>H>SmuGhbu95k}H}LydBy`^{68hohIR4pQeqT^?v|~Y8A7@`G z8DAeMXJPD&@C+lo#t7Flf?Scv7a42UYBm&$r9>EfP5pmu{a83|8a~*~AQ-ZSv5ZEW z>Q1b9wJkj{^)1V|3*AYs^oe}SoaBz(62IBH)w1bgaW_}bKlSh363d9FlgOj=9HEz{ z+T(IoC8AEQ8>=77Yd)l{CEKp8lcldE>(S~we5KWS_(Jo&`S@eRC45Iaiem>{Jo5`E6;jA zLx;?B!1J763UB{nExDKF;Fp{?Z0w$Rc(m!E2lH?m954X}gG!GwW49~+U+@Zn4M;e29cm?Ns=Hc?jP&|AewE%j< z!>LV@hqIZj`~T=ZJhu_y`L4$d?wIP^?7c_o<9?ttM@$i2n9v*!;mG;Ud;F0K0 z@iKas_9x(pKcu~m?F|0GGAFthA9(X_uo>FX%zeFFj6G;D&1uRpvWFo}*^RmOKtICCe7Mh# zaEf=#T=~#`#Axy=zHWDh$g3z8dEMq!U|*A0@pXHq%Bx5xuOhS`ktbGb(Nlqbgi|!1 z=&c`d*#lO~@@jCrIoJ@id!e;-+RyM=kFR46v+%5U+Ft6ovDrCx@eVML0&>$fBhzRv zFF))36}0#dFu$*8U%0=wIEa&qf5y`elwVF(0QAW(xo038;pLZ;8D*naFb?7r2LpUt zC-M5>=3Wb}uYUrw>ad`f}x%Zaz@lV47; zx*HtCDLyBX|LgY7j?nVUE-uuxXQ2FYQtdF5{Mvt?)p7*A_7T413$#Vkm=~8V`*ZFG zE3*^x{XF`P?fJ{VMxG)c487O>b1;+Js1fo9;)@ugcQ}Ysd|>*Vf%1zx#OE~Rm)tX` zAiVtI{hGak<(E?!`2jxpwXr3f{BlwsQ1|7WRF~_W{Mv}WsMmmpzSO*U@8#EJVQ>&9 zv)Kkm1ErekC z^-xQ1<=4Y&$qhm7{Qgqrv1lJ%N!|hNQ1-{(M@%<*bro}7>)Gy|MI7mq*kO6hkv#_9 zOZ!V`@!nC(Pq(_?=h*R8WMj*@yz(AZts4q8T z#^jzsk18JsTrS!bK^#&nzVcAb({_s6Rj+ij67Fy_YRrj$tB+yOqh*Yf`2N1GJg%)H zbCGXlI^*{4eZwiPRXGSwR+vv`re6B2s~!7^(ip16u34#g80F`GJH=)A*OD4z(5ACh z4#H^tUs(p#rK=HM^Mv%exRdB+87DTlE+XBkdD{u@C|8Qu?v3$_w{cSMV0Lw~=1C{; zX&EE$%PG>Ew|HVID?De{kfRSaH2@#>n_b{j73ApC{suod16z7k4)c(_pQn%|Qa3H6 zfA8#M^u6ip2J4xf__~Ij>=Zjy&y3pc^vqVXS13KRNu4#`l~b&23a@9@sX2Qmv-iEz zGb`~^<=cwmZLLys_Py6LSxw>e%w+Q^1?!oCP5yeusm11pwv*xhrZ~9&{m#&OCPggN zY?fd>v!N-Jo|$tGwPbnkH_gBXp-lick$ifzgjj8C;SZ*RxuZ)iV=LmA=Mm;+I3{`h zDePtO06OUI-qVUpAraQvU|QMG=uayfRL|~dWu4h86s?r0vp!l`$jW&#d(DTpC#a}Y zr&ytC4?4vx@P^*lBn$Dn4O&^GY7h3FR)#f(qm|+2QwpY)vkm^VlBLxi3`Z;Fpav(~ z_niq%D|Ycp$hjG(xT`S~t&F|PYAIn(F1r}pg7z=DtiSX$zBPXMn|I@PW1}RoKay=I z$9{~Av2yH&Tk)|<(G}>1^>_B(CRuCF+6UVtcj15gY?8ZF&y3pcY?2jbuTVD0E$Xa~ zR%TK`A+%5B6bqF9?WA5^?`)EpD!M`XRI^m4oQ}LCyqvzOK@UQ-}iTJjQ(0#upR-g9Y&|=Gt>`&l0 zGT*7sED|-{`uR?gg`a=2eNG5J9}BHpKi?@* z@bgc$PwCOmPZ1NfigDglUL&B8*;Kp+^_lh;pAkIIL;jQ$@bW9gXLtAuz;L}my_~&NSbWyaSl60WQFwI zip1_-&tV_F-D)|t6`Kto?I7)Bu+JT|*RVeXEPd7_;ut~3=Wnf5nfzw7K#|x6mQbWT9=T`Gqg{D< z!ML>4WYbf-Y#Bru^L6jQtKIDG0bB7XIIJ53|qTMJf~_1X6yGs9Mlih2%&Qwip1h( znLDV*QpbY}$o#Juavh4q67wl#20f(`avfyui?pAL#A+?qVN!e@@dJTzP(@@@#JSqq zJDKNxzeZ*zrjwZ{{dHR={(40;9{X$GuJk1PJ+Gf>QJ^&*S)=7c;`H|~2lE5>{U{sE zk9G{cxvU*o#J(3BX9xE5%WTi%e=WwYnQ{U1*|fKEE{)&%`|I7&#iynx8cY{8`0GBp zs4+cpBO*8yUA$}d3Pl%hsxZi*LzPF^P0lZ z#eDNA1=B?i{<@DYmMMQdG+i9RUvFz~1O4qv7wL*FlEn_MKV7`p6i64_ml0R#BChgc z<~nJYW5?c3djb0=uyr4LoV*UU$MCggVOtD8pPVXi;EijkrO0o4OBV-CuQQk~-oZEb z(ZxHa*WDdm>^FObqKg;QSsz_&z&8&^7dw=1UL@|pH}4HyY%qQEBC%2V=DnwjS&iZ7 z;xh9o1=B@Vqd#3NQoea;x_BGkysiB|%;<-si{GF1r;8UF1LPSgX!WG{BR##ykdIT z-OkWPdm|NAph6U%0LP1N?&bf~s2<37H=tYqHGHYCHI1`1Ey`(5HCAZSBwV>s`t| z8KUOB2dgMPYRYYnt?1`U7LlD-XmwTf`&wB)6T4-#qg|_Bxl{Z8wD!5(Gr!boxeJ{5 zXBRRrNt?_3!35g>;L}c91l@rb&t=jIN4l_T%kVOvS_ruYgL(EaJ{SGk!{H14_ zlcO0l=MV)d&Z4(8=MbmE___|V$&IHJNOKOndmqg?M3RZWgrYfzSWXp(w)PF+#KAP@ z5bL=A@HFQTvssm(t^Mcxx@VfZ<&2N!93tmLc$zzYqty~iT*P?so%pM0*?i z?_9^c*28DLU$TAn1LDK5q2I=zT{sdPW;`@{E;RXL<~kU|AM*=eGu6TR^v2U%8^FO1 zBKmzbQ{|pPb9bno!E(+aCYrs1YorU z`@9f20#H=9IRf%|NQ#@T@Re9qGc_qQux6@F%u@J@j6U|&ly zzx)>30nBwcXgiT<1Mt_Ip|J%Ip<~%@ zZF;FQgJ|#@eEA~v-W=i^(@QtrLolY|Ff0Ct!c-hor`PG&M}zM$8y<|QI7F@T;~nA! z{P>QVV}GvILZJvcdO@8v*-BcRa8WovTZ*(n(;?vl`olBL4B5Tc@NW@ZTJJL9UprN`L$kIZRKFKzi58z?OatI z`(3}bq;Uy{Wro8hkBoiY={b+ja_w`wR$XPi$2KnVGntW2ZIsO`3S-Boxch9LO&$eR zu(l+)VmE)-U>P;j`6K64QLROd_1QCm-pjOnh+DNxh*I#PCD$?M01e-XUb~jI4ceY2 z+i~QrgB8}D!<+-Mr>Fb^ee!=`#27_OO_vL+muYG1Fa#MBq}OY^ zSd9>lKgKu8x*oxpBle;Bl+IWG%BL$6zz`(GNZT6=v77mQ2kRY5n*Fny-?xn$0^+Dw zoRWy+6fsN1Ob=naPqE(Rn5!KQ)&sm%!yZ4-u*dhICFcUGr4+sN6EK84+H~ylR9g2~ z<`3`-52S)Y|C)8N*)HZ-=DpAk$8Nlwc9T9V6T;ERa)l>2sL$6s8oAcQ6Yv)lp3r+5No@#6Bg4$66ig#$@Ed(J zGEw0Pq4IMb;$iRv(O%spuHK(UwyC((KpI(1T)nJP;G>a|^QjvS*8IaU%x}`3xso{g zUx7!DrY0nE<%z*(z47d)u?^ywbq({H@>n5w6Y}Q%tF4wAHGkv`JAdR5_nRKGdXDD& z5&9oo!QeZ&r`su0%$cDqE%tAu8!25CThT|x;ibn^MUv^}zysFnhf{BGT1;k4t*Y8> zu~tN!wg|a0vK+B=pHa8_kjIG4Lt>~a8Fi-7FRTlgW=a};mZ|0qhq#QM!P!#|F%tjW z?Y6o~Gy77N>q1e+Ou^Bbeu^huo>=wmQBUMNa@oLchm1mo&tc97Ui%~V%co#9qi-g^ zjeXlyy4@({@#3)ZxR8i{!*?-w!;mzE)T>)weU-YZ+%ul#kCaTx(&m8Vvy7?gSE1G8 zOOMl@Wg+zi^=BEUo@I&t8^2ona>UYog=+jmREE)|Poa2OUCDTsg<>Na^R_O}GJzSp zLa~#c!OyZ#+=buiU$eVV+-LsJK=iGUdI0Iwqtw;)TKhuN;&D|PeI)4!NufARCc9`K zetK_pOhxH9iHi6tv0o_m!za(y41y#2)fuxmg`)n%Qyv*_8Br%chGtKO9F zoeKO>qYita5UOWy>ag?w1M2H5Pov8_71Y-^d=20F358S)(5c7wPG$7JoN3oJv9W$a zp?H&?q2B2RJiD&%bhG(C#|QmSS^sZLFWzaA_D&~%>wBlZ)f1+OZTNuCs?`(pDvYZg zh15HEN|SunIw}8rt0xqSRjnJ*m0w<_0+q#gQ8=3bJ? z`CzVYEquI<_n*%1{O4lA+fjwWYX0{?9m)MMhi>Rdxu-w*jN0%zvQV5ddl_&QZ}&cqx7 zb!4Hq1$ z&(h!xpFAz$S^9KjiTNyhqa&%Wk7w#z*CLdTEa6#((vhRpm3+@Kl4y!hI&yHBXW7WS zcvpFPGVF|Yq4)&Epf@_QlqiQ2?d#7oBd3Ui_#44Ga&B|5j{KzQanFX!t(F(> zAjSy4b3N^M;AvB7i`oBR6}5nd;+x)1%mcdd8+c>26<)f`_fEUhkwyi7Yi+QOyp|XT zpN_m%J(b?+$kL{+?=+N-ytXN{j-0Np+djree3^E#lx?&> zXTM`5^&*F`#t_)UmwkyBXYOb%KIP3n#HX00zu)d-%nHTrrU$LwfaxO?ie=yohK(Zk z4E-1$4=ognRj*KZXd!rkK8E2#7K)t4P5K~!*xBva{ zP~>$(FdmvHQv71f3Rz)rr{~xu$V;C4*Z5H3+vjws69K2@dcmaJ4 zJoH)oi@%qQsv52E(DCKb>7&d%twOQa^in?zveByW<=-={{wmW;e@FEkQ8!9kmt!=@ zoxUzdq1dK+jjVk`^-8OI)f~g6&KmE*GNw?hY#8tQ3w;g5C)0VpLPW6-lsC`&#hc%y z#*y`+bK_-&{)}A-Rq1}YT3C3>n@`|vtk%5wp@+BXcTzsMZnGL8T%GYkk=3vPn{l|r zMEj005y|^NMGJ+I|8F%bX8ZKaK&lX~z`m8OF02+U42Y!s-Ag+8^So_tXs4>f@YO zF_h8aMy~jzTdoswW8_e^5{G<#mduUJNZ%N5$t-0?d(f^SRfD^XXloe4h&M1|gtK3H zNzFJ$_(kMkR~){$yl1&Sz?xG(-!r7+7mOh*3@7gz05;FFFuk@kvNTS#+rO*d7he%E zF4rw9UB^DkJijn?{8V>}hOu7cPIp;G4c~mUqx8UU>*JCVc751j zy&-z{pvt2ij=KBnGi?cCAuH#~>Y_jNjO25Q$3O(|sHoZZ?(y*)9p^ch&+D|$1s*wz zl&*b_@JOt7nD#luGo0@OJqZ>4wdZsI3}DTvetY^??l^9FYwk>|WfeSk>mc&0XgwBi zHQIj-#D8;brb*;SrzP^TR zJ;u3LX0Y}t=L}x{1HAlM$+=Lxo^v@CUOw04%3e*et_O1%rRb2XMMa}!0LQsU2;SpFQ2D)xj<}J zv+D)o9{l;|)i^$09>MI!a6if@prU~8b;MT|fG|kOI`r^%{Z8OzW95)=yj(zqx=p;j z^EF=1sF3p!M>}rcRzL=Wv;ks{`eru@SYIIY>_&kYdt%zFBb6i==PVGdtSPXTadl2F zpnl+e8mF(@N3E&Y)Sbh0u8Wl%@L@-6SpoGFhC$&q*uoa^NZF{0AyvPE+lNy1c^+q9 z=3jp59^%^RjLaPJ@uE!;Ekn z9D5xjBv7^7ztUELaGpqFgi=PBQxh@qM{YT1B3IpbO5@ne;MiD=V`sS&HIBW+J>12! ziBH{<0FTbAi`)F$`pDVT$=V9%POyypup#=!1aWO=&Aw^;yEz_NW9o8b*(}R8Wc*<0 zVo;ZV5Y0LbC)zW=Ev+6zeC|D-QS`svlVLuov((<-e_Z;G6ErSfqJ56lczKleneI7< zvm><6VbtmF$1^X`D(OXLPtm6BIh0HG(fj`jS;OlDm`d=L% zL}gZuQ=FYu9+RHw$Js|rKe;Tn2ldveZ>6lwI)tr^c+!_>53tnTFPd*;*6v% zqgueI+FCW@FR2k;2^pC$X@5b>^SnWAJ&?ZR`Dd5%&&CoDULbs{ z|2-4*tZXgQs-Na}2JbFsRlXq|mqO`tp!AGgqq?l~RUm3wM!8zszXm<9h`*Jc&vmX* zwcFNFyR88HK;zwxYvOA(?jN!9+^RJBKmEDC zOYn!}{&PN_P?=h#zoFMTZV?;HjCiO5F|5ThCdadayEpm2Wr}Ax``;i1E~pq*)t_+- z#KZjZA@@Y?^^VA4N|z%)IlAW5y=dY)__r1zErh|lQmck^c`Nf;Qn}YVxmT&ruc-L} zqdXWnMCtPaEuUh|scRYKK}NYrlP?1UDQ-kg zT>D{1dRc;yvb3N^Mx+eWs_qX)S}e4zLt2~zr48%ypIV!fxSwS2?CN1$=N9I1bsW1u zG&WntJbGN(3Ev!-cETLZTDTlZvf9ydTz)nlmo@l3+UHltrM>V4djIfJ@@@KqPq6>l z@uZ4G-dO?h6G_#w2A=zPVrA*^y#>^pqu)z52JeMAC2tTbSrZLY>!>e7@eKo zp~#EMc;p9u@~>$h{HD|UOMIz=XF9#(u?b!TXKGkNt|ap1NwzbbwJUb(EflePBs9Y<;x7${Z*V%fK?;QlrS|haydeoV#nJ z&RfcIEMNrz-98wJ47pEb4!o$}NBN+-y=sKev%3Xidectc)&-h%FuG!7m9!4-!a8_Z zLkMDyjx=K*3Rn*>oOO`el*CFOs~vsoq#nIOJ(nXyL~P`!q_hH&*Yqp?#T9Uj9gaDN z|IyXX+1fM`3O&I5ghhN(CRaJUCQ@1mM?03|cVHp#Kjr$7*AN-{VMkV(v@?e6R4aA( zNt)G7LmB4@ZJfPj=T!{WR@_KM(p-t8S=+R*`sdu!i=JiXos~9C_575*cF$l<0;PX^ zUS%>*LSA(>S3T~o>~Lrv#ly&pLAwHZ-PR;|{RZudWo43&Ep?W3=||jcS|oEBXU(Zq z$c(#r0!w%T$wA``*T%_b9BGqWq4^QN_OnT*Xk*M}j9)XxrHs*kS7Mh~m;!N{wc}gc zM=*vBtHkb(-z=*_MSj=sE!<{CjYMw?~b+s z**uWeZAG3>BKCs!m~{hj)IUP*U))=4ra*jY&Z7rnGX>%Z^XLXPBlnE=5FVSszE!Z~EHrIod_J{&fKf1)DvdA~&H_l(UH5dW^fjRfTNbE?jN@3ENzv8X;AHiQ3W zKC9m-P2{tXoz(UBVKW6{Wqo*T279_b4LR~HGmF94Oo5OU`vb9=0`XP751YY10%P#U zW(vfM_1$AL1>%YN1g`ofSM7?;z>Qon5Sx+DuX}6;daobCh>tO1C~OArkrBGbW}t2| zG+Nt#e!6>XCjNV1GyO&5ccHPF0vTcPKgMS4;v{~n51ZLP4ciDA_z`~E3$(9bS3N{q z$o{O0iG})ar+54HV5n?sM5lMr*PY%!M1r5P{g>_A=1#AN*x%_K-;9m*`groJi9mq$UTFX!(%gc(X4uf!e;E^D|Ob#%XZfL z3y00v#V0BX-Oh@By}@Se;vE%*9$#sv0^awlE^h1eetHdc z{=rZmo`M~8qSJdh-;+5%siD)`7hYb#vDdMO4)I;!mz~6(x)k1?&Df=!Gx)kEY{o7U z!eTRa5$lJ|*hO3~uo-IpshQ(Y*o>X|eO)^EbM~jr;jtMzs{`oK9!LNp{Cmb`?Am(u z(rQYAw`;Yi^6!Jq*u}%mp|KgeC|7rHtqsIx>{S2v$7bxTH_#n6V;7NNGcE07!eBFY ziI+%RwHs^(?r%PqF``0ZGj@p&gurI(#7{`uz=zGi{~!te*bMyN9E{D_#Q}a9h|M5B zIocC8V;AdLwV|c`d7=(OVKef1$x*t)X6&N0c_3r_hB11B&BXr?u$g$Vl&9G{YzBD^ zHq+8xcs3B5v5VpVLu_X1PgpY-eeI9UpbzoVeb~&vNmffd{eC%|LDDjCde6!~HWOZeTNTv^gUl9-Fa?&&^)J*bEv! zU`E_7UT6%5&7keothk+s_1<7JcJZQ`6(5NVd0EYh_ZFM6i=~aBuo?KLQJ=Z-VKa7d ze`7f7U}j@5HiNwO!)EMc2y}1U>i>_!oWDv6t#Py^m*5oAo&7@iRKeqb{6593k^V zw_|twfw`e9uJH}$d&Xwa$EKef7&n7`2_|4*Gjh-HBf?`dcJZF-6$+by-_%*d+JOIw znh(w+gn|_sfc6Is=oy+|iSX;l-^Gqgd z=Mvxh8ot_A+TVWL>0L#85&I3q`Htp2ZoC3N5&SHUzEWPxJgE&}>Gzb#d^>%vJ(+dZ z<4q*pE{qEP)>CRWV|A^`|nlFUkW6 zP~RU3aM|f?)k&bkxslNtzAaZjw}Y3IRZj#9jjfZ&s>ICE|MgF4*>`f!CZ0I4nXz-@ z)3p`s`gB>r&L+;D=)>6Qrw>%eRZJO|%6xQmTdI~zCFhj}yQ4P8P!%CZSn=}mPwAC) z53`b;TT=3MqtED*i8R^O6@L%c4gJ2vTm59slio4E3{d?^jM9iY}6N&T66NzSVdC` zbF&QAXlgJtB}XjVS7FlBW9pkt98mXU(3EA2O>AvVb3N%tRhiCn)l9Gr4>eTeqfOk0 z|8~edjCZfkLEFT7^WWa3{)6w|E(L{HrS9PY-n>0tuKAS`FmGU^TA$Q$qj;~5nsXTY z3N>#s3%atgLgVae86h>TZi%8RdH1cYPinIn#7lLkx%L)0P~uu3(V+@C!p+DHU>7Bw+BNK- z#b$16?ev}+P3$l_@)t)sy?fX%X4}L03yFi;b-rF}b1c~1ho5zNcM@Ci3v};z^lmg` zNAtVh$!i z4kfQY#qaAXuZP(WmqlcU^u@5w_QT}TkNkC+EMK9KqfzqFJ=Mr-Eg$idlldR zNsQe@zAtuAR|G%qU(njnQLIgxZZ%_PpGIE4U6NLHu9DZIk=JQ{@;b#tGxi5buz2zg zj3^cx`Sb=&Rh#lUP08!wRp(Y{(V;3g&n5NI8trAxoGIxtn}_k{FX6r3T$7>6Yuyf5tjX(w=Goc|^)*y3Frr-K)6nI$ zCG#rgeFyFu+$9mzlkedRVOK~v$5Pe6gLkFS*xI{lJ%rc@ALHgSwq=bGCsXFIA#RrGNtyQtg5Gybq+8t3YH4llYBk@{&LAMJQ(uZ*fm zcV5lNnM$zy-BN5-i8g3I4xe%CQ7uK_bGegD~}u>cCOWugYWW#MtF;MGuY~zCD_i$21btTA4=N9QetlY@Zb%o#vlfshzAW#yj1Z<9@alWU5E$}6^sYc*8Cmos&q{u{r%VmV^zzLDyA z9b&%Ucyd|lN(R5#L;{%w!%S{7@``O@Bt1iM+BeKm%bckxnNj2wXN%VFj(Pg3@hd!4 z=U6Qt6rJ_Hg@3r6b_agrWwh6^Uk2t>Kg=hup3>rftX7|enNA#`zlCYk_p{c1q@Ih< z=6Zpd{lA(2>qRvypIrM_)w925VW!m@2(pccbp0u}sFh`#sV%*INp14!rZ!yeNyZvXa3`o9 z2O7$%AHo`ZNV5iQB9^>>T+ai3zggLE5mi=lv??o8j*i$WBiWC3Oe>e;%WR25*tAiZ z7ijjSJhq8re|Pt*=<`T5?}cB7zEyE9nO`r@%X$efBE_QctYXz&Ea2E{?%1s_ zV{ImUET#9;o}0O=o3*>z=PBjL%buI~+~*lw5%oyoxL9Xo?Tzd|;z@BOWyZR%Zj7_U z*6eSyB*xY(;`pyU*YUa5b1k21JVzU>5mz+M&Wdy|VE>mMxsuL%CoPuPVSQZ7+bovI zkFVnRtsapkIV`gF$LuZkWTo50w1%}#>%u74kS#|W2K?z@Lu8iKHE8p}hPdb}(+@WE z$vD^$`@T(#Zn)Q(>UzJ!u`MQZ=*Q=7jYxmL!)CFhM_0wDfBh9`g}uf$Q|J4cp7q!b zcY_@)qbRy(fB?9OGpDc{67?&$}erwc2r~L+-~^UVc29D7?PzzHPJl)gLs+lq_xnt;I9tM1oH-yx`Y_RKD1-8mF~eN`Vf2i zl?ZGm_P2m#T}+!pZo~EGk?%^};Q;>UHTbxXf}3RaAr{eMv3$W+Kh$dCChPawms*`@ z+E{l(WTd;H&!625vHx*5#9jYkL+tgDyY8)zwOdA^q2@`QG*uiqvu$yl!X%U}|Ax#R zJ6aOGOZSrdmfyH^Vrdr7W3@t3thN8}lU`X)%cy*D<%x-zkq9|EX4f{cOx;3;WQc>SL{aD(F8P zqvsb(V>iowsjA=VTBAnQN^``6ek10KGYT7er}hywqJG_1=w+?S_-U3ipZW>9Jh#?9 z7`^l$=QC(|Mw+g`)A_YvPT3;@x))LT+GJJi|7UE#qLPx0LqFJaP`%e(LV@ z+So7W`%<>)Y^}_dZDPBH&B2z&)`4wznC&?>XNuMEsbXC4w%e~h+Yo#zUwyWGQL21m zYwi1f{{g8Bk1xVcH>?l2r@yP@+5@U*|2nA~N7NcQO8H`;>f^Ie@oLEX~Uw803+$$~={4644R)qM)U`+VIHsgtQ#; zg@rk3X`js6CL>ruf6c30!3e_wuJW+{zbyT=tH|j7e38Ue9#mTBt}s_QgwG?dGP_J- zMs|KRS{pg$Xq*|-oX_lbXd5J7>}DqZHZ-Vib>xd<%{NlfEkUyoxzgjq*z!SJW?^$oD1Q|TV${(=*bma?$Sj-0uk&~YA8Gc(aCbDv<*@}E`@0+B zpnt!ki4|qzlHKzf`$i+Ht4 zlOo-hviFoHA_My%;^)XAyxbc*)9xI5iB;3^a=%aIp5s8v^XPx1)Zww-&{dmh-^ zKPH~_?gLl*gn8}>*a1KJw$nQZylp(W3HkInLOk(R_-@r;BTn)XD$(tKWh>!2(m%Uz zZ=tT+6QbH?$GevP^QTYLM<+!-D)qVL&{T2Jx7!w5_tw1Oug5>>s>hc~X|~D4O@cM_ z@}`MPr5?{G-ocQ?GCSDFX4GZgf~FunzBK09H%$GUZ>|?PxmH>ENlK5??~i`{7OJZh z*X~nSL60w$dOTmuSLdW2m-vai2lTi)J5!zQs>hSKe?yPw3!C{L4E-$qE&V^7Zk)JO z*W>wOit4wz_IK(!K0SV%e!dY?RnK>7*QuWRXrIu_(BrbAgs#QPR3G0}56~}Ik6X=O z7%K+(e(_ABrpK4+dc314P>;Xcn7K5c2mwQnw+yF?tV&jA=t?_z^wRbCezRAwhMr)K zWvpgttu?R&-?K?={Ch)^rpGs$V+CvIXvS*LD8J0?l@WAbCmW=OUezS!!tG7rG_RBU>nPJ=pxppVY`cME?X8` z9NUgKpMI9LRyLHxR>djIvp@5mu_or3FN_R+Ywdc!f1vB<4Il`=R=O!)Y%mdodsWZ= zb+KSDBWmw4`xx~B{q^%Qs{5_w7e4)*VCv_xhB)+d^sc^DF{b7m$Md>NdG>gv(`041 zoAfJMqBYGKt!d5`c=n6bmBZ=hEc~=)cfYN&MrdDET};{lQb)}UxQ43p?S~S& zb&b2jXy>zdYt8OxS6SwH?s;gW3VAiPv)TebI)LO@L;9)4->DQ>50-b*%J)|&}0KHiBg*EiH5$F!_ZM< zp{){d!tB3ydedmHLiaqxTzlmwo!(5^i)lxVJnQ}I$DQ6EBvbzzpYuV!Uyk0nk!@#R zUH3?@(lTn@Qg_3^l#4|C*=>tWJ@ea#pxI3&G0I=;C;df@+ZHJbwAPmU(W)*lbLx>5 znv|bw_IeTE*oLN#KX(kIg6&SN#ccRFU3 zU9FDgG5?QNz-#N15h-iMY(^ZbQRGHpH4fTNFN<96xhu zo;Y+Ovo1<|b{(dlniupB*PnfTyt$WTYVP!nQZs7O=nACJN^UWkl8k~P3dFG)Wj{& z=f66hh#F8eP)XHcRBjkxO4U3wn%`P`%RLx_xy5-fMD-O>yR{%_|{Z#erUpIiN z)FWy?Hv1e`GwVL7nn%3;FxQvnKa5~C>~j<&wn&md2XZq0gi$W~cFViIE=Yn@ho zw<$66#AU6sJu;$4_mE_dQ>|syzeH00Qj?T#hRTjOnre7R zpt5;wv3&NSS)DVNgaM@f-I#2e__ao-BS_bf&~klRh45BBzGO zlqa06b^G$wySoFAN#dk^6i%AQdXG^qiIG|~ze(;(pK11eSlKHax&z^I5Zs%yvZ6bQA z#%i^k#6SAaN1fjHXltoqHkG!R{TlLszBt7E7422D_oRTE5|i)}*lA@y=D@&B2Y=e> zy@EL58<=m7C$?-T`{gfndhcg{%!i%c8{@!GiEDToo%V0GIb6@@Cu!Pkth*rv#B>md zY3hF-To(I?L`zF-8d^G6M@tu+R%j_`%_pDuejkLFqD%6`mnN1Hh?nLOpRW5^aKG6r z&>PDWJDWrKSw6fpkM$&UUn2-F#n1BLrO>KOvu6Su45$lGZg}gAY8i<$XG2}HJG}Yf9FU_OApiftCWpwFhaX04w3B*g05A>3LR-TA9dj;a9dH6fV zSdFF+8t9F||4q8y&jWuko?sweiUwe;aoQC>Fna}hWAHz{8nj;f&0c|cX`YzSl*yg% zZI*IoH&rnGXLJp`G*3)xy4`|pKn~GLwv*$CX?n5KJB{xz@O?d7?(3c2B=#5bJ%=rh z?M>!imat7{lXEex%&)x1ww>)Rw!xiIUGUOFVewKdGBy8ft$kP5Xy%-Fo;b*y_@9*I zm3#V=OExRB8F=Y_v(I~~kH6*cOyiJ%nob5@nkQaq4273MPuh&S4=??F2%TQlSYEwV zT{)cPP)clhIJ`8E^#HosCo1#T4=;tjxXS(ND&Z`Lsp={QUWz0tD~ zT=$GxkkkQQ?WhDJMgKR3$4K+U!;Rfzq}W4^K8*B%0E{$GtZejoqw@VoeZSBTBh91Y zqdYcO>Gfre{urq|+o$rSAdFPLpFoUs26}zdnJCLEV~O$lEBQLK31FmW#+>!`XMYpz zAKoSAkZpM!^`N8J2Pb`ywyL(%8;P!u*i9}GzZt^!^5@a#%%fiTmrn0*$q^n&T#JE` zrgEL0G17~~dEVY&q@^!FQK89B+G15G$M;g*F5F>@(>qF^oA4ZCOpnlywMvA|u z`UPX8*#GKWD2x>Opw4#H-S=?+KHY7sCTTV2Fb#YyPn6Qr&|}-xSiu-+p188hh{k#n zT`|%;Q9v&pBh3@{snM*pff#9?m`J}sj5Lq>5yrC)#7OhV2JqM2OBw=o_mq06yC>Hh zx_f~dD;OiqrM{f+KhIYEe7ZYV96RB!yK}{-Cw#iwruzG1q`Bf7)6dQo2N+$~-ILA# z6Nr)Kis$I1>uv*au+|1@Z&K1k>*-kMa~?JjBh4jZ-G`CNJwqpl!$@Ev8-gxdU}F;eKKH55jgOLl>-EyH7^xn#rlgpuar9fre5bHytG*9gW)bMbC_ z!bo%R)^&_@iH4Ep65SCRBh3Y$=?Np1@1rM-G?x`0eOgKG`D3KHV)O}rjFkIn4aP`w zMGBcST`|&JVZ-y+G16QScfubdmHRqI8VPNUhQ@{*ApbNCydM9tl=hCdI=xofLA1X* z-0A)Oo1NZ%XTbWuz@Oy1fsx*KO4mJIG17O4tmz3O&86OgA=Lsg(p*v1qGP1Fphrfp zK#Vk3Y@(Neks@Ero`D!?u2|a=h>_-sSd&)*G16RC00@PV=2CA$znf4PDfgq!hQ>&9 znSb`jNOOtK55!1wsZL@1-$0Bs7yrnIk>-L|bj3*J_?b&{nE}@^(p<5`94inb%_W=P zz({jJpY&_`W2CtvwZ-tea>bYUloBJA^k>{(AV!+YY`pF(<%*eRuRx46SM&d+yygF! zy#g`PT>Sq`dQ5Ch=W~2(XpA&hyxeSgYxc<~%c|k5#mAP()^QG4KHD>Fi`WLUwSuX< z&GrP_O131S%Ty!Z?$=@S?Q-$=jeqR#IZK2zSIi~W-pCe`dwS0)wT7M!pKpgo(PHg= z`5QMYPsNvSCr4bhZ?W-(0-&WY=OwFy^j^4^>EVt{6%0;P_v( zGZEJQ`5Q=lbC$3qz^6k(6KQX(H=yU+$;_z0d^_|hs|_@?Zz3xGlA6GbyIk>5b4j&a z2RpxR5}(owf&QAe5sjX!MWaXU>Y8JhONE0zjJND;`o6e|b>q%gIdmGT;74)pLqj%c46vo1j${ z^wHUt5Og-OY1O_>CY^0CuXI-V0zNuB(wOXeG?>mn1=0WX4n=2g;~#xQ^j&OKVnts$ zd#Z9yu_%=vZRDJ)j8;pmhV#q1z`4{5C?_UJzOB`cvXC>IxncuXXyyvhRY?`v{H%F} z=d>#%npv%C_R4R5Hdky9<6k2|83fjE<@3yZNF8?=QI7=DsrG!syM8HjC9hJTKFF#5L@8qJ?9fEzG7) zIMBb&#;6f>`6eBfHqPvYZyhP}BabwsUnGymx20Oiwz$YLDtd!;qr_{ci~ZhyuISA*^tktD1DZCZ6t!8R zEaTvkQTeCR_AF2RQ=2U!M-+Y6?}?)g(GlB!7C{VZju?63lZNyND_j)$tYu@&pR<^C zu#L2gnl3iT@hbXmS^Kkjsgvj#f1;m@(NiKO6|`9*88_u5d3Vm1C`;)O@=#xa4`{Ez zpKTmWJ;6Vcr$KuiZSx>vI>-65&tlJPW_I7629E@DQ`Tv3-{*d$kxhB;b z^Z!$7FIGLnuUnI=G5~xz7!wtL_||rVz8XsRjWhXUjCrMH%CGS8$1ExcO7Fp#&m+^C zxFn=KJwx%v6lS+&4#v97WO6W4Gjhb8r~A0lGg7m1#7e%|GN$qEHojRh?!BqT%+L6Z zXKZ7XrDP!U+hF}^v;&ymK1km0Kk+X%^4u3Un6gL9DPP-->}fPTpVdLn_A7GAe_{UP zuT;+|wYQniHe60Q5+NX`e2IFt{yL5dcKfb3pY1i~m5d4izGu6&KG}7>`D`QJ^4D>D zxvx;q_da4Cy6U)x%>P;x^k0`zLBNQ#?@q@>5-HNqKAP1BoFR1Fu!fRqsokd6$($)& z&xm?m$L$P}N1iJ_ua`RR%;^sD$XAUUtLeDdabuK@8?AI))RqGc!$+=N5?4B-)V?rs zVQkh7XtW#9Xj0dq>BcYf(`>f-n>0Q4rqXP3MKVLP9juSCG&7g?fl}Q+U0W1D+tg%I@@<95Iw$%b~u1SNkc4)#}6PwHzVise@@NN6gjg6$IlqVz;hdM$?)07C1v9AVS0(4Ah(5mUpgERe%`eLlUmDoC$oqSs3Q zSM*vA)dzdhYo#Id+Hmw*DS9n7NUv?`(DmBzi|$?Kuh)kA>9uU}nOEtxWx8H_x#^RJ z;pny4AicIsjwkinGF`82Ym$0xxT)8MYkF5X2?5fe-=C{VBQ{)xaa^qSl=_@igNmP1CoPm*}%@K7iq4ZjgwmM)a-gu7)WU1FyX?iU-BU>bTrCy88$`)~avt?xRtqF=sM?$XuU5od%X5|3PcHm5Vp)&l!)5V%L${SlSlZccQ`+$$e8kR-7Ie6}3crw>hEGW%Tm zY|&Nyl}BaVn^nUt2AcP#uns?u3jNYlUi~w5N1=VT9PtWQkUpE0N<{i<%f=NBYaVN& zd4+4$zxP?>IpV!Ab@6k=LrqE4MUg&REYfGRJ9@KK`D~-{*(RXdmUhu?eJW!7d^T$s zpKUZgo6Md;^V#|Y_-spUG39*>pDpTxj-^>gI+kZi-z~l^ zzK?Z7#}aPv@Pv3{=-1MmahD@Z1K}Geeu_<5nn33HnTqcXV$j( zh{#8DKaJ6BS_MjzsEQHE6Va>U-+V`)4QHF8$OvzTg?7u zFpOt+5l=vSA?*u~F&Ft7KHIV0>9n`aImBR{_BycvKArZu>e(A#El0eodGp=twAaa( z5BAk^gew5cz`r72KG;{w5$i+Z7&&C?`|GrLblTJ3Nu3stCfmk0TgC*wZQ+|G<4;|5 z+Ug@wmM5^MfA@z@?+RL(1CvJk1NQHEl-$>UnleYzY2oomIM#f&fp}yN6##sAq}(%f zTF-c7j!4y>txu-~J^65Rc3e!y3cmk<{{Plsawfng0tsGKbX$yTc>Xpc5Oo z$%W4l_eXmLwJhGYQXA}P<`ij*X&>w8^!A~>m3+y=o5-i$PCNm)i(_l2cfsc-o%Mi6 zV)2=NaZeqV!P=R2jY?0;t70W1CNw@ z#P)0WH$Bf1E1~O)^K=awkV}{uwR@lg(w?DS5iy}Pc{dknns1UhRu?G3cmZD5hKk5Ct&<9D6jU4J7sfp~;@_;IT~ zHfgH|y_PL*H~r*5y_Su?>eFj-&!DZI^&0dMfC&WaH92A^y#_z4D;at%TV#R>gw|`> zTKsh=+DgzcfndFsEyip2)}3C<20!RYuVs^u9~zJ3?P^|OcY2NbQepD`v$YlMjCr>I zOFS}Lyx826Ui&_H^Uw zXv24d8q9g<-srV@&8zRucatNA)@w$-w2wbrJYtL~{p?ISVw80;boG$))M#m$k zi?{hE@yO}o4Za29k#8O%o)4S);|gkS)6T>fUPSwI_9KYpJ@cV1doF0O#B2mFdY~kM z8Xh`cGyuFP!NiNQ#Z>dzt_i@4vPBlp)>v~>?&)tK!>sZ=qK+D6tfnesDkf>G{h=Ss zUO!Xgji|d-;V#)CO`SDrXlIMFjRRb=rw<7ls4|?hMUq+tF`M-O(yJG!QRFI!leAS3 z<5~C4zj~}3O|PS!SeY#>Y86BkwNy5!Zk8G$^eTwiMDWY_?_qKk#Mos1lU(~bo^@2w zW~PUm8}yW(Xw0g6KRrL{zr76+nX`fAn_V;R1xW)`s zp>Z@78ncBHny95hG{L`+*+3nI3qEwnnCv?Z2hq%1NljsvnxK~zLV#H|HI!DZ5dOxi*R5E($g;x>Se zfZN9nXi*VSoQeukk2cA@=f3ZD&bjBDd!PGgCEXc& ze;eIli%)B#rdmi>*Wh- zzdUgc_hWcqi{kTzr#riH@OkR**mLuCc8&VIv+H*J-HP9pSO@RMnY?e8LB@~Z9=>mI zzs6?)e&gpmx0l4@-RLsE^>(Z6@j?7{G2lP@S1>x^jP|9Xeb_T!7vL5DdG44aYkXrK z)fA7rC;J?!3DErRL-U^py&RL&OK@-u49W+ef~4>MfL83x2!Lhp?r`Ga}cE~$O+)9YhFbS1>_U^mPW#Oi;; zJ?4m0v|37O@d|u=>LM>55CdaH3+`k z^@!>Bhm6oWmKFf>_>FFIIc5g-xi>n9H5#Iz!>k#?bgXTxSxI!D7$6I>^r#!4dr{c z0jx8eOt?8nM$%YDdf~}wE#F7s*I7A;JdlhSAR~FccN<(Uw*xXV#D~zcPASof(@@@Pov`-z( zH{i!Uok~1bQslrh%&KZFZXq4tvH%*Buoe~LSMxorIU7z!qlW$9nFId={Rdy*hbrho zeBOE-=aTU`3BR}fgjlMGb1?YZSJ~Nh#iq`#k|z+y{=Bp6-sj<4P+7cZ;lHod1vv5V zw}Zmh>H={x{CodeO~3y8T3rx`7bG9KbgeGHX>u9E&ld$^#?O(~>H^##AZzggF&=M0 z`0r~qq50S90&&34^7}~tw`+9)ZlLdZtu6?>4?uk+e623PY3c5@xo)7sP68^Pb^zagFvetQ?|cP4by8;I-QiND?`AIxvhM6?Yt zLxDKJl1n5k1u+l*-8E>fk23j)KRR-$ZCD^$162O=?N>JW_v8vhi!ZmE-^5dK9y+Je zt%v-!VFAtq`1$Qy>?HfoAxE|ip)cTzk{*g)Qy~6wO6Ip)1A3_Rzv!VYr|6l$OKrn~ zz|-89dM5>V|9s{S+M^@gQGn;e{ronp2ivefw4Ww^D{OCmE!;AMd?8BnHCu*H_h1>) zco4VsYtML1whR0D?84L_yU@>T1vqU(D`4p>ebKi1lZk;Ao;Wq^WITRtze}Ibt681eGKpY!e`@i&~aaMcI|x}{D$ZJ3-Onav2&6(T^jG(fdDfboehx0@HY;I{UsLD|iVe!H>&&ky){aTVSu;J5mS z7kjoF3&bsmTF7=I_=n#rXg%aRv4J&l`hVfY8Etecu*{3Wc4L7!D=4DQ31>&N% ztC*M1F&E2xy@)(|J>cLARFkG!7G5AwYW#Q6cQ+IMab zc3!yeT_BbPsCrt@r-u371){?n=b0D6)7|=Ytk3r@z|;T#yY<`w-_@^Q3;!Q|Z)l_l zzITDx5z+T9z-j&9_1xn1>sLpQ`gI$di1>u#HRzkx1&c5TMFO%#JT%|eD5S5 zHzq>I(vu$vjp`cGv9Q0|#;_ih_5Kas5$tix+_#Cpzr_F7pFHtzm7v2OkOZImyOX#p z13`tw>_>?I03(>^p1sVP zeq&%XpSVOr48>mk;{hEw)JK_o#D7w)C!QM=pz`nNU)eM-fRXOY?bf4O#Cym??$)E- zJZJU2SrPgL{Oyx|CUNv318(Y z__A~GdDVm1pT}qClbv0^e}-oy@cTAA?|(P`W+LsSjW~0Sv}X<=-UwazBJ54+A*}8A z{4@OE!@C1K$!q(Ims#8WH=?PJ_;x4)_jbVlgTL#44v2pF{hBHt_x7~5`=1C%KH|Ft z1KRSb08jdFOY7#zx0`#1okr_k+Yk8s-2!nF{9XT(b(dS)-}d>t39vKY@%g)V1$eUT zzwqROW{U0fw6-tw^<90$@5OifyOWzUchKEc@~l70{w}TUb9-Fd+nQ-@H{)4>={>CN zbU(j;ZJ*HN+WuKHt?j4bF&Fi)w*QF!cdzYxdtBSMG}GF?|H4!sXJ6yfqyqx$dIr{Y z(y3QB(%MezI_zh(?54B*Ur9qxm+{-S{Qd3AJpVZVKg+S4GyH!6bN_w(e;#xHUHpH} z$?tYzzXE5Teq91yg}*-Xb-cq4pR@6s&Z;l*W z7JQ%m74&os_Wu5jbd;-xzf}la(#7-~C*AM8HR63W`9b%c`%hr{XEYz@_2&g{d81!4 z-{%A*Bop_0%kQ|0-V$5QH+1{nahESX;(HFk|BgGi%zZ-lEpmjo@U>@rym$cb$e@v2 zRGcr~;;YHOuaS@Ezmq&GfzYk7t-febzIY?3FWuY7=cm8vtY*}fxN5%FJJ7a4zUL79 zZM)Ogw(h&<^6`YZd&ewai+Vn*na^*aqqCaEE%DX-uAo2-9lWC+9eBf^&&Lz+J~`Y^ zZiE$@Fa8qYcDsD>P26sm;CrK8K5kFQ+~M-cRX%P6c<3aZkTvqVKKcV^>CaPlIB>s= zgYTC)#c@v>$$YW!=jkW)b#LOlyY*P&nqFJT_N6yG=8MIM8+?KLy;V4eu0}eg-GSL2 z44lD?^YO`R@%>u<{@%%fsQ-(T8om$QbZla)RuSExUUQFlqhdC0^u9@9{JcLXww+8v znKUl5`6R`@Hk^#E7E*>^G2e@Kf*hiip%(8BF=iiYiLxBS`;cHKFU2!@9~9vIk|bBA zS8SkJhPB|t8?Z?b=a*pTeh1rjDdGmp@mY)Cr@!m$>Utb9fX|2Ux&1@LIl=#5AL{J- z@@=dYkb$H3!e++zN~EpB=etNdvjXp|gU=X+wc{#$_Cp;$n?z5h6c7nVjGC?;x-BwRGPnv>mo}7ffuMDe&b~g~|4Z3+UUtEq_{P#!o ze6v%&SmLW?D(-}gMlId9`a6jOxt8c-{=WF{j|$cq6HoPg3M?PD^=Iy~)yePS$rryk zHFU=#;3bj-8r$Mir6@wT5& z47KOuX#}k+-h=xf4;*WWNyYAuL+#O2*H0a9|FFfhIcwU7E!yl4Tl8)DxZk0|mEg&8 zX;$%lkW*vul0 zipF;%WIU(R8v`Cc>q4r0Bcz>EOF8v=et%BBIQCQ;ZiGzpy+4P3_geF0$oq5XZsUC1 z03qK9nS?P);xW4JRgzvt^ItX9)b$nK=!&->X!T9|)_W$-jg8dJC7U6T=dysYb zFzXItF9e?+$oeB#Gxs4r`51iZmKmL0aSy|1-r3pJyaw-s#{G{UKDD96bYNJSc6I}v2!<{=0DUzfUwr=*-5Vu8FW@iJ^Lujg#S?*uNcg>v`Ql!$ z{GObAL_7SRc=!!d`Qp|~@7E7`PY&ASD}BkmkD%+m_c0$g=*hK&-22Gy$;n4VNX`qp z_tBSI;F^KAKD4lanuw0Hu6)RKECxkM7cYA2ItOh-E&?(0d=T zK7&fWI|>{bs5SiF$9(MHU;3V$d~tlB#G^h9O;!)xX`C(YB4ac-rxyU+gHDZ1~D!t96Kub+?IfB$=O^7(!WdTT)Ny^s0g zk-+`>IPD2^x;qN33G^rY-p7304=2ATCtoxKsERM?^&w-u;vx zbRK5#C0G+cHG4KuH3Xtd;WtddIssMxIYjkNfGXt@tjyL7P`r*?`18eABizEDFW%7l z$aa;m0cQao!`}t6i6PexeBX`lRrtFe`(Rf5F2na?{Kew$!^7|;@mGkyKKT3nOT;?x zw*`Ms;IHq?u+K$dr(eF8LMKcwk@rhA?xEsW7ZjPM26}S{cKxFfgu`VieTIk4J) z;q&FM54`hei0{OKkdFShj4e@Z8_RFOSXfN4!-tAhWrVsmFft>9Mg}Va_;fwu6aKx= z+nR=>=EOAteuS8y5Q7 zaC@K)S(mh7D#~B$E8iP$3-4~js6eT!FDd1M4>h8}|Mtdw(G`ev^u2@@ZvaTscx*`T zwu-bqy_=8w{p+@hse7E6y<=fzg%_`vp z_C3G8ANK>}cRjwZ!}llfnSs1sJO;hO#-I&Rl0xyFa#fQOYsl_RDnS#}S9$|qq4-L< zvPsx;6tM^0a3Mt}Bcv@Xrgxdiv-t_5)RwD3_elfZ7a4|Az&Ot^&T8aG!l4@|3&jT+ zr*1#`7lxC_IDciFdB~51vzT$lG0sw~r)U2e+OJ<=lNX9bj587Wk#KHjoa-1zK)dV1 za1JoeRg7~8YjPx<0>&{i&JM(O=7!;H0gh9Yo}zJHLb0C+a5oEsVE zZ;Vrl{75)k80TTedG%8~QyqrWn{n=BoF|a4+GcmzlLtVL4CI{Kp99|IQ zXFp{B+YO=PQ_48&80R0C(G3)_bBfO~&J&wpvxeaeWSmDCX9Dsgwa3Favl-|0eR%#U z3`fT}lNe_y@+0Bg&p5*vr}hcNn!<2?#O|$A%w?RrkRJ)BlyQ<7=jOX0i(%uumvLek z$AQh{{ws&hO>}yK4zS@x=1)f z#UFVb-(Z|~{{%h^!@(O6F+MLb&PwF>+@7JhuY>3+8K(%cZx6%CWSk1dNkG18i``{O z9*XB9sN4fjc1!e7u{WpP$+Um}ADPw;+CiNDmk?Str`^i5Tker*t)R7X`tT6i)9}Zf z;!R9@%_p*65ujIwiULz-hfp78>Wn89P0`rDw7c#RElMF(cwwkGmiu}|2=!j3j$!Pt z5TA)OPBQ;@K0)(uz7O&K^`UaMnsH7&LG#}r4!CB#R=LD%$;&~aMGI3F|46_>&Jk;mc<#yNoXYIPXSc*c2&an>T=KZa$TULDf* z8#(Q7OnY!kTw8LqYm*1Cr4J2|Cw`(@%-?Rt&2mw14^T%bU za9#@baU=240>-$R`xb-v$@sd^F*<>rKBqW@aemkt8D}ixq%zLUFJlb}!+Do+;uyz< z{7CH?#5i4xY0k#g;|$N5(Du|Z&d-Z!?$eMT2}kDNZy4vtzu?ST7|tTb`IK?qM1CZk z6FiRpVw{-Q;ZKI)OkkXUGR_Z|k=b_{X9eSIfPX54;bb$;62@78{7CJoW1M>!=f#PL zhpi4BA2Z|pg>fE0ek7blj5CsPUPl~lVHi#;+tt@I&Qj$2dHN!!U$;1z*S_GiG^VY5 zv75G;(`_NN?{Hc)(`G&2O?!ybRUx#SIPH7|&2=*D1!@DWTW@pvsfyq>(EW!_@du`j z_R-SXN&b^l{3?X@5l-9Bv@0jexS61JbNapz+F6|TFQ&a4wnn%N%JT6~&Od~`hTt}p zaM^0k`?@;vT)fV6_GAU|{2RbnSsOa1{TSx~#(4_)k>=FRIMW#CYUt|w4pRh+0sXZl(V`H2jK-W+c+OM6Aqi38qE`!sL zaeiZ8@g6~EhkRPc%I~ivgGkuV(D z|GAZM?z)Vw!y7=sA5O+OkF{xN7>?}!WHHXC$dA;XQH*mX-OuG2DaA~<-szv5or$b9Q%r&`{bJJlii%|4f1j!znu0x)2`mrjk|%JaZ@oG;&z`$@Vklhdb#v|P(+e`4C5Sf6OD@dUd_@dJlA zGKh8vo^YTvC)2*-)8jhOs+l%7g!U-YUc_P66XQ!#LlJii{)k|AUP4z#H&A z!*CKA=dX-&GxGiOFo4siEDat@fz!q??USg}PaDta!$N3VVLLm->zVew3Ei|8IsLj2 z+AlaQjcGSSFZgkrIo%dQ`wpi?GwqdgF69M^k2%CH_7R^%3?;bzYq{(h&a1zSjbvhs zW9(-y!P&*K6`^zZ2;=N$oLiCK^BfKln|WMzF^=)?I71MIGm&vNGtM!{dn6p0|6gF7 zq{rZgRE4%DhjE@{oEGeHM#5Rk?YWn6rq6&M5{6@8oN0`ci~LA9k1)<38K?3VoIMJ| zX@d>!5dXk9(~%zuXCmYDXPnjW!{ftn=mtcGXk(nakxzUv`t06&hlocx#}pJD7$Vkl zni8>u*fE&*;i{MYzRnOan`=4?|FG99p**pQOPypta}8_=s>6~z1n*Cvy1xnXGKb&| zbd=V}w7oaTv<}d& zyqn7!IjLRU-=|#-?!bN?OnwiH-#u*O%zc37EKI6Q{ zI9EhmABKqE@i@G~IH~YIbHZ?LVVr+3&Trt=NbT9pIL|OnG;CJ!Z=wAfz&H;x&i6Qr zP4iHOd7$`#L%b&_PA~*J!jv|XX=fn5-_0lKoHH?mx&v0QL%d~)qUpNjk=rNp|MlFy zidzvE2y5R_M!AOT9Ebc!{d93ZlNe_iVxyKYoHrS#7voHc7&{#zrZCR0?5}=@^Io4l zA39!DjPnEgmG#Jv)SinxA_o~~->ZlVgyG!HIC~gp1@dX!8!+yRIsLUD{}lYqX`7k$ zU$jR0Y{((v9L`xCLhazRs>OoN=7uwIhjB*dxxd{1@`njBO zrZCP?#4S3W4aKmzjHkV z_aD+Id{jYHv}(wu_g4HAL_<$+JH$7c#ts^a9yrA96~}^T#&X(*imyW=bVJ0$JX@ZM zFM?=qVA|&^8nC0;aLLZ`5S;%Z{KqOj2`ZDqW$v%|5M@5>p^VJ^Gb;85mC&dxFZWr=9J6h04wVuTKIA6xd!S9)k ze+r^7AmuiupqBK*uUi}GiBmtq1z5MnW%49E;c~Y)LC@lkKxbeA8ud>U4NrcMo^j^{L6xuWSY zpC7IQ?f_0ThfoTfre@sHh)2rpEypaxBFBj+OLv>|*!yvcrx5da4tp|0t4_`nFTxUc zipN7Jzu>eZ?7z1>7r=Gqi6=Pc(-3NT_kSO7Q*h2Z+-4*Raf+`pmKy$HaEr+Qaf%x_ z?*z{AL|SW1jN#_^$+z?1mn;ol`||L-0^yW1&UWNS!fEDFnael}S0jG;WGD{#KTh#B z#uuz(*|4FDT?f)A4Gm6oQaI{EypJ4o-KD6&PR;%8RLvWek2^avBN3uWSncu zAX{NL8yII3<8=L1<}V9)aVMv*4vH`2iO+Ld71RD9AUj=Ic_Kv*oZ^!q)C)N6;iZZu zy32rgTmbH~oH{Rr@(xa$CF6oGW!WLz`#EP)2=xd~8x7pDmt|TzaHn!=aR_A|rxh@6 zF7yxK&H}BBFerr9&b0lQwj8=G*hfbHc=i)e=RD}9V7Za^|8-pMB4R4s_OpUBPfTP) zDaa4c6UqB`if7=5zvhd#k{-|V?f?H2LM!k8e*@a>@c-m7DZe)l=j{pOU@4EqU)w@h;GA!}>zD{b;e=Ilu+|!8ubysOA072^{N4is*-; z2R!11Ptsn`3-EV56`?vs-v7*IoWDl&hw{W4#_7vAcjRKd3d1pQ8_kT9gZxllS$Q|8qUpxe57^a17kT=NadEoDaSs3`gGo ze2j6TkRJ)>1owLmtMWvJa=(nYJ10px@ue=y6V52(_Bi^ceT{7b3TBKDY08_S1_I6P^25X#0-C zy2kvopPm>oW|}A7!Z?Q*=M(t38DTi@FwVP-vl{u4#%loMY-b!>9^N(hXlQ$C7^jYL zyx`MFI9kS8&N!Moa9>Rr&H~0+#5iC1>>T3v<(z(ZP~-&qo6}}6?fd!i99cnoKc@#r zS)ji;?G~o3^WoB(MIMw>EDXWT;k2PlyS*;lCd$K&om3`+^P8RsmDfZr+ne+1Biasm z;$p_o@;H1o9sCzI4!^)#bc(;T|GgRck;e0O#yQS@{Hli$M+?I_z&M8(rwsX#a0(db z9meU8J`D}S*}^#68An1)H4;uDD#!7189Xk$4ok!hW1AJGzTrgOR>gtmk2V}WTug8l2)@pMC1V{s9&| z)3$Ov#a04Ztb+>H@$H;*EQDG<{rq`_qNy1?Pv-$+_&lIr9zG1AmiPbPX6(~9$nBt2 z{xe3d520PpX&afg75)~rSpnKNIlU%?mOOZ;=w@2cN2>%aMG&0g6Ctz+h|VA`(=Wm?iB^!$KR>>EOB;k0Js8?II{)t!4>3+h#4|5wKjXZ^IDf^uxgiWkKL5X+aq=&- zuFB{CYZ&J)tZ!4paOCs<%NggU%dCI$`TqrsQx0FCPZ*AT{(lzZj75H=xtAqiEaMcx zJ~^@=bbRFV|AmZ`a2fkWKL0<6aUO?VyD|)i_U|$Oj57xLk=jEMFsEo>94quqX$VfP z_&dA?hj@W~##XFpk#OV)*a`L-V^-oFh+#N~80RqK{D8P?Bpf*c_AcWLL|o;g2ZF~Z zSKQ7xvj2baCYj&u$+_aYoW3zAl8`IX`G1GFn(Lg3byL=3x#Ct%cZbl*`~ORsHXXhb z(K>*;ifI>x(9Y$wc}&}vaD8$8T=6l^nI1wtp3^2Fp78|aAyU8J#e6wL7x()xeDgkG z{g!t)^SI7U$oKcf#pnYJrYDLfY&8D~3Uv~Bl>jthD4 z4sjLZlp{aVoL=OfFJ_#Pf5yIRSbOefocWA%CGsQT9A%u_8Ats`*o$E}BN*ov#yJdq z6A9-{#wlQ&f87jwF$^c2aRxBXGUOAFE#x^I$~jkt%!--Q;xLDcFH@(?|KG7MdedLA z_Rb3(%Qo254)Fl{modoq^O(Ts?*@67x#D4_-O03vU~^FWOx(U^&Urb6`W;SN2Ve9* zQ$l&HfX88F2=ykWUe4Hc{et^0pB{KLgxby2_W}FPfsx1iBKKh`_k9?2=hk~d`+hg0 zlyaR($d5E{GXLMeI5$J~%ffI*FwQ{6u^~Saj?Dj7#u<4v{O+*1kazHPjB_ROBjL#W zf0q5boo@KuVK_=|&yVaUE=PVO9GU+c7^ejK<;SpoeFy)>A?{_I-T~dYA5ZQ+R4hOL zs=?FD*FXoB@JPSBMAdW__Q|NbL&teH$&_BoL7Uq?zQ%H&UrA% z!_CF}3#m1C;jG1bSj&R?9`uZMuGr3FG@09c5xV~MJ45HRj8R5#oejwM^Qe3R;Kq;| z-6Q)_cY|P|-HRzheykhace(->+y! zndTnK$o&6$#p$3jA90y26|E@K+C!P4Tu)8Kk3nU&a~XF<6UsF8P^K@JDX%yhRAwcY zSy0ivHj?**`LCcmnB+b0T-<*^Y11nX0Qo=<$Rdx;`t`F~A0-GJ<`r=IIsQT`apJk~=QJJ++MobE*Qmsy1}5Ait$@(~GP ze&fAC`Q+WqZX~{-eTiJL4!@^0&JLnjfRu@ivry-(9_pm%*YHNV?b~1D?Vxuw{u%Ut z?t%V5i~FsKLDa71Qa&YNLF=YA+us@+lsB}wiO)fh7dp1Ne%Gj=yaCPgc2TP-(v~Y0 z<21prpxi#qPwyzkZ@S4NNBrz(>D=^prXr5C0rGw$KBpjl^EPxD#oumH-o!Ti@|K~y zaswDS;)S2B{3h$pb0hbt*GT7z-VyfXqg=8R`_m}f1>bz;wYY;5-;411%uKw03~^d5 ze*X=hwS#dk0`)zF&r+=48}WS*KC=<4S%B{re13s-$A#~&;`2;4&S&8JL45uZzQ~E$ zD&ZP@mcYk<6W`PEIcqZRe#7@-d=9?`cg$md;Jyb?4r$}?d2S@$kx`}+zQ*V8*vC{O zPF*qxcYvbZ(OGzR8vg3vP`6HY%Qx-_mFabWvbEy`58 zE6deSEa+@{JQ=8u3r!DZxULhoU(9eR#QQENGSm%rSF+2VBBXjx$~Q-S@daUB+ag4t ztY6|9R`ST~D%Zl|ui7o;!a$)+D4XS;*^s?mQ3>=(nXWW(lk|t-nXWt_JXD+}z9nV4 zoQ#(yzJc#!TmxJqLG_9hb>?Y(rfaw>T|C%Tf=`8*)-lW#b*4-=+~q)I_)l0*$-wKBCgO7dzJ1tXJYyG9Hc!U)=cO`? zprWP>V>lAuM&k4M4#Dn7ez!%i=$e#U&D3JFAob$B9q=YIXH^?;1}3&FwrqK!a?f9V z_ub`)<4PBgVY!dDx57RRYar74G3lC{b*)r{FH0R2rukcLqlO(T+9k zYGF-#szngnh3D{{=2c;z`s+VpooJc@C_>k$>=jtiN%1@b!aPo0_g)#tn-qj!U1tDj%{ zi3fe9QbJ0t@|C)QODRz5r^eusRqlzU88wQKpE;*~pQaKP;ZGqh+KoDP(Oha=CYR0? z$8}=dzq@6lqW;=bmS?v8_SmC|E`v+qdbA|!xA=v9&_kO0PPfCg zzeOJ_i2XYqJZ9jDG(mj7bKz_uLl8eJ2OldM&M1Tjyb9r(&%bI>KM{4N-WYXepg!u% zJcE#~NXyv0atg)Q~bkT-P}f5+H~#cIv!ZAqC$Z12gtGQgXz^ z)`hbjd5T=e4ND8Z``ptMbtY5SXRGdvMWa4r5j1D)2H}idp*dsGYTTAgs*&CRq`-}m z+81!+{95HIMV8L3+uf@&xbC(VE~gCFc(sGR{XW z$M+E>_&pWB@rmyT4Fk?cZ%IEN{mHTR__eCKW9{nlwDZxe%Cut`p^3oxdk5h;xNn1f z*twlM%M`h@&PNXzen!wct}t}XUpMD`w87jp@B6az(IZS<_wSnlN!E4EuV^ou=hX{e z9n!9${wnJn$;Z%_p|f>0U$w`(EyWttw%MyxYS9MA00Ua1JAZI_#vTLYK1Y0{rC0US zie27{t8V(e{FRlPFy8kL7N6_v^ymYUqu7HxTQS%FZnHe2s8{a+|3nl2jA)Ao@3{V= z!gZYUZl*uK?);{HuIrv(RqB_(2kKaj>klQmtzWfgl-Gbm9-6~_1)ogDU6_ztYnC|e zqIG++E7Ntg*oIMcBo7uxb$->NeGPY!&7O?Zmd-(=K0SjA0mW!#rt1;tm}I1W*SWu4 zSFW&wo0j38Lib45!Z`x;PN6GH9CeYTrx4orYVniKk5HE8j7kfsSBv{P+h=RH>M-WX zXo0q#YW^1_CfP-4NLhBZ_)4c5H@V5_bT)agsO-es)cW_`V}Wwr*CHq@dZXnb~if4N;HcO-(3hoQv#&~}2|;Ja~mu=ux*ZrS`#VC*$+)7IjW zN>@Hc+^?5!cQ2d+Obb>XjY6&cy37T%P7wMT)BkIRiU$Zkbw0 zBbVWN4C9`Kv=q#Za(4zKa-0itdBZ6|3H zd4vtSuNE(MXt$G2y;{^DM;_zSj(prxmn{xBuLeI@zzH|wU5D-+19waUw`MnEg~~BD zDUu7Q7s-=d56v0pQdX*~v&3V)ee2)SjFzChzW^uaklK(pD`ddC7`8 zlVKcIBBVYt2P?)Lp^R3FS2G|EJq{N)l(ozrC8_ow+rQ2 z;v*eoZ=|@UfG)jbY9U!?ektnP(LOtN8_j2bv^&;K(h?8){=PYm9eK5A>d>$hQMx?C zf048yQe@a<$1IPRW`)e1U=N?Wc+B1VQ&d97ldxGQ|KH{5rpw6F$qU`{{o ziDBCfbA;4|#fyA1Glyp;12glEB+m?K5S^meCh&;Hx(ysIejsIR?GG#KYVi>%gZ10D z7f90VkhDTYHcQ%rQtlt;v835u{+YRpEWTPhW?%}egR8}v63w1G2k_B|h5Xsnt_Qo+kbjc0l^3)uWy4*A#m7$j zrL5N$k}|_)W#t&uKLsW3mxO-uj6Hl|PKf@yRN4w!24J4Hj}j8~pz$Yj^HE z)-LP?H}4h1w{~@Z|9Mwnj*T_2(MFaexRzmkatm12>DGrR=(NhVp>8@2A66}^Hjkr+IZ64`Tx~89x>ZL1~ zc0M}E*;TJ_;@5ADPZmZs=)HnM=M|J0y<^%H*DHp`FI>{9Rw?oQ_eMg^WShW=T25aq z%cI(kTy%hUZc7;~Zu~#hlz^HvzM6FKB4|BM2LA4gvd(z^d>K6P!Q%4swjleNtbpDD z+i_I$*oi8^@h8~OZ`^~jt1k-n@_+mNu;uj{S6qo=y9wioH38$PXMbQ)M_Fzb`$ril zvzRUQe&Q|A4OHLQ^ZKy*c!hh5*3$T9CF*LJ5a1)@t3h*C!E=_ybJkD%4tVmM^%H;T zkmoF2j63hZoWXAHh&toYmHXyQz(`sGb0!KF|C|{tG-m?}yF{8Z!~bT^9GJ6mjHMH` zyxGx!IqN5SIvlQYp0m%|{x3BJ&zS{tM)f2Ee=+oYImYhw_A=Hh_3c?umv%$FC zzYgQ~?5*;g^%G}w1kYL3C38kTT)OyRdjsZ-c!WH<5goLKr;Bsj!8fRPVS7wieX%|- zYcSsacMIz3gFl~LXuJSFF{va9KL5hv7FQy1LYW8r@eur=u5+>QjQhiLE5i5fco#JN z>N@vI*G!DR>?uYe77#t)p|Bbk1$wCbS=iG$UL|b7pTEv+zbPM8yX>eHQl(#5ysNCc z-U_bw@Wt+W=XcHX)q7vp-7fN0Ghv}n?GAi*;FBz;mpe7k1mu?w7FF#V3w3*-F>@<| zyh6pEjG`#i3~La+7Ut*le6%SRe}eeoEs$xrAebI)^zBX8zc9zjv zuhhef5(@E6Kno0LK?%3uUT%Rdqy_#F$T^)YUf+fH3Zo4sUpwf17?4-HzyOzx8^QJS7eM z294{wlGv@V{d5b9DJD}5xv0Y5Qg}&S=T2Odx!?wPwdF=UbCqIEod_NJ9!Gs3M_8Zs zNW01=vUW`scS*hBwOUi20nHoI&ay1DOQC}gER2Ougw?RV>)eHlTG%90Azk)lc&q~) zu3`8-3=)X4w zy#QmK$z!cNMAq^^^u}T615HrwDy1jM&?~ZdQpG<>rI3EPU*qt7xbOQP5lPF?m!fCG z(X$fi%`}IL4YT(L*EQt3#z;MP_ZYpwKzY&=RzsoZ;d~n4E~$+UqZ>< zh<+?Aj^Wx!24f(DY2ts-dk4lS3f?|x00+J~FizyDoMW$Mkod}lm=M|P)`M@h-GX{z z@z)(+u_tGVeOZ@MbY+m}-ra!M3*A?5DKR4Yvaqcj<#>M7_sQ-+-AYN8dgftrAKX;T$zS33m%{<9)K;AN-Ukisv0W=(G5OeODPY znO02goQSw!|7v4^&((VdFye%^GFP1VT9=SR{XtVA#1RYt9u8qm3yK9#D`uVyhCt6+b8#&rtzPZ6Iq zpiRHr^55FE<-fM;sF&K67t}6ypk3F5wCk+oZWI0U18|K;?8<^VUvWdOnv6Flz zb~*|h0(RGW%(J~Dd4y%#-k(by@KK5faf~Xq417B$wk)~Ik>WyJD$_OXd=#x{BWP8F zowIy4c>3TR9dS0LFPHNUj>rIq_W_6Z7V{C4KWLZ*{x1gi(>k0Sv<@rxqy*Oe8@m^n~aO>1)T|H!j{Qt8Ha4u;SWFLP% zzJ2ahv~OSu*@b9f`NHC1EPGjQ8YSq&0ch8pL9W>@jNP0}*BvbV`)c3{Lt*tgBX7*qTmV+RyqKyUc^f<7IbL+xLV_9KP}EfYM#+2Ti1usx^TlO2fp zJd3{EfUwmYabb*_GMCd?AR}{ zqgtOuy*K*mz7}!rYfq`4d9}XW;Q%d#qmyENdj z3>wJ+g3N6Oj3(k#7>^MpelDCtc>+e0^z7Hz39*U4U!3j22pM$H(0;3IhCCkwW`HM0 zxrjT{TvT!xdP=1ckMiM^0B5Z<8*_o^>4+TA?uRxfE6)L003MABz8}Oa+r+&WsV36= z6l*O3ZV7707B61N3h{hlVYjKD@!L6jTZBDY?1QN>HW?#SLZVo>%eN->YHYVQeL8zY z+3423IgRj08{4(+;#Sr8#&$#Ld%wmGZfs9#y64yb6gIZUm78aOT(-AGS2ViyYxRe} zR>c*!4!eJu-r2fz&R<$@*P@npN4E}D2xoN44}LwQK`Gbb=1le87ERWN)6kY)B5MWA zO!Siar7m5W;*7~CxEos(rHD?MYMV!yEZ#3mP;S^*Sbd{lzr1h4FGq1}VRo!nrJry{ z&{FEJllM z<5e4OJtG(?Z*=Q7#mF5=xmK@2SBl6Q(uEc(GtAlQ$h3I{f8D|vuA5So)efuDjg~5i z`V&fb79w3yQ*IU9BWWUjZm}9s;opybfd*M zYNcv)>yg63)}rhYMX_F^5c(@Xcz3GfA5;V_m^JEQYWOlj>G0u6MK+O+C zlG2e-S?fw#u})GwE2PG(oGTQ!etoad&+@|el2X0DeN>aRD!wv$mBp(Q%BuBCF7Ha+vA(|x0f`TCFAYuCEdF9lKG98nja*c>pi)o4wt&`<5L_S>3p(nnW>-L)-}cAU;_^Oz;=4Y04%*GigKf0Q)IYb8^z z$BH_Xvz>*g#fE%>;Y;7ncPBYi;wVK^g zo-LB$wNj_C=CowUi*k?kHaZP8KvU|f;=L+E{OZw=m%AaSjfI9Pa1NxwnQ3%`bMy%{ zLTa4nv}B$gyJoGVtoTV%#;ujqgO*vxdCjbitX`w)CrPaw<24wMwf8GeT#a@q@V;Hl zZMsnC)tisC7rSjWn$RbjIvq{h>?KKoqDc&x{HO)6>;a)X=7HFVk~tYnvKz|N2$$9=*1D3iLCwY>UCp@10CxmZJZ!!vrV-YkB}Z^1x1nB zGub)x1&jBP!{)~C!u%?5_>CJRm7-NrB}UaIQfd)2g6=)|+y5E4zrC&AD4Bi$#Vu25 zZqzQXS)1Sn^$fxOlB8L2T+(DhlKaGXRc7R?9O!pqHAX}=R*3QH6^WGz)nmM7MSSHv zr^Q|DMO4FW^rZJosuPke-XjicZGsyd?V)R@^_u26GN78{fuMnGu->z zo84O_ow?jrjBykCwMx1fQ*0$pLv_@ed!2E0cQ}7Hxmt(iy)5a+*V>|>^{9@C&cs@i zdyMyUC-m78n%%@IFHmV-Nk_bEk~KuLRgd+2)+OD36acjlQ=xeNAvu>aj9@rOS#w>T9XL#=1#PUF~#dmCaZMUFJ;m7^;XH!8yaXvGX0B+UtYzdgaL(4)^92U@GD zMvg{Zm*_QW$ABj%I*Yv;m2J%en|94?C&}4ljCidr(WeopZ#K;9=cMb*qg!vuCXKGE z`UKcR&1421It;jIWd-y zoLFcj!z5_6B#*xKM)w4?R0(~cG+AqKbPN)y77!xwGkRYxe2v6ZIvcy1VjDzl0jvtrWCR^;wu%Bk~BiB z!&(HJ%?h50!#WtVBB}OAq)v1uxQDfVcb~%qr@$cD55~i6)Q5 zYcv@=SbOVBohJ8q*aETDw|KSC?gsZd$uQF^8OASnt&?;rQ?7JYmF15nOLoI|0t>2 zlAxiKS|x0?CP_IHmTuuXo1$_K^dDv;EiP5CZ-TxsN~&Vmh?VHIWs{_yzRaemBkc!0 zuTrj#_v+R6!UiaHLh~urwL;nzHr48B&;({!OeR=8InV@?oa8kS&*fI?s!P3%E}u5Y za<(3J=wKVTpbKEzt%~QngOCOtocAO2Fj)oVwqA?`O_@NJ0cn6iTgfUI;nkp} zc^K_Dt*&+=TH8RabqvAE@f~R{C2Y{FZd)Lx2G&64GV36$$SEYl&Jw4kItDfmmAcMt z_GDH@k&Ka)W9^pHv)m?6c4c%ReK6vpYU~{j-GnoK`1WUDbWq9f7Bo9jJyaml2zdiBa^*>lm2 z@p&CDfqTeO0iAN96W&FvrOxPn3EDugljkwV3B8m+2&W|zB+T&s3CZBl+sc5Pt|@^X zXY-m2@H*7T+B4i!AWv~P)mFT>6zgq~SFPJDX>y=nQlL+EfOBI_lBNjXhY9I=+Z?A0 z<&oO2H*9f>TkpBut5BI&lwyuQFM^a|P0^3<_A{d4XGFu#z$&1E<+B33>M&N5rqow5 zmGdaCT(BnA3#le}Qf<%*#>xb*(rB$22TL?z4Qezct!|QpwnUGR8suxF`)zWqKs-gh z2DAlwRkC&r*3)=Mh8ezmI(#T07t&)CQWWqr;yf=(!uMo*+vwX3A6v&lThM6AC_;9; z*Nl}7(yyIJR$*-+W^#(nw8B_B(y6aDaxXxOKFGd?&gX0Na>KXvkgxIe!-*bP{PFN5 ziV{3A&=~lY77N)L=hc|vYcT?9Yc+D;7wlUk#o`|%g*~Yn-?sP0%1LcuiAS%Hql~FW zq(w8?tJfWCALWKr!HY5pF<24QhRu?KXA9m&@r#oFd+O1Tl0G)HR|)75no2!s751lMDidntUXtIaM-O39Rgz{GMCH!IE){rQ zh+7Z4Ot8bUF~wI;CtpDWJ3Du~q%Hhj(%Rv(-(3a2!%TjMHXhL$c=TF~Iy6iY{0^1b z>TzLQgfvlj0jj=9!NePmxSOv_k& zTBcv6xw_vLS<6HRv`iYfG`-Rk&?bH@b2TI_qtdT?`nv~hBHi-xg<~y)mV>wSnYCGK zMz@wIZ7bGGD!hUHv--rUcjhHG6 z>zQLMIknMMw?S7s!LerO8H{AI(HG6okAdHUXok@zG4t3j`#~})V``_^EGwdY5e*YO zAhTzKWXwfOz`X&!4#hO|u`#e_H%YqpZ@12IZjp2e)Nc3-4)_t}rzK;mtXp`V)G=#X zC4(C4uK^MSeG^@ogw@PInnlnC0vk2eK~(_HX>)E3$I7jA{FiCv8{rbG`cyx8i2wlNDSki~sKh=qTb`LPu`(pQ?S6O@8YtW!jh?@w4* z-zlm=p4LdGvDy^SGDe@4G5EBM-W?Awog*5Hx+5B`&~dRI@>~$nC`3dQVs(q04)IRVDs5g_ClLp&lZ5oexG6|a{!>D_m`np2c)U~$w6%?T{dTaq(>(c&E zB#Gk~i{Y`PV%%p6_A1+*PRxdOGvXGgNsl?nBk$O(5ZJCKI|FN+8a8Zv0yGL%7|dJ} zt@OqOSS`>g)y1$9Ig*iw_RWxO7Jc0`TB#AspqLWHGEA&b$U>~OkyjCim=bi7+USd7 ze8GJrpC#O4G1tOpF+evI!CTQsgX>19EZ(mRkup39@v`Aq363r#pE7a9{`T?Z(Ummj z&CqR@8qgFHCnb`-16u$*a(k-Fw3^T?EAYSAVWSA0(`$xaq_{}4r2T+;Y=wVkygLpu z8M9I?8KEb%70?r}MmjG161|AU zYVOq-6RYFa6ob2jelaz$Lf(H#Qo!<4s9=ZnwX7jO4?LL)4>JzdhYm4HEk*|`8ubNS zYJlc5f{SyY%un>~S)&SQy+~Y}ifl6b5cA2S%6@|4uwgr*x?UH6{m5n@@7D=P(gV{&| zcL&%R!7@UG zx*uAb*82^t9!O=xQ4?jsCi}qrdK|M85_Vcxc zPQm_zq)vZXGUl{OM#mP(IObUU#QGVwgf$d*ft{ehI%>EbvQGR)kq{Sl6t_#JJc@51 zx;qzAQV8jw-Hz$?R*J6vggp+#o0N!BX`?*RRWGxwmpDsU@`dzZsh4HGTi!|9_0=Tl z&=@bua*q`ykL+8L`S_ZcYQ)NPMzlk1veaS4_#tk!U>DLbI+^Pvb$>)MKWMZ%V1o%M z&_c?-UIW?=YZ~oNpa>~j<}?!63xKScX42lxTG+wRkjY6L6(z9YDM%&FIZu#>V!mS zORX-!Q{>e^E2|N^5hOKhfF@Z3%#hZV~k**LQ>9gMrFbV$#jQTGTAr4 z!jRVxl73hKYV2bev5#R$sEgx$jCc=LIjsHY8}DL}{L?Om(2w>nC?ZD|myY)^XyuPX z97oSP82j5DO{59Nc)#vZ2WaC+2WT@xbbvzE0ST3U9boh8fcdZBD{krXi7mP zul}XZmn8jhy_B3atlK``!x{3{{<@$g^k9ai|Q@GKzzKsD*goR&3F z?xfY@eDOgSY=QI?cz}6m!Cvy4jFNIXzTY9Fm2-QLhDfzZ6}=(~vAp8FMNZQS#36(c zh`4@ZLM&lpuol4n#LRF_5Wey!)DBk}-Le+Ijt4XsqGkH{x?yNjY&Gv-{Dg?!VvK|x zGnykL%Mr7w&fc&++Ym3CgtG>iFQsKQ{9KcjWJQ-mJEM6UBvsQ-=tUydedTog^6hT& zx*rQa2fU~kFk;|2+S??nnb!Ttl5Y!<{E78KDoK7UNj|Oqi6r4M@C9i7r+!%LC<=+x zv;wOdA_$C|pMNq&p)1xl}pyESbxv5Z{YFn6)gLDT`fFzH%gm>Er9PXZvpr%e;s6jE&n65PM5^M@-HFF{{gc6 zlU5|YAlv=4w;hmtZ8phtp#`hAauoC_%l;^MW%ol%q?>8|2mN~qByUGulwzPL z;WKFVAtH)X0A@KB#JgP65iu~lj<{%UGop~2AoF@#DKtZ~q*MNX?7a(g9OaeoTUGsV zbycg>4?VgiS(dP@7($3_Y>z{jq+7B&e#H^C;h0A<@-s3p#E{2flB|gcBnwC;w_CEc zy7gK%uf-!F1~OTB&5Z$*H8A6hZ5$3SXJo*{l6h8ixP{e)%xt`0H;Qfmq!BIxSVPs9g7ra}N%f=0#-M>F38BFn-E#)=i`@O?! z4rRkRvqxb8U#XP!AHch>Vl8i|0CnVbV}zYMKD>xguFiorli$%^0cTwGYC)e{C5WT) z|M5GON29RD;lCCvKv2SNFf2w6Hf6~|flzqKAZShZ7K}$3ho~R>!fUW)@&7sE2{Ud% z<9b#-`@k+i{3HVCiJ#YFawlXhWQ8P4_@d-w!@syC8`cNMh4{d`IOm z1WPnhp5x!h7qLXUWk4ba7f(!p8w#Qr>Wyrx+*;LBt+Gxf3^6=e)W^7ncMnM(@Q49}p9Q;b5iBu3JwhQjds`5D*!550CBH3U! zU%{Gs7d%n0#9FS=#S)#YU{r!7PR&_pO_Tn@M8+Z+ELsbjtnl78!D^)DCMbC|pH;LS zcF$3AsG#DF-z``(BkVg>{j1qUq63vfg1+5TFm_@&UU`|>cTd6hScs9GtN{|wKQIs* z5)@>O%DT%8<__@!ydYotJXUN$U!?LBMI_O829j8-kVKzC62*4N)3_lSWY2Z871oq& zg_Y6HagqE$5lJ-Jcg1!*e`AI0VAlNwt?~%b0%%-@*K?v+FS5oZq|jTPIqmA=pp8=zZq^X%AQzUmpZ4~R9+Nj-fS71zsK%An)Cm)Qs zzhbOncaf1MU%`yfBKS09yqS-_PdzrwNVAn4NDF=z_Siv*GrtH=lUm_aieB@Ki&3KvkF1+V|sbE$~Hra5l zB*z!;uau0k;09(@ju;WoO6~?*ngH8ZI~y4eqQamT#L6JI#x4-mdA1-6SbIZ@$JsBb z&~hT#OBKrS>vp+cu60HGSYrN4P$hk})O3WiMnP|Nh(|TMTq+!rtyE)_<-ivgsfq{5 zjV@u1`D~84b-?nePaRkJfgs*KaUpwWbCe3QCDcF=cZMQc%X-?zUbq2dYa6S7eN~U( zl6$}f_Yi^K77u3HID@9is)=W@8uOZGT|srDZwE(BGJ#?K2FWI0<7B8A{L%J;-cide zQK$mf0wUon%dr!3F7Xn?TVUnxT!V)oI|#U*`2aI4n9*iBAmw)#?6t2H>?rjZ9ZTY6 zLu;gh*Yl))yQm9?n=GR>o>a>JidJ`Pv;I7TQeKTmwi>RB}#SlP-RS)5LXC z*A|#htdV}TV3VWgJ-k!alvl<%PQ4qR5qtGwqCClW#8mE6q9T(yDlxlvzGOeKCO5g+ z38}pDU{S^QP~$>GEY`#U_pDOZ#H5nI^*}(A$bdRiJdiT-6M{T)9iCQd4r~?u22>8T zRI6Bue?cWOR(c&f9tft~nN^)52kNU(c?mLVS5;EWr<0Y?sciGtYv;K3SH`<^cam2C z69o_Vi3g%F+VcceiVbP!$cVqUEg>t+niE@M>06Rk5x=*310axQE--;WmaclT!cwxH z5f_8}8|8&a6w(OpMvM{Z;dK-1+p3m)ZpoH-zL4Vm#~&yd9j{>nR#Ll_SQCC1ucUIgl-rd$MyV2;mc~QWSz}B6WMDu(@O1qf zZi`oD*2|g^yG3SPoA*G$>?H2hi6hq}uq39uuuox?vHjH8 zuaojEu5yKBEUpyaDgkm;=?oCDbp(gP>@~LdE$wBw1b7aw+RC$GtcsQ6o4$a&w56UmG0U}vcu%a? zSFrz?Z0Mmo3PDxp?Pf!zo1hLfdAo1g6zKL%QiW~`3YbW{8HDHk{6S`nAl~ZIw57|_D3!V{(5F<1^8M{F$ z**s)JFT?wsS@K($ZQUE1LLRenkg7kYBFFFgs|M~W7c%) zO=dEwfHbUJe4u7r_pZVF;rc*89V!^4!rSiI9^e6D6^T*2Bil< ztn7M)#|KpmFZRdHg^CZ;mJDU>iQHkS&aC9Ygz#XZuI0J0GW$s|Ev*V4h3F@m;dLZT zR3O*1PUe@Fcbcjt7rK5N??(ACzpNu#U-qGE1;7{@lYPe9ygS-p=%UgP^Ekq-G~lz4!vSDx*p+ zgxB&J&Kw{f!UN{_ECYR%Ro|SA@p*No}XB7CYJyexN*k^AW!n1Vx^RMZ}$`mfR`+NypAT zqh*V!k@PMad-jWDwYPzgc*&luYo6I12e0_%I@T)RQr^p9vPGXxNglyh@T^~for>WB zng29eFn_{RygZf?zlE9_5B^D7{HU@V`^0>$Im}ZN-$ix~JUCnR-cZ4coyI#f+Jl*3 z!MGHgKrSKxx)-E(ieIH}Pp}yB6BT7cE8}H7S5m=eW1%%qkl5GCh;I-eD%w%dAI482 zbEeZVjX!FAK1u&bGuPmKjXdGKg}~tvxbpo5#a106fntYUkHgUpHTMHGhW?8&>T1ZfZ) z1`I~Cik8GF;;G`rtVx;!0pjMT)tohp5!|%m_4~;^B(+GEe8g8iHI^XTf#0H#ln8jl zy<9U$y4Vu`YK4ZVS>~(Gju-U9TxHu)u2fkRDzD_3-=Owkj?Ro^o3SQtm&i(1XB(_ooC4_6Neb$bhQZc~4v7t#Ys>-p=4~U~s~ksH}-t6nj{FmtPC2w1WRq z;=5T?)4Mi>^=Ru0zxKNW_$_-z&j~ca=v3EObDx1VXqdlewEmy=jMjWdKfW6lpzqpv zFW)&h+T3n69L#UuHE_fT9vnS)CjLhzbl*)!!XZI*OYzhSPheYRx|~?*Sz@V*9*L#S zCu?%mb}}bBS#y`%3!+O#LoiUWN1kRPOmA;I+n!npQp(CN=xgsUc>j_2Eyk}?JBJG3 z+v#H&WnuF_CoW zu8;kb&M3VTkD!8;Jpb3J+v1(c>S5VeB?mK(Ehf5Rw~;tnY*SOZOx3%9$C+f~EbP<# zs=<56hJbkLfr23w>njuS`wGF!CRedwq~J9wx6_s^>y-{RH?K44<+!MBP|f>RYKwv@ zrn1h6sjOm75xcZQJ4bxB(Lyl79odl_*-Umqo{GORTQNku_zRGMTgW-K?I`$IpmeZ_ zcT)7fE&Oj^l=1GyvRJWfHU4%GE7h!1h3;S(Cf9JMVEk46tmcccOp`v2X8{#bMpT|G z7JNJB#<#Qe6|zI%ak|-_GrQPIRhOkG3vLQkk1iN5*`BX}Ug%^#E5mpuJbmJjis5U? zq{?%WnSzJYo?w3g_q_Qi{b%e47wi?wq;~i4fUIkf?nq!*_5tb2Ba7lx4-x}oL!u2; zc!b(Fv_^wk59-vpGq29M7MH58OsT%28HM`-1Ednu1Us*IKKx^{Vwnse0KKQr1Y=3d0!b@*=@lh};hz1%mrn;-#LCQF|-tm#vx9-WOyFWlB>DCdrj^A`KVl4

{(o^^6}73{OI)!EqUPb{{=LXfi- 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 Hf=$GOu1a}_rqrR51d}42<_#hg_YAO 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 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/android-arm/sodium-native.node b/node_modules/sodium-native/prebuilds/android-arm/sodium-native.node new file mode 100644 index 0000000000000000000000000000000000000000..9964d995737bafd4a47a2f05195ef77758229001 GIT binary patch literal 467856 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⪼!2PJy<5hF&dTnZ=oUnMGKH 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 z

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

%FLtft1(I(z_gn9b+# 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 `pZAR9LMS5BhdH%1z>J+H=d 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

VqQhP~^kc1UcY>U4P!(fs`&CC8inAo){C#pT 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 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/android-arm64/sodium-native.node b/node_modules/sodium-native/prebuilds/android-arm64/sodium-native.node new file mode 100644 index 0000000000000000000000000000000000000000..815bf17c7ca440bc5dd14a6b51e2a1e7dcc46d97 GIT binary patch literal 470352 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 OW1;`*x0G;%{{H}j-wx*h literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/android-ia32/sodium-native.bare b/node_modules/sodium-native/prebuilds/android-ia32/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..3725606ccc1a7689f1e8edbab3f85c45bab5128e GIT binary patch literal 729712 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%0AdT2iT&6{zJQwIW-s%vP(i)#_}uCSNTn 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

5K%jgRU?(^z5m3u^zP6)O_CZE8Zrd~s^0{zU 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

J~gQ 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

$}oBif;!`hQ3{j6!68@jp3g595FSDv1AC zVGF1u|H*}21i?YU%YSq)yO(6UHzvENb#naAk6#Jnf4qush>5stc9+N8WrJOsShH_x ze!#0`lW`mGHl?Ef-~=(jeI+(q0_5SO$-8%XX-ILhd~Hjvzva@5gpZ6LWT?I@(* z+CXwwz2c3u0)21sA3tO9Mk@z^c1iKu_A3nO*_ad=+*-8g=0c7h|GZm=Cf?|g*N6Gc zmY+#)@W7v2$k7;&81sLl3lTWF5b?n!3_0R(3w|m5XExe{5F?BKnQhTV768O!B7izA z0*HIoRXZ&Ni2HO9g>?1BFbe4(-nPeCb+0Mc_MTzxEEegN&k16Sk4lHY{_Lv&OH3tp zR5J!%i!AOCK)hP{kF%ErL$3y-u)2@Q26dHiP3VddT#oG;{(x8i~>Dp!cj{TOC_j5kW_wYclpYxs% zi3i@XpHuNXO;OkuUML!l`SWZKdxAa}&(Iz47WL;Oi%)+C zk=v0_S3*S)Tqo@hPP@vruBBbR4qg9+A3BFw^wel#P&KBG31;F#TEnB=Zs}5MXt83!prJ5!_r`hqxe`Jr# z`84@J!$h6UuFjPku+YcLp1sRz)_&zg7ZDiGxe-O?FLpv7M9O*)GB> zxn{Z+ROotlSCd^o)U{x`e&5s8WY^oe7Lc5wG5MLUCcDn*LcQ{PaTj5kTtD2k;09gq z?P{{?A9pRdQNNdTHQDteT?=OD_tLH=yViFtV6!^80lEn1qqN!TWUmTvwA_Ki;)qmVSS}tI4jP z=vr{Iet)5>iBvSP2O40Px@_^)JB=SEQe!-t6vMBXI-cg?Zb}q?&PLM7BKTY6=gF`9 zzm}hie4dmwbK#qPtkem5|9NiMg%_jpnN(OS%7|7B41G%{)kfT2c_=mUY=d^(V$xH+Khe^r1j*?g`}Rwm@z^6Ufn=KyDTXa`fRqZte}_=#K-r zSrW+6M*_K78pu(7AUDebIr?ZIH}?f{G&hi&&jxbzu|RJAG?1ftf!r()_|CanzP@?$6z1PammeQgXAF`S0|VM z#J{inc)kXY@<_b0FIWbK>@_tzsh(W_@h?x#2XW84ls0=}y#9Zt{J&NIWPQPKWaBO2 z+#P&Mk6ZJ1R8JakDUi=be~cmG-4eq%S(YcD<&qqQ2deT}_RHfpjPY5^BQL+@VNtat zmlsCMGjHmPtB(|jx4vpy*>AYQTlN|r!8Fj?+AhHKkv-4CbsT z$O12%tbXJ*PuWji@vuc&h^do_i|N+ELWp93E&hCCa>(5hg}gDTKG6@-g2nS+i+5g) z=au}27;E`EWY_j>WP=1(cUuzNk_)$5xB1VNdtbl*_aORfWB&QFe%kEfvA1yv&;C`W zVxAtK`xOvp*>3FY3LdTG(fHYG9o^9l-O)$rN*k~4w_ji9*Sbtk{?2kbx{-S5(b~+_ z%yU?tX@1Hwt<%-*%y$u+vR<*gRXl$aPQc_(h1*(g@(;?io%7SH!tF5@(vlV0>{g%u z3%OF~a28y7{+@DBmB6JLV~5OW`A@7Y8^z2ts@-O1+|7~yR0c9%B?`rAyq0zHHri@; z9}A7p{oKpIp7IYp(kEdI~#I&H%QvTiD8SaBJUV|vX?b=qCVEJFfSpne%R(qL58G+phxd3}fV6{v)w;$}2#1!o{;y9Qa2oSAX z5>N0J5U8KvGnf@o7eK^~=oG{HM5*A4Op7SQxK;Ebn394Z$Id*-Wz<*Ir}g6~fe?=C zDQ*DA`b7PuH!N$SXrCi`6#*TTUgbTt1NOBfekcT8l^rDqSGnanaPtFj-;lSeH0i7`{d)nIa9{+&DL?_d}hl!%`;Q|Z0N}9H~Kg;!itL; z!&FYJcIOq!Gp3U|0hLrUn@byarzDj!j zxL@)0tHR3G%047XY90M6YXCa4iwAtFAmW$qwVYR}dv+SWrI49XmdT~9DXB!t|4pxQ zH-*nj&tw;0VTaeGMGXIPs%tnBkx2E0sd_EGRK%HOqd9o+4j7koe+Lk$H#ynkzVn;s zd3sNkj!HKY4hm+*_F=(H-1>u4*)W=}KTqZ5!rq3z zWsN9NQ2!NrhZCyG00Nv38MPK!rB6^%p*=b~bGRVY9)j{37RA>#6$>fV!@qnxwJbc^ zup6?Kh8%Xh*3wI=2Mj2aaXS`r$#C9wcV`m|zf3+x4e~PgAOr5}?Jsxznb{LC|DX~B zvmY%@_JnW-lKRz&++&vp>l~(_C7N7_=~W&@lccn1B|nau{%H5!MYLV)9QTozCp4AaYSb>QutT*f0Cjlm0hrQt!r6FUw|C?LCSO ztsqpL7?qf(U$R(M#woi0?o0x=rT%91NQI{dv(sKMEb@eJ& zJ?LrsZRzYe`xdQ`z)!*=dX6qNW%z7e){UBj(;vFem^{ zxPVl9m~P3XtL!c8Z1|CpzWyFRS9yXna^b{4p=reHsc;o4g7%UOU6W$Kc_?f+Wa=Tp zkuvy>UI-WF8r1D^>^I3HS~Rg{sOwvskPNmrK7c_Kq@~o0b7P>5(hu@Qs0^+>RHL-2 z27E4kjEs;lo~ER))c9;xsQ>-U;;C&lBc_IME6|o|lk=y_zGoQ97EIu{_|4j{5?}gp z^HTbi0SBc&|Ef*$+9uBl!AORfr;Pm{$4~<6(~A@7mF0deqrUG3vJiucV0M+sgN<06~MOjiHJK?@B6r1D#F6KdffO#u^I57e=>6BB(+- zQ#;2J3w6>;>4)j(Li<)9C}8q~kBiH`U$FOC9O+-*p9y)xJE&sG1FoeR=G2 zpJE^ne@ez?Z&X3jn(VN!FLm+ST2aiN!n3>=v*pJ2Y4WYzIWhLRj4!-QiqiBSj89Lm z(w2ym#p$n9+YK@iDoTyAr-G^t$HZH7D%)M6?JY$*_^#PQ>F@;=Yza5T3=cx@X)q;v zgnFqZs(L>=y%ft@nbfvjH_htuVirbqJI12t#C247x{4EPgt3BLx3h*97V?($qOq5~ zQ_iiizhpV_Eag?9$19M7g>#usm*xKc4hhG!p-S4FuWM98)&>oYgBrg*r@(7b_rJ{s zL@^q4dSZzmPNZ>eGd&@`r6lrhJ<2o+3Da?;sMzAgsSz=TbCm?6AwZGr=TZsrzCL-+c`44boQ z4p>T>H-Ho+<2AL8qlj1SrPpmj(x&Oi4zlo_4PCJTKavn;`Ww}dm#T)@rW+H^00^C<8T&3s4ERquP!Q{-Y!k>faFB3`6(O;NU* zCy;G*!SN!^U6uz$sJ~)g6opI!uqJDc7%C)2A?H;E5o2mV49#0B95F5j#9-p$h*6w| z7>=xm{cJ!CM^@akNO5RFTrH~OU~N~?*?<^tYKEI9hK^%|weJYwtbiyb5Ty!ib+}H= zR0Nq3;EFzDx;F&Z%ivlIu1Aa@n*BL)K%vWcbS=^-ARIzv=v*A+sL(WnI;qGKK$qF9 zYmv?A-AD+}E7kx?(7UJ}RpT<%V5VoYz~Z9AZi@M)Nk&!c0!=vk0}arMn%~oA%AiRVG${ovLJjIkql%Eu z3rZL{p-mKviINl~+Q`C0R%5x#nt4h}#{2t<&Zcoig*x_&B`G>BP)3QRlo+9e zF00Rq)IQfEL#vtz@0wpu|HYg4a46)_HJZJRK&7I77!J%uZvA^o{68%9m#Xzd{d;uE zD(v4=<}WN?y|WPw>Gbko`(__&8D5!dZx!h@E-B>n&{jYDic-$xIyn7{zb5_ku*)!b zyz+OXPp1TyP9kr0?W>Ihp!4IK{`J@;{qQZ5R$=>Uqk~fqwYT2=;qYUFa}4!%;l@X+ z-ztp+rq@4S-F9U*bE3ajAHrm|gb2E&3LaP-wE%>PY&>7AV>aEa&rtd=O496*MnPv^ zAC(Dz{ss*ZvlTHOJm8W4kWiwk}D|H771|pLHAe$Yb$N5|85OoKv6qI zdoR|!Gp1)zcqd*9cH%rEd{;`yzm$PPD4SyA(JVUoDrnpHNVxBdx&Jv`1KEhhKy=l* zHn-a?qPyh&%eklRJC>d;Z@gk_?stLfM2LyIIMs0D>Yb7?Yjghj+&|$Y)x_QHpJ4cs zBTE6>J^nN6A@6Jt*N;z+z#02T)5&o9{#f>vQ7D?Q&n|>%6ox+>;%;IuOZJuF`H0(H zgwo``#72q9;0oiug#Yi4q(_oIqNo>$@-YJJQW7@2s(M2<0Sw*G@%9W#V}JL6DS?&# zrYJI%T3Jei7$%{`)PNM1wxQCPGvoy!c%rM~?Py*VC96cK*&=-QFf3*LWD2f&CbTa- zuDqc&tzMHH{ttoitMmWfb@_);$A%$!g~G4Se~ug}ohwV1{vu#C zJ=(wqlbsBH#o<}%3h=*vQ))s%eeqV@9Q38W9gZ!F{qc^iZ}P!|UmmG%%h`Wg9Qk&v zfTQ=xAC&M630Et1!6W}Y{mt^N zcwy>GU5hOJ!B%`J^{u{EP!KP8#LvDu++rpi_8$GVQhd9tpng$$;&^JmsB-sRKniVr zjR^0aEV!MvB+&wI%{1P+|Ae14`=3@RTi@o#t5G7;=-);j*8Hv#eO<9V{G`5}AZ(1n zeqUj|{E+;Dd;HQKgVw)Vk=T4QsQ(&**AVH~!%q@t^pgC&b0b9JatRCqyfMblb`57Q zP;Ks6n{lvI?oSSHJq3Je=?b;7{rm}aZUTO75_)HL1M#z;;CTI&~8Mg|R-`z6h z35dab_&d?`lnUaBp`mtnw_m5(e7@`C6GbKV$4PSFOW0IFNXnUy>9cdi~&B1p^U7NR7hwX<@^ zT+*eRa!gUe=#?kI41NvWA99^8dm=a;qa}}zHgP}ZUG02XrEka zSWFgs2EZ!wCj!8e;{hJuO5l(y>_XjMrfPN%&CZQ=L7=}}liUdM_F31Pex*#3}WX6v2`xC%fYbwO-Ah^=t3Pq^64L98~uDQ~TdZFRAoLF~LB zw$80RNo+Wvx|+p*oq*wHHhtWu}K$O8^m@6vAr&Ko{Oyu zVhfNstFNBa*Tt?2Vs&kuVs-Z&u}`?z%|UE3h^=+8tuD4Rh@BV2*16a&7uy@eHU_cl zTx`Ke6|gp@hw2-|Zg#P87h4g;wg$1CE;i|6YlGOXAhy@V&U3MKL2QA^7xHZ4*4XG` z*9EchAhyEAKH*|F2eHW@w${bAy4cPjc3u!$=VH5DY%dQcR%Me{Z&%Uj??mo=q|{55 zz;>prWoET3XS|NaT}}g(y>P|Csix}kqsL}~Yjb}zh2Dm~U}Sn#iB$b|<_V3&jN8K@ zeYS$4EJFKIS8jde&%8~{i9=lHP*S-&7)`B{|E#9xm0k|sI&${8HvidcpHeLrd)Yo^ zvf?w`!NS(+D~)_LJk$LYL^YTyq?{fRTLS!2tmH%>ydwT{`J31n1aG$BWSsB{g|`Ob zoi02{c&);_g797!K9BG^g%<=(Hs+daqeZW^!ibFru@x@%2^VW+5}OQSYh7%si?x!8 zofpK`x!5ijYvmK$7{sn~u?6;68?(?4Dj^qJ5yZCIvpLae!Hr25TN}i71+l#@cAkr^ z3t|g`CL422w$a6|3u5CzY=w(`!o_Y5Vv|8^t&44Sv7JHeydbvD#df*a-XOLyh+XGm z3+%BrW}zQcLN2xHT$V!MLaUKcyh#nuI}1woUIxhC7_V%G(+@gTOs z#XjL;HwUrFAhy=Uwz}BPAa-65TjyfCTx@R;+Ze>IbFl^XSR1p@4=N!STM@*z+LQWP zaAVTN)&{X%L2R#!o#$fff>>z+Q@T!7G`iSzL2NvT%_|`nyE%wW2C;c1)0dPHr3y)vC97?{c?yY0)wQXs&C!zXt)$H%xh|MtL>BPhkD8wUC+u@R=CmBq)0pU zL&q`}uB}Sn7s(xA=3wLb{91K$LKA|9NdI2knV$JO*MX(BcZT|GC&|(u1AXn`#LnXbsT5jvvbpUo{na5Z_l zlTZxv7dw%7UgU;y*YpH==MCgNrc|JpYRl(8 z5A#&^v;Fz0WQ9MG|Kl6KleicBvx0AZBuTvjfXfli0%H(|MFm=ZMLy z*)wyiKCX%~Z}8SEAh#;yfXb*GGpMx&6->a!LFJeb!oKr1qtU|Qz$+dAI&*gJGXp@! z3;`MzP%=-?{WEiY#txNWoSNE#~4yJZQnb~BB`BWvqiD5=N2uA0mGt(F_8!$8S8bD`1?`g}^Aq2?t9?><$>QJpi}pzci9cET=RcR-0PPpie6r`W zsXn%a{s|dKOj;g85_6fIC1#qg$vxKQ8M!*F83EZoN5;^#hX8j|<%Bl)rj5Fc);_WD z#@bvJ%7k>|+PuFiAf4YnoJOBS*5rrv6L`4(XE*OlT?>1UzKmQlZsXX}T?L81ybC9| zpHH<8XZRPT-c!@H<&}LuXIhvyO3K^o(=T8cy7UU3^)um{Sex{_$7LILSFD{j{+7%G zq14q;OC$HE`U?FQ8}?D)E#o>;t)t+5B-M6x;f>R4*~oLtZ2yH^rJG>4)s){P>=)iR zJGasW33C)3j)V>C+0?!ycMgf5R)+LAB0(?O9xf}dzY8nsRUAIDi7Y+4j2Uqiu>ru( z4FJ4IB}fwuok_K;euF47JNNxTz@Jw_;@iU`%j*odqeMk!QQ{`QJ9o@j0=_eIdmSN# z?+*y|cd_6S0sH{5XXoz7gC4fD;i2~M=Mw@xHFR~-{qS|+@V>g@zPi|~nYpipR6kAP z6)`jSpo8sa$F*&JMXKc5FjaBs7yNVZeRM$rR*g&E>ww7G%gu-%aWE=(uW7YB-lS~L z4fZymZp#{IJ>}MVaxZ^6Z^w1k-28qEEi#3z4X~H{$-8a0Mc$ZIgCmQ#;i0q1vl;e- z@^H+_!vlQ}a6l~e-l(M`Q&$W9iw*mcK`hnLS+l80YtP#)vNd~=nZ~QbJiH^r$MOVf<4opo1ZgVrIA)T3Rg|6x#TEAk0PtHkh5+?VhWe5-~D8MxowQ zyFe|@S9=rt?Ld)#WSPW4+fBV?3(2^)4TH32AQRUKC2kBGaDaNEDVb!j` z%6F_bWo&F~dMn1PFYW5ijt{_S^)KY{FQ#5!)v%B4K7MsVn=scWo>1_% zL=yOX)$nlatP83Sp-Um&?A!wO`lWV8^TE)F@@jL_Em-SH322sSNt6PjKhvLn5_miF zv39kc%XTjjICIfFDvi`YpIT(5`*xayf2y*TmK=vlTZq;_#A^|{rnW~{4=8SP2+}AP zF1NHcz3sJR<5`x3L#=lb>!mtAL3L_av|U;P+e}iDVQ*6#E1Vp^dcoVo>VGIp2|Eow zi95K;ZvUls?!R>WSq0tPhdWue{BW5=N49HJ2G3V5wtY9%5uxZ-l5i|?xi%4wV=(VN zx8mnFe|&)0vLLpLSPpKdE|1WD6(piS(#YVRaC)ad)ct>Kw(z&l%-s&&&>_9iBwq+j zhNaS7a*x}=b4q$L?0^UtTX^Q0Er090xyWlfi3 zd5=W=J%#7ev%_A^DcWGE{|#+jNwTnT3l0&%qv1dLM=ojKe`(Jh{l)@b*1QALIA;Ai7NP^^ndy`&4%UqLiZ zvrbC&Lmi-zauM+p>uSbHgQel=O@aHdJ)HU)l0}39YDd%kxq|>EaFo z!vw}%pjuceJ1nr5?CJSW2B3oNL9v<+79^*2Xg$+Fxb@8E%gEu@GhJv=lLeVWfnI*2 z?1^2{@_ZG^&{>^)G(A7nePpGGEQS{sn#x9kvi}+hk@!-@ojgKnBM8z#-t#1(o&yR@zQKn zATdOYZ3#lDn0V)Xtj%jX_^LNp6rA#WNN3yNLtiro@k#|y>wf-4>&bg{hlG@rqHNZsClB?HQh*K40- z7u;vX(r}|?IJ3)ZJ9-l_9ZD2UP&C>8lA`5^=ioM@y*FdM9e?s>;HCjycx7^Qu@8V3 z@I0~PjXa*OIpi*|E6-s|>GG9Rw^u9@`}T@OdyKmato$V^g+F<#IRW|Q#$pMTyznM4 zj;MsoyjiiGrw(h>qL zJWs5Vm*O0{5cVLP7Z3;x?3Fn0yA}$8^kOKon2IhUv0TsG;k8E~FKUKwHoEbPFBv%w zIw9vNIY1s#@x5gfzl)Hgz;vnkx*+t7e&+imPEIg7h@+5$dn6Gi+hQX~FOq`~HsDa& zG2S*>Pa%IGF9FfQmmKigI&UK`4EsO{#H$J@WtF~#${k)$1kk4uxO==A8v-L^z=`E)&p2HblX} z0fx&jfaH_^r#rk?Nqc642^T?z!QI6F5@L~i2~2P}pJ5EZHH3{RexAfU@GiD1-0+3)b)0@pjdH~Cd#ABv~sd7$Y?SvgG6wX4>L zokBVIA|K6Rb#kC>T2C6y(ebS4*g;W%zQel~A?Y?#q56~;+d;-NIlhL9DZn>|)p7E&CA`+Xv;@7H^Ov$A$<>q1 z(H6prIB3Xj@KEbBj8^)_G9vPKZDrhv>q&3Z$TZ(AAnreFIzH-3;XF zf)cc;06+K~pK2t3no9{=inTp~ee5$h%GsVhLorWVF&$4^5%NBmWItw`x9N)C8M+)e z&}Xw_HKPQBLcfSNPb3U)fB1tuA_G^gx3ROtu7rroqb--j0r_oLfkV$26-|cl52-G1{67r|&J{AL@H=o>K%hg?|W&ToP$qTQ9C@dv^6u;n3X5 zwo@njMdW2J(qOMEH~aF-9#|dLs3u(c$b+RESfnbD!g+XMrl z!yZ?A<#V-H9^P(m$=BxgCRZCdt7YeZX9;yedR0TcQHp!hK(bi4yP?WrRO^F#NWsvw zrMQGN3||-$Y3!vg;9x7g1?oEYO$e z-rz+V-+XUDL^J2Ag2yfo(@T#lca=-+asq{#0hOFX%GM|+KjaxG8${|lG?)bCm2H)6 zIBmvHL2rm7fww{)G&5xBCz=t%#7M+YR0<3&aU+bf#q>@9{HVC?- zL~LIlR+!%C_uU(+wnTz+iK})^&`S9#(#HSzPz7Mi__YJA2vu-8bSiX(Rv8yW2S;x$ zVZq?-cHa6$O4Ajc)Oj%mi>*O5TP$9l=`)pYn@wJL6He6Hzsk(l;lx)_r;m$B9ex_r zvY85NlfBdTd%aDUP>?w=s)GVFH$l-`OSF`?%HuS)TJwhtg*$JBWr$dwB9s|WWQ!?C zSF$=bAfz`&O-=UD*rJIsTdZ>%+UMw$N56i#%0=$SoQ?wyv@tkF8}$xous9kF?74T7 zU!~cWr6kor7)scz8 z-THA{SO20wN?t|Nw@aV8o_(N0jLSDiH^Oiz(5?~{&Xu)TXUNeqBoHNA$JMEWxyBrH$<$MJd-)J3)-kPmTs%lLac^TA_g!;{#|@eo({XH(A(0yy?4oOBC^WdshW#4Q zp!TgU*1z_%-#S-jQ`fU!b@w~W`9jk8{+Ul=$0e5I+dNV!0jyFHh^V_28$%6J3%q<4=Jnc&Z@?-uX z8wev&2E|%_&;v4<)}X3VBhB=B8%*JypRug?us%PeLiY#5EF|!U)PMt*45m%v2d#ZQ zp-!6*ZS7794>PY~LPhV#0k9#ho#8z>9oGfJab5M!b6xf2u9WLrdxy_7iIKEx%0ma# zK{sb(YK8%HH^UhXIk7Me0x#ZmCJ_~!W~ zRbl^j)EVgmPbto}9AdjG*)z=v^*9r<*!T4=bNb$8)0Aq&7%7n-h6|D9B$db&g@WMx6*q7A0Arcb?28iMv&kBGdt~LS%KJ?XeF?J z1@%cjpgM~>8zG~uTzqYIZt;yq>aA>^Es(WA^{Z*qdP1Al6Lu~a$LxI6&b9Wc^HDCe zsL6t;NlhCSSQ2gHr)B34Nfy+wX{R5E=%U`Bup!)O1i;E1<8ys@GoM;7 zXtm%a&of`ajBGYYe9%xhreQP1=54di0LeV&AdcZ<&Ea1Pz{l9Qf0)lsTN)6JdD#$F zp|V^P(-d~0v29^-+xysMir*N{>Ah_)OA}@=JNSmzb_wg68B?8`dQ6eB4?DXht0-DD zImq7$E(#;q?5YUx!3$P&gk@kWI?jtLniU5vMniU{c>}8rXWoEZ^X1LFZs#Wf`wEK> zUF2Xcc2FiYtdSR(y|7ahPMH8t zQ2~Ziyzyl`vPFegNMkEDuaX}-tYC=U{F)_pWncf&0(G?YC1%8Tc$b9&gGAuT*vsDu zE{x!dRIX&RmqG#HD3waZ#Ol_qu;jXRE3nea3pW4!aspOOTNNUG9R&YZijkGNUTYUs z1+ZZW3sQS-<5>*r9TlnyaDBc?-%GH8-r>CuatCFTYdg+Df-{tPGlE^%Wyq*AlTw7d zq&s0@F-SKkT+ot{i3vnKNM)8_S=DlZlOVZ}zr!oGH3V3qb%+Zm$ze-Cl_F}&3@$C+}8yIRzKk?^8O zNNdvS;vL>=S~A!WmVV0%j@@UV=9x1SPPVVe1DN zncW0BL5M9L)D1P{3@jeV1z-Q-0r^-tsPi!)$pUQ42C+fQ2Fd&d%(XS<3?$~D3Tp!kHf2J|9fi(j*L;hB42Ib<9)(nz@za?CzZ|;S6YY0u@ zGVseU7?g`sS}>>^YI?yKm9zze_+aY;L)N%07z|8=P?)x05F4~$Q1NRQ3}U}-!9aC| zQ?=q03xE1zrRn#MR~W;t9GQ?O?dTioCPft8cS`n>wVOmYdZAqllHTzF4)U z^8mUaRTWTFRRP_1k1K1HOJO;M548ajscnTIUmjhVD^DGGe|Z#McXTELL%{v26@mdm z83D{9A_6EY-S3bU0$1skCq&Nm(Tx&`>sAO9Cc)kkR$7TubNERKOaBVNM!sx?Aod|E z1X^$%SS-x15X1!0!O>ewSTJ~Fg+Q|cy%EcsU3@=ig+Q^kLSPWU$)y%f5~Pdy6@ra? z*$P3$P*a60=W5DXSO;Af5Lh87 z6E*uSM+wo)S!REw<*4XgUp=AGChjN#ZIqL>ff!e>g1srlxYBIN(~8a_Plup+y=%6j z3PcRcu$l|%^6=2+ZH};F7>WYxu$FQ|r?3uJm})g;w#^!=%4!K)qq7=HtvGAZ#$wg6 z@~ZAyw&eko=&lk!XTFi@xEwHf-O4~tJ!rpjekpVuCv0_Nf;zjJqSk`ii2}ECjzgB= zv&g{VfafLy9sav!8;;>6s#dn4!OO00Mc`!KHWXvwfljV@yiv*cJkUl|FR9YX-1U4` zJsmGpOWx>~OpzEBtfL-Kr2Up*bp}Hf+OM+==ezsnu=1%4sDMo8EyL={%`zO&L~)KE zicxwd)YKrb3@2?xAm;dPZ9v^*#ZVjJhpY(bp2rHM6l|mkh^`dDaHXi`c^jeh${@=y zOX9(b0E3}_$8rEx-~3vDYMtl!M%Q&}Z^U&=K{m*7YXNbrfffF5S_{w`kgWw6l|H0p zQ>F%M*R2Hv+(k2)<}{86t$k1@+8kB8A6N_6@LO@*Itpvy$|u?~m>R_Kvgcm@1RCW4rjtAUTUqlU6ZwB7M8!by5GF=`gY(ST9B>Xq&@_|(Vg967l=6gBH&|oRQ z3ZUVFtpdcwf%W;J675hiju&Orz*Yg0rrCoQUQVd30$j)M4_O5m(!v?AJ1(Qw1;dr0 zdguAA`VLwJ$hUB<0@Sezpmm!U2k)uLTjaH^rhf@Qn%(*l*S`;NT@?8+u8S(70qu`B z_;33Tti_-F4fcPvc;mI|BVOyPDXMyYu$>1SrX1CC!2Z85u>Y@5G+|CPqb~+v9S6}8 z!1LItXXOrGAji(wAiH$lzKU_v*`Kk$uLXas!q}^2qOQSYE&pBmF5*MuP%}r%Ubyo~ z((*E+4U34gzcU7O_IH`DSB2a9?ZE5%&F(Uq%j_=mx-+|f=WIdXC@VN%<<1vY=RjZX zvZi6XW&lwe*xlv%5Z6-QeTsv)9FDXzFF1|QOuy>Rt-gEBd-T7OGd-)Eqkk;Q@jAH- z{ulFE!tT93M$MD4O{{Fsgs&=k!gg=U_UxO(IE!(K4ROrnV1J32J<26S-spVnXhLh2uE>%v1|KN+TSGGsJo_-0Sf?b&6#<>1Tg-2VqT z;j_-cewWJGIod^_9tDS($iRlPI-YV%S%yqnS-f&kQ=4XIMu#(Km-DXhr?ULQ%N_kf2|9W)cz=}1k z0lDfw!b%8dV{^wHO+>6&xwl_4wD9b!L%M(Gq5}Ek)L{djqw+3obFZ9+C-^t4$}{8H zk&nkiQi$MRNfBi6Vx@4w_alP&Hd40*_O zD@mjYXC%D9KlrTLZ2c-|JQpndw%k9QK@3#_u|II{mhv&)f!uwQ`b$ROZMo$NDNp3; z^cB$nDSx>WGCDZ@HY%t}L>|;?N%}k_ zuFbtMkRVC|JdrgNyNlCYeA__$TZjpoX4dTf%*TlA-cNAeJzUv9YVEE4U~!KOB=~R2 zcYSfQ2jaiuilZ>;Pj~B~!|B0+L~}?)$DU{;3Co<;JiVd^P#PmsZC$DMcr{en#0eigNpHXRlK+C34jJD>^K!e0 z1L^1h`SzAq?zsA_g>-b2-ZGGAyV1F?@ZMg)DPR1&R<=Iv@iO7c&AFu|xzAfn|Bb1f zDRxRmwh2@cHy7w!K+Roh?<{2-{zb?x`>3fO3XIw}BZ z(JMguvs7wGqdtmSas!5srY^tKaAWSzE%Bgw3|w+BSU=nid@5o0App}!ZZ#4se()GNeSrFM` zC2p<%Bl;N)nQ*GbUqZ?k9i!1<8GrEr!gy3^L?c0(dZ~|K&BBK?xxbkE&MA>aHT^lV z+}ATP_i%rRISL(6taBRfOzoVT?=|Y-4RtTUNMC~ieQM=?ZrAz#b_`_b=Oa{fuuh&+ zzbp5tH$I?``|uGun0`{Vj(%-6LXlc_^y`<;=auC{i$ueB5FN@%1;# zCpT5>cCxuWkj-Z#o5LD@@~dR?lQ=pWESvxDfNbi`)u-P-(EAMf)g&N;j$m+k@JEZq zX+~DYyMa5axwjexHo1a7hIo_Fog)gf4T}+@sjK^}K|Kgzl7+eYRjd1~H9aE5Ku5hW zR-5|*-n$X;>=_zVWI-cE%vu;<7$Z8ab~QtP3q!b=c?(A-gU}yfe@XqVJ@@49gR_pd z*GWf7!~c`YyMZXPMEztQ4C6%ZlMImukz{atI`ckA2JQ8iZ{`ca^~!bab&fTEx$z9z z>%Upz{sL2jE+x56ewrx)MoJy&ejbf^rb2hozbe%?to}2pzEHz`)|h8~t#p}J>G?&j;Ub5iGsK>bB7n_QlGPaR+l21Jd(blt-Y?%BF- zkez$R0GHY5JugrF?PDV#s8>1lDhu>?CiR(r!eP-U+&pcf4LU`48`x)3Uw)bh`IP!W zf5fM93wa-O?KMig=ReGpOPBIlIh~L1iRQo7$>~@_d}iiu z?Jsr+J~MM8`XfG-JO26y@tI}#%*_2yxuM5BiLjfQoA;aXX?_=cP>lFWYM9x$GW5lU z2O3unOEi21B=K1^8Na^a%>Ss{30)@Qc<1Mo4Z-l~(#_zYro;E@Z-p^sskX3xE*FPw z2;pc#%Kh!RB0hVD=}w$M3=Y~mrsaO^9{~sNsbMPVCqYTGax+{>nkoM?a8TCrhs(tf zQ$i#J8T^&ylhm)oJoMBQL9mFD{)j2@ZMQ8g^;s+*94<-J64zw(rDKI+x}sLxY@ z*toOVS8hV!ipQPHz8WpuGwx#c^$|prj5}M{UAS*tZ>s%AAoC-$rD4mBKC7kEp#Eo@`w<`EKPK27~x;Tk>0q>(qaC18cu!j&Dl31h1bApLVE)e((@6Y+d@`Umt^0J z6<*sMg5Ceg$0~U#_2%8)Q%!e@i?q4u+L7{i_l@Zh5cY9>a%pTr7QcqDp*LUIfj=QOA za}E2AR%|9_qA6G1w<9JKy1mqAdA2b+!2EAP378BFJu8_%FUo66>jy6SgKpCmKk zi(!cK^#AzLkA8IN6&gncdf@8a-gjSyj@eVgCYpbc?BuQj6}^t?ZXmZY`cec@Kp2XjWqWTr+}&4N9HxH0*rqw z^$K)rX743*yO)c~Zt$8OvWRT=h#_$|q^^#@mv|5t9TGPpb#&THCCyyAvpM&99GQ%evx6tk%Oi#07*+@eJ6I_wUuy?1nK*GDKZ={0e+fUwdq zD>m+QUYuzc_YET`96CL2um8fD-Adv${jLL8451?vUh-0yl`y4e?&J2nup>KGB|A zG!LbOFvvv3_MVUA--wTZ4IbhD8{v2mI-PnQs;@TzAWQMuuNROztj4pF7MMLfBK3w6 ze9?s9>mk*70=Lk3sZ!)h6@%)77XYLy=c-=>75Y}XhxxF#A>;@W&-`TJFt(Dk)4zc`*=0D&Cv0vp!(TOry z&(4kfxV1j^G=Q62SWZKYq3EXmd;VtUsvwCpAv0fq9cSEUeYBel77nrnMRh-dT{n^2 zaLhGh*M8^b5nOQ&p>Wo@OB>7*d>6oz%t@EshyiacA6WTHax>8agT}r66QPY}_V9D5 z);|9%H}J@1**S81kNyK$$L7YKEzG+93$t=FK?Poufbu09WkLN)ksyS%-76IMnLv8rWvLuT@p z&dPZo9m+Rv&3PmOm5L?%ZrvAga8k1H`9ig#jDSgymFFqna{24qT!XL5)rS z8m6vLU_t-TM{Yr(K*w<^ruuV*(Hl2}m?i{#%S6kvuZ+w*&78Wx+w>m&8hgV~^>e&U z&w)QzJZ9e<$#s5RBQw#Fgk?%crFO(J<)c!&v<#65UB00au-+zjU4g$ZQ#~xz9z!{o z04o~m1Y_Afn@BX3_i34lu~asS?=5#VbOm8G{3YQ9CSj^Nqh9M2CElj(6R;@Pe|F$@ zOwOxd++;0lbuV|$ti~Xf>h+4EDb}VYv^BiebLZfsX7~aH?(}=~f70D#ik+^Bv4r2xn;!&v^4bQpx$>=rmUxZ*~@JA=#5 zJ3rZE?aO;~4uU7_dnU_YTEsslI8>zsaS$>F>u-Q1T&N3hNHPAyV5N3TQ3rJf@8Wc_ z^;7T+w`5Lw>Tjcosp*Bda&Kg+yAg>%U&kj*OGKA_jlB$;_5!<%3;IxT#mkb24F{tV z-liQqrs9%p#@Y*&Gcp%=Ugmk3=leY0PZzJ{fe)|nguM;NdusDs7?Qt6`4iRoI6aYt zwUULkEOb8BYYUy>$J{z6pGD!v@XQ6oqtKKmLAD|L!l) z?k&?0NYsCDeIF0%`?#wwpGD!vgZg%#XPQf2!&dl#!g)*64*Y2;+QJ&zLW;JqhPIG; zpJ#!uhNQM|94gPaM{O`fyA181WmeqjuDb?cwYO#_H&yW#L%_705j;#0xn5}eP)(G3 zozWdCsIs*?#3b_rm6OWSQ#Myl zDo;<@QaPz2J!NaLDuQ#lTq>rx+;9>J*zqm=M07zY*yv zI}M8t!{T|vqSLTAXjmLIEPi2FbQu=EG%Rw4#ao6&uVHb)u()hkye}+9IwWcXBw%D1 zRXHNSq-Mk*RHlspm+%OZL^$7x=E>cUJcVCjik zYf7Xis&nGP&lrzLdSbC3Cai>ySbCyX;mgwBjOXtMonD5P;a2K$9>wWzS8$_|ZcUZZ zhC5T4z}fyp*5A?Je9qA@FBAQIHailFX~b906bW@_vxSwqj&+*fmI>dSZ5_>#dW^m3 zrtD1&)g(ii>d*QN+S*65Ihrd~>9L~O9fg(Wk?GpZ_&c+0qbpBm!nb5wZ}Qs#t$RAd z$e;QyoD+`9wvNO+t3GOKrZhs%+ffvuqbf=rTTHJv@ltU+liunCbkuc-#hK!f+3h3Q z0#crd4g*Udmu1R}vb#oCUd4^A%cIr%l1lRO4AX0ZWaXvI_>tMRLbkndu8FB=zMyjY z`$VWM+jbM}t{5ar(^gufzoZzX0^>Wft%a2xnP@DV9c`o%xu8AM=j`^I*vc3Nl2#f~ zaEXdcv<9x}6QoY~$4BtJOC;TF%IXZ>1=R zQ=2KS%5EQBxyPz{6MJfOb7o1U#`mRQJ14bc7;~)mMtG0jhETEPd2XVd-x=DEv3R~t ztSpAR{L*Lg%g~r#`P*8I9I-q407v$yv^Nel#3!4Q$yLHO=~G}-!>*O0hrDZtc>V#$ z2v_j|xF`uZin5raG7oYB3DBkPJl$f>*j!@=^J4rMu9~Qlh<dUt!rtt_y z^i7E}^~snqwj}1Fyil1+6g+0-{{H9h(E?)&3ue!pl}og~#|RlXi<5EPb+Sr>?$?2 z{Sp82tniR2e8E8AP792suEw{dt7F{KJ&U-E+cJ{jVA6H!TJ1lQ1mW;?XwS~=e{m?jvvUOw(OI)|pLW>E z7(7p#JL+s5Q|CHsD|i2#!uwZ6CF2T@DTU0dL%ERI7;K6u{#n3`g>mL!3$XNm&)5^; zZ7Xj`VyQ~9l~QCQ=FPS(IF#*f=bqp=ly=OyxntRy0i2jAi6Y#PN@K-+_~rOBM$|8F zAMS`6kaQ{}J+arSEtTPK&%S!YgmVyB3&f&cKuGV=UDDpHR2YkM?X8x_$=#h!?zC@9 zV(RuQ?RqY-(m4IzZx3JpOQcqN8)%wn(*%g1IHNOJ(#F1)TkLpHc*$Gy6Nt)P@mx0V zJ(>a?a=BFkRtN41HDcQ-;K%!N$ItX!)8|dfaZiGbQa4Q4g#q+vftN}F17~C-vS&tY z6_YAYtn;(icKfHjA7As|J#gxsET+bD-lPMC=dfpxz`y4A_@@|y{rFw~>VdbPB>K?P zgco>|x~*Ll9`c%=l~mOXu=D_-Zr zRQ@^OTiMwC>VMZiX9cP-eU~`c4TlV9PvKN6xaSK~=|MPub!ZsoD`hxz;8f*qWjf{6 z>{-p|tncn;^y7W`6b7_Or?PJk_fM!o&U^uj!A#C$)W8>fL0+ z)3Otp46FtpX2fT1{HYc4wto!x?|MIWvUUjmmb2ycm;!b{e+87%pQYYQHXQt^AoPsB zUsG`_r{_O@RjtFn$O(jD*&Mwdh#tsQ?zgIFW+_|vwu-1|{ zAh>y2!`Fbk@S*9zx=s7>Hj*=V%*_2YS6TwjEI~+1@yy)wK;f+fNR_SZC@St5#{H*1 zKs`vB{3-)Jup+s<;iLUqp{NAfI_m5q_3eZ0Mg8(MtqVZGwd@<6e7UQ8S%lw;fu0L) zZ+Neuegcp83+iilTxHRL$F+j`KjhJe{pYGnhVkdCsn!vx%MUl~`8fpb>(-Sasn+-G zBX#-D>hI`&#X{ci4=L+LVUgx)f5^wWe`X=q@*&HHI1QX`tPu`(!QPEbZ){dn~2 z!iQ!e2&J=gt5H^Bs5Yo9d}wwq^Vx?%XbMz_ssE8;pE? z^{(e%hW>1#LdWPnovME0Vu@>%&#EzcU%uiRCE`h=Jn5fxjdGtFFMB^e>>oPtwza~G-lQ{y7rmw?$mhRgnot{0{38Rcx6|qBQ(n_QiT0Q| zt|W0g|L(JV6*O$5v4*X&HuE`HIaB5b_48-1)6b3j`haw_ z;-zbkOHZ>v+OMaNOHUuq_6+x5?vZIPjJA$w6#cX$*Abv`MFjaR=Yjlwo(J;#dpwZe zFYxFqsBdVjjug~?HkBQby7F+ti#-pgvhSs?{8{}iJ%5tQzOT39p4qAFRlSYsxi6Ky z##_Ur3}ciG%?sHm_Isv(4M!mJUX>(i9shT?qT4iW4r6~PZuktl0HTqGPgS8s?zo>4By^=pqV|ZQ0@4?@)Vm25Tqclb~~F&slcq=-dhe7o~Jo z0w&+>vpJ@Fr|G6q`Ri6~nRB;4(tjYVMc`f^=lC7qO+U2b`QK+pFPSy-uW-O)c9U{M zkX}TD+ug;;?(*aI$q^;i8gclKZ3SQBp!Ot6OSQ7!WRPTsb#a5>cb+ih2f<(Ro8b@M zU-38qXp1Of+5Sp%o4=|CI%xAFB@Ryi4NEV>yrs81rS}fa2srWqvof0=DI0Gb>txAB3exm?HJ?vII8? z-#pB8tcRDC=z4;F7O{I9%$qTuD^_ht%mXk4a2JSiAH$C3)WkL<q<2?)I6L^?+{=J}u;A!xhWR5(2)tU&ZpW5+BP}^CjP3ZhkM%sDPh!aJdAB6>tX9 zqa5F#<<5Az{kh_wDhqr{|7%CdF8Q(Z;5oHXd;n4 zoFskf_is(Tx+=2IKQM|x5e2Pf%)j=P#w>O^qN@S1TJL5aY|6QbGZFl3@t&x54 zw;C@NML6lZlIkoLx`KeJ|z%hnR` z>CE?YY!)Tg|IQhSjBjfem?u#flu|0B}d`%{Z$~?#MO6C8WOz#}@&wEdu z_unhL)_8tZS)36jq3-g}vTWyT4M%O)6UqKNic4KHgLBaW&h$_ZJ>6+&lGw!uG;T);V8lx8;;I zfBgj-aZ_SGZP|7wh;L4`62`n! zP#K-SuN3SoE(kD_VCp*-eAm*hDW{%f`p0V>uT~`GELU!xYk6*EhoRzS%FsWrY)uD3 zAT*>L_?#1bcJk?Sp@@nqTeB6ZQ=%?HgRz7jbhAmn$;>8@L)MdQZaB;5VbL(%Vj-zl zM-rz3D^Ga;eV_Ne9k}_h&!d-)+H~;d-JI8MPBelKl@+yUNXQhbFh=o}XUAs!=ZFze zNLN8vn&GLwFeO#KFqXzAZM%fqGA#3|jfqAQ5wguF!ONQ@L4M^<=s|?9?pzJtP~IQ_ zPcn5!W+Ij>UFektha!tx_PQgujajuVvDv;zfrKtTVAjb9brOqVzZP?n{&C!UaH$AE zjG$W-bGfnu7OGZb&(SMrx;D1AG8@zsTd33Yl^d-_80K`+AX+Jedl04GMM^vx7U_gjq_;?x+Vek6taG`*GAY?3gx%^c;W zT7N+es(;4egM!o{UGi7XIEA(s(7zQZp{#$jCJ;D9TjAO0!IRnC7?SS}WmAU~j#ggG%?JUV2mXYULS;JNFC-t?0ZlVJ0;9| z$SZbY<+Ww+@!C$_g*#)r{PNV2RwRgb~a9;5)pMLk|y?o|-l>9xHo!znCY z)@wU_4@vjw4h+{{zlTYcDg>$MWSwYqfTQ!|j39LZ;^|LQbq-h3;`u`2Vg|R)uA>p> zpTqI-YaH}Z?Xpyp5}$xT#K2)pT8uy(*~Ow{mQ)aHFJ z3osfLFw|h-;|5b`#v$n=UJ%nWJ85S5E?XVT8Ac*?$3^4yhF_?cVl}7Z60D-_%utv6 zM`=K+4~_@$Ku+@g;)EMXsZa!OZfFmCt&SA%n30%M#F$59G|sylb`A+at_1@TRSh6^ z1J7Y|2vD!GIw^Ov;i+p8bX5wD28vBq@9@z2AP|97NSTIV52{hQDLZxOqP&)TlWVb- ziFgcmEqD>lp#Z?v9O|}9c+h2wJ7^Ejyv=;&65X$(zzLQgBh<#+8&HuL8gm`x`iHG; zvX6j)9GXsi^iR`lJt$9DQUF8~QL2JSoHx6ifxaoa2%{YLSMJ9dq(qbL8(<-s#aq>b z=d;~oLLJD6v|*0twngVjP2*bJ3X~m&ld>Da zywG$X1RgrG)o8m&&6Yqe>Ddfa5I-s2zeH17p%1HtIAM`oisD56AX4%k+Ih(qYr^E` zqwW{bl2L4{@pBebJdGby&$o?E8rTJ)SmuJ;m% zE}k#!qy*)wHP#47-7b-fNi357 zp32%oRn)wS-s>-}ZkMRI%StPArL`n_0g7~pK>lSqs0CIat!WA4&O1DMN)kkZX1~HP zSmMqeffLm;9dj_pg6$sL`ol&M201`0I;$SswSCt+K~e@BfbgE$K@)CCEHZE_t%Z@} z=f;;esL(t*q&gBOf&Q?o>Zff7%6N4;pJfO@P8nuDiOiCd*HX(pfSwQ z;|29~RB60E9J{)B1($W8O3}UUE9Sl~@Re}`K0lnuIE|iZu?oX@4W@F-Z?iNi)unkt zZ+mj{2nTJ3Ifiy!R$R?uXrYhAWmUd9rny(9Ncj%`NJ!UjNGik&oM%h)ait!589j@Wbxhv` z?L%MFzKX6O1Q0)Y>2=qj9P724X9XN#-$J68(hh@}vDCF4Lb%)|bRJbil8vTgfq9s{ zyeEtHBF~Vu5ljK9@jMPdoJ7#0){R+_m`|@N2VE6>S7{Ult^}7-nL45pAXZAWPI6X( zZqmzAEz>99zANxpn|Gi5(-D*NE{fn4D}1}lCljCNcEakbVj~8y+sttwUvjh z1I4I|8zoXIewq_T;iH5e;o4PKHPNkCRUngyfje|ejz!nJ?*;0GtvkPHj9pL;x z(8UI2;|!D=)quY`cO~=>g|13NA0<&zg&OSQqDx|nlLla`POTK4Z<`Bjf_$${qlp&ubp|Jl+Q@N2H_5&(h7nDXpIZuhiSnF&Y|Z z|5zROmyAZVOIc+>xoWk(j^K)r$QiH#Y7sPpvx9Mh!~$ML9+7~)b5TGI5*3eWGPMX8 z?PgQ05s9*Z0EDRSq>)-A&}jzRS|{IV1ZKZ(nDhcd;|63|kw3rH!oFYm}5dkb1_t5>mX1$R> znPtFQRD_Il7p4iC3;?7$Z?tF&1%Mg5i5-S?%t5UH>DT=O2C$L3vH_Yt=Q#v<5gG_r zPd3cMxl{=qt=Nq+iX)3loC}nhUIjSVKAuW#J;inkoiTJ**9Dn&43W9mw6j5 zjrQMlV+^TviIav3+&v{Z2ew23*b;2XFJjzEX(&+1z!gz?#=MNP*z9s4YbxQ3bYIKIKXnC|3=hL8`<7-|h4GBDFX| zBj3yeKP;?>jB&GGZk=+RWK^XQhBV5UW*bCMDX|FR)F}dG#En)OHn2b!fyu%+~fFA+AWXkTu8SQO2JzDd%m!YavfDQ})X?xxD ztrhQ^V{jQZIum^-6TSbZ)^|z`3RkuJ{vm$d9<{F*t=lYq#zr%*!nvgNm>LtIJ@#mv zwwt+=^|y_}4^03xs}(vn6W*N(PsBA(i>vcCH-b>7;5Z_I&@GH(!$R?jROV(3S62&CqU=!8R7@;cG(qDp4aV4W+c%iK7=6s~M0 zn$CAcqRNyCvH&$I0186@fl_}_4N*$nijuy%?6((ni+EP;i^yb*m9?!So63>~0J#f!L6 zSVVjsEKpAQs#Kt7ifue25jX%q;YPL8jlDuWvY}(DM=veZ&hdoy7TL^Nom|ch(cI#} za7=o_Y>U|kKyV{~7>q6Fc8Q3ll=^i24HcJUk|r+f-2-i60*M_SrO`?}t=!}>PW4JA^$q|%Hl5V$`NLo=R4+@f0ia2}m?>u_!Dfm|GZ8$pGjnWS= zoJYG1d2n5c#6%XpblQiC50(V3KN1;gsDo6Oz=!7QY#P|@ymLyoY{SZ znj#Ltj9pXPi$~fEziSp1&v{ECd_5HKQ@MeKRe#TGatolE8cl&gd-SFqOi_s4WVy zD{O0 zg!*Ro03LxB&BS;dg6SSEod(}t&E|)g#jN-pl%(12g7w)J>6&%f1Yy&p5hThcUF-lO z%k)Dw^$re5B`=P`aW`0)l%EyWD!n(!QV48!&gWnc_2u@99BM3(5T; z2_&}#-nZvIZlnXIXphbK#+%VO%kon?UyEVeJ^KoNI~1w@9M5W=Efk4@7w zZjYLC;I~G{Rep8z_P~+$z?X=&Q=_uwFf6luA^o$s44p`{84XV5F}`Vb-S4-bA+yU9 zci4Nv|FYV32;HHOG0*CYTE%&0(YMSfsHK9pfYky3qE$OHV7o;efI9U~FwJr&Y*)P< zVE8R$us&!|DY-S)u#Ps%wn7hcht1A>PybOBP?8UFOnsBpmoV;7k!2A1l-2#LxyCI2 zv<@!vOq^C})@14_&6*rxi{Yk_i+C5gS;g{>eT8a|BCn6kaxq&4VJz~-G~`+-xC)s! z>(d-qH?6dl!q=3lFJ1_*<%Luy&sHFl+yJ?xJb4U}{sGx71i=#~E9PHN(RQ*cO3OxD z)UwD7GPNEy*l+a?>0BPJ0gy1#tBJ7H$Qol>0=6Ncg=jfO`LL=1kT^y+VjJc8R}k;t zOT1;6UovVH&XKiVAGJ2hIli-ostC0v!+!N;iD>ShcglEgMVAOWHrP=~*DD_OW&m~3 zY8_s%TRyUmiddwV5l>BnRw~5mgOGI3URgX~#sRvTs?r`9X`eO6i9}A_dfYfolrjUa;if+i50c$~Y06xh|plSf7Y%)@WJ8jqj8DM3UX*K5?Qi-K# ztv5mFS`f)psk);ds9ubF#i$rzhU>))5IF>kGzJ+H>n=p>165vx!RBHbo_#ZYCCWCJ z7GJDJz`w*ahruBWn^tU_Oo4_Su9@vHmCIH4GMbo>+7556v$g^rFFJ^&LmDnisTMnA zeqOKedKrVqVzv``3VHlIs-@6-ks zCjtt>uvwxEz+ji!Dqd+4aegeh^(e#Y?NUj@F0Hcknv}M~%azOyU0SMSYa*6K7}+14?3PoqN1iiN}_X#l2i+X z-J%wcZGqI9$(qY)ghOT|6!~5!`n};`9@xCLUBkQNQQ3XtW532D}tbM}&o;TgDh8%4zJTW=}Flc+M&4sm#(RWRWn+!6(!+`G*BvGac zGi~X~qFU4~Z8hALc%3ibrKxVCmXequLBxAy@f6W*smLGC99fAV~rY45mDZV}H4`BBB``WYS*%$wl6qy4l zY9NrHOf26A<5+9f0v-n3uEwI%fLKlt?D#B|TSiig5IZ|Eu@%OuxzrVbkPTR?MIKaJ zHeRN{M)KgiVO%*VkL~$-Tt}97lENpZ8~>-C1a2=&absMLR z9x_Y4Y1(7s5Ng4G+A=t8w_TCwE3$dWGAlfpj@T8U5^E475f6%uhI{OdZ*=#@kH9Dv zKUF6B2+kjPAxQ!l7&h=Q&4d3!DQh0EROzuPQf-$?8%>h-RvT;f!h48eFFeEpF?|{g z$$CewLm|7PfM=GKC9}@f8q4Xn%f@n3@rM+0soL@xdD~bbDACYjJhJ$9%Efr`lxk$w z`p|aV=XlToo^^d#=yX~R!+~NxKQhzF-)NS1PWSJxEZAa}#?!2A-pSu)TF$A)aC{E` ztp=9tNcb$n4_wVk&C60&bT~hC8lWEWeI6e}bX==;dMjuR1W_7NMXiF z4a8C?AxIsSZZOMeyrV|`!DZ-2W?xWyye_4?6{mRzn<1b6K8$0A3i+9jc_i8phEIo`tfLka9zYN~;t2r0FJlG@kZ6lqc6R@Gu0 zv{>E3-!LTRLcEfUsHZ08=sm0L9G+{PkG-s;bcKgVk zhnLWc4X?&2#@rww<`^Our_aM!l2Rf@<0E24V)bFxlhtM(c6a&gYML4TO<1gr5aXxd z*1~RtSlgaf!ZIjGJJ#f?YHHKA+TA@$6|ja)bFF=?4*=<Wa0%&JctrI zq#cJPGA>7Wb+$fbzTQ`7bpW?NNHn{#Hq`R1Q+KK}Yba&F$mmY~7*i)}l#?`5^-gGI zYhxMXYbnBA#AMh(5b|x7zt}aIQ;jM8T=oESV2;$a=bVj)m{7M*MIw~iPRz3F3Egzl z$>lKdEPb?*?zF+OS;9kiGMi=y4!y2XL{vxWDXyMZx?}{KdoD4?(5Gz|x7Sj-?3nsm z-&72eVu;MS5Namb*{6tBvlW6^n)%gr6RBr-VVVIIBl#MZ+aVb& z&~rpPU=}s4*Dmmy$Pzfem^LxU7}m(AQCOS5hvD-nv-xWr8ZBW;m;I#GD%gu8DdYKJ zZ3FYP^N92e&ydiS*xw%b16h6kWP9L7`{LgLYc~s@9og(0&nzgp1I_QHR(V$9dQ^di zC!Oxyx_P41>Ia?7OU%2CaH!PDKjc*FQ<-ew8EVd*AmL1^Bm;8HjvKy5%a8bdgRlKg z4<-u6h2{MuD<+xdQhI|og)fylvWJ0ZKN7Y9f=Cu5Rt9LQo#-Pi2nfw1RMu&mnUrKQ z4)D)!F&>wONlTw*Z0eSx!mj4yrg+{OxuQqBt90oJt^U zayIUm%J`8b_1IM-QS*+NZ@fli3nv*L`CW?V`|@6%Xvp=NO#tz|hTs9--gY*fMKd0j z2Lt!&^gL?JyRT)QAj8Y3#8xcmpArSac7jAiNrgh4k*;zC>3miG<{QmQL`P3nQ#veY z)Pr4FL(38K=~rXjh65XoQis@r=nGC)kT>?DOc~FkGB$Xfp&mu|c@$oHN0mX-xC2o* zNVf-an~{==ETrZJDh6uD5s^otIL(D}NU2=4@tTRGY4udg#0gicOn!oJ%6GL?dmshr zrO?JFB*uI{J%mw)zo_|6{)dv|EGtY24(`jZF9a9;6`4O7c zH?5O_YCuG6i@eK&ayGiEapTic(^+#gJ}psyD*9CP?DXx^`(ZQfCKvLhu%+>-3iyo{ ztq(sRWvDes`iVuy7U1M;cP`!ORChV~d!2>s6Dh2w$0@L{(X)I3iY*{QX%~?IL7jS7 z&sV0P2Y{ky;ZlcQo|@k8u}A|>-|pn&dcvDiz1KynaOgquj@pg`f$JkJCRAtC z=y96?+>%umCF_VwJHA7L^sOB(x^bK3-+#m{D6=9&_9*g9;%u_bO+{aY~YMuUHQ zZiL3u2_e8;9G?oq-elKb0>5m}S8@r4&Q~^1O$@BvsneI{QUuOcZHv1XVYnA0*z=jQ zXg4ifeczzTssJcW8mV_V!urTeAZKeZK99eZ{tjvhd%iu8~K93Vim4W!Y0FR0B zc@ud|iqD(GV{&}nWFF)T^2m(O%j7X7K5q(-3*z%G;E@%d$2M-|)cCxqJT8pSyO4(y zpXcxh#ko#uYh`wPUN(=5;`6wAvhw2iyo-6{#OI;0S6&jIcL|S6WPIKyovo#px7_XN?Jxd(W%d=Q3{njqfPeD`tdU{tC-Dpg#Yzj2~7ELo}e-Cw$lRhLKOX;hp)2)e`!OM!_a-n_}fmg2ajBpLz-SNX}z_ea^dK z0AD-eo2N!Q*X~r0uvf?Y)w=W^u>^nley z5}3?YCI?!LOo3tOb_(cbrnv;Z*nc=k(;dpM2*s88B2 zm0)tHL%NAly@|P;g~g~Bt8Tr|Np0WZc0hD7>rXzWYL;3%NFSYdu<;jMFv= z@S>1nwt-rBn^JY7L|3W{8w>ag>V_{H|G6b?+zkX~d*6&pV zv14HRRkP%!j2NNpS6uRCz%VkUb2{=FV6jDF{D)LmqMEGejcwqWZUgU7+g7lclX%j) z+>4IS_(`%C`=OV0nY<1p1mc9-_9(c8R7#bmG1sZwdeluOBfM4Tipo;c;Y;v~j; z;w0{ZbBVzz`H_iByaw%gQYzW8d#Wv@@X&fvs)@iuTf{qP7aO#a6_Hv2PAiXTl3(fK zWZ_|16Jnx}tGhMvu>Gq(Eosb4$0=D8sf7fRcwGI}ZkEt|;ypqo>AnX_kzqL_@zfG^E=sQnf!u z2>@3FG|-L{flX%COi4l5V}U0H=&5#`$xrosuc;nUDIe1Ly{1B&@UYpQU%@p_F1AXr z)f<^#?9!%FLd(XBCmeGniSxl$4}l3t5P1YoIk2z_f-6xVjO$ajq$r$iPI;Y`%?SeW;@vS-i$hjkP?-;1OE3@_@mvy_3yRvd zoCvdZR)VW!QOtRrNj}}8RgYSv)63PUC5wq$OqUu2{vg|7HO=r_V>|2L01GsAf zdHfcC*MHL8!vhm{b}WC}?(||_S$-1oO0f>}dX|M2>$l}YHWn3EcTdz~Q9E*uP0o_U z0!?d0lDjf?qhuY^zHvPZ&LdBe;HF$`4^W?eA!FKoRpB4djIvJC02mWVpy4*6wwdRbypX+yA0NNI_{7l{IHBuFbrQPWj?X>rZ zc?i<)_qtd4@jF2xa&$+ZK8+elPNC0?VzBGsCA2aVed-fdH!7z+9AfQJjN^-yh7Zv` z`mZ01nEhn#b^DA0zP;%KeV#f8bv?j3Jy&4|roFF^G=0V-OqsNV!dW)~lVW1`+MO!Y znzhKVJj$nyThoQ`LNHs+w<2Rr9T>YQ8m9&9|ni`PNi5 z-h_kiX7d!1|dA-nol1tjN>DD)58=H4I%SqjY(J!xRd32gP%>Y*H zr@t#yH%-|a%CrF2IEZnzd+$Q0X0MY^cemGu@zQ{?+9u@Xo*n`i2u3dz!$#`fq($uZ z%U9<-cgYFpci4n>ft(MrMuLH*dWQL+YNv!_)Tkz0LKq z$rCFv%%scfb4-ru@~S(0BgwCmc2r)|)Bijz{jPwfH(xT#NcZUXJgt0hA{1rBUgD1p z=XP>3Lj+R7Elq)Mw#6}vmiyyndSt}Qu#T2bh?g-|l?UQwSVzkz#>=pdmQRY8VI3`> z952H=pdmQRV7VI3{MAYO)bv^*>u7my zybSAT`LuW$5>WoJcp28w@{h;Mu#T4J#mmq-%Rdn>!#Z02$#@yo(elgr98D)R^fgUv z`IDin(#XB>IhQjcv}@CdJs9qY-nsMxxEx%#DEVLBdY?B4yF7ME0=Gy4H(vrbhvMd6 zPJ{m^W$wWLCW*^@d&;6uOqp+lZBOP4H<|t0!7hnh^T();s&ZGjCOLGcMmT03`^6yd z3d!|GAJo0l5(hK#kRy=%_IJ_@gz55i!(WZcBl0B%CK>C*Cv&%>##}33>mfm!iLQyv zRIY82O$4F6KCB0uIXqIr7FSqn&#WIF!LZT^pc)JmBv%Ea zdrF3;?OkzkBKbLtA;hezwLvQvGtVwsNGU38Vd6mY!e*1tz5KP*T>i@bLP(^Ud(caU z?0sV#!>ounv61lOVWOP!LGEk6QOCiAzyEp{fxS5PLlJPQb{qmOV;x8gW%e|M+c9B6 zSq)=acwtp?&k92nXmUhH{}jS=H~Z;-oV<*6hSlXUT~qiLRr?8ZH7&|qJ6h5$q|INr zplZ>gVnYp1EH1#8qmF5TCco@ipgqg_=8r!IQkj7ORP`bWw8IGD8H3omA^U zM$-&FqIag?1U%nNCQh;F5Sf_ZA7CyE>jU1JHuG;;Ku!MUi$cOJ?0jR6@(QbxQ!QHB zPuX>mt{S|3i_!CIlJ^)Ag9NLEYLfq8;X0pzdTui`rKU&8g|%Kwo~-ry>E&s{iM*xh zUmL!U7;!WZ{VSLIqc?8P&8T1B3aNwz(a(unnGvknRX)4x8f2A?;xmP_o~~xz?ENvJGU$# zMv1GEPcs;>7bN;rqcdUCZGIaDcFOzsVB3vJ1UU=P+eYfYK6*Nh$kuPb{^TWhlmBek z&G)uJGA47PhZ`GP|2t^34TUhNFC*y5pEa10^~o{yj4W-@Gg7loxMk6TDwtbUQbt{yJZ;r&bb0D@?ONvn;uDONx!sL7-#1VVbt}P{f z{Jxh0j4+WnFL_a!Xc~JPu6O@*>U#onMHBs=HD5kURK6z=yeoH6@?fc{&t1NSd2{?lVHVksx}shF*H^gFIZSTaDir{d(%I@_-84m7%|}4~}z7v%bpE z1B{e+kfpsWoCwfpx`jG#fvUmK|C_5!!y~1OVen%GW&&44)i+J6YE)9G+frk=z?x*2 zNy%MKgNI|iPJ3JDU!5MIvj!OR7StqvVPnmWrWKKF@o&2RMD?dshaNPW#VeTG%tt#O z0J_UhTW6`yl+ttatEv*+$!{3yPy*;T1TLvc-sEDI?VNfkW8B~V9Y1*JwgRi}%2>p` zMYf2lg&If+<@#*^0lvKVdfmzH9Sv9aBmrsZP!i||T zlIm7@3zO|Ov<+J(1(URp*B<+t58izB7;@ik)5UgOMZB6rMmSQ-FsURYEh5?VCRvct zj8AMNYb|8@65sdvn&Bt;RcrqM9WHQJsA^HN&qg5ex#|X?MaesDh*_8SO%yc)8cepC zVPnx<`aW)`hAA&^p-~TM6Oo+k{H);;(oL25J3rzq+U;CC-^_}Enq(Lmg*m5TU`FED zXr~J$SJ}26*Xde7>d@&Ld5(6v4j|j<)DP6@_@tESbenDYx|vW})aeY0v`(kY=XE-} zw4(4#)Qeyum}m^}Va8Uo#Nvkkt<{kUO&M`dv&7Q}BzRh3l2X62{jVC`Jo&pt=k-7I zi(IegUA{&{F%_af714Ukk2o4l(d3lUGps&sXJiZy@BD=;6>B0@5VyE3+kT^t&(Q_j zzO9=H&+4{lzH`=|cYVSB#Id!fmoB?qJK^C(_uA7dZ*Te@@3~AP!Nl;|)3@LGy?SFN zdUoyUTUXq^ocFA?@7=nhVHxYD&^32AEL*;I@b)69^V73~v`C5@PgRQ6;!gnIOFv6FQ@LF{?v73_@;hS_XN1x=Z za)8kwD{&5cKc(zq0-pgqgR=ZDV^71y>nLvRl(gdl8ZHZ8#p8a={OlPVa5lb2At#*~ zC_8P%5y}ZBisb{872Tdlf+j#!a$?;g2TBQC^5F?18WDND)DlE z5Qc^I-t}5;^mJlBuSGY<&QAL7O>nkw!ulWdpj8kU8F|&&dh?{NS3{Ycn7nx+pP4o< z0rPi4*Q>di&k~-Y1bWeTsP!@>^I7d_h@R-nYN+U7TTaBk9Xicdm^f9(xAC}b?FE`+ z$5eB3cPP4-60`hgseT|kDNgmnspBCk8i?+S?&rQRWv3;F5`hSxGurq8>^gTrbVu|( zHUXcbuKGHkm=S_)tUXV{wi6Cldv{0A!pvaXtVs5A2^tl*;@vdRlNaNaiF8DV%-spf znFVS5)m?2bQ2NWE=zB&UUhro{62sZYbXedx#r9ngJ;BEd%~w7HoL9;+ce_wtk3;+9 zQQH~S$RxrNO{$UCzNgcs97xZJn7e|5i5De^H21~PQ#0Vr2NWL2mUo^J#oZMCTqrsi zO>#Ch*j60L9!}8ax}eTTV{`y%2>K5|ejr<0b^-Z%zXAa-I{1Yi!}BAE^kwf)c_eXwi(x-MtlAFh+RYB?Fbpz>B<28io!^t_Rar+|k(em-@ z!}R=DePsR>_@1XzYO9%^|2WpUKVJSVm;Qg{|Bv+iDY_rMC_SHDU&(yo%~IbZSKAi5 z|GLTS$foqehe^g<8|M3s&wpSRwJlfR)HM5Y<3Bswn26V)8Z1iw(_CX7UWCr@G?^A9 ztM^(f@z`(1GPJuocJ^0_^i5fJQD_ZD*0v?u>>N9Q{$S}9PLJL_O-4KHC5X~q=aHg! zH-J%QNA+0>wBVe%(EF6nf4zS7Hw zyiwsDl!{bc=0p3Ou#~4TiWnc!zM@Jz9@Q8`h^>t%x3&2cwei-s^=Qamea^7WK}B@v zIaQH5>DRL&$t!>G!N}v-i`e>d*8S>20_no-+l)r2_{aZA+i1?ZzflzMU*p6K+c74lR0*`%MYqboqVb`pCDx)om3d^&B@wbMCOxIVI-*Xv)i-0 z6Wzn?8|(TlnfT@YX>OkHLD-u7+u8Tg_*c!|H2VS@BSC6GKI_Vi6EiB7g4ipJ!xg_S z+}AbdtIbiG?dDr|WqBd@j=C%Z9q0E!!R~3q z=+v_Ol+|cHFBoo$f!uadgntC?0S=VH3YMtw0Gy4IfJH|SXP>>YOlzXz)Tp;AE z!qWFaNZ%F+#NT$C zsg-f@Y}BA@j*nu^Qu{_=ur77LYto#3l%s6KxSNr(f*|W~Hp{pP;c%vllTm3sFPuVL zWges;b9ag6s4!VDawHD2lL3&pYJxIK9IO0sP+?PJo<9F1Ry4(0g*HWiE zYGD0O655%SYqYKmKVl6bXPVw1&eTMJUvXrxwqxn8ajWvqY`EE#?0vu7h^j`Dk^a zsO=z&k^He}s|oSYR`E`?b%5DQjYu`8mqC3#+FTbcqs&;Gv(j+ROvkCgLZr?m@O*p~ zDKaaGAB(ag4P~iCS!>9wa#0p5&t5s`HOcHXLDKrX+UHxe5)LkaHE1Pg z#seH^4A$yY)n|>RGn|GnPYCO2c?qu9N)cO1y^-A%PPviWo-WtpT+&#yhuxl@lZG~A zG1$ge-xf!M3jEN<_gcvw$Q(=UyJ<2tAo1~J%4?`B(0)`y1&B8&;psB>>ZSM7kPca- zR-(M7dPjlQN&kG@qwSR>*;sO4Ps7|RB;KfCTg$o?QU^OQjA3rI>jY}OfyXlU`82dW zLTg6|<_Q2-4rWq8&1os58Xs1tq@dVi!d$}yGpCJ?H|qPWAl>oiX-m1fzx=#Y=k}N2 zq3<2q-%T2OXg@D;oP;{IUx5ON9Wl?ix$m@eTFjLOvyK{%Ls`$HtJC_LWh>2fcvPbv znG&`NZ`#%USXG9^u!~5Jx%p$MvmdXpsH!|v`7SCf=hlxl%nUBB8EmyKwq;Zh=U`u*!Der&0HJ({$6if9VuMp^P?NovK*=o5YLCJ? zD3rPbPEOppy{AP5ZL&^L=MBmX8H2x8% zA&z_+*ND@QW>1P`@6Ybzi@<0ltn#14l*C#0XH%rk!lf2ror&x4OQ6%Bi4JjCuTn{@ zV=wKhtD@ACNvFYvG)X;L%_@($UK^*;jW`Wr#A)0jPD2*?)Juumtp`1i2z5FCDfGmd z*#}^3F*d6wweG=GVZN`C>ugNwx`!frt3x5J-$E8Vi#vH}P{H+AUfy%jp{gM`2gG$` z$U*y9hWEC5T`gfU*skWLDqTIVE`WLw=9;a;T*`~}jfA>;yOIPIz!BggLm|~>?ZRRR zU*BT>GUuRr^TNFgyJ_-gz3Ue2E&Ryo60u!}*SDw?E1RT$&ARb&&-L=RA!RZ9aJ;hU zS;~54`G7s|Sqk_r%b53A4{bEtT&!mZxYzn1q2X-?J2jf69S6H#Mivgmr(A!ZHY=Y; zNY-v$Vc>;!9$U1wV*zy2!gHJrPp#~=mbK@Uwd%EN;Y;UwhI8XilKO=1AC^%zM|CKF znRhmMF1Bv$iCV?8c`^47)(){OlEpf{BJw$7ir}eDh%9YD^UTAvz_zM!>}e}aUz*eV zn=@r)RJFlypZCTHDe;F~$L?Jf5E%0zPZ?XFzEf7YQ z)nutkKK3JHt-!(d$8IbIxCpg>{1hORh<#W&+IJgb1-Te%lHapoz-pkekDBB+Ol+{- z`m5K_W0dmz>?!SBl2IhBRTG4wYgXAOEj;rc%afW!-696w<#29ov~@x&xDm zZrccxU}EC>#PR@NuHV!2s&L%0Ao+DrNMb|%&&ggn`n~DSTTN$?z||y|b(@Bbt-;x? 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

P0#7~@ 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%0D9fN%}A1 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 z z_?&B-3aQ~k-WntPivo=MQ8j8%h7R`J7`*st2h?X5Uk@!kQ3c+ep>nCwDmb(GoUhYk zB^2misc+$W3V3uQb8?}}O87D6#iYssD!BSBsi)?h5(?V6ey-=PMf>7f=SxUOG09Ko z53ZquRzLGaI`z>(kv!dMFCVUfox4Z9ymSxX_3Mm%zf+V@A+uKh&(qbAQL)3Y%MWx= zpjWYW!AO^0g&+7=M?LiJ^}m0lmqcb+(IQm&Z)3>7?bN0PY*KX+XsNAe< z{+@@G&~bCe@Iq+kxV#)Q|8^?{{7T(wJo{P!pT6hZ8hRS_m8g+RlUAag<23jED&!l_ z54Uc#8TF5?*pX&khCDy*6T^YkM8)`P23|3{pby0=to0 zy%nHPg@4^SP7U7|>`X0@M+fDaPa8bsI>Pyxv2;SZ3few$the`>2EMEv^hWtW1@EW- z-JqJi5}G&2ecgGY7W~GInz6Pz+AAMB9A1q2-?`Z<_Zya|p?ar$wF++8 zKnJT2-y7X3NCUgW90p}vLHw>BP$q6;#^$VUqfz0?I6KXm}GnjJXD{csB4k z>b)ae+9w^lP~OdPLJ!olI%YUc@hhT+q1rOr2JhFvQQz$q zXI)Xk#~Lnay*8?$-KJl+PorK~p>DVCJC0}}XFXl&8r0_xg`7PZ{x8}?M|xB)a~$RF z)`ICJJLup-!>##qM*`%Xa((qZca#U7De6uW(Jot=SkeEM0v2XG7~&MBgFc^pufKhx zfUQS61~g4qg5SkU0lIepuYMF6c0Wi9fB(r>Fua`xy3ZPwHXQZy*P-hSSA!KWcxB+g zs;SUW=-|uvK?oAE!zI}H>^Lc1LIIfF&-dF?07j!B1)f-@j zN9luWzo6bwv%tzWC3Ud;`19kBXDH#)?>qlCNBFP!^5FXvv`f_oKK{Dkq=0g7e@}UJ z6z!q+D&g=Pz!IhJFCn@efr7$bnoNnv0QQUxbv<2YH-VJaa^-o1HPFr zGEe@-dA6t;dElZ7daiSfnv0&rd=vUDTmM=M8&3GXukiux=|RW!T~akrbR_*j=hE9vRd7H*K0Nfa z3OvWR+pc@AfkKyNuPT9dxu#I+pgV;DcG*vfThIu=!F`5vWG#SBPwTsWR4Acn(TCAf zN~)kp>q4!gzbar+lbdPDb5*co&7a$uKTz(T-+gv~Rs-!8sqA_WRl@p*kXj>E4dqUR zES)|Z`|GTm_Ie-k&$6S}o|~hB7yS#K{&7qL${Ib(9YB8VKYCurFDtarY|x{Op_LR+ z!l|lqC-SlFUAkn>a8W?flhtd~KB$1vug5M(LH%H_&ufSL=%0ArOXs$zrV`fFXwYu- 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�ssxGS$Hg4M(&$)OREk;J5h5t2 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 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/android-x64/sodium-native.bare b/node_modules/sodium-native/prebuilds/android-x64/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..fc81f1cfb264129da875983a647a5a9e92aafed5 GIT binary patch literal 624392 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�cuVXvRe1A?ZGNFn%r#5`@=D$1^O7 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

N^ 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 N!k1`!Vr1LH|1T4d0|o#9 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/android-x64/sodium-native.node b/node_modules/sodium-native/prebuilds/android-x64/sodium-native.node new file mode 100644 index 0000000000000000000000000000000000000000..1a0243ed38097980e175d12afd64c36fd103d33b GIT binary patch literal 580488 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%0DG#kTH0p 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%0DCGkI;!{WGth$ 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 !$X11(OGp=AVltHEz-rV7U`m?r}^_bxfWDEO!FS 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 Px!T0s@RekTe0>s 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


b(0j2JvzU|g!FfAum3XRfzU2|%X zJ&bM1Yfk4w-+oqEz4~?>{EY6;zz^={9XAE}c1xwpU+9(Y>)MmdA$6}kxw?M}^b$L5 z`z!tm-BsThM79O^qn5&=xNo#{zS})U>c{>0+^6)AedoVqe3cwuanDkn1&!#le3JtI z6sPM2=$qg7i4>3Z6V*2c6>oH0&&}3_(eYj8IVVg~y5Edm`ti>{*tO(yqa_zgSx1V) zycKfhoKGF;75MncJ;3|T5X?jGq?TF5*d^`}Z{uDica2F6A{X?k4cVJ-gL%Ih_&eyG zIuiVh+~dwObmEDe*c-xMzPn`Ni8yS^iTzT3Pl8QNW-LADUH%DrTV`r~f1Jz$#A657 zBwgEI7e;PUe>QS^%J2t|1e^APMN7bx= zple1eSQHj4k~%56DtYpB@MoR)UJnjE%(D`4=y|6vW1_z@*XYnU%r*G)HLm9+;E(JP zH~1rahrReCXU@qUcah&xVZ_7B7d48j+1PU4!uwFevhe6>FF$7dbZaXjBoZx_>^ZccOtG)iwPJ#l*ldW*ky z&+u^ZWE}KnPE^P3%2%ti_NnzJ?l%*9rMI&^aeE>Bu?_be50`&$=w(iH{a@U;z0+sE zSzqXsuijzT;8on-n0&w4dyKiviGCTr+jQK1z-PbNK=^v+L{;4G(a|>egt*`6ow9-W zxVsDC*PnQn!2zXx7USD+>RaXlel|+eBAvqeNu6|j=Rgn4ui%H$HZd%E^+%C>=S## z>ev!kJ3__GFJg!4S&ttdy@BVNF;Hzf2GDc=^udk+dcmuGF){DQmG95?+Ex3MsQ7A$ zvCVfk8i674nIAZB@7z021 z{2cA+V(AN^QTDl3+h>|sdWMX*KBKWGv9!=<5=)PRUSjFT|C~COJ`=iBvGh=W-;l&# zIkEKbr#W_12)$n{E$8akc64}S=}UZK>E810o>;mi&VLP$y~aL%6HCwW#?s#lC?6)e zot>rgL3CUEik}VLWpo}J+GehwpRW9h=zopLQ_+8krKj-RbqO{g_GxUOGQkF9O-{0S zdjAL3`fZ+gTJq^bji(*GXD)3-yP5Kq@hE}1Nz7Wz!$>CZwh z@$@^dc;ac~>laVI$yg@N+0Nkpd^?_Ql5+!fJRJ$YI>XWR70`%IOT1evbKJc{os$Eh zPWh%vig-FAaoKywYrL#GaO3HSC!UUk-#INVo=)U1@$^HiaZeRb*U%?#4Ix=PZOK^K zaZ%i!%M)o&7f%m{CX;yjL;9Q$Pb;}6i>Hqk{wd<=UGNLp_@wrgt1;DnUdPjsu;rd< z^bz#7%&zJtvo!IvlADgFmE3eZ9T7jCDxPlPnW^IGr=?Gc@wCRGgm^k4dA*LO)%)TD z`6k7fsE()UixW>P9n$eMXYO^2rz2r%T}k3;_>5P$XX5GQ#zs8x^iA};%;-%*Je{bo z5>LO)8t-J^o{ZPkOHil`}X9u&?sHqYR97GlJi#+i&l{PEjMwM8{=L8 zz4zObHxj=&7)30ymw4AbHy|e_^h#GtZ2m=(TNcB=5dOjL{HH@NbN!7ktE6^40p&ATeHb za{YNm-i0+H^O3J*=Go92m2Z2_n|KyF6@zKLDJAFVt~c)7#*c(AdNTvQlH-_lN&&ql zN!7wdkEmC4(<9oHO`}V#=u)9qm!_W`)pHt=@bm7OMo;iOiRlt;x+=~20!E*_nE7>& zJ_%+j8vX4_rBCQq1?@(+%FOlMvs69v@9ZU)HOk4pTac({HR_vLqdGQL2ewyNxOMYl z-f0=%@K(?F)Xi5WdDntb#%|)z!KW|Ec53*xft(dngq?Pg`&TgswDA{#?J~zw3eRnP z$GfKZ@~6%By4AM|&`o;|CMR|_G#kXv1wHdy#prGY`FFKTXXfSPTnITEchgJEwGKrG zsNu-^wBh=D-D>={xo7$a|KBo}!?FD?_CQw2T)--u?-|lR`Cd2QxR?GFB3Ct6(CF%Z zuJms|G>ta4mCD(@^k3F@`OO<1L{5@_d|mp-xiRhJaMHh#^e+oL9!WoT6`og{9q1R+ zd1NH~%K? zxo(+XRC5YWJvcY^Pv|ztnJ-=T`$@jCf4NoLy(aA1;q$_qdGy8bF2fGxEYl9^PpY=> z)Pje{UVv_!%%4@-yrnMLy%y}AW%`8hC3ZaNBkH@56u zo7jT1yNaV&k9o8S?fbPbxwa(U-iwb!(r#=GnRgK{sr3oFzrz6{05P88apqBCKEfK0=?Mz|7=fc z=XK#%-2H^YKbf7+mj0!&^D)xD4D388{lm_`E&V%;cHW6DWn$+o(2Jd~q#vp5ybZcc z?fkdG8#})o-l^>T_t0fx=bMBtc3uqM|6lAJdv^9L*JQhPj{V2iV+XfnwO=0cy4 z6GT$w1VW!lPB0aEiS3?k$}A^XwcC>u3>oC+1T)>eXS3j~bAl#sts+%UfSe=Y-Th5Y z0M?9&>YPCBF?MnS_7`ombtV#?HBjXQx1c9!asrQhljj7l!pBd(y?LK>Il-IUn@LXa zC+HJ$0wv#MIf2k;k`ru^cOfS@5Ba9b3F@KCBqyj6zUa-#@IBO=poO`5edZW*8iU=O zplpzeuL8twwLDMz&p2I5mlGI$(m8?BC!G^0eUh9&(M&kXod3aD~Gr^E!pch^E>7O#gkWu?R za`$4$JA)m$Pl5Np4MUzE;$p~#p$bE;7TKn*D|qCa97BE$A3yo-r9B;n`~{j!FyvY2 zGr%Lu#PQ1Vd#1vgl17d=C{v{=C1x* zPF(@raxi4+Fohw{vlq0B`oP`=y_nnY&G+2`>N|+>F~~6;%+)MvA7OEptQD=UaMvPD zm9g`|kE>```yrUa&g*U0_SC);CqK-Iodb>1FP$GY_~wUhUGg~S+Y9wtB=SG%R?0_B zVlC1xazW?Y%lsza7rkkfp5O4)ZV&Rl8#t?UyyS$`ZeKCDJ3Ysd&&fQ;u9aUcwV!yL zr;d1V&AHSN=kTqvfU1EQ+?G8kiZ8K(-VYH8kIjwBI{jv~KBzmt4a{dO7a1I4Ecgd_ z_{re_?dfp*HE1%yanYGfa9rp!!STnT7kfPGkD1~4=aIMLzfT_N#)8f6UYB}!e<~cu zFYEfS6ALQ2ZyWB`hmo}t3oaa?aQq#YiH{cgOnme&kACC>4^DV} zbkiuu2mFlZ{kwcLK4N!R$NB17`)GBoeYCpPKKdVgZz+wQ)w%V8IsdRFJHO{B{w6(4+$&L<;MpV0ZF(k(s5 zv|DNzuiJ6S?(oVnDi&1t;;SSURM*qTs#vh-FzHzgK7M-kSK8C*Sv@qF=vfu?ndq6& zXQF5KLoa$ZGL4=+09__}wo3S-XIY0q&$5!~*|p;wJzK-`{$J6vA0Gvt6-&+$B~--kXZyW(5h#?HsUNA~-Y zPsG`Ii?hdi4mm|Jdu;5S!q~UYDU^M`VC=P5UbKi-NrB26S_U1uJm~Nyi#+Rpn?|0@vldCtkKM~Up<}%^xOBWD&oklospL7U(Byu}<@s8nE6*1vD0zPV zFv#<-@bHsoFWx1cJm28nOyv1T=rfV0&}Smgr{rCb=eZfm^Ov`H?DH{q|Kbbq`&9B= zcU*dT=1=S<&(48|ZlB9#41DY}LVG%S-Udx3^1K52Oynu_naDE?y~uO>Z!)vbo4xYv zHOaBhMezGn^6Z$DUY_eGca!H=M4qYhcaINEo>#pKA3vFn;eDb2@y$D@s5Q>YXRkiN&82#s82zfDX+F`-tDZSY+Jv5o<)<7v1{Ri>Y;MCUlwTR=)5>w|)lS zL)EQkZgzZ4Q<(iLCVrp7Gqi3+GR)IC`@z;NB}4Lbty`R*;pkRV*wro0`*w7zDeUT2 zQ&{WPWrs<(w!z0wxBf+Yx^wCN1dUg>8q(m_7U+#`$v3CLt(3YY^j_U6PlH>P(2H)J zgbt)SZ?g(IuWm_R(>54cnSz}q2?A??7xWuFK&FL;( zZv;b{!s|~}`^eSx%99=adXVS%=~oeXrOZVo+wTk?=PU-JU*EKGi8B}N^EMTY{;r66 z?vPW|{s(p4bc#Bc?z#Tpm48m|!Kvgq`H3=4J~(v+?dfvzSS0bk0s4fTT zoP5y>9-H2Msx#)N!AIxhaW zd(E}%0dMDC8PA#zE}uyq>9^L_723^ChKX{TI9v< zeQyhYS+ji^bLO0jQy?{zLicykrDo<>1NbaCheVB)XK#|yyLr;dT5n>(Xj z$5}1dZTDJ;yViM?@CC23;A`=n!(G*(+5l_BXNRmk*D%Md-i^I*@;&%0@%{LXwOpGq z<#)~uvd^)X|?mi=Wm3ijVGu2r~PxcF}SHEEgYENeJx|B!% zlh>t2$@uu-$$7M=%abNSqwu7Mb*UlHC*(;APmOD@%Pe@%VOY4)P zEBFan^AcBaac&Y{mKYKuLRVU4`Ej|~4zdpa3zfhH3fRzjbN423=u8QurI$Z)t< zhS-Xq42N$^FT;o6_ivNo31=x8{vrF&eELlKn9n{8r7xb`<2u!MRm+akKk)-LUdPw6 zO+6m$TGAr*_+oo+pv2Z=;bk2JH_7?(sseke1bbM!^WOi0Hy>-fDLXsbV)S#byFcqZ z?)^X0UN{myT<$7MOVf<=x1|q^a{=SL%rnlVjB`6W==F)B+va@NZO=MmzB@d}Qv0>k*lcpY z<6Q}FzcDXzFgkwB)i~?(UAb-&e=p+<-?}hkF6S7l>(#T>`L2KIn;f6lf$wf@A-RtY z$@|+fh}-}EdD_$A^8#o@1}5H-ePi9@9apDMhdu$H>r(9>5c*8;IS+cl=O>;|?_)oB z&XHf8qLgd-RD8$ z<(E9?YT|y4&vEiQNW17>V&6rFGsWjk@N)3EDCppG88+bH^D|j4K3nd$jsK5(H9jjH z7JQyWn;&i@zVkd;Z#u^6Y;9z{X|=oF^g-_T)7fpbr^DxRX#8;FQQEz@kq)2ll|FzQ z!_YMcpBbBg4?fS~m=2 ze1^QE4>nv+dpdlc2#w!3hiUhYb2@xJUi!c|*Ef3bnQ<;n#Ajk@(QSjzLmM3XZVK1+ za`Ab$JLadu+i%Pd5uZ8lJD~9SW*PrOuFs|uy&-kT00VtAEP^7RCSdR9UF_YwpSNsZ8vL2D&Xfg zu649upz11@b;udgaz@6cipx4S&du5`ajMiyz736xYt09js=7)GHOY<3v$nTYWO0s$ zjeFj@%3aXcRDAboIXm;79936Q<0@y-?O!Z)m8Bi6CGLGfZ~MIP8B(_?Qnkq}&e4E> z(4{kbysv@2`N2^Ap66Ig%U*bOZtPs@jc3U|cX)pgP_kJIovL}RrC!56_crulv;0oo z!+y8i*p))VK2~HB=S%*JcD**DDV*=_x4nUO@g;J0T%w;T=Uor3S%QofBdbNo>|$iM zkaOb}u)d|YS~IU?|9nC89os+h-Jf$*4w?(ks^H}vtqyuF@GC9y@SDsQxL= z8)*HO>G$y1iSj#VUUjwwYCjxcb+&)YuI)5Py_kLe>U{5Fm)?xsFz#z+-~UF&PUgAf zoa|2aZEvBj*6QrL9}&wH{&I%2-gjRrGNINLe?H)dnBjY{H+<)_{~x~1#FQm{sgF@- z+QnI>+0=L5VyYYPY4ZZf`KTqG z73zGGGYB|ell}2lXA8bv&b8}<%p+G@>!t6Ccg?`)X!Fdk4~UL1*I+^p*DcdR^%84} z?tYPX+R)N9L$KdZ7q`9LwPXM^hZ93?lkxWPjg_=7@?c02I+%zd<8zaR2Xt2 z^aew&8QvX3ssuw8+t~0GXqQo!?R<#yF~q(XxR|k=-^w^^seOS5Tc&|6;L6T6qf>6Y zJ|Ft#Z-wgr-hh1^t+53e+Gl)VgD>0ntbk7Kt^cA2Tf}~YhG%YU4mA0Lx?{^?+8u1^ zObrYj;ytD zq(J7imScMr0nd4(ZXGwky>gC!gmGHdPoK9xtvikcp)2#?NP*x}VR9UKyBB=Hk-KF4 z`(V=(8DFX8gFjL$cCdt+;RLYc{*bj@uteswc43qK)>2ExCIj*}Hu)BKFd4epQr`uS z1aI2=XuLULaC8CVBkyi7r@>&3ymz%3D;IMbrGH?~BI%!C4(}{>KN`%DaqgtQiR1hn z_bhv(YsQaw7TBWvy_`d@Y#z+f>yewnV3C~R4b5)(PMn-KsA#~SW6kxzqoU)@H5id+ zuEB`0Tnpy3&F0)purLvGve1Dyf}>*xKWn+?cx@XTJ&OCh*s@ICu{kxi>@ktePIUB2qPa3iDY8MNPuUZ6sO~rRqd@_Et z!j_2SM7Z)&FK2Ir#{U zA;@JjaaHSVL!TR)1)YjdX4`zLl#flsCRg_+2;T=n^}m4cvK(vrhvK^(Yy$T*HWfjq z&dSx;RE(e9EO^;w`;HcT&p2q74OZ9`H{K`EuCa-;VBGJAO{QI86LA7@Pm{Mc(4yj= zOOgF0=)e+mVKF+fh`8tCT6Dz3J?fjxPTVtLqQWM0y-s4FH_$;90||Z;zle_;%rnb4 zqvvDdm8S$-Z!z{bJoYd2PsJy<*mxx}Z(XeM3VgBSI~TA141F{6cGog?&3RV+vi`R1 zwi7!kdv)f^hR6N_E&h}9ur(Hnyo2y&{M<9cUEa?MZ|2G_gtx?0mBcA=*~jmq?xxmMgI!Wnl32kTPqd&L^uM!ZzH8sIzG@e9 zRqYd*%d57cZy?vc*m%xWoD~Xof*o~XVu}+P+x9kHgB5&ZeB#fUa&_zhc^B|^H1DEf zDvfU{rt-+92D%NcT{FH1ZzV%ws$pEKXM$sL&WO4O-)^yKSl=;Koin1^!L+`n{h5i; zUWR_o&}hJ1gKwXFqWOStA939>g&3&9*5lLYL)rgN9@?S3eHEt#*z?j>()#BV<(x`&P%yZ)E(`T&}0Tdzxp@NDd}4c*>Z zY@Y4f=%0oDEbO0WhmKNlg|aU>KP?ZrDV<#C?o}85emW&`6&yUc<`Q&h3A(fxomzx$ zT@2nWWRBj!JB4cw-sxB@OZ-3BCwMm;K3fFW9PAkp+ro46|K(zj#L^0T^VtfCAbFu2rdY&ZIPUDhkMTkXhUzodxt${MdEK788gOpXN5~=EQ9Z7NS9X4whWyiT6< zrsPT3wB$+w6|)SFExVGKfn!R8*YXP~(Td-|Dcu%{2#N$OfIZd4?%Sr^J!`ryVw+SApw zP8GSyoI?-mTBD&)sB5YCCRttUt}C3nR$cgR_nVX_z(?1$;{AP+y*p-{bzMuz<^?l` zcju_O*7eAvhdHTdT$9(e{s2F}aXmnLy1LeD(0Fsw7Hln5PWn9bCMVT(Ej6ym>RLjd zNnPu4=%uc8*0ZVWTEBrVU0v&kLSxsp;^Mnav^(+Lz3%w{Kd0T3d&bGThjlG)e5bHa za?ixN*7tc%s=C$}<@Zlf*ZM5?NnPumU)nKPvbt7@@b~1Sr7GseX9fN7b*}Iw9{LM> zn?GG$t1g^jUF OKw3&r~rOK2k6cWqWFm)}kCZ}6ntHDA(@pY{@U6i`kCD0sB z40#5Aei*Wg_H=cv-$CQWkaTseUqEj#MAxRLbLH*ZX*e0hqP?mN&+ zOgBO7BSl^7N$AqmwY~|Bu4~0%%YW1EV9PV^`4r!$-GeQ4-rTW=*bFQe7 z^Sn=6*P740QrG(XGpXxZ7ebdwU2BH$1xKET@29S7VUq#yDotIBbHOvOYYmeAfjN&# z|9V*08pu7Kx>iJDFO6HV&N6rET9NR!QKqiN+4Un#OcxQ1=xJT+ zI54M-7z;duU-!CJtc$t(__|h{E(*4s15FR>T6I0i7k?rx32XP?dj@To1pRL zi|OiGk3#RQYfY9l94YErLZ3-p>t5)kt~CrDNmbYSDs-9DwQd%^4}|Iu{%`8K)&tO` zt83i=jjn6OjrSL5*Vq&ZzviApv5IzuO?LetP9J($*HU=oV3S+dQkW%qUSeJAa-Ny2 zu5~)UWm4D5gI?-dPcU}r>RS2GW>VM67T)BR55fD8>snyfq1Ltjbcs{fiey^X`tv8e z3;262?~+cP zoJy!`eG}Sbb*-ED%^L%yt7|QRUSgoO|4Cifx)i!h>RRUr-&LXdKfpItUF%Bd($%$2 z7hW0Ewep0Xy4DjsJ4szD5+3NDha&uST`NwfGN^0$#$x3Db*buF0iK&lU2E4t-V5xx zLu8evuJsnQnbfsj65i87^`-FMaHw@HaP3g)T3-j#bX`luEV{0xa7Wj*6xQgvmck&Z zYvu3`YRuibmckxg*Q)c>wG{T~x|YHoUDs0BlcKKW;zo+P*5_p`eQ@LZw5O|U-3^W4 zMo;Tn*Fx{DYZ=@~R@WM~)8q4}yJymT0Y18}6=wq})@vz@*L5u=8(r6mgy-02($sw{ zcr53d_oXhJ&D=si<`%Nd+=6E;$91fbHJ95PR%zbR!F;Ad#G!^E!^9^=IgG17$AMXHojkv-RXVs`>EM( zmhT;}wVx&Phl8NoChIEJ+O^~s>cZXE_Pg^+`xqZt(|9j@^JPCNHQv1K)EHFlIOq5m z<=fWGeU-}J%!PSt#063#W-edtpbDWF| znE#S^@8FvAk<&ct_j9S)JKsa%n`{N@Oa*L9$+;5V#?GXkHD21sj*rT`m%5%=82zrf zMi(CB`b5!%#^m3uVXn!e4`VxOWKO)I`!{R8D`VzkTaC0|EIyg~zI=m5)>O#%XUyD- z=)=9x*!n7^_?{9P=NrbuV>d!4d39?b{=9%YXqUJj8SV~mo8aij?ZOv5ko}j; z8%De}i2~-54zBV4?hkw-Qh$*1=hU;POUT|!=Hff;`5f;ddidqx${2?gr+uWG*St85!9S8G$4uVJocXSLzs&T)-}7jvQYKY5xw zN^*GSP{fX8j%!QY_vc5%sI;x zGVOKY*T$;7kh`c&&c=>QnG<-6IiOwGr>x7_b=k@%C-1I&ztZaWcAI_A?(kz1)p{Gn zcj0l-3*f8P1qS(!BKLfaJteaP{oihYelqKHc3IXYMN9p($n@>wNzrq-Cg$m6F1WJ| z9C;ml>O0OlTIPk{U=7Zjt?0OIH@m~rkB^=TeM=$p#>MuS)qF%u`8xB);EbRA^LKYG znFUP>JdZfJe?@XU{}DXIeiL=_W!lr>`Fd#l@cd`AXM*PsNgu%TX=;GQsn5 z;fqcTf$yQ>`MJm|AAMD_E}P=&-nH%-C-?I_jpy;UngY)iKaJ-~2I#oPb7G>YX8p-- zgXfA~to#f7wAFMfV5z7bq+V4hypgM+LQXtS~QC}?cGU_RWLi_eKorrp*H8-Gh> zJxpWbT)d0xL!}R^LiHQAfE7bDu4BuaWj=bXi|fOnv-QH}tJXf@E7W(u3SBxgXZ#Uk zCH2#5!1 zoc>8o?%(S?QR!~%5VB6Q?J)&g8WTw#AJTs_CFU+)gTdVi?^~b{zd*)`nd8$_0295bE*9eh4=$-&7Hp=<*dnmSl)9$sD2`2rfMEK zuIh_FFwf%qRW@&8nycxDv6CygcD_5tIra_UyZJ6z?Hqf}WjSqX{dPd(GK zzfotdA3G^J*IW;o8lA&6vg~BdVP_j_6?U?Q=?#39;PVtOcAs#v`Yt$eUwtd@DL(TI z-YLXd%4YnGUiTa)j}0GmE%`$y_UgX}#bckz=jvzj4B20ns2|tSuJeYtXErz(6u-~I z?EkG|oK)<}`^mRKsKKc77hw*Jeye8Drm`)BLgic=ih8U}BPtM}s1O&n^+ zMme#Ur9Z4`+J{}JeE=T3`8~f0F6~E;3~t!>4Uheb-aw(2;tB{(AX5$*Z3 zt5}j)O!U`XQ#2y>62FU`wD`ngTkWy0lW+fS=em=aqrO+imJjFij0bI*$}?KwVafN@ zWZg2)D3U!$%iZ7W<#*(Mfc4A&lg0h43vFHO{w{s6_HzFS`~E8S5tz6|_&+YcGbSHm z6J1%oZVmD~I-%mR_4Ld1U9~N-&&iP5f%=ylN@#`>NXXwSgrCqXmMwteai`O(#e_iM*QZ#CDC<*Bnb=5<{t z{5C6oe24f(es8~F<&%@jD&H>&X20#km3)Wz8u{%g>te?56sKQ13st;n4Jcc*zr$MJ z0sarOtWH^foqbcFc31VB+U&=&YGofrcD~g)YDK@vBNkfqR&Lp%x1g7`vLoj}FS^J& z;tIxXlH}p{kb#g>bS@S>GIAIdTgfY zd|Ix_iW;2i!*4-t>#{dW=zGzYPuv--FweVbYpjTrhOie)PnXdcow_}5XV>w zFS6%^I<4MCwOQW?*Y+w1b@m>0{^Y(Fhw8Wfo_>DYsz11<2z!67M!q5J_YD>DTMynG z(~$$evMlhv+KTq3pX#~-pGBWm+{5_xwr&M?mb7PEGgf>%RG&>vPG}0?Q?UBjXxnlt z%G&jBZ-HLgTd|$$3TwOM`QO)Vr5A-dHwLfn*v;Q-FS0tPBNO5EB6#NT`q<_5m=CY} zXdA?RLSF^{=Ms4D(7eZaXzC5kBKk!?pVoi3Jy2BpLwLMVY(=G?6Oex+zvWG0Z7}vD z&uA&MqESuXg6tkJ*I-MjzAlCDT2K3xa@{9XdzWr2KRVR;MRR>jsB<;f&FI@P>R*dIg;%*Mm2?N+_S7I;3@g{UT`4Z zN94qc`K?*}2R0w?BUpPcec`wL;&&V$F+6q~?IEdaNxh+)j~E_1Uw*fJg!&#kF#_v3 z?R@=3`T@SF@59TU?+)a+G}y6azxXf5M+}c$4v&2KE~oYp4TACLj`3e7OW*Jj`_c1D z107pb-7k=(&McalWo^n9+~r^OEO1xOJHobAe^eW||C-a6F=}6~YR@??`roDd`S zFMi_SawH5ce}^`M%R90hTvp$Qm-E%E5oL?Mi=GIc4hw;&#P-?qtj=B4#kJWJ`qz$J zI()KV?l+*37=46buE-DnZ!q^o!Ccm-c8KrB2JH7985_oXFO#)d#H@n3QVVQ!Fn6TF z#9zQy>K1~zJK)nGn2U`Gk6M0f8*eb$#@rv%CUc%`(Am$iF}I3#i*~U=X>a0h!B2&) zO#^If-7pYr9UdD>zf7$lQE!*M)wSdl?)8j6d!bK_-pyF~;_CUK&OpD<)CPxMI{D7u z^$br}U@LCDLE~xI#?znk>@vBou%Z#Jlj12f0r+_Fbh*CQi>K%5HiM^+@^?2pHM~4{ zy3mK$G};uNLN9oFa{})NG;f8cn&vt~qw(}w{kI>U-okGVo^rp)@@!2nczU|I#tsMR zYr)egp7y?S-Dh6yak{M>KT^oGVCWzCKAz~t@Ay|RG*R|`82SXXQa9=-=>v{+p9_eW zr9N9X&+2S#BR2@T7&?MJXbf%gt{a&{dom0Sur}RW*X}4e&z*o{2S!O(Tnl-`SP zIu)J@Ly4Wt+<IkER;38gcLy8D;lbHGZ8{!vumN20V#7fCxIr*eV?%=vHargBGGgz3V1vTD z6DCEU#10d2q7u49ocM3rHV}6w;>1I=%Y3ZCi5KK=gA-+AZJY>=Q#c{Ilnf_A%r*7GU-Ip`HGSA`XMal~UcbiKv6t8evilLwS6G1zzoM`A zRa;Ss%kI;EOU#rPAVwKcIeO!GD|!p<22(8ZrFlVXhVT%4XhpW)=Xb$}9EpjfUF^2l zihe=!Ya38h`#SvJD753CImAKb{1#`oK`XjI)3*@co^P(H3FOH&_IZwO6Z<@iYq8JQ z_sPG*Vr~2@wZTODY)~{utxPOqTdw$m%S^{Z->*lGOy!hst&-?350JH#?_ z#-(GcE8H_9=fd|b(HDtnmfLkWW2=4nZJXGt#59Hc7If=#7QZ!1zAUjw8+P1i?3g{P zjEBW@*z8)GiG?cM-}}h#Nn)XG^ikQM$(NC3r{ueHdB!T2$8dP$ zOTMhN@{KwVqmX-gS0f z9FcR9@0I&MS!!}yzMXusImbAB-b~}HaC;Z8wP5$~t{&w=$Wv6KD zJXPhdPs?xMY7O&xiFQnmz2sHCgXfX4im|R|EPZ3F-sh9Mex|lpspPJgPrmezKKNPD z{o9}MHXk2nT}J;*oOK%41{1sGtzckcoYha?>y5MC;e8B_O5PfVrYCXMetn;p*WYOK z##uS~c_xNCMf3K?Sp)t*_TD@^sw#UIK2?>W5(0$G2_XYv3WG8a0#ZpB0%&B2f`AeT zDj)<96cm*Tpwd9MM6n&a4dTElERBi^YBxbpY2fwBjk99$u93aYfc-G?!Ex5N<}=0t zuNlwm2R@eQZa%|~?>A`0c+YPeQU=90I_lrYGi~}p@gMCf!vC)wbBzb@#pbPz>$UlL z>syE?(3tBG=*^C~a5u%Tp0}>==N)tLd%4ZcTOYwYG3KI;hYhc;HrsWq>rc!}fO+d4 z&@VP`eUk5+vDJa*tpfwhTel((dEUCI$-H$X^JdIj`aeRS z+Ai928ShCJG}!EKK@-ndr=(AZc;3^ur@wOUI*anX#N0KA@@r=9dKPIm9h269RvKXL zdIEG0?6x^3O-H=mF==^-ZdW&iiZSU-zC+*1eQwy*3fa#Awm*L*;xg+2{ahL6uFD~- zfOb`yyH5D%SKHKz=H{+eY-)u(cijelVr4t{s6jLB-j4`3V^b^ArMc^- z0CBAbO}42!o5cN%5w~np-!OR$oBFyD4rEiy@vf;&{gc5@o4Uq)hE2WEc&1IgTcS_q zGi>TogT}G(5|l*uCtM*VMoj4x$7gKOLnwT zetyH;wJf{5zt@hgLY&RbU32hG*wN0=lU0r9u0xm?bM6WoWzJo{gABa(A;8@AOT72m zhF>{%y#Z-mYVLXg@tSj2VY6@tdZ4*$E%=(+iJw3VGQb|I0&~}8h^wic_%(Ca^?}A-&CgvW{c1dSJ%jXxtteDVzA&E6x$9R(xar)r z9CXvB1e&`Z#rr^W*AI;N0?l1N!MjH7)~1w{8vK=*yFOt)W4^PH&uE_y8Z@@g^>}9c z>@WVKU48Ly%v~F`hvw$4ao}&xFA3wEM)I4Dxpp8wQzz5b{ZAUTPdDg1?wT|4AS})5YK` z=X$*1XIe}@5$Hg54&u#FgdLzis_B0+mGQza>Bvj)S2X=h)2+vO7ajcAsgui%lH!N zNsP5nm)yG%^@p=U{4S;k@mC_=uvjH(4&t&}!al6R{`4$|qyDA>r6ltpeBhBk-uu%v z%Tb@3n7ghEbhXQ!&K-8#k5OQ?uM4v~Cv>sc$68R{{XfCKg5TIcK2HI&@-F8N)QN4_sulhP_)YmTs3S{B-21XC|?CQu8&v|es?@<8w=W6Q=gk*h>LnB?%anSasI+S&th{O|p%Lvmp7<+3t*Y5i^#SFy#g;cKHjzE^pmJ-KRdm8u-Ho#^oqeH51BmMhKTQ=b)at8 ze!rc55cojtG_}sveUPK?zPjXN73g7veTuo)3g6C+v(YUc6vj$ zq#G=wVW&YKY}#pYrqj<(BQCF<9tb;~rj%^@PO{U33_A@y?J_5@ou2t)6FWUux6`|h z!A@TRJB_^m&Rr)jS@WH0f3&t(nrVc6@&I(G4K z^#*BNy@7XBaP1IwS)A#k@2S||S$3s3yCv-P-SDN*c`CA(Sj5`lcJ%+v*lS5YnjcqZ zAn$?N%{WmeVXqsN>GzDQLlIXXdu;(dki9;KGW{xhT?TtS@BgyBo)^Gg-#yIRu31K} zy+&OcL&I&iFy}!T-`|TnzPsU0Ut>3UIqQXWv}NTu0Zy>820)_$Vu4i zUb?;BVuoMQ?e()pnD)Utu3n?dj=m}D5VzM}qh4vRKZlL~Pwn+E#2d(7&jbBZYal(q z6UbiYf-c+Z;!D`;p3DR6^-kBt*FbuMPqx>WS_7fZ&|a&E_y6b`$Ohftfc4f6dH8SG zYWgTPvDIbStF68@kOM)!HIV(mVh!YK>PO(Qb)z;T*2e;@foumpP@6djdZ0G*du;Vn zh%1n-{xj%-Z1o1vy|()Q#Wj#+zHiX5jNUa6)a6BOb$~UH+dPu3{uOH=>y9+B)y5jg zksq301G%1QG_}>n8pt=m1zH1n8T9|eRwqF&f%I+^=z;X^_l&K7K_0!fy2%>4^Bfqy=x$-SK8{il*xZMw*Cxp1hUl@q<5(`kavL%WUIdg zUAEPiS_65Hd4R3XS1-N>@&Wi{TYafD5b6wV^_7VC|JWMHykKvgy@vGv8+O`Q1Chtn zxL-2Fw+0dvX0CyhWgiF=YarF=`O&`@5*D~jISm@(3_Y!l#@9E~)@#PCRKW*HFQwLr9 zxewx-cN5k@%>AnaHXolEZ*RsM?bxvk@j7wVt>)giCsW~nn#DD3 z>`~hJT`7dAH&w=WvTZoC?ZH}VCG`2qc<(uN+y@ortyc%)HT--U>0g$2ePj&kbu{WX z7kcUD6n$PRQg+HvIuW2E^o3#Mr zgJ0oSE$LC)x;0#991K0eKIP`kzPpgVL|lRNC`mVCTA3MQT@_?kH^ivc1in|qxO}$**vgBSo+c5_{jCM85qJLXk z+)ZQC@0sDZpk}~-{2-6(J{#!UQ#=lNu)dwB?=;xJz4yinn^z27lIuPd^_K;juzje%$01w8 z=K_BIzV8!RkiIdFZPey>!9K|T38yEG@cJl-`Zjzn#53&PR{s=s^@Jin#C+z9^P(qEGQxAd2HgP;9n3)Jbw`pbL4 z_gnhQn;9>3<>%*qV}FVEP>D9)UDg?Vn~wTc(>PPjMM%bIut?q1kj;Dpih&=T*U##Ty4Q4>(Hi4jJa&!H+ATlru|!hF&Ft| z9hz~8G1pPZggSH=>blhI-vW%eegvPaLl*XLe)h)a7xp>hg$~U^ydG)HwW-ONtGMZy z%g~`WW6__XUlMhk7FY5D>Q6k^`o5RqK^nhXpSH&|(x(SadxO3vpgxU@6*^@0S^TC$ zYoy<>is#zGFun`NIIjiz8l2x>j|t6;wsVS~VMH^#cM!6)u5H~Pk1m(bO&j2F7P z1Mxbz-)hVcW*Gae=KO$Tsv28j*IaYHfN-@jUkKuS0pmi>7w99O0sUpaS;e)I^>JPs z*avBGtUS8OeGKV5%L^NMVfoe2p{t-vW1&-HaJLWcWmu)3Q-tnSWJ5oH)OEFjd#iWg zS)>8`$a{>$^X&MN1Lia45WL4o&=V3$=9Ct=v;jBbJ9JC z$I#^p*=ON6=$EpOpMvMN*vGfQ-^4!pbUA>1B>!)*kDI|yo$C$VxR`x>4t&4GKK_yM zLg$hZ@1^Wxqw$$BZ^as>=xeJmMtdVh(zRsYUHgwA4cf=1y0+;O^HWowjQOe1GulT% zH~QOmsf!rPaegZ3&?ok>;u-xd?W1_cSdQOY-Sho_N4I)VZn~Xpq+3%!pDy*il>z$R zA>fg9%W?@j)&cycZduV!H?orfbc_75Ztc26-x~pb>eiE+b$cf4WPrZ675HS`nsEtx zb{ev#Zrz7?WqW36V$V2dXsTQ6pJm-jgKn`O7InG5ZOOA{y-NM?FG%lq>zS_~7J9ZG z@xN=>IrhUy7x$dE^644+Vd|FP!Q7F$CGr;3R@|A@m3nrGKDn_SYrao@h;j^|Ydb-| zOX`!e(BC%glQ)4!?vsmKU%XHL1NhB8c_rd&q-z2CWb(^>au)jWi}lHi!0$nytUxE6 zEt>C>7lTjkli7|g)+bM8ywKqz&!DfrNS}NI_~bshnDgO_j2}lZUg+>=h*#lvsf|9F zb8UIej^j|dPp+hn!;iX=?<#0=-&_rwd26(!*FU6)xq{Fm+|y>xS8|buKz%jm%)h6v zUTErSbA2`MwJ>?mSF=wRd4g@7VLqd;_TC%mX;(58^!e}~Z?M_0))9uW1J;n2;~puj zHS#XP#=724+#LOLFvIlvgm)K}8Cfu1JLBH%t}j464Jh4hy|FTi@BxM$sa zr&EmU0O+MWr()jwhjoXlLLI|3>$mYUvYegjt?T~*|NADr zLt4pMJfFfit}o8zio4h+nsLXv-UDwr?@%!A4CI=J@9vaX*Hd`Uy{hk_hn;XPw=d2^ z)Zl*RE_F|z_zvIiw2`0VLZyAl^GL_cBWU6-1(uul1|rY3+1nFKzBKbymL|@qpv*Xj z5pr}T&P#}Rx?~9djLKCxYW2EomEZI{02!1=L8d1fytaEC%rzchj(#^vhC0C*3m4)+uU6o9q_IkdJ^a^j&^wGY344D zIOa9LT^v_|ezChaGWZ_-qFHySE3ba>E)J1*=+Vb`u1B9f2zu1?E{;BkL#!DacX80~ zmNt>~&pQUgnKzuD;9VR8pht<49`T-wYOJA(bf8C@kdB!b(1afGd^hqXbm(O>Ptc)1 z<5}G6VTGp6d?I!F?IS)u0}@FC*AdAJWEA|9P8VcfPxE+iZN-BW2>WVqUOHDVc+3 z^DJg5^s4DykCn8G8#|R$Lx#NTafpGH&v&O9H1mA-?FjSyW?zhb3^J6GID@|u^%iM9W6$7we9wY% z;`#0%iS9Az#jPCmznIT)j{0-vb9+a99iDlf^cnFV?JC7T_n1zrU{ zn!Lx;0vR^!R&Z_*_kb?9V&7N43-l@YL8S&My&P6+KFdIT-4C3Q@%GLoISmaP3QJp* z9JJ~0SaUxi};@ne9ufn{+IjVrx1Ti!h@IiSBO7p;5Qoh zaee*pV~9T?;lWG%CgP79`11zdbEO~t3gT-eJa~yOA^w4dOu;_$`;|>3e$k;jbb76A2Gq;-4oTbUpu<>-cfQ{P4qw zuaNNhmka!#i3eTaJM`rD-_cgv_~9=nUX$?PW%~CM54yLlS)CIGf#&=liT9MwyBzfL z{Sq(QW!=Iw)?((j#L2ztSX5--mGW)Qzm;>Ddo%)?EfE1-Mxfbm-b@&Ax`75y&F zDWI3`m3YrLJoF3h^H)Ig=3$%8OPM=9Fl4j3uP&R&3_sb_5dXe}2QTwQnLFMy@Ll@p z_?}(-@Lv(XN5X@bc*@+d+rU>Cc!$3o+)Mns5+1z7rxL%*z%T31^vep%{B7HI;>#sG zc!_UK{7wTue1MK0*Um5hTZsR=gaQUywHso zhzHGAFFNmG(4BAjc#APUdW!fR5^sTi?)%@Mr-3f(MhWrTCEiH=yz!@?m%r)btz2=} zt4oOo&6|gEotH8%c*Bs*`oUaZ+)!9B*iSYyh<{zegO{?Q%nP;|_;&;zbra-=A5Z*i z5+1z7Q|1M)`tr&?ZYpTyuSmRh{Y>RwKvzKb$^g9Mh%b|P$LYKefnNHuk*{Zm;C@O) zq{lI%gYmy4VZPBZ_c4CZg$?ODw4_kjkYK;Eq!9n2gaG|*Am;O)0KQH0IOZ*7pK^OQX z243+Wul<|&XC*v%iSI`|=mNh-;L8eY{l{Ax@y|$j@DksVc+dsD%P{62NI2D-OwA-Eft_&-a$Yjob-pqD=) z``YxU@C_=qopJ5`>h2oiACmCkWm%pl9&~~4V$<;j{(a0a;x|Zm@Dl%L;z1Yq7Y#h* z)O7rIIq`q;;w!SjOZ@%BgD!L@B1li)>EFks62D%;gO~U_hzDKZ=Nb4kf8A|O{8|YQ zUgB>i9&~{}W#Ao&e)(^}IegC=2@hW4uOl9GfxkQ0$bXt2{uuH1OL*`SKazOR1wJT5 z$Cr2Z!+%HoY6%Zs;`s&3lZ_=Sg_*Qbvo2ztzCk8TfJjG7cwx zu7n3K@iT~@W8m{!>gm_|x9PJu>+P5=;lWG%c;as{@cRw?hMs=;KSKP?5+1z7XAyr> zWBHx}uVUxh4=|l{r1H8AGGrE67L3`_b;F;pa*KhV;TQA31ioNB{wksYoz#Lr*as7p2T~% z&U+u@2i>c~uu}txzgprod_V32z4R)H7y90Vc+k8$JS#?&aRKO#u@W!x(4P1)67OD} zcNXZL(GoB65Kla4-gt9kMZDL8?#z{Vk%tK4M@hVUb>2MC(?A!p8yKhe7p4Ad0EfN> zeuRVvFYD<_;z5^Xa~!)@mETC@Dd+FJm>;nVc<9P^J@oB6F)@4gO~Wz zpr?VZ%Qr#Ke^38;^n=7-A>jum2>kcNgYK1YOXq~gL30k0c%RaFzXrX0pu~%M{}b_` zd37WvQN&vTdcgoAU&|7iuZqH+7Qb@MA-=za2QSN2PJBNDzsJBk?0)#`iSH}n!ApD@ z@qG+@ha^4y$Ou3DXySWIc<>TmN_;N^zuv%?`LF8@BEF}D2QTp(h`(Ht6~2d%16uiI z5^t@}dmrcu=-xVD`zOAK#5-I6&f#64mv%Su1>Z1?4K@^(!&gh1D{*fsn)q%K9=y!g zT;jVL_=IE~UzX{Iw-KKy;lWG%6ym!Wczhd1q#v2!hd+rks|B4UJa~y8LwqL#?=kWI zbLDE{J4$%)5`P8p9SnSKJ0t)8_T*FIGbB8CiSJ5$dr8)5&I#XwR{_nd!!PQ*so-^_ zOT4h3pMbYCP2%m4BI1n!uP0UFMceoQybjR3@vhN%!@%oIG0ISv(#TG|$@tqzm}K2w z<~-=0WCODy)u{JAesX_=__h)rye#(*#3vc}y#ilW80o)Wb|3MH5+1z7e?xqNfsagM z`oR0|Y2HqJyo3iY@%xF7Gw@3cyvKh`dK2-n5+1z7ze9YCfyX#!H`6ch-)Fg&_-F|a zUgBRQKFYv5(sg{P|31eE;@e1g@Dl$N@sS3;RNyNL%cA|{-;em#UVK?Lc!^(6d@G-R zq+^YJ7-$aA4E-qMH@eAN47#(Wk2edveTk2dc-QN^cYvM-x@kMen@M~NiC5A6d2R*0 zJlw}?fj*}Y51Ka*vvuAA&2K+xaEqw@8?;bWAex?NNO3v;IC}{GfT`AJ|F6-v+$S21S-f)E@A9eo=h9 z&+5D(;7tSFC%e@Xc7WG;LE??n{Q}N`UVh%kTe-p+^%7`lpn3Cfx6WG&dcip#FZE(G z@nw8ZPwd4+s__VE@Y-lgDmfaZ%=-`^JUIpyQEC|f4X1Fz?##JgJO74iWcm-z9-A2RS*ixalm>A&xGg!u0zJa~!EBL1L(-zM-Cg{A&u zoPQC2K*EEU_+G?UOZox3aR9uYDv5WszNgv=ylJ4Dx?gE?M*S1K&Ps`QpuVTt7QE#i zAFl;Es)08RG_Q{Spz}t8x8S=*yivQsTmEl}_gQ`aH5j}K=w==)7&~kSZ^5?`?=*c+ zl`=2=#>cx0zJqSi6wthRh}8E_kAd#^+K^*;-$uIs7smfD2~(kCsu=%2eeuJsal#{v zA2e_LtM&cSFB$(=GOsggE%9GUyuCTc=zbMZ-AZ#x>t6V(g|~j|5V~#t?zqo1-<+ei5Gdek$BL&d6=c|dzOM;@Ug_} zD4j5o_zH=4xW1PulPWr|Br+RFLnDa z&`b9lcSr6GiT_Z-8~c-UiQi}7A8WinnSgiY|Bx_y^!>>jKvzKbmJj+F z$@uq5yvAPS1jheCW8PrmLG#LZqrPuA3UtT&MqVPW)XU=VpJRFc3H*B!9=w#r0OI!; zc-)U5WKrfn7pWkAw}b~T@tui(*TB~r_zM5MgL2|`NqF!QA5VO_fnPt&$o~Mpx+o)l zr-TPD@u9^3y|Jv`0&nTxyu20JF^b?l54z`_#=I|s<^au*Yen`(o%cBC&bLLrD$=`K z^tG{4|22)Z#J?rs!OMJA62HU1uQu>K{r5!fB7VDs2QTp-6aS`xueIp=!4+0Nxy&X0 z4G9lk;&&1Mx`Cf;)$wKibB!s)ZdK*A5c-bgJOi&}+dnMz4Ny1Fl_tI7|ez$?y zBlhBI3m0DIC%0tcUzG6RWw{p5GZ*M59 z@ZXC({}u3CBs_SDpGf=*2EI=0#nl#;`>#d)K>YI(9=yco5dWNke>PN4U-6$~eM9`S z5+1z7_aT0>fgfkr@#X%0ultFAM#6)a_zdDV`RcbAd(~fnHw`pz{VMuCSORzpN`1WP z(1j1dTmH1fyGQ4330?(sS;xx3Tkuzj*Vx~(g17W95-)7+>)=&D^X9>!?=77H-SL!< zHy!={LWW55D%I+-tGGSPbKKi$9=pU=WHbYF^PAhzE>mU z1G-r@=HU;-KPvG~)AwJ5eE#g?%>wVe;7tR~n}-B_e?-XV5g+di@Gb^#`9_KNE1g%! z2XwIpiv5kv)Y~-N<0Q@NxF(iI{6iAn*b8|MbOm&?3>J%X!er12N+jNI^nH&fKrh`O z@uJ?ZCLT1S4EVmBzDMyO=#B?PzRJ=|+cdHPLmB^{B+OnNvy$=u(ZKYLD#_r!Mo<6# zy)E(UB|Lbk!?zK?&cLrW@BzloEr?$$;lWG%Oyd7w;A;%L!@o~G_a*RaBs_SDpFsQr z20kHL&wrVJ8$3$<{SqF$#Ag$KpMjrd;CuS-OMOlJY6%Zs;(HUn%D`iNM#wL~disaN zuaxlMCB8lJ#ReXJ6aruBzn}j$@lFX3UgD#OUt!=k#<1_*P#Ec7e_M&aSHgprcq{Su z82B!+I^O9&_j!`|yCpn$i9Z2)>2gUwVLzS&O##iTpYQ0rhd_7S)tL7Q;_sArWAuHJ zZ$S4flX$U4{UGt6dE<5JydQ(^T-um-HSu>yyg%r??}MHOx|pB$jW_o3QvKTQbmEst zc<{2kZx9ct$Hz zzfMy|{B#KqUdk(!_!|xU`DA^ZTkF5aRZ9E~5+1z7p8?%5&A=~dr`MOqf4sMW_^A>e zyu=?Oeu{xVW#BPSY}#)+iN9XLgO~U(iJxrX?@nR*n9GLv;TIA=Ny3Ad_z#G`PLg$N zoPz|d^je8m(f1$T0o{{tr1e;;AuIngQP&bbQNn|lX}w7N1Su`(%XH8jpn2=no+fxV zf$kjdvXC<)2(Z{52Bqz;qGsI?&7WBwm#FO5#ED=HUmO zmohK7+AME-y}S;8yO>D)RTBQO_989HykM+>Psq^m<^FTPFyhBZc<@qQ1;mdw@Xu!G zbsNAhvHo-5b0s`@i62M&C<8yRgN~2%AIl#mex!s4FYylIM;Q3e41BHsxsZPnKU~6t zm-wE<=NR~T9gXt)&&~fqe71xKFY#%_XGwJhefbo;HW*M;O=D&yj81X|SJa}1#W5f?O z@U;ehga01*8se{z@Zcr>JK_hKGVG$)A@;+X+J|Mt50vop^u2iC_+_cQQ!XX@#f`rEh3#P^l(;AQ?_CcclE|BlV-KrZpUCA^^nPZQrusw?zo z6F@8NDe(sB`wSaF_grqIg|!w@R~!8OXnPQUnS=)~^SYY&9#UG+w*jCzK=bNFoz8nF z=+5pEFYHry;=4(_OZ2^nBGA)7_v$9}EsFTA5^tT(TL^l2rcs8C-Sskf{MY@@e+GOP z2@hVDVIuLJ4g7fnU*Nxf@dNRlBs_SD&mq2}fnV4|ukTv_Hv0|n9V9$>iSI*vhJpV< z;A;yD{MT0Z6W?CKgO~UW;?vFa#lA;vp~HXu;~nDDBs|t=h>s>dRgyLA`}^Qc1I=59 zwK}gIyag#nTC2q#2i9u*$N8IxZztiw%e3l1FGx1X#D7J6f`RYQOUL6(Xj9v;i1>I34_@N;5+7&aOAUO1|M+hP z@v#yfyu@!OKE}XD^w!fa^&fkUCq7!jgO~U%#77zU^}S1~IZyNWkG-;pZzJKsOZ;QR zM;iEqK01D!|GCv(#JBe1alfy=kF$pORsz2vePbUz{}@*`m0vpXEhRj7nf@~3BP3me zz32v7c?*fRgTALTA9MwDuMGe%_DnVwgiE|n>AW*RFAX#D)m@yK!y2ByKmNH-fwxO| z@G@T$hz~XJ>ka%uf8XDu#D_?D@DiU*e6W;PtgrkGUIjFx4QMwW)fY%Wu@nTMT z1iYm-iFduu+a0_ftB;rKRNsNu0h%}7m;oYQ%G_!3@$wwod*H>rR6gD^oi`4=<+zjN z8Qz&yn#B7nV&3Il0JHQy)Pi-VNbuU(!)|_GHW>F4 z;Qr)Q{I0RZ)uquluT$zOv95*tqIoxl8!~kBE`-d0cOi^KdbkUCw?(AqKp9R?`WtAz z`wxD$*<7b>Ru|LZU1(hUs;fZUs0)5Gy$bhvthgWdTHNaxWKUG0X5Xs};#~~)9NcW_u-y28|uGJyQmtQGKk+P=l7TK{pLQ0S3nF4mf zu=sZOa=UuL#(T4L{cBv;DRrIYfwwYF_ViQFh$@pQGRXzw&pa z*B|NWcY(0Ju(s0o*Qa+g)3XJ-2i=M`W`T}3m32G4oY4C!=>KNQ`)R$s)jX{Xs)7v6 za%WRdpaZ;bYdQ3Q&zZ;@?k~~XA9$H>)*J7VsrfB)`L6JR$amL%O3c8% zN=)NBbo9FMAn%oEmsQATn#hN42QDnng1q0|GU*K^=KO-UaDS==I%kFM*+36M9mAgG zSV|gJMSk44ev|5IU|V@V*Bs=D`n(jne$o~KIq9~b4r$dR&C^Jm_Z@kvaknb&24Y)& ztq004!ifkcxK>`KY+M|nY}*;49PfgA&|+bG`=c$zLs#oihkL`zr_@}d?C=!AJ^*L! z3x9Z&S%mvoN>+k*5#kVG=*|*8KQP?wdBBR_2>fjBM4RQfwa=qZIIXekDp95=;9s{| zO1=nDV80SwJFU@2cb{*_&q6s8k$wVxNk~5-R4K8y@K4{`B>nMH`uPFUKk#5S@{!}7 zio8}optuj%oI^dW@ne|`xy+|r7)BZRz4IYboWt;ZptS>W40o?iPAe)*PA_8Fs#=#1 z%|^HiaaGx}+}WU4wQvrtY*9XRIr6^37JKv$DA$1pDGQr>wl(oX-dk_&^#o**C}i=` z$I8aULw9{T%ocrgRb4|q>&5~Z&-zI8e-pOg`wdNXF&(xFdQoy=`3UIBaOg}9bSE1+ zlm(mhzUVU^Lc9vb0qj56kBWaY3_aKB=O5xfeHsVv^}pxmd+5_C=+YL&=CWV7=hMAb z<@JMTYt=?Svjz8kS(KP{quG!4%BttLTVdvB3;w;?ME)hFO^{>6Y)R0x21kB%ICx#pMt(Atb{b+CYW}F_>0+*!>eo`4?Dd4A=-(0 zQLjNR+KHbfJHh&tb?xv1+?!@8A6luD5A~qkX4r7Ameq3nUDzFdMd@|cTF6Gs{Oq+dO-_Z_tuWPg14<|pHcQUt2-r~7k z^6p69oOc?}U*LIC@-um7@O%c(1Cux9)!{keR{TGnA*4Ke9D`7cN^i=lasZ$)a`lK zAE&|U{m`m9*(_SCoYJ~zV3>{#uQlx=yh z8{zlo#cI)G^m6q~=~EOuAy^BuSWD~{O9|!lk2A0Z9|l7{LBbv!eA4PRWoXCUp9gmP z%dQQ|umSR_MH-RFLu5*?qT3*|69}`MT_M-uDIJPxY+dYlBEeH?i&#{H~|pu-G% z9>{hdcreFZh5FESc({8}a)&&-Eoog8WI7&o&@05M#h`8?Q`+Y(OzBw^8x^9}Sd-R` zLml|)s&7%7YZdp$kg+Mp_9^X)UV)6wa3{!k5$e+n-vk+#puWv;2I{dF>d*{#K)KqW z4$W{n>d>rThc!mawOLB0K<=rQn4@#fvhT5>9Kr5`Pg3WsZkE*pT{G*+f-EWAqxUU677&!gy9A#={{nE&(WGY`N{c`(l5n4e?NYW730 zTQv)WZ7Y-SzRN;CN*lT}$MW&T`qG_<_u{rSSlHGxhHX6!+s--SN!ZppV~lRtR&V-; zUzTj^ZfnVY3;HiV+Zx}*w&ucij6yw*H1u-B|8HA`ZH+fmp+Zya%0o(c+#z|JRuZit2Cx=a~M_atp7$ZCbTYH=F%yD$}x{>Y!Pv^RE_a(*) zqugQWJI2HI^!D1?AngRobO<*1mXyv#CnG|%KUnSS9)O(;g+0*iOz)yzS1az%U~6MQ zV}G|AwsIS6tr@-_wk03-*$m$l7o#nP?KS)CnXt`$U~A2AA#5-EOEb*=G753iPNi9+ z(6?JkFoqO;J8f;2D|S>z0E*bRg{(GJow;9ca>4j14cO)C3lp{Y1K}N za<&)cJP{M3jY58XW$Y{ZYcoI0FUL}5nEka}p5al^8vAqeJ9egkZ`M0}Iq&kNlFv@tmt#c^Lso*a7{2*o96Q~yp>QD49tHRs~=u^(^4l42B zXZA6(F_!f_Fxp)mje2iwb$=g^wmG5z5P^v^a)KleXO-(jRbjPb0(`j=F; zUPj!9+B)1-s7u`2x?p9lIY#MJRExQx4gKXR(1P(!?-x54Rj;$V4`Dt@%rgdm^|11x z2QDuknjT@*HiJgqnaMqiD%XX&YvZ%s7Q|yi95e8aePViY=b~p&-!l=`$3#7gs$dJ> zMVlZEccd;LU5T`69S~+eT#T_6b(QsV0R51@ei@H`6YJ9GlfFY+PD4BXE?YUi3IF6{ z-+J4-%0{lq)kqiBj!w8gTs14)Hc|HM=*CW*JFK}D~kqzKOSMuX-20ED7qidO#h4FigvoQ z%{?07%sE~1`j6G;A(N-XYjx4ip_4)9+{aTGrg5#}Nb1hKwMb_Sc*k~Yt4+as=I5%^ zK}F*hCu)D~oTB{_?;QG9@G$LElv}z?^p4A*^q-!#nc+VM(%fc{??)HLyo9 zw=&bXx82sfzmLY;tVfbIAG~hFGp)Z}n}@m6JcQRH+_Gm&tsFee>$i8d)AB$!=WfdE zE_of4DDAc}R!swMddg)*T~N2V;CTY_z5+Owebih<>kS&~jCq|4TmELQP0MK?tGx>P z`^kNZ`0n%EHrg?~zwF9Z+Vkz)dC!m4>!2hdNqZ~xZ+TB3%=m`RZmqrF?xj4|(Sxw7 zm*bx})>q`vc+Hb&(-wd>0_n5+ouwH?=1bK;%Ii(S!%1E<@#XY(q- z!+cr7EnXRB=f!HDgP&zNG&fc|i)Y5$b7qn@5YMlS)olaQesy?)_6p*lttcEGq7}{x z(js$hZfmmD-Bz)2JqA{>ZqvszRoIBtA&IG@6e{66F=%ILThph^m?@(^} zYe8~CUSfXEHTTcXa(|ROsOVUzbLh(49QUJ>v)zv<4tE0VkQlEZ9~{pVW1fWdBXUp%$FFFs)sC{bM`JA{Y^-jt_H{_qK7>BCK$v#r z2zY6m{+ZIXXdc@CRiLw-|B%wX=nB;FU8oDnwnwid?IpCqpAcr-{?`@Z+CJ22IQWS_ zhWc)eXSTb^?Ob_PSgSSl!_)5NymF-TXXqg7I3LeBSbwE#UQOv+v=r@s65^$vb;o}d z+FaOlt5%(b8n@sV0b(5aj6 zO$*k(1kM9{7J`4)2lHN@JfKMFnXG*S8uk6=3CUXVaGTqiV0EvKvA9=8DDGic`z^(o zWtaoszQwo1$`y;IL^5;SJ|`O zY0xtT<1i(td0e3Q-uUq1`#XnMg?iUz&tqM->S3#T4r>SaCUt#1##hF=f%n_BhmT?1 zAQ*S&M>y02g~26Dj5XQw*R)p8VGjx8txq_=+G1V)YAV-eQk*!! zz9_;;2v0`%dUcBkCn7uv;mPW=BAkHmbqG&VOGP*y;cF4TPJK#*QlaTd9XP zPsO)C@SV%fQ`940W6gcy^$3Tn__lj}O}Ccn;maqhHE-g%bA(#+wxj-NMho@y3)iY^ zAdeQA4)w^(!D@@lEc^$l;XSg|BlzZhczTX{-Ej5X(XoEm;o@Bc=v))y9-yA) zm4e;^bowlCFE9>i#k&TA&Tre;75ly#eE*Z*R_Vj%Zuowm)xPf(zOVAA&A#v4t(1c= zpLO`o9P`?R@!DFcKcnoFQ$1v%$FHZ0a|c+jpbX6X#JbL}AU4sJ$aj!IC1lZ94tn0& z;63GV26CwXnsQ(q%)1_U7}H+WR1U-@x~$?|gnAlf({a&W+_}ZXQ5I&s5EJeC8T6B= zxAV)PFFB6-ILcud<}LgmjBmC>9yJ5-tquNvTb_DkbFz9Q zV>JHTsz)FTu0tN#oTQ$rPE>2QjsZOZ|5xEZ9{*$U9|wJmMO)5N%{FYWYRLcbwQ1^+ z7ogkSTB*mnO;Ha+w+};~>jq!1p6fhWJ$#E&e}3vD^~m(=)T1xsTOiXz)brg!)uTDE zBQNBsnU>gfr;c6)+Y*O;VY{naxdzltt)92Fa(N)DGq%={E9KMD z_2X-Hwb~ZpdKI$3+#53DKDs{Nri@;s>`>nx$Vu0)Sgd_geo3z9#JiS~T$6>4JqMw&%*GzKMFF;*x!G7frwl=OG zZIQ0S(9Kj!*wH`y+>l@UK{9Mi9&Aio{9ld#B=x7AsK;ASuhj|a>0|NgnUitq(XFxS z`D?Bbb!gh&tj`+qKl!C0J{tBa%@)0G27Xnr-wUkxZZ6WBjs5VG$Y-i0_Gnl`L;h=A zQ^CHazD^(Jo?(j-_L_E?>-6#aAR`;*;;`Y2=LW=+2A)dL$TJA<**|zfvr&Gwk670- z@YEa=^KNf{GR$H>`fJz0FZ|;Y>)6qY4a!jW}AP?wE5F%^SMTn==$L{+K%RJ{sF!hHlKFZXY>CJdSIK+J&Od_ z7kGajI{Y)_R`(HYU1Pi^(rs$%bnFM>ooVywi=*4eU4l+K7mvJ{HXq-h1HGxuAHa42 zo4*n5;v{T7ZGU5%4}aQJ-R5s)yce0?JZ z1hV<-nRYWa|32|fw)wvP?_TlF?EhFVdLOe4^dlFs`41a5f4iT}57%w}<$3DS%_-_p z*!-iL+o?wln|~Djz{zUZjhDxOo`nCa@DJPZ@>u-CcDxX;o;zgP{P3eS_-^5kuiXfn z58W0vf0}w2x~<#%sj&Iz1BA`L9{tK>_2^F6{E7ZH|K!DN{&zl`e@fVV%ExE(`#~1| zHb35VIc4Xy`MPhOY4f{?ceMGYzS1VgxY~nGo6o+xvCY?YHi>DOHvd!8<}+^H=11YZ z*XDmjo6q=7n;+u}$9w9D&*n4UBv%mVm$LcCE^6~r44dE1u=&Zb`KU)>^OIon6V+2E z6JYc8`a9q48uhF#+?Cx%9&d;1<85287;kUc%kg$T#@p9oynQ3a!Z#RW$QajGizxFH z(57Kbe1rO#2)9ERWAX>5sTCsZ8;|c7Vc&RsuL%3b<9kHdHy$q+;RM7r$&ex1KWM)3 zHpU?sXZXh3ZPlOgEwWhnR-S6>sOP@m>es%CgsqJQMNG}e{3m156f z2KF52N6dd>tATwKSoVqAMmhM`nvY89AjM@e3dO6_3ymHF`weP)?C*% z=-2;Erz1VFu8lH9y^gfu4}^7X-M0`vR2yp=0{5@f*GsKycLcs}`aAIFvcRtk-&$L4 z!}n2@68iVj56krLWjn}Klznp)%f2-o6m=hbryW@1=6@E}y`8HSw==>ybWMjK)t=`3 zq>H2U#O%`Y6ZTD&CpfNGvsZs|xYO1XVZFaSk$KGzCo+{V#1pK}efxn=!Z*84xUT-{ z#F37_oCsIK_qFJ-@{?{Ox16~3r7upjc<$VZZc2-NYrBW2YdVBNe}d2kb>BwX>H{d_ zH}tU<@}MozZ8+(0atcVVXokM88Ty`P=znj9zP%axtIg0~Y=(Yec@F9%8+DTfU%Ne9 z;5!m?7-jEbcc>YWS!&lFBh~Kxvee6lj!=7!$X3&1bJTPta_w_Uo3-mLmVN6jcKpKk zxh=u?S@CPJFFkgY+Eoc(yH#nib|2o2vDom7+;zF=uYdYm1y=8LO6@2IEmFUPM#7Q(MEBos0n0U3@|2a0eA!ov|Bq4pKwV1#oJ9zSoqJ#eIYjU!7PA2dSkW^J*ryArW)d}OwoWoNr< zvo>1^TC3N$WnVh#el+wU6S~kIx)GK+3iIKXYsXkxtz}(gKqvly_SXSzF7tfBr(^K5 zbWk#_T`ZY%@Vpj3TL)`qP#3m0yK6Ii#CaB=Zn_P53_@PzvnMvl+KTb2;<8(nT6-|o zQY@Hz#AB|5^?c~EI}YkOI0}-r zV9CtI^Bnw+WLPsj)|hp>tT7)R?QF|ji@eaEiZ-0~`vrzuIMnLsEYx4L3*Y*F6yKAs z4@22xU#d#X)h;a8&(55lG#vGo<2^&O0C8a5)bKere38wt`L7th$OtF=?f3g4!+*6l zbHwlWMSd0g*T2RWSx%>^FY+eD@q2ucyCUynkoW&xzR2D@LnnWWFLD>^adCJ_AN<%7R(UqR0bFCmS7bh0n<#lPKsaUWz^x71Z_>#*MKu8M&FJ;p+-v4(L5djTuZ zFK~T;{(WmwE)x+$$P^JrQ%S_r2l4+85Xd`!n8gAL9e~ zC*6U)nK&byo*SnKl4cMZ9= zfm}T({{i^lSG9&rML9C^LV`lH_w7O2_t;|&fxK%W`%vupegOF#f_x4^j_=}Gmt#iJ zZanMq?O604o^}1{P_zfndL5(}9efzF#@Uu#pmFa{_~brq(S34J2Kr>hBR>bwZuK>H zpHHrWeJh^BliNDiBGWOa(``u}`qit^zg~sDWGu!2W6+=2#QxmZdthHz1>;O)Bx%;E%!BAr|MRf=e#tiz}zAu1fORm>g@#t(Z49z`jsdXh-xm7JpQ>EmcpBgpc0{ zH+_YwA0F=h05*WOrRNBTn|}DOLMCkQ^tXEr&)h4HL7Ur#XWElTus3g>8{ip;H$bQT zxEZ!%B%ax}zRwNO&S1~}O@z7USqne&M`23_7~$-z;YuYa* zKU#}M9WOTCubv#Ooxn5m)fv77)ef6vTTnjOmZ~R1gzsWC{H@J$)3yXE??{yMdBn%O zz7OBCo`!9qZ8d!*+C%^8XJv-zuTKAVGn|I@K>v3$O#k*55GQrg)+*GnE%D+Um7KRK zwB0meTkN`Rp+79zz#+`Fve52NHeIyJ)LWXz{Ge zaJbN!0}qZ6Iuin!EllnJ`9*3KK~}A)OgGHkGDMaS0Pqw3rU>uHc*O(%i39Y%4TZmPsKtG-59%{oac@da&r>4c7XaH> z1v_i{mhJ_HXBAD~(t`-MgSZ?_5)pja`Jp5Y;lD= zm*9RB=N}iAUkjU_58FNwHhuzZ{dk;j9H+wei+;~zJL$Xb$HLd;GrpPwIyTqygrQfv2mnD zqi@n+yr)msz3`_@!87w+vpi8V{q_EdGNV;+-~a9?JS6!t`fq*C$k4zam1LjkxHOv^gVH`w@Pqf5dy?(>WkS`xo9( z4t4lvnSPwvQhNzLjz58i{#_3YPS8T&$MikYWIyp(?(-V{ttxd zOZ#5uSnW&5@lAv&_qI1gXi4yAdt$Vn*DvO@)INuw=j#Y_Jpa(7RP8+CrXSJ6sgQGy zMY|hvP6nQ|zrs(;)Q@3zCTf}BWjZ_1_x=<4qnvXg=WwK9%6V(I1g#zTn7>h-PpSmE98c&!?Gv>W+ly*}S6L>oQVruDilT$>9WF@5uPcS#cG8LtH&%f0ZrNbMo` z%0@=ny>h;Lbh0)Q>9VfAg`D4aD4OZ-JMNA)S}x?=1$gSi*BOaIUris^`l%7x8R*BO z$QSeY`VFnLZSeK`3}Lpn@#Dj^u6U-O--LGQMH3S(+7!fR>d=kQ0aKq-?@Z9_$OqGT z3}c>UC^z+Mbb+qVbCCzev$b2Y_80I`PRo|2Xm>-Ory=6K9KrKQ$(wBFvjEQr(IL)$X_CLf5iX?<@D)?(*| zYyU)ks0Y=v;Hx{;F)|6j7spfk&}xfw5O2|>c{OXT54|_dFsC)MtdCmOuH|1H@&SzOEvi3LAfZ0 zkMYm=Mu3lbdKG;3cqZo4dy}>A@XYicxi>`n40&fAF2_G@ zk7J&qJrkv9=KM;TplC7RCr_KJtnSK~7|oJvaa$Go#pb|1XTwfs!Ow2bJg((6wcDmY zY#jVyAIQ&gm*V{G!^5-P4`JRP4;y_D4~I>!y$QLgQHrk>15 z8Cdi+`bG0>@G~icixM#wz7zSUtPa56_6hWnrtbYM`HG@#Xp{LyIq#j2psj!nXh3|F zK}~9}qD=UI9!8jL-_|Sg?0w< zv+YO1KD~)De`$nsP)|0*L);Us+iIr&JLzWsX@kw8Klfl@nBL>_T5Czj2kqXTSxLfw zeIdfE>v4_*&9uGGI1)9^)!)ZE+O1AF+fjzJ$hRpeQhVN@cf2t~GyCH2;Xhg&17A_Q z#a)iG22R6Y)QPbN{Y5unA2S`}t8|=|NmERJQGY!yP=bUnX|a+GpVRW8Y4AJOeMJ3v zo3?|?cVV4#RS4#>F&Nv#VvGaduSxM3^CVy%n}~UANJ%};lpdU<)StzA{(1U^wy?mL zMsby5uM+Fa73TW#7F$x?GdA1Dm9|hY>fWk(spJ37?ETZ7av__iIM8lu)*4j&}ppBC$)4~yv!b72nWide&k?;h7D z>fqC-`{>YT0e)G$i6(wCh{GgMVISTfQ@WDY@?!vS2_HK9*|60F^$MuVwUC>4UlD zmVT(~zG{8vG3wc92lU&an)DqlHnLpdsKA<$X+oU#tN ze-`hW$Fg4o`5`UJw{9$Dr~4C~7WEwCDm3K7dyIT_sO!fxyc2RAtJI&lWd!0keY5mB z%*T7yq3~;Iq$7#0tMTp#y}8uF8|-xZIx_(%r)6m9YARBQaY z{*^1dwn6Q7ySlZ{9jbfqQgy4P#aiw`WnvGT{@R(AX#5oHMR7kW0lyghEc>|c%DwEc z9!h3-FH5HBZ=QfM$@V2ignjlUQiOf>B|?OK_Qfv3jqQsKG&^hy{mE%xPD3^|@IN_& zx=ghs9i4-9uWM0O2lfscRz#@9Hr)==Z<}jM@9d<%j?Wfu>3qBDy8I6H#Q{szwHEB( zqs(^fAKESP_(kKVpv)|P0)8?0S-gAAHQnMe4__YdE$=t88<+Ph5%!h$GZFTcw?c${ z<=rpBjm!H1Xr@08%Ugi*RPN@TX|b-?P?l%WPvAZd*g@K%B-fYNQ`uq@^YF5!^KgAF z_ImV5lhHR#LLYS<`l@R&56{OuJVeaHmm9io8uFWb4IkLb%vb8H{8{;op)UZ1+ytFNZ6-6Le@>&xyGVV~@87h#|57m2V>_VY!! zvFvAqCii74(3d@xjI;3Vl>D~`>+6Fj;nQ~A|Hgi86!LJfer*`uU#wpnfcKZ`*DeE3 zbNyOpzH6pmOT)Wg)33#WuepA$HQrsSUkhO#enr1_{+8zZwV&~>xqj^@y!*BN+To+H zxv;Unwr@LsEK98qg|DY~td?}N3;H%U`nK21z72iZj;-j^P{wz@gZ=$-iCSjMudBuR z74~a2-IRLKuWd!Y_Gzx_>(gRHpFlrPo;`U7<)~a`_G|R{XTJs?InssSve_Tu+yKTS z9JjnoxgcHLf1kc@98c)}&|C11zV~d~r>fbXnP)2W{;U-5eY$6kd33-3$MH_|XXxkI zpZ%0EO6`XKV;C>!{aI`HnLwz}CsY>69R@PQ) z$H2aifp5ha*!xMs-qRPOm9X~%Veb$B0w1l0f=}Z+DwzqHzW(ihvG?ZjQCIi=|K~F^ zNhaGQKoY{DB!n%13W^FEbTU~80ft5Df~^8UWYK`7RV!N{0nuP3K&wr9D?3c$)V;Q~ z_ZCG_2#ipyy>0LJc9O7!O%@Rnl;-z*f0kq>89=*mZ|{#kK9BP`=W{-1d7t-rzu)Ja z*Ewe*bqv&R-`4ysGUr~+-y(CyYyK9QGe+|V%bXE}1#}sMY%TJ%r{-^|TdL-7soOQ0zol-SG=Fg25(v|EcSlWkZ=r4;>h^_E zw`b7Zb798z-4!?Nt>(D{$II(9;I&=(42i4l4`YF=(XK{{V0No!EIur;U%spQ^9sW(LM+?9F zMDw@M;YXUkg$`w!zl9FZY5rh3EF(;(gKq0d`-{Evd9>K&BH#4A5anPC1w$fh8nTAB zR@NMdTVr)LzVn){6TWR?fQ|5bU)RHb8h`=*O)~~q_CIy0yp6hE%$Abz!G*c^V;4=p zKDrM(>0a!md$6VM_FzA0wp0)PztmY%a;8-0N1UFdZ)bY?^l*Cm_RsVrtDScaQM>FM zkG=hUc=p~Yif8b`8vLIW3ylSK&Q&J z&3=9Fz`r&7_5Xj;?AQMXb8V!j|6kVZ*Z+U6*{}cqOtWAAe@U}n|9?@lU;lr8vtR$8 zbBcn>|NUma{y*o$8Q=B)FLrhqxY@6P$;}Fh$pw=_9xYg0){ukzV_Nw~w(^4y4~n1N z%J0PgTll}oz}BwCo^HX`W`S9CfvwHdaGarVwSgE`6I0t71KS#}s^e*0;9@g1JglVg z?DbBtpQ3M~n`MfL$2H3%`Rj4BLd5;%xY@D4xmddhZd1ofCw)7|qog<+C-oAntiCts zv4`aR^)L;KIT^q2`7*QBOyhEh@KKt#%oVLPT(mhDJ z+e!CB^7=r+D%=5+pq{j_Tf@Z1aVa-qWPF z5zNU((%VeB8#x;)Ect7s*EMu{5n&$lE7J!4W_9z+}HqlzB z&23ZPgOtza3@?lbS4J05z5>ekFmx;+ygl)zuy!HzFQL8zlHz?OMtWtWS0d@fhj}|p zv=uI4Z9=CDX@UcaAkFqRl{(+3)%kU)J7>D|cE|gKK60jHJJRiLvAA8*9?pnDSJ!sF zFnhSyY_}T9m+R8ginm!tr$XaY%9lzyg7b)QI=u%;L*~%KjXCoOXJ&{nSBS8z5MkME z!loMOFE!jvhMSA~9_#ildy3oTv=nA-@whky1EJXGMXajb{m&3FDU+<<=x@v>}o_fmhI`)S-m z_=PV&bSj16(0B!DZHF#d`^;2d~K~ejPurBC7&?aS`Q0V* z>79>UKt65+A8>zYq^;9lr}YQWQ0TaceAbiCW}|)TXt#%_)s-bCV=?-ED+%Cw@PGQTAIH>`9{LO`&d;OPi>uXz5 zSzn5BZw?cmn=bMBjd?8_Hw6HKEtW%?eHELn)jIa(DB`P^GQGlM z+m$e%@Yq-jI(LN2D}1(DiSW@cPDX`o9qL>jR6{aNRjqH*81fF12z{yTf;U!S&j{u9sn)62Rm*pD*r zmQ?w(UupLQaHq-Lf}>lJ9>)Gt)!C?>>u^l=Mn*1$ge7i6uL1ai|kD_r>7bTLj;K8D6@3Fjd=Aic8j(70(+Iu4J;On*b zPP}twp!R+Z@8HixPfL9p!Ev5vFTz&jOGo;=DNmBMcU_Kj*4}mb(MfyP zf>-E*-(!g^6`5gT_mZKr;4eDk3WlH)u3$gRy%{F1;a0*0voP3*f1441h!Ou5T*2er zjw`qXks1H|JX}{GkE|<@NA?xSBj*a_k^7DFh?29_ksHEauGpu%E~TSScue@KfU^?s znKajX&eGW@d?q}WZ0+Q`Z~8p%E!HHT@S4-w#n(OdHt(&IZujMl6sZh^FRKk!P}lZ2f+nD4Et`^ufed2&0ES^4zMk(p722iZrmbIC!? zUj`oUOx;(G55Z8nHb*im7bE|lYZ=g26B#^oG%*16U!6BqtrFJODOL$Y+}Ln3C>h- zSAuI2JeFYjt|wkU9y!CaFVA&6{dv@ybM8?8yvNyY@?Ty1Oz$JalQ@OATH3ghzMTCj zdCb6-d>+M>f0pA){2$^<{8C(r|2(e5e->BbKZmR5;kp8OWL<$gvadiMIbNqt@%^*g zq$VoYEBqntD7+)>DEuSsC_E(XD10RCD7;idzaEL3)o#AGz!u|k^Il?e_&x)tID+@w zu?xK0ZPC8bysr+A^X21?7`V_oBP>eevr+gLg~j@+!tM0Gq28F9bBAryb8~XMCt3B%elstcr%yD>l4%LPK{fhV zw`6t~-`OL1-aq@#JH|hn;HzYQp$lourSA>FO_o0RNV4yK@O%GBzHddPxZiRm7XGUC ztUGy1vQG)KyA}UA_c`+FNS`Z0_GL4ko5Gl^0CzHVNyAO6sdL{-+?v`N_dTTh2maYk zxYR}VWUS-=_jz3Yvu=g`cd4=SyhAAKhT8q^@MO;9T{_JB9`SncPp_;_g^irO`v>07 zk)Fu3_a#5%n(Ny(-xR_-@;pHvC4Rr#72nafq4uof_lzG)?zZ`4FV~yM%J2LAj*>Bn zKF0s<0^(WYu=AK#;NnEa;0GNgjJf43(51Y)7_W=$DCV0D?Be$sTh?+e?q?;n?%`G| zXTv8QJ^afi#&XH-9hRv-lW|xjcUBytT{YgJj8eY!?6G_Znn+uVY%3wXllfbRmN70r zO_^8vPrFy)&Z#{_*?AZz=UlVEyOFpuXYi)~r28%ZNk0x@4mU#??@)j;MxW)P6}aT@jpgh($*zoI{Ku&<&G8? z`(L3MXSyf(GHso}RwnyouZsmHACSw0;~cP4H>FisLba+{?rf<7L_xUZfy!aej=nSb0%AC*4!JNo4~L!OLtwJ+R9 zpPYmL6Z+w5-0!rT2)*PeEdV}D|4-AP9b-&Yau=7ovAA7Dc~(Dz#3cjvpj(nq)Z8{GHO zM^F2Pd1nysTzqo znl+e+!ne2|<8JJgx3M+f!gl-O+M5f__f6x%eFsTjNyD<9xdXdOb;)*l9!X53Fr;+(#Wc`I%qCP0dU6Db!bC zZKUFH3(fzFrys8+641bcNVpV!w$iHk-I&r^!7xVi%&XUhRR6 zwjCX^SJsfwA$w?>?dT90!+ePD@X(er_agn~w43|-=wBl1A2Zz3?#vKjt`K2aA;Pjl zgyn7MYj%Ai-w-ccX|g97Eigx81AY3%n)I&5Mfy%!m>kz<%9_1 zjxgvHnD;5lHx3&>cxym@yl+5Q(a@8*POrHJ+>7#wy?Qb?GenpxL|9gcFwPP%(rHOA zCq!6oP}oVzHkLW(@Z4};ugIdIGKP_|MUa-*&bR=<$2#=T*lbU@fQ8d96!hy?N;RVy|_c< z5qT&)4E?`6GR!OeRb=r##@?U16MUaA7M3xsjOotSp4Z07(uP8df%N4D|CjD@lM{Sr z{9ihrMBZ*k7Mvr#$mUm(-?Hv}2)Vs+N;}`id&7Mjza8P5%9wF#=LFwIWK{%xSYP)& zq^);<$e7cIt);DbBd26tb~tN;6X?fx(s$GMa~BxnFS9RyRKqzndf#0keOJbFMqgdg zoj&|NeRThm4iPUWM7-QK z@gz^JT=dQNxwo_j{n8xo%h?YHe>}|lFl*_vSyO+E_I{nm)G4c&oA?BO0rLhc(Iu;S zUtN2UxdR^7^Ly4Fa0@;{&Y$WD4?F}Gr2zdV^Bg*k;h=_T*hD%$WU94L;%>(; z{a_QiP4F8o@CECb>#;$v9CV`T&n8^(E8F6&%yFa@`p`?mp_QEJB=p+G9l*8FYb&}w zrCYLFVZXE39D-*^G1l^B?mL!x%3QI`HHs^1PHn?nA;Pjkgk^^a%Lx&d+Z-nA7LvEp z^}50$OVQ9jS~?$H#Cb@yy^DqlHXs9Rqntn0Ab0^D!F7HXZS_`wk@d4yVA@eNQBJS9 zN8CI+rzR>hL>PChNPg2;_b}X=sH_lS*&)JmLWJc8g~@!aoPQ$wbLD<6IqT%kJC##g zsFMN~BF~yst#U3-KILD7e3E~cNh^cGA> z=Z5x55qm?er7qmXJYT|J>{ThVo^5*J3-bLvrNV1eZB9#!d3dMHitNIS?m$Ombk??LNn(0UpC zabd0tJa{H&n<*Op`^4?PU`@W|Je#j(*}#a0ffWx2Gaf-)I~dVO_J&)^nyle_8=#@w z=Pvu|%rm0jYQrx{4Xo?8Uud(wrbLkUe=6gP#4Wo*G+*AFP;Z?Gu|%l7JZ%fk(<+edra)~yd=fpy#RF|t6b*Xj(vQ7?sh zt+AG6X!S74B=txRs>e+&^`Puh<{P9Q#9xQstVcBe6n_Rin$zi68BW+@&a%?!ag(Q> zvseX}W$sKV;06ivCz{-J6j{8>~g{rXfc~&t@6!TI6oqFjt7M ztPo+@A;NM(gyjZ>twrvxjT`J;V_lh{(WAJ99v@PVHP%luOkJ@q;z_SlQGLQ!I?r^d zymzCr`aJw5^iZMe&weg__wF`wspvgreD822L3m;d=RJuX>c2_Dovcu>LH#$dUhtl! zjPc`&6vmVOenmsIcgB)_befDSQ?UPJT|s-t=JJD2(cTTri}r3{UbJ@u^P;^Qm>2Ec zz`SVh2IeJ_vFpp$eHk8j=?MIjf<08j8Dy#02ZDD=!3Gd~ON|v>hMg=lk#B;3k#9BV zu0HsWS~``k{rO0*;9cgaPHnzIurmc;IK3xWtC6!N*Dwdujj-3wkMN$#ityId{nf3I zUkAec=qxjRu{r#8e|0P&{*+Fc+Wf*tj6oup8`^}86U%y57~_+T))g5Ky_@N6S98iC zr(RX8=%rHy$K344_>?a{2Fp`X+obtGdO3-+cHu3&ED91p*m;1e89 z7v2R&(*akTo2@igOS!&D9(p~p|EcxR^T_cEU4^DXPobsIQRug(_OL_RT5Dfi zX&^IFxnIX~CiAbF5pBd*2=xEdee zYJ7kzd8KB@`(o5irM38_yql3%!hPxwxFZhO}b zzQ^eI-LJLyRy=o`x8z5+dzU_w;oVd_+&lSE+K_&GA7g>r>KfehuFLXHrk`cw?_Ss7 z*v#5)F=Me6jISOWmF+ExQheR%TVwftBWt|fYY#b6IbTQCLFTajq1fYnua3*}KE)jB z+}bmaS?ODcJ`$Pjt-ZBq=#A6b`)cUlH!yyysX6Je+Pe6j3d`|+S#wfb1MN=u#_(a@ zQLJZ=yQK^Abx+2ZtkKHa{DtCS-dM&r=V~vwch?+uvthvPtMR*cUvpjI+u!Np`!n+i zf*)wY{VQ_h+*4hA{@b?>?ZQ9T61Pjum+t>pM_P|}@!gOA&&)XpzTi{(=~>RNlePV~ zYtOmgBJ3^tsLT=HPI`hN7z|zhNIE}Z{;>pC#-;~xhcZs>Mf|_ZIVlUfNZ{kM}k?oT_$(oTCb zYGf=`0@edw5*@#l^2!*=Z@6nHi})uRu0p!ncQf4Zrx@;5!(C&>GhBr{<-Zieb>hxU zRP-`{@A{uALlI?I3mxjfl%o_1ja6s3=Glq`X!X5H8BT$hi(h(5TjP;A?mgr!^T;O+ z_f_%||7^pJCr$0U8E*Io815d!ebtO-xbfsE{|&(PkgvRt;eG0LTZg`v5bx{7+{cHm zq{2P52OWo)?<{d96dpvLy`N|E{nR_uTeRd3ub(-}7}iFLpSjcPkJvgi9owd#HN0#H z>&gqU+n;&6Y5dFBd!`-#QEz4ZtJq1)1Zyld9QK6vE;ihq#=F>Ww;S(bzaaxPn@{XF zY(8_|DMf5J?7qX;TfLEwGGBTG`{{M&kJ&ll9R@wbwig+@02#Yw!EkRX=PvH3YjXIr zSWgF&==`G-+jT|8r^MMwT}RZ^H)EZ?#sB_0!FLkx?n#;6ku~*>WMq77R&wFL-R5OWaceo3crbA#&c>S09LdDH?{KDf0)A&!=fbZ33!43N8`vQU`w|(s z4_SFX-$eJ+VlT=!3$kx~jUHzL-`0;~evq&YHT&JU&_L#rMQ_Rct?b)j&yM4}$iVc0 zoH0zAyI8NvC%%{Gzw4UZ|J|*BVT}KROT*>PNT#5f8uIwRv57{jLRp6KZ%5mktHO#xM zYoF7c=eG!#|Nox+%zR`V6PTC68mg1E$PHjRFI8UifB83+zG9Yj{|zFi_PeW*6+)wp z9iH@-WJhQ;+L)c_lQM75?Wo-=F8h~m;+#&QQ$lVR-x%yc$zRTto|33|ClIdYcJ@sj zrFu_NrtgJWynT^C^a%b4J*ZO{E*o(LG|EK)_ zBJ!?+_pf+cz*Uc1}ny~&6#;bUFaLW%R%geZ!sz5(8^ zZI~-WSXPLz>=0o&A;NNl!roxKGYCC7dtAJ44C_m;f~%0SO{GlRr?p@erEG1(Tp_}; zLWE_92+Ii(mfIXA@mkgjTf$n_ z3R}Wj)(Ts~a=pW@ZRZQjXA|Wc$Xt-@Yn3}-a#;TrnUQX_VB5$#DR&yOPP$pMZS+38 zg>}-v{%fw2N`IAg(lq+(6l}^g`m3x(Nx$4g9}_#XCu_^E5~g7qu(if8CK`s_C2M@L zu6z?XkFksm-x@c}`(yg#IG!iqx5sPGx}W5I4&M^Mh0kXHZwI6AMfy6TTPOF5g}s=kkhQ-g_Z8ON{r|$7N~Z2RldjxdhY+O8vRNNT%|xFMTFaYpEah`6MugBd0F9?S6L)KMgJu!=Zl#XmohYyAz z%Y_%xStr$a!I0+Ck)dozBOk&a$UhfYJFjnJx&HPZF;o7QvO+B_+9+%?v% zLuH-e?FmkA4Ll*^wRa6y#_+Ajg0HhypJ{wI$BUaBSOri}X4Y7$bjrT={yU~^7 zU2D9nMjEe;%k`!j?~8C{y<-hLAmfA=EuD_4=y>^>a%mrH zg0^0HE#b0%YK`?r!TGUfd4e-uWDdccJE&ponnGQaX_T4qbn`po`{sA%Qkvh>0^YHS zn!_1~G`}!Ok)(wOP zHtH(h)=0mhkH~z8@Inf9mDqdQ8bh(HFLbEPe~C2`t1@T}epxqIu|?L9k}B2CMdRcg zu5*>jYFQIA))IpD&C1!&a>gy|Ypih&XU#2-wYOoc!R4|Rm&18Y+1xK4c)s&a?M!ph z8y70QH5WLmj{I7$8Or+ZYR;NYgI{E=u*705t>N z-rww|D32|(yi_i0%dOWAFTdUz!5U#W>#h2^1?P-)W?64F)|dm%EzsAPUB-IrdHSZT zpU(V@^;XI#>&xaDxci~&0oLjcLf1pk{$t8*tgi;qHI;f^Zrykabh=zU&S-1p;jESG zYsdQe3qfn;ZR#<(RXv7KkGDAYYdvM!Kz|CZldK)w<3RHbNW40zj_Jp6w&{e08-$VFl=S&vSq zzDGFMZvyp|x=I~o-7H_Rm%3t|UbAkgg1cEZ+}jhZYA^7n!zi=haZ_&$g*B>qOiUaP0CJmwWR&xFw#Eg{+*WYK?gYB z<~i>Y{wZL8Mqt_zTDm74n<-CA+P$08?g7nJ?6FC<_P#V|-jjE5$PVr^Dm32(lf2fh zYBZ06#?jEcp1a8x3a!6r8lT7c+uaPhA0?bK!Zf<)6)9yV?W5JG(#f$4ThTr*i1vbm zPNkd{&Ym$bR8JE&8~TgQBG@#ceQ#_Q>=O-lmf2PHO>WoHrV*=$dB?(|f?>PMf50&g z`nY&^5$1wEAFx-&Y^SB9d6I9^PAi~!OB)T~oF!<_9p(6 zwmL3nGUKYWW&c)fb%byA)}#@ZSm(+Y7!RMb2(D1*44zB=yGWbOG}AZQOwLcQwfK(&>eY{piO z#tWp4v*c{{j@Yir*sz_jWjkZjaxVMauG|$K!Cm1IV950ItQrDvWPY2({kwQ&RA>aCr$ z{#VYN#sucWOddF;{nygg$F;Z#dS4ZufKTcPYt18dgtg|0|2EU2z5imo3r{2k@WhUa zV4jEz!4vMy|2&?^z64M7CEst#6Hk9bo=}(r5PjTyUMOP-@tfy{`WHU+y7*P%z4LF3 zF^%|&dA?|?`24rhjQ;2<1m}bW^YV1b!R>ZdU(~`&0NzePD=n8MO+1)t0xunf>t0*U&A8)=NGSdoR}h4d{o! zdzb|q{e^~&Rw~!guEFi!rJ<$$BeeE^cNAyin(dzz-2V4T`_PthZ>pS^E_z$qKS|nO z!ZmxKW927&tG9O4WXy}Se=^_n@5zRc*l5`Ha-oF{DjF_Z5zw=do{!_I_fCjK2eo7(NpLsIqSJYW#3K8 zYVIOvZ)dF0!khXT?{cQR*s9k`-3?y(6KTjj+O74D%(aNFx-hpbub6xiNnUOF*-{B31*0_Bi* zJKwe*R7WF&y!3PLn~}tf==+Yy_>^V`R zOJ}O~>J-lO%v7Bhn9sc4xkUMDW~%bqq^73vg2R88GXmufhhziyf8DcWKD#3aIHeptf6M#~w2YnZc{*qLydE0*xIqM=gWBI1A2 z(CyY|EcR->j`q@N7JF%QqI2*_)j6b8jm{sDs0>aIQ%*@8#dZ{0a@O>?ckboBo^`6` ze~tH|Lzb(w{Rh!@3iLE>yXtkqU7-`Z2A4%|s)qf9Ml z_6Ey>t_^3UEIc*nEGf_Nzc#&~`{m644wdbte0*P9pzbZAeETTByvy2y#E;U-FLxj$ zRzAu1HGC7fRj8H!+il9P(qDA?-9;J4QC8!wYpZ@P=g*`b#Zr&-F&8Lp|_I+1(-P@t=G@lg9r%Qn#Fdy4+4(^zg*WvY#lcU$P_~ z?GXRc1f5RwW$Js!CF(oTqVx?spY*F)p2{lWq<3CbW|C zw~3s$aBeERD004!$m{T@R!(F;C+Gir_jlyn^ln++BKoq-)4s=io1AU!kFa=aO>b?V*^Dc?TIFYlTh zr<|*_^6PT^w|rm2H!1&DYlP0491kkLDaXae4!q0bt6A@Bda?gS>tVl4J?KkmGDo88 zqj$A>h+miE)3th_gDBsRLeygt-vj0N@_@SRpf08yzw^Zqa-90^x%Y_xHp+|u_)%lyMx zY*Cqm3Z!AZ+|Nuq)_^IfW!|b@Xr?NIIxrTm=gwrt*Fo)=iXIgiabd15r_SD!&0Gw2 zry;Knkd{8DBzI8BI#WWW?EfC{w0?(}VBAx&Aril?}bAd$Ha|TiM$#_1EwJYN`9FrNMQtx=7uf)V&t{Fq-f8 z{sY@|&OfP5Z)nw~-@iz`q)lI@US^wSf&CF%5q;ZU_?&sp%2e94mid9sQtz+PmUkQY zA-yeC+A_EuZ}~ggagouEV#Dd{9Z4Dwf8MGchg_t-(vGvKZz!2|*c!R_&I3=alrsy= zK8ZXE?vveA`XoATJ?B~&Z70~9`fizR`r{<-FO%`&Z?`FXL+K%ze^s%`zVT-{!;uC7c>8i{{ZDNd3!(c(EEY+CiVq(8t*6Mo&QzRJH~scdic4|G7XwFJlNLOIc&9SGz;p_O-kc~TU+?(TE-l5 z7KC8C&IXKcHCr*D{$sTI>Gp%vcT}^#qgManrk{F9{d4gzqWylyF_%htm7TTtSfT*X5H%D_<`2Z-F*|d=tCu$3kPu zCG&PK7mJP7);3s6xlFlj%Iocv=gjE;KxSeWWGRfP_4x|uRw->a2mNTKdtq)SGVi@D ztBdKQS;6xh(uakQ1NDWc_*%n;u+Wd}m7gtU{DW+jejloQsm#G$m>WEgv54~tQj0i~ zhI)$Lk@bC;g(|4rU=*c z!Ml`MQI(s`atOU^*V8X4#~&z%sVhU-#Hr1?B9Af*qb#}TN^JWqeIDszy7Jyua;6(? z8!CN~t9MghQ?6c2S7t*GQ&;}--(+4$=7+;56JwjX&}Lh(uG~`0oG`l5f^2D{E2+C~ zE7&TZx&&=jKpRt!h8mZt&9oUtIdY*5bfJAjA6!h2wr@q3KT?-aX^Z@ghc5H^{)2xY zFWhm7`i}o6@xt&{b^fVVXKnoTYT!6mcwry<$mE5rOX%1^LX*%u@M_E0_L>IKu~zzI zkd6&#|MQEQ`^F0Cqk(-RzHR#lmG@HZe=+?V-ij9YwX}aw+S2|jphcVU7xGNAvrQNI zuK8Qp-QQ4eH`A;>KyO#cSOi%Yptpm{_)Ycpx^W_hTlDrzrr*%p6{a6OD|+ii{1?;P z$|dx+4Vs#ITa|Z1Z~qmXiJ`ZH>LGgjW@vpGz1>2izfo^b*6P=yw;ycw>w5cs(+_`2 z{qMzpF}nl*Gl@Vh1C%D9ll|EX?F0-yi5H<<$1X>Z}=Kz9^R_VF9ej? z)vC;QwJP%~;y21XAfU_(FHvUGJ{^6FUat#t_4QOUJmdD@@YdrGV+ z&3WDqmA8`q#bs>p*kd93FIdLX7vL>P^E%R;w!k^W-cD&hZGkdG!egZD(#}Sl68ej@ zvnhXtw}aDTK5L-RN>B4i;=_+40^>Jrv(Ohf_i!%#0UiidPua5|_={zn@n&bQgBr>H zK+Yr;Tt*6aVauGSjDu_7by=Gz((+Nu?ixgX5iW1QTyl`i()CV0{cAY$d%A6Y8#MVk zWolYwYiL>(*3i@;tf3ElTA!v4G0WF!BaQtXY~IBVr?v*Xzk`Kv>cc-Z z#qcS#uI4|D#!qKZ*K92hNoOPJta*B#PHX&9-@CQ?YU>U`Jp8UU=P{OgjbUwOG;_83 z+TSwjJiT84?us;m#s;nY!t-Vyr2NPM&Mm#o&>I~^Z=i#WK5{wv`#S$!N@tjQV$0>? zQ3lZ&pC^zWvcc3DWp@0A{N2MhQ)g_v<8Rj)ODk)D3aYR=NS62wnqe+mAGxhBkg@Ws7dOaOb7^YjB@wKo0zX^}FRfFYtgb>3ERm zde-yy^;HsLaTR!2<0+GuOxFnSqc|JwJDe-iCpsI_f1kCl?^b6+eogMaegiTaX70}1 z*FVPDxV&-XK6?+v6V+e!#KbF&l3t%4PEX(dnV$af+(5p-8)xRsnME0U-MV5dRdLp{4+KGu2qHDU|Uih70dA-|M;U-9yPM`_{Ys@l}b9t zKi1MIl{AijtffJmU8^Jw`A`10k7A#T@xPQq(x5CC{a^l-H00k=;H!^wc#K_*CEbr! zIhvYQrt_YzI<&In^PaE0?_4#L_nF#z^{VB(FW>#WeSHRwdL#Y9sC~m9n(#*cg$es+ z{N&*`mWMg_F5mIJl|s8mc0Bw>)Bx2Zv}@WXaxNC^u!Fg{IOd(=kqyYZx!|La4d_b2 z=dNg;2eEc;puab!_i=jq7&O1Gap68U&nL9w==lj1@jQ?5d>>j)oS#^+m?v%ij*9g8 zkrgHLKdyLweq2S^g6fL!1<@5dl*p>}inTmljjNia*vi+>-&wI?epJPh`Fko>%#W{# zx7f7rwt3YR%Dia&O4UT-S?BMru+5LH$RU0{@t;+qstS~_@*WFzRSaAZQ<1N>t9p!h z1;m>|ybtDoRIz=&y`n@3*W%^O+g0J37gMoVv1tAh;w>lMqw{?gGv_-h9K;VJelOak z{=%GnhvBD4OJtQ@v6tUKSUh2N!tzvmRk|gE!y=t}+U*3nXc7L6- zFVeSzb_%QVs*duRYE0G3s;zvw8d+7Uwkz*Xoav;K-YK!7AMb~E4==qAcQ|g<+qZf= z>j!&YF7DJY1N#1)=N0HWfTtagV$il=el=x|uGl|+SH+3>G0^rSXlt)H3a>v8ZD*?C zRVUQ2X4-~9qj+c(KJO!FYOm-G4R3*lZ$kqwGy5UZM7fXdu3q)LB5f32enO3}il;Le#-yP^8d?x_wv0R-|c+&2~SYoiO|vo z4dax!DkuE>nd+#D8&p)jm2b7s;IrL6cq_hYmL-XHj-Z{xaUE5ksTPfvdx%pFEge?1 zs>af#+^2S~N>w^Rr>LsFmae$5Rr%1Z8oKp|XP+bfa^lhsiCosFEyyn0QVW$#)Z z2}{GjW%CoB%2%F*zwc{^r9H0axqNi$RlOLw4AZ9bw3hE%Y<`FLj8k z8V#SXqwUsfGRBl0R_(hrKz2BZ=Yr3(;PW0vTTe#@xu9*DAv@CH&9TIrOuPc(y-yo` zKpP=nw0J$}2dT)8Ns6lZi(APKH}OR#*`Ub*=vgncve>KQXvcWM{6?7YY`R4$k0Wd# zVZyJ|X_rdmM7l_AE_9#^&3=+Y-RiNSj=+b)&rwR0 z#=9a5@(Ei8KlimnmB$dz3>yGF^NDBQ>0CKx_Z}^t$WkvdG#!~!1wGS|U(mRPo{2g= zOaU~7hjjM-ioAWEXN6&pDY&Yp zzY@_)x@^og?AxB`uwLk}-N;HA&v}vQv$3hRAtT>M_T^yTj>WzmXpHB2F!o4g>@m=y zR!!2zX+Gq#gK?j(!arHX%_cop>#yH~x=(`vChR@qw5iu{e;;0f`^*(f+iLNSxjxshpKs#)ozqMlP ze5FFcmX+^0#CH*2VH~`ec-hb^2Rbb^+Tmr|0UDS0oadvxm={siszt=xAao^O_=24k z5euR?f+0eSHcY)}o+Ug7DDw%823sqNpjB^p@FsX` zmL;z00ChhBFRpQqEy(wjLzDl}M6yp7a-6LtR(p7g zQKz_FAFq8JU-KVG#Hdb$<0Jd~LteDJG0FTH#kl7ZS z;M+A?TU65)(HCut&9ueZpth){Eux#-Lgtm0hHMMHADC_N5b>sJZLy2Cpx-pN#ctYy zF`>~Gn}{cTJ)8b#w#8$#MYPctGnHtqEha(lV*1of+Cs+K(iSpbBKEqpg^baENI#Ia zs3zQOi~g1vtu2__gU`b?KL0sm`{#(W3pum=ny8BBd5_sOvh;_z{c-JPTfAd~-eI2O zB4^NGAEi(VA zJ@XH>XKs&x-geLN5lW-XW3OW^0h~u;JZ-VXI-$YS>MXZZ_NZT&JC60tv8-#3VSRHn z>zrc1=I9fkE~}-!ya`r4(OMW>6wZe{Y_x;%Q4n)%WJTU$NL?DIc^Ttm2T8P&H`52NfLeWCC#ap z@Txh+KjU}#R&6KG?~#@Z+q0H==uMr!34w19l^zd7Hg`QM!XzUE&| z`b)@*F-+CN#y{hCZC|xfOE+3ecQW<6X6eh#6vqB@_*bjrym&3nEYcV-Z%+klh2;a7tDbF%ujGoy9f-T8;#fqzu^ z$O1pLoM&S0n-LruIE2P@_=9F~-T9@%`9F%fO8M^t zGmt-UNJVPQ)}am63tzXy+1=z_sBljd^TXBYYI144YOl8A%ATrce`sk?Vv2@Frr11+ zQ`YD@RNes&eBC<1^vb@egv#6SPpoAxInR4MvWM_p7yXV$FnY4*d0H>0Cx&r!AD-!b zGd=xqhx5#6?`+J+ea_-+EW9JjGdnlivvv2V(zTSecDJ)sf%e>tUh2Z_;may5z+FN+ zmf%jkHpf$AQL7nGm#(!9sQ?>PttiQ*58a*XS*KX4UA(WiSgQ+gAD=PI^S;GaUBde$ zi{hE=P(4%HD~-%UmD0~jkw2xcTH;IhTH2L9$64uxcUUQl%`?gxQ(AaOo@WnjbxMsc zoftmcV^JbY)0C*vM_pl_$D+bLyLV40byquAo}k=b${oLJbmq7%^ zm#ZC1X}9W_0YfTSPt|BVQ;n;h39VV%&}a`Hp*kOb!Hp4~Y1i95)B6gBQO8%Fy~hP_ zWg?qC(9g`-77ivO5q}cl9pSlTc&-!iJA=sx*YJAh!8dIQ+7sUiT%og3*0}qCpNRoK z(+B*F9sEo>_?dL@Gkw9&%32n5 z(AH+nwHI@~Fy3OWWpO$qGSFPhGS{fuu4V0HElcJB^|hDo%xlP+*ZZsue}If`S)0|@ z)y=ipESdix-gU_8bZtIRUtgaBosJ?8qAg$(SWg#hg3N16n9L#dXI@+8jmiisC9EIy z8Ohw>_X5IX{?((+bw^dDv+knLdABR?NF04WJG>%^cflSc#m|u=pCLz%KMYO^IpPfigY+<19Vr9P7s!Q3Yh?9cHIaKG z?A4ucrx9KertE!(vWYxd#yMR{g#YUPTeyQdvO0nHHz{josp^$7)>2mK`!~sc9$b+d ze?|YwH}T7vNd5UHa$&~xnVv_G11)RIU77#u%G!R{ib?R$MCNH^-c0!EUwMtco;hN{ zwCHR6aoQTc874fE4z48*+6qsk6HlKrZdp&3HU8mBWO;wSr4t9e#`;}M^BRAk+|OgZ z+1@U^8PgI)x`+Ek>FfOWD~-Dk$IKes~c@eDy{Dw=IO(|=0|P__tf9coK!J* z%{sL#{w%!2yWq&bd>(sD@TBrBOD&5G_;!YG;7os|^_!INGA$1Lwt_kerus~T@+-TV zFoONj)hX!7N!)#2*CEq8sq30T(MLzqoQ*|YCl{h8yv&j9%~S2qPFEwJ9i-YTzlY8k zO#d1p{q5uXO4FfN7yMoEKMUQY|IGY2U&H(f{bu6VurjzpySJd*Vfxpt(B&32s`@rH zy1I`VQ(X^!PH->MPd@!Z?!&leuw7N!ALcyE^!d&qJCWh}lco)^Uo$-49+{snWv{eE zJ}c$xXSF}eSxlADxW@=XE>+IBUhzDOzZyS$R5_FPkyi7Y>N$cv4F5b!KYkY8tDHu? zM2AcMwQ_#GjJ+^-0y^hDbkDu$pnK3ocVjny z3%fa7+gCEL42*P^U0DNteM7>h_rIS5h_o zm2?$9$oT5g_`#%$;|FgF^BheJ_Z*Qq6!_WXX?J7O3rBCt0oRl3`Rw+qxSp%{!GA&g z;5*<4tH2NTHh6nI_(6F51@2xwaeEHyzqy_u{2+XOb-n$cgde;ed=+!G$3@PdGfg=& zh_*QT24nBH!4ER_zKS2biXRj_^S>5O8C-0?aL=(;I&}WIt2*>5e(+x$gMSenx}CMO zW*r)cAH1qV|9Kevi|Eh-+9H$=6&zt1I4391S{}iqtz#`|8_&PuULV;9Kb1L--T`}k z#-b}G64u=a)9@CoHOc-Tb6*epCfMtv<2x5KCnFe)O7^fE11HAWC+v3(!;R()4NLh* z{*(Pd`JL<)BY2P6m0vmvw=Zkmh2U3S;dvEWj^#-QYm&mgv&DiLF|aGEQLC=FT-@a>WFXn^h{vgX-=HNgmN@3a@}$pHSBJ(wQw0mm(ts`o6N*@M@Kb9C(6!HXc6}YpT&H1O zKrk)!#=3y4$p{X!mUSAhta0mD%oTy_%Q_Zw4C}+AStoY0UOb9*kKp`g9gBJB z898@LuulnmOC(MbaXa!)GHc4U-rD~g;Ge4KSF*2H@K3^1RR;b^c;*KI zVKRTD@AVDFKXoRKU|sC(IyU2 zT4Srp1$Jj$A*rgcRXU5*M z6#-$g|4+{3d7d!Y^Xes@wE6S^%v)dTID);gvPW|!vO>qe#We5ljzX4XB1_D3V@$q? zBu$Ya`Z{BzzV3UEtTUEo_zS=<@zlZ>KRF}ww8L5F&G#I8FmRnW@SK>A;6yrJJtv0# z`Ss3;>DY{G5c*H=t7!C}76n#l@uCc&yNT@^0{z#~H%HaHw|VlA$MXFMdr|9Uzg{uezBIM0{jnC@-v!QA-fB^9UWPmuY}{c> zBYEn!0yHN$64;_ih&K5e}xU?y1meEP|9@V0@tKa)NmsdkM%TT-vD zkUC>uRb#7GqerW!^-?@rzyZ#z;~T&^&MtMHOxMC^|~`_~n7uSD1S$`t->5a5m-2wT8Vb?JRBV#il%t zO(|z8N}I~}?(D5_YI`bb+?=1L@ib?dfPalGjY$AI&wdJf51S{Y#O3WX7;MyF!b&V& z1$w9QXuP>Kylnqz?zpqIKGR#jXJ#3E(0tY+XXdA}H$&EVehlyW*XwiP(l+}}H@zV3 zCg-lo{P@TCIhPTCLS+VV*VHL{YluHYc)s}CgP-AS=04Zh^Otcpvz!&&n&0%Zjf2nn zw!%aI7xulF`(5hkr?USgaNmn-4YCM&E`)yOz8C2mbMXi6eR%?Z;NF)x_^0)CdLpq4 z^LS?5nCTgT`z()O-k0P4Z{7Ry=xuqPS+3!p*Vy0U1n2zj?y;q^kEM2ZW@#$>Z_Ir; zQ`nCq`*M1+zhw=3aEg>6746u^G7uR(NtOLM$)zq;-;YzQ>icmf=7xDDv3CYcbmT2xhBiPi~m!$>0^t~@LZoI_amv7iF_8bZB7qPTUV84jOZ}yAFiEH+YIlTX^{bJ}+ zxy$U=$YT|`Y(YK;-?P_L+(SDP-yf$m%Kg6w((GklppOIloQE?#52vM+Ma}1&+i5cf zN2}Mie?(Pod{pgrBWG#c=uj7|bocai9@%qO=TSX(ch2uw-MJdvIOpKB_wwZPT(8kr z8L}%(8L~T48L~50k@MHfx~aBPncS}+c}pIB8RPVeRLW$GEBk!x+zmExdY{36NhH3E ze|X4K`>!Zb8Gpm{`oW_)x4m1V^%Q###$S(o+oNtB@~TA{)b6QncMY(_MR&VHd2APF zNe_^8RAorFFRZ7wkf(#RPpIuiG!0b-_QQVz-%oJY)tKqC2EQ7n40>?-4TDdRSJMUS zsRGiL|LVVN8vk+F)*&ZI|HSvNy=wsZpHkza?{q1T?IaJatkkjFDeI|a=bOgIkw?5G zZUki*7_Iq>ekbLaO&(*yl|c)QJYH4fO1u5ldMZou;omI{OzO-Gp!_@C{J>N$pU&?I9zb_!)($nM{+mi2W+ePvvtv;v7w;gnq z`cCf>ly8(--*(E7j?}ZiO9_6>qj&Gsr{(y)qZrfAN`;0N1L#B4`S~wW8YqBUzaBa zo&DTxS)Ln^{VQ@aJ&MIqx+p5!lV(v%r>K_FV-afOiD>TSj8hxyI;e8)y0%9uhBHvp zv7c}7>GO6ock6p*XUqH$;rVKKX&!c1K6bdhd*6z$jPX*s+O>2iHhVs9eUzR;f|T7BQwU zZSBaDj4`x(j>Emnu*-@Tzn8IQ@#2i4#oKU;GoI;18qDtd6z>AlTx+=lN6{@5p^fNtH(=T=UEL zC!zA7`1xP|k2vC&v`MR$vOi2&{p4e&`zOBtfHeJ#&E+0uN%QxFJw=*+#_syvqY0IJ z2z$avSMC}X`?Z=du{+-39=iJ8BRxm^xwSSue*0*xO-~LRrL}2I^q7`5y@xivpEiAv zHZA!2ZTcF#a|+&J-&9cB$~ZVwyN;keXG;4%Ogqk08xPN-UFXoQPpFMY=Mq*yn>?>J z))eRcf9$<^d{kAo=zppzNmZ&UsS1G%Br*j^QUO9bKoW?U1Y`&^B!ELJ5S2if6lVef zf`U0H#-P~Q-WE;UP$|>2*S6KR?-NanLP3xhTie#xGAT(If)^D^K;CzsIz`I5Putt~ zz5e|^pZESapL5pQ!`XZ7Y3;SwUQ26J!#Z=*1?sYWUKs5V-#CkVvn$_@(Dtjf)blD0 zO-YS$AvAnMh6mB_Ar0=L-8x`N?*QFa18a0s!hbs5c0e}|blU~pUj8T0?Nw;>26TH9 zx-~<$ccGhCr`u?U|I>_B>ac{BpXx(Cs!U86-;zq(n2yJ$66gS%)|0vt@M=@MqH{DN_~+p_Lj ze;;%FblRPOb|;}-C$u{U?au!bXm=6XU4eEclkb$-E+_;0ugJIUaq?cY*aX68w4A%HZ`f44j{SiP~DJNErIf``Nl{ ze{z4zG5I=2nS6(@Gx?5FZVgwm`m!JBW>C6k_q&jD z;iTeDV-Fa-o;33B!={9*ZSiXjmTlwbhn@!xZiin2Z|ZHB73o+zll}N_i|3nbjp=To zwL5&#N$gf?@u`pGr=HOAljFkA8$G7MNmui)0ba@3a8-ozl5!1x;bs3J?N`{Vkae^y zI+vS#O~Dhrv6t!5{4aO)r&U^BU1h&dgS*PU5;(Z*%YiptDQu1GzIJ8@?O;q#zgq4u z32TF%$^7qGvvOw#vIDta{{ zvRw0hIwnKMpWL_KjB_8}67T-0JpGTY%iqfJ2#=qR4G2GfpQ!WqiR$r&1h=2JPgL7I ziSAPkJ>Bb(S^Mh~*Vt35YY)ABlN;lJ*CFeca@wPe>29*F88fcRU^}vBUX{U~f`^nc z*wdqKaCeTm(R~OTKHJ%U9MNT+#umS<^H}Un?%VhK?GXJMdFKnrI|KS8ib>iX3RB0k zSJ|zkiZ6QK>^`JO`DdbfM3M5(MD^0DpS#zaqzp7sea95;eS!DkcjMeg)Oh!!*dW5z zuiA+XqQ_0xATpWM&tFY&pLsLUefHg+=vCiB*=}`zX)5&nRNF`ckzc>XzsFIg=fd#5 zXOLw~R2OJ+*hF=VCWlQ_HyET%q(s#Roi3a#a385oav$B2?1m>-Ij>SrBA4Zkn~Hr| z_4tl!+-bJ%7tBu%oGi%`i9cb)H zU|-u@KM=b}sn|sd_yanLUK_TAvHgZF2zG?=C*o-)-owP(NW56=Cw15Dw8?lc6YmA$ zNt7PXU=2&FFrVO}# zK{yZb_JNc3TqdF8BjasGuT0uv^V=IXYxcBX#P-@^;pd7!b&r? zSWheQ zW@EE&4)*(A!++E3_-{IIOw{7NM!Z*u_qDNyKOOPPh&Q$pn|_ty=mH+X9#xFEK>a^v z-Z+R2ZpOLiVPj&wv;+Ntj+6H5R$y!I3vjWtjicpY-EYCQ8e{7noVnZ$ZUuUM_?$sk zD7-!kyI4g^yr%m%1KW97gh^XtSqm(pzdWPaKSQ0t9Q8JHR@m5Zw=qA$?c|&>rTg{n zfyv|C*_=DxeW9xL6`tQi=Z|j$x8DCxbbvYGmrMCF)^{&XPGVAn8s{gq11Mx{^ zckxH)^8)m_-4yQ0GbPt2RkezQs#xs9CwOwn*GIgIGTxd!;=iql5UWhRw0JiY??&Q1 zXzHoKtJZu#J9QUdRsLC=sO%yBOuyJezxVl@L3l=iq!pwqbW68?ASUmtw;QC*KK z@6?UB^4Gc(m-f`RdSV_Aq+Ane8o-*Al59lI3wUWuD;5!s}B1X-7~)6&K{kDKpy{NlxKH@hQuTHLnD z*xj05;2u#@1pRqAAy7E)us!SFW8OQrf3H8GbJ@9vySYJcCJWadYQ1w@FOI1&i z06mMre~fMV7V_$4iq_yEl^==R%6RdMHA%!t^!#GYC!&RTvM+p0pU9|+18?(WRDCEu z#`a?{^;*7b-{R!)EGyhR(->tOoAL-N5CKmOoFE(}eoHW|%Z=~<7 z!T#0Bqypbo#ipk1ze$yL4g+=)iQ}Ek`d2)7geYZ=_0R@W3}Nai_>8g0mO6T4qm#8Q z%V_nwNSA(~8GjAYYBaLTRh)N9TTWT5dm9wH+G$Agb{gy|w!6Ge-i7;1R6&`rljeC1 z9^s-f$%|e~{SEp&dIPlE2V8vMOQ7tXAR5NAyy!!~zeUs7M<3*D@`gdXOn8(B2j@=RN3dVF4WkYYq zEA?>u^zPEbEix_q<$7Rgvoc-RMOkdJs)KWTpVU#QMz;aKgsM!BuCR)a7B&1ue?PX+kEOlILLOzq z5$s7G)9hkiUNw<5b^>edc-Gu;ti9K>CXYoo#qSsShx7)%F&P`b*8S-Iqq-e|e(?Xb zz0A8fLw;M6&-(3UE(4Z21Dc)y@5Sc{m|U7ULq^Y+Wfd#dfX5?&VW>sT0$ z3@+TaoAZgbg{ig5ms|4NcBIxCc)uslK&ptB;?mAO-lE@?q96Z?CLiz7xVQbvw%we6 z%){sTdz^pl=KNz`_4@qXoPW%#uFl^p&p%AzzV>*3{_{2(o3uPL!hPpbQfd$L9D#tD%xE&DZjMsa_U)ESfVl!V3?C7ylS5x!--oxo2Y1D5$|xWvW= zaGz7=SLOLcPLZ#DRFSV^QjzcE_#&S?dpbR>$aiK|kx!mKoxQHe_vM%(pFD#)GN;IQ z^rj-;)pMwAw2z>Do~3;n{_E}I*3K+?>U-6m`d+oGO^)w?)*k4!i*|WA9JwED^9HyR z(X`9K{I*mF?ZW#+y1$)LU0OS}Eidx59SryR&oCridNeM82Im_3K+`_Z%C95$1vp9P zODPU$?_e+7N2B!|@RHW|L+b}LTFX2V8)rzoMr%p?_{J%~+a#@JzQD3QCV*=@QRr(w zS?KGySm-->zR*wOD}}x@CY{Eeg}yJ(75ZsxhQ_ua8lQm1C!ujCG(PuFpz(R=c@Y|4 zfySl?Xxqv$qP3?sMtadsy|giM3pUC8W5iBh z@1?a{d)t+5UpLrmx65|p2_7d$3ENIvo+CUkR{jUL`)PlfJ}_4P0?t2H%(ZRXXh%Ui zdT7TTdOPl-9bYc=kCkU>#|FI}UoG?vy4Dy8G+0)0-0sRe|bLpd*h{T zQUo%~2xOMD;~d)YCfesjq`w_ft^RgAF~r}FshR$EJXq*!TOPq!k!LZopC>nNg9hgs zk{ByV;QV7Hi8ht={yN1<8(8V{NgB;JOS(#0OPU9bm4_u>gZ*P=J@BiN)-qpxtgHst zHXa&Jg2p#N<2gEwZ-vHXI*q46<5@b57eeETAR2Fk#ws-40*&jS@wR^gjRiD*78*A| z;~mi0Bgcx_PvaeCKaCe=`Dwf(%TMDfX#8eitk|HboGX$Wua)&rwfWO7v}tMm{_%E`w%9HG^2FaA8z*VEPTK7p?RK7ayC}y-n4k8k;r@0z zk?n7{)M5U1%cR{LX2ym*Q}U0E_fN>N5eF^f!1>2U3G}!Z8hxE2?Mox~CQRxNyhB_` zwG;y&q_?bk7Q zV~$_P;N4O`t<||*ItHm`UuTBdcR17RJC<$s9nUfU!*h_Nv846irSmAWul+i+uVaka zcWS)ZcXE>1*S2GXpPrw=|J(|!tr_yXNzyO5ah0s=4$f1wwcMiBwQC%NtQX9~?aZ@R z$3e*ari}wRr)lG$JMGb38wdX#8&p~wHE@T9=LmS&MmNj0_+PZqY>5wQqnW^38<8&1 zMpM8Yu9kcV_LQ}<=j!cKO#4jM+h>a2K9ltJncCGp_t8G9XrC(Dr<(TJ_+M+EzuPt{ zZL@{8siSSS(Kdp%NX_%N%@*2bm)HA~_ZP`IR*kVBZ&H-ft)d|=uXuIX zti?Ox@@gV)o};G_0(~#I_@KI zy>#3sI_@)Y{dC+h9d`oUKpl5d$8~~p>9}(`?mW05I_{#5y8`ZKI?fdDudg{iuV#df zv*|boxRE+8R>#GI8?ED#bX;$6MLI4;$EAWBr{gkoTqd|;9ha@+a==a1aietHb>L>| zxG_3zJh<69Zjz3h2JS{3H%rIO0e6dzyGh603T}apE7Nfc!QG+bDsTb|3FWBixnn`8HSL(|uM?~D$=@D=a1k8R9vBmM6653zT9I6nbBxAuks zwIiQXYU6nl3k`&A${)r1l6mdS&!#HAos`YE=u+H6gKaqz23LRR6wigoH_dgftDD;{>P83`v_2k~TFc?beXAeL~VE zhonsiO8Zbq+L(~EQ6Xs~gVNqhTDh0?&y@*{MlG(qC+4s3cc07p%kxHmeZK|v$Cu}g z@r~aAKVw$DEX0SaYzyOaALa#U+dqW1cawMUzfNd*cm3;F$iF@d`PV1FJN;*3|KT3} zmFnw$^h~VBgVHv;>CiWGtjOqWoP*i1$8M^XG7;&grZm|+tIgD7lEq-O&JMFolKqZ5 z0lM#xwfO#6mv52xnbsPbEb>mg?hiy+yOFR>`Mr?|?(L;?yUvhS(H{S7&wke^-5&3w zY+bkBSUZ8dLc`=;yiGFP7+zcc1L146^yb=4KM;Pumfl*s^9RCLXzA^>@BKh{xt1QC zm>&qAr=^dnwMgHjA$61GpG){WWGC~Hn;d4}$bCUyTP*iwrEV$mlq1Me%8{?I?)v6w zdZb3;jK>GY1ox5=6Wsy-LZNpFoAmqbnk@!ov(w;bT2^O@UFcMHqEoq7lSeqzGsunh zA;0B5jaS}nJAk~mE!FJqz#rDBoJjZcl-YmJCAM)eWxc#=GHpKz`D`)v6-=7V{vVZ_ zHJcB~zF`ThtH_Xw!{t5r0$(F{Ra}aH?(A02P`slc79ajggzm99r zaW8{Q({ar@t`*!M9d}H}odY*i$C={w^2O)6hUvHz9hVI*SI3RfakIeX>$oxPP8xCR~fGPnsku35*mf}5=4j_J5_;HK+1Q-WT;gj`pNj!V&T+2H2txG_3z z7Py;rT$zqr32vT_tJZOK;BM1#4La^+aOFC#S;w`4TcYER>9}*?R_HiWqF%nlT-V(? zE=9*>gS%hHjnQ$lz*XwFG99-vG50^S&h})C?_7BU_k1I5J4q|o*?Fw7OkOj;Vk|$y z`dTIZVrXk@Y~vqUW9PB1&SPEuhVb2Ttu+~I<5^?pv8E>I>+2h=r&X-03o7(Am9?^7 zkv>VJuNAqb#x}k!*BD?qXUH{U(Q&z^$nyceyzX`l4y-Zpjq`#1@g;AY(D-xUO*W_z3vOWd8RzI3HT&NCg=VYLO}%so<%9k^iK`uxIm=&;Lqr-AdHSGgN4@ediB zc1oOA%D?f$L3xhw{yq2g5A&A)lVvO7Uk^4&{c@>8K4h`<2s|`4qu4Z7_ zFOrzw{zyBnuej*vi>P~gNE^-wX~PT0zTbvlX>ixS&H@Mj>lARg-iB4Q;YGa-e{el- zHvi~)-uM0=zi+7do|E^6*TvUH-oJL{us-SHKeNUw+@0u+4ngR;Cw;*E_g<{q$N?t& zz`D6lhQDq4!FBy@8UB3u53cKfkm2jiKe(>{s|;Td`Gf0vqYN*y{ouOJy0~>+zo;Kv z*Xs#i>bl-Nk#p&ae&gJ`Sc8{vrYh|zMYA^7@?OLl%OKtU%v#QHr9GPY)-mp~ZUye^ zS+AAK0pbPL>(5!Q7xpZ2V@HKE<#6>dYxWDh(D6_r_T6)1p?jNR*!P;zxbK0*W8I$^ z6Zc(GdhYuUow2RPUNz@=IJ>VwAEM?No@%3M-*IEuzOrtL+hppo?>18$-v)QJ$-Hla zF@kTS^pUsEXfp0AGbQfZVCuPVzSZRJH1w)@E=)PpWH8j6Hbga+bqk|BPRi2@UqXf& z?&3Bsb%ndF=&==ps{p6@7*e9SlhLcj0?gTPlD;2JaCI57Hg}vj?`D;QfN{w&M%Pfo_(xtu!B-N|yeGZfRfX6uJ=7 zU(FD{SE7HAwK`TrS&G~ZypQWTLNDk(-XqYJGNUUc^=|OTj*gJQvko1a4d`Y)gl?Af z&Hh_-q_E+og%2Qp7V(|N7*8$n!m!&Dj@_O+bUR=kbh9>Kf9oCW^t5272R#SRW5nxE zyaB`;hhLxZQcnzBFB$I+U5BedF=_A%#Cwr=gV7;N$L?1I@h!xc`amx9Nixw9lKMa{ zqqY7lxEb`NV*J5#F7NRgV(O=YTMkazGONHR(H89SNWH5s!JS0!D$OAM%|+m6&hAOa z{#n4^oQ*h|U7c%UHM=f$?CNX+x1avo-e7f~^4Q!b7b?Ce&N&?gW8E{*4SEh5H$dY* z@qEtn1@twqi4~>jT@|5s6^H(l3H_&S_~(2YpPlqG54uqGMbx#y7*{`h%>glDO_Yd7 z&ngT(s|`w=7XBge_YfcYcz#X1Kch$YA$oKH|3C+fQJz=OyZSwPTrZ%<)no|wyg z-fggtb1Ud!JrAA##PcrtPQ!Wbt&A0~>iSU$=&za4Uwa)o{{cE*kG@onDZXCztrO^} z%|YL3F8WT1=s)#9|LGOzA;bSdT>1SW>As#<{(XX;tslXBfe+yqmS=SJd6+#jIlMdUV(q5ZpV&3#SeP(G7bo2zLiMb2m`jSF9`Y1~MeDoU?@>BM|RhLJ4r94(7^WNT4peFJDc7K6-sWaUD?Xd{A?>fa- ztnZrw`>A=fr@UYI9P{uI=HYZD(p$*f9NE7wI&CrPdFEoN<72^=!727n(r2gKPZjfS zM}KiA`zkFgBh1~FfsLAG_&J`VWro@dM_B(;fEy&=WUT!PxSzB$qxo(GPgp0oP3Ukf z;#pkPT}wx#M*@px4-wg^AQCRd`ExB4$){^|r#On=M7))sTL zr_-R+uc&%Y+*xHI{9|;k60rsO7xX?8L=pHg;BTw?MBHALBnDRP7lW$o!c2H~!bh$C ztH@v7Q~Zr|Eu@R(ZQ-3qcsk*8(G$B7J+V?~)xkV7nDOYKzoQ4_In96NT;v)4XuY(b z7?_JZiXB^w5!gdCVJFb2#Ze6o&F*3#j%tkdoKboaC)v|tNYdhXi4#1hO)yzJHd8F~ zRwO!NiM*}MV~%?1^HAy~rI-5sVo3iY8NjFCEO2Y~gbWV#^qYllX^Tbr%GfXAH;S;= z7NyyFT#QbX)Qc*RdQ;dhY@`o#&S6Zn zhpYdTFY}dtHf{8ye&k~$AF1;+fj(58o+bjiPi;xke$j?}&8Cp-BOfD^H~DQ4?O&;A zeyA6P*z)n)J}hM|EMZNY#o9QNHF5^}Qq$3w3fK1LJMZ~%9`8zXA8mhrq0C6;g z${-UNSDK8)Y}58VQUr~0?jk9NX=d;9Q9$kz)uiQnQt^FlvebS9tq$`( z!uwwAk-bd*=aGeJI_}`*y+}olZ_ZnO$McGIz9Qv)JsQ6~3|@of{Sxd)NtpCUv~=AY z|6Rf|Z}K}zyWA)9;XnTH*v1aRKO#?gwk&yRndj%=J|)k?oH6+22+jO<5|4w#S zTORME9nTqj?cC?=;6CRm?sJ~xK4;rW+9O`xf15&^nwyj|x!;s~+r-9SQ>Ux+V&9b! zLa$$H;a#+<*WfNXJq0Xj8=%n>z&%a!p6*YiQ6~4?vbpD$!#%fA|GVzE{RoY&gC1kJ z=f)k*4(@QCn#LVL?r>@};$EenMt1tW)K&4*=;vCU^*#lSj!HPFPnBxnT{N1Z!Cf?( z0vt@EiNHOp(Hr@xG~$kDXEik12#r+k0&e*~Pp7szXtWI)aewm^_cu>+e^aB;s{tCt z(2t}ph@VE?wK{jv=ob9pEm@)^wQu2qf&bRiNObG3SR z(dpkL9MqSF0-xs&MDRM70qzpECxh3yf#8Da)lb5bUfJ^A?N6lDo6xEmTD=RcywK|4 zKY>=Q(CQ;-^$E243|bx2X>}f2WkRd6*xGN*iZ3wsPW=tLj>w!3n+#2D)tt>DKTbz} zb|p2;jc@Lzo}AIP<98wn`EpyewKkdXIByBb25I!0#c0_m{(3>yY;Jq+RcIIo!)VpPQiH%Pq!cSHi{X zMg-S?t1MGc{U4WbQ2jRt%Ba_W6L6a;LAw*%MT5qxG%uC-8v{~f8nZTdS(e>=3d$&lL1U@5pf8cMZ;$`9!&fLV6kUJQT?Lm-$tgn?P?qVWpFutrgTsYQ zeb)@~DI^c%fG(%e02~Qy3xcD79amwaF|}6_Wtpz!5$WRItP48w*mI z5E>-+TQ;V^xU49-A$k)3o=mza{8J?j_j_EE`S%q5iH?X4+km5jV2Ad-06NG#%kC+- zoI+jv`5B^@P`0JSUq+dilg|qByOaEB6W3z?#~z;Y#PB$^a{0>_3CFDP!@*#7k z-m>m7JWd`5Pqb?gbzML4`{kQT{3ZNr5@nQe{*f}K%jm%@L;NROP<)xv*U_-_mUZQ;Ky{I`YwIyeuO z;|2MQ>;1^J-Od`E#j-!~JyU*f=G)2nu!VOzPmJ{%Y&OKWV(#iWb2D$`r&cFt#aF|P zz5U@2_Ua1f+&B>aW%Sx^F~%7F5#!=}ru@E|4`<1NcrQiy!(_Y}-9qAVz8r{mr?o3y zZI6(6oH+;L#l-dUmn%ZKTCNI1CbZ9l4w)_o^LJ;W(#?X7OMo7~WzGxGV>)wtfF8t~ zDf_Z)OG#HbUov-gOXn@;!HGfNj|6=$3i@^jeeVtWR{C0I$vO5)wTUwp3-Y5#0o=qOoB}Sga;QLO;VgA@w+n|vm zi}lLY%b7icxc!%nZ&e2k7vpXyYONvuWa5t}?&tG}J7j>UA?;-1*IeVwo<*EHhYS=R z;tk3z$WsX$lwXkd&FYatCH#TX!q$wl1+NXN$`oab#n$6 zy!)buks)tI)T@U^yV#b+bkF#6d3p#y~4D=M=U+{j=dh?d{C|^a}Oi|8aBk z#54SVGXH;u|4-)sxA6bHbNh=AuXE1&u-l3!o-)KWPUio=z`uJ@ zw|0Cjr5VQ7UNl8FE_RI)XL1UBEu|CGGnv?mEvIq1*Zl7n}MG6z}yNDk4o|Yb~V{ z)i#gOokkuO6M4XcwPhFh5@_pk+95r;;C0vK@vZHvhl`~C1Gxj9DGdDwi}uyIBDsH> z*jt$?BKv2FcIfFwFDbHru4qR-9?7@T-z6R)pZzx#wN4_R3i4UAY^dmK?k}DT8!6^T zq=>h|QpLK6Eb&(OaPd~eP;rEP!jZdVcnaZz#S!AIi^wB9OZ3&^3>53aiMJ}ueS~rv zBl?RY83n#|#P4e!K$;xVWRYehX$F$#aAAl@7uyZ}#bM(BG0&JQ`j}G1T4RdXZ5Szb zE9qjlQThqV5N9_k?#|UNu_ZrO?7DVTHRl~u_RZlTILd+`6*({ z=p1qI+B}hYZI(DVdZbu>?ND(Jo32}~9Vj|`E56QUsl*vfoD|}WBu<{#lb<2BRJw$N zymwtoKN`({fWua&iif(%d~?NC{&|oxWL}#~nl#Zlnl#rACQiEe6LEeOlOZ<5d4L(!{4RX~^|6#HPM3aanI(oZdg+B#0e$L zyO?+rNFR1j#S?|3J)2qJ3!^{P++6VlyoXXDd zOMi6EE>+Lc*IsF?c;azm57H~Xua>2Y4`vP)uiTj~&T=n1intfy;aAO>qBhaDqKr}A z)ASKnM!HDPOA%+|{c(OnSh6wN+cG;>>~p1vy#sT^;`A)>boxlKXuwF}nw23ci2rzc zis*n}e=0p&)Foz#+5vf@9XlT*DO-B!jcU!{95I?Yd7;N}&T4G@zqoXgIvL!=5^PQK zpD~>4*r7#-4lA5rpCWvSgqK!4ah~uB;ze98ZQa!Q=o34?d-LD-7o>@;GC%&4I(w43 zoN#sc#wToqy+1EQ4En?RnUj_6cfDU|7iWtsg7aH%Ov6JnzXW%7$+I(u8n)l{7H7_Sm`syC2lQOONjygmjCI2qSQ+@a$99d=Rta|`~D#@2S0&QZ_PKZ*^p zoUz1vXHnnc(mHh|xLHc9H)pxK{t0-pg zEb==+8J5d37#!T&A6vV1c8yw0{NebfXr%v#Q~%SmA5}X)8|&_5%ye=F*uk8>mZElR%(9J1+)y*c3JMH4OZWi$r|6X8miuG2Tc;0Fk zM=cgnRPvPiA^+wq+`Fj1O*}HtF5CkxVg&gv%e9NgMnZ#9e;n*aFT>g<>`m~xL`+$<*eVcf%m#$Z*5GM6MqX~cea%tTh%FJ1?_h7!0 zImW=eh8+{)e#^N3!(xN@Yq?E)TOK1GT8*VhCuPsG@XcB}&o1ASTIV^HJm>6M zHEU+tyZc;5X9J9)A@0nemujG|qE@~|=kniHw^07)@+YIWW<=<_V?aphmD<;VF*SA(o zR`R@rY3VOdX)T{F(@bbBpNo%&K$;TDzIuAAZBbHo#mzF^nAVDU@;#}w;x;9(n0Uq7 z|6^xOxTjZkdAX7|;qtiF@+C@MnwCe6I&ntytVrs;XoZp&Nxc`{E#DJc7u`?2F3)H! zuT=6bubKiMIvIX+5`1Yf{OLr_Hz#nu>DN7$`skOIo55QMk0f4~Zu()?jZnTd93FKL zJn570QEBj!J>a3zlI7c(Jp#UR&v)SA<02#;9xej>FnG9a5)ZEy51*C>pB4|FmIj}e z4xbj_iOuA#@rWt#T;!h)pO!{G>F{W2j`GA3e=g-o zf=8S{d6Fca@+5)3f%3Q{p7K~J&jiY2r92ZT&%~heNPc{R6@hka%eeZyGPN2dx<`di*S3 zECH@79Uz+EC6^lUl>*<;T2k1$b@8~?rE9W8)QDkX;EICR{=8&->p0$jCF2ekjcFrAO*&~Pdj9 ztQn&TA1>0_vnoR?2$6o3>UT`BgCZ4(ZVw*SEz&Y1+p1+68}qwcWI}6 z7BLT!#w%?HrLP$#BH@oFrj8Jisl&x11F}VW>S(bjHDBxG0m$W&g9ZuR2q|Fy@c=gEsqXqj5wGCNyTWWzXk~U*Zy>4MH z%3PBn45QOU=4#qZ@}=;0orF&(-1*)3)+6xS2JFHr3#pw~bv`+?Yl_!?w3=;=v-$!#?@FT-T)3BlF;H8Nf<1@sUV{=9A_30vO z{4jCn_#AQQ`fM@d`r#sG>W*4fdWDfNw4$kJ1z)x^Ucsk$VjphyBAEJm)&|XQ)N=OdCo7#o9nw$Ozgx(A;6M)JGJ zSY0*eMs*F}eM@dp{{~N2fo=@>c`sI4g;$p7dYh%eHphAhD6K4`z?o_~8D=F!eQP5d+`230^CVFiWYQm&KN) zcLRC93;Y=QJO&Rv68JdzY$&N$-=U8`tc0s?kfx$kVCP?!)t|NkK3MJ(!{F1lllC2H z8YCb`7iFUijUbx95yQ6 zc;e@p6jdSI2MvA!{^L6$Mc$mXvYpf>_*1zD{UX5$KiR`u#($(NMB!aZ+VhNubF*iu zWk!?t9CLa0WZIni>IuT}yX$?I@Ow%(su|StKFX9p z9h!7rU4d7ZZP=4Cjx_f4zQp&a?@H?)pwFSh=}oaaM77;08thK-0O>9 zq4A&izGIqEq*CW|vmaLPW^YwivQ-@cj~>rH<~isUQ?gF|O=+z4-fFjsW?;MBE{^ezwBz$y^6Kn8B(LtAyl zuf7OgeImU2B6#(Q@al`;)zhhq+^ZDN=r+p*uf7;w-370{7+!s!#%q%vUVRa~`b2p3 zMeyow@G{L}c=cjX!c$ zuikYx@WQPV;mIe!tB()5C-`sh@&;teM)zgTL$5U3@Mq<}JF1=0hO>qk3Vb`Oueq>2 z#c=2-VK-vS;BbSf_IY4=c03z+djnzMBs^2XDaJ$3fqR~3sun+@_PG>b@Wm2N!JkHh z)P?HaI8IAXe8OaSkrp3aG8uWvX!lll! z49C|cu)pq7pD?!ZJMJibz}bWR_WNp#ZS;ZL8ll`dAG_SLOo6a--~-=MkFhfZJ{ba^ z2!W4aCQis34Am~ z>frjvPDV(0Y6zSX0{0GqlS1J55I8mjc7(vT5ZDZSw4tkfrjYO}7rsB9FNVP9L*R2E zaAyd75?Icu0eYMW2|pGBe-;9N5(0k|0=I_12SZ?Q2>fmc+#CYG83Ml%0>2spzZ?SZ z0+w@hpuV1v@Esv=LkRqA2rNS2Z6R=72)rc(Rzu*8A#gRYT!RATtqKWW6$0NE0>|Mx5T=6@vx4@CX8>wjC(Kj<;2 z;Pn@g6G!dV|Me&Tzn+%=a*lcJ7xG`j3SQsFzqB$P*5e)b$9oD{B6WSe9{ztbauqvr zmBE}tPCQrfS<|va{NrO@JC98Gi=KnUg=NI;*;jlXmnGhb8$_O&;$!4o$GQy_$EOYw z*_5l9|J+wnr#5#REPh3~?`4l#&7SmEipkpy96qO7mGXc+z)!QkZkYYF+Jn9ER?e%R zB>i9Jl&Vs8@T94S_glgR@{O^CA2)`1KLVC#Q*y8WA+mv2$!{xrdkMe5-d~P^Wax%UX~{ zoI$R0o-~0v;v+$;;{r<*ek$U;>#YXbd7FBSdUAK!dpl`2=;x2OW4AopFt+w?NgMJg z)6X=y>*<=AL!(cWp{50>0X(=RozP34p)pQ2KPJimgmBC;J$`F zFGJHF#H%QMQfr^Keo@FAdLT2{s(v-nAaqtXvWLe@{IUnfg2ZeGvIoa^g{=-`50399wmOhKG$FHa%#4|}3)zDM z*~2bm4-RAxyO2FNkUeZJeN=5i_V6gOhbUwZk0N`BLiR8P*+Ua@iOt9!UPSg_NA~a{ zvIje|hZm7O*pWT#M+V?e-)+{T$R47QJv@r+Aqv?;1z{C3J+cQovWF$q)sF1JfBvVc zHe?U-oNyAd2OF}7Nz6SqWDk>&J=l;vq?6t+*NC0vLiS)q_TWPHV7)4Pka7|KIbq}q zc|M3Qq`T#NVr%66{&PZ0r93D6VP7s5^y;KOaffN`OdI;v74ze2?fCRvx@d9kV}__n zL;5~um3nyZp-cCo!Ct&s>euz%Y%LB~4&jgLrRT7**83XeuEXYMduqCJCc~l2t4!|8 z%}VWrVA})Ly)X0$D`--}lqO3hXJY90MN&3&n|;!EsdZk#h2lR`|J?-_DvqENHni}< z<^zSTQT75~lW%e>`cLkY*#`G%&O3~TM9uD!4I3gmt8cw9G34&&I@ZX`tH!vmn6S@= z{@##=`bxT)ZzPn`5{gJ++#xd2=YJR#fyY^#^P7ZmRPMsjDkFL#EI#I8m6 zmV3bRj2#?EqW!wAPAJxu0+EVAZ zt=xCSc#- z5q$e(;Jal|l|$Ud|E6-Me|hCTu^5^D(5fi<1GW^Z4xn%1te?(#i-gb69?S7-^f-6Z zrLBb(*a?tnmts?6Gk4Y*-}O=0rND-X$FceYe2qBj4?;I|Ydu@=8zSvD;FF|&8T}Gn zTW}wU3i>JfxAl(IiiUHn-mSq~q`e2?I5_9nOgePW>+RT4AWv|6u_w_i^}6bvlm)$J zkCXq)vaUGLQYYb|Rrq45iWC*3JxL#NR4S}@GVN|Xoe9|Kv8-+uZ3avI@&o(pWVnov zjgERrXA6DIk{%|Gwsv=)m;MQC2KV6;J=|YobM5d#qx;yaitm!i)Od`u*+$}fc?3@} z?H0#-CG9nr_cvwT+#`9PTORBFwt@b34EZX1_oLNewJnFF&Dv@1j$PB;r?wRM-lqQ@ zg=ai~U!)fNBRQ(x7EaEyTA)WX_w_sJEANxnorKLJ&Kc_4Vo*GpBWmjpfuBcwiCZqy z$odXjTfZB8A^0M2{`f{u=CF13oiZ(9P4qcA|C~nujPn*%-qD9QP$ThyQ*7v=V*7+M zuSC_R*wnTiiSAAK0j9619lLtE+diW{W3c00hRlzdpAvVlEAy1F<;~G6(Ks4z&K{IdG~zw}wH}&*?{Pa{e(|JPz#9IKds( zadHkxH!AfGa9QBwxKE=_6P1|y7;t@b+#-Y3)5v(i$BUx z3$|nAeAGt28w72a@+@1OEF3&T@%htdO`<4doCMaCX3E(@y^dqQ<#T9{KA&fqwx)z* z2O^9$U_Wbso$!75_p*v`{A?+e=qQ3WgAe#cn+?6EGlxA*KK11D2JQ9VSThDPkMw08 z*-H8v(!WS}6X7v>d*)Eqy^O78id>t*>$QH$8Y9bbhW?#N_-<$*<8aTzvkaRl6$Ue9 z>ruamI9_NlggDYa`6A*>G8sGy_ER{Q^(gq4k~S(_`0t`0LpQsY#-=#ym&p7`BiAN$ zNv^INM`Gn&4Sl`%xu2$zmXglx*jwnpHo|+r(mq0419tEYkL7P4V?1<(etxvsUi&}Z zXRn=lpSv;he)k|~K85EurW-CeXosOZcLE3c_FJs)!F{_Kn(l|Dzrvo;3+QZi^=-Rn zGVAeC`sy+I_Mhmx2k5)pFZtg3-o)6K>w6J=!Wj63|Jb)%Sl^?W>jHiIAZ;u8iGA=B z!F{`hHjBQxzBiL!3-OlI#uc>j^q{`|5H#FG|JzA_w9|faU0bW;0)1Pqfq$=WcQ9Y4 zbB!suZ(p@5Lf>|ghnux8gSWKxF*&GjX9o3c1AV(lFJCi#OzN!$`Zo4Nw7y-8&7$x3 z?f2;0maBbxAnlME)VI4+ZzuJBlD_*CefL$`;WgS}WaWF%$sz>**+lw4-_FwKlv^n4 zKGwX@zAeik`}Q=#W#5)@{C&H--nS#_(KFKe_Eh4?zP*?@UZcUY-Pn^j3H0rFEspHV z(}^=rkK?Dg?DtXFX0dDiKRtM!c%Z9K%Xvcf<-+OW2{fDm4WERjPm#~7(C#&8H&UM`#MODi&oem*??rf?R@S|Bi-($D1jEZb1l zSMphsXUc>IaxPp%|E^%nr!!AfU~fytSp;7p>l=u(7h1jqEz_Z87Ivx9i6iazq!CBj z>uP6yz)u*qb&~3(J_Pp!;Y;oH=z4i-;5#KRI*~YXET`XY(E8_I`laMs7xA7%|NIS) zT-$b0-=W%^7b6s%udgIspr0OtMxFGxur=>74lSaCwqMR1Ec@y4F22+ ze;!W1Q|NaC!KZ?MnfaiJ`Cu!wt>r)WK(l+H*+=xlztB(fbbkFo{!_t!PSKYR5~rB5 z&V!ysa!pd4%pGC%?~%@Kw0olA6&@#iKfF*M@{#-+ciTL7LRa)Bpjkw{^lt~B=NXI* zuE&V`5^-K6{sCzF9DWqPW`1mfzJ2Md=?0s}ru4kp79P?KVvTzgyJ(W93-s4{I{zM+ zhqbjWJ^AX|rp?1S%)_JfdH6bmZ~OXn`G-xBwa+mRALXBw2c>*95+1}*TgZO&4Xd*C z96bHJhsQO|iwJLO%P#b_C1Gnt#u;O&EyQN9dU}X{}A64 zSXbn}@s9t?c&7irAHhRSqJJ%6K9K9YpKr3&E4q!TK>wP+7`DVje7}FC(7#ey-{m@= zVZhGpWArcloX}rN--SmvkLUg&zKAmm-Rb)$sf+3Ro%rECW-D@6?Dy}_CWEg4e;l2* zNB47oh40_UF~s|~?9tA$N0WDXX0S)w$9o?~=xBk(5 z()jMy>@&TWzumZnHrku7U{AMWR)MdbGIYFY@ZE#0ruK!vt&HF5eWds1E7;flR^})7 zD)NmTqY=mWC*McFNgo~+lyPo@Qk%n*H%6Z2N*~^SJM*^@cB6)qb`_+p`MAbg!3FZ$ zFYO`)1Ga198ViA?&q9Cv_{M7k zd2uh!w?{7r`N{p)2*PAL$Zx5m^E2Q;J3K4nGIvUPJi~We!^FHrv`gAGmSWi^JF%g_ ze&c&K6bhw(=Vr%`+EBQCfwFZz&lUcAc@;jLP1u+xAInu8BxHGZcy3FdsS5X_x10VY zzfV{feAuz}+CJS2E)yQT-PG$6azE`Gdw!SGo++SQy>jKfg0>VxUfR>Zb-nwpI?wNnZ~l8YjQ_V^UpQ8RT>Ix#Jo5h!)~? zmW{d4iG1>G^Oy_HqvKk?%pQ9otEI5@DEfd!7bds%HYj(NGk=?2dbXZ@soD$=v3Gz8 z9byyu=q54fXC^Uam`Ma|(w{j9Z)mV-@}M&Zy>BG zj1GPZ`9ieXL7wouDs!NEl6+O_!#t-3=Igg~`+r5u-wSlxerdEtJN0#whqUR>J?%rX zJncbp-6zqz(&f6}>$`rrF85o;`2C%}HvjL)b;p?$`#vA2x5Z{*Kh&HvJu?za84UL$O+sjagqbL|acAoYo;m#fn_m z`nVEqWse(VHzeXJEb+zI2f0njTVw$ZiC(~WbMVs+B1-~S0HPjjvROp^7hU2`xyA(?L70rEuvp9fN!kk zk>6qPq2chH(to;?ZJUv8cSpAU5cWxr!;kL5Hn6nS`vSb}uicoX*4G~e4%7XEXHw?h zQuZT3xE0`rNi+v}Zdq)`gWl{b@~>dQlZF|K(X#`B(8w75>igQ=ZQ|5Bv%IjMss$CqA~h>(}5j z{YHFjufcyh|EupM_a5YXBQ|wc8k6gN)UBL&($}*EAJI2r^RyiQ;ceXSc_l)rO+$WS zhF&k@*ZYt7_5Kc>_)ksAp6{@m+=^|~UhLnn|Lys2$kZ+D=VaZo*Yv{9vRR%-d(8N0 z&sp;~$`xOKH#9$wjQrvn2W3g}oL_TL!^c}OU-Fh-<2zPsm()qD7swurme zcc)Gg*PXg(Ff^2~mJj)U!F`WC^vkcfud=n}uXWOP?!!IfI6G;n+bVr{&xjLWamV6! zuMTxL?#gn%Sl#Wy5u4L}EH=jdd7a|xgU{>&d}do&BMRj?j&1F=9o)f?dsZ*`79SX= zPUib$Hny?hu_do9?Z|eNVK?;MDEHwvqupn#xcA|;XBPLzyuUdZ>GsW0d5>>ua#Ns^)KRKrefY>CjQ)-o?46Jj0NB)kn*ujvD@dN!PtW>M~0n zUD`cOXxstrDEaz*VRUb70Dk_MiEzmmCp10_Y)LI}$1=~4;IX6@y5o6|l;5;-67SfX z6nA`u!JWiEL8_$-zmgJpYpCUG4!x#A)_Y>``hOh*yw&Y?)GxPo(O% z@)wZTdh#kFpS~N8E|Yt$3GB6y4>ejC-+huBh`TQTh)L?Y%6fNiTtvMRxlbtRr&K?b zA9u`9t5iSCUL#Jcw~RB7INA7P^4BS@aes55PD;0xMvKdj@7}lvy!cE0p;Wox-n zabZ7gk`eoGin6xbPScH&$Np_Pym7jrz;~U&a#GqJzB1;={YyM@EBv*|%>CRr?gGSf zKR1E_2dpf66fa;wO{K#wWY6#Z)j)unD6=1p2)fM1kR-=2c1j*g>p{A=CqUN zPM-T1!}C_hb1of!_52|8Jm&xJXVU!{XHvG;Nq=EnaUSES9~y*{@;w)Fz)WybzE@1V za%6+S=h*3-6%{Mi`pJaJvuAn6fbF%bX9!o%o|&_*o+ZS@e^18X&KT~N@`atIxC^_D z*rRS{O!7z@!~6HiGlY9ML%7%dqG`^BfV?M@HkhurMW7x2Z#ozIPs@0;IYXZ1NEy%f z>A%ROX!I|)Nw_COy^Vty|*>;!rV#go)*FgWx(0?#v zOr8x)!#|8%YgZhYrpmRp_5eDUtigTY*|T_m{n-@vA6R?8W$m46!rqOchg!&b5}n&u zTs$|`eW9wr=VR?T&3)A-L!x>n$L3yYa%kU=nViH=R8NnxyQ54o8t!z3;@im@-p;xC zVv|)>O*YkTvU6r`;ru(&eF`2U4t?AY`$cFxhLp!hInn{jFZm2~>QvTzRq`9f+C9@` zRq`F14GG-+jerj^!-q(H71n$BlgziJtOuX5%-KC}Rzd}{rz^0oj$mEA7aO7S-k7}O6v4lCR?pGadhC5RMJjjv(nVVoo2=dnV}Z|}pD^_i z__4|0H}meJul;=;maFT(T=ypuFa5w|b$`pmtLuJax_{m0oTlb^%2&32cmBNOqs!*4 zUz;Dur)>RO`I3i_dB`#{uh+2tH?j`<{BhUi>vFE|t-(^xwcXg=b$QiItf@D$w%))R zJD0U~4m#7b(G4?ex?ww5(|^=QU$y<}J-kckMEI&TS=jg1;jg)ixAUw?=ol z5)H3O*e;X1EtS59&WiL)CUwnw(@!*A7OfxmXiNg`*fq`F{_=G9X>?hnp4)Ps_voK1 z*zafYtmTpW&UL(>=NY4)+y08Z&2QP~4B)(LAm?5C&`(3pmGdz4jMyJHbMEyg&b_2e z;3f9(S;jCeJfN3`{}<1E;-#RE)}KAo?ZmGjzKVY!blB>{&{0y*U8>-`d>-+tiMN4x zpL5Rj1#*f1$=;jCM^$7G-}iQRI^F4{(;)!@#B3mt0D&MVC`cz^Z7^&R9Ce1UC;^m3 z#&Jdv5)u$-P(%A0e?uGvAwV}~1d;g-@93}uf;JF{8J*`*N5h@~4m%_xnD={bcZU#y z%e>DY?;p<}_fxm-tvXe8ma00ZPF2a>HC#DukDV4@Pr4G)y@IV`1-6Rr{&n6# z;54M%>$1_8;2*QO2WzsU8-0_t+`u}mtmDdh#4_d?oZ-s4SlH$jtno3Q*gQkAtbUe% zGe{%rWlsFy?8t!JiP4}31^ea{(-_k_w=`*Uiq80aXzOBK!rbEjQ9YNrEO%T~Wza7Q zeF*>O{Oqu1mjGDr+XvueJ8PA$hem6uFC`wZ}zV zN4oSXxu2Z1J7B&dY1-opCGdc?ocJ2Op+fwluJ4jL^(d|H$mNc_sxG+HWu0>#Dl!>Ytatr(a_5uKxMl zBVwSRDELd&Ol}CwEHFf8#>cFmDR6UR)@NqZpTz?oyWa8=`Uz}|9x10rpH}xR_tO81 z`{~!{1m3=WT0VVle+OwNq%|zYyFE6g-vUr^vUh;HA2BkhUIGrQg+G`qU8G zGo1djD?C_&4kfyAdAY9-IA5OWls+J!bB@q+=338(I7iRKI+9IWf08!9pB{@|^h_J; zNv7rSFmdS%Y|G!($=Vb9G8iW%&mrQh1$n}>@zA!sn)oLA)ozsYO0vD~5jpn@TkbIG zG~M5?+u`Zs&_Ri5pP9F4Uq2mvy!6XT!LiJE!N;O9?sRcDK*g@6U@I6&o4WUVsEG5pxr2>+)WpUNK5D>^RhuWs{c9%Z8{(0lBx$NgP`%X`)G^XlcNarh8T&;7mp8Ds#&IT79*(mfOZ4O%Kcu z{lT@CV8-v-2_G^(sf<(X{r3A#*Xym?-7~lAd@;4y&+Ej7k%Ub*37c+H8*bMRm_uQ| z-PGwpbdiV9MPh0%~va?V`sRs zjy+O5YoX24#H%+te%hV(Ls*k!?Xrrs%j2w125c{(jQ?Wq?_Ta(U!CEf+ljx7@I3N! zz`@vNN=z;a+$n^v<~+kVhde`r5GQLT@NkH;8+YB55T0P|vzqnJp^Drm72>R!z?$Y{ zweH)ge4oL?SXRA|u#-}#Ts+Kr;^BVP8-sa&wO{qrVBfv>?L!I`&W4wJ7mq2*h4fuU zZ4LC=I`-J{`1XN^6n+Vx{+%?}+be~vXB8ghpXd-H_%8R^e8%&6y7Yz8XSVVTmhW0z z?mvj~q)VLqzI-h`4-=QWtb~ugrZ3-=|D@OxUTbVmI4XO-^j7#N10G3-SJIfv?A7*t zz3{}3%wI}P+We&o-}a69dTb}0_ujCM*Sv4L_`i%~jJENJZ>RVrWMfmz;|cg6{$Cry zPqiW3?x*1H($jB4h^(!`haK8pNQgHUu7Ni1@ccil9R&rD*p# z<}8{Vi9L2QXFO1ke5vEcNBE!VK8J1==o5a-9xFD&l9y77UNPe*udlj9AB>z^o#NLZ zeS${~Ik1^IaP`J8?vx8XaOOR$yBa%kgN}JTsBj8pS7pdOQOvEVPr`S;xmBd946j-T z4*4hY`8es;9A_Nj+y1|aJZ5S0mzvFE+-J9qb$`3@r;kJLpqm~;HyueowT}1WyrCnA$OTR$o#;Jo+sbD#P4HlG&8@D_!;8& zYw=Jm9->p1_a*M`@`8KweZNJ|Rv1fFZ4S1QcNtHilcxl~S{c9GT^?|w6fx$i+L(KW zcPH;M-nzT=am%^MCdx?yF8d%n=U6XTO59Bv)}lR|grD_#=U>6=ci>gV_+|QNr$-m< zJj=6bV=w&NiNDv|y(zy{tv&rvZUkN(l>I)0B@;1LB`%FlK z&(rGe_!Y`tlk@B=xyU+L75=PAz!^qa9`Y|oC+oWKv!aBBEsNfvEY8hGzf?AJmj3D< z?5_}AQ__Dz`f}2za3|>z(lOt~M?C_aP0H|U`%;8PGT#vUlB`cjzGdV~Vy){S@y-c) zO;5{#-kW(IK|g;5d(>gl&1Svhd|JOEfpH!mEt||UGmP$8#06eB^UpB&=KKS}?nA`o z{afrltkoCRtkW}pGPuumm-!Yg)|A(MkHuHzTTF?U$m$?IUm2~$>T;>jv zFJCR}PTX(%xNW|m%{xm?KREB4_6z26dR?-awS#1yv$O%(Tb_-6#XTS;_&R8IqD9z> zRFls>By(tJ;W67d2gc^wdYZD7xhzP)?`jZA5(Ml(TlWsv@dT5 z*6Eg}m$ZK^U4w7t&Q|;{>a=o}>Pl`)%l+8q5&Y*-bN5ruet$V1Q_jbf^D_3LNi&t) zrTscE(-sTmiT|n)wR^p{hf4Wqq1b043Bxw8#6I&3X*ScR%ouGhn#p??^y+5?9)6zqSugV&(JL*<%$ncIKdl%OHl^gb;Tsl@8Q%51 z=e#Rdj0u^t;W>Bct7FV5?>;v+)Xuiuw4^~X=}DRWGLkx&>`6oMRqog$Eoqw0Y{^s1 zjs$yNWCtb4vRH|96pvaQ$@-fmK~)|1W#>gsS3)dlN{E(*^8zf#6ul#3)FR(^(j<~5 zjqmOGK6y%hWEY*qQl?lOW%ebJ_!d|y)CfnXF@=$56^mt#YILMdDvV6gSuJI1u%m3s zl1R>sx1jesR-~pSVE>I@eAdK`iO*#0a7)ksHyy&&>cCERj~dX$Y?66yPHa6m81Bvt1q$S#OXw=Zf) zGlX_sP<-_Xq}euQab$Y-qR2t~+rmG1(Xy2`rluE0Cg@a4CvYfuxIF6RNcp#se-*Uz zRQAh}`xVu4l>au`ao?1@NahH0j$W?MGIv&zEWOkugGrZU?4eI$9e2!?k-Ig0Nlq2!MDG^K7SbG|i_?{G=O1ciQ9a1jF z8&i5NS!*53_c44Q6T8it9@8^rbir2Ab|Y;!E$zLr_oi$uc!zI2`PNhWmJpke@>;#2QHV&hY61snJlsN+_vv>_rkHKhl2YC+jH%9gt8 zViQwFQFe<4nD1MSu^m&6P<9JH%oe2UQLxb(*#K{wbsc!HQMR78JY`7gJ~=BXd~!^& zbxKT!lzi&=l%X5nx@q60#&k+KP92{z^yFJl?c2ndgcLjVY;O#;KGo+ntDbOjpF*q2 ztc;E`D|3cksn3cxM9);>xd%we?QgRw9~tcG4byC;5DP+>@Q(1w&3QZVlT``}pp^kT ziG05~&&N~sdL8ThI@TWa=~LjBetGkt$&#@+nzLUim!k91N}=I`j^f0Cl>mX zC+KIMpr84QekO)~W{{o!r9)cM*j~Q=B{ABb)VXt7(%bZB-%Zsgot>*o`gWw6^siuL z$62$I6-_<03AL0wQtDWz23uzIEp=q*V=M_%N*(Q$7)$vtOC6=EYRMQ`>Ufbp=go({aD1U_ zXZd<6p}w8v`merl{96}m`8-p;x3$DQ@)@a3;8Ku*VeK%`|EuTM4xw;tg6W6t}?gWQ|OTp>6NbX-zLoFlpK^997CF!irW_ec^!MmCy z{pQ)$_8qJtTFhN_NuTIYm~}?p^-1_}S(4}@O&ttL)$Qy%(8Db?;r1OeKA1WLCDp96 zCv8$q7Ur?UjY%Kt!!0#&_8m!ji3ca$oHqpi84Mo{f}aM$R~f8nrL(5x^NUqXKir2k z@G9fdFY38Bu@SHS)Vv1rI(}x}A6jRt$+uMuIQil#i<0|k=({SovF~Q z3oUF--e~gvf;4?gLkb@R#ymB`^U%C`e`%*vcFaSc*51?QJ?IdU!Kyj5xof`>l_yA3!1r$n&+*&~oQ~u@&HMh)1=~(3=E7j|L_Oy?zZ%(P~!E=mnLBE^%VP~_=8N_>M z@`nL?LtffPGCrEf8%q4;-Dw|9C0-q#jxW|NUeJ89f|M+qp>ua7t8=&#v&D*!PfDJl zNB4rP9^rZ1Gbr(ihCYl7eZnXD<7uQ%Cw&_6gqV9%_K?1m^m4ypLQG=HG14C=eITCD zXKjkIKE8WAx=)%i^{t69(V4)Vsj{}Cu*S19L(WFI`&lf8af};*c}GBoo6bM(_C1iV zhfns!r=WO*5>;PnVC)H_kFe5Lgwto(=sO}9ds?`Y@E@z`66!W}wY#f1^FM4$nma`e zbskpnW89VDu71Gaw&}vXsgJ+*X~l=zFI^nzy;PBK<`Q=}dToo2xFQn%@M+--f4g+? z;8&MY)4si=(?#G15b9kq@t|v@8t(iKShMst?~Sy>uH+7B?lS{ei^GTFExpcpP#@}D zee!X2)v#W@GKU35C{ zl(Yk`B}%aK0BL64Jm50#vb#-hQg&;lZX4fE-lx>f)!Cf0l}PX8k~cnWpR@DQRt}@&;>s0p}bmv!wD|Kgdt(@BzedcP_)n50xF2wsl_kvIV zG3%X653Kv&ms-z1dx^8Iye|a3{plN@?z}X9=GT}0vGVk#|IxK};=k)XoxR_+jk|oF z)df4ZsV%*;xYnTt|B+5=u=m`J{jQG}eeSw|Z$bQH1KsUo2Dy7bIoO?mt{nNWy)Ny3g``Fd+k9L2FU&=hr|E5p% zFz$Fwc^|vXs@a*MTD|2H%UxgU+Bxf3x48CzQa4X;b!usV(U9h5xvP+UWvM#7^Y}=m zuAeT(`)2-Eu0_x^KzrZW-JwqHUq+*U(3`vBoF(|lTw{G?jcV{Jxw~AkO04sM-dFc; zb@JchT%#&p#op*2b$8(VZ~}ZBeMn(%o9cweyyx={yN;?x=YvXH@8grda81WneHB}Z zq}Bezdq+vD{jdMRRisG!+dAj#ef54zAM5-=@5?(6dt$>s>RqY^Ip=T=c|K`g6!_#< zlnAZP35w#xzNF!dJpj&=%n2@F<4M(7o$)$f-QU8$=#W0lsVb^3Ex0?chG})K0q5vd znyjF=I4_S?>PnE8_oPkKc>#RDUS?-QI&i1a6M8k!6IyfL*KM>uHPv4CHTd{a-_F^P z4%{_I>v{TC8m$9#HbCcPik}z!bgrIkr%fgwEt}B!GJE;vAoHo%{hOop=_jO3!MErM zttW#wd?qwLy*7liozzyh{zGrQqWAq5dei{HKv+^voJ2BFZtQvf>+C-jDJY=u)@qF{LEW9i9 zds82w$#J?8(;&wp=U0Xc{iB+tuTPd+`D7J5HPDWFA5w0YK-;&vr_(OVrfWGtejc9lWeGN_M z8~Kyyo5~p7SZ3dXCRgdNe+rF#xVY6XH>I)Mb<}*n9DQ5A+#u87Na!|C-Xn^c^O}F4$48-Nyf+zl~89P^_dI~9@p!&xuRAt zP2MBC^YXuBE^qXFMcY`-ZNqbGcUEFl~OR&68BU)~)~zPZv4d zZ!({fauSqq%2BmB?|kMK0`p1kRuUNV7|W$@iUKU!uI1O-Dmd`xV}A1_^FL`vpse}e zNapgBnFDBTfUds+=3deWT^n!!{{9ACD>VH3+tGxsMbPyc{uKWSZR?n`dwEA(mjl7MfGFILA2{b(o-`!|NZm+>7G3b&%Cbt*p>))i! zO=&wHdJA1^;ms%UUHLyRyOGFXq^CLg{W1Es121*Vk(#6L1@3Ma`uuSJ9CZhcFVjyJ ziM>OkbM()XUy;9`D8HweAALnX(O7;@GtS-k34Qbx>=GX~Bf~$Xf4)k;^(K7Wl+Gs^ zI|DNOJ>$%i*b{yptz&9+*tb@=p2=2t(5zP~`{>Ck8#{vBgk-~9j0INYXT9Da=c!O+Y&{CDtGhz+KpEltMZ zEAaeE>`M)EA8dSo2M5cUqyLcn{$2Vj4eqV^)oZjd3|O{NqfTB<$U8?A^n#ch_L=*8YX^58tRH)+at;eWHf-iBDLc z(Ej1i!x>U_HLN3i!aBk-))CySBWVAk_!mui*!h#N^H0OhKMgy-_Ai=$?1@Oij{gaE z{3Pu7X6*RdzZmvmHCgZPY*0tX1*xfSgOcULRY*y-UQPDlMerkd5_}2X1b>1@U5Ocd z#e*-wm3#c1xDt9O|19mVUDk+k+5RZXJ&!a1`(Ef?E-$MI0)BdyYN*8zq zdzhE?_qt^0?SbA7=zRuyhpboKCg`SwvX`#WdNpfYuh*CADz1z)v!)fo-HGg-z3rTY z*xH7+o0P0cCgp=1Kh4a<=FtJdq2&D=NRYq&g z*`MOYPpr-iUK0Fx(cYn-3jMTq=qEmsO?k`={i^i(k}AE9N99rE!Dn5^-Vu{WZ_6E1 zo2k5xf10*mL`OUVUlU2A^8ROVv59lbSo^$fAJS3wkN9xrpbr>^%=`QV#*zLs@P24r z{#cOmfzMyWcNb;LT(vMdS6|q6i@mN*eC`;|wsk(BZ+qZNUF)--=#{L%-a)Bn&iis_ zWou{7`%2xk#DVT4RkzjDd+F+Fi3Yd$yUHG!|HVB^N^p9~8Y6v7a0Vgr5o{+^2-8Xg z#xm}6ZL8`kUIb1r)lhhiGX~cf)sly9)Nc=l4+HzKzicS8l~$&&&39jK{i%F2Ekwym z54puRHTcyC-!$!8lIe%M^h0OphrIMd1<1@&$PkM|DqY#U5&FZvUgf`jVr;Iv$nhPM&+B z3D5l+zmEXVwfUJmw_~{Sx&wIP6V=!c>Sn3hL~ie?9qO0UWqy2{I&=T2s(b)lTgcs5 zP5C?ld2Z|*6Yz%#oTDPV6c?nssMjf3P5JRRi{zXf;mKAWxw}l#VzaH71kX)eBxmfj z@?`k=YkJ3ltX-HkC-q*odU{8Ld)hmL`c6}nUS=hC)wC33U&3UiPGIh0?aYjvB&enX zEyy1zqb+4*%br;9oo!4bR7*GuA=xL}QJ&8Jw5qK4gEJ{#1qFv$HWuNW8?|qG4S~Mz2?S4V9}5G#=|Q1Kx^;xr&a8Q*52t)tMcz055=d! zS2x*v*V0o)-F$J`-yG?g03TQHWUOz}UyA>{;CN@Lg1^SCJ$E-|?bUolP2l$r;Q5De ze5DbNu}~~ed~1Uy!iY2)^7`50zOK2^I>Z8eV2m2biYtdKT-UCO|JsS!&Bpb zRQ#M~WN;RjKX05#iPG|IX{F^u?p}k=g>g3Kjse}q&kyzVhc~#>rFKFTdQnT}My;4b zw&v`upeAEcyV_&OXgaMx`lC=QIJ|L>;2l)(7JBy0g<5V|FGg z7fYFYRkK!S;$Ak>TI!*y7nw_BaqrfrZk_2s2=gNcI!9SEEK-sqZo7oKhZ6{89CLl#6bE`Rr%%n8IILwG2Df^hP*lFXe&w z#r7Na#mbEt3EW>sTjKPlvq#wr@@IHzQ^-rJ1fQIn<2g(Fvq>9IT1SGf-aB=sv+@6~ z&-z%>o_cXrE@Sv2Yg)-Pe7fTE7WGTuEbGL)f`0Au7Wa!&Tb_-_FLP(eOPAJMsLzr* zZMyUm>qK5VzQ`|7j>$5ARW9dN1j>km_Sw)W*SM>HJmtmZDHp4tLvDz~3;M_{^B-wnK*{O=~-L;dfeyxaWm zHr}KB?@_!*``@E^=Wb68W(@D~{`Yv^xzAJk-hubd{`bzjb9blqy({lM{O>(@=e|zu zdoSMm_}}~R&OM#l_kPL_g*)Z44N3`m)sgtRAvYyVxT%E~lJb6l3P-_X z6^{K%P;w{E6|STVfsc=)#m0V{+2DC^n^z(Wx|TZ%rj$E2s@9OBikdvc41AvRO1R}b za5?|Na+LNMLSBpPt{5#F)b1g(pl?C1Bfvl6=%fou4hH^xIv@N3{N?l5H!~5Mo@nzb z@DBt3uw%a(9&(Dd4haK3&pGx7tN{KB)o3XI{tEUp?E|mRz(*ZTd68wkc00-*+wBO} zMI^J2DI`)Cq1C?(_}KR>Q{bN^(50;FLG~pbbex7B>>)}X5&?W3Y7j#%F^aZaQ;GeQy`@j$UqcbFLl=|xo4frX8c27g2 z!_fD9w{pk%r^>;jpT741pXV0-Rm-btxaFMCSO@;W>u%GM$b?>Hj)cd`92=F0e{xS|&oLSHb^zjeJ8H2(h<{we8p*irHnJOuy1TggN21wN0Dk0Ui+#)fJMgJz3` zzD@XFf0BUDBXZ@VZxHfjL%xiblY)Qnx&;0y>$MmB z!#_IJ$3HqBeT6@d0Dm@gDg*yz$XA(PzBKsVfX_1(KJ(E)>TR?bk*{}=n~i=M*o}N8 zAYV(szfos|eS8J{b$rWUSb{Qj@Rq zB46OPxEFHy*da$p@V`MdhCm0c{n+a*e?q>5PC>|5an~c%|A^x?#TLSSfytx#v*$)0 zXexVe*ek#jWO)Yp65c;(ekF26?{deAUz9uG*JSP{!x$M6a!3tJX5XX5$^NDp@P3@C zznI%r$;wDezcD1ue&d*-Z}$^feZv>w+ke84(*0ysO8EMi_3Vl3kaEJ%zx!aq^xf$< zM(?)Y=wR&I{oZkXwg2}TQ@ZyUml7TnTWl?0kHEdg{@q_AJYfj67O;s9J>jXHf6yWRSFZ10q-)JeirUAhc-6cFi zI@^*D*t6HYdn9S)eYkuyFVUXMv`5OlOna{S+au*& zracnQ1+UM8S83<-;PnOYdKJ71+~>iogrBjmaNCk?*11dmY<-S>mSbtpqqIlzJW6}U z(H^0NqUV{!ogK@x>aB{pZW!;i>*3?8>%4Fy;nYxb&Gd??q zde8OKVJ`K4z7ZWJQ}6cdaoh_0ZNL{=Z3F&x;7fgkM%#cdVLJOO6PLVW4N447NiQh2 zro&4az#atbbusI#gMd8>*ut-q;nP9DmT>WdORO7!zXkZl*bUY#z~2h|z&_Gq;O`^d zdieQde2bIkRb4u+WeMAm(N^|E7-#_}L9OjkUKl;GHe%<=~Anb^d z=m=5hZY|w6ImhJ+dbQ|in(o(d*3mt+qO-L`XWNvh9~<{iWe)$d%-s8wsG5f7q<3~I z=qsw&?Q;!^XLR?NE7&P=fCJw`bIjH*t3(-jTd4A6uVdUqJnJTc_B05^n_TaFL$Zu)+D)EN&}* zH~NcD{~JpALmKY<_$y^Afjv>wU+gn+^9^pwxL{I^cdlRhb^RN&{)+yn(heQ)xSx8S zf&IGN{hVQ`xSdbh)h1f*)b-8r1Kq9f&8T$TcuDmA&8&^BHpf#g>n=a2^QWnI*ZKJu z(2eiZ`PJKXem|TBoj+Z@i_Wj}>HPfn>HOS{1l`5%EV}%w4LZNhuk-7g)%h1|I=`gR zq4Q%aYfk6)*J%=KpQ1}@IzQijQ0IS)^DH!;({%pZXnvG4FofpNgtJQqLZ=Mql@8s~ z(EImkwpY>lCn2{|UZm*!#B2OEfNsR)eQ&*n^k zW_5Gg(yYCJyb3mem7<#mH?aXUz*jG>5gpu^j(s4bB!01ha)U}l7mugBILk|ysxJD< zHAObD3EZt*^4iIRO{euH-HWT1Em8`n>vV-u_xPZNC5d5s-nB1&xFmh$fD-mcQFrxX z8g$ca7VKjeJ4Dqbe_O5CImAXoS^IYiDW{0MsZ&M6f9 zCWR`6$>`0FiV3xjuw7p`ayr+V62!)()5?`JqMz$R(@G|Vs+yiYtV$2xDn}e@aN)D; z{oCC4kZZ=UL*ALihrF`}X1LF)-Ij;y!j|W$7LVxUlk!H@jvy>hId=;m67G-WQJvxs zKB*7;74d&D=u(!?#1{bF+`V@8K3BrhecpsO_j!jX>~U9umXB48%hBCDsp8+kUOVil zbrpTfU8#<8Z|a6}FS_$`bRW-Db#$$Z@q#le@QsP!33grtN8NQg=R0cm<+Jcb=rDV? zt6=GFZ^4_pz3Ap1=HAQE%{BNJHJ@#Ra}GWPC;A?C6%0M>Em(ipi|)Mqn4%yK zUWe|3KT0Hz&Z*NGoE@I4aE-#Zq)hFxd^Wxi1xqV{U*YW}@O8n<@AJb)_i=Krt#cCV z;D!f}0RIT^k9bdWo+r93^&eB~3bWTSuXpzyl=Am>T&`Yh|xgJJR(~dmZz7Xb{O0 zQr zef1w(>uPDQL+=6ikvvA8Am_c{{37(&pr$St+!llXV(|YmI2HW66rBbi-P~DBUUc)i z?hjVD&JU~bo-eKd{}Dd?fAG3zc9|=EX_+_u%`)#s zMfL0l{x-#j|8(k~4*W^bX$$zbISv8;5cCc6@n;_J6B^@RWWnYf2u+V56Q_lLz-=D% zO@O}W=AMDnUHB8-+>-!p6QG^&zZL!|A9loBUVOy69{z#1;GaipUH97Se0(hXOAI_# zXNoS!S*$|eCj2k*CHN1>m+)r+GJp zz&~a1PZ|8v3HrXQ;onDJ;m-=-&w);-z<(L?Rpys3jX%|KwXSaVI&@FX7fklCU^{Yl zM7~OpoBe(n*n@nfBVS9ve@C4W{!y2sn|socLGD#`PJ&Lw;J+CDFNXh5fq%+||AC+C zgYT1Jsdtcb3;cgda1UP7phbco|JZi?^5x^7#{3@y{)>^{V&oUwkzant*SdQ9;QM6E zsL9w~WVl%Euw3xk5m_jM|I6TikuM+qeexyvDTls7rzL&B<52LpelPNC@Z%r&eSPqK zG8UxC*uFXCnta)G$QQURUW#14S?=u!{>xP3a_FG7UwrA_L%xJg_aa}#Lo29%g|`s- z#_s8vqdr!9-nsjpch6>@qYb{8S~1uC zSx~vFJMG9r_O~aNd$-4C;>TyC4{Pb1wY!h|>LZ6;+pit={@Jk4wY}{~@8^m8yr0Jo z@+Q(xq$@3XS~**09wE&U@0PZsywCsd-?)o4KCn5T`sZ`*zmPAw{XTDW+#ujaJ0Bad z#}$2jk2ktqx_6(*k`nE#HU7gjX?I_Dbo+mhZoF5%MFTVX`VrEN@?OXP`Z{@Q4f}z$ zpEN`G7VZ3ROF;9ml1rY?TSePzUc((EVA5c&$)zZ2!`I0F8<0)IuPd4FxJbiJNf z>3uzRtoIdg%z1k}M(3gtd%=4@clwpR-t_2!-j2o!S6O_8w=8C~7ddibKhwsxJ&%;T z(yx?zGov%T?-)OGrN@8fO^i=4oJ87&9y_g!^%>3+q>e{)zu49P80W3ayZXyr_z~pxR|g)Qnb3KywKKLc zW#F-y3h!p#1chmPnD{~%{a8zZ^{SrP_ znbT9k?8=-J33DoQk|ms7nbT3i-&W=%>iafr$0I&{TdU_XbZn{TaqhQJ2OggpsEdiZ zn57=nD};AD^=e$FT%Gb!j?vdv$-fMp{AcA4A%BQ3|1$J;f$_8Qw;;dOpCA4HXXkHA z{uYhu-|=VGKau>c{N<C98Sdr6kdh*Fa4fc>y{I$e}($JU0)#l*KU0tubkJT$~d}u4;K2f%c zA3_%8e2g!L*!j@cTZj+lsrE|Y>B&l=4xLZW69oL8*TuFo;SN0J0Ym(%C|k294F=vW zMR~2k*Q2SQNRv8OqK~S;|Mo#8>gl)YTR;4^oYnX@@J=6@!5Ky1eZbp-$4HM#-V13y zAE2A_(!kdqtxv7bFkm;d5{FjvY}kSf4}#z zw0KKTd;hzX_jk(sA^y2JZxrQ@gm<7_hL3hZ;6U2+7ur;x5mfQ-sW$8$5u|BB+DPh% zeN!LQghuVS4}kkY;*`Fo8~I}fD5kTYfZKB!x6`K!^tsm1HXY}e`Rt9*n7k*+n%sbRPr9%G6_hW(wEuHvhMR~ps#N)8-QJ*gY zad7ib-m}Snly|v9#)?G2mr1 z`xi!mJD)wW4fPjWZR0xa2-Lw}r|rZivL{~B{Dt@GID22tgNzW|^~qNXJHv~0?B|P9 zTc6#8--QpB4-bd_$eoNg>%l{t+wiakILG0|-_xcBnV|kr&)G(NntY2-Z^QRd zc*tja{Uzl-3C^Fu_UpSZ=?U5@KB-pt^xsqOVpA;*uAnbzRIf&STKjSXpQis*KE-#g zflpic`LsRfAPb*T7vZr6K2_C`!5Pr z+Nh0X(Er3$X)9;017G?-e8t|7vIHl;5Z;h~v`hYd5l9POB>s6IP9GyYS?Q0f_%k}l zTb<8+^*W_*wLY!y#}d9w+(;NqTtX-D5JC%a311~{B@8Dnp^JD6!bsv0zCpYdVQbYL;QZi2Z&4fSK<#6K15u?ox~p|96(&cQsU`^8N?;rPkb=p5aJRZAnqU>PF%vn z#4`y;5|^-&_!z>m#3lR(@o|LXiA(q;@y7|DATHrI#D7INfw+XniBBS&OkBd##GfXd zN?gLT#HSO^ATHr~;xh?n5tr~X@#hHV5|{8g@!t@>KwQG_h`&fUkGO>O#1{}QBu-cb zUr2wte}J!FX^vNSovF{dNnbskH2+^^#pjoPyR4MO{-2YTHVyplla*Ey_shyF)W5N; zga^|4WyKPR`(?%CkBh7DS9K1VDPG42iMRCu#`B>#MPqkWgZlUU~U#N3u8+P@VeG>KUmAd-LYTpTVS3a2c0H?_#|Bbfr1eS#otjWu`gASxz|e-27GN_2CC>@w+~~$XI@F+ufTs zzH48#Z_7Rx>t4=c-q$I5r;@~)co?Imh-Je8+69a zi*-S(vGHwYt!4Gg+#BHH-hf||{&~{3B7JMp|F{31fZy?dGXLB1U*Ui8mNHivWnI=q zZr;zm1cCbkp3((vKHcl()u*YC)P;Srn+NKnSF=}kbH37sFnIIiUiqshZ`$Qj*4tN2 zHtE?5ZgftOdT+^ao=;P@PQ=febGK0ge0UIioOo4rCny$YdZ>L>Rcod09rjtUR$Q2r zpyJ=H^K^-__c_O2=`Pc{ioboK_@+-}y|jjJ>{WEufNP&FZt^Tp=zlmvqA?A{CXm2d zw9E&0YI=0@^S)OY=S9zMe7~FDHqbCft`4WH_MF{Yf9pQ5+Fq2&-tneouJ!BBVkZpf z(9csw=ML;OgoiqB{n+Jzr%b$?;HQvy^mq8l1V5SPtM0h@I(KL6mL}|uov~M%Zs^@{ z*(zHNd@|6~-gp^Y$sMP%SIivGzG=Pkfl2g#)qEgMjXY~gb*;_;x62X*ujm-8M~`41 z!%FOcU8i-^a67|~+hu%{z3$5rmAV0G>>ohq+|IrS?p!~RM}CVQ25e7{Yah3N_` zt7QG=U-MV_=8iINZsnQA|LvUXHrHxj<)ZAR+3ihn5%4WCfrrlQfq0&Br&0g=fq8#|+BZb@UG!HjZh}Vf z_fjY90kZcm68ijRlG-<5LzOo6p$$13(%i|=X~z5M?rB?xIlJ7PUYS%(+-z~?fF}$8 zhHmAqP>rrboo4=r@jppju#Njhon81ojC|8uDupRq9nO-ina=a$$G!g^XJ%cvxvJ9 zgRT|4Ct>$a0=8-5aHol~k{`+1mUJ_#()`DqZOc0C{go(Fc3R&!Rhd)W z`t7#157XRM?BCLF9T)$MUp`i8S#NhIo6SxKeN?DouX~m@OTU#Gx_eUx>Wt5)bIz6u zS1Rw_S*s}rALSD>oDtkHtLGl06Wl#}@}-a>`mW8aL9O1)eI@(2-$d>)VeN9YfqO}U zxR>PAO9zWizZ6=;8sTQvIaZgEZ$J6y!!~ns5bG9h9&H23wR!`n?#ATpv<*I)3`QERtKJPAfl|!5JW}pAS z1#tK3mXXeMyHYWspK@_1eU$A(?svidFXK{Y*{8m{ZJ`0*hFm4?Rva5#|1Wx5@Kq1#fWaDdh!TG z_J5|2E&Okc$n+6Rg-4N0ZCf$%`(ius| z{?wqMq#H)Mp`;tuOga9WnRFqfvyg5C=^i272+}>$OuA6gg^@0k zbR$WZNxG5Eq_dJPoOGi|H=1;#NH@BfbT-mOkZug=#*%If>Bcsbt_A5LNtZ>sM@g4O zx<{Ky7e%_3q#H-N@uV9^y7A4VYel-&q7q&3hIEgU?g`R8PP!+W zN!ONi?MU||>3&JNCrS6qX41uw?jF+pigXi5_bbv(XeM1O>EcRCeB(nzx!T&Yld*ga zd-l#JhqXHbkB29RJ1_P$w~I)Y^NnqVJ9QCfkEIU(_at<&aOM^jFa4&HbI_d;(`VJL z;fdfpm#x#g*Ph4!sa~~d{!i7|Tuh{`X>Tj^OwXxJo)++rvS~hgxyVx1MtYR-ramJc+taQ6%7HsVXEGPQ z-7cee@>JXXIh4;h^?^cvBR-?*XTPbum$I^Hf3Dbl@f}q!zEm0S|0Zx28kM?VlP`-g zSL&}2(uTU%`L~9BsS9;VUBDhBeVmNh*^;lx_vZQ_C0P0!Z0{ZHJJ9EPwFGyqcpgx8 zeag6-yjB;I*refr!nAIo=mQ(-Q*{qx^c#?4pU z3j8HDW1(e+vPf*6EyU*eDQQgx{2Q55Zere=4gb6OCcGVx&yLLB*MOJm3F$(k+hi14 zXJv@~c$fcqov=wZqeldMUqxP#w>m8h@`WwUO5O7*(l^|0vz&OL{*9&M>^rI-!0%h^ zla)&0BHB|V-|2Ije*Z7|KIYEvugdq#JHIdEdk%Bhrf~B4ezi%N3j_u@Z<_YEe3!l> z4c=SCf2rqON&6i7zM|Zp%fCFnD-WRy;LE-=`A!&91qN%_dGuF{_%ARf35*BtO#7sy zWxZJ|kN=W(d_#Gr`*Zo1$M+KtQr?4<=eQHbaDkENFOUBMV=&*Y5MDhlb0Kg|D7M}- zzOT`VzeVnt!@!ij3VW0E8)Gk%C43NT!AglPOfA`k-|!y%hLs>4 zaXs;Y#O1$%co6Zy#D@?!5)URml=v{>CgNt|4&uX!hY+_AA3^*P;-SRDh-VTXN!&_2 zocJi>qlw#yM-U%Fd@S)6#3PAk5r33;6!DhC#}OY-ycO}*#2+L63*ynl+Yo=8_!Gq2 z5^qQRN#egG9z*;d;=dw3fp{$OxRUKgB|`9n&+&|R!WhfOhbIXxkAX`W1NCOsT&&;_ z88FLu#T+!`rIzhFCxtjIYSe*+HkD`NullT^%q!%-j79YsYDIJVGvtgK z>E~OrUp$I^L~)(jyJu2%OyIt=Z0J3~#GQWl3a-T_m(ZsV^4H3fh`cHE%T+q1_van) zYk=|F9dggrv+dtG{2(yry@uYVSL=Mj0KK zq@?O7w~BG5={g^6&}@Qoht=mH+@*9{eZT8{$1i=$Jz@*h(6c$;*Jo|ot&A4keg=1W zF60cMJvX_x2|d1=vctOB`}~PAT5*^0H{Fy}Ngt=0&#t*qpY@H-eAaAaE*LTFMJYR; zZ_{pOSJr%2zkT5&%EjI6ozU9xy0pWjwPPpk*!A!F-n+OX>S%kVa0+ur`@icysOAhp zv*fL--+m3;=8RExkoQQ!`aXry{;finI`V-7$v2LCxwW_QCDr=#W%~1d;LEp;e4JU( zkZ&mYc3r!bZ`!r`?K$s+B$*U@-?&2P#+eJP7*DSTD|Ii>hYS8+1;%mebdqxA4yh`9 z27K$ctvq7Wn@atbK0y7h)b|dw!+jaJ$;ysuz08a3eFp$rWsgNm=J!{CEqZGeROy$sy&EsY z{{Wwu!9!<1PfcRJC-V-Gg%HBC@J<(vcg!A{A5Ks$XJrr0IcO_9U2MfUWp^BY+255muY zy9rsd5xbwrpWh$mwSa9v?o3*U{Mpf$79xMUBbBUg?#CWYxCuTo?dwwr9qQc7i%g^K zwX8MNzM$r=`fub;aF_uO#hwt~Lg{ToHoxhK9WX-4TDtd@F`I(dJjdG24h>FSAN*a= zQGhd^{J-_*zb}yAru4ps4X|^^m&a5`D!;4m!Wsd5^F8y0f9RC6=5QrT%HeDirw%?7 zUKTzW&Hwrq*cGix*6-J^9P?+&{D3=7et*C6mubv_I#Z744}Tc5{0}>x8_xT=c}n5G zI9n&_B@g#ePp<5?!_uxKD5mGiX`RK!c=6i@-fsI%5;hO;d+7V%2bhx;R+GoXS-|+N zR9v?z6*<7ssVxuGN*#D66Az*uCVk5Taov3NK0^FD^&W;@UvPe_&QYEY{yI;_*8gAl z#eSR^69Ha!2<(Z>&jjXh51^e(&PKHopyhm7^=a#Ca{<@ z3JkGLO1PP{pHn9{d%T*1^*w$3Hz5H#Zj^H=wkFone*1Uqj+2n-$;mQDYN^TD6lC}4 zee@B`wdLFEz+S3T4*Xr@$P5hn)ipZBxeOTQDCM_;yGh9I(- z@QviFZY?seyq3hAAPHU(n>_xl^v_ZFB@Bk22f^0^@fpJ3tkl;(d#LkW?D4mF9DBU* zfg3(p1|K+hKl_kU_$~6#b-ueO4?gJnK}fq5@WC^FJ~#&-?DX@&LHHm__<%f|{iE@L zj|ZX-hzx9@4mq5gBeeJ1_-|_i{jugF*Vx8CpFB0~cRYJzmWuzAjyByXvu4|(F*fjF z18<6Mz~}YB_6j*`uWFlbPovoLgpLp0$gX5fvqkk(We0bc?SO`JCW5!s=>A+B(7Sr7 z&yIJTdi=YcQnwUaKoT^lnXK&S4eljfRcWd==08cjs!J0Jm7|RNzsnu-n6zzyeO2{C zhPv+t80t2~+E*=0&Pb}xFx1ryG1M((-)i-6L*2EJhC0p#>m@pVYo6NDh(hrtG(GXV z+M)9vsJ)JUFXh&w+b^Q8scWk|mp~sVdjGYt2Fhn{otrzRALUh%SKj+-@2T98o=|v< z|ExRkPvR=^h{CDF#V#ZKgKcJvw5^^t)zDt<-%J+$xCVQ5%>-pfzu(1;eOqsuq4OwN zo59sG=A6lM+O=z)WNCLMM^dy?58N~Dcn^zl4o4oQGtRGI zUj2yqU|WwnwB5N0z@@&^BbTqP#9lK&ZFhDzbU&x>oV`FLU80@auGRMzI*Oh7D1Jmq;I%XDodAwlFO{{utZLTn#153syV%`6K?iWm z$f=ccY=_ObWqV75hmKPJU7X#thqIeb#Fh3x*}k;@sZOQ+Pj@Npe}^49F2DcL_WAvf zb;|F5yi0!nfNpl8JNfP--vi`(sF{4-$#)<59w6UClFz5ZoftsA4Dt;j-|%Mg4Ip0z z`G$~hxa9NcdM8GbZ!G!7lkbUU@{J_lSn`c0-xHG0rxTu-K)%W3n@YYJ&E%UvzRBd9 zO1>GA&!;<{m_@$1d9^P0&wi+pp*_X7FmNj{&Bd14{?^2zry`JBz!C!c8gz1VhxdU_y-%9h!T{Gv~SD_asQnZ3QOkd$%o`a;ZJ**ZT#uvcO{}ug}qWGW;cepOX8$rIrmT7Jy`wG+fm(Q8< zqoX5=659-Mvro)>I_@#8*TZ3h+~c_C^6P~QE3Z8sTeOQiBCqo=HhY(A z*FyWMO71O4U9hn7EdC10h=`)gl>Ht1{tAGtQ*_>oDIrC}?R#94`2K?0%K15Ir_VGL zr9auKr~`1=BkU|D?fMahBJki{tQft;x%*rj__qz;j&a=YIg|gTBdkR;71g_&djJM2 zvECFdudkf)M+`+JHxIe?szKfY`(D>#{#Abex$F1jpG@9$kLimhl6N2H?!JQJ1pEY(=k8reV<$*K6b(M|#<-tP5#XG>SV_TPJUWS{aL>(3Rir0gsw>AE&*_Nn!SmF=Zct!BK8b=myjnRd$+3-;r;%+QtztA zl%khO|9jQfc7e0U6j>y9b9U`-bf4qjaquDg#0B04;``xI;jvNhSNT20q66^g40tp# zEXcj0e?-wN(s1US(?OaugF=dC(XL0-Ft70FR{p&MkLJl8So}{3u@=SmRo%AlkGM2A zY4CbPu=`&(54!};3_qMy=y0Z6NKw}$17{M4c~b`I-Hw}HS8|$;{c1Y);@d8+J?XRG z)SpylRR{0t{|K^GywX0x&DkaG3A1AcWKJwNnfXpu+Q{^n&Y2?kyg{ zvx0T;&1z_2t~&Lt+2pa`6P?+qpenN}rpHXxkUa})_(+dxDpX_EW{#2na>-SQ}zCWbPxZD7c*Y9CaQ8+~9)KneS2GQNU7p&c9?U+CrVv z1?~b}Q4nx#yq^U2y-QAJu8Zj~a|-pgF0d9&rruLx)@SAevyk#$17_Fxp+z>}&H|Q=+X-2-M_vc+oVW*Oe#QSS z?CopwihV>G-+LOfXQhtI9@#(k{miX#12P{TpEj~*%(~3oah)?0C?}Enm&SaUx#8uy z%!K*6qD0DRFL;@+FG{0sqq*}sH6}XqtAdM}OXBXExj^s=Udq5pMaQ0m3RGI2sa{02*-O4k3Xc1cFNdMbmSK0HW!R85sc; zowQvRKs#B+`PMtcn zz~H=@xNhLGZOM0;gJPpIpT)l^c3|G?I*t8~xHn>6&x~4jE^|2ebf;Z!AnZ-**N-wB ze8ZP~pV@CAa|>mq@+suoUCLZ`Av1+MTb8zD_KzEo_dr1I+_lTjWadxJ9iJb&HS+;* ze~5nH2L98b!55&3GWw}#aCGJg=v?wFqK_8QW|F5Lc}@vToqIWXzPt4E%x7W-=Dij$ zZ|*ek+BS9G_%~x;%e)!p3!kzGp{Gl zPr;=wwm*2L&b>bNt<3v@?+>2g~v^pU! zB`+L$41*pcVtDkP_OTWzwryp*l9>OaI z(sn0EBfQ~t@;L{c^`jl9Q@;kn)1-c}Z)Co-^oUB^hk#3`jzZfv0zZws2hwlNOPVtS zCN zd5$E{Nt7w{IWqS8yzdw5J4SxtH8h?ntNU0`%>pez};UjirXBDB8^-tuSq{h8S9nK^NZc@NPhIkd^6F|TDN z(k7qAyqS6BvM(~K5{p0 zB78LmUcDIDyJ?qv+G7`a4FfKpI^G4YIkf3}}jQssl znXi~*Vm4)dy!0e^ggftI4Bky&Y=WO`iAl*TgPtCt?)lX9Vd&x%_`N}yGA^aizW z`sHn=oXeh6#`aorhEs=<8iWpPgh3J&h~nt!I9mN&a_||6+LVd*q)(+UZLgGEeiLPky)J zI^yD4duV+b#=2t_VSV|`i!>WVJKtcR&)!00jUqRwyIxsybmK7AMM0|Epz$i?Jje{* z=4|DAbZJF~P$Ies>_6r(!e9yU8+%9ATyO0g+LN>5# z$P1B<>K9`>>atbvp2>y~blLg<-yirJfgdFBX~1{XX_NO*HiV$lHWc`D;70;KM&O45 z-%+=%f_Fi%`d3{)9{9b=@j> zi)2Fxx^8oU&jPy}nZS3{fvX4z0UjN=b--@~{w3h61bzbW9d+R<0>Xet7w#3{w*db-@NWtH zB;Y&h#8m`z1sW-tFj(JZt10n=d*vLeDe=ww&fQ}` zu5CnSZ$fsDjlTJuN2Oz@&lG<^&Z9(j&D-6K=`d9m_*Zn~i*y_8pPP0L`66)VkT0z} zha3sr*->s`T7=z+MMDl*7Y#Wax@d^UHrwYm(nXQ3C+XrkNoONn6zO`BE>6-7!=@X0 zrirAxigdk6*Qb+oiKM%VbiGN}N79WT9eStzNp~aZ29a)PC+Yf=?ncrLBHd6)H;Q!V zp{A2=BC%_m)9C+YG@_b}<^lde$GO&}e5 zti_~TM!HhcJ=ICNV$v-mT`B3Fl5~?uhhFPy(yb+(lXUAkNw=DGYf0xM-8xA(g>>k- zZY14Hq^ly`E1jgm*$r=?;?a&!qcI(%nWn z^kff{?g;6Qk?wdW=?;_b2G#!UM7xli4C${|VjhEcBeR(R2DK-R>;LT(*q4pU~~jVvJ?W82bs`?kvVs zwv4Ht(CyA*3}wq0`U&0cEXGW>jG3R%?apG1WXl-&3El22#zeM^iJ#Ez&SDH?%NY0x z-R>-CK3i!1Cv>~Bpz&;>@t@G`&Vr`1g{FT(w>t|O&K4T}3El22Xf|7D_9t|^v!Kyz zq0yhv?dENje@K4Zdw}(yk{|nph5Sq9$5W6?iv0KnR?yp{IymLIP~emv#BRel`tf3*C#N!DG+kdJbfoyuAEwcN+rk1VkU zIr4Da4KeYV8`)p_u~%FYlc36wSF*<|MRqJQ`M>D zT$h*5J~xehZY^@;bmWc?5Wkqb?j+wd@{|4Ic)qXMGd@LL6Zk~#dx*R?$bJ!d>k{%> z9CJn9RQ9)L*)yiG$2}XHkoh%x+2ibA*AgcFKagh%d8foBWQMVaPD5TH^0>YW!<@2* zt_NOZTq2jbf&Fe|Y;G!k04M+CZ7dcl~T|PCLyuy%~c8!hCj6@c)m3-Gw#;wSa zWe;7(m(3@6%O1Lz?|$;VihS?qKajjXKnC;$a@-feyAO5R1m2o#IzF?GGDY?_j=Qz} z$agbs(2x91Qg7Lhzd}3oBcBtHvX?$b~4kSa_&c7y$L)| zkzaajVqU(U-~EDLY~Q@CB0B@m-;k%sDkg&GUF_xilc$aJ|FQH`=6>YJImlW?ZoDNf zB`+2^$pPfZgYbtTFL{7=$wzKii0toFTzqCOa+3#;wU{nTP}?B~{QYD9GxOVJ-)D*( zB!_bDq`YF}C&l2Fj~rxjOmt?flofY3P+I1RX=c!*7Wh~-bw&X%)JowF|ERmC?Qm;Ye7(cTZn z-GIzDckUmTH6u5cGnUsfUjz3y==ZbG#4n-2FKNpiwBydf(a4?q=ZP$9CvEx;Z6#UFH_x9|X_I>n0-8pO5@(0Qkwd%V5S!8FiF=BIsw4`9_m(A~;@79{z-HB+o0rGXVc0 z@O~GWXBm0kPo8TiQ|PlS_Qt#$!Bgbh{bFCwypeJT0+T|S)5%lh)X~6CCvQ1_5So#` zco>>UBVTEQn}F{D%s|d9Zl#V=cTc^~#NLqCJ#KJbIpLCr$a4Qo{~tv5_Bv&K3Jtu0 zTr-S#8JFKs-r&G_b7j2lD=;}lCNAT)?=6fo+C^ypAiU}_`u!m12Akrp$a@32movJz zka^xkn?%R{Hgn#xBbnzJ*V5L%9vq$d17%5jOP(8{O=;&CU?tDH$n!n&+(&#EJkKB5 z`Zjp0@YPMo)^`EBjj{cow8snJ^*C^UCExdPt5nYF~VpSsptmuY$ImLEWcQ*IVP>%Df5udeSa~$xFsW zD&=MK73g`(`IO*49o+s*-qIHWCvAKu-$LMoUkDxoD?IZr)bk{C+LyDH_nH5M#)O9m zoxQ*09A|ckc|YU-G1^pQ^Et@mA0vM!`Hxz9KJypkpGn>h+Mx;jr5+CQPNfZGYy^^D z*US3neLy)$$dT_v&btKuwODO~T-pFSyR2WHw8Kd9ts~!W22(!cSLPR)TlO(GouH3K zQui$K75Vga%qbs}XMf;&F8v|%Ig#HIKLQ#2C!Bk3WPZ9^=f`(J6AvN(-$kDq#0^VDd@_yJrgZx{1pG5NnpKgoHQ$c{IW_LrP1L{g9KoWQ36-%;+Hh1@q=jZuh@Ezs8S;&2}Mee&1_?LjM0{#_&p8|YG zxo;M7-)xclZUO#v;NJrNZGoQ(d`G!&7INQgk^Alf{sZ7^f&WP0rvcwl?wf_&H(TVs zb-*74{?EXFCh*gN?{)5U&)4rVo)`PP$=oxIGX%{sFIv&V z{$T86vt@S=OM#_lQ=*^UjK8rr_c!EDBKquNuWmLtDCfE3(NlE&l>rgx0c&v)?muy7 zZw+_RByJsd(b7d%lyoxoUp-DbVB6!~YBKSTYydjhfyl1S$gVBOu7i+WTd}Lky+Gb- zKF6EQ-}83vd2G|QsBdp;b~u}nXK%GST9$Et(W58-`W5KKw_?wjuxF_+_X;9P#J(~9 zsra#d7cokY{}lfq{G#vPtq*rsu+1X(r7C+n(7VT$v{l*OVpUqs_f)ojZ&O;%(H5{KiOIfdRe^qs{ zO>+af{IA;_EoZsI$y=`~7 z8KX(pq?aMKe|&ICH(>|XOdT!MHHbPxPxFJZ18XWf0}XNKRJF@GFL{cMF6n=<(PKTyT`BHa3x4(e9WA#5 zSI>FtZQ?>R)5Rt4D^&XJ;hw7cySt~TZnS$6?&~_O)h`=oKQ!O5{R`56IfnZK(6{u_ z8NKZebH@8Qv~z^~VrWNCnW>T&X@=rPao?|jau2Cv!{$EITUj%T_K{(QjZJs$I|X&X#WiQVKlTh3cIr!oh8zDYq?91j{6L5XEqI*OhKCcFXf_bmByil z7W!*@lHMoW2kv?sZ6JMmRz2g=?mV6brk=hYiv80Mx&Pp?NqJbtNPX+t9hT-BCBEU5 zcDMWT2F9BwOz(p@!ivl~9QBj&)srx}UnG3Qlc$OM%D*Si_(0!0LnVEHC%x9ML4?)& zd%}$BUFQJ891_Mo=B$84FRxjwOk5XWxIZ1dC9FQs$TysiwGC&1hfLhvpiC)O?)CZe zJtyUx+T~$1+;8T7Tl+jtn^eUg`|>9P>~!^Uzu5 zA+eeIojwn>=y!rP^6l@j>G4E}SmkKj*x4IQeSKrdp-RKh-_E@nkh?S6aa!85m{ zGd9u~8>!d{*5>m@V>h>%`yL-&Xx-L$&%9TYiq@T!x3AK;i`W{%T`yd7>$tjH>?*G_ zMjngDe@7s9Lb;o0Xw9gD_rQ0e+`Xu;yj%7;59EH^EnfK3 zo)N9gbJE^&f9E{^-t8=R+}hJ8_gAft2#YT193eSHNx^v*FHh<+m%>!mpZx0Wc&VPFz zaI;q%D&YH%@_>Vkdl~;F`uLYS%6C|~w~hO^jQ?ux0DH#&XaAz{|6wQNzn4D#8T(s* zZ0y(c`rF6;{a&~W4Jvv&%hoBBg*6nc449^U7^MBN?)=50Og+j`o0q@C-PHq@@H zX>a>c(?8Pg!^1Z>Coq1~n1Ao0|F9)7fUx}u% z{N`fZli+iyxDxRFTk#um3H)x<@yq%L@p~H_E`{Iy#L+jK6?1Qu$91+gHtTjE5||rg zO=kAPE(GuLu4l|u25B}TQu#ln&og3+V10-qg-!VWvy-HqSs$=|oDTkGC29=(-~@M0 zd$3mCUc`QMJ$5f-{te|WyMn(#)`V&s`>y9?T)@jd?#w>drQSI3*d-CU#-gc?fz)-s zG9jf*@VNne;;}&`b=n!=Nb!#AL!1K}R5HKqq>kQkNyKHrXJpRYNj<&e5{To>f2-`t zc6RlR>p@%v^<$pjZ=RS^W;dC~1o0g+n#a7%SK8g0JiA{|^61f)WV2!(lQh$uEW8Fi zok_?(KF+1Rq@CK^u<*QFAoKtExqhtg{Fwtgt^-c%>q*c4rI|JnJR23|;(hu!-nCTs z`P#mIVS?~Et&i7Zhu}lnN%}rj{`J0Z;N1^thi9nQHnqPQSG4b6lePAh{pwEX4?wb*%$s5kX==M(lhFw+0ORANd? zUKicrh+|3YTjC6U#}2dZO`@Gfr(a*|pRl|9NY6C8nY_-iwmZifuin%hc}Fz+Dv^2g zbYErA#=PX$7^kk=eD3upSY_SjyQVmI&v4`y!`jvsLZkAw#UWFS`$g&+LS7FU!HsgU zA2krW0i|X`WNj1cMUguQ{qDiu3}J)^*Pg)+$Tudd``!R$>t_YnMWRjjVhg3WA*8kt zI}7vrtthYJ9klVLkkYTPm$IKW*@vxyZ~Yx9!LiZ(Kf~4tyle{PPWn($w#AeGHx@_A zp3B167Gr+}8hxspW7R9O=MMbHsHBKJw0hd>IORTd&4@ZRJU~f#n|vI+u`9M6;Ez+j zCjN=xW9zDC-#2h?kdhJt&y4G$oM3EDSy|9^a&^YN1NYFMdqb3zz3{$0*sZ9=MgH?~ zJ?(9v{ui#IeevJ$oxH~qq1yd>hqrA%0}pApjlf?=n=J>=<=+-;IeNg=1JIcdk{ ztNlV+UGfm6Y$*MjmN4SnEb1tE$@;BPr-8T&%Kf9TMKXH9df;!bYYJ1gE&qJ!B$uK* zx}5S|W+i1g^k`?CC5_GeTQE z!lRWFS?qDt@L^-M@MywgloJ)Sl^TBABrQCK@Oavew}z7*n5KorD=C$iE5E^x&lEQ{ zu(AJgtRB0vV<@}#tT_X%2JA_glH9yOR~1kAG2{tjC|}~LlC-|cYSzOkUk$&SaQdi% zcW+d9%2&ht5>EfrpTSm>r~CnwKalbX6FWy426L^@Uoi9|Z7FZx1wn&iizXO*j)k? z8GY}-;Bcj^OBW?&5402vJ~g;5+FEQeE&fJqG6}8uYqoPtM)un#_@WUfP?l0lfBID}9oTkd#fE!94vKG!VuA6>g{zz~b0WQPAX&5|P-r3UjEUm?U z@bO^6x)2uvOenCteKkLv{hVLfHsraDli91EUw0BaY-)d;H3cLeH3cS*Du{BL84o4! zgEQ2pQtXE?=S*asBzpvNn@nILc}^hj@syECS>xbsW8rPuJ6B>WrkFW>2WNlEwD=HZ zVBc%a$nb^!-hqd_$a-lRpLs{?DvPD2e5fJnnAn9eTMm}T86uBiKXJ;jLyy+o&E3@e zf=K6w*rMOSIJPh^G%b8&ON_x%br^qd@G4;q_9yx-iGNvBALL)&zc|NwqM30a{UGzh zF=U=c*-x6Wi5_Q&Ird_4bhFT+%nt{!&4D!ddiigFA8*J1V)3-*3hZHhhm9ENFKno| z=3`SU*A!41gN^Z1$j@b7V6WPu%?&;1Lu~j!$6t`oADJUK$N0GU=={3le|@B`+!R{+ zA@*`AO+A{AAtzm9vX+(@t)-Qw=w`8L5!~=-oyyyBE$CX=?~8JNb(Pt*99~wjgsNY8`X@t^_-8W z>nGkHH}d{?y#LVZUR@TyoPllknZ${W)E4S=#uVy4gQff?hX5FWR_4?hk(olJyni=u7q&o$VRipOE__2Dhvy9{&8Xx@g5vW;WgS#;jzAJ;`9skae&*{kAul!!mMt6VzNR zaj9AyHp$Gp^f=!6G@E`-T$&cwRnq-jOUFB&=3sZYJ* z^f;+^qQrUC`zk$7>dkqKPrdu-aZ>O866aO#8}&G;_aKS$syB9rR6O;1hf(hmY(snM zE_PMLzN*+}Tw^qpMKdpcX6$zCFmr!rd%x4;-*$x#aM&&JsdnSAG`lq^-R>VY%pTHr zxIHj>guSm)w94c+(tb(_wWi%!moXW4(`|JbTNI=9$k@7!Q;NU!cnW?)xOEBftCeu; z`^48Ne%9)75*}dfcT-(Pz9Gb#LwvpxVzvLgE~CG}WSv8NzQJPMNBY$UgVlUjU4{)e zgZRk?vvno$s|`Wcgn<%{ae3mm;A-i+Sk1)SNH690HyW*Th|dQPExpy627Z&3AhrBD zgP(OJ@vFf@!#~)%g!t9qFXi`FOx7ddcSF$zZhF!Nq*J5q~;}$R? zV{^)EkU6P)vuEA&88ZKOSpR#k+nQM~w7@%L&#%g*6aCxHI7ci(o~HV{GdD%MdoFHW zyQK?zc*0s(1HK)={)>IA%t<%Ex1wb4$e8>vXvg%%KAfX)CKey)U#;}tF(kf!(GVpt z9lxpCU>a7PVDhV00#mE&m-*pO!*9fOR5uiJhDP2ETeNe(9|Q;Sr*o!8`Sr`vNMop; zQLLOu>%X?V2z!AIyOc5;d#7!Sd1Ds)Y3JarZyRmLcCj{2We(~Iem(f6V}opz^y^Y^~+MLZ=*ffuWNN--j_4ulSLQnVx+A;@Je5!r$2-ZleC!lyhGSgJ4Ab+ z8=fa`OE;Ky3=tb@>rCB_jb<$%ZIEm1SsS-VIbk6$W54CJMNhRY_Ft*2nQ?4>U7^W# zEQkG&^r3;bI`6uiIhJ{UH}v6s9+=8{uyvQYQ=OOdbKh6bON^vlO}-u(X?@}RSGBXb zwzGg$svlg$-NBnF;v(mHTG=r`m6P$ShB3!=Rbk^bnZIJ(@v-VR=zdSQL-#AX?4NV6 zOW6jLv%ePB?y?4!vm0zsx4i{B2fRIFpp~^$G3&hPgvr{zJM_`YJ3Jd%^Bl@o$_}&V z_#BywNA}SJK3m9I3K`UtFB8-4qBn7Q!iVKwFgGw>S~Q&x?Y&DAb(j6itLIxWb*Dt6 zQiiO}FYX_F&$Q%@C}(?W+n8yaxOm42b5TjTg|$8V@a=KkQdN6zQsylDD-_4}3{?lH zraUfOIdO=3j3!*#Zm6H*gb^GCwiY|=aS4j*AC12a#;n0e*gFElI#$xm@`ef1U?gn2 zz(8LDv)mg7JUwBX1%|b=_+8#G4h=@aUQ%I}(?0g|GgKG}8zwLYtxfGdFt@2N5;jPM(b{yh56sV17zw*hh0)q{mJiJB zDvX5LRT!;Jm;1onp~6U5yb7bWsmli@ONEgzbX&kVOKsELJ}@&?7zsn(7GdEXFlo~! zADHa6Fn<+BYf}qj|6=>(s4xb(3L{~^Q(?3=wZO|Rw$B_DM#8qLFj|}1ePHfYVI-_dh0)q{v=7XEDvX37*Pvcn zo6hoq$x~q@?0FSNYt!XEFmqKH342RePHfaVI+(<@W4lF z(;FnBy6Y(qqXU79~hCzDBC0q`*F07 z)}~E9FpsG)5_XLWqqV8nb04kGP4@HiRTv4oT!qov)b0bbK!uU8o+^yirlWme3RD;g z>#D+NZ92;bW}ylrVHOqU!8*GUIky)K^*tee`=;eR1V=NnbMqCu%Pq`Ek$iPkHsU%Sv$F!8wrV=;(O0tTW=mFt+dZa&6>@5iKlJWtU2GhRnt|qx!)l^ zpYuqM{_0NrIruxnN6u)<)i&{c&$E%Ww4~oKSvhc+wejclyS$q&{XL2PmNvRnn?&ht zvYz#ILyl5*2pkWmOM098I`FPX&R&Tus0sNBV{gt(kv%4++U4J%{->$`_2@2ngXzAl@V7=c%dXl{3{FLAD9tHa<#igCUuP!eM@_hr$ zH$ORR#Wp#0n#ub zYzgT?J|W~8N*QKDXfiSrzAk*heAZ;v0Gmy}a9l`?NxU{2TqXcFk$kX)mE6}DmOPQP z>EywicFAEz6MhSRtCznE{?InR(Rfv?QO!s4up}e%N#>o*PILZ{bIiwj&+2bg44rw*N6@M2mf2jJOO*=@QIWyB} z3#~3=$m?EkyASw0aGpy(^T_Xh^2hdf@@&czTrv#dd|`Z{d?9>YH2hLJ;x~>wtH4cg z6nw^!pXLgV;l&DxqxOd>`A+Kc1bA&2=Zn`kH6Op^;pADZbiw6uDT6<5pzd09*Q&c+ zbT?FWH_*3&leB#`_*Byd)!ze%U47u@U4%Pfy$BbMOv?xEfs1hc z^s)rM@Q1ojYQyc3i!k9)UU?l-+F<4w`p_4BXqP_8;}Qq`@|L6hNwz>yhP5DYoO&s@-ik~FzslmLhxJur0s7D6* zTJhB8qfhaMgefRF`9gYKRl4!O>{+u1+AX}z%$k`s(W<6&c~8Wg;p+1X*HNRT=H(mn zU3o@p%`3*>n$4yu&1Kl^-eC-@VZBhBW-zSS$9J5spV7c^s9{BhVyXGiV6FMe5M0w6 zSPM3$$0<=Y`wX_4cZ5aOI#zv0xP(O- zBWpj!{qE1fuImZE-l&Ctx3-JxX3Cvv=vn#+VepyKFV}^*_9-Ey$Cc31Q+1)PdDxUG z!yeApgTh^1_N0|Qxo2GI@${~)xqC88`|cTEdV+op{~^CFW$I1NTa=*En%$07D-1!k ztFbBb7611df@>c{SH%iWy$#md0g9#6MR=rQM!(8Z+rto3+A_!DnuhD-Yn~hAT7Y|g z2J|xHI@gw4`n$H8BAV-qxtnv?Shk_qbl?Lc=iJa|1K*)^W7#hJ$=?^&jp5q^Zx~e= z?6mOR%lB9Od5rb@3PYSv^7SeFqqA>ecV}7Qht85hvoou3w{vEpg|mGF?_4Y8X5Opj zeeCiH1%Gl*Ea>4ZB7QmX>kIzutS;#3Oe^?2|%&V>i-#LcBD(Dkj2_|x|6SpC96gY&M1S{dsX?&QDDnV|TWKMtN!ZW-k! z@cwxjbxu%B<%dEu;QD40fO^NXKm#nVF!@;iR8G)`dbJ0;D+yWj!l-C>g z=quQ}-#e~!E8#bihm_xl>nyi|cIfAlEU*W+VLOF~;yGeBbl^lCOfX*}!-_#5nyc zx&>dOqhk4JTxrd|(WRs4uPWN)7;RFDj=~&+t@a1@WMjeIe9hI){fyJGg<;Mr$~uG2 z%r&^bhR(+0HW{t8M_)-3oBXx+0do*o)^xRf81EDKvS^q43$f45_W=Kk3imiyGWN3> z?<)<)s_epj^r^AD7h^w>u`gpv{ELZCT-X!4$;PU~jQ1yj>$mXF&TEZ~561pPCA{iT z!6#1EEai!N_N?w_G*zWD<`Zah8Efkq%g_jEyQ%!3n(-~;_j7oFgqs%p#i=ZaQOE8( zdk?IpO!E7S^9#})hX?GVO<0?iOFcuBkgBZ0{m#3o-)6?tJopA{r>f&e(p|?5-D^+L z-pA30O5_{Km(SNY)Z#iE7vwrce^`uu#$-l>vVM|0=toOZhd7AvS=f27@2y>J?-$`rCNB&9*BjT4d$dou zt7)~;l9}t|N@>L}EZB-L7wmH$<2x$<@T?&CRPObq<#QJ7bKbi^!fIBtcdD90*jI#o zP1qcGqLjJv`jzGPE!^kK!`}Z&%3R4-q5AqK$`6ek;Tn(rNnd!>weY28bf>;V5AVQ& zC}#!!)CKQ2)3Duf_9{oqVbXs?`WG0xn;6H8_o_vTp*)i|l`;Izf{&cL7KA$G9NG_F z>JR^93|28N%RgVZ1HPxI{7(EE;d3v*1K-2uzwm?i7VH<;@-G%fIA5gfB}zcmrUeJp zuuX&o6oxuqg6Dlncwpg2&Q0*WO-f+-5%72)es$HJeXCD^*Kgn{@8K8PVI5MQufOYf$*+O4Vg(x^O|mvzv}mvk+7g~I09uRW z6Mho~?9K3-{3rCC(`C@jX!*f|Lb&grk>)Ak#(!+$)R`JFJZIj?RKec zGMZOZnCb?vN4IfNY;>lP^&$KIyoRSnVXtsx^&ZW1o~%t=?{UX9xq7k%ZV0l4TWCk@0M zh&vc}Fs=jFfjbO$815+CQMhAq$Kp=Foq#(9cM9$_+-bPC;ogSJ-p`zcEBm`Uab^FO zi!1xHdvRs|H4j(zR}bLI9_kTX_C^-!Zf7rIq5htIh-HE35R07B=05vE>)OVb(p<-? zhPi?bL8V{6HQd$5(53X-57J$VF{HGibc8F>XehnYU@U!k=wMex=n&Tnrr2hoU76>C z;c+rg_SrYKRQTwez2i%diWe3-; z#Jxrdt*yo#qgZR9#nQ@`Qd}>;ev`{x+_Sl2qv61MzWwN!2pz3A84hf~A0{-0U*wgK z5m#A!yU3S)Xi4PD&>6DE$>;}9LMPc@m9ve6enij8p5$=lG7n}Jn4P@`r@HRO?HlH3 z`2sgJ*x~Y9Xm(Bi)0!Mm3&A;$n)xWjC zU-fS-cu)1OA)lq>dABj3Dql}C1)ljnWj;V&Y4Ef|%+*&du&Q_sSWqkJ$=9OdF<>F( z;@?`}r~0=RysP@xkpJV9^#wfq9zD&JJ@2pHq~>c?^UbDy{h1e58*SkGk&4fNg*yHV zHT<{oj-J$KYr$?E-*=r$DC$Ikfd2{&Gqznp$amwhBc&8A8tl>MYTc#4V+`;Z z&8~;=7;Gq{Gzy=Y*^|33B2ymv>5ev8vUZP-bSjcx7~?11#p)lf_o0#$R`rIjAHKdSMS7& zUX|yaRnDc{x4F5C#u=CBL9OAxg7;N5-p?Jc)Lo12T6MRJ?uM%F`!Pz_-HL_t2P@|!U6S`8Z|=gm zONe4f9w4R%^3d%6%WE}sZZ1t@I(?OHfWG(_`Z~7e|6ckUWk9a3 z)7Q!F-t?u}-}2}PXuQie%m|I;LTl~$XzMP2m2aLN-wmD#-z@eo^Vo*dc%sp5eG^{S zHjht*C+hqV{wh3J#&a&?za#(`9#|5D3lA&_!G#Bwbj5`SmPF#h150|~!UK6z89s>H z3%3{UmALT0l4M+XV9B+(@W7JmaN&U^H{ikpOK!r22bTN{7amxWhMR^9FUf@mmcUPP z;ejRalw5dV34A3N9#{fz$%O}&z+ZCVfhF*mTzFs!d?q&=7haPK4=jP-;5oVQ zz!LaQEf7LQ-@Z)l z`CSo=e5IIs3xo~-bL-kS$Rk1ERNb9u_Yu-d8Utr{h0)5IbxV~KCUC1TMwjm7TWpN3 z{X)-6?ud1f{P0VA7`=pq;1F z-nY{3)3{S|3+u8#l@C1!ejZyRU(o)a)BcB9@7>{0ej~cx*f^u@(06etWo2TIK+R9P zpK>+|xydfEtAsrJ7BgjFQ)xanBU!hIe!kee5L<9^=cHp_#x#o_Qv-0GzRadC*U--O z8#R41X#?rAcdg2r!-R>g46R>m?l1p@jU@Q1=v?(>9q=9Zw58uQI{#lZcm$MVfP|Gu$o)BEsm9m{^e|JYc@eni_?=F)YCv3wey=^4u_ zX|tai%dbg(CT%Pi0q;GQe@6bEu{>1&m$CeiN(2AcSl$GF|L9ouquhVxSU$9)^Rav% zZPI=$pZep)u`Ig9&-|TZxr}ls55W3u3e|+Q$jw-WLiqdXI)!97xh|O z(?xICL?2@t+hp*Zl|1czR-&N8gg#TXsYod^JJOov99&zwDP>0P5QrVg=grh7(1ER0 z+LklxT*@odamWP+T?X&7rdba?dTcy_hq{KjhxTvX708~fJ8PRB%#A&nBV(8=F9XL| z)+2$eEd#kXsM)U;yP;w~L-fDJ&Qr&=N%!V7)^Y2MoWtFMEs<~6oh;-&q0y#Hc@282 zPuJ#nx$7ykk}357mj=S${R4bmk2gi?;oMUd8xT8*YczEqW9;Hsg?{_D^LN?Ei*&@l zNt`;5*{~&PTg->uV_VUXv*}98VER$=l>CjXEyR|n*in%+#2~M-C9YD+NN0}~r3}>8 zFk*kj2A+}bVZci|jFo8ks=UtTc9JGLgmXh3m$mpYFwJ=!xFu31cg|K3mdkzf#&+Q= z36I9kg_btjEq?ho#1~E4)eW0wCP#{El`6B&s9c4-D-i#)y8l`HR{Z6h;X4(kKNX90%*9GJi+9 zzr;U^_grPHdCG1e?0f9psQw&{uKyx%Z!2Yu?ZQ9x+F9n}AYrbASk?onzOt{jj# z$;kZKjj$c;MbtS8zdwHZyX)1otLJ{P#w()Q#^5+<%RtA4^=WD6IVZZdBF%VS_BTSS zQ%T>#U7GDGy=r0UgfRyVcq3h-R|VeMIlYRVrEcyt@>k%k?djDsPe71cpM_q9E+_N< zC^XR-?W*VJ#Q{HhelF{t2O{JRTTLDi?^#oL))>rnvVW+b|LCi#ynr&rjn`d=?q=z( z0>4q=^nBRoZB{D6RbFqRO$~&v>!L*5d$q$g%FOwjVk{NAKjX|w*HJN}>Sq0V<;Tmf zedXlnm3vOQR(^AGw!u}vX@BbLlgkNvu;I79F!(D_Mj5`z8jGKziF)gP*DHEZu~6%IRX z;7Pa&x4Tm~fl<=}W3K*iwfT3u!KIe6tum+mUiZT`+pGaT=qXlJ1;{k9{N#f z3R;ly;h`Nj{at%m(WE(x_R>fHv$P|$cnKP-5n7b7j-GGL9O%BfC--0tU20tD-MPV= zGp(A8MK$QrnM<#sekIVK3)*YTkMwTZVmY)d`AGORIxP#_3J-1n18{9+_|W_w+B3Mu z8n3V%(fMgRzN&cmw8!P1h01rCPgPgv+iiOrPq?{gmBg!jdCE;HUk-vV%Y2t%QX>8X zd2cH2^SH}#pVYr!RX%j#&YQYEKzwx{3_&_6}>vo!UN}dT<|N{5aN(Cbiv@SQoUW%Xw57 zYszremR*TQhi!fYd$Wt@QoeN(Il95Ufiu7gImcJ=jBxiUWeuh8pGBVBejVEoDSNLe za3p1j;pUa5M{ zqiReO;o_wQKJT^+XYQCYWznF5wpF{rhD621esi}Gz6MCxXuTnSe z2avCWe0yPYQgp8q3qDox*{I{cQOBj2ax{EtCpBO0AW*0A==_U6jr57wWfYhU@~{^i zbh3shcT+}&5>!=9+30qbKS93ehE}a4U(uzymweH4t(pV=!Q2tRE@AmG{K4RLwW@n1 z{1^Ckx>qyNy-HPeuWH(Kuk7f(2I;!5qCe=-y{f#5?I1QNMfa+rxP0(>WKS|)AAdxX zO?5`sSxv1|rm}t&Io0X${)`>$pR!*OIhXIaiB-=mWbD885qq3OZR~S5J*9Eo#j)SC zPWCZ71~(M%RL8iC3po>L4gaaJt=SC%4|Qz!6P!$)>o=$}A>olh>?5e3@EO7DY4G|{ zo@CN^Qfaw|XLA0(QfnK}{dCWn`1!eSF~$vybt7Z`qP(ZI*m^+D>g0S!&g$gsyW_qS z9+PM;%c!Ls*-P>-_>IRe|DJQ4F&=+nVA;d_h}&o+F3Oz)evOI#>RC(!VIs@e37+-9 zokjmhHjYeB((@Tc3c>GOA3}p$p z3O4&he!@J4j6mhB`#U?Uqixx14Wqr&Y4Fzf}4Qx?9ixA=1X8 z&s3jdAq{d{(!O4Zzc{e0LBdK&vyt@ptxs?sl+PVVL-$FQ`B4MULPw3p$WnuWF-<;y zdS3E30c$L~iLxc#di)DTzU4cQ`Ly*S_EfFKVV7*@XXvAg^5AanM`?FiLv+?}Vl#W> zkM&Es<$$#DS=#?Q{VY`HD?WWCb`>I!mC71nPZf6HMV2ucHsK@r_^W@0;bmfcmfTlbjmLSN%~cf4QU0FJq~j zdxpn<*spBaUV-&13)TC(f&W94BWI=W&_Abh{L1S2q~F)bSXKXR?ymILI_&sGgsq$2 zATT;Fdpk^hFCe+Ib{G5KO{|st=ojqwcJhvd!To^HKC(CAO;fRxDte3>-;whQKewb6 z8~a7H?=#3iJhJsalCQ`_3N`r%XCD{evygSK#63XVwzf2yZozTVX=_bicyF1zXRP_r zZaiEz0D1Q2gnDgtpqsB}~d~BD{GcZO_+$tXg>W1^Uxa3{3(f{(4~K-(#2LFCPC!Q<)jq zKQKNMOsUm7jo2_D>Og$ zXim14+$Q>E6)8~;nKR{hP z^G^GD#dCflvOqcOn92MkW1zc6$I!j+Jmi5_{?2`3yq}|5@l(`&n2euzzf>Q;r=5n< zr`~NeY`5qb7}+oS+NAfqrSctg?n~pBHA~yv1wDxU8P9l@clG4F=?dEDTG~i#;;^^z znGJ89y#oG?j&qq(Mj2Zy~_UCCCV1tL)gyW zD&xX)u6PI@wj3M%Zg`}F`mXn?@8?$q*t7KdO1%!FlhVtpoXgd6c#kCgV*R9yL!FcX zEo_c&pFed|^QUgJs9Tfzj-^(P*{htOPRbFv!uh!t&Ub=Xzgbzw1+$*JC}(KJroJ!j z^k_CGIqb2Qr`nr(2ik+MFWl5S05=`iA9on8pWQNLxV14x1F$F?d4w zZ6odV)W7h&_Qs*dmed^V6PY>Nwddvz{K{k~TRtmkAUfCKg$DC6^jfFL`!Qe9CYmej z0Ylj#aC?OJO65&~Z}UgmPn%-hpAQ;g|1xU0{Z!mAdkglkh3}lGZKF1<2LT2Ta89zMw(->?N+6S^-5Df#`_bN+V(49T6orC+jQVZ zNcf#gZ7JZ^%cQ|iRU)ms!NERpxowc4yER+Ffxkxyv>sK0GHxaQ29qVjrP!>A22)0k zqu7>D8Fxw9;PhL?VqI=BW$aR7t=!MfNSe9aHaflB)`NNu2k)zB6ZGs=eEy0p>fPj( zan}l)9XN?QOxy%RnAOkdm$B5b#I_GR+Q>gL-o5)-TgJo{Hi-)`2B`J?G;67?&KP2y zZ4An|`_5upCiz5Lm3|GUTBjrjJM52`6l;bdI-?m|;?J3)tvO0`#=v`1?SC;vSbt#d zj5ft&oW|~Wm@&dS&lHw1XkMEAG&adOW3c9#LNZQcuY3t6{g;^hh)cJh#+Etvx2$(j zkJH#W=Z=_lDQ!4t-Z1-VY@l=B%zBS0Fyl1#(YcRhU2U=vH{5<2T1lbIM@`)`rklE1 z%S}B97u(mNDor3Gpv^3VjkJGi47WZ+pQb5M*2T2_iY|)%xm1Jw$#A3n@$M%3vT=U) z=V$rbORfm8KWhoJALq_0_mz9(GS@Z1Ll+y^XE9eEV;u1Q&52R$>3_z$FqiwOaV^S; z6TESe#2YR$9*&wEEu$q}|K;WO3rd;&i^o_Sx!~Mk`eOCv_iH8<%?dv0Yl4&4Ob9d8_aL zk!HMC8c!K_P=@HW>NvNhk-dN?T`K7ew8hc@O+RM|u4j&HYdg=`rrvfAvAcG4v?{lG z1v$6TPfPnCX+^KDy?$&ZbI!%R`en^KE%LU5CV$Riy(GFbqZCI=W$R#6NC-2D)rNADEOd%35jTKT-cr3f z{&V#I9RBn5|NP4a<{J$MiquVo z@#v~vOW&yL82YC-|N2^Pv$rgz0eaBZkr(x4J-V{DF<;9W#HHRO_wARS&FEaUy}2R# z$O^r0a;0yIdo;gb>N&9F{HVH0o46C|Dig(>R#(|yT;3N-7dN-AaMC=@eWb23 zzvsX^WPfT_rbN?zqFXLHjAv;d(SfWt?ikWwO|3?bnYY7OG^9RY#}J472k;*xacNpy z5dIK7E~IEkrD=vv4?UrW89F`ipQ!(XpR2$A500*M{U1DCll6aab>(RPuKXDT?a-9a zf#B`}Z|p6Vo#l(hPQB2D1^y^{8|!lnDt!t)+$Z#KL~O>&J8#`on?rF!;LE({B|NkV zyPC;!atFe9Gj_M}IKzol=;0&T&+Bbrq%BsnW;;#(?aP?rMRSacDcCMh>8Dnwp{t>x zaeUa`$+%aiCE>}EkF0~8Ub^VZ@Bh2_()0Ao{}#UVkQa@JEa>0Gm$3iP#+Uq6TKc)n&px#D zV|?ib`up$UON)7*!~5K{$eS;<-sJkfnYS4J8+c3OYZvFUe}uOzQSXMpXBcyf`2XL; zTb#_BZR;4%T2Eic2)?6OyZpO&!+P5Fe+zF|=+(#nPTpYfqJ}}fO+wFlwUU}vg z6S6Mu1$ZMPLFd=vI0~hb}{EKHKo_Dak*ZUW7G9g>n?w4)`r($sW z0$k<%Oglg7hRogO{@EpPlX>1F(>-&`F!tf#w@brsu;ABeJ8Ab3M5e8u-E`7cf|sAV z_gev8Ic<1Ff|qtKB5S?qOW<{>Hj4r$;rlh{Yjuv>-`a0(t-Q?`Avwr;s9{P9o>(ie7b!Ywh!H@Lo)$Q;tyNK`8-up}g>q!k?-}jz8eZ5m~ z{@eQc61Zx8{mUQeYxISE+V<{C;QC{2yB0hzHKwJ%hCvsKM@JC9Dl20DByMXl`f%vZ zHy}4|jZ+?Nd33G)GgL_FByAFeUNtkPN z7~D(3^wVK*F9~zK4ugA1m=qlb_mVI}bQs)DVW1V2MucX>KB3SH|GVXG`}I>EwHFvC zCk+{u;R#oOfd*B%o6w@{#l7jV33{|6M?DHXX5fmv;VAjpp-29cIZu&t%H;hsdCOMH z^5p&BT0XLaf3|!Fa$4m9O&`}==U@kIr^LsVnUPs3hM}JdFE;zhThGe2TqEap=mQ{A zcsk;WjP0+m9^ou_P8Phll{+LoIP1!KM=8sG$6O}!jloegX~8-4fR;|E&VJHSEi$Q@ zF$sC*!JL-|C@on_Ip>x8l8eKtXZ1*J!8Ur?tR99IOSp1i7V*gTN|kGP1LPWIySIKr zYq5zrJBT^k%A6g{`hoMZbW>R+czO7EWwB;6z(5~kFKP`hZ(rYtJlry>WKxr%;ulA4 zMcd7Gi_=qI3-yin)HmADB6ul9=mQt=woQ?VkGCm{c(<}BfG?2G%xB>X;zKc(dpaH{-8Zc1fxlT^K5xubF`aXb9DV@CMd zY^6-?pXdHR=H3FX%H;bWKeq`JML?0V5ZAy&1qA^UFAC_|NC~KfgdM2Z-QAsQcVMh* zce}cxYxmm8?>+ZE&%Muc1912Ae|`VFe7xtGJagvEnKNh3%u{a)`+f|w;RYi9qZ{-J zsqg2mIP;8lg}g)<>hSc%-0}|nl#Mwv0AU$Fa%w#;g)vdExDCEV*GmFkW#zab4*j|t z-wEus1inZwU^`-EyP~XWnmDTdSjPOBim&xUSS5t9Gc@jiM*~+IyqCbYkJ$U_6!*GS z@y>X`VyOERjIG^FmOCp@Hu!;^_hs`z8Km*WcYIi$I4SLBcMm{66U~jx|KR(8mgvhM z^l1y|K+U0}X?>R8V~$#lycVdp8+hy^-p$SJyl)}jry?FkyB~ABTLQdG!0RuLcUz&{ z9?Z9=kcE0QZ1a-VhkPUf*@@Y>>t6HThI_}}x#qq7As<5gU3`Oc_K&8QdV}BlpuM~v z%Aeob{~7!H_+F=reTI4{z8@lSE}*_=o#o@_zC`U}@2e(v*FyLv%y*4#&x*dsVGJ<& z5{EIM)gQHfRN8ZecF=W?R z18rFv!XD7wA33^otSr8+XGo*T!|H-U5g+V<=Hu3UfzzPr*{=Yhh`5sbsAs#Y!DQd8{lZX9)7b znQVJR!5(X2aj7H?Emq3V|4T?Ke$QqT%BX?;cD}vRqM!@L9P`WNY3Qq=jlPdCesud@ zOMxf5cV!rOwNaMsl)B&no{kHYdi{(qe>B=mw(Ooi_Khsu^@s7q+GPs2G5-QLlzX1O zY3C9)ukyUOxENg+in;>9M~jby?_zD!&A4LFVJHvTH;Wm6Fq!yF6VJ=U zVj7wF5Mhk2#rmmspVi<_a%?+rStfkj4Ix#f>0~{UD2vYW#^+z*)#I zY}|M4-()wV_hRH(fI2XD!2Kq}W;En1&&Q0k5dTaIHo#OWW4LJGRf3n_GWY)Dm{y-LQuPSHYSQ)I9_)Kyx*+La1gdAby}_Jm)A z1n=3depc9nw=U8}QncC|XRm65Ekdi6BQM-}{l*paa*lKN((L!5En_j}#^D*l-FL(4 zhaYV5_~!$s`bNOdD&~;SJp~1iN1EaBhkV#?X2KyKhEur;%HW6PrNI?c%HYWbXL=L#CQIKs9eY`W4bX}VJd4Qz|BD+t?;ut59cKl8sxgF06ysuEFJ1$eV z(Y3L>22Md(b%ceW4IxhDweZMQ>dkmO-HNDtBYXy)Er6#CT~y$#D{aoko*ruxz03*w z6}nb!g;sa@mL!3%g%o4U*zWWWXZ7F0p2UBzdbkyBWB$4yVe4VzdpX|U1=AWw$S3yw za`qi_$d-^xphs~$hq@2&swj61@qjN;^FbD&mHL*n>2aG{_rMyaC&Ciow=-T+u=#kz zO^{f594t*KccFiU%j}*FD~xd_v9ua1v9@CCoq-CfX^CIU9`(G~chcuOQ^)|ekBje( zAHn{9MezN%0?gmvVQmMD|E|`wZ6NnO^2h=d_7!LN89wg7#}ai{M4cYMr#bLx4t!c5 zEC~4EoMiJJi0g^E76Bivt;At%Aj-_Lply7e%OIyP*A!>CO06giYeK7diIo-31bZ-g zxF-!%g*sa6Q`@-$;|2uktx)(A7CbS)&}iA zC@uBO7qaIJ+O|&N7y`Vl89g`jD`~R6h4YPkWQgHp$5dxy=R%i6@+P!lrp zIKJ^dT1ubUcT`z=N9fyjfLWS?_+|aTr{DG?XM1sku{N`?($EJP|1^WHZV4UR8-C`X z_XRtIGg=+T+5~ji&E)#!Z#mo9H_Y8XsOqpd7FH8sj33w>V1+!w^r4tz`U5XRy_J3A z{96*ci&$&tbWba7!`2NE@O^sxR>x*f)qQBs9)LE-BUn zxZ+H0i|!JuvEu;a_Y}U#{m*0BSbP`Aavatnn)N+Due6tA%=s%XysBR~;YE!i3C}7O zO?XnqCgEFBF^s|D7=yN$=SpC{!+pjB>~RiKIb}45k82yYu99Fp(pny`I1Vpc4PN-} z3%*m5g|@Ge4%y(>5#MYYn=wIRiAm zh`Hf>M!!QocdKTwdE$J=Ai$M4cqrfs96SPWnGB!jpiNKEW&+YK9)mFF44*UK7KKd2 zd)5TJm&)*&_<2zX&isk+1gI_HTp;fZTV1= zE}R;CdR{ktZ})dO!6(md?IZa9{M8-)5yf$b&f|eoPj!*ZQ{j6Ucd$XuM59k>|3TN3Z$mmJHfUGYTW z3BWTf^ME=APkB5lJn!UQNyqSP#nTp#G;_PU9G+x6qwxHJxiQ(Pn)-K^7xU3l*-UTy z%$@3bc;@4o>D*gAkipKW>QLuyYN>M?(#-Ilp1EJ$7mq#WOg0yfRH=gJX0B9EcdDoE zk6(Ld_Pbl%0rB$z+dKDH&*k2)BF%KC{)oq%kNA5ENpJ_p{_0lFn~+8u#@?GauTu9% z+#|LO0N)L!6&D98GVne55jrH*0`+LVbWz&Tp&?;NF;IW1HF?YLY$-Ejxz%zf%I zz>%dX3!I`H%c{!)2bMk-^J|o2G~V}W-U9$dC;M>sA~ z*LGZ`mY_TqCPR6yj%Cy`l*h_nF1zBLiFa2=;D9n&m_Oj9va8a%#p!yVYCj)7-m@lB~74s@Yyxl<*tmLQvJ(t_3>p+jC*N{W7x z+FRX#o>_N@Md(c@Nzq?rb*w&09jtCj3tQj%M^?0dnGRO%Wp%A?b}t!%Iksp?xBgbl zzqN!*Z~WSOT$MWDDT&9<<3n-sLVa(RVD5E?KH*u$^AO1t*hH92*#x=a`Ds#!3uH*C0&?|Te1mZ)(m{d=1zz4LqKMG0kMn6380L zTw+qzd_%mUthwv-^Ri~RtqEBJS)!3KkR=)!16iVxF_0x18B>^(F|g@qWDLH&!(>dh zEX$`betprd#TdW5ys6+YS{>mqR=w0=y!yVwMD?=FWr>Ty%d&uFiAy1S$Fmuar?aPen^R4-61wYMr!v56rgv}Wz3TcHAD!^*$FtkHpLzjNVe5jAD1Tq(R`o|GZ^)~ySWB?qJ?i<0+Yfkv^FZ}J?!7MFKROLW{6S6p zeU&tLpyNRGbmwhIqYY#4Q=B)ey}=irPCFr|_Ns3=?La$gC$3;m=00^Md(fU0cosuG zDI8@E(KrgPQjkz$+YA zsu>?Hhb(9W8PN!JG(uXbW2AZ*Wku}hL zJ)rZhQAmoi^~5;nB+zlKnU24{w4~@*iH8-w1z;5fIRbx6>y2+@MNhj1K^LxMwLZRN z$atJPNrZek?b_3-3gipEzh?as@1-%;pF!XK|EkW7x;iIm>x4`@b2WB#$}$c8NQMv3m|bVZF)D=(Bqc*%|#Z zSjXKRMQc9am#%q)GepJFwo%qa>frk`yK`_iqb=S?L%v&h`hRD?mbLu9dpxA79YHVl zZe7>^yMxvabiP2K|M$vrD$K$Q`T2jp{&7*rH>_t4b^nHSp`>-ZOwyuanP$x^y2e?t z^_&Y9{F2Pog)r||bsMp`3dUbmS?0Pz5sndsTpc6v;Ik2qzf_^j4TUhTSIsKj74J(5 zN#q3zv3+9(TT*!^l;!b6X3@d}=UHIKDazKu&0OQH*j^rsbN(*t<%+(l1D|bXYsbN+ z=>&MbX8l_7nG9?9KIprrI2U8(U}Zh6B-Xu7^yVpO5RZJ*tmwiM+(Y>odxh-Wh7@b( zrsXb`e2P7$rtuZM+@TM%do0=73U}1vj_YD;4@yfuD+4=6HnVKGq&D>V;s&(d#L;?_0j)O)XuYX`kB-)x{{KkpYd8gWWXKwf!El-7vo@n<%zX=c>JS@xvj+9?eewBz zqcw9ZXgl+<50%mMrdT6eaQk1Z9F~4H?1N9h&n)d%@WUgVV`4m`=}Q^av2eLmvZ=(~ z${p+XCUT29*k^bn!`eUXhu@`!l9JDA44pf-5BBrk!`{Wt)=gK^h3&wrIOsD(YWvIu zKL6~z|Do>hy&ArwUIZD!X!ry8WMM6T8SC@6sNV~D8Q!d%&r;gXcbr@8_{L4?}&dO~<8{^n36~Vpe3LH>bbpKQ2ebCUcA=r|dyJ>uUvst}!#u>wvW9QS5R?OX7`6yB zhKEU5MN76OE%uDiM=Xs6d_$a(#syTdjQrxFz-~gm!M&HO><`O_>S0 z0ItdURcPDZiulxf?o(=lMrlgg9VhkOeH=EF)d;urX})_5?ox2}vD(d-GYaLf@7A~@ zJt;=x+ckPycvsXNfIUNkOz(XxXVxqD4hA2|nYG|S&a7wuAQRM*BnhrR6blx5K@?m^C5H4y* z8|K>wS}^-QU#_{dxaW(}PD954z-V7Bme%5pJI-c7{z~l;K*D$Ehy-5H$N0tc@&=T;uEN zU{5W~#s&-fU;PT{xdilJ-<7!!8&o`Kg1)N7_scTu3$e89$&oQ%N(uA^d@F7M?%p{< zB40}O-MA0jzTWB*zFuSSU=D2lMDTsMRE#@UjCIX-!?1U3;c5}e{AIoi_JUB4M(43Goj5$uW2J}(AyaP@C(t_fwi}Vk3}e-htU9XbDIU1#sg*ZxZr!9nzXR-YG`UI zE%eA1=mTp_T33r=!nFK&S`44r$>?_t|DvoOkZqJL`|RvZZ$@@V*(iSir^t`|z6+m^U?kE~uk~T!QqHaSZ2m3}4Jk*$8Lv ztMJb5Zf1V23jwomcd{S%L?(f~)^hA|)MblrTWiL9t%_4flI62ly2zXP2QfQ3qlX*H znSs1*(8p|_H3IvH>^`VWgfaag7{8-&9>N0i5z~iR8gqAG?81Ex=qtu6Q!OmB<~rk! z*m$fPTn5s-4VZKI{;nq|lhJ}7>&!3oORNOCycFvKvCs6~qO|QJ=<4807c}ibzeDdm zRYT%1c8JpA*$LdwZ25V}r8KGKshQX-2hXAHu%&AJ4Q$skdUr&eze|Jm262tO7F z(9V7>yRR7hGwZQ5+{+SoE*r{>$2JJZ9osdqgdawD4HMxP5njhc z_&tO}b{XOG55ghWjKUFS0eLuD=3D!NX1uaH+;GwS)<=2D2M0GuHbdXCvyd17T`IiFH{82J(Xd9R)X&{ z%PpTFEKCA_A%-90VVt=x{t>>%d|7$rV`Goy!<|XRpZr8V#>*_ez1M}`S zw!dMCJJQ%%?ciHyFWg;-`z9shFi%~mB(XTz1HV1K_q`MpALX^-Z8$qeYLy^yu)$ud zM^Jnjuk{GSUZ2N0$BbxEBrgAhgDQq}4ghb7x(fU1GSk z{62B)OQeI1W$gl#(PhZ26NUaMgw+#2tQAvejDMtFZ?{H zY<dT$^@CAO1r&v4L?JW~MA6~GGx@KOQ1QUI?Nz#9ed76H6N0PhjN z2L$k80enmVpA^7n1@J`yd{qG76u@@`@I3+iPyjy_z%K>xKLYrJ0RAF?e+XcyAJ6BT ziYNuJl>jazfNcbD2>}eBQEt3!D&i!7-2`xX0qmiLH{-mqXQbtn*G&$tnGCpyl@_;F zME0MdlMwzGjCF$@?l957ZvmI#;Maibb1?HGZpy)IJq>>-O?tMTj^g0I0Vi{CHsC=V zdOx_#Fo``+yu18EeZC zz{NN?3vgKu-VeAs2k!w4y;YNbC*W2bybW+y4&DqniGw!+p2orJ0B_~s)qu}%@Cv|h zICv@GLQ-w{ivYWG@O;3HICu`=&Kx`wa6b;726z?+H7j+$HD1RXwvrtYzqSx zt1BLGB@XTeIEaJcCu^6$!Ce85=ittO*KlwLz<+Qs^O?HG!C`>Eb8u_Gj!?o`U24E} zIk*Mj5Dtc|-7cAf0|8Iw;6{MgaBxGwe{irj;9DGA7w`)Xt_}DL2iE{>3#VvSZ#BTx zIk+-lUk>&F+>(PU0Pe)WWdZl#V63z425_(w;Bg#W3h+F@l$sPBpPmq&5R=e9CMC%w zC8k$;d`e8Ji>FION^E*UOk$dQYDJ1n@8*(_o|@(o8RHU>=n|ipnii2572}fB%_Xc~ za!j;eN=igOYLgh#H#sIMEhbtJ>XL>8x@vkRMfEUO32;bC>F1(J(k&vsXH2v%TY6$X zGIEK;S-Yjg#F(oPt?Cw&LfQ;2X-O`zF==Qvnqm}_0^EAXxb#VhNEW1zj!BD%iqmFs z;qveVjpzxK&DES5-#^A2LDlIAk-#djnYyiC5C!rSP2_^r!7T$@3UG)@iHS%KPM}NU1SV=_xUS{HbWOHqa$GB`G;3C9R(zR?}dKtUs_CRczR-d zx1^K=b4k;a(cJLJr1Zq-JUT;IDDW{?pxI>AMWZP-1|uZz;pE2Bx#0=#8};6iAjh`NYAvgmOXOPfSpndVXCcrqe7T3?E|r4jikB{CmrxSCSa zBhA&srHD#ONRCJmFs2wEE>(PLxLDFgq=94+kgZ}OM1Sh&O_CZ)&5@dVJ|qwh#D34WRY zT4c?k5tY&}IV}nO7@HX0Bc@++M0|?AW-)Ul_t5pD0lfwDYifQHxh40|%M2j~t=cpS zYUbY}u)UGsa7#6lB{a}KBrwcW7QQ*LF^MrL5oz&Bi7wo{E3A?UFyoesX>K6pgxO6> zIY9zFF~vouCgg*d`AH)vs6v8ZIJs1E5ug#SA!r4yC??k15owrXO%Vk1Yoa-<^$1l+ z6;)Q*d}VH_3Hr{~2@)gRgtLS&QmemU9O~v$1472f=7W+VB!tBqF`6*4cT7rrw|?Py zq2LC3{+A}kL|3m>%d>8HYL9RXMGP}tQw;`SdSuV|C>QWGv_M0i?yD^$UxSpdFkgw? zbS3NC$PpA|6{}qUlC-4D^*W4Qm(^jKe^~ zGx1Sz5vg%{4$}=tF{>q|r{!Z*#p`Ew^D}}Q%F_40u0CU=v@$BZWiz!<78qquNP-?> zKDS>xVQw~7bW@+%MIlm=8~)25n*3a2gsEW(<}lS4AVyZxGu#vv8IgunTTD-_63THE z*eN+8H5I}zA{DDC!L+MQE}q^5{mmvgyz0AMtjCGlZi2Qv#zNAXNEV+MFHo4pavEHa zx5kDgJ6276hw(#4*pSdLzpy~jWG0{*TOTtV;v;&-r^b*84AYaNSq)|cEEj8@jNRfB zBYK+49UUJV1J)GhW`YC6&rPo~r48jFS$|qWain0y{(FT-D+Eof>I9`@l^|F)*Ai*( zQM#TrFD>+G%xE(ViI#r;A{KB<)Q?;NF6v;lzm`{w`4$Vlz9zbgDL>)4wLzc(MG3Vn zosc$(Uz8p{LjfpEZ;U2Z{(Vj8AGJkvO^DD_?WZZr&me9nMUSO`iafE+Ag7_2v4&)T zp|0mE2&u-`EvPLuMmWI4B1GTHTzDfi&@V{D9NO{7L<47LVpZ_6fsvQJhl{n|nqvBz z#$G=$vr>%ebrX=&RHy4Qm>?{SU6{^Uv0`2nV z=R|@wKD;kfWZj%C9t7fq&~EXsdNqCO{I-VA`P0qPWi-`3)7brddsvQeto?LE5cecv zc%{i;0^m$xX7GrQNfQ`~f0|S*`@g4`CihPeO_TnoIU$_SmJ9jB)alFjsGi#SrHn4? zPg6yoGjEFM)8?BRqAdBQL~2CO)PFUYxQstd1wLQiG~iR_n*xFidAC0zJx#DiHt2oP zdX{4ymO;CI70whUrbA6aQ_a&$b}zyr8QorMa1%gUQ>$JI%SSY0%lsz6*r~=DsR5LBw3wp(fJj&MGF@K!}|=6KQfEu_;Nc@-st4 zpZshgVqoUS)|8Z-+A}@@_J!OhI^AA$a#AV`0oV`cHl?w1pP&2@JHX zWwHdJeT%DKUw{G9Jo)oP0iFYQE@Tw6yaP#IL(ah8K+j^2RVlb zv{=2o6sxad1`^{R8Wv*Im*NyCINWe-8%nbjb0bDL5uhM_&xq^D9~Oz&MoSG(i4ltg z@ysbMH&ye>P0L=X(AsO&)>BEW--@YZhIvgD`0vMFZl#IYDc1pMvY7ukN==rjA9;rM zb53yT`xo>xF?91N)u7ELN2At9An$Gt*N;pCWK9;E>mWCYw!VBZ+WA23UyfCiXyjw) zm>2}%d5>zhT*mAF8k3(G***T1tsA+-n_40j+Jvba8N?fD!VG#B}Da%$20*fQrW&H+aD14sfi_DO5c2l z@3j0R(n(F|c0fo|wPwSRSEy3q7a89zo?)uRFJIfkd|UEkj7*J5!ED8LxcNE_tQEp3 zNr!}9aOo+S3&ZFTGL_Ff-@wO%L(Wt_^Yx{{=Pea_X&TcE(38Bs5Z^+66HCK5p`p!! z)%=QvGXXMvBQd>aPfCf2iiz+2pNlc#L_uGt3Yd^+Tt8>1G^yD;QNbhlgy%9rqygyplDA+Rx9a2d=I(=As* z@wFKt$<-5;loF$(1>7KeV<$N}JUIy~41I+Lo9D(Aib}~>Rcw|pb_Euz^7&Hajn#M& zGHuk&8V858G{#BewZi-nb+aaXurZBko35F};uDk8)AC>)_+3Z!j4TBj{?ukUFONp% zKBUCxX(S!iZ_(*EGNIdL5Hq0Ok2;rWJJm=|i7LXTQAl7w8~?z7pT{nqd4dVXp%^<% zpYi#Uq?&}eV`&CAw>%nWCR;8YoEQ_Ei$4lt^D{Ld*}rN|E_g9NanAS13^TA4`9Y4Q z`(I<1%fRoS51jI&E$7E=%&q^wYM5K!f0s?*o@T1&exCXAmPs0a{oG7CV#5rFmM&Mm zjQ#r5ykaa|&gsQ0W2AKWZZUNDS*S;Jw}0c>#JOyl>(&Vdye&DxS`QcEYMBzmL{LkWNbdEwhCiLG zBv$fFZwd)>=W|m?i;oE^gy(A$NLXX8n?SG-VPerUh>7+ZQBl8W&=f6jq2#NrGAZWt87WaE&(MhgwJECu!1!H19@;rhDxSoLeT2qj$B58>FlNlfuL(lXZ!EWZn|7?Yx3^b|IV+u;bD$lP3QSZ zZq?f7u)70~OcN8zPtPTJl$Q(F=8==l!Qsj2!lOiDt417VF`R(X2_v(IZ%nIJc~oz# zZMkVHG!piC6x1}(FCfs^uFI(yE}9lrOU-v5igvH`jA*zv%NJdQQpOE@qc6@=7$x+2H+dW-UzJfZ_Md)^L@6>3buPw( zZL6EhCtk}KR=E{svWfgm!@SG63v&z>Vd61mAdylN z!?`933NjWz#%at{W|ED#qWSq%>k9ubkQHMgDlRXSMT!3l?mB05c4^JeP}&Ugy7Kbf z0$mOb28OF-ac}2Usip{nb#rcAs9Pax`tZMzKwMT{%@?Qs>86{={u9mSM92T2(ZZ7Q zYO*lxPdC^obFR&e>6;dlsBvXU>k|{vL$`q{-b@zrR${((lLQAlA#1|TRb`E3R%-pnv>eYeV+GU0;dSe!E zQ`cPxLS|d8xtoG(k#5=-&naf}YBm@3%7Q5>h3D_a0j~Kh^?xFPIaJ}Aq-&fQ&9wY^ zEg_j6F=0=d_aM@Dhi3F(&B0&uVYWA*dx=k!i!}vq_c(voGYApRjhW1`B4#mti*qZ$ z3^$tV3a$~k?DYwU_s^1=6{{sT43qh%c(@21G1axj>C{*Aqg|8mKhaFjGNN{HY$0Hq z!Lctn}r32_=UmkE!1c$ zN_!=Qo)9Qcvo_7GI1LvXE=9%LKRUFuM5{rW30MTaY4zwJy)bHM!}# zh!?V=a|CYW)+w(vo!pShxE%DTncRqBdH7r0V4`ua$S>=-KsZ>ltKIlC3G9kA-HY}% zL*1+9dPx3_T~f)z35K^U8b$CoD4LAW+>J=Wy8>~?n&CUM@5ZDgU=g2+6L6wf?#e__ zn6@-gknU<@{^J`L*^%~&NiK|#PB!ONR0d>HZ*pL z^6)D_Q#%OxNNB1jO&4jZBTc8wwI5Aq$+a6zXED)>rW2a%MAJ!4_o11zCcDsdTC+Wf zL!r7(0?eJ65(SCbgeB57C=PctXlGCyQ4(cp6~a!-HESElhq5a>_*s}!Nm!8Zyn!$& zyWK5tObCJ~C-J5F)jT2>V zDYTA^xuwwh1?HB5%}ZJjz1&inZKSp_=GrP63?k|X9f(aN|BwzM||^2G^) za4-XR)0v78cbzZ`+lw)kLu-FD6{9gYnTpWcy-daC))u`-oT;1~E9tpLh`(q+2qSp* zVT&76rRw8N7tF`=d6}n`5Z2;MCj6X?TFN_V2_`8)kjB_7Dj8)WDd#9uTL5-JO^r!PqTbB2-9svnF!bV zA8Gf{45IylnuPm>GznH$Z{}IUd|ZIZ$bi7cerj@RW64OEAUbZSE!^a*&X z{=xwURhk(F;igVV8)P+=gq_RIXEHORNTXJAN-uZgf#$GxE*5ey|yFa;~ZKSGKwFYO-kkAg*ILdd;ObIiyV{)^WW+ec<>#kM#L# zseaVukB<8E`72+Czj?u6vK_j5elnk~KD`j&)@r#?O;?*yF6}0R?zk~Oy!F9?<*IR{ zvF5DLDAqUx;U*SHf>{25D%(0WQ6U#?K1OqDnm<;WsF8U?>z%|bB!;#OeT?WTOXD&P6=;1%W8;KAPG_PpXM@luHJU}VQM|*8ktIsJ z2+AWdQz$iVl;Vb&Eu2e_+X6VY&!c?iR+sOj`7TxC{FTpQjrH6-P!<~;^GGak-^?dI zruoGz!NdHThzEj(naw6QXMxP48K?z!;%Iy=^VtlRqg9*GrazH9BoJ-?iS&(|sqt|y zp3m5qd)NxiD8N9_@#*v{mDKoTma%$G&rm2SUA#M-VJt8w(;tOJhN}35lVtmKU`KSn|Poj^lY& zoK0{Wsksu&4qtzcrFnO2{efWEM$h}nq>JUtIjtufA}+px?J0kdtc~k6Iyi)J4BZ#_g>K@Gu1UZ??D4( zb>ZeXSD(Nvq4i1fAhJH8G1WwI#@uTVZOp#n1STmZPLeB?G=7q1Ie=R}8<3LsS2V-5 ze6(3I@(J=FBA?8dgn}4j0*WGy$tR39NjzZ!Q=}8d3kaw8cF}koiQF;;K0@M1k&C1G zR04NE^NBQ@OlG5#dzg*lH(AWJK)W1a&RAxPz$BepG*?5eX|yw|IUI!RAAK5;Uy%Sg zQ8;J$G?Ob_Z=NuhqN!hKQ$y^;HHh7=%p#&Ggt=4cO_Vx_%J%l5vI#!)OB$YJz`VUp z6T!WRV5(BJnrHPIHEY$b<5kzMkv|NwO`0}q-Xf@_I=EHqkkGI;ZGUaozC%Q0RCG+Y z*tq!aJ$fc2CMEYuNli=d-KTHA{=_eE*$Lhhd~AoRM#uE7n$EfRXkIutwO=X+c~+@b zrFu1zNF-9JTrRh;u)s%yiSUVO&7a{fJ_oJ&WPmI;j~IB73bzc(ZE6#z)z;IC}`_er~Tw7{UUGq*tbbIT=k7hQO`!H+ud*H z2>vXUvI6{T0lYAnZwH6&VS{(#+rz~ZK1D71oKlZ6*;h#$Q0+^=*A8g43 z+^?0vyS2f40fYDd`ugJ1`%WdJY}#F&|8eP^&v%L&lvjkO&y~N{D=rcJZyceb)-0!l!?TejkDWm;~w)NdtOQ>R&r0dd03fk+vIOceb{Rf;KHK z)Vx9|B`vU@^lilzqOJw@&+qa|MGJ#6R?ZlqqSD{wO{?#cQu{Ys%1_4!vHRcl=-sN7 zj6yPGSpnx{)Tf{CALCP%l#}rLf&^bFji^8V{jq6s`dIGB&|ZHL?F?#QZT+68deHI_ z)2b_|h0n4}p9c~(nBsd)QI}|G>Qy`UJwyW^zN_HgKuR@B9=?0AhJ=Prs`&Y0u$SxU!VkJ(}OMoHCXy$o8tNkM2;z= zX(biuZh3sZLQcVw)f2k*ms8=@yR)O0s3_**x8;wWC3JdiaGhQIR21Cu)w>Q=6;x!x z=h?oV3fkW$z1@^`QW|spe8Gm(lr*DJ(B6^$avI+%(lgErAA?kZ$IlxRK~BC&E^~_RUY|%!pn3Sxg-`p*J-+x_FQeU{Kzl~{qw5! zgXoG<3Z*dTVN)g4X=2}nZ$3+D`{o9ZR)tAu#4wMcZ*IwG)~tqm?7k4Wc+KB7|AUey zjM!SR1Nw9C)|n62)sxe~W$NkYJ4q?3WyxKsZB=wR>q5ERtt3?3ui_1_h7vk4eCo;r z5pvq>T7B)@UsTlcV_HC;SoBZEmM5E{iB43g|6cuCMxGBYUU_jNTN6pBEq7{B@0rsz$9|IW|^FFALBZDhpOmA@xcSy3|ElFCRZ0bZx!9~$QYYRD*E`~ zsG{**34M*7RqA|}g2s6@S~U8aimo>*fFy4b(KX#4JRx_NrEz1wm*{S{g% zB<4>UB@CgZZik6p_PI50XImMawfW)n*hx-_ z`->Ne;NRcg?p+$QT}o{n+K)LKDkW*}3&Z-BC+fSbN~*&WqMjZT_q?gEq`7}hK0SSr zlA3;-*XM$#oMtV)nY3pX`26X)VzSdpnzMXDX0c@wvMS@yDD;$yx_-ZNXXXqU-LV-m z#mz}c*5}4I9(hJaL$gY{g^rL@qLsQu;}c4f$?Y@ugsVs~!S!;d`f@6<{rtSDy`{AE z)a|d2j!9_$z4b>d+k?&xD$kO*%BkhXA~sixDkv|x_SCm?#@g>hbuax|rRg&%wcD2_ zjexMuIqnl--5PS>OQ*@lN2>nMSr(Dw8g3CTBluf4NNLD#nz4Su~=N>k@|>(G9$lEVAX zTd{Sul!jQmYQJ@zjDAzxI=cG3oD_}Dt5)w;P^+iKI{t=!|G$zyi!8rQ+}&D6g%qon zADpD5QnMD!XyzfO?+Y83d@xN$?VPF?d6J=|gZ6O>D+PY5w{br0p`>zOPMr1|Dy88M zd%cTjDWwhpf4r;FPfC_Ky^lWmDx*d%s?6^38_|Qlds^FUAR0aJ<%^BBDhjRj;nexh zs{b>&=h@4)&$E|u@>9LBb-?&*JHO}6`Q0RxQ1e#xtS)jo@=N!sqH~98t!R&o+uz zM49DU|Fh-|(bd;$rcAV!{GZ9&NeynxyJ4Kx9;YbO`kRspp58K{K&*_a);K%o`Yb7( zEv4+;WeU-anp5At=&YhJZ|8Nj9f@wfZ})Q2Yoa<=7Z;nEO?20#Saazb8I_!}^u&$# z68iM*%k+LlRrLFWdnZ?4m(r*LmRmMASJBbuhksYaOR4nys!@e*%jw1nxAGUxO6g{! zCJ|32Na*tRTS;r?tLP=oy{cmzqPg@>Ja>5-nW_xsu^;wZinj%ihgXTD{-%xjxaI@B@P?9F@`3pv%A2TBe`| z>2rKb9K!tjcM^?~t0?K}fs+wkq$Kaw?zB7by7$MVD&uA<=v>79E6bV@J^bL*u~i8P zCAO(|qov+&A*oa07a!LDiI^`XPW=TbWIe8s->x-z=_aYTHH#wwco$cpODA?p7* zx?fPHf_yrD&bF&9q2C*>K3lP=gmyjerLJnNBJb#L6N|g6sCUOXvIglyv9as6gdbGU zwOWDuj)W5(o^g9t<^UNz&e?XgnXQt%E^My6)J{qZH&s!d+fCH&$> zZY7%aw?ns83nVnL&BZX~7bRWx>vGXyn2K5-OHb>aDx=9UWs9GhK@_)sr3bp7S~uM{ z{0+uMfYQn_xUrH{mZ^&N2bFYV!v){(bEKGe<#X@+qoDSVr}w^awRM1Oaw+Q%hU zPHtD*zs;(yq>y{dDp_ukQbzfr1ItA!>FU5mKIu@Nr-v-CvVN(e3MYe}eH|*J1yK#^ zIcKUUJm5&Rr@fUltk|Pf^hHKBZ~4ruTt-3@RMwBCVt#h+->3M=CQ>^8?QxGbx0Ezd z{^eeHB?(P+O4?9c|K@f<$_gHBd1l4x}r{^5NMLw#(#{Q?0J_NgX1auQQW&Hp9HSapgw&2Pr)(Gi}L4JADY9guA>mtv;5e2Ht9$j!zN(Y)8Dm7rLlImKluQ{R`kzYeubZyMn>wa{b z(x({c?)0PC%61AGbNbcBT8-tj=buqc{jur_s9eZx=x6kgxBaS;ljZdKQ_1mRJ0(qQ|ItvQx_w-@j{(AYmMU=UI1)zK?<43koiGU=Z(UdX9cfxyxSzAEX~H=FS( z&*U^_%)S=0mr^Qb;rYSKSBZ7XrFQ2q zjuO)Uo;#?jikg2b9PiXiMI{P$thIEQg0}4#@%Y@IL{Fby-t(iclq$Tg+3&+tIbC*d zGxYo&71?wv**XH_GQjput18fEZ(Vt|q-u_gy49UF-Z@T6wMtBLRb*nlGqPIqH)%?m z+;q+8`TMaBcvAIz%OY~x)!p)zQZ1pfn;wpt?<%2NOGjQ_hk9IQbe*~d>!Fjcns(?| zg2a|rubuJAb?-{1TdSS{=yMa=Q zm}il>DNsTZS?s56W90N@-nIx`S3u_nF|H|DG77%y;I;dKf;*lp5D7aK&xBlGI~HOj}(A>z=o54laZqd1~hJz2S@GROQ$CPU9mLw9f6Z z#pc=Ir`i=aPU@^6_W^4z9EYBeKGMBs$?im#&vhJIWUd_a9W-&gos!aJy;5twmeB03 z%_ExCQ_;$Ue~xV4RY5zV?FL@H0RFDh-O~c|R$!|Wfw#6wsX(;}LxZCvly+~?<1v;} zs`C8lh;h*G&)ypl(;oA4@~C$47tr6;tjjC5Ji+=jx$unL)l@X(bme;A`>3dTGn=n# zrYq>R?a7RZ&P4ImpL<^@uAmemsd8sm1VO?+_^5n7DcUV^)>g-YG zDCXTw#j;AbQPG+Dn~D~QCn_}Q%E~`|F(3H%mH#>(>$~Nt?yas%X#V9pgPo#P)a!lF zl^4$?wCQl$kcL@OQlC8+qIya6-;uPLa1ewM8){y-;qeG#&c%z1vxVN0W(`T|4S_y{Me3zix6=u|q*Y zuOGcW_5*k}`6YheSs8U%4KKE*Z z^|No*qQCY-j~lvWD$z#?JsbP<&)&_Y)Y9I?Jv6werV)0Sv^kx5DOyov05r@6(~B>MI5x}I+(QnI)I ztLLQBGAhxcc#EE&B($KxwO#46Wwdow&W+b!G4GzcvLjcYnkA!0{fZs`dPG6es$I(MgS>7va!%Wi%aqh;;N8nZ zDoV)F=@;oX$gwT$+rOSxO+xm^s#LADUqU0Fj-J;S`oZp|Pwk4r&hfCDs``Q&Qd(8D zUh9!JuzoI;J*Qqnth={dJy!_x@1zOYwc_e4sMj3VF-ttLeo0ARP_L?lP96Q%KVy9SxK|L zRCt}(far0JnG3xatLW7O%Q6QN<>b{YB0jV#(I~~z4G%EyOF#Embi5Sg?{SCdwAw`e zA*~8O3YXKA;xmrBG?P-7py?6MfxmN>-QAE1D(e4a>Fu3vuzUP^>w^Q<596&1%v=e& zHY@e_@7d66{gx%PZV36e@X_k;vhEV9Tc}>-1$V5gES5jmGW#Z1L=D^j9UVF1nU7u%1n`v^ep6iJY?bM~xmo zTuRkiHEw=xlZ-0&f4^~;8_|YxPx>e~NU49|wOBt(ISuRHb?m9qn8!W)9QZ=u{~AS) zgq~K>(1I2}V$P{(NhwLU8^6ow!?6#ye4*zbU$kI6)EgS#qhHvFn+hsNGm;PNl9A=g zm6gX_QIcnK2MeEl;G674)e3rHz4LO{FW%SWv?FWJhGDyubRg*V?RAMVa#&wIvchs1 zof;f)D+PN0kX1VszkiZZk%mJ)|GHWUy>3X`tZ#BEsUEhl0OZJ*%;d4Z_)95n&1&zD z1LPFzUcUDf%r9q)WCZ{9SV4D6JRN8Uee3)7?SXS|Na*>Tvca)s6jZFdefck+h-QzM z&rY2LtF`Ur;PQ)Pls&-m$GYY+s!^|;>>KPWZ+A}l@y9$Vm1v&%cf=~9@FOWUk)4z@ z|K6ipc39`UpPo7_HBdpfTYXshGDbno{+N)~$_0AW=*Fp)dr9c_G|#i2#y~$EXt%2@ z?3!nMYZm;H3O#<|Wz|&zJ&8{k?_1_cc-d+Ux=I*{``Y{#NYw`EXGtgU)blRe- z-a$d*+k3SvX(y*spB6S4TU$!j>+e~t4FkbfO=>t5`eW60%NMRqkx^umt3CZ-CmbJi zV$NFFM*?!ljy{0@B;%W^<5hI^Wz#3$uMq7|TM_JPp`fd>^PzifvA$XTOTUG77&pGh zyFXbhp&j-1-kVlNN~cB!jZI%AqZU7|Hn7F|(RcQzjb%JkG(Ub$$bk@|5@m|LdH{ak z^W|8fnP^AvRvV{%D2ny?$?0nk-j~s+UA?FG3zSp8rj2bZA-{**`DFVY^2{mZ+Dng? za{7DK;fpcA!}qCINXKL;&8pvdOL9*+?H;^*i2Xhp4M~YgxMU%x$gV3teENdQJlA^X{uiADA<7>mcJ1t;OSQj<3!iH0FN)K^axnzfo z&Ly0mQsFV?bMG}LQ+%ZKZf)GUov#%X7`5kexjX1j=WC10PL@!~BH=}2!X;!et9b0> zCvy62#i5-mwe(+E_v910L53o28(*Is>{hJ3;lR zpsF2)%c-lMe|R;Nx3R5Sa(lRh7LW3`xQ+2T?R3{z`%F1S)Ci4f>#riouG&#?kguNp z9~y^Y9xdR|bhUST8QICpC;ZX~>+`*KO()w(>3!I)I}TWX54zd)?q%4A3zWWEXg}oS zs=1k6=Gw!Kw57fC-t|f<5Ea_w)d#FQDtlCH41MeB(h1dOr@{_iHrXnu5Z2Y#1}yvS zCh8y4;Lje=Gauf3{$~#Kfg@AHrXNnhIK14&-+cn?S?+Tjf|ZbC{_hVIj)R^w;mYva zYmx5pv;OVDcL%DSxf=Kf=83+4wdn(Wc-fF?HRAe6sEvI~1{zFdwcPd1DOqI~)_%os93!}Z+){91;m5`;X_4MvZkf$Xm zrRhH^nsP4tf)nid&dZXIR_O_QXMsa&y-r|V*Q?))Xw2scUF;8SK7f8L+;wu;3kfxu zY1^;@^p`B_Rc)?~BdjYsjjp#4cJB_QMvsV*P?z9Kap};T!v7pR=g?Rg6?M8hcHlP& zJ$jtlrlqBnE;f6=*ZZV`{QZ7^?t=c`F=9i?1B{RQn_I84+peV38Jm+Yog*sw?n1eK zbriJJqHEi>Y8fs3aq7mm%2HZ#w|ZgI2T%V-$N6eD#FAy!4LHy7Qo4?LO`8 z{;rLJ9(8s28hac2I6r<{qG|&DuhRS~#a&^KwExu9{tu#&-es=eXd$O+?S4%B^|6w+ z`z0rIl*`F>aLu<@kIE_8Vbbhxu-9eBENfu*0d}^)jh}A@qMssfMb*K2`}1h4R-d6K zpKu;@=-hJ^ISn7Caz6?FyS8~yja`tBGrV3U!2aK4@Y56>hHUH8`jUSpUwHYQc1_k{Jmp4^r)-1-~83e3H+U|uHM^6MHBsI zgf$(lpf10>Tk{?Eu4ip5+U~_VsOg4cgKeBu^t{7l`PO3!`eWYci9N7SHpa90l-^ip zUf8c#w)rnPRdgPz$k{5RDmT2{BVQ;fJLI{)ZD;I*9Vk-E9(u@-{?+^?y`;46?YM1| zuFI(Zq(kaw&7>4wF{g7;)F;2}95B!e`(c$gbn)t@qAr%oalsBmk@bgt=nMI6k$P#& zND20(cG;cnwOC1?#?Bgb;RxoZ-ouV(|E8k24abN6QyS~+vdi}?n_>O(W^MUWb~3uq zWbBsfI~8=O=ECAH4?})^n;ZGQH{@EgZ>^qUT~{`s#>(QqL!Sz2J8LpJx?HU?`_!2d z%6|FXKM;D-#ZozID{O%LKbP9{yQ`G^qHOC0yGSW|d5o_g#_jNPFX|WYmXpiM#N@%? zi?X|u+ONg9nKmovcxUMQ3lIBNdpt-^k5n;R?m*9;+vLwL4=+RBK3+Uz_;}EB{)$fB zCQ9i>!RfYtK(5SiTv9I_`;zgQ_pi+!prFhRr;~2Oe%5aCx0xg2B(x|(cDXzF@Ks8m z)$O5YEkBSNk%)cYU%UU(@FT`UX3c@$5|go>sQtWd-`UVphn$(c|3Rk%g$u%dFyMaU zdrK5F`AUxBWl06y>{DAFv`tDSXHL%!hTY}VlQnfWW@8EXx%~Fy{t7DnBsQZN=2g2B zNdXJ`%4yyVSoVp~j`2E%Iw1q2&)dw{=dD(%ilOybLLzq@oEM2OfsL zsz{tMWqNn$;iZe6*i%+Qoh!NA`G|SG+q?;7`@o*^X59Ds`^G@e@LSfs!DsOG#zR+^ zWyz^~JL~eJ&~M*P+Z;K8eS?mR4>xE5y`Z(N_v@t#lr&&vL}R;pQu6v|%+h_3>q)cf z?Qc^@NjulSnPrc4)h^Y5oxgye-^cgyvB-oS_H5-Q?y%d13`}iZ2m5!S78g7kU>&rs z_J(7B7L(G|{a1YNt%M%)v1`yw*g-?8o`2avLi?tlpE9F3#zpcW`9CR23hh3$ z*vLxQUwWRjsMT}{tzYkX^18c%zUr> zg>M!qoGqs(F6(yp#6Hydo==0n0q^Ct{;-`2{j}zp9`3tqV1Ir7tvy>$D(TDqzXp4$ zRdl29*x!r!L;jVGY`fZ7MjkKzy!L21(Zr$?Q@>z;rqauBD>lDgc6hxY8TN!ZXR0-? zNw7P+)vnU0r<7iAS9DjtC0dywpA>LUPBUKLx_c%7>!&#$o?BYLzS-&1dk;8+G#vd; z(4wwH#ZE5So(Oq*;q$`FaL6itiA;6?E1BS3o2VlPGj#L4pR0|(xv?cq%OeEb40IxXRvwP;R*cr`vy=f!UABuJ4;M`X$!oJv>{i4Fg{s ztMtIVvxEkpYAtgrB%|@po71XV$w+qRS^=8{GTPjB%gfHNWA7SR-eE#x_yc_1zUEKZ zZSO7lrPHRp5~?v{V!AEXi8pt4w~DAKA=~#C`aFt}(u%rHLGQtLjmwA3DD_%O33nFU zy8a#W>a0EEM};Zr$EFVx{+K8ux9-ahZ1k2;_i*)tW6u<{tB}uRxx0)CZdrP(D(sR= z9(GbF{svvEuc*~rs-Ok`+zgxiK|)u?^)FZ&c%NFhrE?1Gk0X*4^9sPP<9g1QgFhUx z&U)YS$=>F2a`n7_Z7=4%Ic2K7PsjZDYgzU1&G3g9y|?cXhmA_IxpJe+fI!TH3ZK3O zQLn7z&YW)><>X{%E3aK!0UtJ%Wera$?fb2!e?V&~J#JfP#F0%>8tLJ&^Ay&rGi`pf z3c|io!6UDV-Nt^+%Lf@pj%7(`b>!FkrLq6?)?&)lN${IEzGm~&sxz@~zijuUrO=CK zFDi9%X9CuR_Q}oKVO`l{!FH=)jN8LeaZ#Swx7pNa@X7~P67sz1{CaPH)F1qC_bTwq z<);>|Rj^K+mL6KT-~b6#$vlx26$yD(H*oNsoJyOB9QuZhlOt;xCg|0ufdaIDub{C>MgA=yM3Mae7@ArV4Fq|8bYp+TgK?1Ye! zkS&oyl!%lSLPjN#5=9}Sp`ml1zs}Wl8ouA}eV^xE&-39q9W&_`w|t8_vE;1RhFLmt zE=}Wwy%h4{9sS*yFrB=qGp|_zedJ;DQ(4jdR5HHl&TKOs`mbw&yCrft?qS2>$50nL z>?_+>7gLDgRYid?8!B;Qw@`mk$s{Lxnt9f|rILvpw)ZvgW4?HEhfYMnw}1M$;>H0Q zsSQzx%pHWDTDAJwUf_|RK|3A^d|{AYh4REa;A`uKBQx=vScIznv>+V#zF%^6_R?#F z*q*C9Q4Al*Zb!(V+CS(R4O34hH5ufu9ChsaFDfw)T)wUeI_S@p4@Et}Upw>-)DOXD zX5-{G&{tp(%g#qXp4~=HBFbCnBlu4E67?95DF%rz+ft)+nh+i05bK>xCnqU3{%L9O zQ`6Nc@xb*hEoyf6kt4A(zE&V_LnCuZW7dy!DP+oD`64^&?~l_q(_F7nCl($F6qz!} z@!KCKPQjQ9oVPJ~N2QXT<(k#hanx6p@KVok8W|Ydy!+Bx7-hT}{2Ot97b|btb{OaL z_A2#V34;vs_Wih!7(U0@Q~wP1Ay4#+rSEv^BbC&x-kCJ_kV+mpbTwC&(aD6So0NZlhm2Hl|JWNl;ePV~oDPp&xbAY{w0m)XmUS>(v=Xl+#w z3OT#dt)l53oh0{7g=E&?J?!N?QT+@0+`>lh>%S=^Z@s79+y&&ab}EW>B9GtPl5k&Fkv=Ogx|M&JUe;1VV4O$%%b(k43aAREl^{G03sSVmcTN~y_M4`X=q)0lUGG@r!R-udL-+yD-L++ez{f0I71)oVZoCnCnVt*0 zFZyMrAay73tiRiCY2)fb(y?sZD?m zn3`fExE?>(2AvRgu@v;>ffF}t_tMBsZ@cj`2q&(;ke=n^$Rab!clRtWhaM#*-07=G zA(_qg>Mxby|82W+RqFg#LeqYtUz9YW68d$qbcBD9UfDv#ticQoLlFG zX%<=KDIR^&2!0VoDCsi(fA*n*87<(s+C1)}G2o>JZAE$;>h%{VO5x#Xw~!|o-sP4% zNXSbWh34lL3?lwXsKnwZeBC>~emn>1WT;m2v;g{3xr~$5AK;j#=1aqcNrYTbi&`>_ z_xtyPp8s9oDd9Iw_hX*{mygU}&i7{#iC51X8=?2+tk3ledrBb@4mW~)%h2aI6bx=F zp?}bYc>|F<_*A28`0fmY$i6gwSkulV*A;a>)M?Sk)`I8%^jFi!P}Mrg2t()!cVdj> z@f_LI^Bszus6@D?MtO#bKmWNkpLQ3%x%Tz1_L(@}e-kJ3mw|7&tuyn+`Bsu-ae~aTpkPEsJY~9Q~+{#cjWgTb931wc*OZ)jG3m^J{&wfhro}WOH13^BgATe` zT68W7yg5i$SLG~p$*aCy_x?IC$p`TlB3|Hs5e`)OEs89%Yi)I##$qNhq6OR607v;o zvHhTQz~?*KXfAjc{bp~~RU_yK`W4Ab_=mxtJcdF-QfOr1kkrR>yvTRz^nc;eV3PYD z^KZmaH_u)O&JaBhpXSb*%#Ri5i#DEIo~6JYjQGdFA?O?0?yr5}%lh^WTpc?E|GC)c z{TtNdVaAsP%X?Jv^!V$BoLU+Y-IVUw3_a|cd$rFz`a%85NtL>7&`V|nt_o*DhkRi3 zcqef8YjT(Gbpn-S#E0G+!#!)9m1#3VKMnny%~ijWNgm17r94Mp9HQTE><3SY3%gTL z>x25N)0-6lJdrfC5=g7p_VcT8}Jj||sCT|Wo&+4V@LJ~}}B3{Ha6}soQ3&S5X37*>q{)?9b zpw~aRw|uP`aD2!U?~XS#Qc!3+Kn-A$t<8c!j?(i+tEEmHTBEasy7I_FiiE`)A@T@=*__j=1`zm%=A|UA-?)mPG`Y|5_{z z9Wiyu*6o9W@WZ@Mu_oU_zw62W@r8>?z8`+*>URh}T!Xml#Uo3DR4tf7nOccfVW z2UR7XmbSJ=F5-zzUpV;gS8~I22KPABB}x9a&+L9?_Vb2ot0m!F9*NcOQu`pJI*N?Ec((4U9VtVn@gKU zuC&hThze5)bAf#Qh@a1NQDD*~F$U?9c$4XL7&up}fz7)Xy0O{Ic0cgZ&8HrJ>MCH6 zkstlE*9_pF;(J#^p%XoIi7#C(gZe#sEcYSKqt=ipvm@;{9O52kXqM2x^Miwd&3&}NU{pKxHd8~0^(!M4ZV z_Rv{{B;pkZsburRBzt^ZVpO2BC_#ip_+B-QaJj$-Fm0`g1TVA^W;0?uL4Kny=!^#N zPt%&THo86v=S)fR2y!3k$4@5As0jS_ z(^tnaD+%N&7q93(488D`=%<<7JygQ+>BugrD}>}aM8z)415a2s`@=|=5ayPN0*-p* z=7Jx3)S+%zboM^l^^8d#_JzU0(*1w_(LTkXBo{Hr z#z|XV2l%bMZ;an<2hQA^QzKglJyl9Uaz<+g{n|t!eeenVxtu>axuR6^_d_VTDn}u^ z4S3XzWO3h*C7y|J0w1`p=EfI|z7l`e*7^hRhnnbYr~-Ia)m#5E;B|3LyR>b<^~T5i z7VPo-L=IjHpMrii*3H-|=L>vrXMj8P5Fuq}pIxT&Gs!u=rnS=T$G4+5jH0-q9!hEA+3>^)stJWHU*mYmj<$F?^d_O?E!&;Ei_as?-?pEzhv( zX)DytCE81`(t)dr7dl^p*L+p%3|ja^BU_$NeTv$N9EtcS^Bn5gF&_VzO+onFUB&Ht zwn6thm=a+RKj2E12cvQYjZ8}xEP4msYw=Sv?(b8;2OjH}!X75|zmo1{BS)Y3{F%q2 ze)tzV%}Qe6m&yDJ3N#?_mj+kYTWw$wpELJa#+Q*t(3;{u!5_BYU!TJv@ zG|O2+`YfBK?43;cbd171?peF>db4@fl~FfI@fOKx~pD#=;GWI z7w~&%gdhjg{McCYCh)^M){1QOq0dSx--auxq=9)u`Xz8e_KNoAz3Bf-*RrupFHwm0 zrdOecUGQ_-d;ab4qLZ}rpx6X9;W$W1OcdpQ>;HQTP|tWqKQMZ?t_cwBPtai2MmY z-hJ;F#H;k1HA9L z>e*0#a;+@-c1}>q{2I?P4%9d0xOIQ4+o*UbOA{U>#^ZC>g!uH*i?`SLD&pURtdE844S-;fX(S!sp%I$iBI;Wu&t*b2r-z4Ic z(c2Ohx%BNPi+>f9j6`k@j02uJxi{)b@@wd}dggokLp1pGhI}BlYPM zlE@J`*)zM~4>BwvFwae@P|xzIfCT z=*wSU&C(d~N7|^@Yva!;<^F1aOUPz}xMS%XS>&)&^77wX(TA4*xGxKR zX)0;Pdm@!irbLcNdpHAMn)e4Wbtt5Be_Ne9bi=eGvAxZhmr`=QVeE68Lb@f6zZx5Y zZy~~aHwfn`>3N!j=tJZ_EyVa+*^#%C4?j@?ePA@nIq+{HeB)iUHHUx`Ol6tr-0+Y7 zav#u^8iBqTC;d0Wfllt_dVIeXNg=y>4}P8o9@%s0+xcPmh)Wwo)n==aPa3xlx{vv* zoD;(M02#@U+dH6hE zo~Bvva$%CNJ;R|>r{TXOJksrZPA6irFV%KpE@xk=&&D0l`vN*6ZI1m0Z`ilUVE7_@ z-rK%O#tAg?M*FnY_;NZq5d9|X4LgHWzAM|W2YpC?%@^r~pXe{9U;9U2;Jqjc{kcS= z5#K|bp9Z)?zkm1EEeJje$2wmXY7O+xp5}d%ZvO7LidF z*~5QM)mno}ZYX`5wn>NH^R;1meiXTv&EI$BWYfrb?t@A{fg9#ZF5Fhb{U|&?Bc~XS z=aQMFx(Rjehrp`X?W54k^weG{pdL<>tSeojL~F5E9r`cV zMMdhr1IS%-H*gFfufh4uuJ+0z;HA{96oa+kkt+HRmVEoJJ*S z{Skai7C|r17o9o>J`@m;=EX5bCA2) z$3>Vf8(7+-#qHtLY?ES z(K05nNxye;G3E_#+w5E&r2!pEEAT}Xok9*x`@gV*zb>oNIi8GpiHh^?^UkuY89J35otSn~_zOM4(EB3?c=#E5sduXpja(3ybIZy>Tqn+>;ZhCe>+XD( z*Fe9a3N+>xS<=W}i5CqX<#=!WqUoi`C&WshD_LdV1>ynL>0 z1^CiU*Fmkde1r&XKPq>C4!re8Q;+4!AhB)>E|DkUd;IC05DO;APtDOy(63xFIv-8w zVqVVpRj4`iyl;n8TjflkU zvhKnf`K7=w$4py%rKn_Esm|j`0Tx-Rxr*md0sJ4k5<4nCe2|3`K`v3iVSPV#=t4ga z(D7b4g1)XW@T`895d7EUq6c!WR;^)@>d`kJs=+(m z+0*LX9H7&T9t^gbhn{H_drcF5?!0k^XU;X?x)m0a>u|1uB_-bPZ)cI=9Ua)T0wd&!3?mXct}6^?|=?x77hz_X;6 z`?56_;paDxU6cY|DPUN|)6k48%aNRhwKQ_=v#GfR^o?tjDKWF}gq-@( z_2l%*|M|$GsQcgvyR{h|-lKTlr{$y-Hqyy+>moy2VLY#)zbz$rua`H=A8UdRckSO6 zXOk8h`5S84vkrA%{>h+kbqjKFUEW(`yjg_nXW8O4R~RJq@y|1gNepsyp+S9~laSIP z$3TNg7Lj91T_gcNZTm!S7qH?G@Zrk9p zAAOfXeu)@25a4U4{nxDa1!6v`SG(HtFY2UC!OA~5TMim)k@s+7j~yD&mvzWRmfen7x(kjrTtCN|Lv7^dVMP3w`x_~ z`-8k=nq5uMrY0tlVMO1K-VL9#D*klaVI~(t03{PjM1p082gIBOJk^1`>7N|r5J ziMhYHGq(lzgYN{@2Zw@ZEVIekMh^ONv%8|pKAUjpwev-vLbxC!%v`y|3rkgq@9oK~rr#vnxnt87_C zOmaerODv9^M%)rr^ZNXuPu@4R+*rpV*LG!*o*X6-PO{+i(T4BDatrO<3;)P?bXHa# z{`@)Xi?43ch@QNfRZlX`!DWrs1^hiPerk;0?}Oj6Vt3-w%QSLKOK^E6c+kunl?o3_ z3OSMRBj{N=@|gbY!g~G4wI~M`=xhexYHqt8X8=BWIe~XN19N4{B`-~JFK$gN5^h6Z zUB2?x&xfZl_w=xplXeif&5-wJ=78&(T@}B?PCysRrg@sZV3OW&HLq?dCTZWd(LETx z=(ZQi2HWDngKygEX7xaCa{qYIqmxD6H9e`&M_=#j%gOTc!W^GmmdIA{P?u9#Y5^0- zWo+3wEif(-(WoNYaQW^(6v^%^mjcifv$V^U*pF% zCTUq!G#K8990l#)6VD$^QYG*~(;j$DPq@)S7yk8(&qCqa7zX+NZ0U*G!^jszNQX2m zLcdXJ7##;+JSO`|Tu2qXF+}@hJnoZ|=EtbQ4ki(Q*wa1*-Mofl*J89?@;2m_gtrj- zfxltu!86e7ZZt05P9;S5h+N4rXDWFWVC0|GMo2oB&~#lB_m$GjB7+{ef?{ zGavk0x)-`@L9*5{==7Ur%S<@IS9vZ~&ul|3r0G=Htvk>;uQ^p&PhQ79h%i3uBhU@w z8(d7z^3us2X#y{6{tJM22&%1R~lD98~Ox#)YkLtGIvET7$!GlT9sGWsMXJkIQIWGA z(s|&8=QH~DeWN=c<}{a{F^G5%J=>QjJRLv3{L~>gQCk{u|CgV_2|xO>l<7z|@(9-) zQV(>x0tfJ3zGIHQB<+8Xb5kyhcm{Umi^2!&J=2);1od=Wnbm!@4)w7urF9kR950o& zmkkHuH`jH6Y2fY4E?k|zz%x}V)bEMl^EGe>n*E=199)qsy&rzxeCo41_q15VDOn%I9L)(m?Y8n=AsSp}bGt@>Oga8OzHq{6rX{4w5r%g=xh zB-^Ul``})iXYOq_gpL=V$1>CMr;*f(8P`$NbF}Yn7BK9LxE~#k}f!@2A^N4E+`blG}*v>5IE1@5z#2TaE`QJI7Xsh>B+pIWPwJTWHoDb)SO9aZWnN-v2W0)C z_DWtq8mZI_vD^?2-*shYQF<4PtoT@Nb?hVNeG42CZhvid}a{?h8W`*{03*S_a7#{gTLfW zvlZZcvb`!jAORipuiLEHj}bzSKeF#=tE3SrpV`&J;1iF%F02c5#2yUM(Ud=PG$OJ7 z*Jl>`b4HJKx$ZsWXv8f`%_K4Z!kuOkgZJBakW;3#hK5|o1$AaVbep6)o9tZFDUDp_ zl4j)GT1y@)g8wE2_MTmrgU_Gt<9DPP`tz>l)3$Piq=cF{^uuSAKN^yA0{-6L8^&F2 zcrW}uU;kD?Z$7pqEL7zqi)hZDc{>3e?Zn+p$M%*3zx5culYqWu(U^F8dk~due^$}q zg8UJW#GOyiJuw%OFP+Bv10B90bct>xorJ2lq{g8xZ+N@&!wmF`(mY=-#b74cQY^cK zPaE?N8)_r&Ag`)6uKf1^eAI8YaXVvaRIR4&RIxM$lX)*Y@vk|@-IL1 z+^R<_gi(`1jUtE2&L~|C4m|%uVRbB~xJ* zz3brfI&83w(M8UHrk55Aom^V**3e^R^q>B|Z31-U%Wt}7Z979Dho8<{#9pG4&J@uo z=_&X^5A&l(mJq@bu$Cu&J%uE;ectw968hlJ1hau)=!sn_f=X{GWa$sXzh8jowmBt< zut5(qwc6Bu^$c*JeT=z2FZ{=8@4fB*@JVHOmaJNg_ou?MdLFpE)wkV_s$6LPP+1#O}o_BGNc&G< zPTVKO>HL%B$iq8bUSFhyI;Z53BR>zH@7B_+xgt~GO0CMQAMnj)_vK49h(Yga)A?!z zzf)?!%iwVdKF7fl>mwpGV%gyF!6FoMyY{(59ee1cy8l)BPdumD=%_0(>d0@ltnRK0 z#XP>7R6!5;{c+iXxdQYSf7djPM}*XI9$E1W&-++FnnZCPjqE>nxgZ4i{`Sr<;+s$(vNk*Abc63t z{aqT?h&c_(sf+FR(I*BS#o5MBA}`yiIpq_`B%(zNk1F58KRqPGzIGBi-R6K32Ols= z>5?B)WOh@F4uOZ?->5UPEumt*lw{;yw7{f(_qeX$D#OEk^bt@OkM$ z2!!zc0^WLeuW19nzLYqpjl2WL@qQO)7M=Y5v!V1v7wWKrzk;1H=HgoVj+&3)|9=Zr zaKwe3UO)OJ9C-7DLGZ@oz?o@&=JnOZbi!F-ekwf*JhSdNyC?D+Pm3s`;Rh)smm)HI z9Qa5i4q?t+RZn#la-X}{ZcndN!hQm`Jv8Pb z%u@$w*r-9T_%m3eAy$cfNZA&nmyj=8$6tL!c`NYzNY~&p4&-a~?>mVm!5^RXNore% zIl;Xbis@s(8}YMx#b1yU7gh=0gpq^j(7q5h>XhOM*@Vzy-aX^l!ZMC!j>hi;LW80zc#Y|F-fjF85&S-PMGq@2IfU5qn;Z&Jtn`wjlu-)*AQl0qiQ z;ClJ1T9HaN`O~-5^qe@4(55pV@6zzQ@sktCPgU<0tSe&>eh>CY7u1)0#qlN$)DO|+ zr}`hqP{^=l%u2^$_$dW;3=0b?nG9JHr34)N@RZwC-RO}A->OY<-H!8mi-U88SOj$1g#@j4;NOQApM8;V3w5NG_-XbNBDrJ! zojmlS#ab@M5}wn^Q2EdG3(%uSW4UsMk&`$>nKsKuUgXfB#qTx$fOi}{UbzwVv1A|X z*cVRh>ky~D4TFv&C>mF1f_iG_(=mO}0sf@zLd$>zbQVRupj-!}I36SP$*!CQCeftWZSloYO9c@<3 zbsGE>%Q81x=z^#FZLfjvU3d`Uy?Y9I$_)qPf7dd}0QbvMZal~LA54=@L%+=)PCWY) z&p)G#eXWxZa)!nGE}6imY7AFiIOMbBxVvEt9xvN;HiI(#e@WdLF|`gtYBDN;!$X z-8alCXn=mIuIh5>DRA1GHd{&1eqxofO4Tt5^SMvvS112Kjxy|<)7O=li+Uy`!1f69 z-|1qh?l^ZfH{0w)y>U(-DbTMOGRddq<=JYe??*U=zO7EeJZT@jV@?M;@3oBmi!uLa z?5(kB2s}by?fCg~!G#9p@U$D*FGOj0j?v``iLbYYL>rt4}GG4ehFPV!(DVdmrm?mw^<*;`;C0wb7L+V_g6+Szu+6@ zkahdAKlf0`$eY;}%b-U}dT(6nA&9)SMq%8lIP~97OPwn59vT|8H!LC8V{zit+w0&)b}{6Ax-}j--*<t5sv zci*F>djU9Ln-$ei7-2hAE!_Mq++Nx9x-+Xa}Qj!3CGe@a&E5PSlrsIEV=`%_2 z_uq?h;G1*&xUVV-JSox4XQu+bbs$jL>=SYeF(0}H3Q-S6wy&%i7X|Kqro3Jg{b1pC zpI_TD>^XEFyK_l`PTrr~%_XdWJqXUV!aeYRcbRhj;Y8jrO~Os7VHt8J>wl{qQKb=Y z-{&WORcy5)ui|b>kq^G~DHo^_K&e1Dl6>!lLhO$^m3yYlR zP1C;sT`S8cSx)C1=0F#k^{kLrIU^e@SGE~_d+2(G@m=Vqew|@c<}~8j*I>U2`2EdF zzKu?4m|N=6n!bX1Zq9E(udl$KATzP`eN^Obr-wdNxWgxP+;b~Q89Gzw@{In^(0PxQ zE!iLs-lFsQTLbEh#+sb!tUBx;*ih9Z55E04vRr5!I*5by;2}%!x0Y!ybsO~0qtUO; zUetmY%QR~y1T%=QM}Ev2TLuXfiGO0J2K?!;yg}~(=A4K9FAf;v{0KB^x3yDAtZ~sn zN920@9_AP2P9b+IK3n_<{z#_3sX{Hz*P0a<)1Svem$Qpl{tJ1X*xd1f=rrV}-faBk z%ZJ=qzt68~Awu3A+4$M$6^+nW1&YK0@3$+eYXlF#cYhTY?*P0J^!q@vt{?QTHmOEM z6ZC<=*$vu>zzY(BFaFmRwmldr46%UTo~>(k^E>=Ju4PU^&^Kq;$sNv(jQF=`xlX+bV#3>D;c|1n8X_;hQVn_d?%RKX`4A3Us|7x%bt) zz$=>fS6)Z>vGdB{WRzd-(By7>wX1JH$0hs z6X!5>ipMN31OAAQ@Rnz&6Qe$1_w*teWaey5QOZWlbDWkxeP=P=>tKc2o4w${((^z3 zp-)xhHuC&>jQyyc$NL{5$GqsdPhHV>%&Y2$io2mtR~(3Xd~OwTx?bOE$D)y6jaVsB zdWlL-9^E2pj(kEE+X+^-IB;Un=_XC&Yg>Qyo@D%BlE8nfOlED76XD`9z4HHgYtOq< zg}#<#NV{%p1AnJFB#9}7JfdkxlZifqwCu>HWThi9*R zWDqs4i}D)!s57fP4r=51NOn3$O5pxWA9LibZUz22`u@egN}Qkk&76;+=QGmx(WHFf zzgop5_wS&RMeA>E`JeZmdhlZxg#)~C=&$+@D*S!n-Q`2*Cl)>6&&Y)Yh<|>*2zljS z#n+a#;ardB*qnTbbKJPy(!a2hkV7I}KfkuXw;f-UQv=A0>EPJYjQmjLmD5JI!Gk4NWknmpzuv}Y z|8oCo=m4G(ERI&>`<9q#D#T$wW3EJO75LjU*M7&&T{OacyF|AABj&L@jQZX#K$olC zp0rgJc;QLCbTM?Zty_<2=j>;Z_F`2BN$|DokW2NO4}+K8SCPIHhWGPoZnX+8{K7m+zL>shoM{^OeU7n3!xcfhrAt7``QfBgq_ z50KZ7rg=7~fZs1qZ8-4|x{t~y-o710IM1se-Zq2oK(+4_ty+oCc{@kH7<$^{K4tcE zN~lL0OZVK`ih1siRrQ_C$X}hXlD=z?`I1}0)d{a@#Ou_7f4isQ+h175&iA zXuu=^H%BLrGU0c=ljTo?zU|}eXVC{=^|)k;&N5fbb;W94-gX7L%fNi2A^Nsi+;rxrcZ!Q>P53wiT(gpYoF?U);2XP-_$4ho3S|MNJ8xx`n-u7t!T0;%! z|2;)}tnwb&4Fq2mVY+D+GhLq-eFe?Z-= z`>ywK`xoQ|^_t9DVjg>G3> zAot9~gh@PVB42YtZNg9vxq+_2(KP>`E)AKZP@h+hb#AH}Hu|Yc7||K!0d`u2{TyGv?>+ z?!Pbk3Hz3cx8xK7XPrK@=OtqU^p#tUM{0p@D}7&m@a-Z*`L4}sX;<*^^?6I(U zYQK|blD!4_EOqF${akmqDbtaokLXdlV28a5bGPX+58)>tO8Lv0htJ=&si}Jzoy;#y z@IL6sB556=a^4X;e=-c#s}eTBn6 zCZB+ZN|BY1yZ`;aw}frR_apL7Cxidg@!;>rm-P9Z@Iliv5x$xqvDEqe*SqSh~b>mcgwJvE1i5>rf)mwTrC zGV&xV4l;H2`$5;;n5-L_Ng*-rqJw*Ie?PyH8pzu>tM`*g>WW$q^NJW z;{|k;^=6HRl`OI>#5_z0dSSBz&)YuKffI@!!xB&7_X#d(PHV&d?VeDcqd~}L1lkJP zxnn=$+xc(Zy~v%sbc$hrjXi*#7OFgA(CbAs%I(l+&c#K@Wy6<{yYbB_5BY^RJ(-0o zp!;~eE`MSs0R8N2x6&%;I1fv_0vw-G$v;l{(ZF2nt=jl0>?i(Pxh*fF8@_K>{F1}3 zgb7)<>}AUx@Vy${zyjk?8WFZxU%W|^PPjBOJvu1BeX;xxGV`cpX!F+JvGDu$j2i{| z3c}CUb#uIS1Umk^yb0!3%vrPcNh>RXPd-ZBK9r1H)H&B%w$KG^|Ms|w0(TFWUOmFS z7V}dY_E}uewZ(TfeS3`j@FFJx83EM2PZWXj^_?W{d>!O>0 z59aTQ?^zGu;_Q#jQa$+ofZ~W%16!%&OQqkB!#GFlv{Zw-z&BQ@sphUVh3^&L$)CEG zP7E$;2WiLR-WH2D@ylSoHR-~G-6inznv4dg;A4DySt|Jk{9{sRQQpQ=_`D-w;R?_X z-W?D$IDQ>EP)(ELYT!l9vPB!1YBW;XVL3Wmg}F&9w{JhrB8U7U-Ty^D_6ppy-YdqA zJ&@ujwzK}=-W-#?)|CN#GcwTTeHim+140aA@GcYIdODXsaQ!;2y$#E;5AWVQZMPYV zED}!Jm4t+0PG#a&XL#hn^$Y4?Mvxa27bk zC);)6)=%{5hwYkutB_y&KD7O-1RA}6Ki$m}?BWII*DcW*}?rB%bQFS2##qcSay6UY59x{F`vh*VSqPuR{Di>K+BKhn zPZD-d3BoV?T>kLjh8g&W@_X((CEs9H+bQ93F3c-G?K9OmHe@x?dq zhc6QGS4)3@s-Gl9`dKE=EKjE(Cg!rMn6AIZr7H+X>0G8}WKs@xY(3X7`H$nb`E=j-g~ zKhK3bx84P=Uh1W}PY3*$SJARg1NHI5%fCCo$7%1DU$pxP|M1_7QZdZE>NX_l8QDO` z`1#}CJ0a|o`C;kw4m`N`o3%0za=07H87HFhpcjjVq_+aMj3n^u*LzdRhr=4}&%jrA z8d+~Y4*$w1dqL3x^WeRb$rnm4gBMCF?(PPEC@#D=EDPN!FICk0Oc;2njlp;l?(3^Q zn;){1|L@&V{=BXUpVwBo?J4+IPO{T{6m(qAw7Fa2+wkZ2k9-iYM;<`TW~RXu{>DUF z{4opYCquj+57`4h8LxbE8#>xVNn3}69+T8noD3*LZk5gbs3Z&bU^3dIlOMk4@!s6Y zEk9_Oo82A|LczYH^({jqR@fUADKBsjx$AO8Ar3=#23fx`pn4MZzA?&#?RhPp%f_P{ zuQua7ThEVI;eKD-dfEQYam?u);f~m6kMHLg@oL->jeT@pFdQL+&_A z^Lhh+K!QEoL}#OZ&GmPrfjPmaP69k+Z&O?(JH+nw&gbRS}Oi) zL%`>UUj$gJZ^Irk3s&!P=x-XbD;)OtAn*Mole0=?mq4GOow7o84kZ??m8Nlb~o z4&3lsK~Zoc>hFDu2?^fAB=#a>>Sh+0FTO!sDaA~}5MC}*JwPKoRf*DBc)p&Ry1(sb znb?0UcJc%CLjEPwxiiRrhy_KJ`A_2eSQ>2G=Yh)(lsUW)Il&+W9!t&5-_yv?VVYK8 zIeec-h6+x2&(X(pwOipQoRIk^<-7)Yr?SNN3Md5edd-&E!SE%jpDHm$nB?uLKR>J2 zU{6}YKjz?F8p-8)Af3a8oW}9jwF>z6jt0Dayt$M?j!5?ZQ!&8zRk-pUrvSGVf8$+t z2fBfb*43zczi4FQZ17*lG0eN}379kkZrxv2^6UWeFGsdyZDrp~Cu|oYRawCMHhpPT z*P#2HK6O317*HniezzLBp0W#;fFb}rars9Yo>Sd8VPv8Ui5>g7sw4gtEoj=Jh zzyZG}+JJq01UW7qMP@}dAzjxmt*~P4ZPynevhC>;PqNbo(&hIk>|VIm!!0nK~@-lYEmnp zks&p|RrSypXX0}+`xKcZKX}Om*I(2DOX-O+=*o?CF(d!)6)oh|Yvz0oU+?ysxB0-A zd9AGbD_m&g<$_@PMck{EG4|_HbD<9gwnh)gg7^6a?=USTq-k7ecTErSLI=|OuMZ-aCh|hxvZT8lj_@H)wd52mLeH+kO`A!?+U-{738Vg2UA_3{3Eop|W#eh+KR?|S zu8N~ykIfcLo7*6tF8#2x0e;}E-md$>cyH;6lAOah7po334=u&Hv>(+^`i2~$V9%GB zP;ESK^|(v6oH!5s8a)>o(6i!4!oD4(qb{}Q8};G&9F;1c2d-lKI<#Xya8gu?H_vYP zWu1q-M*iZy=`$bqZ0BK-bIbUgG#!EGZ5xIMccKm~nEW!puicJpy=?%z=Tz0By*3^B zn}0Sd6+U5q*zc9|={h)H>y|HYWWpbrcM;XwkNpI4cjhLc|8?+QI&2EPMRE57nQ?#U zrCN<5ZgCWn(atx1(FAzCdh5?^O@!<b6pOvC?da*j*g{s8-e>np<}EP+d|&qdVYzGsX@KX2cP_nK^V{t9%;%K|wv3wrPc1bhN^@*;Nk z!1s6CRm_{^H>z8l!hWdK<%brHAzz=-$GVGt=4=|*A`#6X7KcAp>7lP5zE8O)HAg`n zFEh4Tg-JFHMt6Tc2A!{X;8*i;CJEh?p?x0p*Y8(Zi3@N%ML1S_Cv?gAhr!$DsQ6x> z=*E@1w}4lwOl)3I8+#Na8#zEfJ7y0;Jnd$NBF&grg=HXYypbuTRmHN884Z7GEXQPW1^up`? z97}Gnh{H~6%|6tPnc!{IX+5je$UoWFY^X}DWRio{ zJ6`0X4n0~ucH~MBayfq*flUYFw5fbdnAV$I8}6$jS76 zOV`XkF6J9V@@N}?{`)Z=8$wd zbi6&T5Mp!Ee*V+|_(S3LHE-7=*Wso3*HoNI^!5nyN3jzk_SvU5&k1?q&=IMB@!+}1 z45tMN%%4@9``~#1a|&&}xp!>gqo>7{E#8B@CN9mb*YNLCp2Swz_hR2(`|zI!-!N|) zz{6{S&lz6g;SdRae1Wrbc<)X4e#`l;>YT?O#jj^GI>u>4*X^!eA#n9u*Bte&xtQ}G zd9M=*{B5esS~80JbWYGAr0)#gQBG)6Po}RD=(ge}jHmlS2H%)CHard{5RH zj*CJ#zgf{`{&7B-iyG?p@#4VuHbg~e*+X~hZ{HBK9gX9Z+Y2L@bHPk-i_kpl-h458&SH!i%k6(cf%EB1|rJ;NNlS zCaX)^Ydw#L>Z@T9`0`zK}!tyY$)m?;qV<^egsv;ll_)5YCb!ov~{FV{= zvCQ**B6RqJXPrLewQPWX(iSFtDhIfZ>3>c~6nVExcB)nz3Hj~f)i;j!N~BzszUv`B zlybfy$_+UP(;B`S;O^7)^qQvJ|3gp*tgwc2Ttt0*j`?A75wPP1j{29KITA{*}xhha>^}L@h_>yGu3_-SJlChc!fK%3 zELsrT*omL#PH>_1Z}9Vw3uiQU|L==PDyUl0iN-3o@@({X(_r^a58xY_kKE0AhCGSZ z&t=)NI{5tCe2;wG4g72OdM}?8<_IeG)OxIge|R!#d#xgTtn$QGhZt8m_7j&noak<^IMHJ#JO2|Bc2LLf`7FAyH;pIC48#O2j@JQM5OGsdf#{C z-g;_ti)Jwolq4*?2maZ!dFl25)Why|;q2R&Ay0LI&xM9uVMCzTorLwslQQDwg)ig# zPQKW>IbFuSFkX+hS2b`y9*u}UvBmdXXw7XJ-i$o=`mKS{1i6wW(Ho?-um{F=WbF7O z)HCPf|FnPyfBA1(94-VsXy)!hP}=T_A~#P1tSvdOQnSLG7k`?{&q8{MGi444(^Z^QmauG|Uz6?iY-o?b9M zggJ~Cc}{W275v!X?{r)VyrWOb#1#6yw)qte981z2YV}ub3_8O#ioQ7dSZQkK$0POV zf3&WI1HZ5zB}+Mb7jTAwuldRCz^iAL3kUAAhA+w2wyCk3PKK4wpO)7EUe5pZAT9-b zuEV)};suLjtb3Dt1$8cu)AqF0ZR|hTK{UUipL^dvzb+b{Wja+>u#({|J?&S|7>S2%dC~Q|uET`f^M5I-5Y`x-zfwe4a)QPGES~S9|zU zT)a=6H*P|%cIyVQPbyRrz*ix6eJAt)50L|xp|?LDKi$>*hfcf;o&4QU?=1H$O)2Do z{~qaY@&ETsUD%={<9io4wEpbKOX#&>F-P|s!AJeb%E&qh+~c=RN2CI&yBEZ+YQUdQb8FsaM^b=sf;oRgTNUE9iU6i!a`L$60zh(sWqvi<{d{bzC{@GVgN7FdMe=d}|eoyc5fBWrO@9m{Dk59w4a<6H>->9ZJeJqMo%i*j@0E7>ubncSz5`C&;pA&zc%HQE>d&c*9gy!d4a`Irm>!`mu z)7}4FdXC#Yeb)X_!)V;x{cCl7>AtmSblK^Ls6GAe!hF3xhTd;aO!y{z8=Xf(2mCPM zAL`FLl>El|<+Pr{$=T25Q9tzi<*9c@j&K&9-8i{?(l7L#$tAxRk2ukFX2eV5FRphI zhOcS%^cCrQx;H9k{zm-*;`}C$5_hKvvYqT~LMZ`I1f zG=A%mvh&BM(DQi9nh|5y9;ELt=jF_GyMyiR~wSe2Cr~U5Wpsf}WQ)NA&z*5tVE1uC}v3w$i-DV?V8HJW2Q6f3EVM{3<;c=AC~e z=_IX})4S~4+v&1!!{BcwHiXdon7%h}Nnc6hx1vhBwIKvnKy(>W}@q>WAlgFQNAvuYdS4d*3$qos~g1-b(Z1 z4I7;|;v$W=(TzK@lHM1tzq@JCKh&>X_)$`y#@{I)G2u@=KY;Qd@s@aru18bmuFdK` zjNYRh+&yC)jU!1Pa_YO<#q@sh)=fX%kx%naAKuwNl&)h}@5&jxTc&w!t}|SGjlLVb zJnF*n{u13k{U9@Jyay5LjPPdapIz?nyBy^P9l zz0)>p1=p4xo^MjWM2`6Ec=>U9KXv-t^a1p|ciE8t#k2GrTQ&W}z=kvQz02Qs9~!gY zi5maPOTjd5Z|<1JFAUT#^5##@PO0w-!tU|A7vD+azgJ{!D>|`;o}b688h_fK#?^c& zU2$Jc@1qBm7JWv~w~NMolbc23w2G!Y{BJ)RhqL9z^9%l>_YuRA+KT_7_X?Fh-8SST z(EG=8{hm5W=S%MTR-eK>^c}}Vc@UfLXVT^i_f*pT|NMZZMT==X=yfwxbw^nNJk)gJu zB>%7V^u7An&$3$SJ;P6}v3_}9(>S;(Pj*|dj?S~8(v{zdwLP0|U0O=xT+4{A-Y8vEMS9J*f^=MSAMb>CK%c=h$?ZbawS^F}*Z+823qtt`epDK2LdK+Co z9=>_{vU=(#eetss&&~Lq<~!K)+@?MB-1CXy)|p??``ppv&)&AnnZ}(o1{SX}(7Xfg zrLT9R?Z$kqqF zX`Gw?{s-P$L-U_%X8t;h#@B}Jxw<9bMw$oizWWaSy_w#l1g$#%)Bt)8nOHfoI-AB( z*1de|iF2Y5&}+x3r`OQ?p~mVZYu=;p-LLQ8^B;QuPPclr1_b;0i~Z1p5qGXI=TG+I z%zgwqBf<2{#5a1{r%m})6lw6g;-kc-=p#y@N4viwRH8J-qX_@M_@UZD^I7O}_I06o zMcOuhv7P#(Go0Sfe*SanPxxc{S5@=qeq-3`Tb*yAevOCE25qDMyD>vXf38_i^P(<# z@V#+y^#0)0nD}?RsJ}Yuy*t>tr2}qz_JRD1be(+fRo8@NWcLMoFWyhjNx6}WH#*aM z7XQ)<1J*8}@6#i_Mvodkdyzr!HBX;~0cbmQXQ{SVeZ>GEaSpL0%jnfqVk zQNy33b?Mm}_Uw?cy20XN`C)ls`Cxfq>9e$1dbuN3O?)Njj``nSF8|=|pFTMKT>E69r4}Ui1Ca1GndHbFLMiT-Iyv@{!)3Kj${x@YLR#!efwfI zG_1IP@3}AD*w>?KvzvE<@9E*&G7JyaZ7rU4H1nSY)25Ekjr(F`VdYRw@qy=``1H@N z^gnnT`BuN_%Frh7|b{#^II`wIHI#NII|WMS~o56X)D zcexE5`{1_PM<#!j_vD`mw?+T4^kqXr#M`MJsg)Tn(t)f?SNCTB9y_Jr@3;Qhdm(lH z7wPJO`ybs(vNhYPxpTD^Zav)p>+u}C!{-Nfj1KD0-NcU5h;a`$v13*C)5<06cm;eA z{3knR{j0UR*>T%2x&M3Y*m*9AJIapVL`m}&JBE7`5+||anDu_cBkWinFS+_XJDv$E zpS{42>CW|i$Fbu&rq_X+*|E(T67wxPzK0(?zmXl|6E{x|V8{7`@3U63W3A6CTF8!f ziZtvAcFdPGyc5rkd(Gv0K4HiHgGYNVW5<8{uTg)nI^aI4WH_q_ci(t9m(_)a?&tQh z`taGyg?F(!aq||}wX9wwEY;Mrx{(;)-Idjkwh@Q#V|8T6mqTW;dUE#GikYmg{JLx1 z8?3(k67k+@R%Z&|Ul_>h&B+~S?`L&q+?b^vto}r5&WEr%B>GJ(WA*5jS6i!DUGm!- z>cr}k=d^Q2Sedx_m8mp*Y^Ior&t{f8`1AxRu7Z5H*aQj zv1x4Nb*w)642rmk)ydPJEd7Pm%RY;~c%RkHVUH%AVD&REe8`z^#t;3<`LpsH50tJr zH0byGgGZh_dM5Qy{2$Lxe(tZ26Z$1>o73#{PHyF!`=5(&-O=rzy>jl|JqO%Bu=kj* z^9N)+C*Snf!k>KBdLNkZ?DnrlmF@kqkL%uzfg#=8^D5?CfA8*zC%xqwo?>62ebMI#r|KoirvU7ANWWKq%x;RnyDx61S=1htlHD=7n zv0m{BUh1C_39+#;$uSA>$s(;kkQi>-wyWp0dY(7qyl%8O&(-rjBxZJULS#%zT+p=p zm7I{CNV`P4hIW~DE$vRUJJaq$dl%YWY41wA8|~d_?@oIU+6CFg&E3OupqICgub+QF zpvojtwj#Liz%7OQKHLhpd*Q0(`3hVI_Xu3IT*tvJaQ}d-TK5uo6WtJ0)BX$z#?t-~ z?bJOa5m%P*)^NG4V7!t6mr?dTuJ#$pb_N)jcycZWPlQld;__3 zEt7lG-j8M23n z6e(yX%n_Wt<_a1^tl*TBBxo89f|JX$f@aopf>YWuK~ue4aB5yHXa=qo#Ee%3jmzsa zWMCsPO`h!j7InkEEoh^+3Yyp=K?>U;Xxw)SQq%i_#`_a8#ixQMdY>Q#eJ*H<_EUZj zP&vO6G+u`VG5R|}Dm*G^N{$I)+i}YCNkPgyEr^k41HWV z>n}PZhoRDj}kQj{-PM|FG_`DM5n~DqL?~P z)Krcqoe83*Wg^9QuP9~QCyMS5ijr@LD3(qZrMjsUX1XY4J}!zLPl}S?Q=(WFMuYt# zM5lpKqSQ1;)TGCXPE!&@jfX*Wa#<)!{)D^KOjZ#-3NYYkMl0={Tq^|O8NsOE=X?-JU++DP!^_we+xpO70TdX9e#Y!}| zSQ5kHC9OxIBpMRw+o?oJo0uetwMmjwu0ax84U%9;k)+yGNp4Q1FpDH-e|k3*`m7}7 zFP7xe#gZ8GyyV=LE(zXCBr$7=B>60roLiRCck#<4O+bbuM`uVZfBo;SIPF{aXV&$Kb zHnfYzz0qCc6x3UzjrP_^X+t#H=6f{4gkVk2)@hnv1y5^S8>2P72PV*ZwFw$oPSj`v zmTBa=u@QKR+Tq7m{7H68)mG+lg)=sVUO8aaK3rcZM*twFj|Bm2^`X$ZN| zq^`^g2ZG9M*_A-)W?l8tTNUrSWC88aeex8t;5m zg&k*S0k4FtC6N$rE!8+>BWUe{cfTx=8Lj(D}9?D=^{I2xXNOqD~+@2 zDofsOvK;6pOR3$c3F{$iE8AK4|3-a8cxkTto~Z{&4@tnnBui&cYV z&%&{Cf5T*144Wcro2SZh=``7CMyM=Ahsv56^lZ}fnC#T>xU6ZJAz_<%7mOW$0v0V3_PQAzaqBQ2+m|DA~zn zj;yVnCu;)Yw!rhU=#wrBA?dO<>=i2aTDeQb zI$8A2m4(n;+1X`-EO>5^MFV}mlJ$n{>bXf4WAmx+C0}-$^`Pu}A5+9F-;CpJYwdPqGwNM|rH1 zCHZGrQ~ERUFVuhZi+r8;ak9^GO5-@${5M(jJ4wglq%4P>l*J-)TTjYT)+t%6IVIDC z{xsKHqbw$po7O1H1&y*)aGH+i8PYu?%Xw#IZE-Uluk&)(38Gf?l(cdPH9geS$Q6=S z4A5wWa*bAQB)3_kmBQ$qa-^)4+_YM^AT7zXTG@lfS$R5X#V{wWCdXMTS37H+LR_^n zt&8QB=0?}dZ|R!z9_^C_iMlv6bUoH&(q2xx#!HagM7plg?(8Q>H;8mSrd=R^b}@Bl zKeUO@OcTV^L880c4FYvn3ZAr=pKVj_5^{JK1br;fJzt!$QG7#MtI3hqY1ccw>YVHH zT9?;dH+0RTIZN2)PkSisiN05qu%)idm$snp_4dNDa9OlB-_FAo@!kygWpI0uA&xaY6Z9(0OrB3X~6>a~% zL+=*YwhOMRY0F=gJ6wka92Rg`z+nN01soP|SioTchXouKa9F@$0fz+~7I0X=VF8B) z92Rg`z+nN01soP|SioTchXouKa9F@$0fz+~7I0X=VF8B)92Rg`z+nN01soP|SioTc zhXouKa9F@$0fz+~7I0X=VF8B)92Rg`z+nN01soP|SioTchXouKa9F@$0fz+~7WnTL z@E*;-^Y?=r2sapRDBLi(v2au2X28vcn+LZLZVB9SxK(g#;Wof+hT8_$h30Byn+IGk zxV~@$;0D2+0(TbNXt)Nr>2R~)=E5z2TMV}hZYA6rxb<+G;I_h*$MAf*!yO3M2d+Qd z32;N;&VU;UHxX_c+)TJRaP#37!7YVb0k;}%9o$B^EpP>zL!NDJa6RFA!}Wt32sapR zDBLi(v2au2X28vcn+I1(jDAv=@(D9Sey2&bXe(^yZUdhlL@0LVlVIdSueKlO0Ge+} z*@khqawK=Zh=_Q*H7zaUkA(|gyZG$0FJ8THq1%yp^FH|{Az|k$`}c>2`T0$eL{an2 zoH<(`8#e5@Q~&Hhn_yxiQ}^`3X%ZQ4~+Ge`I4n^z{i_uiSC^71}?w4mVchNPtR8_LU{O!@G` z&yHQWGVrdoYj=bU88SEa_S`AW-*xc!--kRhbZE@;@4tWWOiIe8UR}BjxPIBPjWc|G4gS|% zciZg)1`Mx@kAJ^p=FC5y%+J4EFm2k!1>?p&{Na%!;m_^b_06c5P&BjczO!e2CwO^#cv& zCrl{UzWnm4yVtCF_r^EgC`$|o2tNPUUvflQ*{=(C@80*`(W5C7Z@e+W%iZ1Yx2spL zyYlCs-9J5iIBv8SoZTCJ;Hc1B zZ(TetJ9~TA%*ty-&<64u44A=cgDW* zO5wk7VWXt?9TqD8B}KXq!<>dMM{l!?<4abdF1c|TesHN z#>SQuJ@(k8KU-Ryzddv2=CAbn_gbEL=B4|0>^SZ2;^LX`@yFjcr>15;c=OE(vu?XB zDPZ70@5kSH=X`QW$$?kD_+skUjg2>L{`u#$MuQ=5{0%qUxc;Gseh&ZSle%uJSFh-? zYSr@k#Ki2h@#81X|KNj)s;H=K*}=iJP8yB&?~513f!(|J`Yb&Bt+`{y=yp8*_&+fp zeN^3V#fn#6+qZAVo!4JKbm+#7AN_djSitYCt-Xik=I$EYv*+l;F)@3#{`g~}^Gh$S z9G#Q1W%z~-y8{Oe8r_qB=Udbm=|!e16MouNBW6K78Sz9zA+KTU`8gVQ6Su z+@3v0eEasjGlb@fWra~3pgy`uzfWra~3pgy`uzfWra~3pgy`uz^D;_EFs&*+D`sL#I3A*_3#28(8@)ToE^NpfNeJs@>oms?%CQ>?aqIKa(N#Tpy%~NcYM}-^c zu;^1G^ogo@N{vFQoH{xzRIl~nNxIl@z3 zbAfWubTRQ!%2`!wCXASE6x5pusL*kA;;?iY%>;8|6K01i=Uuaze|&hHK2k@ACQ+Yc zP-HSlVdZ$;RC&CL6s&#){y8HvZj_Itu_%PC&ZG(G+3=sO05mG1eT_+H_8psNeK(v z&+SGF0V`y?w7FeM{s~bmBdtb1HEZcIHGHh7Oq|Ieky6ozN9y8I4Ej_$5Zo@=9YyUe zS}qeNh2u2NSBRouQ5G_wGZn3FF_0=gla>PGBjOZ8m4j9FN`)6uI~T9yzgnjHMwMiK ziav$Rn~=ngnYxKOA-z9=EaZRgM8CQ8D@d$iP14VaNv1|s7ncy3Lha^)kwTY*NWG59 z;H8|sgbVaZ$<*>Ol^(K?@r^S@R8hfxs}8c?tSV=b8tO>lX<4XLeDc1APa>=jjXy)Rrs44Wb~=4yX2T#ytI^ z#PFCTAu@5Eupn93EDBQM?0Jzci*h^pT^+j2SsrCsa~uHGjyI zT6LW)wkNPmqV#`b{#iAq{u{`@;t)-ypo!E+BrQrb2rDIOY?Z$@OO*T^I!L=nsjZR) zZryDfxR(5DK4tzTJ52qX$-im4X{5gxBfY3bnyC?_h-fN)_$a@`gxEzRNBfP@#pn%D zI^iQJ)rRCH4He_KL@Cz(EQ#zu#Y8O(C?<;g-uxQq3qv*P;ONoz(N=S+ma<$Y(QtKK+jeY{Pufj%c zvhb=C*{qmZCZ}AnVk!GA+0A~7J|XL9XNMaiqJ{6AqGITFMflMvCO*a>{OW|N^P5vj zVkFDd?-WtSb~3JTp8l$OgVmbmT=v`WI;$x>_&d%@@FHh~df%CnSx0qCD5bxe3YmU( z0sGB(r#)014|QA()kwNk`7G2Q&Vn>*%KlzHJ@7ZhO^DV7zpBh$Kt{nl(}zXhettR}VMxJwcp23@i~S!p{caI(?8sO#6fof4^H#$1{@Hkz^mQ<*x$SN~fQd#R+Q7YbI zzxi9(Z{sFbpokQz%gPl+_^3NwdOqz=*B#{wWg^+tJz4P*_IIb#Z5a#Ql+At%Utqrt zuTxA;Ml-zI-FS`qvAbIP|L(5bbzJG5Ox4cVzAo#*>qGn1Yb9NVv$I&^@iP5Y`~fq4 z*&obI`Miqm8oG$E&ZC}+pH9ymMx>LExm5yFWc>~2RVT&4)B-(%HfojY9`w$Wdy z^o(0TP*$KE(i1Gk)*sn#&M)op?sHe-J>ZUb54tPy?s4bwen%11ZDjGDWdgd62|L_b z%xxsde4Pna^rXwc4=j!Bj?_JVDUEo!(yy%X1~oX?Rme#<6YJZ@viKp#QQhmeYqEzu$;xamHukp zgLq2`8h&7LRei&Ln+~_f_-!vGr{AkF{zSTkITVoR^cW?eUc!aXdXX6}_oAi{mwRDd zPn_4nnVzY_s@~Kbz08u&>n&)ND^*-dtU);JMzgtj=*tqZm3lqhS;oE0bEWu8#lB_UqVx(LGA%|g0s z;zC9ASJz}=ALS&klpUMqT~2EAxX**k`+{=7-etdy8<~i%pLHb2*~+|fUx(K@@+vK0 zUN!6BwX_cfSP#)sZO~A)F;K!!AdsJS@1$%jZi*|L~XMuEA)6PWc5wrw;FHuRc{2gkW$q= zQmROzpW=trZef|^pi7_R1)H27YQ5tEli4`n}fIdQN#)15fOCp6khAc9zBFY3fS@>-C*#( zn~Qz*al-O`%A-h5KlH57C9@x%Kn{|6&NCEyW&-_WJTC|?>=+&B%Wjpzlk`GWU!_aw zP~RA#zHgjxxL+bA($#HD zMFxGcPAKY|oDdn45~mYZdr~okKFRSqq1;n>B59mdEP0hlWm2UkSN1KE*uTIssaPu0 zv})LInWkEkE;q}Sa-F78u9Ne%wQ`2GPE)68(3EOhwUtt_+$c3lOxosD;oRn2$?EM3zmrE4;@IWFl=Et+C&p>u}fvKSkk8=aMO>F*3m zQ}L4<Jw9S7=IPzjCS4Ie=m`V!qre=SX?VZ-Me_>Qf=-IaO;aXPnK)vdmJktSPg(KLx!VzFeZ zQ}2@LR@ybwsj^#DuPRNhrby&cmm=5tpcb)CoKbg2Sf!XQ$z@$Cr05nYF+&qpq6veR z;^b+f%iDe2WS)rzC(kUgQfyWttTF{zj?NRS)P!7ICbN#S*DObjcL` z^F+Bx^lM_jKIFqU6QNv3c{FAwODv&(o}STD{Bp!%u~1BF5qWNW6+yI`5(^PfCS}}N zAUDZ{-D(1>dW9y|Qh;W;P|O;Z)1yu<7@Q-QbuG}AcdzN!BsRE~_9^OD;Zfo?C08sN zQlKsCnb{+~Te)27UQfYtH7y!77pkV>?T za*6MIKy_lHd$yD#)rnI=+(VQql{2_pE|BYGCDSEZ7neE~C`(h*o&&O3 zj)u+*ANnoR_^`M_jg`hFIw(i1(w0(4E(>8SL-w?kQ)8218n8bbc2ep1f%8PyYZ;EYI1RLKZg(TtM60oS}Xc{hZ+XD znV47hk>y0HzyaRAzM*n(i4@o-djtdoR8jn-rnJLbuM>psbU*6pt)Q?6oP8_j8gSmj zq(s{pa4lFIz{9spmWv$(tfoDHr97l(8CRd54%#6X^Y zou13}V7DmFdEiWT`%c?O;0o{$-~#GFV%u4jk8^guUJwS+pR-PL9tw^G2ZLk5F<=Au z1#lYpJ#Ys2AUF%$1a>*Y)AJa_(+>fU23Lch1iN8=;w)lzJk|M%H-go9i;KYltvvp6 za6=pCZ&k+p#>c?wJjZ{6-Fxu)j5Rm#^vc{h_X3CXU`1uV2^QJ|6Xu?Am^#z)bX5W6EpjH z-_3a`*cbd3*dJU04g?j(nN(9&lqe=VRdDS2*{%naAI@hVumQthJnD!I9wCz_H*jzy@$LI1TJQ zgvXx&egvEaP66kD-vH-<_k#<-XTU|^{zG~ECE)SkGH^0@#yVb}P2h5H4LJQ(E*E@w zeD&br;70J1;AZeja4Wb3EadX|PJ>;*9=GuL-N8e_p5VK{Uf@u$FE||R2TlR|gI9tB z!CSyV;7V`^_;+w9*p;rU%Jl?16kNW6m*+lkEjSV!naAa6VBa@5ZvYS6$oV6%H~6Tk z555BS2M-*^^AiXj3(nlkg+h&4Yz-eGN@Ec$QxD@REHV=OkTnBCjH-Nhi=jk_rhk#qa6TofY$HDSDJpMSa z8+ZlS1H1t|5L^oO27d$g1D^u>gD-;v!0xxf7JDc~%y z*A`yBw^ccKw<<5>@>;Mr_yV{E>^_3$ci>j8KLp$Wz60#Joy#8vw}B(TauJv3g0sMt z;BxRk;92i-{ZW2A{V;F@IAjOn1E+!agQMT$a?MB{J{CL{JfoP)lfmiWx51G+x%>w; zJh(f}md?(919%cR4g4%P1H1#A1^yMB1NI!vM~SDA&VD;Lx6&p8ywvOs;fL*As znr$C|i@~+TEdPPNT;2$-9?kh8^nGvV?0Og1pK?EEFJhMe$Okx&h1_d0=Z7J$n96xJ zSbl=@^WfS@&g)ctJ?9-@pLv}3fa_B@e+|xB!ucm~HNA>u+wWj`4QFvY&u=KWA2BO` z6L=WpUhi=I@!*O=&W}MqeJAH6$X!0-yc(SODd)GKU%8L-9xDmV^+zkF2+zLJp_MlNEY}4Mu^D_`U6zmPYAM6W`0sDiW z2TuWS2G0P01`Y!s14o0Ui9G#8aDQ+Py@+Sq-QYa19$Wx^0bB$w2A6<;1ebyT1y_K* z@8#)Nfgb_afK$MA;9PJ6cn8>xM&q#UGjQN}&eh-sa1*%l0+;^_c4^_1#x z;IxaJ?*iBT&G|m?gnu|c1#Y~=`FU_NcmvpnMiQ}YKR6705?lxFGl}OXtc~jjfFr>( z!Li_Ma3XjII2Bw4P6wX^XM&yYmfG2~6E8Ko_iP`zx#>QmPmIiqR4T53YdT=0(_F&sK za4EO~Tn;_~t^~J%o51~od3t^{n1F4!5VQ8Mus`Q}!Bej1{5ZGa2fa@xB`3uTnX;~ zAkSYF_-=3;SO?C&f#-iQI2Zf|IOIky-wO@}*Mnz)rH6QWk>H!bvET>6iQxHQ1Nc>N z0r*33z+j&K5%2`?U*MLTxV&!&PrnTu0G7SEd?wfp{2bT=ybc@+E(B+S4}eRC^7u}I z>u=>OJj~N?1YZYk29E%@f*%A6!+3Zd*bTfG>;cXN4+MVz_6C0m_5nA5eZg12eqhf> zcz*rCqrd^+Dc~URJYsgftLvJ*1XkBKD+R0ToYjNX_0C);^YH4rXQRR1BY63Pz+rxz zrxUaDJAEYQBycu(Jvbj+3N8lMfy=>H!PVfwQ+WKf;9zh)I1$_k&H*=rzXrF0>xh;6 z$1yy=7a&i&opZOTJiUxNINuD;58xc2%Exn#24{g66SMf!@8R;7Aa|L_xd8IEAkMoW zFPX%-3i9k(oR2|1D~a=2aBwo`OW;}qXZLA5|86Oq2ZIB_W5J2w5O6;DN$`Y)Jp4Rx zFgOi71-wetU&Qs_Q}w~ssy_HUcm}xlqddQ1;4$E6@MGXa@B(lu_*HNQcn>%W{3|#I ztO@1m<$;HS3&4+pi@?u=OTdNTGVmdA1^6Px7Xv~x@S2r0(+%# z-b~EulMlEU^1$b~{6}yQSa^)57Xls(4h08+XMyK{Bf+b{vEU-G0eldg20jPQ1baNr z)6WKv1?PgF2Iqs9feXRK;9~I4;8L*j3?6?ucqF(IJPTY6egRwy-UO~%%Fl|Rq< z7x2Jz&X>X7;QmkW^nJnpV1Mw#;6QK`I0&2$4gtRo4h8Q5&jNo9js!P=6T!kvo}X0k zKyW%Z0GtU91!sd(!MWf(a6b4Ga3S~?a4}eTlBZt^9t%1+gV<1d+6K(x`ELf_M$FGLFp0SSe%iu8ZC*Wvs6F3n(;3*tG@B`p<@B(lqxB#33{vMnMc6yq} zR{*{POy4Fb<&6fHfH#B7z(>Iq;GQ}jUllkQTmz0JX7(yx&*P^N-OBxd=O)hiV4r-> z-+}`-bC$!P|0d__z|r6l;1ck?;0o~LVE4CpcmsGKI1B6r-URjrmx6u4KM=F>sO!C6 z2CM77dWUm)=5C(eNMd&XQ&h@%GT3bo=Opkz@OrQ}xE$;YZUy^;d(Yu<#iV9}EutoHKouq2y;4_;qk3 z_yce(_%PT2{sWu_?iR`8%K-a;v%n95bHH=J`QSz10&q6C5WE#!46XnN?Ux0%{RB=2 zUj~OB;PQTYp1(A35ZL`oE{_9;fH#3%zUK0SU_bCBZ~*w0C?5X=@MGX$@M`cB@D6YR z_y{<&il-;d;qhgI{lK~4r@;B(7r}+#kHE#?v*1#2zi1wRId~Gd61)KHcaZ023)ldz z0lR#|o)3-$zX*;6Zv`8`2f%6IU%;8*R&W-$TO7|{HuySl4%io*3!Vth1M9%~ z;Q8PJ@N#e=coVn?{1Lbq{1Z6vD7SAbSpJFgpm?6&kY6|lf$PEZ!Lxql^7Y{6dd}tG z%;TI-f`taoT@!fxF5sKN1>pO^jbQqcUTJUhPV(>>;8O5wV8bac-vdqq9|328{{m-$ z`zP}FbHI0j^S}|{0`M|$33xNO0{jWM4*V0i9()xX*~s&I(|mrtQ`c7?0an*p4+5*} ztv?P{*IiEr=bYj3ttMvIOaF76i@<^4Z^1#}R&WS-P!bOx3ce3K3rt`6De*^wv%m)M zc5nvx05}ia2rdG z$AUA#)4(}kn(jm?e=gVn&I7L^X7^JC;Pqht3q1c@p``|$E*Wjv)JibP7z(1T_7x45afNui_gJ*!JfK$OUz}eu& zOFX_JaOf4z2f?$z&EQCI|AjpLSa1N?0G11|<=fD6G{;C*0^e|h@Hz$M^+!NFI# zd{8P+e+u|^a1(esIA72z_fzx1!6N51YIyJm;2Gdwz+vDk;An84MLhjP@NjS{coH}r z{5aT6=IO_Pv%t?1v-;_#gD8MId}oPCH{d*j)Kb1>Kk90UDe z@N&p=z^{Qzz}vy~;Bv6RmB)VwTn26iH-ep?<@sp_Uk7&Y%EJ#OX62s&o(7Ht$AGiI z%T;#c;q$>0x^e!5n3X>Vd=Q-B&gDOYb9-}c1-F8`rt$E#gSdPU*vFgmFtBhl=kZ{F z@Ko>&a2U7<{4CgO2oL`TI1s!W91N}jhl0<7XMvrbhpl44eo4LE&_v04y)&`6&c@fUChn6iydvz|$bF1&2c(Je1q#CCEd-8^JB$ z9bjJ{u3rwG0e& zJU9ZJ4t`Dz56%TQgA2fAxAFMi2S<+J{3SRMd@Q;9~Ghl~?fev%t0BPr;4gGhi3`PMmEX89Y5t@K|s#SVzptmkN#n zr-K)Q%fU+-y9q)icopMrf>00Mz_>fva}`g28~8f#$KZkBufRUwqhLR912_QO0uBbt z%XxYagC#0+4^a^E@qO6aMl)0>T-3mMCwR(joPPy}-od#q6_AB@yOnbgxM&pT zXTcRdoY}B&rk^^1^AF%OZ_Yh5T<+hG^LTL04V)K%oBD7r0N3tNvM-c?eRpzZ!{k_c z0zGH5?F6`7&zTJ~V)C?b&fR6sZSepdg5ZH(A)7dryoKE+xY?}|B5yAOI za6mKXtzgeHoWB9*G;(H-1uQ?=S2%l8v&gvoGUth4uU5{{;O2igzXW#qi*pHh%0t@Bbucn({&6qNh23 z25xjACE5Bc!=C2yz2M+O zTz(N8`YmT4SHvH|^~1pOJ}zIN$|rOA8gT1=F8@H)ui$(b+!V_7{{lB2C|4wg8_gWd1r=`RMmJ;eD{ zaK%*4<>35BIiChMPUh@N*Fu(F)jgaCgJXj^-vKVXmvbmM@?p*faLo&xSAbn!^F_{+!8tjclfX5rIIjZ-tl?Y+Zd}g! zBv@X_xrYZ&uXF@2?@i!FKhBfD6K>-?3!DZvfUCxE`7&_OSkCLg#X~s11J3j3ya((t zj`KI*R3Fau;DS+{FMt~dbJq6Z`48~s+!tJSE9cSR#$lYNfIWtDjt3iV=Db9e-^Do_ zoOuW5P2dc6qe)vaF( zx8MgYc$x)=S#Y!kCt7f-1uwDSl@`3#f?v1bd<))Y!MiMY59fcCgGWEL7JS}<<$j9& zjruoQ@EsQXpanl=!SgM6g$2K1!MiQ^D+@km!Iv!9-P1h(qb>MB3!Y`cNfw-8!Rsw} ziv_dksp#Y|+V5KnK5fC8{^t4vEO?{^2V3wg3r@7)Obgy7_<{v@xz0TQ zeJ%J#&c^m)s0EL+;Hefo!-Ai-;3x}@x8Q{qoNmD@IUA2xu7%u77K9sVA58nrv=52h;ul?GMua5bYtfKTP{0v`?me3hh&A zpGNzmw1?6@o%Y9Qf1Gyq-1!9UGiiU4b~b$XDcYZ=T}OKu?cub~ragl8NZR$ZN6|iq z_GsE;XrD{_JlbPvzk&9fXpf`aVYh3y8*7`r1ingvmC3Yerqxbo)7H_{cqS9K~xq}dibk#`;kX7jci57)VdxXh-Dv>&DERFX^+lNg4x zDYDfmIL&9=R_FfyPulI%vtC;;bz1TNr2StLp<2LZEVoRf<1Dz!Oyjo7ZC~AXo@|7( zRdW04|2Y{eWoI*-n%aU`oiyFVo6VnUoT%5rUzyO@!q4>UIq^8}m7%%*;2^M2Zrnay}^OUYs$bX#f`=PoQ^mKCU&OxNB?WSGmn z6D>^i-ia0_cI`}y&oJMK7Mmv3ri!`DblP2$AST{AK4-iQA)n;jhESPx*oLfQ{Wnb$ zQy-gzRi^#5U^X>8n`qp+x2{9pSR4pLYm&qmYz4HQy1I&kmDFgydfTZnp{>-ItYd1l zW(1w$<}=)zq{_q{%{MQV7P9F$d%bD6RO77O=DubVdRvM*PLyw=VLCapb?=ULF$vSb zE~c`Mb}^M=7J8FJF*S4tA55Iz(LY&f1S}@4zc#i16en9v#k8vNjMDlc9p}tvs{c7| zo!L47*H{3SkS!b9&Kl-==M(x{Ny&Oa?UjjSon_x{PL0BjX5;O-GCR3RR@;54WlPqZ z9vBmmx~72jfa<*EokyUgVO-b1er)O@2c}xer0TXV`N>A9<+Zw9V)Ht0p<+D-o9hy= z28~uWpal^+j1HZXYDwC~PxJu_Sb?9EQ8KGtG zlIdC)Y(Wur!dm#T3zf+tB$gT` &X)#XT-I#$?FpX`C^(jF!n${HUg9AjLs#MBcj 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 JK^zn6{{RTD^Ns)j literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/darwin-x64/sodium-native.bare b/node_modules/sodium-native/prebuilds/darwin-x64/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..cf2338993f9e369bd1ef71aca3a47ed3520380d7 GIT binary patch literal 679192 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%0D9^pu+bhn^O0xL5 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 ?1#OTILGKDa4AJx#wy=5eW9WmM^|=J5 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 jkA3tWl)F-mef1tZrnyvQ1Z63ph-m literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/darwin-x64/sodium-native.node b/node_modules/sodium-native/prebuilds/darwin-x64/sodium-native.node new file mode 100644 index 0000000000000000000000000000000000000000..1a926f157319ed01b95b9656b0722232dcde2b67 GIT binary patch literal 625032 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 z
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�+uHR8BfGA&oZq}>185t4*CG)rpJ}HTveIV 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ℑHGd(k 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%0DR9t_@F`X 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

T;K8ri+FR8}aAGgu> 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 z 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

yFD~KE?8m^lC-uE_0UIjGg7tcH@MF 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 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/ios-x64-simulator/sodium-native.bare b/node_modules/sodium-native/prebuilds/ios-x64-simulator/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..cead0f7694398344fc1ca587d3c789d2b713eb51 GIT binary patch literal 679008 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

Ytm3Y;*(z1ZXGS)7bL;w5sDBYw|zs%Z;~=NJ;o zoFp!`o*0xZFf5=)%Up}oCg!{pe(aVg=JaE`{KTWI{)S*ZH55ui;_LkQ=a=f|QCi<6 zo?69!4I&P$;-uDIZDj>_1>!D5lKB<~STU*0G`f(Ny0Y=Q_zkVs#W$8rIyk84wfOCv ztCX=J48|~_MMaitLw4k8XiyE7u;YoEd#@hTj6l<$nIEJ%pe&w`OEPm_HH_@VwgibTQyhOVk1}K= zRp4BQwpz}qOI~8DF@L91cHKg}X{s!Da4B3Es>x&;UkgE zPq0scL4m-t&+&=PLE<%IFtilX9B_dfQU189iuEKD8-RBe>aND5;A(lR#>! zjXs26ZSi_cH5ueBp@ucYJZyFli{)Zm??G_DA2w12lY2`H>&12eK~OeFjY`sVsmAy{ z4-fS!UQNbc^o4`{vf~g`&tOFE3Suo_0lo{VE#7w5o_D-k?N8A|YY$Sskve=a%I3NL zuw9lrtn&u;&DLb>B@d3zsVqq+Ht*X=7Yq{J>K(8Y%+U>>Z3$v)VJ5FQV}L~FQfmOh z94D>^`)IO3XtI{DEWOLC;BdqB8WkjC&-xV`9d-Agk(~Idqpqw@>17##5)00{?L}Sj zV-iEus5>0$A_t)^&OuKZbzyEOiftm(!RP{Y_tBZ@>2Qjpu8SUBx75W z2|{`!%35o~t|k@%FcU#ie6)kl9hR!roB^pSW4A1{J|knqQ8ug8O^PG^a$=ZrPhOfi<>b6s zX3}&eM+Em3!;yZctQ2gd-!~PAVV5Ntd)llafWs)5qsEv5l47+HX()dE)Lw~6)2Lo< znCVxvqfwpg%{XIhwUi_pbuUWtv1Dv-P&U`Bk?R5_*Z#>LE2f(G<7b2|IQ z1kU=(+3!iL<%n12I_t}(SK*cYSYJI!jH8529JvXD^;lo81+lImK?h-~(@d{+a=sdf zXED8;Qg__r#a4J`dhH5l5U{&ayMl_{W_>YPt*O<0K?Uy9Op40-TA!@gb>Fefl*+#$ zoD8%v+P=QV7;_DU#uyz6*2C0p&70by?y4X&ye4OiS-*AU!4d=I&JqKkZ$_5bvxO6q zvcyC!n28B2Gkqe_VT=+|402qWIrDf&U88_1MsQ$^?SOtJW*~^8E}sQj8H3P1$*2dD zk^eC!!%*Q!lsA$Irk-fxfc7<9xgEeX4`6J@GZh~2v6>xu9|C0lG~=`f@)}*s7P*Gl z{2=5#0MRf}8M!j_TNR3tS0V3#AogrBf$O##^2P62MNT^NiXgTHsbI4Y#fu6IY^EJ0 zB{kPYGt9b9yJ=k6*b$X;Bz`sE6BT=s75ff89B&$?QA{Ws++d9p&NWy=OxXA=Wr2{4 z&#IM}v6X5@_1R0yOe82ZNSo^lgCQ%JUZjFS+Saz6DSt#Z2+9BLWy4zu21s7$zxG!w zAN+@4asKGy{~1Z~KSn;3(pL2AFuP>RxgZ}#*kw_bE*U#sI1&?>4F9M#w6rri(l!f( zL~!!K1j~KzfSH&v98c-cpX9HYpZ-%^RKSe?d-RR7J)>#Cec7#qiNa3}unYR;hza^X z*aUqmH8b*v{dq(lyp{d=*x&;Fa>V}3tt`yI5X};sHjh}4V;;{1_eeKVG(pCqN{W(YWC+pCS><&GPeUbEP>g>Pb z@ylNu|JX1j<=7wv8>Eu6ycB2DvHh+|qbr;7{8`7`TK0X$93|zGBIkPce8G!-T1?LM z`PlPepDfrPDcs+G7Dde+IN9!{FBy!RF^Pg4OXU|pQGkv&N~ zO*AL^3=_@C#AB>#_=z4bwl0}?!7EmM=KB$p**K2RX@NQYIk((G75GnQtX)j|ra!Zg zg>U()gkB}KJb$*edK|uYfI81`?v}>MHO$^!x!7iiHBsx4K)Plca6H1>hq{up4M1E| zarnToQR_US7x|oj7ml4w0gr2TtL~+)3e9+EVIw_mzPX?=b?ZR*3~hHFA#R$FZ#xuL zxq|gp5aK{eL#+e3$uJB|_7!=#)Xj?AIinQ?O|}H-c@7_)L3-R>wkTq=+v(5o`K;IT znc28z@$VKzlmhv#q?vWVTDO=C3wh?Bd%ni=e4aaao-em7Th_YrE*_iB8^VrifrjSV zk+$g?W~?6@>f7Efn)T8;Qn881plp$d!IR;)Y>{ERc#%<|%;u?a6-g$xB-ysZt%B`l zLi-gQbq$+k7AeD%(2kRxh`^H}tjvO*cp5Aml)1&USa&k9o~7ClhSl zZHpqbd;_a)OMN`(aD=i|w}<)gTAb;fOP7a3aJ1@%199jkTW&kX!(kj}@zQ9m z?aXzy)^_1A*7zg>!FmN ztIp=B1K+$j|5ulKsSC@4%x6b<>7&`~#Qe2#OO+l=l{gs_J@_DK=P!=e-jJi&$7qvZ zeCY^wNB8{Vs|TyyR+5KOJy;WY80N)r0eUrR*e9M*T*%YrK2&^jxsMld1rFgo=2Rxn z|K(m~w>PopWiPhowVL>(ORKJn?{5d%p(80NN6N~ze7D+5O{P`1UtHy-F6Lo0G1|A* zv#qVR!hMGD4?lC&2n)&Ho^9umx6=sK=l|+y+285?jFt6lBS8^--VUhLkCiQbD@Yhk zrJM_!zW8i}08(;vH8K@}bE_AmZo_+dZ?XbcLJnuWyx#9w@7)*S<&w-P@9<|V+ms{< zf;F?$mGjjqFSasV1jg+?T(U{VmLd<0Jz@M*k1g>|Joqwec|pZatwL44;a9*YYlBKc zC0OI?2r4^#20!W14av-q(qtt&h?NED$q4mZOM~=8#Qo*vbXYp`j<`mHn@yrxG_ z^U~=?n2_*`dN2JO@uQc%U$L1%dd6LPN?l&h%Nx0l<@#l=BaGuHemUo4ZSpH|M#_%D z{qto%)=H{WK~)my#FhcC_yndnu%N?6OaUL};ic$$}*(P&VA+nSO}t0`XUH`bKi z8?9X#?ME2u+jZzzBC1v6iV-SX;|{!Piib`171o84I!mA5h$*IKFVE5e397143SP zRvk;DRDt)|_GE%Hz1+c9@`>xFY?YOL5unPsiYn8_`Cvb4Qcj&SDK!HTSd2A|hQ zoskf(tSVcO`b1Sy+JG*0Ib5g}R>2asn6J6YsaU>l4or}Pe%!`!$%cjaJ=viJ=4Qp4 z=m)jWoAFFhp^KwiTQTU%<_Yv&i*~5}?E^kYRO5|fO;Yxae){#?h`mHasg1(%%2laj2d%cW$oC9v<=z6$|4Tsq( zbM#pLClo|=nS-?&=U1%sD{w%#tr1fWOF%nZe&#L&RkN2lap)6BSGRQmdtWwYAN`}q zA%QTO&S(C&CaCkiok7J0e=*gXU=Q$0u6#O(y#n(J9oNMt4gEhI#OK9tkO&SJeW%X4 zE`GbaFTQv@+GI4H+dA=e@rL$S_`sJRRs@!l@^UZ;JNCq95ODi2+>A(g1`>-?u>t2n zA8D4dRGg^UB5&nJ9I1t2XcgDwUjk2u~({}}60$9zI z15UeoFpXoGQ*&f}GRa)UC9+?Bu*Nw-ovl}HcV`PkcKkGM7pZBJo$~6DLr&UcqJ%=lUfZhE z#Zjc^iHq^$z|SJG2i>tNK@9gBoH@)!BH~G%MXXX_CLQpw75tuc{_lCmU%V(8Yxifg zZ1Q7!0*tjv3y`R6cjl4;C@Xidj;gl#M5~2kfV8u&aTaq?3k*lqQnL}9b7H#5nyKi? zjO=TgR&6=Z-*$36XR|i|f_nRmr8vPOJ5bY|1_pyUz*uLN@0=Fp;y7@%#RX`EAvf@K zrxM+HkPMEyElW@K_~qdNG1`vckH_dFnzno{)u$IPwH4%g%yKRFGAEt|m7vaSa;a~x z=stMx_mZu(mCt%uZ0gu{{-i&0gALvV_1DFBtivw-gbd;@^K`ol*NWM|z(`Nw)sc{V zSk;-O?D%Wad(M4C;&$UQiQe<=eiF9xq%N%BZfaX3bPJaGTm=E&+{QOM`R295^v!3< zWxCAk{mn-X_05gT2qndATFED}6kbpztg&gTF!!}(;Naf6g~MaezK9p`d;L@6_n!FM zFP0RwbRARG+VbL2RS(DSUCICJdUmRwm&43bh|!$~c4ITP!(*{}_b7^#%gA5&l<|`x95=#;901 zEGvA-oX40O%jbe`vC~>K)!}^I)UA@SETO9wd`oQTmMENUtyy-c0A#Le$_3v>kwDJZ zZ5TDU;9DCJrxz3{K>;MpUbs4#f5AwT>c|D(>bo+FEcjNv-v!^QQ(u}nPa&4p0-$!D zkfW=p3KHvm_V02&k_x_kJv6q8 z4Gh$Q0TpX^(Ig7KW$YOS-wq=9mT9czvcde=A9=;ZPBPWyyc!wP{ZY|E7D+|4jdNL% zN`#KI4)ur~^MqnLO1yqcl$tiS=Yoz!MnB zE;88#un`O_PE55V@gz=}n+}RSl)_Xe30*+>(4ogj>jnaX+I_ioAZuijYI1_v zu>di)3xp3iVaHJaKH%a{T<{cxmH;Ehwps6smly)dEGEd0ZS5UntC-1Wf?^jeS>_Z( z@gm`Z_>>MVK0(!mA+x(F@HDZM>r{7{X)c~R-IE&V%a0su#WXYqgIMWF!f@58U?Me- zCu>TA5TMn>*wO|UW6Q1v81rDzTx*HsNme|Otf1*zG^Y_%JYhx+~RDJFrbBE}IG?SsV2 zGBdH%4fl9&>N+=3=_0jzu?nm~cV7-=y%^@UwcTtsjjBQd3s*pa*DI72rglF*A$pf?TQDqvgM?)H7 zY&#Hvq4-})7%<$xdcp8&ywHP~Hg^z4iMBOfgmdIZZ8gEms3&=HTeNMbh3(4!+Kp<2 zLR`2-SJ{oyt!$P@(Y&7ZV{bA-{9rP{-i=M-jA&5e{Is{z6|9^zsR4{e)Vww}?9 zYswRHzK8OPuZ4C8H26hNq_%`^;7=H%##)#zaJ-}z1+nLn3ARPBxv)IjJR`fxCYHrE zJz^UuYhkvIfe$gDscW_vTc#pe;fV$@Pq#XzS!}!!E=b{!`NQW6`GXaq^i-xl6@#tu z?tv(JqkuU;lb9o-7rHVErBz!Bf-Rvqfwj>DQ=ThKIzl4n-;dJFM{hVbQuKz<>9jEV zNc1o}2b(3&87_L`(41k+7{&q^w6L|UkC^v=FU|IN(NGU{UO>#bkuB zvj$RR?c`!-3GvW$6aT$qXEAlc*jZoE8=SQ)a_%Rjz91OK+7Xh|$$T??4na;LqYKDM zFT>tIM1TsEQ%FvWckfM3g_=Yz!ZNDzGyF{`gK5z?2YQPk`anp%L>5t_OQx+DGce{?@(Lnf2G zg^{vtg*0V+Z6?g2RcTK4n&8XJUK5B2L8(&aZTqWI^j&C~I5};mmZ?%k?RnXoj6J1j z**>yY0^Wk*(A^T3(ZmPk5S2(~8CeRG>@Rztv{k2mvUi#3WaKVY1At`i;i6^D94O03 zhbG-50M=0yEzA5bN;6#V4tHA9% z2xG82jW#A>pN&`5yQ0uob`HV*K74d+FGc)kN5{JTB*Vc_7$4im;G!E98eDL{>+}{M zD=3`(9LC4y3@&<{Tdcw0a)wJEgDZ@WRZnpSmyIiIE{XA#GjbSNg^Q*+nqY7p?>fC< zz~W=0PS30l{WI+Jk-^1hoxwFwd@Kf67$0l)jkDV^xZINyKsL`{BQ9rf6&TQctSxIx z*<3Xw++8v>pq;hFWSPaslDHm28EdP5d@Otr#>bYbmSS5D!TeHV2aJz3z8WAt79(1= zI7W5Fu7dbj^>ggmX?7{}_X{KC@%Kv|$ez1SQXq^`TBOW4d^IxAnw8(P=*U0|B1e|F zn^$s7%k&nEgSzP@4+?kh)3yqSkOw%9^p^+htv8S`SVgFO&N6q-Ytd+{zd&Hiz(Otw zDp+^RISsInWyRz7DJs^^FZnB$2Y$Xw|7RqF+YVuvI?jJ@c~I@-foGS{b)t8?d|&_Z zQ=cr54Nj0m{^KqZR{rD0-ADAvU$H(3{l~R);=b&Twc;6Vo2V(>BU5%ZnLF?t&;JTd zqQKXJ{lJgNgPwUu>`N)bjI%E{K3bqdj@Xy-r+CY;W`5@Pf2w_{sMjO*CEb8OCg_jY zm*4?kI+>uj!D(bFTj8Nq1+t;Hed!`ykJy*Yr~K9HlV0{^dL^?O>2cVXEFq`aqCDJ| z+n=}#PZmuYHkBtn<5dL${$H-zLxkw`aC|d%D+>Fx4$3q$ip9quH0tK!pAeHcMd+ zILwXVfWu)fZiY)P6wJ@9)665YQm+lo4}Y0F!mY%OV9fCojTbLNd!nDi)g(!6&xZwcmcHe6woi7HoW6t&gROIe_1 zDs3<+RxP-UT;SxpgJ(z1=M0a&Cs=a8fq2M;E<%R9jycRh#FkUEwrluyvr0xo+UMLA zsY~F=uSq0JyFJ)6%M>|L<=mifevH-*UKv_A4ZWG^M0r<*`(yK@X7VKOAf3pNcqH^@ zWNP|#rlz;#q8Z)64$gs*JwL_JO#AwY)!|$=>lDlI6X9SIV>uj}YzCm%&0D(l5V>rZ zxfT?=Q#;(g+R504UM@`>41_Ot!8ZS^@K#t=;DVHmSW)3(p$igc1#u?NdXLCYd`R#k zxiaTR^7S7@ek5t<+m)HxjH|A^kFp=da~N0Mi$9Qe)m2cl9BvCebVr{m58XqakJIk_ zb4$Wny`!G46~4 zttJ=^`vzLI6MJ^PNkF&!#Uh^bMxh6>0{6T&n@ugL)~E9;Vis)$lI>6v*6~bSDcY(* z`9diup&I!o;itG6mJ|qxS0@DP1rJ+m6Sb`5^jv);ND;YceV8eGdRBOZO0-nq)&#c$ zN`4wLa5p7lI z6k|cS7SF-Voj~{9(M{n@{!aN)CWsTyhtviYJDg+GG_^3jKn?X%Nd;XQSY-yJpPG8e zpsSvw+jJ8b-DK)@pM!pgi1Am}MUhrD@kHHN{Tw>hYK4onVuC)U80v9%g|SvYp4&Ut z>Y5f&A)8FsjrG&X@yYb(h~Vxdt&$^^ z&RO8h7Ggbun3SEh`5|z?U%W_brIj4ppwKDf56;o3WQBwE*+s?}NXg1}7aLelA=pUd zlB}qdr>;Gu7u8c41RHA?J8%%mEArteIe|nkGbToEqd@W822%Wq?Q)Ygc6FX#h;rC} zZPIK4dI655OC??>EpSs1r2yrp_E1^WXCNDK9ERJ+oP1hp-RA={lnfl8uN%ctGWNzl%|g2pFQ zNPUb0HrN-HwXHcyg?Oe4S}9GiA{t1}O9%wT;-tefW-RL5j-kSZe=kM?k;a2AG&zEG z!8srswT*$6DWp`U8AP^&s`+i>TiZ0k(p*%K+vI>Q>_A7&qGBwRj$VbdegJgyC!eEj zL2*Vc#^>3Z8^+Yd?^%QMGAn+&y|N{)ZF{8V=~Qy5-=0iur?=QQ@ieke&mB*dBo4FM z+^I1sqcyfeGQsM$JIE3bW}R1L?yEWn#5`A5YDejI)JAK8+JK!x&sF%=n3#y5paK># zV<@OVM4H+HB{IhH(KSSs7*}U%2jhh7dbM_w2t^)y9dPRz*mbkHHAW`Nk6Ytklv3o> z82g?nBe!nUFEVQxsHBkDi|M&$Af%l_bsnBXB~}BOPMh%v@Nk~6k6Sc=vn$=g6U>Rl zg5H3w@Gy-IoDoHk`7&AM35)s0-g_JsW^BF1c#V>D7RMLj6kCfz0muv1@v||DojD_J zpcjhVkvoV2`(#dvZ3Pfw3|A7IG`7+zeclXQmSb@eE)%llZq-Gm(FO~JvJo)LPeS(Jk^i`!k(L%}eC4`EK zpI{lL?{^kUowX`tX$$y%`qBE{SD3 zn?(#^l*#dwnHU=E6z~*tWp5&z;i;ZHPdTFmx5^-~-|P#=f6lww4cwe}HRm4{cvr(Q zK=Ksq>G&z+NO;Q0MzgeJY==CB07<%is7X^J5j`yh+~p}+$6jC@!(eI+hw@0FBPo|+ zAQSk`K|CBg^IUj<(UT9bzP4!hH*Z zf-@z>Fr2Cs~WnZR%nMMEKtKRUy$$XNI;X>FfJxH-%cfjL6{k< zG5g_k7_J$nXHQvE%t5yCrkPUn#TMO2G|&XqT|7?>#|p9Lx?}Iyl4!OPQ%ml$%e-d0 zESS%Q7?y>)WX7?Rk!2&CJG=T{qA&9Bi%0EiGvgXnWKN7j9ME5Fg%4z#@3jW#G00#| zhar$DYRH8^R`F6Hki zFzW(m;CaQjmUA#4`=Cf`%SSUCIfL25%#`M6(6 zuY4!_bPQ&@g;Ms|K%{-5JdBzQnDbk`=-@$4f=v%yI$Q&>W4&{e9aG=OKuja6f`OQg zs>t?(e6}g;v-1*%h@Z4G=Go9b$b5O4KJ(9f#?O2iq)i^-%~)11iCC{Rwpfukm%Q3% z=g-?|(OqZqPUi>o+FyfGuNBl;8rB(Pt{o9%CQ{G#AoXH)?{Do>JQ5|bFZ-e%XRH7U z_myq#E77)DT@UlV_xSQp-5G~deC1x0A9u1B!(#Y=zc>S&rR*`nDZC>TN67vjUQm1q z+pV<9PO=k{crMk0+rYp05<-RD@p$#K2Ni|;!RQR$BuDb1stFlMvg1i5*7UNMiS)gs zD%t?2iu@8mGnQ@&Fzk!RRI_7{Ho>{HiVb{txYUc6j;W8AUNSzOxUfE+xO6;CZQxx4 z=Jqst_B5FOqHhi=8rSvP-wc3%4%S`_L+8#!|HgaW*j=M;(J`YvCk|%MPN{>;vw=hE z1@x!La4i)=1_-r4Hdc^gdd*&3#0%S3;g#(9cc^f``cjPaLXv`tTFm>xD&Ql%%Mj33f zo77eLEsuD}Z+XN+j>4b+Is(Q?X@7vtjt;fc(S;P#*^HHk-s#9^dn3hXzw|5N8Y0j& zc4fElq`sfq>F7}s`tNk~J7u$-j^77-*N-s^tR0Uy8TZyw075#Fe=<8B)zNE`Y~{tqZ^cA4r9J@;wb_$4db+%t zt${pHFfH8eNSN_cuWLXl*&b^r+&B{G>9pH9h{|FdokNhZb=)BRZEYpQ{!c*#ZMKtp zf^=H@3K8q6$Q$h))pJQ^(C72JXz^YiqaP030Q)kB0#T=lYsrEF>k-(BZbvZK)F z<}(!jyoT**xfGx9<)Cr{E`xU!=!wiJlarPEgVf}DnlqMWjknF0QlDtRJEWcBpeNZu zjo15`6TawY&SPShjh&*MkizyD_+IM%a3>_MpabU5N3Y54H`Yg9{L|kKC@%InQ@ z{qhj<;@!LmcVybl+lRHxp*nBSuN*bKDj!D4=D9$=r@qMF6p1GH}BsvRF1GwXp9Ro{x4 zB~NiFod5I=ws;4ZdIwkd2iyFEE&lYqsxm(F1u9Z^I@o$aqbpoAG^TY86 z?=}FNHct8S7#^(ly3Bc>sF`sve*4J<-_vJ{DEFqyeQU?K*v6X5jWsj&zxt)7F|%Ab zlu%w@^0oJ?kJm-*B8AEcI>HWi*vA66Z|W0bTbV5u-*-C79N4*;w5 zwo?nhvQJR<4JwS^(LvP39kUv0T9^@y&^D7GQIrK2_ zy6^3L6P^>mPf%A~)5iGBZvsb6>vMxHC?N95{h(HMLA}qQ{x@pbF`*D@hvjdQ-t{tB zYb!Ux0P(Lil5j!D1b*r@^Cu{P_czoQ)lyVQ|J;|(kKlbWg7+s5-je?CzP|v=%3ieN zi&5o5tV6&nZvf)H0uVQo5P_IXJ$K#g9DGwg5EUIul5?Q zZsV0a88K9LkKessSU#J_fyGKaXUQed&Z)7kY- z6%60Ry58I`YrSAS#N<)@-ZK-SI6~yCFmVK`GYyhPiR$>hyJu`aCjOIMCX0AcAd4Pi z+IYmCg9l9{{azyJK8d6UC6OL-0;y%k2Z4NO2L&aNxD@64m&v16Cz8B_EB)zv3guBN zB8nDTS(8V5ojfuWszOjW%SNEDg`sR*L*2Ol~Rc@%6 zvG3I{%@{Mwl|%4F^4ajIBJr6euK%34)@sP(w2wTpnw>l{u#{b3-BJkF_h;-!AQgb+ zDxJR9b(P(4!;ULqgQG&&;$M4?qzFD{y9a>pq(i|+YhAUHM+Vd54kp*X3*p)zxc+Ye zT*@hQx&HAf!Sy*~AJXCQu(4xE?>Y_+2jt=$$QrxmK?bF@bZGIX>Wt4Eau|4f$)h_< zo-lYHkL1y|L6V{oiQnB9X5|*luJ`>rPdlzJgxMkETcmfr0*G~$Pe>s-d4vSDdKo+S zg*TK({pp|kR49+`EO|15*U6)8CH>%ie*un_yJ*L)g&>CQr>}PHF9cEYC=cQ;lSd99 zlSlnvbMnZNMXmnwDEF$DJi61mWnB{(ck*c4(S2JG|JsLuC5Jo7qdZ`H3+2&JqqoT; zcZ*R0EWPECy>ar$e}ESA$0lRxG3@vHk!1R+!T1y$T{T% z{(_fGf4Q7BsSd;rTa_Ng?K*eMJVmCHTh{8!xXrrM4{_VgZ5aEP#L*!dH*5$8#H^~Y zI;43$)(G<(J90Xnmdds7nI^kzPA{D4N>=P;nu=jEXV__zHHOm_`*mb}C5vm^Z1*ae zk!ae(cbQi#+N(=uuwCYq+GWu&E;SlZ^TUX`vZH;y2 zcq6k&T%swv1@o+wp+5Br-z_q%ZOG1~1l1WqGfRwdH2D|u&aUh~yY~V`3o2CgQGG)* z6E;g%tEayVX-oIzNIQ(%JZZ~$%9D14Wi!%Nar<9O+Oq{H^1?0|&n|Q7b;-#t)(UBe>AHT(4z$^29l}LfWDqDs=$T_PEa1pR{Y{T6M11 zI&qJj&n$5ge_!?&?!6-|I~Z-q-c5=vfzoTYWxuYczYJ;XX;Mhqv1(+FwByy*9BC(5 zHY05VxBs=IohCrpZ`v-IS$3H-TbImSwFlDPrAv;qEj;xj?LsA1HZ?0}W=T7jUcL6d zTOjS}cPn)O(w@?6rTUZhwIA4vLki?4-1~xF+e%8l*ZxLNe;Lwt@6VBT54U;J7GZ?u zNjsRQu-BGy`(I1iVL$+B%k7dGVV5~ox@6|6J&^WnJ>^I{o~M4Ktyf}YQ?->_GJ#7k z(r&#O(q8m^r4B&a8oDzK5t25t*f7$DQ6eXh7dc&v5SXi8t3JBtd-h(W4b8gkq(r3M zm0hQ&zYJ+-)121Qb^jfxy_TdT5Zjd*0XFz+Inu^HfbL^Xn#5e=HT10 zkQuHy3z^}Xvyd63ISZMa&_W(7KvPZQ?UI>bmpKh~Su{epRoE3vYvQ8_b9 z=G(=TEE;yy6bSmm?~vi@7Fs`IkH&3@+To@A4jS&StQ}s?lv$CVsU6OuQPWuZq7p|i zX;NevtL(R08CZg88XsmbM^k$xH`ChT6KWpRNV{OZ=q#I)pZWo&V$SLSrlP6utI3Qx z*!X}==@(5sU3Zp#GRs5%a1D=jsoi)}%sRyq zR)oCSwb4G<$geiV?k{kDHpdXs+e|3n$~)ZqJXhjBnZ3y+Ivd59b37^j+E@IEPcsrO zIes#0pW41(;|qN=+mc{l>QL*16`v^Lg=E@r)s|i&v}!oQMZ?wOT&i%%AuY=H#+_o$ zMfJk&!8P%(f8c29Wc`p8<;%FeAb#)NXFbMz#mtTIuP^M=-Ua%YJP3YACAnUhAI!{i zX3@6ncinrn*G8`|hKS65*}cfMd0+MhrL5h7pVkk&*3J^v=0RCX5Gx)@o#({NO!!yaQy_hXX#kN0kfY^cFIKtoI_I|uiLaaKU4H#smLHraD_-()o-~L}0Z;gg#^}k)&TxG;X~*txtjtci zN>}bla%>eFyi~4AR=nuNG6g^Z038)d9=BM6waf0AI=;2$d~~Rp9>S&%5PDh8&ij@FGepTl_hWr za7K}v&B1F-bjj}drf_C_3+fDxw86m?RwFfna04K1U+uq$pIJvH*74cJ*ieCIdTg&- z#%F1MpB;e02|Ze&w^ePQXVhvaL!4x zax?QZdw79=;3%(h9WG*7o?wt}U2y7Cq1YR2d@W{xxr`;*1R5tV5@_ix+>ce) zq|%_U)Sl)vSeB+?mSssf7hJN4Pr6o)Iyz=zair*U_K(AnCxk@^N^-seIC5vd;9-ep z`E~w`HaPH+X!CJa{FAXq)D8F;Ch`}Om7Gy9NA02mUFBD91Zj8iX`TI&8S<&1a<9)3 zFzF@Dq=8o40kSze#7VJ8%w{?Tf67n}dvx;zs`luD+psQ~L3jvc)J%@`x(w$4PH;N& z_DII0<`{A~v5rqsL5LMY2WP~P*j1&`?Lca!{u}mUESZ3AAzzRclgWwMD)+uo?=}6n zFZ;JHMO+^C4#agNd}F-ay|H6Q{N7~%-FRqmyKbW@96;P26u9@>V7%lvZ_4+t$cx+u z%Ch#Klqv#MQOWc*bW0&gA)iLJNWJ@G|7S{u57+EbLO!YfJ7-=ffe_} z9#r$Kq(UYTgMQ+5_$%7$+hw!h2gn6v6x0cUO&)!~Y64U?Aas822-p=wj<(>RyN+`J zUKy2ljnuA7#Xw#*^{y}~hfFJoV`!J7aoJ~@gWT5tuamllHsDMj9x{aAx%O)(pzbsC z*=<|Fj-2iU1a?dxXe1;=F2NR2gO^Zd2s`4Qz~=w>q}mBcfleOc1QUU7u@wZIjhCJ_!b>+)1?g&h&sxoO8#K_{pY|rMIm0~W z<#&x|cQXC4v;DMRon)(Bh-&`W3XAdVP>8yPer!WBfnWSKopqHt^L&dt+pfSL^SqB@ zN*o2%QKLO=%>kDK>CDmJx#2lB!RuOKXy)|KZny3LA5QDyTMAfE(0~PwUCGAJ#Na4g zjPJoE;bz$`q=#J|InDsOTllS&q%tCl4iJn+1Fg`N3vIVL7tcVfzzSoC=fa&CUG&OB zV3a>audp9G4p(J!9kjNTL!Q;pkw}T>ys~kN!}S}eyOGrW9`o%9mMsowSAFQY6?)?8 z>MDqJd)hL)#SUa7o++fbI$w_3Y<3w^8*P^hX2&q30|t9fj-ghr*9!05)xU|A}pnSg1l~Qa7VF$a6I7&r+dmz*AV#i zu?Z3d;M=-8olaEuISPQTG9H9*s+9#p5l`F&SPEtsB#g1=7JNPw|aWM=fd33g|3Bt+2g;7XgLJ*?>VKYoMQWtnNbHug~cc5V_9c{pMK2I>T3 zu!4m>!O}2O3nqe>cnlcxQG>7o!Bnk2r@)ER=IMhb80hs>;?5z^0RRGvXc1yt6r*fZ z;%p-5`%El}a=xF}{1G^knM}WX+K>NyAO5pT)GpCG#<2vj$blG<0FP1v3AsxB`u`L6 zK44Oo_r3QH1F~zx*%gVzn8@ZOmThbUiAhM~i9523&!h7wi6J3rNO-SA!(7C$nvjsB z%2K*-XU=rmZO+*qPTM`DSLKv*TFSOPDEYHy7j$<4#YGel6c$hzL1BRiD+s)w@9%z| z`2(1yZ*#rjy4Yv#|NnmX@4oNfU*dbX{e2|4bl-&=dG|=g^({F)LJrZuE~wuXNa~-v zjFYLBThah=c_i?pIboVgrr9L(+nm_hZgtfMoa(mHJ*U`&-bT_F&u5pM0;OUV;FMP< zrIYK{6QhzGv9;=Wy#(KFN`R(RcFtli+pdR~m(4hd!F3W4Ol4b5!p`tX%M>p@)ysKP zy|`DM%C$^S#alR67B{Bii#c27BTzhlQnaf9J}h!?1)mfQ=zuKL>-RYP0;KiotXR-5 zNLx&Q0xi_rVyV`>}K=H32=la`-1`0t{W|nSph7aR@>1oIfH9ckgz+4GlFtWV6M}nfb?o4(9eOI($Ve| z0VKXD7YT-$B;zQl1k7&PqkDUi!oQ_J1?Ti-(nX)L5Sm-`KyJz3<>-+Z-! zCaS2i_?5rqJ(AijsbYEcCrgr{+#c;BJaNX&9dJ@t6KRYRoqHIdUNR+>T{xBdn%fyDB2)DVKl_Z|@IpA|b>Wz$wX?;v zQn&l4w6K%#t%aV)M4M8xw2{i*GaZz})C*3tH0sY|qt+f`#y3U_*KmjqJOrhEfD2Y?!*&#Wgi%6= z*HZY!DI5{Tl0M-zU;x5S0~AG22XWd33&)-KD)O(1-Mxgj@!g6R0b*&-k2y@dl;3Wj z7-Vl>>}UT)=*iFiNa!iZ{%4b4&i-X606eSgN^J5svn%|en*2TI1lOlur~JL#IPFe_v9x=%!jAc;B7nt?k=f-@kV`* zFIAD;*JerY8U<{&ylj)oKcFWCB>7Ut`=&JX8Zc(NGnM=OmH-bC4ZVo)%tGyb9b!Fm zbW!Fzk1zM2&vPf5-4o=#%d62j8pbK+{8V37xIQQ#a6^WZ?@9!J`X z@ZrPLC_c9mT{Kf|fq1BkI- zOE>PFlft(!zwhVwyj1St9w;n}CHBtu+k9J!`;NPrk&Mg?N~n|oMZJi{X-kRH0u8Ug*=HCD*{?0hF>}6G&qVDq8cs1{A`totKi&;ae9& z|G0<8H40lm5Z%gYqj}lT=dg31oOSM#mpxe_X4jA2iSfumHVtoX?eNZxn0~jJ(c@Xt(W^OQd(c0jF{GUCL^cyoyn6V z`9c*EtKsKz_fvveEBF}-YOQjyA178E?aPqgE+?pUvfSd$Y5(U?DfuT?l_T#UC39TQ zIf-nc6a1D*$zaI&j7iDx1M3EWYMTiLz}}%F&?6)Yz|~;TK5NB`N1_S}JbzP@CA1~J zJW?^keEeL~WI!TfvRA|A^Yh=CEU~SReHrTiibq_YN#v1e4Rws3Y!yjzt4yxOnvm#L zYO-XvBx8f@)(9Up!NzQ>zO*B?t|ODmIx>~tqHYW`1{5SI5814cJ*Hr1)p31{qz2hU zB*7~BM~o;j@S?gXB`S?RPSa}WVN0K?bVn`U;$n;fBL>om!p{_w>ojVPqt`)*D;V+T zmK(VZh`u9O;Qk>R4=0UCMnV1-iCBr;Bc)Jf$EphR7vyig4yc&UPsmqOtmUAL}boaiPqXfCtr?PleDUg+J*Y$rUPS5SQ#B^dMv9 zpa;<^L60nw#LlN0kY{U~qn>hWw@-e)eL7nBFryj}<65i__aeGaPODN!uD89_i{c=z#!uZ7j~zHmRmcZ^z7OpLM-eG3#~3#He1+Xe*T6Rc0@g8Z@;Zi zzS=$=wf0#%QJ-Afuno_+^{l97lNBA(2cb@~u%eTc6M;_qtkv|gq7&z^qRW0@byT@J zLdiQ3SE)l=q!L3=f3+$OkwdM~j|mA!(32^y7Ga49wi?VIQxwZ3^&KX7s zfNHeR>WpPGfNJOGZy2DKtEcRL`{Y;Ir=yDxGpYeGu66q4+S+ZDCMv*cYEprTR(&`% z$iiy&C@0dG_F1c02CjN$16LnftQuF(x5W`3Q<&nWKTw9wA-AwAOoZ1K_T2ZZo&l5J zUE8ig`R;Y4g?-tj4_gUim~M7469Lh1VSlWcT&L<_VXg99$0~)~!VdB?Tv(G6&UH#U zG&}-^_{kBlPT8|-Yhh%D3p`ER0<5TJlNGHZk`--HWP_7IKnPO>@@qA{tmx5uSdp2hj*6IrT$gg@kLA_>|DYW!o1WHVhY1qMNHvPSA;1->=t5*>XYhF5mS8Zkb<49 z7TeuOZ^JvqKQ2;2w^&U&0Z9j-=IG<@6o2B<+pUBF)DK+DI#-9Fb-rS9ovH(XvdVGS ztdIk!7Jh~RwOFNcowF>)Fh#4yIL3c=Z5PuS0@OOqEH<5#jy(!O0MtAStsby!22g|i z{0#%tPW6K1+G@;(~z%KWJ6mO9~NYa zeH?Q)KjAMv16;+vqZ(JQvc-uo#oOOg_RdMauu}8h)MOc^*!FFU$tWhjcF-;CNNHjJ z)une?30v5|wV2MG#6XJ=k;R`7$-Ju?*4FBWF-a&C$#3UpxVFpr$=bG9jIHeoi|Jm> zhdG$VkT8y<`{EppF1L1-(z9m01mkY47FsFWA842SF4c|*n{3nZ-RppDM_9=J_;DmVMP+{Bw^|Z6cfm4;CZwR-@|39dN?kS4l z{39Jav0NXAC%*2|XITjYr_WkU=VD?Eoa|uxPecMvss?bf`g0xCghFtd%Fhs-rt=eU zsq^M9h(e}}<6zo+uQk+3s!T6f1B!t?pRI8pb<4z~X| zf^8I#_lG<6Cnn4~{mDerro>}g3qu=dJ^z?Gu}+%f(>7LS0PqVxb9ovmxlW4Zm&>!< z78FL&v#s&R@yN;8JEj5%jKCwJL{13ylg!;yF5M0gAnXx^HeL((!P20WnJ~< z^RSeKee1z0xfvqo%>&gYYG+JI)ZR7yB0TJD&}0&|aT04G11?tHI^%v*1ZzxpL52)g zBpQ$|$jyNMC_^@PfpJ2UVMg&TG_wWk#f@leyf(+#jyv*kJyveb z)D%|m`~}C~C@}$at~G4J>dU)jzeuJ<8(@`+orjAuui*@&eiMB_9zu*>k@{f-?nIPv z2MELt8Wwp+FEg?9$ra3%;PorXug={N+OxQrK3&ZM8Z&6jXLlAU(wq@jbApUn(tMfo z=m!>AI&gFz-TlkYBUy6%CFhYWZ2kXs9&uXC&_NXU`e#gHf;fm~a1dd_w0}l)3eC_d zG=o!U2B#1fP5Wm=N6-u%K{GglWQxZ)_6q9=TIRN?EwHNf`}+W_3(eEON@j%@m2T

fV!VfLBTTl*!xHk3|?jsiA^ifGnL@Yc1>BJv?UFo(r zjHelGj|MZ2$Q?$vH(0B!iQ1|}t;fDGK0n)MiWO`W4Su@)Y-Vq{JnrTb?msVQd9*XZ z#_9*%QLWtb3o~~rcBKo#nL}iHwZ^Pr{p5aS?VhO0^J{I``EEDnGlfomB+UQ)*uu8weog>O)gttHgq z!-d!GBcw%iGL*YqkY%&}Z?>SVmtEEO7k*3((8P2AO|R&7R(3y&;Hlfe(}gCun(F|+ zi{R-@;pD!s59RRmm8dI_uWhTk-2D9WGyqcqhyB>Gl}7I&W~+ONnHJDXW;!w zGo|>d-}?p<+HVH+PX^f|LH$!DHg16ITf+_$6IoVObV{hb3;SQE{L_29+^2lRx~DxA)W4aUb_}C+Fu4NwulK@i{b3`FcbM8U zsu>cD*Lx>26tLQ-Bm*_=SzL2?(?&4UR?S5qHEj?Za^5t~VzOqprl!4xa}RGCLQfRS zo=8pGk3BhW+ICs7OMUc#F5{nn^x;7m?o%mDHPb0W=|-|rh;|pXr*iP`r(w!B$oSI` z9GblxA1(v_wC6w;E09a-@hO6=j6bahn{*hbgYO#DAD2H6Z01h`w|sjR1>w!lNg-`B z4Z-5O=1FM4TAEKWSod(kpPW;+11tC2($`l3pk8iF^I-8ZATdgGJ3tR!?luhMGd~h{ z^CqTpvk;@k^mZs`DG9|CEP69zj2NSbn45?H4M`ay*4QJ#Rghq$_D3QD)hVkEFN};Pa68 zjU6zT9|&nvsKYAO@Fk%u;Zbgd&dj&j-#&#%RG-OImkW&0=Vy@>(oj<4&6IBB@*wf( zsc~NY789-xPx^hbHE2Rtemznp=Mb?@)kT6zR4)=hZ5)-4t>4PF&#=4Nk?US=!e?+A z)tCuf&zTCCAaKp9J1N{g$^99$Xl|KU6S$s*F`7Az{(?xo=a8h$}*AWW?~8iDWkI)Pc;?oIgKAPH$I`KJnaC`%?szqNmM{>4+%_P!!(Xr-h-q6+jfO}Lncy=X z*TI6o7Xae0kwZNWK+gGf$IJGy1CTlDlS!+(-mSJCWeX-VPaU9m2PZ5axZr6yi^y5K zK&wMV^Q;PlL_5?SL~wu;miD0GFNYHFuOW>POub|AybMTPH<8~@)g6pr;|0bwUlpkm zHVT4`68luY443q2M@jB7@o0aA!-*mMN@+OWc()HJhRPGWegptGgwBOJib;R<(#K4- zY?sPcQK}x9@3Tx!=*a?UTKQx@5XAPNtAX&R^``D{5Zi*_KFyv$xKl85^Fu-GDXEV+ zFD)3Lh(tEELpmC12VoUM93XT_!No($d}w9ctiqQhYQ6j;oayeU`B3*N>*k=O=VW3# zg@kL|oY5dsm->)-o?wsIHZTdxF6ED%ELU3Dlrmw=j5<=!BU)-Cego*+?7AaeGC~T_ zTIHZsq~}mB937UR{uxtR3C$y~)I$foG)MjI)LRGIwH_WkPKH%a-UOcIGk)xsNX&Ql zSnQ(K(0aVcS#Nw%87I8^6B1aYg7byl#P|!I2D*W{S4|yh2Mk+HUSM+J06m)m;Wk8m z<=r7ABpN&JBgYI`GIkWx)ga}m*4F6Vh~3WcS+&p=iZeYAL4;(A8&sN`iV(yqz~DUBpg$$dpx&Yd<3X zkG6}v(W^yg)IXjdP(6}djOPdSGsd)?P((_$jM0QW4~u4nT8Y~`-ESDCgFA_kq;x3f zyh*=9S1)Ji+)$VtiCLEkRj+5WVPRKB&lisS{f|as$qPUDReodPeD#RRCe9Z4ZO+#a zQ+^#1h{dzo!{-(M&4cyaWsKeTEHNW$`tDRz0iH;cWajST;{R=3_PP8o z(1qXQ5iki(<{;!@_*z$k4tCnlFHZo3@rqPN_p*kK1%nu#%g{oG75s$alQHheTGa=orts-L#dcRIA97M7d_)4{Y&=u=m(MA( zdp?m6DY``1M-5&dCn@)$Kz~uF%rcyvL_YM=Zn`*d{iVUaW-#n%>YFm7l-jq8=$f4S#*sTc*#=|}x(Wkhkli*WavZl3)MD|HiQV5yYr&IeBl*&H+Z#T21qwcwQO{?y; z?BSZyp!TUY@Q%AJ!R^y-w@*chcGw;JFD~7!sYy?-R7~+`_-}-MO=~)fv4m?nN5jI# zgAJ>59--2j&LBKxGA z$UgC@*rywQn>GF2fY^$Cdh=&2`=$FdPS#(xPYU6uTGMJm;hNU+^EbPu6X^kKI>|oyDfa1@%7-=8cv#cviY%__JVKYO=`2OU zhEqE^h)MrcNL*>5>$@qrG6L((aCgaH6{-K^!_^no#@* zt)Z<`N3$k*$UYsgkh#fbO*J0Ybf-SWH5Fark~JMB3u`*0oG2HOg&VWGBjKlR!h3&< zHT{2l#oFzN+?)-=;(rdqHv2#cS~z*%nzsy(J*+s z?b6fP}CdfC!eT!zXn!&t6}-eIs#pq_*V%3(E~ z^%*RGFQfBjhENuqm&%e8Ky}imp`Kgpe2{(BYe3AYjfaF*cbuS~cc>QMoTntRsxLQlq-=+`m zuWOsG^twnoH55yo@3JlCql$lejz6!xixS3eF3AIeKMXkB zC0q5|84ehjEY&zV9AOAaE_CP!FPxrfu>u|js3?KVJ{Rji*Ffr7V*IVILn3;#+***e zfJMdgg(pBDRIgdkODtam-wsNKlL5d3x9X(&gcZ)PxrZ!^&47N$PVMvyRv>qdUelD`=Z z&-$^i$FVB+O5)F2Kmq!Zea+zlw-kEdxLtjw@JO@Gmpx$0c6IS$^%a-yb~WQZQ%Jd( za8a~Ozeh~+)Jw_1*O4-M5++B5B`3Ew^jM7-uKp1Qn||MV(>bWA%da(vg;{=bVi~1p z`|lg2XYapOQhG$ZDW~-8SmC4t%H$nH?@2s%$Bm~4mklj}{&YtI@uPdj-kWdkzyAT@!%k`N=kVI@>WZ)vWd<$K(?*Q#*c+WxNQ7* z1SR~1{C{XrsS1$e!L6!G)C;N*v@^=tD*a>m;av{TKK`~uJHa}xr2|;w}tPk`;WBw z%KL3*{vB=ZQJdYa*sn05ud^60XfgOPz3R356W`skGY z<%7?u%=7mr6ORlMGvUjwL4LRF*9wxY<#`p>w7*kf8U(72U}mCazw(B4KlGedJ1poR zWxpB%RE~{_TSF~_YDBHASHbl(LckT|hc=4s9HmUJV*4D~K;8l69Uz$q+eb(EQQSwQ z&i+D`TYl73J)}bKD>im-bM-mb*gqz#pCoO``XBsiTTRtFk{7msShro+)KqgK@z_S8j^PViYPQsDC%Wgt0Dp@a&Ul^zv zs2T1pR4*Hfl_AQD@MF2ZziQ4cao)4WI!io$MdGo$M=jfTqu0By)~kVkvnBEP%rS|_ zzB0D=KyA$i0^=CL{fT7nE49g*CkbCeiEG2`u>5<7nn2WbrAowp;(|lM^(5Rt%{8#3 zf=uG^QHjUytY~dh;_=&Q?ar}brhKgxynP&TiKyTJ0c(-W*U(AoT255dBC!)(>|o-t zAKcJ;sFs-PYvAZV3~S+ZZsw@o!k7Rqdxyr;cBuJ%p2?_QbgJvutM^q|YRiK@0yRRBMZ{snM( zl=%#SL2j73<`U7I``(o>A}0|lD~-2lvTb*@>oLg1eCyHjnqdkSpc_wDEgHRSnyC6+ zVXqKAff%EjR5fxyD3q;fipwStw=MDhnxzHH5aXa_g*s zhQP>h(rztco0W*?1GtoO_jw|f?a+0exaWvS=I%-KzIFxn!nB4cF}oha^>Rj`tOt6` zdRQxj#~l~LEc-NV;wRGSWxwTVWpSQrQOToO=x@Wr^ z6{(0bK^B=cuKS5KHgJnPk&*zILC9A4=8MT3B-TK5N9aatgv1S;Kg7ad{lyW$S*~7U zO-8YyRF194btUi*mm|;JOD`uaz5LX&1(0B28CzV3sEB?cTxL_j#Lz{0Gq;BX7kVzp z0ur-ZiC_}dive!KS~DtRs)%_QAs}Ro)^xauQJz7vKkvGyS1aSoBzunmP~pzlMD}e6 z5HQR`Oh?9#Jumxh@J3w4+Y}*#T+BV=UuWssMBDW%v8E@$b!=`f`&r&qSA+@ST9bt? zPNJr!+^p-8y@$sn-IfK|<`YYKbLt+b4f)c|tK-COB?dV=VEYDy7TED%7JJ=^E1g(l zg3r7i$a&0mCO(Bs> zG+{1ebce(mhqNWrp31SK-&s!RpVNo;w<{y z0eZSi#+&h>%!H~l3JGXBZIZ2(4a5%w635$&2&TmJFegXV;D@|uZ_KWMm!47dxT}Yr z8Kxy3#D*{I|>QtAqA@*Vmz0)0QoG)id+GO*m zzPgz_Lummx^DujbJAx?96bHb%vOUHB6CRdyvI5Yz_&<1J2Y{}&#<+$E zft+Nw4u*Y6Ww%r4u#Z0#%k*d~AJ`Y@+q znOJ^^G=#@9{?h$wFV(P(a`Rm|ZBrVmESFJQEMKs4MocRfl@OxtWHi~Le!503D(hzS|Sn8)LB9y?NPu8+TN|xK(V%T7+fos7_dDR$^hr`f+`G?y$hgd z<@=suMt3&l?EZsg-WA#icjs^Tw5)6`?F(mlP{WD^gFd34OAl&>{f3k1l1-7QBgzD| zyab-~KBxp_;n>?YK+tKpPV5=CFwS~pJ6mHwRrVg900hp_&-|^mg7~O_r1~ZxOw>bK zD%%&rQK|vFixtMGGF^Rahx8s*MOB&;xe3T$d&NaHVcAXo;>!wR(=vyaf$M_chq=FO z7Yr6)R;%);JTS5-!zhFb!zu(y7mq@=`WS^l4gH%>Zr%#fMD-P`(>S!eh$Lzpf}%U~ zx1w@+E!uVt)VcphjVrgRqW@e{Z3+#NG=*8i&bndRvaqQQta8|SCMOnOuOZ7U3S(>a znqrN#)dmQ#l=S{@ovFM5l8eP?y2luz~3aKA4dBQngh@~6C*p} z{?dJFA!yi)(E5Z_df&Z$!)%I`)fzy$cUk+Jh{rXz7WXnJ5hcssBNO~|&-k0KtirKF zD!oy^g7nD5-@zVr>{%l8%TMq8#@U*x6e7y$jrtX&2UU9z+Z3b+woVvD-hEzrqy0+v zs3~w3f^i0Ql3I7`<4dEGo~AcjgK@(UetMhQ5QN7~&EHRNaIK95=?!WIZxqz!X+F}s z)kZ3|El6)uGxUJFD(EpB`=(U-S=EgR!&G{&^*y%POFyd$b;C|ya257@>C>*JJ}-U2 z<_2F1h`MUB*mn9z)id0;{XzPms%1J27Sr2Z4|fIWJ+4AjM>uFKyWgeB%RGF>idKDb<1UI@}}s?SK4epE&+ zkzewcq64h+3ahvRviz-adH=B8gJ5+u+J1&EHCc;`3>)kcZM(6#>(2ZQ zwLS;C+q=4(^^OReP1o|ev2jFsy=SQIS}bHncu&@h$%(z!A}~GY_r5&=TaxvR>Z)+y zXa_15`?$=qp<}NB%bT89Q*3&5iLs)+mVX4)cRDq$ABl!th&u4k$1h8qNUf??O{*53b7WN-seF5B`^J= zgUpj&daIyFEVJ~BsxOF%7O;wKDws;yC1{XEcW}LEMUZ~MRkA)vzwA17z)wG=N?3J3 zQI)toq+dRw;pu({o?L#pqow=Ys7yoGOK(vfUK}m8biZ|!7Ts=1#pqqXGGj|Ql|JQq zx1Bf@(LFWY=lZzQOYd+U81&NHt(M%{N!pzGTR&2Qc0avUX}$;p5!`zXx_+(j)5onL zcNJJnQ50IP_Ln|s=-FX2d^Py#jkf3Vw_MHfg}GF24j~G6XblPzdDJT|FA3O@Ayh!i zEAHkk;eOTY8D44)3U?uzMj@<-qMp^0Ajo&90|9C@Zc&2gVg4X~z&dDvUwJxDb}IC+cH$PN}=qEhKz zEl8kS2iVGxna+g}aO3t|_m{rnw#@cWKP1k0h7A>Pl>K+vPQ|vU(lF zo(ZzYG!1?X0s<2PWX0AC+E@%;|8{KjcC+S2&MR<7#?>uzMdtn(FxXqDT{d)MQ}$@@ z!7(*`$;@}Lt6Sg<0nSe)Gc)-p^e%pmPWHYrKDq4G_>6p0cU5NQ7!iaZe`aQ0(UcwR z9U2R9>*^#tfMiX7Q|6JeI#IS3GBc~~XercWX4W)i2YQF7=Wtze+5SYbW_?rU^AK}& zW{u9w#Eh?gU6q-6RkHWBYm>|N#b)G3)ABf}en5-L%)B}~(mQlTvbT^(E*rWnS<};$ znaNv3{TP**$<0!~uFTA=>pgbOvO{Be@($jfAKjmsd5x=LOlIbIu4&^ac5UV>6Ecsy zyZ1=#vI94&|6^))W@cXJ?4idqGbg%V@5;=4Pw(OJ%l60fqyKYe=Jif1kU_t={nzB_8!L0A?CYduyd@%SBM(CGaJ(``HoMT~<>vLpd3phj$fb&9%1QLqsXQAm+p zikzUx>y{m&vM7Fq;;&b{SP7O@oC~-hUmBHUW_%bUzBnVdk0I_(THOa{q&M-{XA`~q zVLi+kR|5%PHXMq3Y0Y9_S||$k#J$%o+fQ2-3)4ceJ;dJNVy?G{_QYeK8CA>{vs@i| z2@*fnGA73;qg}g*bIm5lp*?ERdKD!e^Fxlw9W<`Dojr7%x>Dk?d&HE{FfFNt0?oOF zqX1`UqPA~yGm2~ySuuw?Vq_DMZ=e@(sM>2M+50-gTiZ^iM7e`xkkT$bka;%&vm_ga z;gq2UsNYh(TuggOcqc`siM$0t+H@pP2rInP+#5|T&24SU-ODT=9vjkYh2KQ3vG*BG zL8lpnBFwKB^n!9)Trfm*q9);uz)^|N21Fmm-a`&xEZhbwR2Ps+^nQA!5z65QE5Wps~F3c2! zT8#5U1yIX=VcLFM3A||ml$XsdfMjMNV(2OXnNdkR?jzO>h<-Ult~o9h!ZFpZ)LSN* zyQ9c@(Q6gHRL&R*+_AN6Jw=8Q1KDmhbKb;;p$Q$AHc~FHR}Ar6jnT2FHTU^M@8K(= zN!VkPpvx)~L4O#GI_{<+!-7J!jHh0w)uunB$2vQwUNi* zG-%oPx>*rp;515B^pVl8PsKzSdm7rB54jh|sdSErClwETh@U|J37OXtNL02qmfj77shqfA$=?Cd- zANp5NQZ;L?V}!UDIo=kHDc$;hUssq8`+;9{kb@thsI4s-6~QPNf}ZeU4sCEKzGWRk zIha-3+(~rP{9u{81O_Aux32$7N5)Z$n!aRCx*UQ_|&hn&@zsbZ(a@b04}Z4y;r1lE_8 zU>$XZ=C&8vxB#C>*tTt~c(??{&@rW6_cAD>rca`30FVYnQ0MbpO3Yjl$3-}G#%)At z->)qX*;4s|CNguf(pQnldyJqf+AH*92-g^w;6$gi?KNH;t_8i*WtX8-Mv^BVk>JpJNaxw5A;D)dn0~dzlA`5(xxgZ!I%@IKXNw_n> z*Xu#-HSg9tmQXfwGOkX9e0CWK8Ewi=l^v(&0)%UD35v>bF!dTV9y zhG#4kCUvFeO^e`KwQfK-bIA<6J)C7?G-cuJL2fdRkJ_fA=Rz2zQ`-W0_~GPvixRZW z|tddaii}m~>atD4grG$Z|7S$G_|LV0Jq1jhqXKOtiB*U* z1~TA;SyvpPm?z9G04w%aKj~WpERbh3mAG{!Cxdz(e_8+~n6Q^D@G$eDSCdBv_IWvN zL+XQ@3^5WSaB?BowMeW%wU2$4YtwCvJ+Iw|f_1GY<*cy`QWL<=V&%+V#c5{jNT^a1qsp^|=G+6^h2G#UWcRdG z%#>`Ka`Uew7ReEdWox%m37%CNcqRHvpE6omu2VO|qbv%!_F~3?%m)c9k zgXrlnJwh!}HT|pTwq%Js78CVAnWjgh6KybNX zD9Ge&G=m8Yg@n1=G#k){*XbjAEiW&sA5btqd1|TNoH5e8m@N1e>5@-kj3$BH^CzR~ z`Xh=ZcZ`QygZv*m@@G$x4BwC0kO^E81ZVd^stM3@cbqwAQiP|!Js2bd<6zKl*ad}V zd9j8K>?L7C1O`;mh*flLbx>sSAqiz^@sM%nIL=GUc!krouI?-hyCVp@hb>a-4j5yS zT8YZBwT;+r2vxLP$CktWQH<^lmYS!aYO`yA%U5faD_@6(U6EDYC+iCFAgF5!b+uv? zB%BlK5`d6ll`?Q3iJa^1Hjr(ri~Jj#Gtgf~Y2RJlz z6lAAfAQA&Js~u6I^+;~WxJ;OF!f*y;UuboGT2l!J!1)j%GNM(zX>1p0x$wF^i4V0z zk)URLom8w;F{~?Q(9vsIaD(9VfRRGu#!U>TJtcl0O*_hODt+1!zV;BIUoayanRPD_ zM)FA?5~T;@NANBjQFI#=U?Xs)pSAkI(KvVv%^^qR;H|XM9#L7-+f}ztEk}XHmXDV{ zuX-5*91c4y(%W72`%~%jsyBeBt!vo_g`NBcD7&YONR{60Xj3Os>64B&3zgP*GP0{_)uzJ z+~m09G_$Vmg164qW*l31yXnp9p6H_SkdN)y;JjQSCd2U{ebV*Zz(WER&LbTYyCUja zAG|FMO0x$q4pgNLQckoUCQdt7a0^TFBcfqL6#ht&vtZY8F(c7duZ0#}TLkHd^6fW( znt3O<8a@GY@e{=jS>hJ!@gvA}D5SZk5`Q4DXH?Yq!|>KZ+yh=ZD_S&`c4n_i#db&M zB{;WOzsSNymlj$XAag9-Mt=TJwefgBxePZzzwC)PMOH}0gu*2RN#g2O#M1oeYg4iP zAu0$dt$yrm1t-MOWVw_(ln?7T+~XmIc2jYW|H4n77HGhBp0A;&FBl}o#qV|(N9zEd z-vY-ngkZf&a-pIGJ7$M0IdNJ=FvJBGi?!)Zu2v_vlRn`#&8bxSu-i1}JV(RTo!fCB zz4QsUcg_=GztYbMFy!|VT6PhKaiN+$5Tu`Wu9^hfdDc%q@Al6LKmD}ZKd%Mp zw;dF6H{>0;v&df95u~4Y`-y20>34l94oj(wYstnj?ken%AmUK1oyR-{=^<+;e&6zt zb?al3DLvqt+!&-ct3x2BAYE{cpYzja!=b|mf)7iUMIk+oQ#@{>{cf|Ib<}g@8_MQjxpoE% zH{e7nisB4heIoD`<&_-lh*ni(RA{)Yh`MsJjg{Y0*MhF`kzfM4d6I-6TYAKSGj12d zspfd##Eg#0)0}+{Ab7AuoEpqfon;)mJa;a_%NOWK968!6n>;5g07Hfw)vN9z{F*UT zbVixj09Y{-a>`N-Y%UyI8+Vr1uUHrI(F+k$m_hHr=f&y;7EuRu%o?6F$Aq_nm@&OW z6b2pb;pHxRudFtz$~deXiN}eF6-T_%AvsQLiH~X$^rR`KuXDVb5PKB`CPuzzl%fvGOH=LX;5hrI~@4hiLy~)hoqeLYzPR?=1$x$fe z)!bs-BYlbjf`uQJK^@VG1EUL~)OxL3*dUdp`s{taUOz{^R#&vAijGRgOI z)YoM`b0e%AacRm~IVJtj3Vk*#;ul6q{{&_Z{$|G<`(e?lXexhSmsFFn{@_2u#XP@y zP!>0u{=`h3{LWy=9|5ohf|X)jP`?lZK}o?uo)(E_auWp0U!4!-bE#dfP3MvE0Wz zkZ_{#J`ywvOCaV<;a#r$uvL7TifgSihYKe*YZi>i=+v}T{$-0a3j#7Wg`TXHJ5zX) z1S)Q!V%1@>Ckp@MvQKrLBcUbC-r*{*4Lj&M*BVwXYa&*8dzkwhsvKT9TB2davx!MQ z@d#jakv^od!4JvqDtts)E^Jx!hL;bm*eRv(-mos0X_OFLc>I#3aMp(4~@ z5&CgO=pQOVoeJe=ce!pB{*)lf#C!uPCvgA~d%mbWcSnSrPhZMd*VSq3aaN zn~9IGBV#JkPj8I+qltX2BDA|A^h`zQ=M|xUt_b~IMW~}9^vA`JjlURD>kBGEb1Opk zRD_Zhp^sLCK3EaDt|C-Z5js0iKK3^%LVFd;o2##I-kzyQ|9M5|pDRLtR}t!{2>o$I z==&9+1r?#W3gtVrp~4>ARgwOmDncKw2-R1F##e;KRD@3VN7dW=v6`@!~=wx5i znC9TsiqMXV(8h|;Pb)&JD?)!$5&Cn5fTq%@mQ$6q)Y*rcT6i{ zC};rR6KMbktB64T7nRRYZx{{ZJ5W0Qf=SaL4MT7OyoGzVP9+_6sFHY~(6WNbJpEas3tlDI*xg>0m-l1xs!tz#h)SC4O*C424`pXEZ zhtENhU3C-{Gt_GkAxzIPE|le z;2(=%a3O)DTK#c~Lw&Z1MSF?m%}8hVwbRdzc zNC@=>DAWcq;@ZB0I6Y#;K%>hww+oT@_ainMQbL<^58ljV!;d^Ds1nXM>IJg5CI#*{ z>;-<|y#&i~6dZ%+SRIy>TA5OK%STxe*q94n}{h$+iJ#JJg0q=_r6t^JqZq1fN} zM>ip%Gbk}~!b!!YgvgScA|kBB#alyCZ5I*sV|it(E7u3Se{A` z*}}$GI?4;=;)6neLBlURM_WV&9inAOM8(Rwv`x04V2*vZ8;zn7?L9EwM0Fv=; zbM%D57JmAK+ar4-%4YgGw^dFQ>8@uCW@8Y+;0-hB5`#j!PAU;dBA#@^iwLepWe$br zWvOA6!+J&1EBuoZ>9x<1vN4A-yUXPZm62>}?i+L`nxpN$R5Zr`-CSw}XCes@sSyew zag1uRTA6oc7C>j++xuEAH?i!7-UDN5HYYP*Mcx7={u+|2 z4aE^a@5;=8$SUIH6`2_jStU3Q?t{pB5F%?|Q|8+cSxtC+21Hh!KsA{e5LuB*M_T>} z(((t8mWLSo`w&?NNgkb<0g+X|uFA}S$a)xQ`TdfXzcVufA}bS$wET>#o3cG7F8>4CK;C$4tcV%WkZ*??gs{F5+8P_{HD#L%TMEDVgzIxgI zB{l0a_d;qN5vg?sq*f7q89AiZV|9(0AKqAY)yCvK{sTo{buPC<`t`}06V1~GlGqdK9Up&>U;1+d4AE~PwQ#?qf?2F(1KaTecxO5`c$3@b@xZq-H}A? z6^Yurv1uo}cDw<;fPTT`C7C;J^wxnU`G;6QF5%T94EVh(AZ5qBdgNU0xC+^fEBtyG z>-UWJx4!1rBklKviLiyQ^6Qb-kgV6Do#0c@Kv3Y?IJ|5>n$?R23pZ&da%2ANzUZ+s zvgisNT}_?4q3~Zms|QL&f6MJ7Wky$3WjnqjgX6g|_k`u`oWCNKyT3Y>yBi?MJIm`| znV8Cb7nfIZ)`2UHA%q`fgx%a;Ij2S_-fs&QY$YAvEe9mu!==SJGisMHbMF7+^C|;- zjkEHoSNEdyWaJ(Q$q9JPxWd504K81ho7)@IZ6aUEp%GliHWkJz3r)*5JYqZ6HFf9J zKvo`BS3`?5gHO~Zry1tk0~yK}gF5UNw5c2BdIL$nXH#_&{!$b-yUFaksP!k=K{h}f z74-=1)@`FFCBGfcnaxu;v(ctLz0x&`;yGf8MVCABTBF|KwT9cIIi$iZ72^IIajJ2g zL->^U(+C<;`571d`r%aKAGdrIfgl?tQjwI#W5=dgfWNq0r#edTEJ1x==lh17T2U2f z{k4y9cexRpn24&@;qhl9vP*Jsb9|gvzXvV3pblLl7b zUyqD+uea>EDxCW;5%n*^2gftX=-a)YK-_ZMwH`eI_>e-Z40nX-E1QLSF3vU)Jm731 zPJ_TcD&=!pm2w+p>i5cxk9YdTGApb3s}eqbZaGC$NZ(3EDR27(JlMcy4}trv*KpEr zxZo|=cvEV@Ae#$WWWaMD8*?7(BP5}(pG~P z>41G7V6e(k+Sb{JesRQi47#}Ge5|kGreQ1h*-izWv=uB*#|R(54J#d^@4%nbZA?4E zrH(FFM~~IPo`<>By_kSN0L=$uys+uj+_1}9CDuf)+jW&Osg@y^w8B34|Jld8S(^o5 zc(cNz)WKA|bB=P2@6-ek+UY_Ae1h1KR2_y^_F_Ij&Zu^e!}wKDe*lS=<;pzXjTqY& zE@X3p5{CR1p;XOglP9TE{Xu3PUvVY{AwMkW5=j0IkVZ+Nd!E|D$OAir zhhDpdR!$@op)zC{70NoB_qn#kWMSr~YAe-q)3wIUa}+STT2}T^0V=3N*-pnL%FDdI zGOC_@x7pl>;bx%@6)0>xc3$l%#W|w0rNjf6MGV1|r>8v%#JgM7#a!org$y8(r5d!5 zJ0P-!pF30mOmM^iYT)Zb$tNt53!dReZT=lqwrdVLYyzVBX@r}#)nm8`9^{BM7;~JokWkogTmzv2kz9KAFzn&1GJ1+Rrc9ZyJxxKa($2@QyG*_Kmf z^xNT6hr)Qi_ zAOl{bH;o}_&1G>ZxE9i6bUYY7;CNsb?y$jd+mRNCwP<~FZ5txB4KJ*}!dlZgNoDNO z*DL%@zRB|0@WyxcD5FE-Abt%qh5yuL+dvSurYyoq7U2}a?iv9;)HEJKHpcOth6XUx zPzPPr3eeaFoUTC$KZ%U;h?OzaO{m~PHl(=2{2?OejxpXkEdlE~ENpHRKvCD$ak{P4 zZMFNEUCjU}E_5s)|C6?{^a2H^199f^EQN?+JybW7M8_K@N5>S<8?!Q%k8^dldrV7T z9QS5RoT^tINzBlrpYwK8n08o*1dC$Qt>R%#X#;p^#+X=lgg|!vas=WY1%^OuE@B6T zK#;HnfxO5QAyo$zdr%@}?~FruDT0g~4lyiL#3A5+>y=Q@E7HZwuGAb~7Mmd87h)52 z#1KOTHnE$I+bII-UxrQ4?%7?$CTft`QKcc&M%#{;jTFEPxP?snWmD5_{o~{O;^Qz? z&zX=nY~;|1$%VZk3?XlPy$Fm2b(l~r=r#(Dd6`Ho`n?P;F}lzZT}TSR97>wtlIOrB z)~E5VPq1r>xTHVAB}P*+XRJ`pQuQcOVoX6#g55#=dTxxI4ky4RIA0VlacEJfz&*C? ziuS6%;LV#bO>|E_^#;~!QbAQvhYH;Wzix*e3AmoEL?xi!OHc{N1@1yw2Xw7=+8T1v zwaX%gPO%oX(_Y=Zwrp~UR-SfYW9q1sAI;cx)h1f*u$l_Z;(a%{qlw6sR*UWkfp zkLra=_gKwmB@FwkOnO|)jG~&5m!{;X$}yHz-vTYH4W6_=68&chQzt-*YO+`iAW%_ ziDQTY-8PExZcOoRw|B6yy2Ind(dpvVpZ3w-i*72i4FWaoD36)GR6VPH+8r=B1mBKJ z;HuPuzMBG^(_VVO*n3{rhZJWJGU{-aIACu0BD=&u;(3lAEd1IgFNX>{kS~D>PIGtG z^HS1Y1Uk7VxRoh~3Om!ddRzn*APde2){SHC<90XDkq~ZBn?oJHb4yUc zdBTCJ${cuvP(c^TgBtClFI8;o4Xp7_Te1);^2=SwLB+mGsMx{|?&XkhP_cTQvc{cP zx$&zVRGjeZxa$}m04iRf02ha~4k|ireDSrbtcgws6-WI#E&-x2y32`B4O$lwM1)8u zd_BDApkkA7P8mpqI7WVwg(qH;16+*82K5`@!g1%=3`jf~flmdNt3IgvKTh-Xo7oO+)j-~mo|671WV|}hiMfaE}9cc z8{)+BspWJVGJ7EnJ!Q>+FSc~Pa zN=>%tn5qz&dBBzKy~5gD^0c(kal_D9Lu5fnqm=%I-8bNf*xORqhao^my-$tr?y?f$ z-nTsreG3oV^6R1Np9m#EJ!ta)PgacvoS?B0G9Yk|Lo9t+XQTUu{IW{iUJumB+x9N* z8tcQm#s=LrHgT|QExT)Qsj$07O2m=yuEFWS(bhIg?-P5b&fyo+JC9Fv*BJeTyK6{( z8Clgy%HiZ3&0)`?6@~Tt&NHAxPatpsLo9sJoGJY9R*^cLOQ&pGE#+`TqT)Crk$@GB zNUH49Hte2B`ly~OMI%L=<@czdJp9`g6%LX6k_rbEiDwhlgm03t!uP9VNXxwTsq!BE zn-$O%TC|dD{@o=Phb0$LvV0Kth2glRpDE0CHEUjEI>J8AeOAt#5kq5aR3uLXJ^K6w zXD)wdbN4KvJ`r-u9({IabC15_osFI5_M{$tcCyRoJ5Im7y1f@a`s97x;Y@ZPm|Sql zNs3b%RRuC`eSFBQA{PLZH5679db!*n{ErGPHWS-Cr?P?iHNY9MA_iF zFN3e{lF!O|^;pAtlgZKAOShL#wD&SU3Gewz%6G2-o)JwJtQ3NO(H*~Io<<+mnp@jW zND4H%^leMk7ov@xTiI$U`&0FpXm^C*oTCbY+v^WwZAO$&nT#f%{M6S&8t4zGL1=Bk zvrt2K`XPxmfgRCXM|sQoU(%Hoj4ab;Td}Pu^YINQWJjf;52j7q-_l(;RWbkc&eXKM zsrr8Xoi@x#q`%Yl>3TeEpEqq+ildOf)6R3m@fXIWh(5aNsF8;LRQ`?_M3q*?&BGTq zM_b1Itm9|9`*{sNm%E?u=I082x(astB1iELp9v7zVqD2(Jp#(uBqG6n?tSHSstU{Lhcas|tU`pTv#EFRkGBaX;FIEsG9$pCCy!mt}O=J@v}5@igLvsFXr0b+@ok*^H`zn%`0$7HFL6Z9eJ#n>yc&{ zLf@J>I?VM*^Qy#SGyktl^V59dndX1w^MOqBGkiv6npg9w&opo06U#LJQ{pjsZkd$b z(%5=%Nn>Wwv#?W}*LXi+p83bN#(17zkKc&q$GqI4pMiJcem!rWqgQx5RC2R7_*)PA z_0P$cI$1r(9=-iKtl2;G?+fGp7X^pAqxBS#+eo1 zVf`XKEc)j=q29aK8mDp(FQqxM<4%`DsuK;=^9Zq8jm@;xsm_DUUNY&VU_m^!LZ`x~c0HwW#;2LiL*^IIW9tNUhX3P!}^xDG;u2Kb_rVEPJ zkKYJq8v+zP(|yp0kC3(*3fiPbjdI=SRi9i8QX58~41?BB6g_La3rq)IlfEf$NaIfY zs{lpL$d;JOCh<6E+Kr>8C7~O^=GN>P<9M4YEL3bkapAWyxW=aVFEdM^iU+wd8JURV){Hx&t>fiRShUX`Zp1hZJ zutxGgbNxWFez55SGe_}1mOM3xh{9ma`U`lBx+1wwPS%nQJ>>K0ayQ)lnOCvcNFK0+q13^*kUDt7ug4+BS0=I%uJU-$!F2Q& z4BuogGpG2xps`Mo9Z6k!e9(AhnSfIYA!T|#A+Gy_sx-av3Yjth6MD4^(&kcdaaN>HAQ~6m!W%6=;ArVA)xu;_6KX=r?$<6 z)#`VPV4wse7ugMw=bZ=xFJja{gYm|9Yb3sGiyqef@-&Gs7T}2Rkh5DEwTf-9*KAvv zYh!F0Y7*ksDIWitBA5xh0J-O`$FyRfd+uL#JC>7~RB=3Xl>>o^0fcI+?wg_`tJe{> z02S7kv$uIeH>g0W9^U17zX1voIA*QJqY8{ZJwOq;?`YT<)bG+mKs|wzpY2wk)Tp;$ z;0^o*1r6I^f`d2S!Z#3iHcgJbCLr4( z%Xsa(9P$Q42gS$dQbz{3tE~1l+zfwWD=r#Di|Ti7rK#EIh;6GZu46eL-V~8Qh#Xak zVhKmZQ4Km8UD-K&9K!+PM3;+ew@*h#pPWGejff1-ECyoj=ckiooNB#GtV+mT0A}xVhW4J-2oR(E#D_IREDnpa%8lQ}NX{JL5xV+qNgz8oGy))~Ytg zJ8osJbBaQ+gt^vWam%YiFTjaRBpy8q_@0AOVe^EvkaFfayIcXgO~RD7%JPjaO{3Oh zjD}>NSSZGwlG;o-w}oalk1VP2c})qSsV>x`4+v#^hXx8ebiO{JgOPZfM~Ji`m!?G_ zt=1aZ68$7&sdvLH*l)kxvKuWkCvR$^>Iqxt>argRlm_M{mBY>dMLOi3Gp?hVyX^B=>zPOS3n(2R-4W(nawaXZ8e1|k>SPw+Tj_1 zMP8sb*GF>`Lyz59T#x(0TNYaZmR#|O6}KdAlkJUn3(KfsqyQ5GKqC*uog(wu(2c$a z#@zsRhL8%U`ar6VE$1YL#8Th{Kx*9t)$)VP8c1IN30xYaFlJ-;OSz_ZUY=Q2$a;zZW2wr+S<< zVuU(c2(jB1Tcmr#=0Dc_4+weT3|VO?=JF|w+M=h8X*`Q4FGP-O0V`~X1YSg=h2FBW zAfERuWHdxfR?H$)eh?x@Wf#_f)4)5ur$jbDNa!O#F+x-j3=qH8og3=I-k=@>ndc(B zg7yO^CMOIh5W;HNx0C~|kk}4C|5>O3`}KaWhb+#qv|!^KvO~z>@ME57{FC+U0l%RK z44rByNVKluxYq!haU?aoh*;N+C<*>{1IcRyJZr1$?zEH9#yw z%MUG&s3m5nOJBXbQ~3v4c|*?9Pd!6-6~4)R)m^2S=N?s^>zw3ZNzczbb*Az^oWgQx z^Vo~oUew=Fg1nX6oA-V-9ddWGdqqR|95H_OB`^2hAotD5)gJsBOcKTlLGBMG*J9@D zHb3{d$rBl|!CU^?Ykbr?z-+=cFb;TM0S zcWiSPgd3XED)|?-_(;c{-sAn4Vel_eg|WS9-m>*Ci7b@6YBHwmza<)&A#(zcC}3|D zAeN`(!ryt~@9oX-48O;$x8HKddUor{WMbi$Cs!*!`C2wMxrfBUefKB!;?4KSeljfi z`s8Zm)39>xQWQ2}-HY&U7lSX-Gcy@z>AZ!h2WGm%TVC zJ~E&dQdEt0Ji~(s>(&Db$ce(CO-y!w)8tvjbtiMvzYRa4DKQ_aw6 ztdorU<|p+`s_{M*IDJOFf6AXpU%!bN{U!3k%jpNNtq)o?G=Qa>tnJlQ?)SXhmk=1f zy*8EmERw=sn&cTHXo$l}_lJo8!{N1$GOf%CEEuB;b7$kYdXD3&Lnwjw12O;zx!QHJ zZ5~mG4Xc2=+Ze$X?8`~T+2F4FZw7TwgXEtB$=?op(B1W0RK!Tct}qvEy1}iA!+YG;1*^Fw*-z+u}pi%9b5O_0 zPcL1eZj13Q#%Zt}X%;$C1$F%9gXU+8(Wz6R;H{&uYUi>>1v* zlbKV^WU6jA(4&snvzTiP+;qvbS>N=$3m4ojS_iEYeUOM!b+8}Hh0??;#q&ko+wQ$# zpeiWgDXDg>U=K}ct;?7bT4%oqE39}3D{%e7;e_BIJ}&#}3{nW{S`aex6OV4^VuBDr zi6sGZHmKvuAMq1U!;(M%ZHM5ZPk){TN-vaH5>n|4Wx~tY5dw}}r@+q3#tlU7t@g5a zK};0MXZM&3e`_EzgL6fP5R3<%nT3I;fDnrTZ8j1kEcma*$U47|=6cu^?id;Kcl^|J^SNnqKbqRWEUzIOsIQ1V6Kg{h*nPXm}dFr`Lch;JrZu_QFDXr{NDw|6Xr*P3KF|96sm~suy29 zv}~k-78JxtLytM`FY9~B%TGAOkQr)^Hq#H+Ykua_wAxVx(!l|VnQ5Dx^vp>Cehhc@X`>BT~gInIaNq9wi**6qtP*Ax80&0 zO-5{zh72`jCHNR8&Y3U|vv)k>o{6*Z?3j>5k}moRDl|~sM4`C|4Gk2Cauqng|GU1b zt_Bh_J2U4w&vSgF`uo;e-&*f_@9SN+r-%^)hc^ZFLKSV`uv;HJ)8j6|0KLbl_yK>$ zj*%ujYkz4&SZ8UEF1)u2S47zWkytd*pj~FshGK`%VzcI0S&iALu!KKUIKS5_Zn3|f zN{#s3W!tGm3(3TtDz{Iz_5Zi$3cQ^8n}!tyiNEAa9a3T3pC=1T-D9O#@#gA6#W0&s z!Tvi6OHHN}!jxL32GKy$Us_9@y8H+K$i&KL(s*5^ry|F;M8yor7nYD84Rk~+-jctm z?r#dovAjq>(@}Pf#Id*Gmp0n0B8rbP14MjV%;S*LcM+K+Zj)AAw3zxRu!#bTX7H>6 zUn`@9c;W%ipFZ0ElON{&X;oaKZ=fMVVDpv-Cq|fkV9!ZzBa5Gd5LV`0?9ss5W~5@3 z-Z4SXjZ9hG+{Rbbuqr&tnGMPq;&$Ki<3YFk&+K{7?f%+_c-;?}(|yM{n%-(nvuVeg zwy|)`w@0n9MOa|uyzOHb@V2i%*V&$q8$TlTr-QQqG&m~8E!K=6893+-bEaJRxJ6oYShMq#LR1A z$)}pwA{VjK(Nc>UfDxM;#)$Am_sEXT)Dj+9_jDPLOL=7D*%x?JI3P+C6m60_SaBau z?EK9w!jy(k6aoL>H%I{gDLi~E@*4=ne@vgVCzxSybi#4jPU)M6&K`*R2shyo9pVVb zcm=n*9F9#`6R$YJ)~y)FVOJc{cIpZELf%B~d`)g5kPGe4bI!cJ!7t!rR6gD}D^ZSJU?oZy z+p#XR5(QTPS5?lQ04i|y5*J>HB4Dt~>JfI?btkvW$XkhWlCYBi9Ne;Wft4sn2Hif! z58HBXpDDKU-9GGt+P#45=T@TBKw4I!U{WJ`N>~6kXPAA@JHvdJvQmqztO6v)R0Jx- zKFhF^#7HK>!nyA}_QYeN# zw+Mg#-Inpv5@F7p>Oa{ZR$|gPKAw84@(FSXugJgrtQEg;9>C{JgiilE*?%b+q{v#} zP)I(M`T@&ZupG~!CCNObOh)dzE!AdxauDugvRk>|@OU9B@CqNj@Yq7}yoY%ehYI-?cu%ce%F_>@n!QEj7L zvp^NJK0x55B_+&91DR-Gbu_?CruCYbsC=eKfLZCoc^F6$3?j-97+kt_N4^Vr=BLmA z_PNE))lgHyd1R?YeUbrh51aVy-TsRRX+iEHY8JVVJ$*(k%@=4gs(fqH>v{9bEjq+e zRz-hFbNnaGPK?scxA^wR&vUbTa;__g+?r8f17f^_dHhZ01Xi%y`g_o0&C)dzF6RFEYQy??|20U zqc>Kuk>%g#i zSY$H&F2_=hBaT^OrUwyEl>nPEA5^ur&W(i^dUktp9!ldIfV=tX1C`=xZOKp%tl+*M zCmML`k5VtGl*#hG{(FBR8Ywz?u>X!E&q+tG zq>QJi{TrG42s(utH7E6KEusnFOCc0@G+DgYN88eO!KL8CQ>m788|{^iHQ;R&8%~gA7wD zHN4>yPNG;uU$8RWa|E@e&sLy{Nh%KKC4VQ*9HT`|<>;V<3g~_+&d!Yj!AHbVAb5-q zwI7IS*SuC%$`54T9w(6NQsn_Mw=@AuyKII4V!OBfNzJl97PF)mO?qS9uwm1dL$U^N z9B-^E)G*OM#=?%QBz!_8G2r&cTkUvx;u%Iw@BJ?`zx{@HTa>ENf9e$xqJIyf$i&Dj zR6f>xf&S#z_x+j=sd9d6yxMg|?mr?`}Hr=tW|8b>wms$}Y zFL_V>8SxjN8p`uxy|Kr=Myl*Z3{Ys6%Nq&K$05PZ9GVnOp zQl=Anx`P8VUSn6SmeAnBYVC(@Pj%ZI2_CiC;siqCE~uIQv=~>P`wrsF-j=GoNvpls z8K;c|gsgiN#!(cRSz25~_VcriwYwmY=;GHiRE7DrhSsFFhZqnD{J1)Blc`VZ7OW0! zZ&Abf@VR;GtO#*SAy|S<2)xI>Ct?K*OzFC)ej6vBbDjV&&IpD)rmNBvM#Qz{qK9(Ghq{k=(D=^Ydc$0*S)`%T(3PmMx0;;GK`f2Q1)HW|&bY}E4tl0IR*{v@6U|T5N?lG^$%JJY$M*ap zZqv4k{ZC+Qw~}?_QBB(#6j(*qyqjQhGc;&mHNe*xp!AQ7C96Q6*`xHmolbuti}aD+hzo(4Xk-DSfmQ}}>eVu3dEI1Wbw>!N{GTD?_) z^! zokA!1)r6T2oYUf@S4x>fOi}Bp?=3Df@u*4WyD=r61EXkD+>ub<0TGLK7Wm&vH!-&9@GyYbh z&|;|K{qh+JdzWLu%`=?;Kri`74KUI)x~J+Eqiirk{YQQ(Zn%8^NDe-7DchBjlL)u$ zLDyO4rBbt>#m|XH=iQaSTBqSh%;$qCpw9ZmPxeX+`A`^%drwIb;zN*&rTMFNk zt?dyOB~o;aWoIkcYk{L}S24=yQ^a%9ue@`CIq4wv6vM8@tK54ggMaRd`{FoO;e{dz zx1MWJ$=iDN_#wAZInH+EhmIfM*bdQ;7MeRdh!yx-crt zvzhwgPnEFYW{-fTQJ#J;-|}cj3PDqi3++-kNa|v&R{g5mQdi#u(b}l*dR(q@tBApz zq0i!{$f{B`IpB7p_22ZbMzaSmlKQm8bvYmLDstlNaYQ}j+h$+~3mf@aviND!#m>H2 zEQhIX45rpVVYi{+Q_R;eCy52_AV7qd_GxY#W6fqk&V%~nPg?*v^;l69v#CkWyw2`VV6!&XNdsjRzf~uHQ;d&*s|l+ z71P7~Dfw8RUF?MF@c(4TkV7@#RSS2p=g~S^yiB;@O}JnqPJB$3jh{BtV$+c99z3z|}^t{6Ze4F>yVDeFnGEjVPgoVpy-6gjuMmw(R(&URvXrxIwt)Z5Xaci) zEJEN&{}ICF7UKy$(X+6MJLDx{D@~Ec#WbKL0g_a$&rTzeqS zi6AVGrDly!ClGjiGctj#cH1~DH?EU@y*0;f9S^56sp8yXp+$Z6X5ngRxzcxwNxnxXZc6jHFLNBrC~wtI^;_?)M3y~XQsU$vIywsJ;-<(Q91#d2vxbTpwUR2WP48}BSb zE}25vwwagF{Cj`|3lhDC*7B37_zqEmEqy48?WFx>nW{?MNv*dgcYt8vt$FM*Rw>`nnkF@!rux=&(UoLU5`X^lHx1l8mh`+S_jS5)p zKT?%5+x?%c`TrZf#SM9c+>*ofOl*zEfAf#}zhA-_aOk*Dfr=#eu|CfD?;h41+%nGM z7O-fdxkG#6ZO!>ZN8Bb`Ms2LAMg=oX%%r^2mCi7%b*oy!95Jmmt1M|DkUQoiJAvY3 z_OW8q>6m!UDqGL`2UG6v~E28O@ z*chVZ0Chi+Fy>BlxHNMiG*(AKw_9`NZAn1=vbTJhDL&j3+*$6xdp>em^WxmDQEyd> zG~Q*pY|h+Fl<*;~X^JzV(>iaPue1eIjQLnj7S~Y*b-f(ii!$am_7(JnY-T|6Cnj;t zyA31b-2BaCiUseEB%6uSY2<+`eRh?9eprqGM{q|HBV!4unt-Z_TgJr_QaW`@2Ezn+ z3wy`?_cLb^82fJsUql%U5WkAdU-8(Oq>orZGB`Yx{9;KmI%?o!zkKZe@`r-I`rI}5 zerxH&UoW539qzsViKf3u#52i@L&>{`vzRWF{HsyP*=335p5*MYiRRZs$y>*Tk~fbJ zCqErdJ~bQ_8cu$*B>AOL-Qf;xZ%@wY^{oyDJ_x2e$~ZVZ%K^2wAvLyInXWYG6!IItm@?kWrW4u=A-Q8J%Yl1mzy zY|eyy2Ltb>mzM=OB0ta>Om|Y_!9;ULi6!|&THh8pX~our1FyM;Erl{`LL7AJQb!8N z4)rGN>k9?iX*QQat9>Ejf|fcm?AsR(aJs&FL$~S8`)WI%?0VBfa)_Je$P%pF6A(D6 zK82Fu*TcR;p+H*5S_QZ+gEkJ)#_MEIqz$Z{jd%Fx|Gn`>d}(5G0&*rGXE>7xjtV9I zqAZm7*4R+uk#UJHjt{gAGD-W;^H-OaLo2CQFP^%z?40)t=Tpe(oj>;bd_2o`h_jXy z{wzy=Je2&hac9WbGg!c%!C#9(e=YV5B|n$Ec{sA&mb@9U2ro_EJSvpD7aZO^HaUA- z^4l=yoT6YdPMLTQe@nQ*8~)6E6yVv98cdBHmtH9$LmUgTWkN$Iwcp+G-PF1(pz_|xgqz+sx0t0H`HD8yOm5cbjl zUe$(asZmoPR{#wWfBxpw)G_Jq(n)jLd?(Ur%AVl%f%J0fT^A0#eM@S51q?VcG->A2 zTi9F_1ftNSaL=^Vwd2xVl-_-FYV1W6$7>HU9!|W)ZlADkD~vNT80eao8vD`o^3uRb z4tf5ZL9$6$p?7UuN}X=MG#p^QMh8|es7+1%3@pl5tAX#oG7Ui|;4LAFuP5_$pf|)# z1b}lXP4Ugb81r|W?;iAJkOIDZFXY?KSCcHJU7NZZ&^s>)2G-YdO?eO?g8}ZDt9#y# z2#voOP7UW^XYe-3ut}Fn(p{yKn&*O&i_+bf1U80JqizVM)0c)O)h!N9iockw%d{>( zli>H{F#q4&W}F^gk{B0C+y$%8C6AgE0#)m!c}6)?(pkUqUcX? zY4YMk{MF>G!wF#}Z!Jm0e+FlcO5P2Feras-+vAeAjt?bAhmsG&>JOA8ze#WEo)0HB zBUF>s}2e)_~1mVr}c31x5bvM{ydu!{)@IFM^5X$uLFI9G(_T zbR@%kZUVsV$-zV$XKgF%rz~mWjss5^lHs2u+BttM(FIt^I^f%wtOMA(w&WZjKb4&G z!%(vMdAm?9f8I0v`8nh*6j)xH8V<|b3OVt3FtCZiKs6ADe9P0zVRYODI}YyV)c9dy zTz2S+d4im(kgziXklhmFbqXp5c{3;Jn~1CmrLO%b0wJzNTB@u;Er6Y&>baBv)+`MN zc2MP|RC!4_&_69TwJhBYzcSjdYYV5Y{+P6KXp-Gtf`EUmBZs(&@;nXPP zGkqz?90s~;Q=>l13-BEdrz$yZyn`k(Xo^uLhG+^yD3Vd`B!dahIc>xn?xIo}1mMn* z7%9H^Q`15qs7lZU1Gq{iFu~NQBAN>Z=*zNMe8z}XvEEQ>DqC&4`FdNBjd$tx(n*Vi zNf7dR5EAH04gUm+D};t(NvnM~rwts@$1eK#%0$)SJ0_*HOo*h5NMSoIuLH-QM~)|1 zV0e;ZVvx6PUhDEex7p2Vf0;`pnC5JHJthlh&qUm8l> ziyLapSX}qBVB$-oLdD@F;l#~l#n`^Ytz$#Q4Y2NCjUzlD1aq-6spE@h{v?>VyS%u0 zaWFBvvN-&DFmZELsCdqg!-;QS9V%`{N@hrRBaluHEK{JZLwEXD6yeE^U@uWHynlu}n@^D{Gurd z63f&3#6G#1dbvyoHIo?MxCbF~bXnUSjpNur+kAUwH*eYsj(f-0Vs ztH&ipOIPMT9JTxvrA2qo$Uz}?NJW#&aX27p?d1E52?PVMSK0NZBQ$?(C^3UH) z3y~Cj0QMX z{&19Pa|u(EKYO~y-n6jtQ>}ZbNChue!KX*Hk(ExDOnQ3iTq~r>vCmN``RddntQKpC zh&EjTO{cnG+c2oiqc$mi2HH=p6)+S;d6v{pnm2YX&$R$hlmD2jCAL%S$D@jvV|DdS zy*c^gr)%t$YoHH)%B5cH3IY>3X!jB>$e3C?>FI0d@(#y-4)&v>pH&vYR?L0_)gIno zohmkqC9g^iA6^tsR#wJ7{}Yp==C3l!NOz43YzQ1;bbuik7Yv*X1=gT$@y^DD0$VVI z8U&!v$AtsO!uX8o?d6eDmR4^skC*mDCWW}Lho5RqU!?BeRG{SguRlx|hx}*y?p%Mq zh9ZUful$_%Keqh2-;0a|?b%+inS1}@Zva;CMOt_Dp@tUo+IgnY-+8*_>B?EWblf}V z?k{xgm~;0x%k=ngxqiPnQNPn`D0xpgMSol=vUYx_zN;gBdHn`bepuN?e>!$H4C_^0 zKddZQfp;?L&eNIYou{+6)pVY2TJdt{``JsTXN!wE-_KnBfc_rH?(96>c;&Zw?$|N2 zXlLhl8V*ut!Cz z*^bTwkM`a~!M4uR13T1>+8G@?PZu3{w&T9jMd|5Exnq`or#E#3AE{r{Ij8>3&N+0b z2y}H!yK2~4Kd(Qm?BlibrObiO^_l%0!8uKBFL%yqTK{rK@S1F!Dm**6b6MsrE$%X~ zJA%y(o2{P3prLb4!&zP*-P5)B4FB!Ka$m^4mf;^sHa%&DGfX(xaK1I^WLh z>U?Qnmq9Gn>f_Bb>`o3@YcLP*>*w!{7HRC?1Q4Qx4B1bczecPbjat^dt0qu>M zZJjSnrJeuHgin$4bkNY2jhJ{GE$32V6gfu!BQuUq|}7`mvbQ0)Iy$C)bH}txhV22QD~E0IcfR0Ci}$X{^!`4O1{srj z@})ap$YJb-fnA-Y4O=@K8v0z_4u828+AauBM=;Q^t+Szi`#InkhW=P^I_``5H-n)$ zP47$>pS*R*Ly^~MK&s2U)sddl)DL#%G_}9nd1JN{km`4nSf7Q0S66mStApMkkCM>t zJVYrSvE7*`SfL0@#Bz8YN<8}gPUjo-$2;1?!#?n<<}H&!)me|JIx`>Sxqh1?UB@)v zu&tvy?z?>0_CexV`L*X_i?89QZ3fZ>xP1_$Jn^m?c&lUQBa$ivzOSTX=auTTgz4GN z&djck_R~ejr*~eJ>F7M&wC81^?D)&5x(_U*QyAajqAqr)U#yq2+McK21h0|9)y6z^Sn@yNVG2zz zCKq(m#a_U4R?4{Z<<4bP^^N*A)a`C@RGU914$GfK#=C(cyRPHjYl;vjz8lmC1<<@e z6<*P`9qFqcT?;hVWY+RCu&!g;82`4C&Py6Rel6f92aRg=pn3acGz#=-_P-5QuNsC{ z&Wjs8$T#uFK=X}Z+u(?+hW)s5F3Q@mx7a9$ob$oCZ;t;>51jHraPr7m`$r+?l3|T7;QMgSM&O`JcgQJ}z{B0$jrPze_Im6l=Jd?2- z=FnuPBP4CG^MRN7F?oltuJfNkJ%oq7TDcg2aL14;X$R?v)1B93yF2c^v8WxfYeT$x zP1x7UGdmz*=jWyD0V{bUCDYg7nn^RDC2t&9-m!D$u%DRQWstNzOXVHH(L2+vzSB*+ z1WEtPo$Ilj?NR>$oPf*y8-V8;^9(bcDxFmi_M-|;ckBokof3qAk~3d`vP+=wvkZ%> zlIxN9Wsh#W3AlI|INK4tq@laxz8idA>Gj)A9iREEnVtpAta}p4!zv@1|538er3nb=3!4) z%Av9k)=$P2&fr&PJ9g9+4FJ7daIQ9Q>hZkgL6p3oeVxK#C z-_GN9OXu4dR>ogjI^U78H$8hgJI@XAJi56N0VIAuONhqCYgBNiWhDP@E7$zX{+XS} zA8$Wrp1XDbT?$ueKI0-{q+0yVvW5~Oz2ofhsWJkkimyhJ0amSOL0l~PNV%5Gu=G52 z^{~jKU`_N_YrebtrIs&^{$e!1eG|*eBTGwGyn5s>cbEPZYZM8-zo8>i>Qx(`p ziHWh~m#es1H&Xm9BAY>0W*m?F=9Beb`0UdUj`)X2fW4_*<&j@~{-0OQoBwZr`D^wz zMwzHdw^v1zHRAx&mgjQk1r=yEHb7{tYoc8V>m%mP+%%=vv{Sg8!Y<7F<%wKTJuXuG zMP@pJGa`ZB=&KJc3!eJd&8?r*R^N0-dE~dBJ^sTpvyVJHl|8Ewrd?cnRaBu+F!zl| zxMMg`w@`bL(jDCSYo)9m8qe)bC^2L`QVo70#X;7Kf9tMjpga1@Z&f^X*~j1L`${~( zrqDFKJAD0>_e^>Jwimb#JQCnkzb^M0Edeo>U#C_Y? zj`2KI&fv2rtf$>tEeaiDzO}3v^$>9v*@|uJ!ak1m3Y^qxFWyB3l5AVY**LUV1FfMj z-)gl2->+$>XA4=I5aD)i&_9cs6fxHc6v?`|F{%>NaL9&HvWg-PQbfUUitwFEuwlpE zw<&229I||(_r)4++6*s=gQsM$iOakAw2Y#0kE~4S=<1BXDsdo(zdj#NHar1Ro{#(b z`N$OmTq~lw8d&`f;>4<2v}btO7!45A()TYpu-@lu?WU(82?G;M@IK!zjRp3(-mtfa zg}&`o+`YTNk-^IYZq{wY;nLSchNSJhh^MYDj`?WXP-o4p>52!~anw;xwLNj)JF&ok zND(WZ^Sri*Sl&c0eNB7Z7=*4s3|TZ?%jshzurtP$ z2LvnY=*#Ja0wJ%CVDvnJjan>lmC!g<gVLvw<^716g5 zQAB46)Rvxt+E8^#Jg{HdJDNBRV&j2>(j`fz5gqH%L|*qHz@{^3%q45fy3w?*O{?R{ zwQr%dDX^$-y(dB3Q6Q~o$rDMYU3f;4<0&O*h(z!4u*hZ`@MH{ZIt%(Ki`8MKI_s9` zxW{6fp^dX;@H`$MPh?an)~&fBgFN8qFM+%e{Y5)Uc;;oOl*6km=C%SGO)UmaN7J2< zKbs?e@v{c&W!sJWMJK7q1IpLRg z6P4zWw+5Q!zT_m`OE;(ybLo1i2T#|dU6JoT&xs`OL4(}uw#>mqFWYsS5+b@O|CNFq zg@t2c_S?5NpNxn|S-q$%amq`gyEe|DHlQIplX%Zjx{%5uhm-H9_MOQQQOAuB@*)n< zJwWB5%ZYdmALjjyK0d(`3s;m~fHQp&f9ZX{C#R?-O!?}ZQ&j9};X}&SRI$84%ayE% z(8fy6NVwJui0x3e`9g$tHfe^z=DB@%V&?yPw#w|0vQTEIbdGoP^tsluh$ZB(`lsJwfJk9P(3uDU)tvK~aNf*B)5iQWwdD~4NCn`%;-3U8$ zc!6=KcG)t?VryN#y3O-1vD*MtXuHY7nS=$F%BDJ-MIB|-0qz$%N7rnRb9A8&?jlq$fUZZ#z@-K?3BtNL-Bz) zlRiOaBSPSVh&D-dOmt)xleuQ4^#?^=43-mjcVLwG#G%Hx&W%};>~gN@P_5T_j6@g>YjDaLMTq{ga!gz8Q+6U719aTvUWym^9` zr?S~~GCxl5)@E1`e}zYSK*RzQAE~;II?k zD2p%QL)tc%kF$m`QQVkuLC%6F;x>F1E1|%VCmRYtWKUV<8B10J#-7LpvR=We=mQjQIr@`>c%?eck$+pw@fvh!(SFBpra@;1tx$37Fz?^`jIMoNkS$&XCqY)Yb#s@bbSx@2qR@KiMY%#0-_QBLj6_9Wg7AK z=DF#}7lkRXMk}ov@Vvf;tw!JXs_{@pr$y{eIY%Vn_S8&kT%GWu{@mw|L zA(b;~ePG@=y#T$AO(Z|^@+`JRutW-5(w5U?W-GPhGqB22X3iU-A1(@#6X617mN%jA zV==L!Idhqdb$N>H_gG9XAT-2na)xAx#ROK#I`!p+vkra6IY6p_aT>nF5S0cre~3y$ zm7ixX&sA$Ia6Qj2GoG*(fJ__+SijF~dWaHdnm#6U<{V`+5a+5j@ryGBPI|qlfOEh- zFB_r~dbRa#X$A!BWKuxNOoYc_QXa4@F1@qvx=_iSG&7#;`SeDNQZ;U9Z!XRGYEDXV zIp@1Dww&l8+zD`jqlUeL`Bvt}^MkVOn9r&8H>rmqy~lh{&`WWnhUJ(I3F3x`R<{vN zCWh<k@T2RyF)~|_TH##cK?7VnvYL4B!!Mj;YL*Jk!&4p!+ z4P8t-7pukzKTiJ$1(;7dlz4_ahGN8HY(%%fi&!QtXb|PZ9**n6)fL|Cgd~&_;aEa0 ziaZdRIG5w-3c83`t*ICm|Hiq7zy^0XZ|V>6(=P`T0C`0WH^g9XkpwO|8w z7ZhrM&e;$!pXxFmu}Yd1;pNL;lQ8UKZ7O zFT0e&#_Gl$q}qYrN_c~MvYg1lYDx|d9PvUYCrXgQDS|8wCFPR;t`us&?qA$P=8#%G zL)Izky8LHK<#xf7yzJxO267wNligxRoU4T$`q}d?Elhql=x@qQ=F{b>@$v_~8rP^s zx{>7)hw7rYmDj1Hb?V*#uPrnCR4vCzv^=-O>&{A5`x@1*uxi(+T6TRi1*?qrD4zw$ zM!sPI5eH0woq?0&@3s8(%BM*k0qpX(knbf-@oy}7z(2)*%6?zB-_8=K@_)Bz_Bn&f8P=o+ePrFW~quM5*xSiC0{qb$JcfdlfHRPKdbq0 zvwdjj->kG=KB+F!FSOGmo1wFY)+6?MTsf=kk)7_@)q1604eN!k#U8$_{4Vg-Z}{pE zzWP`RZ{(m4hrV5)ZwL8@EdQwT zSCPLamk&ef7)X6E#lNNiu?OwBy+ojFqS2PH7|if$CsYfLJWBfvGaW*yiNnmr`mCLw z29BI@=Tqwg2R*2K+dfF^162-Ra63s+yW?3gfjGIk=rs8!l@HpgizE{|ho-uSD|oVL z(iGqnvvFpdJ`kR!_(3vYFOkr)DevjMl4*PwB-=^@A=|WGR zM_l1f%Ask^AU>^w^tT}lcX`K2QOYnWrUdD5voWPGl36QE{ygn4`L;R>KU5c?v$966 zLk_Q`!w15t$C%rM9n=_@1mc!O()$h^Diwe38^q*3RVy4ijnd>5H4KV3oklUy7jLdN z46UWS@g@T1FeKjGN&Y6wm&_P%9wvW-Ff86&C9ovbQ&_Po96GTdu;=B*og4XZihsSH zGa3EBEKP8vziGK+Ncsit8em`$ILia}_p;)MX7*FiXm!yhDs;RkX-2n#4P(Y0WuRHB zi~2#~Ua;Q0m>+}p{v~AAbCwcJMJch|l+oRX_>%?1AM)!i3 z%o^U24UoNspN6gcWZ(lsDCLT%B z)=UhNt5!*>)G`i1rh|t}n$Eu?4D?KLNr8%S9%qN>vxh2n!dDb#20;B(xr`Y_Z{m10(YWh}k0Sn0B&$Wdt%6)N?^q zOWj-w;xuJGpiHj{b_oj4R}4ktQW2Z2dSAP0J?>Vd_?v>KY-ID#{2hj}cf?auSX8Sd$6$1g9Rk$1mn>(}R;U}O7I`0;e(?9Mkhoq*dY2S>-?T+3 zma7mM*QN};7tyR8M`y~2-9YdtBACPTooFTN|poT&l(QmOO$AK^?rRhWpsxq zD4!1}$e-y38@q*)exU?qlUd2jfKpII{_Frqde4w#eumtNF(vQfF4C z3fImV16~G1bP{sr@}yx0M?|RVA2TvB)$$lf?&-mh|!2?`*uQ|klN2|;-?U(UD;5@q*L1rD0v zN&{C$hM&{&1lwwXXz1z$FK2`tG`idv2qwj4OlA0z;@W2T%4=}6gtL8Os)H9`DjX$O zKujer)wt|>9bC{45=GbYY5N1+pO6!PF z^Nn9R)Tm=QQz&1ET1;gbE9FtPU#0f&9lBD3BapF^A5&d2esapp&b=k9h^@@@z3Cwe zmG>rS`Tb58Slsga@Rmc%F++=I`QEe_^cKuwR;E!t+mz93#7xHj7$RUdZZc75km&XE zZv)>LR>Vs{*hX5GvQGM>xj-PCLXR6qOj%lhF7v&_F}sB>(CKlK8NeRWZBQUiYCt={ zM@BQeozXKF8_P0|$#jTq7#?_>WcqJ2Z|lq>0~5{$=5#ocB}+P#Q^4st2Jmo>lboAn zA58HdHY_rG3BHVHC}ba zFTjuVj>dxUlO8{yh%uB?POmG+DJRAy*){quZt}ht1WoY+7}y>Fgcr=6%a3Et)_Gpa zJ}`uC0(EZ)Lo$RIOJF=q?X-5Da`HF5Z~3O-|1jO;>|d8*NQS&I+(zZPYtfW*-QwxI zX4dlxquWrvX}i!NJI)BW>3v?Bb|~dNLDoy@>Y}&!MFr_m=1v1`^twY6IlJu<@ka}Z zm8JI@-xgj*Z#I@egJ$fY0{+U};f;Id&PenYZySbkPR@G*FS2a#oYTotLQ?7loFkPp z)PZ*&O!2>E+=32*KtmlT&t*EHeu>|wjD91pBnehDneQacqt*>^<~t3lq4%xJrt7!T zQK1MalxKnl5@L3#>gDzbYR!XabkNHPs*SBFp(hc_k!3;r$A zML8$HjlDJM&e+izs=0@s`ZpX-GQw1$ljN*S(^|2RF_mObHIM1UG80$oqq*o@Mh;y1iWT?15-T&-~w> zBHE(5R`F9^Bu6~wjf=5lx;)0B<1iMl8dNtx(w3Q~&}N$B;U`i8=A^`(OACsKfSG~! zYHV{@Lm@HXbt-$i@yUBM?L2d|rpHS8Vaq-%^83OIVkO4LVx=CFzKs16U{DUO0XQ>x zJL}SQ4vB9@)UeQ)Id<4uRhGCIYBdbvkPW84*oXECzqgE z08N95DgHLYh;zMNV9QxGxTRsv5+UIPAGzoeFFjzyTy1l#-zAHR&F^m7CLFC3v_}mA z77&#kRY3ty=-R=+Dshc@*cwY^q^=!O z2E;Y%(JqILC9Ko9agEr)N7t*P7s67n^o-J0*Zd8-#F6b5zNdP-lZXU3$_a*b-a3k-(llV5UoC`K;KOxMHVTf;bzZz}a7tvz z(MVG)V!`x`-5R74%Pef}dT&;SFu5CznJHq351y^}@8r#j5grFpBSS}6d2nx#|AAr0 z2#*tR4r924DSqd(xbgdL!-1me8F$y7K&p}AH&y0@K*pHyCRxx)z8)YAia`PC2YLM+ zm3DYB4UrQNi)Uo)*naE1MYZMNp2zkw#OKhyV20qs{9B0y&bH$XiG>nihAI9d)?>%^ zVt5N2(tFL+8A!c~#TL+BfkYb~n`v=TuRomj=V?ye43KN;kZVeuZ?t!2K~RYE-yWpB zgt|b}U6A&t25B$sTv+HG?VWeOwSe{(fELL`|1u9gQQN|(QiV9EkX`YaCUfY`+0eMi zBeThVApk*k7!?*Lr_U3Sq6%Hsnzt+hqPQ$_))C z$|99c?MuUH?1^4?38MWrS0XoWPtPy4K$X|AfeIMjC}wP)>Ia}-ndBqQ*amNMG6 zi?;c@kurCd^I&%(@K?tp-!_q{$M1A#l5u7`la2-ddGn9GY#C&h$&c5N(#>hq+xU1H zZMD3j$Sn$RF{VDl^D-U2O(jp&ma7tr zYOCBtl`|CM%yn6oPJe=-d&rsJ%U3+FCPRZ!;i<*0H-c3G(@U*crIxE!K6_t3 zN2zz0vCu(PEamA0MB@*7X)zwBJQ?W?tXHIksW-6Ds{*vzh|BB>9HoGwwN%^F~^D=&DdoxzLd9O}Vo%PSLIe-T@zbpZryYA%u41j>GG7DW~* zk}PuCG$d1y(DeSr%9!Cz4INRh081e)1aYfAw=`+{>LNuW8lCvT|HS4f?TnG~@$FRz zK~QkzsoJ}!*)*P-{8~gMldkZ>b<})dK}^VgGP^|qQ^n#;RcmvtS+F=^O3?Hpv!KisSnZTqJ#!> z79D{3U1R`&aEg8YV4n$oBoJZ})5ZHiWm0}~2Y z5)!za98-YeQz4feH)@9+8Ejb?++V-Q=~h~B+Fo9jxPF^ZiYF%x1{5!OLfi6^&W#r& zhPU@A=+6pZY`hVL4_`PG>@bNc#R}s6p!-e_+(&w3W{~*)aC{*!N51AUeR~LzCEkq`F zLAV{tv@~RQJX2|-tr8^PG3sImoMTj&CM&dB^w2^Xb#QZioun|o?!i16@gp-xP}uat zdd;>SFbgVgEsGsF$9K$|A4wJbXanZ+3=QDPFi!C^yxgSZ^y85IrWR8Dqfn zEzA>o9_H)fvo*9Tr>Rk7YZTrgg?SM6K`z(O(TMH5+SHYZH= zXtK;qkk@!pgpkUvSAaf)X=K2}>||PO&@O^nu=WgZHu$v3oPJTe&8V&ET^rAG^G(qI z=$f0TKpe>p2QU+n9xBDVwvmrT-rW4ET<`&f>_`)ZcNw{zH{I_h$TTm|*bK=UZK*lr zV>pq&4r;l3_qf_kJ=v9nR7~X4OE}~xWJjW^F-@q}3xh3o^%2FI4*{?+Gt+D^vsa)( z0YIrETW!PnBz(}s*q)vq7k=P5s6rZZAf)w^rtzMrKpSa$?B>_PXc>91$^y@?S(cm! z=5r}(_sH^qHzwmlitR?^gL+1Jg#FP#hrm2u90=bkU3Y{`o6$9D*c5;QjLO5EpkfOk z0H)kGK5rv!pqmn>ja=JEBRm5vk|EK8GMXhD&;&Dbqv$XLJN9N@7IFwJ74K)5N%1c5lrcPcBS2#5X8R!}SvJ>e0RXu& zE+%C02B}yZb~@fQ#yl+EC0t3}LR0nwwI{vAyo|$|=HuXC*+0_6!H#zww!C>HB9dgs z+f+}FelVbl)j~^)i^$k9hvKidm5C5ge1|)3?xL9qi%>HPrW%cutBV8qtpLWW z45E{ASv-&bItB7+-m`|CoHAnRgb6YrU^*#s*rSU#`;3{ZHzy2Hvzt2&A}G0u@35mb ziHoHHhXt{IQzDw7u;{cyq~Yg;he#@r&VxBAvqtTT?jHLIKLZ-hfJyNk6O}?JA#k}Q zZp0<*Home%tVUgkOGay>jOSh#f61L=Dnz_ZG74XFCvNnWH8xeFPE8_cP9VYGE`j2C zEXtP_$4ynf9705!ci}`q(hN#e6P20wK!b%QH%KC7IW<$sWKuz3k^me`Y15K&Bxv;9 zQ5GmHm==(1*y6z4lsMeg@6v>f{G>O}&NOQ5-N-UAKC?r#fzHOS z2hCerv`H$HrH-TohgU4>KVS1 zyEmHeVQYTm2DR8Fc&c)n8gNUKc+)g}OKxo3Xm_IuR>V*DwAn(p_(EQ!cj{plcbOmw zcEK`#Pf&_6vG8j*{I=NLyd=2Di@%;~T5?gC#yMs*1VTON(7Y{ARO{XJ3}kDS0t>m} z%q(Z{nP_RT^)U4~ZyK!t%xaz-5OhP@rG?7TA;PuRLwO7I=nP+@{c>R^l*=mE&xkr% z_M5;s{L2?^cK8L+aYDgm#%lvG}3Ic4VYm?$?x-Tb;|=MHg-%-pqIJ z^IcXBuJo#hK|wsQ3Tf9^MN_^O3^Og{d?7LTfLRx53NybFc@~=St5uFu{9Qs|rkn5Q z7-$gRTZL<}#pTpsu|)-x2PbaSp~f2rxMr5GC7W)oj~g8r6o|IN7Z4YyJ=vPZ)Dk&Q zG>f*t8=`j_b-9Tw8+PH2Wi+>Cs*trk^qgKYk(KMESt=Js(%6cqhFFe@Gzc_r;DQ=Y zhJA{^(>m^=1#ULfxQN9)fYk5Q8BAkqd8C3DH937ogxJj!Ta-<8d7U)f?t-myoU`Wd zxoHz#y$HZzdz80~)^B{l`H!|tw{gDt=GHiMYI5AM05dEyJ9OHihm~6DBrL4u(YYmt zQZNN z(oWmk8g0RbigsARECQS65ZZ;B71m!F)q)U*5nCF^8%O3i!wI}|T4@P~FY|(Vf4HhS zKCo5rqK5|FHgS%Tq($+)ma^K&(pGg|ASU712e9OY!5~ug9yX+1Fe?hUP4TlJg!X;!9=XKo~^IC9~G`9~Q;g^k+M1RAXin77dvVBMQ{!G>69@?>fa{ zOM?hUnA)H^DHX#Q2pAffHHHP~f%BNM_ip{h3sO1Wa7cMWkrc&EH6_z%;b38>zYrld zL3OU`7@{={8G{^RE1nCqhMTQK6=h{KJ?9J(GZ5KY-KEKS%tJqiOjXL^4Q7p&ek z4R9gFF+f*`%-I%*5xVA_;8PA2ZkZp;ZQ&IsCMXUY`+FwNu4Wb^V%&yWSU2v^=?prw z&cLOp>+^+J!)aHI85;-jMEIa_nK`~5L%PT%FDPka4HFt;4P?ex!{o)W2L4v|by%Zd zJCIgwYoiO%Qx7RJx0>j7Gk#`U{xJSrh z?R(IW&sHsC`W#PSdItuF`JKw|0kp$8@z8WHkytUw&;@(W>5!;oY=TJOEGn`fl6746 zqhRV5oHlJTeQLuhTe=`$%u^KdtTkft#^8dp8s8Ld7(|G?;ALfA)NfI_Yw9>%U8&)u z_1-L#RxzB@dpE=sG8Lk0?9cU{mw`@*?}8jgd|EkQBCPj^=xc6xIcPpIb_uTaeui_a zM0QQNG}+Xx5m;kNw~m2L3<|!2EZ4^i5#8a%oUlQnLlvgWbG@J8dat=#HfJfqPqpTz zi1uzWJHJ@-Kb7|8ON#ch97yW@e-iCy3BPKp>HjmdpPTEnz*?vm9z<=~1UK=csB@FZ zZfJ3|H($Dd{RdT^o58*i?H9YIP8kNwm!v6CyITyfOAOElD|gs1%ofVqWVUphWA7e) zX%epHOw7--f``wQdozn}p{`rTLBI|v(Ck-snP!(&)p6#fZ=&|>B26%(VzZkWG`HMS zMxp22Jg_F!-DLI)eKs+iwR?TtWVU9knatMwb?}Zqx0^Xn`Kv~}n&fWbF}FkLQpS-oF0wR#6z-&2jy#&iS-81#Z7EYlN>yZO{^Z$7wG&C17+IP- z9hNfHq_9)?E5Wbn#+O|GQnkOG`dk0^7BX`mNt_D#e}1&E1IT!0LxnepuFXP?EfE}H=Msu*P{nF|CM_%|Eq&JGJox3pY)dv z^WQn5CjpHnu$`TID#!cFd?a;}H1ILV^V7k+=3RsDeb(jFU*~D|-M{@~y6mqC_xi_7 zgEhi^{1r#Fc9a{=``^5Y?)+)teP?!`;q8CUHf_Uya>TKJC@zZVa zNdMP^bSgRG4Z=sl)aS#Snm=ZXP=rElf&W_Yo|*0a4PO{m)Za!$=i$392*z9YBUW=@ z6wrE-54qwq$_4A%#-ExsE0$W)r^Mt^t!#k>L)z_xwew@9$nsuc?f7wO+n_kAx9p(IdZDPnu4tx|~b-Vg=AVnRG_@37%#-Za1&JOT@Qg9ER=WYDCL|sXaxbyGN z<3gd~3UdlF7}94YcyPO=2FlH`Fa5Xg@V$#3o> zsl+8|2qrGq@s;Vm5*~Mp(+h<5jqm+2obInOsGQsyvLw2HJRe^-e<&Y+3!|Cm;~&GI zU~~jgzM*_9R1fm;3!jINkIx%6NDq&HBi!oA_nkk=QKUDRy2W(EryTBsuY$I-k=B+O zTot#UN@dEDt;Qxdeuwwj;UP>KOWili3EbJsfADXr^;ySK%V8<^nEGFRd?zWKLDzDX z`KHwvm(Tt6gS1@qSV^RNnvU=|%U=mOQvT4aNNQ>^x@p$0iUi$+<>A0C4CLjiMnZn@ z?B#z#oBpz5(-&pa%1n2Zp-H7j${+_iCFuY8#z?ApVJva1e-$|SO%3hwegADY@}io# zE4Tkh48#WB$?R(l{5r&mU)RTm19nP#o~+E9qay$)7b0hY`yz?qm4iNnE_fVb zgF}@=jBu!Oh!qZ14l%=_${}```|Ach2Gv|0O>iMR$L?}{TCAD0fpO@juNGuB?*qR6Y2UnBt)eTrD0^y2^8XI40?ci zy~|$(6ar$;%>T*Lq92 z#!CTD?mt^E%Bg3m>A#J%o@kqWWwiA~&Ep@#!&wzJA=$vSikvP#bMKdM*_TSM%xpgg zUY(lu;opB3&b{#We?H^asyEVlvgYy05$>-@JpwRi+GbxZ4*0k{&9VNUANK#8Q?Zu! zPdR$_?EJRovVl>g_5buedm9$mlGuc*Dfx<^I|shP`fn<%|8p0r|J%o{#*YqMO8s;` zmRQk$^!!!|?DfpOA3es9Cx0KV|L1FG?rn!LJb!=Y-cK`X9mMx}_sQ3gS8yNXhu$Cm zA>|?Wr}~Cjjiz6hN^2I>KXdOz7NyADZ$ESIH_v(hG~^iU5AY9p_wK8Fc`SNE{B!R8 zzBBjU@!6dJX8e^J@n3fc9=d7o-M5tUScLQ*n1ig38OhTTd%C5}-5~rs^woFvSD9KF z5nkx2D2+PgOe$H<zi*amMYujhVeuMfJjW>4mg4;_@^KkoUA5UlOX&6su?WuUd z*b)F39+~`F^P0T@Dr!Am{rEYcmHAs^2AXT6DnCAR^;5&ybae6?&4;3?$E#wg`-uyKUt@LF+=N5)5_BC0U8l*x@^F0QF-{ET?D01vtviYz8$YD~*IpD{@Yu+z$l12Y z*_F))L3Hu#sk!k1@Q)%tHnNJR*hM})PO!&edi;z%7VGh|Gz*g2n_rKlY#YmO%E3tg zYuB3Faqag#mCHbI{w*-34Nk-@1B3g?iHb+{w_hHI% z!;LW^^=(XSWOZcnX8%07W=Gq{`RDyemK;X25ArRa*Pea!Cw#Q`0X{G=54qY^F~}@? z?6bVrmfg&drMem}e(X>5UT*K?PkihndY@?TcM1G?8>uOHw6nxNf0!zMk=Mkg);@%$ z2}kGMNP6Fh$l2wIHLcrm9?#5rba>$CKr@v6AaInbhF{N5?D{edfo`y_-B3+R=z5JU zV%JZ!^oY8A!(EnMW9c(2{Xt8A!qR71dJ`%0Zdd>cd3gGU=Xr><9-IrpKWKhNA%z=m zO^y8muhlUhQIamsaoav30PoJFB(7`d3y1t=qrLzzQx5sZjGBU&mPaO^XnqG?@z3j} zZ-(wWd4N&X&*}pCj3&p9jwWvRgUK`m?twq`+22!oZzVtdN1l+4zOX(@UgYmd3`^Dy z=g-Z>u-6owo-p9leJa) zTa~Q6T7R!j)=t#liOJe)_4nFjZMFVZCu^trIXkwlms{PL92&`pdMSTzDBWu5{NG;Y1&oKwlmV9111&q`OCk0^OnHx5p-Dj|(Oag#*XK z6@8IpoB?&Xw|MFT>`22C#YH^n17COXx5tN)vquGeXF`eDqe98ggcJQ#_lZ#Q*5TpA zJ}z&*EF4(w5-$!1dXsmT1QTzDOIL;~_5~AL!WFNDOVFz7SzD?o8yL@zc z2xNp4N4WBNB$q#j1M5PGv!TGAP{pxO;H>XhNT&b;(31;>M^e{qc^rtI{QmGzqAT6? z3E!!3V!0Yl++7k*v{S{!!N9v##i~&0!B9n4IAP6~z8mzNOl%bnd~YVUrMqeMOZ0k+ zS`8cv22O<%M?-<#6*w>EjRHaCV!yF(S*!ikOHitb?P zSp$@D&9@==L2EbbwaFW80z+V1s3IHK7EN@7iXU50MmHDGs69j3pzmnd2Y1{&K9o3P zO`i3dFDZ0ZBs~ioCfY+4r%Hh|q|)I2ip1S8fVfEHB*D76QQ}mwjhoVIi|hYs zd^CZjy5zGo$!lUfekA!p-|3+5{je`98W~YNn(Eo`d#tou1U($ANC!(#0A<*>H!r1K+9F7TSFBG!-<|?#in5Cp|G#du#Zso8uFzJ2obJvn!yC~r097j zRDpD!L7RE>{OYf8bFNzTsJi;qSF4Pkh}*i5Z;R6mi7!JTF_b6-{D#|Xs8q~|vIw%C;#c{n~R_PZ&$|>J3_v*$Q}36 ze*z5^POL+dT!x-VWYphq;8Zy9mUvNGXhTjZ9El`2I&@9)vA>%b)V%{J=fuTf-_D>E z1+SFGkYmb||=Sp3-26MbDF-x-PQ`yvPWI#TJihUWCeY11$`ap!?15hC~?TTX_87eoutZQl%m+E z>rki^JBG5@=JX-T!qmhS^fK(*BOUmqvEe{}xS|)sfyIGqzdf7;T7Qbx>F!i?MsM+B zKbRWwtqKXt8_?x65l$SJy|Yf=U1riwLN_MotaVe`GnDw8oG$;oCr9AOnEt8jp-0bD zhLWLY#xhm*@TOQY_6*$FlWzO?15y9OE6gH{4s-?6dy9jC!)$qb@|h}rL(hz2%5Y8H z1O9upGKrM~voj-kVBx~-_dm|OHB;K3N`!aXi}M})_T0zYm0ecAW+LU7AuJlk@ahpTMBOS{xxMGdYhrv9v|jH=oVF#DMsKeIfPy#1MR zp+qkoFkKAnCIAC~e8!Aew<5&tf`0HBJwMYKOm~hB2i{3%i$eicx;=c9 z0{0%Gd%VnEuWhxq$!PYWkMlUt8S-~^v(CZgUaDNJESPRF5jivv>s#j8j(Q-kB#Pa;Do>H>8#p|y6s zX)FC*qn9bau=23KYoCy%2JW>F3tG`K(WiQ)aQzSXpNc(0ygVIDr!OIS!|l(+;O=z) z#fUUcM$p%W4@m7zZwfC@ZL+UIiO@5*dmrUXN7Dz(!!j?b7f*qfA8tbwFA4gV8ymti zw?A_ibv?Wip}vItGyAFYVXf(X_#o-`?pLN(3_q+BC+@W~P~IokHu2o66(+MYhAgeQ zc{r=Sord%*WjLb)R?cXBJKMl!uN%Vy3r%MqrGxAx>N+O2vYg9QofviYd+P7NPN=tM zSIB=Sf};{m$JEbzSBsM_rkL$VxtGY151NiJn^LO=8BP$DCrfLOF9hisS;6du>J!DZ(?NA+-BM~tDBuz9R zR`K5{Qrx?o;--;|8?_VZj8-F@(WGl{MFxKqHR zg8|fTwm6K6@Zl!&KZfARXP#t`$oQwOXYWNv80;nMmWF(vLj|`bgTsA{&w?dBMrXlM zKE`IjG9M$e;8-8yvfwx$qq5+5-_7F-f(3)|FU=Qgwph^ww=jViZ#(fSH)q@zOSY8D zC|bCw_4o~sfAUw=3{592=eEey)NzU%VOu^`UtHAxgNKF{4czvtn!#*M&nUZC*-d0e zQjhW;=TqC+p?Q|SIZUjE`Q0(oBK)i7UzH|%sH7;C{OfXk5%sT*CH{JrK8&T7wJ9{A z37(Vvf5x}TVt-FCaZz#_1Jz)nc6f3cBUK(slG8@n!>A-PKT0V}PGhjj!`S3BMyouG zOHO0B%ENezw-7Jtzw7^C+UG$U7i@pV3+VXSlezdyUo$a0PA71&7dI{ZZ{HX)-vc&V z_cyu8oxk=zOoaO*-QmU5s<`0#Z)gsH>FcTyZ@R~Yu~hS1%|PuNP{f_7p{@P*sGG?V z)%mvjn?FL^tsPBn>i-6sJ?B4*SC*4l5D#6dzF2h9#U~Bbx75(~Z~iJ5p6sxvTeRY2 zg?lXLag}>yy#Zn8eEiqe7ufvDclP%H0U$p2*Ew!+@yaWdJQ%OMjS#xAPYc%?uNTO4 zFOoiZqum5?XCyM_@tWYWxujbR^KJk4UR0TLVwf{B+h-W@g7|-;;ER1K)_ZNY=0-A1ro>GJD$3%SRm3y32&47*EdTdjRR>n=wRHd%ntVvi(6;wp zzO@s`euAWPkWY;`4UfGJ}O`k!=ylORSB^IlM zVw<5{Y_o;#oEO`i;s0b!(S_riA5j?cRz9-$W*==_q;|>xE;Op~k378-pTAP9{TpS{=hVMt(j#=`U9x3BJ??A`!B3NNCB zoBA#kMjaVAYLRCbNp<=HScb$?t+O`>#G&!jCJT-EXJ8`MS1ZQ~&ySY4pN>KDAg>Z~Dw)uHnKVewV1Mz#2AH`9Y&eD#Tfcxf)aihvcy zS4)MkAM#26v-kb(_$pR{<#X!-ZG-XGNOEjf#81?GY`X-o^>|tHeg#3j0BGZ#<%C0f zc+=4~Enn8p7t8sHDmv=pvXTTl*9+i_CI6zF#ZKH*^*I(;MAF@V8exQO2_NIqK<<0z z2CFY}$qx6vosCuOi4%z%Q!0AVx_BN71?NFOT6N>Xz3}gCt@j0GG4JST6&VpUd-&M{Wk&6wf{vf zSKd{SqP-F?MH_RJ+Zaa}>fx}gp9r81U?0?kG$`+wMb_xQT2 zD(^q1N!qlgoK#z>SS8UgQxr9ki!D%l(j@Rba89XOC@N@;f|n^KG>M=CBsHy*Gl%m` zX9S1m_n<#;@OhYL;73tl3PbgzP1^LHw5JzZ3+V+oC6=Tmy+WJc`?L1#Y7=U==Otwf4Ui4bVW{8^&mSc{(Tx z2g@d)Mnv7l2syK9B==igQ>pwWtDI+|!hv_ffdO5!9b*`nMTLUe;;I+GRlh4TeqBW7 zx?Rzdb>Z>4lFaUF`ym9O>v%yygXpRkzz71AuzZ#D@#~u3(1p?MqEt<8PBgb6#kD%; zAOr5o)W~V?m(|a`vVQ#nxcV9XU6B%|wB3=CE^quPk33wl8LOBYiRmIM>em>$`UP}zhUJ{u0a?1l=uyR#?~+s^&(qB|}k1Sf7Oj+AhH5N1_wjmnMeDx=|h zzoCXlQe|PT3k|#!4QzBYOs8uAMZ~V-Mc8UMctys;N@#FvA|-EouE$S$_9l?u`BgA3Jep2LAtV%z{~ zgGNqtO4~)auH6E-b~E52+;D7PwB&eryu+HSiN1@FvjKNQrurSg)z5WEuXq}8Zi&mC z-{tX2nDW8_ajc`&(kP<9$dv)V6Gqp4yh8)N#T)-}q~y&gmmrqx4v**B)t(_i(={w; z%A&Djhze@et?8g35o3bJ4frj)P{l5K1j;_@%z(S$Qo|+nxEQNsuYTkAq;6L4hjaD7J;1SDVaZnn z4O%qf)q{Csx)ciW`gXMZ_afKvBG-&`d5bmHXF%PHH|$&(mUJ2)4IB(h-e{~C`!5$q zV_PZp(_tjN0nbO~hhyCLbuwDAm0yQJLu#QH;Ev{VNPgYy%J{*lh3{z277FBHdu9@jCy$94 z1P>#rJKCt9d%NKH-I4KKk&;u<*vrw9o#F9Z*9ONYRkux98Y!RSHGI_1mFQrYj+A#s z%q)BSR-}9UTRYkD+6e3OKvX#J`*5Hgc^eHJh_G$PdO&Q>_=DD42oErL%LyD2Qmj8R z{#3LCvGYoJJc1et%Ff*wl&k6Cv%&%iY;(gGxZW=vE$I?HhRdPy9~J;$4F3vDG=_IG z+W=da0U$sx4kirno%XHw$J0YVY`k2-m-n_?ZKjZwok{*!EwJUgE~-K+s%=Q zZ2=yz)YK2m#`1x2M9|t#{nag;C+8rOtR6b3Sl^B9gyUQ8AR`7#&RgR=MB4&5FHyT_ z`$Fs?T*qK8ADj~h4;(|12;F=;&;Wtn$=ki)_dC6|^f+it&s~_0s4#Q+glsmoz_90F zVoVd6#^Qqe6de}V$&LCh@U1^8T-^a964%SR+z0A9ALd+L_~$Um2v$PhvK^a^34428 zgpFTq$xl%PqbNC-t0pvTue0tuJT_d8d~J*57H*FQx`oG4b%MMxT^W42;8?H-qu9k6 z#}m^Bd6D~u=`svYmw8r)$Z$x=Q{9#~d9+(giEQHP8_+qY7Rebfhw)V;$5{cqN~0$p z{|ddH@c>hgIT$ObtWbTrD$PzD%OwM;buy5nRx%Drm1OvU?m+8?Y7X_+H&XotL&O^d;yxXKYH35ja>R7Z9$% zPpOcTvjvn_otw^NV(4h{nSZMKZ3QDUflht@49IUasc+KHf^|dr#_|M@Du+bqq*6$2d;Gl=gEYB-3y>W|9Y-)l~NV0{;>n)=ow zhncIy+HFbrx<3p{bCaRCMJ&xnox1gNNohA0`7SxlmjGfzT;T=p+d_%@*O_Nb%^E^# z6ehCQ3PNunmuR=-lAXGGX8TIe$3WeKUS~}_>+GrfrqwkWG;~e4e!fmlh=8sQtohb88F82T>5C1b3SB%eG+KKVGqQDExDIhE&EFzpr$PMuoT=F`nm=L{v z&UC^u!ZN}cgzQ0UpOIzf$y%?>~vRX5P8dIq_gI3wN}&^!$F` zB;6tdLvT{dBQB6Jg12T1D(f&+FXVro7ypuHrNk>kv9{p)SiGGSGPJcFE^dvl8G4!C z8ecv1Qq~%8(@R@=Mr%uwr`Dft)$eb%2+DljmM&^-**x?zwY6o_&`WV^%f_LX>8&jr zhF;2ATh{BP?Ts0&KNX>>ZCK6yw#jPV*rzef^@5$@*jNvHxjkLOKvovHN5+z)c8cey zV7#)}Ju;%$<_*fAa>C9Y8Q01g?s0}$`A}8T?=QrP-epL=lFsJ^Gx7ItbAxzQb;gSB zEPl?4{+%!S=TYoyM2}_F`G^^QE==flddALpVV%yIFC)6S1LSRtdn;z9;w{g;mASXE z?oAvYNtiTVlFt*pQnf%n2yWXGv zAQ-O8`5-{shu-^9F9EY8ZtSXfz8GNnw(|A!D!!P$xSO`Nv@^gHU&gNB#m9SBMNc)3 z1y;rpw*&Lk&di_fXHMk*`q$a}t&51w{=N_z_5LT?$9{6D6GQFy_gh!IjxAU9-Fo=B zU!2W~XaDx2+3#PP$ETI_Vqm{jO=8zyjUOWm^3VqPckgGk^JYCHk67oih_@6RHc%!$FD z-taE_pWogu@F8P)M&7yeLGBw|Bxc@Uy;#D1=X$WyeFrKV!nSMevR8lwyd~#)F3idK z!Ibm`RFgIKhwr5?Jyw{pv+Qs!u75uVqr8@b7Y3KTKo=a=w~1&B%iO+yE9RX@*dj;V z5nHvAf_vv@_AhJo9Dmj!VBhP~Z~Wh92VWpR9eL7AJS#lXJAv`aN+`XT$8&}qUnPpe zE$uyFHmq{A@vci=P+hLTF6HWa`0QYG*`bF2!KUt>Ol10RDWJDCe3B(@FBdHf9m9O- zKa$%^*aga#7`&{Qm|x6?u1{Qc2^(m8vJ<7R5^9;ojc&_FiS*l$X;ONEWmwfiy?&Dl zfSA2ahhjt$|2!Ab<{C4Y{=_)wz@cU0F8v_@5JG%nGbR+rU0s}7$$T-qrQ%lqFzMY< zC+|k{zrMC*`d{?1Qe&LWZ=>YRt%r9)n8W;Z>){iRWxqRqIR*<>_9CAXP^CRl<`K2jSrTAqGRl+ZS& zS8&-slO&ROqEuBrAL0jFY59rrZRxWcpoT<4=|W$;_NCtjV(qrV(u>A$n7G*G(4qL> z6FvNXF1?BO2-Oz*^d=FQUZ*meO*ZtUKS2q>=QuuC(K=RPs5MtXNk!{50X?3v{qVJ2B1iQd97?cAuItwdWfF};iq#${4^L`dfND@UG4?4_^I;! zS^V_$ALFMd*GW1wl(N}Ai>dh7kp3rPjIR)a=?~J-VJ>Q>dcV2)x8+r;3W!YaL(t>@){}<13$?DgijY^4X~hfa5El zovHyizVg}W8UT*3e0I7Pfa5Elojd@JuY7h218{uhv(t3|9AEkDbUgsaS3WyM064z# z*(nOZ@s-a`a{)NM^4aMI0FJMGcA5vk@s-a`UjX3v%4er90&slgv(uLVIKJ}PX+8kQ zS3W!42*B}`&rUZ1aD3&n(*gjFuY7j88Gz#}pPjx8!10yOPG14w_{wLeuL5v<<+IZ* z032WW>~t#t$5%c(eGP!)E7-}{3P6UhPNx6YJ3e2Xhi%B#uYa7c{^c}$b#4xPHMIU3 zt$+TXzVm^);a6GbUsvYXd^=qJ==GxJo2>bn_1y$n(}vIM{$$kq&qlrf&r$Esjd%y2 zrytK+uNqt4dU*eC&>Fek^52{@k&m4NTuaG+V;Dp zrKHdC)-5f4oKSzkq6)lIEG=EZv*1Yq`CGfRbhkpj=@bQjybrV@u?YSbV)OCIz=x%l z*ZYG@9|Ei+{UI-rx6D!}@|w-p!gYzfpJxNgs>_ea5>TFuP{Q;`>=v9iAkkP;-&5)> zpBta{>ACU9r}`{RrQfM<w0XrpR+EkH>%km4nB5nvS*5sjT_%J`FQt% zdnkNpFeAD1OK%ozVKi_o+_Ebt8hmWm2id*& z4_@Gm7pJQ@=7MqWl1QLC?5blkUZjNYiL1jc9Yv9ueZgfQn^P)BHcJ1t5C5s;f+&~@75>0I401!1>O*IdyqoxeE7Tb5&@IO!UkMWz?hF< zYfh>%5oz=CwNt%y*G^|-z~CBK^ID8}*iK{D&Hx?~eC@S2v(kB&e+gS3V4pH)Q7izw z_zfZUuLYOBO&&8QdKY(kGk1Hz$~BBhaOrP=$J*@l@+pzWw%+gP^J&X#@04#F)jsxP zUVVNveocrSI}pbh&MiN8&-sBYNZ24_vLM$PBsU8JO|0f@`p(7`+E;fe$H+MZwAPCR z&Xf<1>`&++@5*R=F55h}z!}9Fql6`x}C}SrFq151yd?Nwt46 zpV(KkLuD(xpueH@;ZS{EU{|R1vJ5Yz!-21bh?u0WZOS%jw`<=li?w!!OtjbMb0iA6;y61s{Dz`PEc(dYL}5a$z9CT<y@i#HYMd^=seO3~LR zu8wJg=Ma5(vBrluTf97yTb=acAC1JnRuEt^zfXy9ygQf7*dN0&3XM*~=qyP}hNl<(wik1)wox@CIZ1R9xMjZ9+mii!cH zha!QrH)#)3ZujKuW}IP1Ww@nFb8+Y7aLMU#jQyfm^ta_iGBdBJ%07xgU!8tlC^cMi zDpG=DjavV;NNsG^V;FW*cXt%6~*isnx3_~R9Cw{>4VHi7dg}Vt%E(r&cpod z$LCvos34PIh~NGASJ@@##Y07ZEWX3VPyJ)@zjE=#?-~ED?@7hro~1vJ*0+6q_vmKd zUWz{a5tSdy|2#o@eP194fpQ+;D;)SQ2_%0gc1S;FK62Wz)Vi#xDgS?m-PDc#(n$u~ zjA4;VH)tSCQuj1W28P^`tiFRSNG7W_gLVYcqFpOV;P-l%F5{BC}ZNvtcOL`iRoIrgX*XJ9K6)mq_ z=)eh-Rf}U=*8cP-gsTMUYw5phH|^qaPd$Kkaet|5Xq<@Zl7;l6m)qiMSiWP2yOGM( z!^7WuM$Gqr*Q}n@lz%=2+WKqMl)sh)Bd7d(v#0zadSw35eE$;_XjA@+V_JCxY_ong zJeGko_h-ZZHUmck$cD#(XY_!Fqz8Q3^nfL6Re`Aj_}lU4|NqtuY@`bCYB+9C(*oR+ zj`RGuP~+z-0?(-^-%!H$**s#_847@<4isn90mO~IHi^V0kjf`9IrEVi9jOj9NFA6~ zzTVcC{`~CxB}yfDW~SdirWItv{r)lCARF%Yk7)?maMwR_bhH7P4TsS`=m|?!s{&IM z=%4KRN2&;~h6BH7CS{hEKzfrev7=t%UsZ}1|3@WB|BMOW6v<(F()?r}`OXBQA378s zo*>4joOW7_hFXL#sz@At{h9*P0Bk9X(=kNshRKnV_0h!NxK*sS9!w3d%B)_)B^?z@ z_A}$;R>f|Z9*(VNC3t~WBy9)YUp>B?xLg;k^`vBxv>Q>5gSb2_*h%dgz>8Z z&h7_zne72h7fCI4YVvn{HMuU_^3J5-k3TXdCkMiMl6Jy(wx-h}lT!)Pp1VGgm*bs0 z=xLH^W6xb=(#uRW;ghej{zFEw_#MxRFdW+!jf6Z!eI@0jNV{kUG2|5+ddd(hDqe1;-K%VQ7AwhCTNRjqS_H| zJAz)b1GLB`?IJf!J#A^asJo(VKV8&Wv7|?Ezk4jjQ9AKs=2zyx1lNg5!6ssMX3{-Z zSH-Rk#THc25TSP#27f$Augp#4y{mVSz1JtEHG|_7bdXKx$!LIy8K+evJIH49 z;SQ3&I3{Mfqs;0cHrv`9-A1>Zin8;aZqXiL(Mfi;V{l@t+YU?^zd_j)a|@-? zFYLFu_U^2?e5C#@e$iRhnScbu#+ET%##)>I#$~qkvR0ej_M)h{&9N8U9^9)9 za^05!wwuK2PZaXlt1Fe*ze(D(c6aT(K#%>T)E3*`TYJ!3ijk^>o$T=d;j)G=vk&*$ z>G2z8JYLk;Km|RVufJ&flguid+-CC~w_XLm$40%{&fZ3n4xJ79dNB#=I_I%*uIr2* z56{!@QBLgF?Va~{S>yjw!B_K^#(GfKbE9ID|C`57z8-)7+KAq}a(XZ41<&QRH(U+i z`wIkK#P&vQ{;dI*@6qVGKd6>NR!f^6*HcLoR}Qfw_@zs=LCr2>)h#c3*;T71)DMhd z*BuW{x7qI2>@X3BA@I> zHo2ro9z@1KfRXZ22<>cJyu2GHvtlzZZhcn%jc|?v7I$s(p`7y1E7^ zT3w*+hy%J$(=PdVR$H6^u*ES&Z*vh|aKLt#vQK#6H2`l>#n62-100~ogF{7dfb;%# z`HWqjsp}yJ+EwIhiet+pS4dgy&6W54K-WPnI;skF8h?OJbmKJ7 zl_JWnO}GIZ;5kLVHT|ksk<`^gN6NVbP6euh0|^^Sc3f)rtbd0uyT&h5;S5&&(L&go z3YrqlE`QUr%Uvz?JExPSx3LG>yr!6+xn(L=Uow zRSXCx3c|krC@*$N7@~!Qa19A5OnX5sOZ{;PgVYhBr6jj4CyBa`&Jq#SpHK<9ppI>| zWVCBZX{L&xhYpj15*W-k0I|)OV%e%Y0GHRFG&m^L=D++ISe+sUh)1Z=A-2)qrKb94 zLw?h@o7j^x4ECBc__}|S%ciJ!S*CZo&Ql>tCFxQDH+BuBao36wtK05uL-&BTsapYz zJWZrubn8itJT8cNYi*C9%6Db05d6V1zjGnv0S#Zuw&l{F1Dl54bam>0WIK`mR{Gi} zlgd~X{NAitd}${^{YmX(*9BT^b*2(smTc^qnCDkXYO17`6I3`xDZee zjE9KEbvN}Ov$-3D5q?Fb>;>xqZ9q2|=PQViV9}+?nj7l7m^W*u{NtyIAUEZ*rQEuLz2a2K z2?^fT`Urp=m8+7yHmTz;RX##jYdV=7{G0FMpqeL^DwvPyyISV2;DGJ))@8c7Dw>At zVw!=yDpsydbP4zXtfrmi13Kz4fU_0dHzt{j04E!i09ZF$T2sZGl5xm4z`{1wtM0Nv zwTp6ZZB`7k12;dC>73r=x`kS`_1n++mNM<*$6a=(Yfw0Cqxy^(H<1=*aYQArFut%C zb&yeRV}`{j7z_zu;JV5>W$n~~4`v&B*vN)m?6uFjNqgXB3g=zdHVx<|D#z+N@sZlb zSNMhn2)^_9zp02!h?yFO?RyMi-!|T%;u?tHd%$$*Y7OE>arMW?@^cbqs6Q%NrLhn& zC5jL1@*(bq^{+hA=+c#LOTUpa1=L=2*(XKzd!f0#+O9uDU9{s5de^)l>I&{9^InOA zy%UR+hwg)S>d_92sQA&PqS=&X6C6yCp)9hhND3h@-BFM5b7<}zP!C)Uysj;c?y-R% zZi(l0v&4MePQ8O}-S#w__|fZ{ZlITTa^`zUyA)bEe^y@2?{-pS0|diF1Z;=FMAmh$ z+2d;z)2nDr$@jI%8yD*lw}=x2r(-ysNgA++2|gF6JUatx@n4m`z-jFO4g^-?1Pg$v z-~bK>+U$_^!3(_M&uNL};Py_mWKVQFcF*+tF|8Iv#;>i2b!pWj!%$n#$2gXWnm++c z3})F293FT&E%L^9vx0ceYF01^m;>x3yQAZG>$_0wTE326Ta+~@BkhIm z{6fngSSYj4c$YIv)nDP8&8mCs6JO>_F!##X9Rw%V6*U&JVLMrIVqHPw`Mn@jXWAPp<0LFi^09amd*>Tn^JdFu13os5mv5wJ&0pXUxqK2_^)>h3*;w@Eg z!GGW@Ti!AZCOO{t%DcTpW73Q*+QPQxm@KB1cRwCz_#`_J`^wjoqd)jlEb066Fsw3A zEPX5Q&SWS*kzVeyaA@FqK6kMyK5&Wmz7McUn@k>z>ln!^S=`sxc`Oen9W^sVE~h21 zLT~|t?!uT<8RCB)|E%gN`HK5NJ`ffB_HiKyPFwfN-j+XuwVLf};M72ruX$Kdko>z6^8$S~Nc$g2`1y%9-V(grB!vrsJ zS%J4?Z4QLW5sXe8slSlJ0B9#<&Bw;%#4AhLy+0=S;#;#cgbH*;NZ=_iTD0W2RICPd@6l;Vu?cy;ipG#(SfZLdy< z2KI%Qbf~uI%)a_YBCCQ=^;HBmXCi0rsQ)?#mBTHor&gEmweoL>FWQryTmHm8VXBvY zy>$66r}VPhUM|_A=N_KJEo<_^&P`2Y^6*!+SQzF9S3H{zn52Y%B@Q?CbnzS6(=#Vn z^nle9T+qeyQY$&QppEDI_oXSBhllr_vWH17rM#M0GApN_#5@%42`<=ZF)q`j`z;fA z6=d*gJ-mkDUWo)5wV#Y?J62EwRdys5Uc9tpCH)_~`2G%!gJ{c})k40;RD_N2fWq<5 zSHyo%z-V^y_PiU-GwB~=7i1@``t7%Zr6;`<;Pw!nG}d{%kn0wa^>j*uroQpn3|afz zT_LqByGHuUc*+_2{>`OKC)VaQd`gFQFfA5&@w*G+^-~eG6Vi|G7MuKa0hHNL7_XlO zFgN{EADAwa!<}`N6b>fwOW9J|Foh;4@x*Za2Sw@k73(&JMr7K_bgm^BDdy9_)bT zqk)0&%#OwT^)*{|QSr%P{}i^()N<;BriUZ(Z8WRiz6>BYsC{{Ht$f62SjtA&>S zmUpGMLnM5s^>^vN*Y_a0?gL)S?3{+lI-M}s(o|4XUv%r5m9O(cz%Kz;A>}m9L*gp1{h3Bnr-HqxLtIylE=8^L&q| z!}svBZ2j}9d*u;+f>lcN2cBA*W{{|wr^AaCi{CL|9&3K zZx|^r-4~-IG!K0*VR7hhrfLRK@jG>oQPAImvc7IhdTO^4)D&-mY+uh!&%yl5G*eLV zyEiO#vfkz{ssBUi^JtjQwEz za{Mu#8;LC}s*3;BB@zFImghsD0n^(K?6?014wvHB%x7~J3BFZ&$qSUMSny5%;$e#{ zP-HgzCk{SuH2nJx9vKb43HUn7_y9#`m-BhxRk1}Q3%}SEGIewzlYmPgNJsrtMf@fl z&%9XLOo{1}YQu?ZZV5WAwvN3QHlKEdvZ2CZ z!0Njbqu9&YuPmOkQxwZShqDO3!cYaiX#EhX=A@DT8Mg7^68`yG5C z@H)XIX_dZ6;iTqfi*8+Rsh5@(`>|y%_7N9rb&@ya$If%HNf&E16T8rlt#h$GF4pQN zw%Lze?qYK+Xe}}*t@C47xY%MBTjs|m{n#!S8*;Jp{Ma5pw%^4rbg^}Qtafr+dlk}N z7rWe#W%9DvG8g-Zi(TQzhWuEaX(Vsb#di6z3;ozS7u(}v`~BEvKX$o`&9R`h$e^^> zk6qzni(PD)ADi@JyIgF@#m@6%d;Hjb7rW5K*7>nHA|;KlLfY$Mm;15Ber%bGeZ^v8nbg^B2>_R`b&c*h)*nU5@*^gcBVsk8LEix$W^xqX@hBO&wISuC+0Kh|J|(FEZ2*B1?-`! z2tJjvO(;DRJbepX8@ZTEJI-Br*X=BSQ1b=547nPU~^&)bDO!`6wmkw~~74ukc!3 zE_FEh@saBA(xa>c(yQT#i+O;+5K6&~hfw@QIc)V;b+l zrN{UL#~H^Hr4z^JCXHdw)Jj=5m#uHSHQdrZzW3uKdXr7YFQ@<|dTB(W86+woNlHoJ z088>5Ny2mxiarZg&Sh?Gh`2nG^Mstpcy5J^QxXXrii=TcyI!|9AKIp^Dh* z@@-n*&fIX9ZXRSa|7y0XZi^(Q{X-CM~{e6Ve4XX8@0AF?>O>@FH<-NBcN4+NLpp~X|;@=2Ly zq>nLbIw^Vs5wvkEw!bbl{|TrRgFhYbUT+WrVVpW|#F9zpQ^%maMWSXUh7;dzAIJR@VGj<;@k% zSC^Ism;F$Q2HBa4-^Tb~6{}%y2l4!pz)MXcN<(#QmCa(b3~So=*krQe_Uc87 z0@akoZD(aBN(7 z-CEfhDpnQ3cj}krm@?EaxP{5-y_zx#gFoh)Zpz5YRe>z9;?}J_Zn;^qTkbFVxpj*p z{s3=ZSG}Tq=Gy9CBkS&6k^cQec>3bC!JkMcu>H_|USb}5>l;^SXx9}I-EuB3_~S0( zE7#@yW$7KWw9OFHcy9dqc`GGj%1^wodDEs%BkUout+Dl9@F})59sYO~+tIE~v`oS3w%&Yu;+W7YoJPtx=m;VSvbTt* z_u$`U#Q7sO%4vh~#DDg4#iD6OEnU9tc~ODCeMCTOx_Y zMgbg6I>YcEYvhK;S9BNhya^iSyi36oYJ}_f#xZ0{-w6}PoUN;w4F7Qdl5wt@9%7jm3StC)Z| z<6bM>=~JIyT*s-q(i6$4 zv^(A>|Eifn=_D55gKMhei>Gn(S9Ip_V9T>8jur7AanXp-Jz0^srBte2MX>r6=Af1?Ol%3n~SG^TO^QCA#r(q@^${IK$O7hDp6O%tZxS{tNS6{g0Y+$9v z=0nM94oS=z#1A&+@8DB7lYO%|wv8vg zQNK~_UEJk%7Z*32&xz5KoM_nD`+*VttG#?qw>mbbPLOJE$E&HAJ6`R3rZA+4vvnt)CfSRH#d?bltZT2BMI9Zfa~-Qv zgB=}xN7`54nDa(Q<3Q5IoK3Y6lk8}!OU`VsxR2kC!MZ~;JI?86Ro|hGTL)IVl)`3J zYMZd>SXJLW8|2q_%<63enT_`RYHAyF;O_BCg7PR(pTcs6I-T>T#UseX?b)3o-sd+U-k zS^ahvboULcrbm;0-*tiQy7txg=9~e`HjCH+hK;FCL%_%j8QR&<4 z`h3+upCPy^CG3wt15Y?&7_2*@#_==UVLJ?i(WBSbv3aZedMtGp#GMr7V0Y~s;1U6?z;CSyA>!zO?W}-LOgSjG~V@= zDC@XU4Yj~}?W^x#RNWw|VwJXPpqqi;2AOJ%H*`GPw^4(*r=w$_(@6AeY8~}=Gh(aN zzeenv^t7Hf_dy^7n=Rdrl=zbh`(E$ZQJgos9;vUKM-6 zW@qaTJlzpl+xg*+XBLP9x3*VY4mKUBcRHR;4Ytpz&e_nu`Zn72EYvY;V6%%}1wPO6 ze{bF9r#s$RyH>d&9G~uwr?$|vPW8v?_Bpe1R(H(mOHy-&UA9v*gTuhP!R%|NadgnR zx~`dw-|L28N9qh%z-83ik!j7Vy|2*oXRW!yVMnTua^Mn?z>dB*DaSa4p4vPhk{<*S zA+r?$bDCb+HQVLw9c=&RZNYT~9rp?ga##Jqa`D7%bH9|St^q7r!`@tK78%y|T>4%d*Q1EDb%Rf%0WBSu)Z45K zG0#fb+{EnDccT43G^fAgj)C=#kdKRX!J!GZ)SLu!4h!37nKf=4*yvIUoo6)%A}F4% z-!|L0|MK1qV56yX8<@Pt|2Fa;5GgaK4T?jJP4~gvt9-0yA(R}Oo`4{C&NeZ$s`o^D z<=LDzn}PP)40OciB-kA}Iq1()w8=+YatB7$+_GMC3mtbHbVp8*FVW(S?KO=#NwC~t z;$|}#-jV87z75KkQa(h&z*dXyFg-xhXs300d)q806x-V_Po1LIPeAgQjiYIq>2|og zG|6VPh0Nfs>U#_B^&7dl_hiSD17hpJj!&glTQ8h#deKqDaAytAaUC|tW%ziL@$qr` zza!KCM|yXudroMQX&6_m=e?R?pfx@3)AVx7xP^M&rZf*20qJ$UlHG5FqE{rdUVES$ zFW=^&S#BDdVbf4j)6jA#@P3Ev+1dxjDHV{1$2Gf$$HwX724c=pwwpvm*-wnqXErxR zqTyyG+u;lC%_+@8%=d`7eSY7FijL4n9evaSo3_{7#t6CrQ^hLn*?~PK-=DSd+}`nI zUrGbkGh$*op4!7mZ4?n2Vein>wwd4rF%0Z9vfZ2#zD#6&Z;aF(_6_M!;rUfZ117=Z{8T(#1wRE@YMpE*=xMN&os(? zbWHEl9aU?)Kiu)ef+JA)j`oUAfzYf}hqS@f?KQJ%HHn3#VQD@PETkbUN$yQ+sZ+FhjE1`?~`r24Me zmYtv8w)VyUQ zX4)z6=5MrpB+0~+^z9=d=l3X{ziWakNfw5Tk>t@yT7TbDI?wJONf*l+a&!Dz%q6EV zm)ujju(1?BEz}t){Z93=L9>#CvaKYM!=+#~l&0f!U$W-tS+5BPh<;e!p>RYZ@^A;zd2XJ*@hk;QF;dRaY9*%f=mA!_+TRPvwojm>W7#4;pKjKg&%&-4`=w{ zOh3HR53lmWtNn16AAa5sXZvBu4=eoeV}AH?KP>gbi~R5}{O~XRaJnB}?1!K5!%zC* zC4TrRKm4>Ge#Q^W{IJ{)p(Uf`3~gm-Ekk=5TFlU9hE_AQo1x_lZD(jbL;D$C$nZvn zS2Da);@4m7hZp+cNB!_4emKn!KkSDW_~D2AaH=1k?}s1s!zq3^*$+S9hwt|dd@Dp^ z7`mEKkY(U&)_ZJ^)ZG7$>TXf8n&GP@frmKAE4@T;B+A0We}gE*5QLd8Lbe>lhi~Ew zWtsS9XH0y-r*K!6W#ha1KWgI>7G~oUmao2r%UURYp;`ETqh?@AyW1>$4Y9p7-#F{l zUVa~ZY)`YE;iY5T5Vv3 z0^goj^NoF8-=flM46IP#@8{PX-662!R0{$BU~J9N&0b$asbgdd0pB;S=4gl4cTcI~ zbA@*TzNVn&&Q)F?zISWxH1RmbLW$4PQ<_#0{+_jYVQ1% zniDm!g@A7_thw{&YR+5(TL}336Kn2#P9U<(2N;JlhU6T*9*fh`1lU$ExRWy1Rl z1}0n)kc+P&`zf~8u{HbQjjF;qI?J?Vi#WgL;MvfX_g^Lk3+TDB>asa+dR%eVvNdF> z=U+WXE+Lk5CYAc1j)bm!IM1c#xpIEqoHylEW663c@HLN8{I?3pupzu;gY>VOf7%zi z@`=fQhJB&RZ%tN)jo~F5LzxT>)5x$Tyktw#GHecA`J#`{KWz?GHh@n}$=T3A8>NR* z>uUn5LaAiUlH;LNXHChz&_GAcqx(XsBN_OPP%2&X=mI3gBf^7D0Qml(N{xgKaX~V z`VQ4ReKxeXb9&9w`$CI1P5;m1ROWCh`_JPPa5x2O{^_ijlbmV6As6hOYj1-t*!EL< zJMq*1Jof)T>CxY)M}JzQV3X^-HLfdPpKHKvGc9;|X3fFlp)0!rHE$gcRVLpQ>om)T z-8Ba&VLw=e1~%w7wXNppaSvg!|5a}wU32t^o{zrjAvm5!K=Fe4JcKv@X>yyd}DrBWZ(hLQDv!GGX(d!zrNZ7H=F96K_G( zd!3kAKNkx1Fzc9n@P!6%e++xqm%{r1VZqljYHmq#+aOOI~;5A^7t zjnkj*(LVzxzbg+O_bT`AR_9gr5WuO2kjA0_i2|=Oxlgp##H46p6`b|!&7mujHOKhf zsC-wxL`t%^ImU;(YJP*1*qEsK4Wi_wgo?S6K~phI&KB9$YGMG+syWsXx?+R9Rl!fc z=54j*Fi}MPuGIOyz@UKV;n!h-ae_^iHAkNfq1pHtI*qJpOwG|J1AC}doN;DZSTMo;qGXodU8l}!G+X$6&#$w(;h#G0chWL%iwBSn!8)Jb!bQ?tKLKpFx|lPQN*lg8J%zm4im8Ug`*jr%SJRHXv6Qe9mcs6~Pg zok|v88?R-sDMx{FT0k1cgEYQseitK88U;#Y0cjXY()fCM6J$Udf;$2FTKcsRfpQQB zK6$045odrFM=>b$~I;4w6n9zo`gJUA3j>yV=}y11$kAxsar&|D_kQxY+3V+W&r%UUuOq<^O7G zm*Rif=l%nFzfI_9@qNcL^UiTj$R^-{J}{9HsG#ck?cEai1Hh?|&{^-_MV|=Ii?tf0uchay;|&kx#y^ zHNd;||Gc1E;5Un}!I96*5*O0`*Vi07YudkC-YasNq(#lKJY|Sqz$Cn7E`7^iF($oXg$_))86#v4{)%+6hxtb-U>9-_D zYifi?%~8w%8}vJ*_hTL!rT72+gIRh%0s_5%Rj99jNbk>>2RxYp(EBrH02v03)GTqv z0L%jz8YrowW(m44h6XbX9L3Op-tX)JrWj7g5+##`aLSl098Q0a-rwo#{jQ|HM{`bQ zY0f8x^nT$a^T2-+Cno!0y&t;(+Ga-YKQcn^_pJnoi9d$D)3Js3ks8+$Vc+p??9u!G z{T`L6#r0*Tch#e;0sfDB^v}jA%i!|fJ^JV1VR^q5r5_u>z7a}4azt?*PUkN?zvkGh8I>Pa`86+VM``?U zZ_{KaF!DY(Qr{noz%cHXe)!F^-bKNm`Klu-N)tK_%vDu7(V`XvT%2@ABEJY7S!|)j zetnFKmDWh?S5Ox%Hej*e&ULZU7m2MwHMH3GS?pbTE*2G0v5Qd=Ep~!v^P<}PpXuF{ zLt?*Ysv=m8x7fSJx>%`&%4_s7bn!zFAH7t_4hfbQ}~*`f{tr>@-5G| z3tcQKpYqh8@>y)2#nw)AvC{d7{T|Am#pYVF&5jzu-!=)NzWtp zM?v;2^~>*xz9J*X`5XEDc*!45VdAw-^p{T6CVK9-IqvT`_F~noL)+;elvhqK_UsG` z?tQ4S#BGj zJs(2Ws9gtZkOhaviET=>1IRk-iIRb2j%oG5>MPs5N~`j zJlIw-xO#A{x+``xI`ed}rI54^3%^2kf3vNfV<;7|waxdg%!yUM*l>Xt=QarTt@~fS z-k+sk#H*Xx-p+o9;hpU#@6v~_dw0=C47z>xI@0hL`j}P0@M&**XGLOi4n&sQP}^Ir z1`O#dbXUVHK4z^_OO@pc_P5W>-rs(D`1{wXp<=YZeU-YTx1=KRg~8sbVGejzw7dcZ zo*7ww`CxTyo89$saDwf0KlLYex=$?M7Czapo$eFZpJ$^I+sRO4^H@0e z6rQEE*FE!j3g*Z6v+lVtk4$8R1_ggOT!ZX=vRomF=C4QoQ zkle_0nxqiyDK4cI>1TG}V&(a}Nu5nk*To;0*h+M)Yi|6-iQnPrx-)L!r4u`ei4e{AAIR^}Klb7B_HbMK^!KW+I(Cpmdnr9!u2Si@Cv(7-_R+J` zxnCwpx!&^`47o_BDt4Hv+vd`qW^2zA6CWYGK2i9|D2*|{SK*{VwZwr@i z60xWf@d?~x#SaZD7cW(F#t8290_&~=-#Su7%1?TruU9cMngSO-(d${c+8`P(VLBb| z?zk@IMn6)%e^|G(a@#hd_&l)u4PBnq#B+@d81ky^XG z?$uBnrfQNeh4AivH% zJdrQIj6jy=_w#`N+qZBmi(}n8_PAuHh{fqGIeC&hTX`g2bby~b_TU^A7u&(qPX6V} zc;XLtV(|#>JxZ(`_71s-uisfr+F@tncok0_bLE4f%3qqlkS7(0=i^0ZRQzh@B3y^p zZG9TYxVz*99jtM7$HQa!3wcm2DSj5=5BLt;I-C3I)HaZ`pS|)VjJt0f3(N0q{WiHd zAK0bGW5r6;&AX-SJD`ebN&U8|iXNCwOs@gu`yM1{UPW;4aTO?U-~(GoOPkDpw)~^x zWEa=JaxX7u#6r6kkKgs%@X1?$vJ5xxxF>E}CHhd(Gb2&lFbc(O!XXRAUBqXhI9s_7 zISg^5{wwh_Iq;SqOzB^qrT5}fxz;>BzYPZ4t@m-OS^pL|o8Rm`tGX^F zsm*x$m#gW$uM%rM%Lg`*Gi7D;@HAk}m8vv7%=je3WyH#Cc_ zlF%GitJVy*=K6dHSxN@?KE{|k4JdLpnIW5AMyct>N63c9aVRMXCE-w6+~5;F4B`{M zYFO0C&mHDyU(T3Q@pW#)Y8)W{>lCb;6{Jp) zgCVrrA-KxGT)cCY1Ra1k_4*w~ynuC6f!#%sN|Uos3F_7v1K6Dja?YQ6Th+=PJuc$u z_LKbB%@iV69$z7i_=rR=lL&4CH+jycI^zJMk6SPH5rg+{(#Yk$LyE>qZe_3v4)i&s zs8_cs$gO*y?y~Ud-pJljz4d)cKHD?MSy^BtJ{NKnn}wY40>cr=S;rkAVK3FzMjx@^ z$Ot$&)u%`a?*XK_lW*qG+!!8^3^C9Fp>l@(?;bnMl@L1?wMnn8SuP#|x);?JV)E_&__Qu$2R zx0ylfR>QhUDhX&8x|sBQT`1U~Gb@Y#>>3JRaN-(Xp7Z;VwT>h;K>ZpZ!<-Rla)=BO zIr6wqCH@I2r;{A-N|{%0C6T-kzLV{`&V^14);{QHtZygJ=mYg#Mf@Bqqy8>c;x26v z?06Z4$ca4@LGTV7+?Cfx<}Hm3`A`am z@ebBr{teXw2XV#0pMgJE>cWUc2buqx9&__wMW)(*Hyif7q{djqCe+kDRrM3xGR#Pri!pr^nTCNCNUvJbs3}7mPGrGu99W$&>Cl9NR#?_E3hoUr0CR|NF z(ESTgH0{`@b})}iqfpQJss&Hdy@S)MlNe)6{Z>M!5d^0%6X{!oVXK=ekgvhLcFPB2 z!pxr0%HUG*tEo8dHYQEhi&84?0jDYl?`U_UrtS;&Ii*qkY=~RQy*;#9j4pz{1DaUG z&0h4s6n~eO2OZGz{KJL+!nPV`xQ+i@W;8t0$O42RDE;d-GMhaptC|yqSk0;3si z;lgjbT_9nxGg&xgTWss^Sek73t{1OfE{9TPR`am!zRQ5h`GUA_S}S+{GM#CS7x~L{ zrZryVFVor9%CWPJu&>>X-{|3rFtNRNMVa&aQp?PihXeSG>1=*y7rlwet*W!f+1nzW z{Un^mZE#IQ1}70=8D&o+sWZvR632@yZBwqhN)WHRe{BDt#Epv!$(6F!;WGy_!h&C zGM-8BaED3(JC_n#v{bH~erpUx7D9{8X6WZ@y5I6Kb_L$7pU7mm%uB2aLF!P)FkXMx z=Hr#szg25w&s^hUXX{b3XLb~eQJg)qql{;VojnLU#R@wYQ?iN@%Ty=-D`q9ZsCI92?37=4wB+}Gd9EC6 z`8O_)!8>`wd5>Nfzkf=CKqN1aJ_$u#xGjl7H(@R_5y1$p-$0A zbFWJn1HM@}UjYMbGP}I;(_UNK^jIh6alf2s>}85dhPe^aioj~w8I5hk%)XFr!gM=D zHb<)--AiR<=l{B_QQAO#X4)u5H8>48*7dA__7uboE+wK-E9jl zfpggCOcX@Q-{hwCMBxXGGR1EFSn$GuE#Uh|6f3Sie2`WI>uDVMKyx}vOLwK6dd{GK1Jwpb;l^oVH;6>PhHx?L3@sw$S|CwWpn zbkIe*?F%&qwOx8Kr}WWvwimk$GOh$`pU6*29U|vGe#j8KmN~WC*%5VhTCLiEHf@c}EG5^gMOpe~w~C~3Br^R{Nt9ssP%9c3&DrcRTsZykk>uqFPU7_5-Pc8@nmM%U72EqWa#+-(1U)2Y@x;Y(jvp9XmP*;iR2rg7 z=?2tvGY1^xf#n6*zDi1!(kG*iyA;s|>4XiEtTRoG%N3<2*h-XDGUZ*q@V9QctsbgP zt7T#|HIjsUcinY$ppa{&ak^F;?BE<@&Arwj3LvlCv z^aoz8l-qjGE;f{m7$M_~XKAS!w6h!-qe(zIiyQ zCi=@=^;>3Gc}i(mu^&Qnz5x-8oy?FiT{c8;9A(2((}$3v=*+^Nly;M>kc7Hv%@BJ+ zi->LGQPDQEKs|qiN9k{8Ph<@}WKMLvJz7*7CTmpINMjC|h@CAtn9%D=#AJS@6sZW)_>-jF4e7k|U@@*7|biEWaX@>SnSIB*P<3l70#){IGA7jtX8)yWnDR8{ zND4%>Fp^!|N0cHpvIFNFj*P`Hk|$N92)_^8mw!1p-NrcFLF0Ve;ufleO=@pkp@h;o zM%#+0Sq;;NCz@ZzW3RsKk37miX_XV%hEo0!8pn{WN#7^ z9OB2xN-%ab4|4QmMi9}>2PnrTn*E}=b{b=rN~g{^nv+I_5znqPW+wJ=ql*W`fclKW z*DoI}P=fbJZ}zBN&K@NdlAc_LVPUDMk>JbJ?f6$cZXZn58nb?80J=hkL#YW2fcyBwIO(!i_40tsl}`WixzYF#9wS~1oUvG%c8n3z zjg*v_VBa0hAgltgcN&-X!lVKWn+*?>9@Sbn*%0%PZ8m&Hr}3}^K?WJ?;muI3+_?Ys zQ$sc(+pnn=hyblepmb;`v*W?l57@zvlCPT(FP!l>O`q zrH!q6gn(UNa^Bx~v1k6Wmp#M_9<#?cuTp_y7EkkiW-t4H*?SxKDyu8sKZg)Vlz0+A z8(&GD3wL zR%e(y#S&XI2av>XEZ|&!toFLkl|IGh?@BPb%oM%7l*{^G_ zz4qE`uf6uKcX$AhQ9frH*M%!FHpjYl{H+u7HQ#x70jD% z;|$){ZVkW`m^bG*yIpr-5-cLlpi;zF=_buluh~1mhVzAx_Njs-tS@{N^`8gXbsNH|C@yXcQN9!HbwX3d$4>GI z-qK!n#yHY$@8HWH=VoVvD(jTA%eY(v6}J&eA}O*lUpwb=cL4pTBJj4;{$mvt*IIS) z>6iQrFFRk%)(2yrs1}o_S4BFDHJw;v^F5kF?OurggB)sa5IyEJO&;q~`#9`xshBz) zjSU{P9gSsK9{WDEHwbYVui7|PPc@%w4tIR7+D84kO@FfI{N-*WZWsaG0*rHGo224F8y+?J9X6@=6M3cqjz{gfW)E;1-aiY(KB(PTgR; z#xw?MAWKlS6f;OiG($j;<|tCsVxrF5e8(o0@B2XSCSm&};do%j{$Rs?hkRgfss{!D zy*HEOEMaIcVil%>G`LGS@+KQOL(gk`0i_^^j3`Pg!o`SkIIRS#jdoEJbm0K%4w|4C z=LP!=`zd~x-sKZJ1I7{i(jPneL^Nu1q)39DmSC?E+~duM4ylN+JXDFgzi)h*%=*FO%Ouc`#@GL8 z>Ki9y*&A8^rZ25)D z8S}b`#oTDy49t!0iIdksMi`4lH%8K{Mt}K;IB&kju}iS&@E83$`-X^q<~rZsN1eMh zT>^ZTjPHHor-AJA+1gLX(TDON@!p@O<@+I5)8%aPPv9E)+KGcfoQn^#Q9X{=o?ylI z^ZKY5s}q~G$4`W@jGxHsq;U-B9^Ss6H)ySw>4a7B=T)$<#d+WR2lNFQ`2@&R(k{Mn zViCX5iKYBrIkA#o_}qbAFhVhDv3SB5_nHwQI&;&9ZIFa9 z`hAF51ZWKmmRTuy;3)#8a~IpiQjKqOVa+V;Vbu1~rY4)R_&gxZ7yBs8Cp4%!2PP*2 zZ|Pc1r=cmCu#CqKpenI#0SOX^m@02{VUTaA|)-GdapqD)lVI(jt6nQ=X;@zQ`8Z0g!O^XuS>Kyx>;j z{Ez07{ygp!AoY2{!!}WC4m_Y4^mXN}trYey(i1qgKv;JJH*9DcZg?Ja;;o%J$oR71 zIcdNe2K6q@(oWuxH^>Bajhj|gOXL?r*lvJngwf#YoId^Zl2~2GeC|WQwCRI|5CkH! zqa_dk=potC@`XI!s zNt=v@sDM2hIhj-rKdkwfSn^JXoq(Ej(2BGPf%0`z?}kVHfO zXAGpf92I@oU}`h^`rmXsL6fM97%boSX?`hQ{c#AQfdxnedBoWIx%plv#a(Hy>&(md zFt%)}^ZgZRKGwvRHRWYyV$Elaj?7#)b_RZk`SV}yO;5f<%>^jfH193gL{T7 zOWUvEVe5_RkdAY|>-Buc-Q)OEVuX^HyyvcMeS0{#Y&j5aQw(!Aqf#ekN8@!}-F2JM zj4;uS44xeS0_&D-9=ZFTpK9({Z?4!Ly6kT#4!@ z{+91MKJ);X9SOGAN&y(>46|1ndH^5LfZWOdx*`Wd{sMNYMSH^gJZKH$_O~rbyCd-} ziMr}&d|iX#CRUn0A$?OzDE?4w{C1B2FTi}Vt|(r&5`?ZMO-^^+8a>kZ^$*S`>b7(0 zoC`@oc5Qs&X8wA*>mIY1N!tagjqmk7hqY8JexSXpiOXxZ=(v8OxzwBWPN1u{KiVTJs6~yuFn$tSj@Gl{?=cR zUZoHbEUGJsCNASfN$x^KiCm5@bbL8px2KC-!vs)~;h4Kb2Cc1|E4k)$xyg&9N8MgT z9;Lzg4+o2*<#?DUd9ZjixwnfB^iyT&Pt)l?ynM!SR{1MObNcay{F$@}?<|5@t{Jr3O?2_x&^S6e-mHc%Ci`yZ5mc?~FM9%S2U^pD-@FZ0F z;7fc7wqFCnqVc=0=LHJXc2s=9`uKvC@l}?RvGcwEit3i@gX48Jl>XdaxA3}LBkM+c z?M4+X>W#I(+O$BFaz%_G^A$z7m|BW_?P^x*y7ll`8Pi_z88G2B3+pjbDiQ9jbXzogIL2x3r zJW;pOIdQ1vBFyQAqgwTOR3vj{dA{fdb-1-ZVcT)uD-7v$eSW>dug_)zx(otuA2v=C zE7JI>y;N6ZhaP;9@@s>&Lu&M2TQXPs?-7>ojXO81$FeC~=E0-u3DKANqFK;i4A~mJ zut5nM?ho*OB)@vKi^Y$o4Vd>^|Ku-z+RAHyK>o8x2hQxm#L$D(jIRDPpCa+cBJrmp z#=V7+S@QbcrMRubHMjm*)xoN5FgLICc;o9Ghs3YaF}S39*8NNi(2@UnN7iRLRf_z7 z^gnS)@@Ps-RO#!#;}dx8znf2;HRPkxymeDuQQyx_Fj~~*ettJ)efEnw-~R;P8ZF9q z*nhwB_bU7tu!#9B>wBT#vL6#6>Sqy6URz$1 z)j#jcVET{CS6hZZDc2kqthlngAy_f5{OVvuw0tg$&hnZEYWQGngui3%{)q1;?_|Ya-!eA8a5C>yuI^S0S3bhjhn2TJr*zEs@cJC2su5Bx z*ktt;xo4Nh>$vQ98R}=h^O~Riu4yRyo!8Q=_Y6Ou8;!?$WATS@{%Ed;4sk3%v*J76 zC%~mIY%~>mg+B=7bmyE*HhW6wD<!AMhI*p1Ebo8mN;ymvb9C!*>pkOv}l+Wo>lkuBM;0-d+-DzB`PSZEEi^ z%)R;dt3RXI1IKq@!yTGG_nSrDT|+iomc~<6U5B1Mv1?D8)4vLTnf8&m1mX$*cb`$! z^%^U#ZwMCGU(MfK{%ZKEBsudt5Oj5dh(AwAzuGT}v8~)xxcB=QiFF zxpTy-eUqCFb(?eY_O1s+ZQf?C#Ezr}j;W0g)W(O?Er`Vjxj(+^`WB*m<(s9n<0sNW zwQkO|Bb+Gwo1dz>1>y5!y-lC<{`+4Aa=h>J<9EQZ-coxR#d)IePe)TUKTd8XS$$ya zek{K?)Ow|K?2OTTPxRhGT4c&RzIEuu=3~7R$ChGOw%5Ax<^3B;mLy;#0x)dwBtcEj)s)tNBH4-2S`ei3c1tjCd>l64pS4 zmpC~A!Jw|imk1DFS4xDfjc>3C(-&VyeRz1^^IhF3!NjZ4aB9ynwP!c~>g)xu*pb=-j=ij)xvzQ05LG__D9RIs>qk?( zk6j5Lqx|W|qZys(edD*;{OMa`vt6)>w)4;CPjQGW`gz~@I+9-h^T*q1`~D9aZ?%cb zm^SN*LapzNYnsY$p!t+<2IhLQMWFK;y5Af(*Sm(P+`V~kcBEOQFFK8#Zx-~Qz}nKy z&!N`0$2A?xZ=m^@{!5v}``;lS^_usM3j?F`$yes4XA$gn&e=JL9T28DIo`MFc6k2T z0RK5}T+aR2upk+wu|PRy>)HXrV7{q7jtjFydyulLvIMdsk6!P~RzgS>hATcRhQ-beXk%Z265$R{H$ zO9SUN|5>PI>A3RdYfQS+avevGx8_EZpZ@lE5EnAU4S1gfU-49JML!qBqZ_K*8j4RX zZ~AnkwR^m+9)`V{#MC@{B5TZWe2Z(rm7xWO)qY8ZrsT>N{KoeGX#Lz0FnHhR!^sN{ zk*F|KwonwlaKXBTjQ^}btj ziSd`27+>&X{1;RL`Z}Jk4VkZ{{@3#(ty}WK$->L|Qt@c&mC2!sUx!k^nG`B`F;wwb zDD~=uP{k8<1+Uc=3{>=_`bugGhW1R-`s(1G0(+po>W$}0;u$-)d;q_{A{PI3G`@)y zG6xk~z>lo>5_v0DW~P7`s6Q6ev;OoJor2DxWmb84u)P8%7vlD@z`0Jrr|>x7#lWNS zn>uJ>Q@MKk`{S~Dd*)yGsD53Y8n0UuVbKdFZeQ(v8F9pV;R$_8-hLN-?Ol)tI?1h@ z!*Qr5*Muulw#W)U*+(WwUPI9eh1NV!ZXNWVx5E|GgsNj>wBq$WDB%XYUkJ!Kw?y3< zj=6I6bL!KO&iS#9Tdxk!+}ijxP_WYb_5~VI%>~iq@ze5HaZDue7oVU?iOX6TzcxDh zqlue1?JY&i>e|GDyP{}ZV{z}Br6{VtGB-4`4dj=$cSY&{z_^^I(hS_FY&Xyl;GUUB?7& z3k@_~Env!2-gR{ZJI-bt;yFT5yt-;6JWI&K+P(>Bs{D&KOO zN>i^-j&IY4^Jv6)KIZm+j)c7A_E!*y#h(yC=kk;e{DD%MNIguUM`({6c|{vspa%==0xz6~?Lha~KU@Bi8VaR0)GI0yauxT>z` z%#Fcijm*r^#Db!5>&9So=5xXCegi;NSL?`y!S7y9Fut!gE@y|&h3}LG9H=x;*M+(R z<>!XBgvOOiD{%bZ;$0Jb6@@xNxsld)#|PU=ly(q2`rz?^^MY;A24FBb`X!Gq6M}88 zK_2=tY4pnkzDx|Z{o4OBdGyOfzT^kn{+%zWy(Qor%$@+DggS1{$AY*Z*tU{SvB0B| znVW)bQaRPepZ25GbX0~9aV&L5ux*L^klH)J|3-S&ze9mw+ZE|g>QUv+CvFWK8W(J1 zv?#mO-pQk%CaIf)ZOC*vq15Xoq1Ig&!Vbnyj>aDcCxzkGEyo4h#`84_N3S>}zO`-7 z3E|||$KlU1TmhGV2@QO(?G?HzM!&Q^sz9V>%0 zEuUK3aYndxB+zuTfT=g2?#zel0+bnS{hAT?$hf9UWG@VPbBn6d&N!hK`mS^IJ(An> z+0>rN@#h&)Gp5j{@qEnf|Af*eznZdSfog@+LhgUhx9jKCvExz!7IUgrM`m!$-%=m~e8?f(Lyfg# zVTZ!!*R5&%EE5vWkJ07Ge|jxW;J>PskB0+KHx`DW+HkVI2G<8mO1-o0P>Z=t zG^f9S?7dU$U2B&9x5ewo$7vEGGn=Hsk1b!qZEMY4V0t~1R-Fc@(#j{3>bidJL~`QwsdBvMuMP+%U%X z=Aa=FE77ensh203@8g%5V}Fn%eh~cEZLz>EoU2YJZ7lhN7El1*9*G8CCTSR8IC&|! z?avL5fRor-p_yqipOpI|$!Pf`(%QBLIT0+iO2<}TlAM(vxwBi@5%Zmklc&r;|4rnD zJ(niWniXk%Xc8)FGDHM=L;-C-4pL-|isXntO@nS2LMyBi6$lX&E-CAs(k16rb*1&U zp+t1qfq1m_fC57Vh7>qV;BY80X<2+yD;#-zcxHF=Q+wv4ua%*7K0nd?qKnv$tK=tI zNwBCkztq5j)K(G(UP;;-q?Y04o`ZF315GC!JvHsFwst2g^++u2k?nOGZ3mh0WQm%D z>zYV%79#c*Xkw-JPv1c@O5EN{GwHd@x>$Wdyxza$k|NPAEGoADb)|Qki%!&Lk`O&s zqUn32b@RCB`3u(sThTVC?2cF>y1py= z2_q0VqYWUpM-|5J2Sv~iTXAsF6PaoCWGl35$zr-w?h&*PhkKCkg=g+t@-_TQthP?e z#Xr5SI~`pQT$GsCap0n=d5HrG4JkCF&|!rRUzC{IaZ%OOL z{6`IH-Fq(G+fDaw9B%$+>)z8pEb~l;QRz3gd8`+N#r5E}L)`+tE=feUybqx^IyBOK zWQJ!xv*g?O!oVZ@C=$=N@weofOlut?)zy-&vhX=a_^hv*mpq`*kU~QW9aiY@9Pp_? zju0A~+0)$H|E`weqy3R70en*R9vuIS&yn|^oTAxav>J@^tgRMC2}G+)`Mt8bayA&P z=7%rDuFVljEtzm?a3U5*t1BZmWWed&!l_yiY`c{@e0V{b%=<4UuEh7|m7-COsc2}8 z)<2=49%sxG7*b$}z+nXrCnmLq;**wT#ycCX#!W_2c-Ys-j0AA>vM*6rg5UaJ`}dJ3 z8J5$vH|yAMII-ah4WESZUaC$X#g@arOT9c+CRNY(zdR&lX7|UK`FO526OyMCz}J{t z`ykZX>MkL%H&`^Ux=)B43>JTt?T0V3{qRM$AI6#7#jz#kRhH~*$Q)*%ekYt-*o*A+ z=5@`+#w+lB0{IFoCooBY9}_52U?qX63jBmXi2|z$oT9*81WFZH zL!exNdk9QdU@d{O6!A0%LvKS01LKSaPPf0zK3r-S{vFMz!qrS8x{FBQhHmfv|3)dE-yzvGehA40%= zqXh*?O=RYa!DZiMCO=}WpEbV5&_iwF!o*eM?PwpnG)+YY6yf$&w^u(=aCFWNq>Sxp@7FRPXuB}a6I*V-#bCIp{JQpQrotNsKSX+fL z#O)n(lH)H7rMe12RXrRf6z>luCsn6Xg;iUbc*LV?1F2MMvhFBPZ6wt$1dipT`kYIJ zKvUOJ8`zlISXlL3D8MSSYjSPX+q0A7PfB$W-J^Od=Oky9gi_rFwP)Yn8%oZanCdR9 zt$OAniY9hl)!>}u)Z;?R{p`!S>XS2$38l6Wx4EZ2S$;w&wYe}96UpIOG8a~ibmz-Lu{6jdnf#GuB z#5e@B)JD?oqbZZAG-V(>T-H;UoKZyalS5U^QI{>J_N#%Uw$PN_$w?DZse-fZUWnRc zd6lc$_PXRLlR~LY6o#Xn*h*9>Ybc?D^3FE?OgldXhR+61$+O7(p+c%P2e0=b@LGHJ zg4MNWBYo@eRs8n#ENCVKmt6scTo+u#asS|=7#6&XbcSXT$66LG>`~}-{m6IpBAr=Z zq?7!Mbl7N-jsY!_&zMCzy0A!Y0~ZbI=bh_<*Yxm*!San;A=b4Rl4IL9ypd1bMX7*tLO}w)$Svlu z&PXl2tujmemn7r{eUE_B5Zl} zmfW5vSLKN9O53=immIkL0qX6s&?DaKU5E9}%rV~a?%8x0`yX@?TH=RWH>kuw@Vio1 zg>0vg6(<>1N*+%vEaJu&Rc&BE0Q_9MOqJ+-d{?#k>Ew!FHX+-EP3m*_lrjMTUxtI zVeWlsn4;(3UKCuW@!3BYZi+S}xxuQOyjOWwJ&gN9Yky*u5R%1TSURi+V$yiBi%`60 zOnXq5rQ0)`GOaxhX6?CY<6#yR{NL*}5~LBXE$yx?N!ONkwIzgi7TKF5S5pejT+Tx| z$;@V#H}Ap2Bi2$sx2dBUpXf5SWYaBKaK0;Mz7=EbU#E_{dQ1ruf16!wBf*PBKz{9GY5mqo~P>Jq}*>4`QpB$;vOIzsH_J`VdsDo3*JJ$BpEu$;jYh@S4#&Z~;zZp|^ceT9dG6F}xbh$4yKz z3)f>kQq=h6usB2Vvd6;77>eCJ4@1-lg?7jo(jb%Q14 z{uayIJp7L?IUBvA`ahJ&PrVF3--xENG}!h_R#4JEyk&L}sM^K{Tki)JiXXFJlY`wk zEc6GL-2m9E>DV&PDHY_u2*O{EAT@&23o_n^vI=kW%y#g}zlS*JQb*v9^tpX%eC+yw??X9n_#&Ju%2 zmFsdY?>x~Uzsx{R?>xyM|D1uG(W$MjU>laDeyUG)qVfU4PJs`Z-g&A)q{?+US9GGo zBhEK6kWY1rQv};C%|OmHvUaLmm+Gv}GK+I&CeEijKW-2S+b+&$IzM5Mi5bXeJIf6s z8+R9{vh#FMBu;E@-0>L(n$s3+c|d%!9~ zaoD5`{zpgdvN>!&yCK>-1dZzIRyRIdhak}DdbPpXIs|o|s8<`AtwWIJF?zLOc|i+x z2`+n^HKZGr7f78JT;>U2Y~=!mEr4ePurcZUBQM(`fDOqD#D9Xz)(K!E@&d<1?h?QT zY&>3&QzO7K0c<#4AZ`|1cC!FB8qx8Jfm|(s4MqUsAD0SXV-bMZ#}@>! zp$I_S-wWFTkR@C&xxl7W2MhG4Mm+6?3~HVlJp zU(P^2YeO;ECf7l(K9x2cgKeM5K&os=2HQ@_Kt5-~GT3%Z26DCy&0yOQ3K5sj3>%)o zw%r-XIh`};qhQGs5g(0Ti{nlxz0M>;z^!&>UZpY@)7k%gm9NDX*jpa7X1&Wa}O zl+69EhuA)R$-C%OY(e6iAMiomK5RqwObL(lWYxCq%PKgLH|Lho#m@1y@jiM;h|gZ{ zoc|~4BU_*7tX+v&GuQPYn|sLSXj3SZW%x$#eoPsyYi#{OAJ9La<3azN%Y*)z#e@FA zBE|Zrg_5j)*z!sD&z@V=E!H9Bdu~u~Sh!@*RfONO@T5J|qia~<<_JgXUS+9pfa<(~ z{O{#G?F*mk^9s8&5<(pO?#sl z;@qFL-yAL5CV4PghWqbcw|HZ}d1Ll|b8q$c^LjP=+DmS(gJ<4I=Nz%&d?-4z zYwU(|go|d+uj^|3Y&6~_1wY1T?1v4&z1I30&MbHLa8Y1mVI&YRe9{^eC_ zv4lFe;rugu&uloOyuCsrH-6dr$V{jy-n?eX7qp82s?qEo^46jFaJUlxc?=zg85O+b z&5}k$o6XH@P+w}pqBq!f58q>nTk3`uKNx_mpOxO}&^e)nt2rncjz41C z%Wrufe}nnOwjsmGS!@|{cP97mlJVMTa?)wo*sbTffzueGbfl@8wUMGt_vCWPzS`f4 z24HBYU6adO)NL8aN_U^{#0YiZ=F-rwG!diZLif!^x28h2+r>K3B-YsDrWV}TvnA|r zP7a3SZ##QZ_6|!oUlgA@U4b1J#pg{Quh1I`<+Ghws=y?HwkuSmkf+d8g$^rJqEN3w zrzrHQLZu1~DO9e|V+vUjeF~i=*a3wq73xuFhC(kWRISjULbJe5O?c$tVEbjX!Yw+q z^@=$OwmXdtK4bx=Y|YDohV|d=vd3RC+;8-bWeV_j|6zO>0I=Qf9Tb8S8|DgA2}_{8 zJ8k*0TP(`q9?(c&i~4wGs_|#)G;L|n16V(>Z_h;yp!jjlLrTBq{gbjYt;%}6uC&}u zF^&U^P~~OU1@91fmnN#h1zW0~&*ncE;`Kz!_L4JnA^VoVK@>ggf^Kjf_l_eWZ#xTz z+A@!Lb!)$voKdL?puo|_wbm3eE8R3MeEx#2#(TMaR3u;qGe!k;Hb!9`Hs4&7m|6mA z>GQyjA?^(a)W&yil039Zse0(%MIfb9WLcVU|D-O0AcFg3nyos25-p1bJ6k#&k8Mx<_lUZDcq<%!a zM=k+|%ZuQ!{Kw!XEo7Czw+rq>8n>Ou`vCQjAGTrnHC`;gB8_hq5R|9h#wS0f81j)q z{9*H6tjnqzx2i^O6%yQ|cbw^{L{-YXV!Jr1)LT|5vXZ}@hUYI)yhnaS5+TJJNaY&$ zO;jcd2~9W|vxcz^lJ;q9xEYX7YN3kC$#b>eE~~x6(LUkGJXh1GhUer*C9C0ERiS-W zAwJV?>e8dSG;|r7sHJP7N^KmJ7Z*8WYusvRqW-vL3l7U84Ib(g!_Wl6eKg7U4)Lk9 zRbO@WJI?xr7V3+9>ja18&2_PMq8hDMuJ1qz4NIfxVMCLs1jNY0oyf;J{-))Kk4u8a!l<;F6C~rN( zq8HID2(l*mwebmz+Nk%9=0OlKRJq2jRvk6iIzEeZvr%OD7ID*WSy)t!($r0DQq-nl z+mEP{1_&)17WpkUq60-fal2llPp#L+5I3HNg{(AjTYnm{;U32I$rRO@5mzVof<|tX z+aqT@^qix-#%;%0q{#sHsMqK(zw2nShPM&lhvBMDH6O*5b8z^6R2_{8&~nws@Z^8@ zu_Pt|Nk8i&$vPl7+>K8WTvrZ1&hwHY0{B!~`t?!*xHejPd8PQkal8XI zmivg&$A^Z8)B$^KC{xz(0Y!csTxi_Thj8M?r)?;|MJepf4j)zw`Lgyo-mg`%alE&Q zfeYqg`4YEVM;yodt#Q15QVe)}X?RGLk|!cRj=JEtRw)`i016sLjN?6SL-}PQtARAT z@t_SJs%a=Q?}9W8^3o-k+|TJSG$6m}{!o_Ndwrl?R(pq|gTj$w4bZ5DVWS9bSG$HA zZ#ifc;`4y6JZ*T)I9{KjiCVfQs#KrjK`D(-8Jg6o+P)rEe%%(sI35#_kES7F&_T3{ z7@HNtI367b$Lr%~;AIuLS!jAqapV}xaXi;|poF%k(e!IW6E(Fq?xh$=$#88w=Ne!x zD~DB>ywErP7DB=qR0d6kKR(bdtGz=L9jB{R$*W%#`nBQ7Z(rjxez)1>s|~}W9FGp< zmf7Gi)N7P`z-mLCMMt`C!SGC{$w#RCSv4Loj;EIU!&nX0mu%AYY1>c~8~}eJZbq_j zbrkAObG(C)_kie!mJRD75Jz;Q#O->GKDAyOL)<>cOA|L~yU74z`#_E-iwK|Nsq2j- zpU&cVTd4M%8gNG81JHzB`k5K!N5@r~yL)2qcH(m-tdNxC;z+p4LTB&faAS= z2{AwtoeWDD=5Oh>#l3{U$kH2&1;aPr((e>&5bYy0qZowVHDBu_0zaR>)&jasU>M2G zX0WkR+dcD_ySOk46W`#SHWiK)-+ncJwTtFUcP8e%Uyc(7KU|IzL-PpE+s;6Y2HC(I?ZlhBnXTulgvm`mrK(11O4O$2GK{mWeW zD*X`btrmZdNNjRH`e70q?jAoxVjH+pz8_6)+fP2s+#gA7A4zQ7fAx{X=F1``)H#Wb zxf{7(A{*k<5h#+#nvrSKixFFLNTBsaUZl0)00Q{vO2ou;6S3VXt0Xg_o%BB{s( zHCvPT!xlbj(m3*?&qrCjk)1Dvj*$+XLdaH1h&n_!y#msI))LB8LWfN9XZ6GdRKbQr zCa%fA)~&K^IdaIBBX3K*lv<(TRpCg>46430?d)P3YzK#tD7=UOQosEWa}m_(0P{-~%^K1U_)>M8VPD4M=}C zApPBd>F>Tk;1+=v33Od0c_09Oq`HF~Q15-Dy3??b8t5a{9i!qS)tz*X>4j_xHjbL} zKU;M-4#cxAUHV11l&S8%3a2vF-Ir0_^_c4JY%JQssh1~&16$dZs>J(WB%ZSSXD&kg ztFO6Ek2&^;*3Z>jbdEi)tiM`sSI)7=y!r;c&70Ez8~kA1p41E8K5Ky zPwcpVxFN$B&7r>rUD{-P56$D!@4)s8ccjbr`vbck^HB}})Xi}R05JUBAH3tsauL8XzM+S{ zkPTqNvzHNg7Oct?Z)*`R1Z1pq^OO1hm%?x0;7-?$0o8434X-GT1ke{q^Q6)cSPbCi z?Mg%7jy?dV{@K4N-2j`;4X>y?J~X_bw0`u)?MmxsHPrIfU)05)47Kdv5xnoKC)VK&GJl6$;x%g1i%4kX>h$G@@Gh_jb0o)e*nuzy!xA`}wu!Q!IfIhE@d)woSW@^C?lZro%sd+G{$?6^zlP?s$FgY8qW)W$Mj&KU6bBX>XU z$WyGVW#QVP;C*#ZlwUZhrlU??Lt8j5ffOt-e&EBxTrBV0A?d%MDgNDiOmbCPB!lGVJB+ijNHD&a8_-x-mk z9Czj-v98FX?~hbHsuMP4TOws$k+SYc*`}y`^Q^d9C7f*~hpRXpw&8jKs`lb)lE%#C zC03OJTdG>Dst?r2sR%Vxkx|^T;8KxLq-rNlFr(JA7K^$+iUH{T6wbeiIbja)bOPsJ zkg05)P>xfr<2W$zLb!rMEILJWb~NB|W-gN2dv+|aC5Bsy)BvF;V))NWy+P=OSo}AU z)SG9=Zg}&}Xkd>rO{}vHN}hFGq~f7S8BQ?U)hXeCJp4w=o{5liVqG<$XmZAJv5MhH z8RwQ(2>sFItYbJo5vzDD9ADKXK>XewrH!}u+S|Gv_Sn!TV8T$PBT8i)%rWZ08#isJ z^4nkr{odJ>CKTf4P$xuaKs0xQkO%ca%x8xKP#iuqUq3sXyF!@Kxk)wnhJ!R|Kbgnk zyCW4_Vr4j_>x)$!jzX{Thawffj+SkNx=TnB<0wz0;u$*OYL%3`p-7LodrKJYMs#ju z3q5FcNti#DNZ>KBqq=|{8fl@#3K481@Dy!QM@rY9rYEakl+#vm7m7PN&0SHWh&WWU zV%H7nk?Z;aH;24IC8E-3uJr}fBf^a4+K7n8SBWH}xvQ)XoOekoY7`%D7YiYQ=$e?~ zBy`Sl%X8gId)&R+9`~-X$A+~$XuAe~8ujsY#slK+#Ae)X=%Nh`ijv$gs07J%UG`X^ zblyFjq327fl{U3s7v=6-& ziEoYE@M|JERubrq6+de}JI&`#r1-69@|2UK@g0#v9L;KBJP0RxHNu2D#N zalCOGC&!?j@%5ITyjJ8}dh>h)vC%MKVs2z@Y%JbIT8*H%Wn}48uS%D$nuj3(gm5vK z2sU!)RZgCX(8a0v9t+;}a$)3`V3vOqb7EyLKq}UtDXXk`xsHsctSV7%fycwekBVt( zs08oYUl=WWDH=Ewonmc*)YW9()Z}nrXQcR%7`P{LBzV_5MBXXJr*FAQYrzzAv=?Oc;XBQ_G*hf7(TRH+$0Xa>f-2B zi{jxIRiwu7e-e+09hT-fQ6v7ZZqu9SVM|!F_Yhz=XEErD-v*7*;%6^SPAbO*sCB>P zs|;TuHys8KY>E`Wi?{VL6gb|eKu=i*)KuX)TKpV+u8KzE&%mi8s+BT{>9q3@`N!h# z+3|0VtL=;xzXaV`Hzn>?J0J;YFGBRdyRqVZvG_nNz(Hw93v%PgJ>)EMH_u_+^mU~8 zMF{m(T;SGPQqC)H3M(n&0{Rk-DqAWiG+IU^rh(i=>Ui3rKCqVVf#6+l6^0))^0Rqp z7-CSX!c*GSB(5FO+(Pg66o$*d+>TiBcBa<|(-Aba8Q@TaiKlol#-N97L(qMNk+Q=a zjEx2Qqs8yQ*HjURMb(N0G+U~BqQ%>y!Mh$Q-yey%4E*!X}hNyO^ks$HrZjOpXRX z8rd(O$;>lM8YVLYh9htb&ACoehy@rCu7NjfdovcGqc_Y|dpN{aMyI_LsbFqhF{Enf zB(9CCNZ@HsHBJW>E!!H6KNqQZls*va=g=a2+f6OZ?yKa~ELsK!eKJz9pE#NjI1w_D zCR;D)9P6qpl#!EIpnxjBhht^EloPAi!oVp~jQEBw)gsYesYl%0H1k&N-g*@!ac_+t z@q2d&m{^r>-&Xb6Tl;PLhU~zJR|8n5=%lgVJ&9zC#n4Qs5b)*pNUpT_u9xD;)ru9r zdyRc-U#mybO+?9cmLR#J3!oRn5e!4U+TsoRf=-5OzI<<7h>&x`HvP-H-kFXEI}w8Vm0I5W!Vg$-BlLX{#%4t?lW+qcH6<%f*`ShFY>WnW zk*vi)Z-G6-1l+1Zl7T}@a<0B&3!w3iqcB*_GgM369l4>0sn78zuDw8Fbv=B;D`(J4 zR}jM(0|OtThCg+SKXm|(arr{=R(!UKOL6UEU@z{UBZuIj?JI5KS<%5m6BVwKnW*^2 zM7Ls%o0Qht!*QHe1}Wk%L8ZBImQ>rcExg+RF3Otrs}{P373UsP|U$t za_Stb0(rPuB|SkiTWgLq?{x9@7SbE<+YQWe!IM~ez7cSwAzH8Wo*#w>2?$gRsDxun-PB5h*@^3lOmfc+p{|p8>j4O^Hs~poa0L zcJroo#{zwkV%(0Hpb4MqE{v6VQD{U_6020}=#*7z5I}V{2-ioAtp_=SBF+GeToncEbcj&}jh$o|mF)ckQ`_QSAM90D`4PNcP0*{&AA z9~RJm@UB6y53#OOL6jbD-Ihc8jcU0G0_o+A);dpw1Kr4^hC_P5Q3m`xtW5m@g_L6z zOW1NUe8V%0ob-&weHu1$nD;jffv4CFhxmH$)g(vWGWtaT-R{r(>d;8w5ojgdw0Qd( zqQ(S!;o{_slgCW*ll)1Z^((^3yGS1NhO3z)rZ`KGO-_((u?n|~xTrS+0)HlUHxK?w z9hZn3-?J%P`G|9v$b#@dXE3NV!^aTormWJpeZe9dgA9}Kp}SRcAW4y)ZehV;f(kTw zqk~WkJWDuWylzE+FrLDgc3Hj@MN&+(8y&GKWl%A0XZqxVOR{t9Om?iilL|NSrSB~j2Zu4<2F;QLwPg&OtHBl7WhrL7@B`v zi#iCTA6el&L=J1>lyz#A$l6I4k4xl;1!xIFW{ak0QVfy;A!U`-rC4h|8>(?Px#zC3 zdQUM-^UcPuTQ+IVE#8MD^PCYS%iD{X$1{uPH~htOB!B~6oo@ zH2IFOEvw0moLmlSXgW@%g`YR6$|($&+9Fvwv1U=8$yG`q-w*MZyuKgf3^wUsG=W2q zgLr}R9<>bw)A<4M4*w91Ugl1qJGPr&8vH+T&9i@JY4c>f3u)US+q=+W||Q?5Gd&DC*$u z*Zbxachnd2nA}l6na7ll`YAl{pg)zz@g4QY^EjcS{sbN$>!|-2kCKjhZg-k!(4WtBsyt^3I+2o;Z+3 zlm>!5R*2Xm$r;s9freB}7iJ}FATc3p2*mK14N+^)zc^$>=%EWDD`}5ra?L8a5W#8ZlQ{ZiU?!i$7v3mB4ecvX{+E%N~?x@5ah@ zNsgDYDX=$I_6iENSlRB#ugIByh@64fq7|mHirvtSGO8N~*e|fYjaKwfabvgQX_K=GBLvGI%9PRndCReCT==_ z6_fD9QfMRdSxgf!;`K8q8Dhw8f!;{*A(q~;;@7y;f&5IJjeMsPC@va*Ud~!fG&Oyc zfB!renk5#lmG(tbrsFuw1^yi-i3MG5!c|KE8h1xLQl9v4$;h=~`)q169GtM;ATRE_ zQ3Y9rvruQzE}2+_ODUpOwK)DFcwFryb&)KerYmbCoy3AQrgLEWc2!tN+gFH~iDX2N zcFETCl`i32OGxL?l?HcJc2p*}J6aE124dA!lopJKFzpRP*Mnv1qM+=#+)RQ7K)K8 z3{6uU(sCDcM5lnw+*P+(LZ>6mU1dyc3QnJL>sE)S(BNF!KLtGGf|n`aCl`E8xvVQ1 zc+^xnX%*aa2<96j#alH=Zqk(b2nBB~WV}3#J||>)XWbbkWtqS1MZX+HMg~oBv;mjq zhvW0v7`u^;vFG!eejLcb(|vsj>_B5Yiyep!Wd3FNf%$WkyKgreO~vhSIKfNZj^KxG zb-|&!gibkBdfGb`K_Y5bd;vM=?cGU!$mZ(2RNqO6OIIt%ij^dM5bFF7KC!O04_qN* z(HX`GcVCc`%ORwd{uijx=?!$5qKmv5(0Zj$y-ZO~XvpY=LPGT4l5$Z+0wlgo ziG9Tdin!4fB0|1*xLRK^`avYbhvj?#5o(pO>0xgk7>*|IZZODeI2O~b@)zP|(RlZ6 zZ~OB(IS-U765hZs}p`LSYBv(!jypMn1Mhv`=bJ+qe#P7b| z6=&D2dtZ9i`eKbuC%YZ&0>Ny0aqpkDIQLrpb<5U4RdeOjO1MF&wAP?K+~u(fbSd3s z?%w_#)H&(&LgtrCmqvcwMM9XmKaaL~j}wV%+0c?-O_Qi*rgPfuuC)DUmy_#*omPik z-qg{Y*mTYD+LV)3TteBwr_ygOi|eeM(aXYU#x8GbI?~?zg!G-FZx)l;AK+ZabhI(n><|>7)kA(a%r+0KKX8_^))hm z?f6&$%Tg`5PKp)SB0lBi#R~dJejT~Kn%BB(8a`-_j~47wJx&Ox_T+{OxV-Nbg`x%T zs)|#|Xd?F&DgkAp;FT(a*j4T?jFNwx4Ej=B0ARMos9*zHLWjKCSbu_-TCK_KH9)nhT&;1jA z&EMmexkb9)n;meEaqi&*$Gf*Y_n6=w6Wt@^ znmy_crTRVwWwwl@hNh(*YC8X>;bh*1YO$J{`~@R@@AuESz7$-(-@Yodej)wsN*~Yr zYaU)fx4ghM9S8Up2VTlUmq3t>`orA(E$C+`jNWgZ_MaIB8nU}3{kwnT&v@RA?~T~D z7r9Q88`yuk>AexI#N{?i)4=Ptj#t+o2GleaWe9gyj2&fuG;i%!m8|InEITHIIwta% z69}=SQeYf`aSG%T$W?%QVC%;#kVha-0TR_uP+%efOP)_4UyuR<1qvKP;1~stC2*_) zlL$;wppZbJ0>=?JPJtkSpaNXYTF-S#thfjiD=?YBWCf-Wn4-W`0#g+@p1|=6aO-LP z2?~6Sz{eCQAyA^gi3Cnm;3NVkDR44@lNC6Hz$prxO5julP9t!d0@Lc+Uu~KYVof%w zrhF;TX)tR|VrUFBJ33#;-q2^?a}&XCFLwAaH<#Tvv2`%8A9Kb_^?S$sVvKDTS^1Yv zV}1Xu41BPXYj{*fJH8>EGfMJJ?3~dKU+%!nzTpu?BOo^}&JKux4Dekv0(U&_*7VLa zPpSii9A_m&;EwKsLj})-j#+wY%gakc$6R_^P5#@#`!MAhdH7JuS?)ZAP9rnjPT#_+ z{rN*XPJF(91Mv6xldXDqK|d=}+zr+k{n}J{1pUhU^%@A;dCC31c){MjO%!s5Pa$)l z5Obw%g26%W_F9n!%hh4;b6jK(X-x1*;}Ro{%Z)T3&)|KROrv-HKctR3P7NJ%Nfv3W zhrmZ1eKa3$w1HsYP1-CE;qJ;=IE%XYYfk*SF2nz-wk_yCkVPLKz%NPaueUE3wba0* z-2LzHCnq;P?Ogz2W+ta#`%G~|5tDJGK*wyyt2$;oR@E`vajK5lj!|{Yc6_R1wqsKr zvmKY}nC+NU$85)=I%Yc-)iK*~sE*l=L3PY_{HbHMV^1Bk9e3)O?U+-?Y{#2AW;@o@ zG23ybj@gbebQ zn%-b- z^MCPB1%2Y+X$7Y6_F_#2Z@XU4!rSR7IUI%sK8&Uz?XDiYEf>Ci7d^l4dkLuh5P9Lq z`=X9~=YFUGx>`9HzeSMfXdYt^enx(_{r7_Y>&CnrH7w}=(ofRkja!k@@`VI&yRPYR zvy#B2xm0GKFG;U%dl`&wk%o?jn|HmR$-mJ@hc zQk-5E?eh-g1<3!spuFF=Yw^lMtEouqaOp2gsSr1x=`!)A$rL2ImQ5lnnEOZKaEk9LqZK17QLX2^Kf40LO>XG5#Jj!c@OJHIXaj}1D8q%8;RfaMKn>-3 zyEagG>u_0P1^dC%B7qmt9){6Da@hfK(ibf6Wg%>(yfWWP(Ko}V_fyidz*Dg{^5mZ1 zyIqCHcly>h-e2K;TNNax-SZ7RWbY&AY^}3p#af4^>wi zOYyt9YXXgF-Bg6aV!5^1n9XxxcO8WHZ6VqXTf#@R+GELkqok$Ex3=|ATEBc^2DNICn zL!!IBaK+#)Q+Qc|nij%%$6E>lNy;r^rJ)U_WEl%yG!Sclv#G}EUSOHnkiPDHiFlFZ zWuZf#1Ye@o>0-Z4F8y1G@AYs!h4@W&{}(NpXcIG67C;8ATewLe zHMpQZkN9Nf&!@k0d|y8G1IPE7->X#k==lB@UNhtS2TG90duMWnvinGtadp`4_gZo z=lIU>_unaB6u}6xa(eVPrqY$p29 z@Q5bw;@qk(Cpo@fACi6lBioUAL%|Gpad%KydDq6Uzc)<=ctsz(CbLb9x;`3Dc{j(i zYLL9FFPx06_1@S#EY-#*qlw#5)H3#9m00Ys_c-V^e2+mfp93r09L*(4MY_s0k@s!C zbZz%d)=eR;o2#>?6tD3xveKCQPktvpOUL5#Ncrr@_YA&$dF=s9-@o;TWFw^e?a*DJT2(3bkrKm_$@Bwk-0>8?LZ zKy>1|0_Mo|7`cm-r-F%mc6s+~tIC$ys!84hg)aN^>js;3%S|=c*?6gUOt>ADheqiQ9RsWdBdah2 z%85BOgg9a1T+Vqg#n2h{u!A#T52*7MwCG#8H{P1q~?3cA+DOMUCDDk zL*>1{0Y>)~g`G_mc)Eg$-p`Ultyj6XDn@d4jUOZX)0KSUevdQ5Txtx7-^8m;pi1eE zeRz@oX^Z^YQv;#O`f`^0wWp3Fbh?Fd37uh~@q|8Up*%v6H8|pS;2}IS6>QaYurQKna&alLQD%JD0tmMJmUlQTDl*Fz$F99EVt8yrL~Ed% za7<$?jr*;*TZa3eB(K*Kr8fRfdWiH4BO4OA67cUB9xOg`s5l)xF>91C1XMM+4|dw6 zgt#mvy`VFja`u6|Wz^Ik93AZ!zCRPQJ=n={9%bd-^}sOJHn+0VvJ>lzO68s~BXo_D z@A5H}oL9~vLI%nJ10|0pcnyG|2~0uE_>jSsHBhvf=v|^*TQ`4J=3r#$4;1@!HlIjQ z1DGroIRwNXD+6BnzlvGSn8rA|U(>w?(_CPX*~v6t$sQ2gdlx#gzVF}7YdEpN`rDmt zqwWkkhajI5u-uwX+F1N$?;G`s@6P#D)s~lM2Fyx2k&UYjhO~p-*<a=| zi=yS4ApFrp9?TB!A5MMV=P8N_B0Zdxw3wuBK#?reU0YsC^_j8=FjF|QLK@4KSPA1N zVT2nNt=D$U3?~YkCTf7`!a<|}7M2<(*~9C`1K=k3GkFB%kABCxqhLLL7gMRXiD4zhq(4x30N%VUx~)uKz~k!bJ=J z^jkNEt9FDtZ(4lqqHi=VzLtZokeD4wG@^~#%h^ocRT(YV zrf?qN>3(=T;Zi@GOSr@jk0V^(RrgiE9hmc4W=Nb%; zK0?Chuv)>Y?mwoWKOXJrT4gGt&ZLfhf9lw?O!POFhO0K(G3AfhDk5~1s5hqzM)Pz2 z*6{Ze{v_|T@pl`4G|&FoB1Q7C(QD`kdJT7`=~YE#(`%%&)u&eu8AsNS((8^7r&kUu zL8L~nN(eRTAh(fc5qOGN==i9`Dvr4Bp=>{ypXB$5U&Y~@52n{|!V&(n==F%Ia)kUp zsCA&hM+k%9h*HkkOK<*174-iA?XGt}u$wrKp6OZc*o{_66B@pA-;2~Ju}ut0^mrl{~% zeZ?FuGZa1c>R#YaXAL&1N#@`3bKbi4)F;3;Iuh|7X8H%?z6TzJ=S;v)}*mi0^-W#P_F> z2(shibdvvu~yzp;^M_N9C%Z%C6%p6?Xes{~t z&Z&#N)6ektmD%rjUi-@Fr3*`IR@l6=<0=0e#TQowi)WYG5@R*_O9nD)xg+hJtv>1~ ztBe#WRT9IUiKEnNrnQimS+I+B}Z1R-@q0K!CADgMooQG_A|luFOGt}mUCq<6KwlDFphFaVn^`QNh4X&+vDy* zdzh<^%+WE}gL6P(a=7`dz>J<-yvsP}XEv)cf-mdx&(U&4CY~8|p)xKWIEfxD!(qk7 z$a;$7Uy$WqDpJ7#(s%4+E=N0~9QbYB_@co%BHYDEOY~{s3J#4w6R8+tap$&m?8Z(c z@D@z3JFsG39vSJT$@<7r$qW36%;o)E5Z{7(!E#nmGW5JS8GRG{OhS_*!GnWsc7TN= zV6WOK?RO|;I`Nz_HYaYiMPp{xc76&X=kP%j0(}RoA#LcGwRJbCs(HZ@eh1CdsYw1Sj#z2$cD_PH_!x;}BJb}xat7;p4nEH&d8NK3%*fczg>k&?X#^vTpj91wWyFf% z&_fv$X?L8c@G(1{QoW!hseQ+;Q z_8ezyyDYh#isa3@YKl7mnClMgOmU~va-B|OiYfOv4-+Zwl0uv#Gj{4Uth%fcCb7R4 zUU?JBd9wkMyUIFciXH6Yo3O|?!ztb&mzE&C>TG z{kOg`7rhhd|ISYzufwm&g4OAX$UFOo%t8xS%gfY*&dbz;(kP%vm;l#Vi;BC5Qy8K6 zoRZ)#>V9<{0Zw1lJrL@c!?~-v2YF7*XsNna+00X!sjAm}tm)S0nr__tEH(81rRVdp z_HH(ZNrm;|w@2qn*_$MP@cy|nZ7-(pvC}g4V&k@hv92R*tTOurY5R>KkQc*0Mf_1a z7v%KX&T)d9^KRfSXg7;v0KZP7Ky&!QZ%dukTncxugpv%4f+vCVM2RcC)>7Vle>VEq z`X>Y*e)na{arQge@=5i0BejPPWO^ywJwdc(Tq@l9 zc1>{EHAt__8%%61-zgrM7X0p)0L0{XN2VOcCF0%QPeUf1w9nupn8=}Sk|ZzQ=meQl z0SnK6?nf(h(N8G?I1-*k|^nX#!KfS(a?R$&-;4sVf2*`^+jbcq4RcT8nNE` zV8k1|(>gZ{eb50eXZm>9duF^oY*_QIs>J`jd{(yJOC37Gcdw%;i#qEGJJi=;bgHP{ zr=B`I($f4_E#Ny06!~BRb`PaAQ6+dMpKOI{CNR~j?ap`)QBhZv_dga(E8470%~Fm- zS|0JKRwGDC2L zBTmoKZg2Y+ED^pG2E3J)LGy#4$iz{QSl1;gXugMDa4Z0Q`)+SBIr>8%I)2Ift6MT- z&``gWcd&@Gq8SO~Ef>cBOwi=rU4#wAyS-n0&ke$XrPj|nAWaXuvWc@>8v|2dXW83J z!`_$N$XCG=7D070Ukce#)7oHNUz)8;6#v#r^uF=#x`NmG`&ItGy>!IMm_42QTbkyfv z@1>^Ukvg&~Vas6GZ~hm1-vS<0b*?=VG7#F}4#>6jl4!8diY5XzsibCL24-Y}R7GlA z6k~yki4$WYP1`VmA<8(WrM3379_^v$)K;zbKwGJJ)XpTcbK#nVa1ED)>x2O&;gTC< z^1ts|dnc2C+MfSE&-4HP(>zaRugkaA`qsC;wZ662e%D$?!w0v37&<^R(_$=)^a^`} z4?v&ze)CPCZ`<+h6E74{IS!WiK#_=t-E##h^i*q~%5hXcZGzturJfa~=Acw9TofMk zA`$^?U9Axg2lt|VF$6RrOtT@H)^r5F19GS_R74Kb;$#Yb)0xGHvX4rbM!wVj6mu4P z8P@MHws2Th5@sbT33J7enw-etH8};c48B#&q5Sm{Y7rr=k>K6qpjQGX6+E+z9lIm= zTePnZD15y%70F_RR2C@Hg5Fj^Vddb{?*?Dt@y5g9MU2ZaNv04J~LiU4zPQ= z7V`l|*@{fI7Wdq434Ze+$}KCbwx;4_H84-W2hQzccCS$Q?&9i9d_3W1RdAXjjGkwF z=u3JCdFLM^kb&$q!;z`hk1vdi9vrj%bigWu{BPE+CMQ4aQp$z7A#D5d|;hSBI5 zU5Qvl6iVob+BwOT*K9PXo%k@WUP&;jS4LVl*s82-OH=^c;H~?F2B@7Yg0TlsWx*Kx zga##A1#8pS4ZaI(OFtK>K70=-5jmm!=RTqQ)~3Pb4=BFDJ2TE>J=n*D3l+PHi7P0i zkBK8c9mK@abv$YlNRdTkL90GaDyqU#Od>^)tFf>l;Qx`7fzN_Q@Dv|s8+x+%PO^bx zjK@zo{8%rI!@x6oX^TX4<@=3R-XqcFv7p#%7i9CM13GmaAMQL^X9ku<(;;fcvP{us z4YnUP_wgnyJ}$;*M(EOgr!}=*lWb$isxAYD9cA@Ue02;QE&k@6f$ZXMu85^`SsZ^K zi^uQyISJ~O$!n6=qfr^SVl;nU<4HW{2L9fk$lqnj{9QPSv2$)$dt7UhGnoW|&NTkI zW+3n#eAG1<)MD3Pk`qxlLVlZUU`UVawPc@k{3W?WIzCKZEQ!}7lT)O6DY;38{5H8s zhWtF)Cmru3ua}MwlS|-O2Z&Nipt{|8Ga-VuO zyE^bhk755l_3UzA;8>5rx6kJG#bKXi%KI3(d%@W4$td}fV6_CI7p$(QquBWuAr`gA zxfdjU{BOnoL&=NPE0caJst?h9H#rf3uO%-gdqOP2;cN<+i=EpM^`qoWj6Z5wBsLlG z_?Z~?1WnSk-wKP&85;n2WvanBmBfoaE+LPZJuTBgF)!mVE>Y=cz_9BHE zVS*bY9iXdJxA)N%hfbU1*UVhzZ^-_LYygEHpqrMV}XI=Q?ocO0hMyP?w za3zpkXb1$%rf{eFdgN^2sFgtr3<33{@J>)Wz{VSqM!3F{oESKoWw;nPy2Nlr-5x%I zFrD{EJv}amxqS}M17Q4DtQ{=u9pq`(%4#s7XB$xul-e zQ-~%TBbsa%ime}whBzOu=7zSS4RRpp-Qn**G`)F^Y+n56`ru=Idcf2xeZn6T>VnA8 zTSZg^4W|}{-$^ckmo0c!wBYWIYDVO=ItFUyF9u%$e+G3aBUFnD#iAciG#o^&;G&G7 zj{DT0z3hM*umH`BH(0dFSs2D1I0vW4n zDfBuzkD7paOr#l24Bb}y@-7Z_xP3A1&QZ#0yp*DYJK68RQKAuf6}xUgcXz%fho?6p zXVsqU9<^t=%HB%Zz9Yx01(BCTtwo5BDR)Cp){~v-*{V8y`SyU{niIrNZYPrF_#x_C zj1bN<&_Hx7rq~|QhPo-)JJc!5_n?RVTpRK*vKTl_ltpSVM73dXLKn-~qrR8hu1?9R zQQyt22|TeNt=xgcrk&E`FW5 zApCHqs)qkqLPp;Uf9&J)Z1@)j!B2QoCZ8GM=S%qP2|w@SGvfN3y3+MPCLC{zgb~*V zB4Nb!Gm$Xj`jbew(zRM7jJQ^dgvCy6zHN7Iv|o>GfgFw^0PV+0o)9BYv2&LQ z5;>iSU<`ohn<08XB(N0{*rguI*{>eTtx_r5bwFZEW*>o6 z3)6bwE}Xp`QeBi5G~#!5laOk;kZO4S1`xO> zsa=>1BqC!5K6X0;IVC`n8ETR1=hEDFVPseg%H(8(y(5Q*B9~UzE{xup$N=#OVH+25 zejyz%$-Y_y6TupRM(d+RNX3c^Jbl!Bpa}DUu7(k>?!i2utHJc|e70de(1!Uyk*i02 zGP_fKayi~-&=*f&#Mw zK2{tl_rmvE+3|~9O`z6Vr^r>1oVj#ez?>S{9xzW1cLmHp%R6}>bJUrZif}llY%Y)QiER`NT z8yG!g1EYs*)V9cWwJYpbFLUzH&7bs$Pu(0ot9nqNT8HvfPw1>#hcO+M=nj+@8Oj4Q zpD~e!02Xx{IBpxP+TOxbZ3E`ux$Z=7T;~Uip=;Vp&Tj6$Oyl1ppli$va+tr## zePHGU!>Pc`Ck-6|^Mvq82qDs-Q%)cyb8T0fBS+N7!w?qpZ5R3SHz{&h{Y|)6?aJRf zTJ`65#H;?0Pwk2{2FiyUdIK{bH*}~FicaVQ4a`gz%}iIQSKSy<5skL}A?G&`dK-Qx zqXKV11{?ciun{u&Mx>f~R#DO&s6I-8?aEZ&g2d=bgd|l+p+EbxsGc98nyt8uB2-y| z2J_2JRn%NWH ziz;Fk(ZX3o3##ak)CS5Q0pI0M8cu$$QZhdnZt46mYNlQ%t@lgpWlxTfmGK z#!vX{RT@b0fNVL4SZlcf)X|Ejo7^#2Z-CljNEY29HL?>b$eCX%tlUOext0jV^ybKG zas+r1BY(?s%*%%7?1ye+>~9X=q;|W$pl%F5nyEgMvqf#o-GYE`Wg_GkCD8K#)U*R3 zKch!&3;)>1XSeG`@%$<5ws4S##oz%wY&RHsNsccYp-f#EgT)x*$HcnJ8Nt|a9%I86 zwK;pY+PwUbT9b2Ht;wxNH`}4sg`ZA9=F1b*ww#dK5`K6-7}|=E2j(O07wcr%KNC;z z!k1|BBA#6^fMN{WAK5BcNW}0J@TW)W;HyBAwIQ8K8_M6BF#2*4%r!}@3 zz}7*v4py;_Y=N+exvI_;t@fGUCSzTLplNdr^3*O^@NUL;FZ&EXccMwkqA;$ zsa<)!=}b_IK9P>02VE+J_mK1m(*7{7P7FNt8=0<6jC@R&9)L??!5+2Lu zNs#&ig=RyIVq;OWp*>LV6!)AIqkG{rEamupz@TK}%MAXz?p0p+53#^mqpW$3lJ9m7 z!~gx1@Glo!0@p_aX9hfyp$7{(caHRUyDVsiwB~|8KGlpia zoe|UP!@i6aEw-``MPji4Bv#;D=nY;|?mlfzSuXArVg=*OBE(ma=6fn=u-=w`jrBHV zl4;d;bP=rfDG5e#jZ=adSblsN9I)sn*ZhLlS6*YStpqLKx7POTN)*<&?1&XGxt_}M zS6sV%$VV5EJ@(-(%71Z`yhvM6hz35COLM2pM3j zp%g;xCoTE~U($=?Dx6C%jw^mzedYS%x1-BLL1R9xpifxz3noUFb^U;{27E8VS|6JN z>hLJ$v=R(}&xqQj{u@~5TdF)g3`ft@(lI9%u6@E4hr0>$g2EY3XOnQ^48=SjTrPpt zVT#cRk#XbU>J(HrFagP)o|A|`nM*PQt3}`>I%R>k(1sDGrbzg}_E3;N4n`LJTNt(j4+YWQ2&XLyQtAs=mf3iLKgdR0$c|gjkzu&6qz+LM?hr)+ zM4Z)1GK+eGF%`{iU4O0AEUrTo*Td-JXbkH*)+KNriWw9&JS%E=h@r<2A3%~?O8jCx zj_G2nA{kmefFCJWiW@=-vVH@TvAB!qc}S*2>PU3@Jnk@6H{!BHl*RrSCu05=BlKcBxTYgtXK)8Ss|s#UMGq>%;GL1wn{G!!c;=g^$62cfJf() zf2o2Rv0PP1_7WLyC9?xlYr>SN&yc8xwW|`f>lDRRu{c!zDk&Hq6`B^g1_tU0uav}n_hA3(J|faV-^pW|VaofJs2&`q|D*%S*e@c3Ghn$| zH_+!%_haD@g3<=8h(2J6&X*m+aDlrYBl_qS(MB&PRU-Q!ewLp>?Qr3!MaemapIoHi zb(J}XmMXcsaU<&;S_}UM?sDn6s zE(dYBxD40XgL0R`LWGZ@&}`l#`{;a)g>TJ=PrUjdpbpXE^#@_%^#@@)5GG!MkdHoc zN6=TDuV|xpg#F-+RykVYDq+Q`kK&O=FpRMplB|Icm-|_fEexw?*e-_cVpt;*f$tp1 zHCM#fB0i@c@wsBOYasuLI{%5x;W#U?7(x5N-?tW%;q_9mTgWio3~OQ-nnaicYK&8~ zG)Y7h0t9dkMF}kxU>YQd>?N(VLh#`N0H-iTcrIFpHesKF#Za=hfNuFw1lPg?O>=dv}5}}4*V`d6N^APH%FAu)w`AUTVTqWuhT8oI)3}YN$uUMe~ z`4h^@*w23H+RPq?@5z z<_VTjF!>UinqS{vaJ@dP#L4LnRRiWgiCiH^TOq5PkX3je9HPe^h2!BwW(mjBDU54D zi+utA?1-)hAl^@XWy?dy!WLR(jR)<9JZ{GSLN?6(Y#8m!C)#7mzxYLaPX9MP!Fe@* zV4s}S&dY4zzWJxdZg}T_=0X?nlRsKZC$9vT?F9>pISVooRm|J_GDl&KNoj`d_zmxb z)bxaqpD!K7K|!!ug&$!@Pk}7bKr7SDDMBx&2x*2LgA;4X*i^!5%Va1#uRE%xcC$Dt z8(T_n%R)t4NuIT0$+O;8@nS|Afd!2mB`+L^U^*06@do@Xq3XG;R18;EQ!3tXl}$e~ zZ5a46hwu8u8^kM1@axZrY5VUn?UaXQbruc>{*SYH9E|biUlIGs?{EIU{r&H6559km zSEm8*Z-34k^y>7P?{DU7m;cG{Z#z(*Pk(>AV=xn+@&5Ml$NyXJZ+`=HRJ^l(=KI@% zPb=u}dVhOxKv{kLM}IZe@ufiw%6O4`rCNWHtF?F)@0?hzgSy^$y54WgnH-PE-%5b09|46I;VN(q&vg&vn?FLtIJ!_TN4Ri*@gNp(_ykbLrww zid{4o??;rW#rqy5Hm#z*WY%olVolv+_E*Mh5g^w> zh8Yj1cKEA6DR?y-yDX_&{T1;t7M8X^|;1@EGGNi@uOAhi}%HA4=mjbujnQGoQLdM8uc zMD-|(8f)q{3Q!9LS&bA0Lx;JA4#X&>tK_uz>4R9az-z?Q=P~9#eVRX)F!=*W$ITgQ&%QiranB$GIiMq9cC%-<#WO3#>e=U+HO(_O&GW++l9Fk#EX2H`Lr>uSmsd(byWE9n%sI0co@9s=|c35gnOE(9_vb-jnrwuoN zm~6d%&ldO5Ay#aHbVn9H8=Kl5de-J{z5-|*uhgfZN|gm;70#Z6Ts)>CThNPVJ5O2+R8`#Q2e?q!{~9v53{?m zmpr|^@Q^LN+KSCv5N5&rH^<|IP2MiVk~;O;MdfGnPQ!tr)5eh;3-oce^t!?jawr%h z?YFWi_Va6FuY<@O>HG6}T_?wDizhS1;`!b*Sembt>vIq7AQi|u3ep?A^*<5N|3`cE zej@zQ_+G3qM*FdU8)fwG-@b}Ieh@t-Cs^?ofy^IVy|G_#r614VKi|~iOGSKUf=)2N zo?@dcvdGp*xOT2{}k zC6d((CL^7GUi-(1$bV6b*`l34r}00qSzfhkCO)M-(Q-}7e_t)qL$~s7VX#g zT{R2Yiu?zc_Zj*Ik>-+ZuR(9Vf$f3#ED`?+_diGhe_12BT7NYDnrCYAMg2@tOzl{I z4-Q`<C(e!Ul_XIKryE_E=BWL41IzCF;5lZXLWu z=T_jKb#BGXeQA(j*I{M(Xeb7~+rkiAPfUoH2gT)r>(4u01pGpw5&O0X& zlk{o04<`{f1_D;l^|T-SNGSBZ6g8mG3;B$OLIVI@69t9F{(7RJJ#!MVg*eeOXPU%B z7Xz!C2$s9?-vK6G5|C>k?b`6a72xNWB(&nnWFR{N=3;zZrwkU$`sDyCK$1+>;L7Cq zWYPbDpF9ARtd6{W9mrc#_%fiP2M2}r0OiTt)-$)#$RS3LBV2d5%0wf=7m#S*pwN%P zTLqtqD3i$2BaFYEsYZxYXTty=q6vJ=^pZ>-6}<>$mP!7uW1>+a(QaT}KZ@*UR#Bl7 zfgtX25)IS?Fv-9gEeU@Ym46q-55yQR2?J#QI*Ps2SCUa#u6m$)f!YrEr$@Fi@_I&&5Ru!%fX+?!q!WH zgBln|v~n?^rb0d5l}V%6RR#FGf{CI+d%{}Nt1>}UO-7)8X8~VDf~e5qutYRME2_|z zdUaj_bMFEd26#32&fk4KQRbIM0EbNI#*N|A0RPqkkepwC9plfB3Ye#a8ju8-R;^E= zcd*T?)pz?^>RqV9l5m~A@>GwRHhRlT5{P^VP$?fqM0De0*wL^R0)8#IgaJKHC>2r3 zqN6RzhDt0y6!0&~X~9o!vs#z~fH|;A0xm21#TY0iWv)()0IQ2U0_G*z2Lk>j%MS>! z@_J@V;Vx#^okG}dz?_wRG~mx#em-EHnA3ot+=J?poRjK_+{1y21!?DjnO!jZbZTJM zqO@HCKYI-B>1hXnP@X<}8?dy6X~zV{b}O;8H$fK9Wdd?8pj_&WVex5$L&yo@YYi+H z=vh&t>ER!j&<|9tkIx8DVF1x)0;?>sUn}Lu5W<#4!iekNMZ%S?7e&GdFkwts23eM{ z;}ZqGm<|G$GwFCwK(Dybqe)Vpf}De5=g5g{bUnbXcIPy!y9FpY1WEDexXd zlCuo<9O|VUoB>q^j1gXK%zrmBBN@PC^f7>(w`U*GfXSBuOm6H4CNC1eA-j-GyG6T0835ipO0SK zUTaY0@LRCcfGT(JsY8{Y%x(oXlBW<7j4;?n7r72&QU(55Zs%m$qb_U=5yIE8*2KdT zE4-LYcES8*3T~YTK#Dprr9?U(2N?#FBJ6Q0a#l%uoysw8LjLY3l;`n)*%-c}+9OSb z7;|^c1hKnjLg+-mpA}pL>(T%XoYey{vs*HUr}yqc$;dDU{BDX7-U)t z5m;bp(yvh|pk)DV{6?e&lBpz0FIpHr0Qhns^$FNI<9{61L%{fktD7-NnT+YiPcd`Y zOmpANsS86N4+BjM>>j2(`#C#7#0a%H1hD~>3s~qO2!B7o!u?S-z?ilGf4mK}u=jI@qo~Dn7p?n?e(M`A!tV;-!9jWAiK>ll1LF1XGHErVxN~k zNoLo_Pym3*YD5ZI7=gh=%BaW|lvRXrhiU{UY#pNOClKpA3|Qv|$m6uYrVb2k(d~O( zq#5;W7>86BhpYQTr-1#w2+Z-ZL81G@=+*2Do=6W`Y47z!NsmA)^{PqOj6IuZrhjxHK`y>nVp-0-}6bAb|}GAY^(m+h8M17jLI5x;?eGT{iAi<}1msniS^1(8XPHUre!1vq&ZwhlF8+9NUBEx>HE zzdQ|Cs%tq$L*TW+z+#<&#fTH%`yo{oB;tENy593m8WZA4aCjmMse#&Z4~LH&v2_W% zE}`eAM6ioik<4f)?k;R*B1c!lqfeql><)nh*R!a<2P$2Jou+I79~1ny5YsQwwu+DU zXTavtb=N}fLM@?}PVntS%R5iwzg1s9!w`#cZ4jcFm}QKVI|BZqyiN&2#;^w%G6s0S zkO5gfi)d9X%G*9qV4E?5r(?VbnA1b$P{!lvS!lbwPp(r37+gK1h4)N_MA@DNV2!<e za{T#wu0yi+QEE-711fM1>T?NQ73KH`mxIvZs6($T#*bpU@~(VhF|s;ZF`N5}*^GT2 zbpoo4qPSy*bagNt;EVfgP9pT8R-OGEs?xDxqbu*k%a9y46&B?Mh3M)aItUh`lY;F< zbQI1U_6>rCeFM&%0>KQy-I<`Qwqki7a>1wyL~}kVCqnQ zj<8Ifmx#|337!~>XC~H(?@P3J9!LlrD;n#=jI(HLwfL={UfZzl6@K&p7p%o#{^J5pga>4A9noJ0+*UY;p|>IAJ5tUi{FpeCGnk(qr}^pfGJK-pz_) zD&fve^BJ*S)h|yLKw1g?*YN#KP{M(b5P|P!uvm^Ic0c)kv3Obbrd+(dM=o9t#P_eo zqO4d?ehub;i?jcG>&bwrKmEFdlzhf&vgsGsSWT`66Md`6OXh*K=-mLi{on_|(t2gh z%Noo7XV;Tag+II|At9f!nw+e2%hlw+W@+4NtI31clUJQ-f`!Lga^!c~TC%ktU;pjl z0!%fGXbgg>77|SL7{GaXO#ocD-bjQs#n;)q*0&i%xCH?8@YlS}-!2i?VnA>k$n(lU z;1c)-cup@MNjVc%fWoEY#`AVDs8Jx_CAb{rtmEfxVB}L|d9Jec48UjLKGeJfegX+E z0U`b9c?t9fsRUvwu028r)G9Bbe*;2t-9eLsY#>T&yBkM5e&nV_SxlvGbJ_I)HK{91zvPf+v11 zB9qVwB$w3|lDaN2a&S>_06!3hXzwP*5^Pxx{+mbz{19Gskq<%r zgd9d9h&qK(Y!;9L4&5>>`N2ncE`S%e$_?4Xt*lI2`tIZ(i`*yuq7NJQ{Tw5eb{ zzkVE36XXn5kU6pNP#IZOytk9EU1%Vo{9MZi5(#lp_pkatSO0J5NH0m5qEJ zjU$yANOGAE=o&z`1tfKB#Ph5%_zCYu=niH>U1~uL)d+7sh(^nY1@HPQ!PjuACbXec zjO$87oN9?w(2i`3Rm-bbS$zPHEGS{go%qQn1bMl@yc1uY1BvE>Uc}{)AlFBn(NIu@ z%ZV0>p?7vBE348!GZS`9-*ylN_C?=z@JAnPC%6nUOu8f5Kpl|-wc-?KcOol}bl{Hz zN<@y@LW8m^!1*z?URw@Tdo{MOqFxVOaM!93c*#T}=CZJgCK)^x*d{58U zm{?A%&huP6KtKheSJTZfE+8N*z%b!PM&is@Ha4|V+6^=W_YH`{3?XWW%K63yIoJWI z3@)M9U>R17j2%EoHZ^6rfTLqv;2?r69poFtFn-v60F-_?SP+11Y&sC=Z0Ey^!A&iF z024W%UmwLX-3)7D7>5(`EIi;@T5dS7V*s3EROsJ8L2cJ|P@o>rLZ>zrz|IeFLzc4r z6!3oha4*MzJs&`j5NIRdoM{2cB>%Vj^6vjpVb0gsqffW1dCuaWyC;BYP~LD0NB z1XY9E`|`;D2J+7x2S_Q@lJ#I9BU`n~iAJL5)3Oa^Z{P+E zfSow(rO@(d`@apmM7Fc`1f>)E&%t0A0zyQ#!ziHcU1<0#2+H#d060fR4jZrl!{NjL zq=X~P2ODAXI_5F6Izb`^3fLfICPtR+2*q9nK+Rjkb^~TEdw<6$I728W%yI;%UhJb2 z#)RnhurS6jf8a^99mZRjGHGKmc@UEWVXOpYUJE(p{+_&xpTrP4x7Y&FENUhgV$PBw zm_;yzLNJ1(wZyO~$_0;dmmKzEkyvm-W0JdfYtakNkQu9gyeNE*zSX4j*LG3t|G80bjWG2ETG7&Ch^50v4v7(QP z1(_WqyfzoJ7rG0JDdH0G)3 zSb2NUF|sjBCfwSUrS(<0XOA?Mq}e-wW&?xyI=`L4K{(jC^7eu{iAz3LPy69#>&4cR!TCKH>(;Puo8fnIV=XmiLtL%E{-N)=` z%NTcS^Z*fx^`p13@+6Oez+7i4t8oA+H}e45 z`UYuqdn-?;#X-0@WH_O$hxgl7_xjdatNp<^Wm8s-(Z4pU#@_YbIPB+Hl*Ws+meIvj8vJC>(hk4<18?z(i0!NC$EEn~&m*JD!{ z>SJiF2+b6<^BLO2&{h$;ScC#(e!4_}%>T{qIcO)I5hpZ%-Chk?tLcmpPB)!H?CwA;3M<@({c$B?B{6staKScQ zQGkXNpxfXG26#=+y{s#|erHq(>eYX;^3(A4OmC%fdCTa*Ia`(6(Cn$YZFo&{~3K4z1t&rgRFy?Z@Zy(-W+4PdB7*XcC97B7|YaPRS7_w3ei7+I> z5SJFx%Mgqb&^q&7@k7mP<8g~J4&ZZl&MN$K%SF6|^@}w$Ty*sHC=_S&;|%VS0UiAm z*nWMj*3sR5P~ncFfm%Cm9rW#?DJ8S+8hr5m+L zrp6D&7(`9L7^D`SX6n*Akf?>nP6dDRBUDxX{de{UX!!l4>yd^2*<^ry9QPC1Hvhx+ zasKoFx7f$Z(tp~={}=6JEBbQbF7@xQfyPP30j zZqvM`ef^C6e*O2Sq{tghv;+5(;x;wR>!DfceSFmNBo5rlic6ru z#7HoKnK78)#dWyj2-jNSIu}P-)`noIL7t^0Wkp%Hmz0R{Rf8{8Dj$ zpw@oo&kdU2xX%n|kJLU^c%RLH_W0d%IxCo_$vcmlgTJZl?e$cM%z4k=>f1#>4VCKs zbYG!@JJsBQs0KQjKluIN?`WT2X*ts93}_!PbnI}$Zm;duOoQuD}p^oAA7Zh zBL#Z{+RUmk*f;;YioZeacV&&P#8YRr@`U_UjW}I5v z))Ed~Jel`&Y{{J_q1b?>L*M!sfNbajm}e zIlPs+?=cjNwRoq0=hxWTY{nTj=Jd*f&jsI`XfOox5N|8{VT!Hnw0Vl`?k} zpHoxjUeD*Wl)0n%oSrgw44+?3nLC!xyHnzxs&<4FJ(k(-9;DlvJimlfz#OR$HXDc&bv3X|2c`cv6y$b(qKXFyy zRrkaG5;0gI<7qXi?ZMyWa_hNL3K*Zk_GBqTGiNFW+Y|EcV51-He9NnPJA2lO^2)xS z@&Vfn>2H4;>CkE{uO#C!XoNv2-2qSVbI94^O$_GTW-xe6_aVknHl^2v!LTgjN2j?I z{2ogSP2y@|)O^K)EAh_f;Pywi8fW(w1FzVttl>?UsqMI!aW%?wclH)c#{G|;DqaS; z545<*vRe6TDUaTnXuwzE3`3&9Q21U*L4OUd0)aa%w(yUk4aghEGI8Z3_zFX-jSN9e z44!g?k<#MH*zzyX+_}P?SZVSCre+L&A6}1XE!cn%W4Ds0i%VB{&mLcy`%Md7-&V1MWiF3`r=jaBx^fx<0Wlf!m*Z(`y2 zDpnO=xdUvc=*dFCEfDH^NM2irx=zonEpvn}{1#z#*^ArkS#2GQSw;}Buh*?yDvGs9qVDp&nLQwD!I6=zW;I?@)6R0GOJd|RV) zFEYLf4X)=h1i9eeLpdHi{2=Zc&6h;~C5grheUvwi_BN&Z+?QkWr+D^t>`SfhxM23| z(bwmL_sC>xs7&+YEa|QJXGr3yjT&!YAH*er!Rts|+E{?&W=s#rf)d4jlZQ#&+a%Hq zkk7!gQWSnzDI3#))B0Qf^nq;6;FC8);dOpk-@)?}6m|mb#u~+={*&ln{nk1pdlndT^)81qAvUzYJ0a>iw%^C7v=7niQXcp_-<4bjASt$ zzJ!!wJj{QxZ#=Bzxl4zG)yPj94s{S>3Z)&2j$`8ILj1uE^r>HEqH-5|7;#SXWnw<_+l^l&f99y;7zaX6x? zy`?~qO#7TIJ@OosXWB4Z`kv<)@oh$UcG%n}JMl87P2EPAoZ^JdF(c&j#xe3a@kaTa zGEqLKPm#}z>3jmCW12xnlzqK0TUj|e22qP^iJ~C{>2ZRZo)q4ra5WP9BVgH$geB(J z#fop|u?!VB;L~(n1SP;@h`$iW--~ffdVxQJNWdcn=2-x2PcjXmsDQqJdbgnFIouL< zDl*z50(p3JWCvpK0~c|nIOLS4b`m|8W+1pn9A=hgXo54%u#W*OZt+%B&J{n$j;{cY z^h%|axM5rRj)KKe^|#=FtGjRznAzQ|nEk<6YuQiRdtm|n&2i>cM-BT8hFN7dj9gV= zScs2CWouAJ{Fh4 zgWkDx-7IBOL59I|-hDo$Y_;Gp*vFx=smoIK0t3r_BKh+R{(R=R>cX2@z&crgvL;4k zUgfx_xH|uxmM#e1;a#vnRDo|LNwrB`!~I!UCGi&fFc*2hC4iAf%9S5-OQ(TI2yaaa zTtP=R$Fs4>=6w!jEnh^S-VneCguc*ce|$${AukHQ%8_1NU9bex779K#%~R=aPbvF_ zCiUbav6Q&aTvoymYuPVZBXeqn*&mAAV1&@Ear+C3!SS=ouEO~Gdrdk8?7xsOj`CLtXXj$KEsMaLwaD0oe!CT)m z-8Rh1Kj;%=$5EUAbPOc)HAo1!n{O$rzsU5x<-FqCeX`Y27XQ`z%i`^hvT1iO#kCfG z$K)EIi8?J!;nznMO<529h> ztJNe2Ccs;aU$!Zw`;zb}iX}puC22xKQAz*nQA~*fa3e z3tEvB5a|<2<&|v+-6d#bhDu&Y&;Zn54^V#&;Qo1y%;?yFj2ingB1#+?H87+7eHk5t zuSL-8M@E2m=Nv>vHO#1aKt?rv8KHb;bdVWU_tCV_7fq9c?MK+8comUP5J6Y!v2vEX zU8!u|raW{~dFZh6&>rQXh((!1*te;8nNXidD*}XI_rbA?60U_q0ILbi&94)ahI;Y4 zOZ@JMQzj8898r}?Tlw6sOyXQ2a+X=+c?my_?P$b8?peSr1I?MoHiif7=qg*RdHnE* z9dTNQRa%BSwT!5%N7|K1oODElhg+bI@HF-#)ykv_)MLse7%1olcmZ4*Sa88Hprl}u zGau)a<0KGVDUEG9$4iw)WI)AIk)k#ZRpzb=ag9P_r!omD*dKF>G2E)q*aSMU7s>P} zb473vS#y$PRT_!1K5|Z(#Jx3D>-Ob5am<>TL zz#Ml5g|PW!QX?q1kFA?iJ{&9y3N$MyI6Dg+07U~R8c4y(95%Fo0?iK!PCT*61qF{# zG@)Wa7z_!1(75P(A)L}mC_Lcj90r^j)+JK>=s(;X!>mAwUKM&p=md8qftZ^UoN_pU zK+s3Pn&1q?=sBU+h0Z9U!x)?Y^j(o?qu0#v>)qcul_9 zj&EETKp_Enc?8@TYn|gzI6Y^ljXEhcs9aPd~4$ zc@5_|;0?TQ{(==)9Kw8b*J=0Bdo5)zp5&wildQ6Qvn6SVxuecf_Ubkf7K*c!<u<2)#kq!+4TC6o|$2;{T1u*wpHZ}?x@Ec)P3~M z;h5ocTZV60JNh15Zs@CrWEDhpEO1m{?-mICN5-c~_I!-E^+00389eXg7m3*SOviWl?Nn4W6v-q+NWK$5nPcD->EJ-^pp2}72WTv;W zV-MooC%u+?DT2#oY07-j7$F9jF< zXcklq6~^WOtvJjrT1ebd#rr3u72hSy7dAW9<3ERE znQM`-;=B5-I6&4>R$L^NHuGY?6_*(bD-H>B(^9>PpB&C;qU^Yym9*nbB<#2awP9ZS zg#8u4@C5~LxPYe5kPG|UB#88!r2S_xI5Rk&$0yq|pdN?(a9`%!t-rX0!!9 zh*US^r<8||Sd@pVl!rPnRC6z@>CcaeMvrt_l}Xf{NRY!k9W?12$;DM$a^&S;j{zMP z3%`3|Bw=ivrV?fWJH#0PsLjj>`G^9r^#x-vdWx%<`y(6A!j&rwJ7`^U5Jxchl!jfi z<&~PL-Jwk4E*0#Zg>?k@7CGy_vkYRVID&6yH0BwTBpgX&?69+d)YMHDY8@wFZ!di-rz1oTit@M#IC>uqNcm@TSm4)1^ z_uO$rbaVQI9Z=*I42*f43@DA9B7~~YifGA&T_En}b~5ZK6HP^yIY$ZgAj=RaxG}t2 z?CL&43b|6lC7)0T6bC`UeSzIva0zpdE}I^C93TZdp>s^vA}LMIufh-oE05sw3|1P^ z|3Zc9@N)_OoIl9xd&s*siD9n_SxflKx`nu7)hWjmNT0hYQLreN#lnbd7XJta=(FDu zWrsKoamwKbX`~6(HiD1v2u7TyXC$9tnE3n#u-J&66B3&fP(+B^n4QxPY5DP70_}3C zXd{k_Lq9MLvM9?ck!o2J>BQI;Wxz3XVos`^LO_H4Db~CT8NkNlN1AkD!hb)&g#W6~ zgk!yBp#6ST+V7CG--m^r{*$ze=U~5o0Q=oRBi*qFc3s+U+VvNu{oZd)YBPIwnO9wq z_PYY4@ zS*6F7H7!`QBuwa|`KUa;Nw10JDrRqmBmJ_n`Zm1UwS0sCtZMq3hkB}vJ8^+QwXJM6 z_MLPN!}rbS(y(tOg0(51?Vbf26!&3lHSlzL+I9u868iqy*pXrlWC6AxJ!Q;F?@?BN zjQK}PnUHj4U*KB|{5}Fx+xw)=wV4{M)cRUJtr7I~-hWj7w?87~KTSM8MgF%60xAD5 z33u3Zr%W_Z{$Cb>|FHbAG$Z7n!GnY-|21fv0rJlP#Wm$02l?kuA1MDv(O91<{|bmY zgb&O8!rzDx6qxG6MFY(ML-^39x1Ymv&eppF zY>16+Zy_ZW&<&Yl&G3?FU3Vm-U>{X=)I1?7Bq`jnnM-oKjmMIuw^I-hI zT5Hs|?g|V9sWqrq!4&ZO?4-W>2#(3@5}sLv)GJUoeiS>I<>?9K3eheCH-c5A^c!F% zv}*G$s0?^`ws2O-j5{(4m)uu&!yS;NvEX0rWmcmjz4O^`n@eU4%>Z(Q)rOP{RspdQ z!!%}*hTk!SOq4ae_a^iett8&`qLp=mooy6r&*DPE`;vIJ2Djb^^%JKmX+SK741r72gGdX%2(@>IcCL z@B6SVLM;_vHK@|Sao$;2SA6sR5y`TOlK4AuXAb$vA58WZS@y&F6 zm1za2n6J%iDu9z}7t>oCyw2Vyf6ry4TF+GPv8DZ@$kLhuY~c~#(5g&R^*lT`roidW zn229P!I3J{1Ue+ok1~fMkwdDlWB&xKdG|vz1W~FF8u!8l<=^oGHi}vQ_nE#w*t5fb z`U~!(M$ed?D~twOW~0YcEu8+~aN+w{^Ib1|e}S*kv=P6c?x^J;aYNx`e63BbQH-^o zs*c(>hZat%H2nk=#wwGCg!l`6S=17ZvqB3&lF(DiCet$bt4xn;p)-ty55JFf2e9aP zp+fn0{9qzusxnzL0<3`GOTB42yaiJSQ+D`xUrfOlSDk7?7G_b`RlRf<4nv|?B=WS@ z1w}e+)eJ2M$hyXxcl%dbm-$F}n*MB!-58c4| z*{0D$?;1TMZow%twiXUG-u2KBBRtr;76a@+;SqCtm9gOSh>IV3SNxE;tW($peX6$x z8@xYgj&s)n_6`jVWy;Cd5T za!eF&S#TZ$C;e|l9Q|ayLzQQf-Nd zJkIRzB05;q6200oxlXGl;t-|R)Q6fD{0icMRHhA`eBOxlZ`QSMzQ+FZw;Rzu!ELjk zXr;cDx7a+UO}Vh5*hc-_Eijvp01fvszB(I%KiS6{G@*W8)6X@E6^DcNPA>RI;ZGK| ztedIhGnjuL{*9eKBv!Va23KvJh=I*je9y&nt#)#eyf z$t*0S6`Na*nBg4Z;~2K;S~(U4V^yaJnlaD!fIeeh$@&MljP+v%p4 zAr2w$AOw?M0)$_I6A=Z7up2MoqdyqPN;;QiJZYbd&pxKl1C@@A%ClQBFRitEh9TDv zj3_MlJtWM6fNq2^K5i8CI1s!CfuZYyw`X$N8IM2!a|nSIW8rtqi{!u@tZdii#k)yI zY8RYA#vL8NggqB;Q~tBV=ILnpBW9_TXt42KJwvwVpz$<%{Qx*k0HXOOip@!mG8fo3 z{qiX^0dV*ojgBOW8c~PslXoc3qiGCT-rJ<0u|o-E7FG*s2VX=DDy@6bbkm0eBK86G z2~`iqccE`>GF^HaQn}088fV=LUr_qmq_0u>&P(48>AN6(e(Ad?eSeX@OVamy>1&t1 zSEa8*`pTrQQ~FAzuS@!#mA-E2TPl5*rSB2xyCQuK>Fbfcd!;WTeRoM;ukcy-_Ex{e zDQdw3d}kUBED^SFrPez<&A~^}6zBufWLR(+yp)`HUki-yU-4;q5HV=@sGy4A_KTR* zW7{Tg@`0Uh(9B}eSQTe!`$)7EjsmQ-ak*4WZ_KBw3^_T$z@ zCAEH0O9PSzpF|l0`gec&A73N=C@sCv>P0O-Wfr%|EUIp9dD51}8`+J;vHL!MahIk?#y+CrF< z!qw4cpS()|aB6YM;j`Iu%VMv0r2C$o&+apnSQgJP&MNGa>+NN+ciDQYF-D};!v+G^ z;z&J=S9WF7jJV8OihFJTb7^KztGT49#2nX&6~DO5xI(Nel=I+*I*WL51~4~xE2_{p zKd7>{f@use=3X%Z+0$#EeGV|1u_(#byCt<9Gj)^*dW`=GR%KI-wd_~D&>x$3QR}J- zx-3bJR;)O#I$wf}%)ML8Ne6HXFPBg4{-bx>{oVK4lg>MaF92u9jMlh)#10~Jzz5&K z?8^t|R~EF|JmX*t$cp|an~XNeNltKh3X;b=JU>cKw0XXh3=Drxa*7S!G@`D(50AG!RgSwtalwYI zjFE2zd5N4@$1E zF=lq0$e`Rl5^3mR)&cuSEecr}EA1nZO2mz~87pjzdpJ&T)A4wsUij<;k&%`Z9%iH^ zr4JJrEop+5biAGvlN;7pWTr7PUSy^vhv#w3iDYsq7NnJw(hDxMf)kOjpOm6P4Rlg^ zky4UclIcZCS<3Xc0fNXI3M-tEZsMoD^ z{rZ>r_vxSaI?UTp$h-u!^>~~2xkQ}{n`Z^oWl#UR9N#x_yDm=HsV08VSY!A2SsPEa zy`#zQ!Q`|-L@k5TgKdcpM%oJd$OaIi zkIAfM2nY|7kikq3Lh^&)a|}k;6VwP6oGHJ(jNmcf2VTUMRA)2pw{S&sMr?nyF*Y4Ruge`qfH${Ek3Y-U#E&Y7u_yVmjLlgx#-4;TiB587 zw@6c&_0;j}**V-HCaPC;bz3 z|L3KDii5`iH4k0Y>_bg#sda1bkC$Ugj7~X1`ah@puao{!x*w{*G3X1rABKkhTXg?O z>HqTDg`=eFE{CVaR@c0$IieSNJ+{~*$uK<$-csmSbpIIXAE*1rO8?Eef1LDxN%vz2 zWBNO>=7Y+`u4<;e7nPg9Tg3gRV|B_eNPoQU|DyDd*8Mj~{|&nTM(I!1{WsaL;m&{V z_RO^_Ztm|6#)HvX-?tjoum7tmG6^-JiN-}hbb5Z9JV`v?Nlp>Zza*#OiOY3Ne+6Cv z&k=v)v)hS_w|E<4w{s!xOTvAZxH<{93J51IF>)?U5zZ7kGli4Cj%3`agxj+gi{Cu_ zu1PL|P=sTha5(+A`KU&13D>L5xUF2!mVer zACL|DHqbZu;+RLsB?Ej~bfWOpYSCZQqnoto6cNn^V(KsI(VVU`^Gp$)KpFOTM7 z61C_!hHlbBiRNd(ZapAVBOA}qpXj0UHL^eI0gE-VNhJH89*S2*k=qM;K#4|{Ml!P= zx=tfotOu-@WaGg8W0`?jljC>A2h2rz^)XC#pH8&_RD;Jo<((}?hw_f!n5Dc^ZM4_5 z*rtxP;SLSVYGJ~uy-`tI}X}A4p}^7EuLQ+P`t(SJMQeYc>ZW$rtV4{tQIsDzHO@_SOEJ{ zD?1V0Z-JMt!@+|_+=@7UEDUih?wY!RcUpZnc|PhF4h7638*%$zQCJO_lfs7r=4ZlZ zw6JHw+i|I0_ynjioxpDaFA04z+!HVx8@mJkC&PO|84d@`kB1{#*yG_Ny!)>M?JaH@ zED#BKc^;GJ1tjXlx=u7?$<|dPiG_C@40TvI1!*yLHs9?Zs@5{m-?$EL@ z_hn(G+Ur?RPr+fiwx2Ctt?h zs7Vb6@soQLKRNYkQNw=T>G&+-)vn99s;ww@D}Hc2+yCP3J)ojUp2zXpYzDI!5wm9i zF=0ATP*4N}jHe<33QAa6P%vT^6Xu*wJ*S?bNem^C zv@lb99{-nZM$|IDT}{pmyOo?7nv%RJD-CNofxlM~c}2}sLe9{pBR%{=8dmTCZ(z4* zuOq$l4CO7M+|u5~|FxdrYir53zCB6474~oPtNO-Z{d3(=AE+Q&)o*L+OSR$jGXq#a#)k-T~~c0}9nat7wGeu*1G3B|G33ZVzIm z)OIyhW|f7X$wIPmlt{{IJD($Pq~;vDu_@~tmOpbUsa{q#_TfzSok28)tOKs%=k&B+ zsn-5NtvflAwYuUB{G?>oEmkOz?p8-3XLIAm9TnPNTXqQ{p(@}vw*0lXPC5C9okJ+} zcCvrg0#3)0VzH|z6-OF}y>f-6xIP-DJ;zeig(TsJEMB^Ucz7W(vr&p%lHbY(7#HB*jTlkQ66HK~kI)1xXRxdPxDRo0n8%FJ4mA02;(xe>t*L zNnX;#I&phKFGWFcOp1c6m=pzBF)0eNVp0@jMeGQ&df$_ml{MWIWJSy{S?Q#h&C8is zVZEl8;xJTSk|G&I{3JU`u^6^0A1Mlw;-n}@ib+wYQ=AleNx2fIq*KJcUQ$e&Xt4}* zQm5xkiaI?f)=wo-@9A_=5FC@DAS)(CK~_wPyk4E|!OMzCQ;-$0qmvbrq97|TK~_2` z3K~wVFb&sB(M^jM6QxK#!5xh|N|EZzTZ%eKaZ=X|X8pKgT&~RdfSp%IEQ6BhJPL0-z;oM5E<%4XX71Ug<$hxR{dX;X(Scc|$MOHE; zy_qAAg5O9aW=f_vtjeL_4bptl;huP_hVtg6AL+y1)SA6wlWbtdU#CK+T z*<0L=8&=7?G#}(_WMybRNRsWe=Sg{QB`2k~-OJ&mRb=gZmtK4i-Vn39mP66EXgouy z9*S{M^{|Ubu51FK)cc111MPltJ#ozKn_6lCeafCj^Z;_tBCYFt06hgjf zldZH5&<%v0!b_+Yg93~l?6jG9$)Yezn}N5^CYQ{5Pq!~64-3u0Z@XT=2G(l8Nc8^p zG`X<$9eRtfOL)QWvS*JgRul8l9^g#DGWlIr@p(ST9Hp$$`&~#5L1H)rFCpcoHIejp zjB2!>lifmppaaJbRBD^0VFA=H^ym`p4+O&A;3f1k(uhI}lakfUk)uf8IL{szidH)< ztD!r0FBGlMrYs80vb7k`WSvHW&+(2kV!2^mXc*35r8&gHW#k1zM5^5(^e28l_Ghva zeqW4gN7sG^YyWvF$svp;ETQz7U1uDV4q1v5-q;@cbT`xMdPrK0ZMl)`l-2eOW}y$y z!jEN=k1vTphW0+n7J=#*t<23DjeJn7f%z1rM2ss>x!YT7s_8ZwzPpHxKAeh@1DQhr z1~VAm;+%rM9dAht+(Fz}bqZ1BzLiZO>0=DtkSRu=Qk1s_>EmcYeWARaERRx@M~o6D z-&vk5%cB(K5xd0B9hT=sc`QXdF`k70OO06^gTun^F$S$sOesh>R(%hWhhZ=YjB;#u%4Ef_Pa&)Q}g!0Tun z@3Aky(g1?gp6?{8lSN%X*24J>2X!J1YkxxJi7J z8jA&E`S=O}932$1#G(RHRD}Qz3kF? z4auUNA|RD) !sNS0OPfB@n!-@#CNBQA3*S}i%b2gutUKQ4{%kXIAWEh7@XbK306(&9?!I&avMU>)*EVYUfYD#eKhDW=F4bf5K9M5|0v-L(5 z4&YiuzRQ3O#vHYQ?y{PR9J@=*(Ot%Zt`ce$NehS^NsC;TEhTh!$%W8eRwLbIbg>87 zT}E3cZ|p{Pcc(x>O#talrUqRN`4n_D)jD%t4qXjpp=0^s#=IQ5J)(=Q@g?3M*NBdV zcZ4rE6m*27Gw29!@hBL{Vn322+|Qw4giL&3IJ|*J;k_qD;_LZ4$P8&3y2g22A@rWi z?NMuWZjVVlUE#+U((~JuE2M9dJKcDPUhiEftxBOurE#38tZme!*!U` zotR+w@YD{&=v^3Pmqb4`HxzBD5Jck?<_=-j`-bkqF6;zW6?zT{;p!m~BD}W@Ao`S| zRb~vj%MRk`V>b0(z0kACo5B*4H)*a^u3CLsqsPhHeyq+@>^YUAkf^hiAa~RPK&J>n78k zkgzlq7RC6qB72L4aunCzLhVfnBQ@)bJ)D9HcQB08Nan!~qI&KMdyd&#IUl!+`Xpj2 zHx%A!FQOW~Lv>0)=fE$-zQZt&IXs%R(6qyrx@8!8RZ9d&cwcauHHp(@3Suaq1fPVr zXL1H~7;lj{F}h)jDd#YBjcSHn51a3Xshu2c&Kz>FnHw6%MDF%hmQRz^Cy2e3)0ANt zoTf4&%w=NgEr*S4v)eS;OTpW$5jZ*h=#28C*oA3S3R{7}kc|pacr`5aD;kM&X#IH` zK&FfmKo}0#!<4Y41nC4N94SGjiV|u{kjbP(93{v&Qer11$P7{#tPL=2`|c_+9{!?1l3N7Ih3H6Xx+6jZPlE%<^NhM*BnjJBdvpyNxTWChnl#<27j$^{bRSuQ_qE1~(IkuFb z5RDR!l(51`loE_RS{I^39LLcIOqBH@j_4+1lcGRMBoYR#I#J>QB`72$xAvA2f@~Nk zf;cQGM-YcCB?NJJQ9=-hni9M?uD9pKF^6sn;@C+EP8__TNG)`N;wt9_MJxLxs5MmP z7ETb};W`Vgp)khDY6;>1!Vtt^O9??7j+7|OT3*(fIHIzQO+g%SgdvE7vB!yn7ZfdG z=>)}f3@<1_HcU{0I4rr!IqhJa@Zvb*#EZj=Fa&X^xym{8Ig}8@v6B))U!+n((9;K$ z;40?@MGImis6-Y|qrrF=it##H^GqC_jJ=ZDOqO7R!c`|slx;>F5r!=hr147$Ca^Rf zT}?Tpuav_CMdpYSj6LcgN+fa|rLn{VN)SgnjUw4(BO2p`D$mYR9B{87PnIVBh; zR5>NQgvu$QrUX?^i8+*D+JT9kl&FUWhjLOW!Nh?H#tALN(L9D3sgk&$mCdbQJ|}lF z0l7eLqhY}gKG;hyJAme5` zaKBS&(&s*d-%>Gy-%>GSE4QU$2DhaGH?EyTG?RbA{xv)i61$V%pRopYoAzgHWWVUa z*zca2^s<$EJQpRo;y#YEn0Afl9I+ejJi!g?@j1AkhfbfHm<<+F=9XlS?x|+n0`pi%rlT`%4W<9C&bWKj-DO7m3QjZH%V&7YU1!W>O+X|sLh!}^z2bdq_H~-! zT?{`pW{tR&5w{TD8-PfGgcOYbLvf!$P>kB&^-NNDptZf*nZzay2gc&whNvLxp@^(T zDewdl?(sMR+~ZROxaAK7 za2)V zqfx>ie2ECRn$f2yDFb%}Qbv?fMlhEVW0ZmKNKlE5LjY&Vat`jVF@fsT`44 ztO&vrO6Ys8bQX(2J{}jw=hF!!5%k?_JfW7yC`{$>lrH)LI6`<*AfB#(2UnA z^ciJ3c?Fjw=5PYVH8loA&{;TiYzv(v75SEmJkS@x^HuOW;1)S2bqGvcbe0Z%oE*=Q z!BgDuEF}y4P`E&XVI=A?h%fpwy+JL-u@*Y@CsIqFRDbglG3XGPoJ1WF!eFQGa2Q#b z%c`Lhn>bFX_0&;(>q#R}m$}CAvZJmhUBDtFTT~Y61)V(T7#((!2Ax*SVGvRFt#?kO zbW{>*KQA&~c36mYzkv?&y>Er3UmzcJI)_d|^nQa#_4#^h;oQA}@#sZIqx{)L%KM z3UpuyeUu%Qkn}-NM-xk%WL7?4%Y`n|;FxtNVk{l#t$yr)zUHR`fmaB8>|kHc-b3ze z-?5Ohy+^V5^6{Q>XWYW=9Pe4|7ijcwwD)jEBCbdTcaA&8dpaW(3<*5le}T%PI5gt+ zv+2kYXZtA>^*Gzlo{2y4i{t2;z;fcJvYhw?$}vUVeo-Rk*v~$NSEO^6{mj0AKk6*ZD;-|8l_yo!!sq(JFB1dp!IlPm?Jl-XtRNs?SlSrV?Nwjn}mHHEjGLbH?m}nCn z?0Z<+dz3+mR6vPT#=Z3Mo@G!X6;L9TiRXe+@v`^uMJm0JO5gaNUh$s3NTnB2>H7;* z7R|vH+Rt8qSCj|6n1ym(fj{w!DJMRG<-|{AIq?aUV~V={qEyVWpRL6!(z(fgX46}q z@rx-ZK7r-LPh~mr36w)}5^0GNX%pYmHr}%-N~9%9qzw@$C>6E6M-)6rB;v_e9yN*lO2sv6zEQ6(8 z@z}6gZSdW?ln?6(z*lZD!BIs2!lot>IA=l_qiMY2g8;l{;7o^#8$|dPIp{MZp5uQy zIxh>IWaM=#bdYp-?LBlJcok-13-%F`GJlJ_2|yFdlbD-&)`apyQ9c zPEH^Focf9f0vNT@Nr!qW=%*sDlV8VEH`#D|L-CwxHjs*rK!!;+Qu1a4+rhCRG)6~7 z#0F_+9&G&oPa3WhGv$2u8cO61P7L*(!%4+r>UBD+#3F~ORSr|D9Hv$|q*j8LV%9W` zl6c}U=cL%cXYN1U!M+3zS6dve*7z<#yakR{TO6&{@trISOo9113?V$4+IOtU`8kXs zJe$UMs#$OvXwR9iEQBT~-V^OP^Oc3r1ev0NHVW|@V4aoiI~GG5h4>Ay&dTwfiU~tl zSbxA12k=lRe9!H{^Iji?C}kb}hlKmh4)JUCXd*Id-kUt`*s}GP_n~ zS8H~)Vb_}MTAN+#vTJ>IZNRRL*wvO@o3LwBc5TkCE!njdyS8E1cI@iNuI<^?nO!@w zt1G*9W>>AFl zYIcoe*C=)!&aN@+I+9&Sv+G!Pjbqmd>^g~Er?BfZcAd_yGud@EyUtshVfuJn}#SnCypm2g75JX3{ z1s6hH&g?@_ErPrVYC{m6GZTz^w;{6)L281U5Hy>hx&-}AP*s9X5>$qudju6BNQq0R znLv;YL7(u&(O?IHUJ}%Upoav75pzHdxAm;dQQ+Rg6szuONf}99iOOPKyO9&cA&}@R15j2UQLj;W^=qf>Kg0cu2L{J$# zxHPjbLCpyACdii{SAvES)Q+G8f|?SvnV|Xvog~PbpvMH2BM3i@1ewJMszQ*IpwMCT zbb>4jAryxYXd(hbqQm^cg2F}yMMhXh1`Uf2i44+M+gbZZ4vr2B3XiI*sRsk22U&+j zYoe?N23h-uTZe>eqWr@Hf~+G3S^LJSg94o*BmHBcdpNFH2L(h01sdG7jzR=oHK7p! zL(Nr!JVZpsS~HYE{vn}3fx2SR;RPtjBZ-R+iVO-eS0T1)P*5ar1+1eYtOo~0VY9I* zMmdql+wdUk5t06C1N^|CDF1+9u81{XMi8ifD6(v>W=+V*Aaershz=WwT)DV;^l)+q z7eS)o{A~}o+hW8lSP4(Qdvo42dE?<_MZa zYa$v=njjn@W-2roPBw&RqeC<#?&IR(+`hN3i;p#HD2|!%!Mec`6c!Ms*0U(Cd!U_; zp!tD3ut`CX*yz#dFwquh{KJB*LxaKxM+E~Kk?7DU>+lFP8iMX|wk9MTb&@QLo=35@ z3D?my&mymr{(*sdD&m&<7l6vZ0^sm9X`%<3tBJ=5hzL{rM;a)mm>(W1MB^v6wEj^j zGJmwKVj=kZ6~IWKtaUBW1V=_u7`9gdlS zL4kf))R1njKHx{hKpNTw;838-tA%xde>kZ`P)q;~0&Z*zD#K`6Gol4U(~Tj$2&v7? zT~RGGEUbgVBccZf3j$#L=sQv@f?pN@$E-Ov0wQD8Q4!dWgTwuX2F0rVLn8Gxi?C>(Irew~^tn(U>XX-7P2B}bCfsk!i>mc44TuQG zZqOKvUY?%Q$(a+&jq>iCNiAnIo(K;eB zFDz^E*b)m(H==_uUWsC=VJtA71Ew<}0m1&7V7-Rv2BcWkBBG-TFsefIp544hut8e- z{@2xK%oJy%{JOe%7}^4(;$aaOhnO$z)XT6mjTN2iGdn3nEU>{#!PpdhjS;80DVXC_ zPe9Bp>lxlf4fKz~SzAyj7liU!h3cgC*J#if`fG4DW#D!>bg_Fg=x=gxnACT>IF1vy z-Gpofjtxa?0xcvw#2{c6+iBE-{3AA;vg52t=rCdE7&gSm*U8sKYQVnJdET3y$jDteL{X@-_4h$I_gsLenO@;%7pI2OEDjLeivi`D#;zdDZ z|9im089@`XIs@uBOE8!=Hxotg0lJqo8uFCLyA9XMSv z)?1wL#hB5Q~V{sQ#; zm9Nb7RS6v}^oog5rAIbBwrosH(sWHR??h;Ek85wPA*s91`X^6e7!FK*&*%vlwJwkD zF)o#79~o=ENxLUfTAh$h4ZFPS*DEwrTGSFjoAu?)jLKYm@pJzuT<Uv8GJ zpsDtm=I+-rO82DQU1di(oKov|ES8Pwxf zKw0rctcf?%GBYG9o~VkKK1|O+4NDu(LG_)dpMF}KW=ZHmLxOqFN=*nc&v~c`{Jd4g zgc=xfXKsm9Jwm*cBo6s$p<+Zq9wFkuEXZ0@gjy3C5{Bywc{@7YvuJgM1{VVGc{u-2 z8lT)3q`ZHq+2v&3m2&$BtfNE1qgsMk-E)WeoP_?vx|X=0c$LV81ZFgD`4T=(?!HF- zWh2N=U&;)po?brgZe87cjh41dQZQWK;_KHF$i=iE{(M=$odc#>FiC;2P#3$Rc~ifr zde*$^^UUZ;iJ39%V}7C5DROW`c#{xoyGHi39LpyIDGf}MBO(K>N!>&6X&pD(8(0Sf z2jNZ;eoF`+nb9+2O(S8D^Ne5=tGAcp@KvlpV*Y)6y^Z=(jDdvxa*yrY)-2N8h%s~o zNJ!r^;yMb(ML0f2)A&UOiA{pobBgI|Sdw?kEj1XmH*2n!k~qE;E+;zc8|g{-?EWEG2%ZB?_TUEOlc6 z@q;wO0{T!)7f18!?}Aar;{SaOoYie&30z-oAU-t4utQk%9~2o8hU;6nQIJ}%tyUPiBpnla!=;yC9txvl$W%G=dV_mBc;-x%Ghbg6?s?N- zTpC4@0rsS@Ur1=7@DPhBj*pL{fS{1!|1%jQO*H6hje!#K z?JbBB3aAC@HyyGmIhvP0-?y3o|4{$PFx-~sH_%^W_DS8af@sh%BMuCx8%0*87CQCJ z_;he`cQOvgjD)SyyIcUNPc*sc}YkErvSxCa~E7}s>>#6rT= z(NX!R4(_`S2=zC=wbyKS8W$9g5mWsm+E^<_x5-BiMglOQ+akdk6$sEtjMy*`md?hC z%8Rz#wYF<8#%zH?Q*<+Rt=Wl`0_{xOtDT7!6_4}yvaN8OqJ0+?J z9~ybPICt;h;{5B}h0snggK;S44&7%+fh;LQ%$rLyyxHW_I5Wla=-}|6!FlXQ!Q6tl z21NT$&B=o=+9%HMJu;&Vgi#RY2=D)zyF3Q|$O7j}MGny~#O#W=@SwIpb2%H1oL-M~lRLf( zs0qwv8Li}+C~3GDWKdANbYc?_WvsV^-NDnt*QJ;7sUakElwi!OX8#g zd5TkCxgZ*m9rDK)2K{u;*wqoCv3B;h&A6=xsPs4h^kNe$mZ?X?c@WFPYURZPzrRM$ zg!owag)Q8)Oz&^v{yVnH!Dos#L+RgD$*U1gOkstM zQ-=Ep^=w(&HyMb}2ywa=G#Fn{wIQaB20>nxc;HHp(ZJA~GC`2Ii`ZY#y1d8*;>I@I z*kn%d{H8V0rbzwfwY&(6g&}$uN7t3PgrRQ*|H!DIjo=$?VjpS?(LPC&TS)V7gvi}< z9yqT;yh!uqhPQZ(l(3`c|6*jCrj_5oG+jziCtY+Q9+w3eE2im+wIh#FV7j>JL154| zri=aW%5IvjxHb9r>;JB=dGTRRT}_wyMQ!EQ=kVzc?#MLZP=48$gwX-)X7egy!gLnH`P4Al7i>DNRQ8AS75o!=4%wY-Vucfa5pLE#2Fmv!P0`??Nz7|B3? z+D{{#;bJ`~Iy`{(gbO22znjL-98K};T+9bORyS8pJeSE;jwQt#Rm>6+D@y?g<;7K= ztue(_Uc^i`QSdahyPQ8TC)XrQJf?D4Bu%&<-$VmK#sQW*2aPtQlwXq#aeukNMuqciZct2AP&nJl5;Y>of2i&O zs`z2DShvCp^fbxf#ZI&}e&#ANv-WNHEI6;?MiYK>^{`_Lj9>TCxioPTxrcaqhh{be z79SuXj5<1!#fUQ-j;KBy$g5pu#G+r!64ump2ZDgvmb0@d_!jBhzSyUjEz2G*>VpMS zQt~U30`tD$(2j?8ZF&}1o17k1o z8|C6ifq!~ju;UpF8O}?Y%&8)JF@1~kB49=v&25^X8#7vr-7Kr6U)!-vY5yRY;XXBb|^j#zvSt#Q@5Tlt>bUv25UOnO~47GBhqvU?lePPk{u5zr09@J0S?Q3%A!$*aDt-A40bjm z7@ie~XRPH;)B0{uWEf83HTVXcD3?DnQFM=^Cc33NnoGw7J9SV<>5ljlZs1T7Kzv9l zfYf`qbxug~N8<@eJdI5N*{N;9R5h;!Y;F;+Aej6@W=Km`W`L%iAQS-6R8N{FX{sYlW9He9ri7^c~=4Y_X$^9>_JQyFFtH!&=&w~Pin ziUU+Jy5SLvhB^8pAPnycM{OA1)17t#Y^x+YtS*M1WeQ`;5Z_3$qFsdIow-6e5sKlC zT9XK5?)m163X<(Nd7s}R$6E~fD8QwJ9ret_uH_8Ww z`VS3iqU(FA*hmTSC5~L98}FDJ+@@dh(bY?Z*xM$CZ(kVXnjVYn6%tcJk!A2NB^glh z!KXI{@0$R3aANLu;@elbtr**|#hnx=kTbZ2FJ|D`bfz-IU1wN?p2e6d!L2`<%3%vm zrZV*FUZ!&MYKwkHoT-w$D(SVxkblvDFw79thbA|ssOs}g6BhD?vb5965axIW6Z@Qu zS}JVPGH_A`x7cE{h%(YdRDPqBsT@%k7?LvX0>fO9tb`1le&()%HeDI&g#oG=rgYo1 zOp!9r6crOOWpKKIK*``%uIRup$BVuNpPSdcok!o;H z&V;t=pQ9Py$<=s0s-NL|pt;Ji>2t1ox<^qa?sNN(xMyg&vYp&J`8j!a^7LrpW@m3c z&)H#xFe;&YpF3C0!u!8a6F*cz z=L-bZG{*4qcIoJ*b5%SKhHrD{Dx%La;zR%1v)&l-1oc@)rE~<{a3im`QwPI%Hg{?B zC^{-#J#j+?9@3eMZ9M~~^L6EYTs(Y4F?DVp^az4f8}LA`D$NW7KT~f==PGInh2G09 zAexy`#KKBG=;cp5U@v>;F|sK+lDeI5Vi4TH&c=<4~! za=QBTMu4BI_@lbzJ5qpiDZw7kLXPNEf(+-n*79MMsh z#x!#W(E5VLixc`h-4cblH3&Vbkr&~zgbgo7D^cP}P(H{MP_k{5;)aJ*Qt|uATVV%i*9ZOGM{E( zEqEpl+iO|CW>5*Q?mn)+fbQ*rZT|)Qj&2_KaW6s7=*vAcLo>RO%g_mU`k9I*L`?;o zG&L@2JhlwJL!(2dd!`myXxD-WiA;s)hLKevQhbbKGEXqS!lyVy)Pzhm+Y6yz$25t= zQ80sKv;b@3dl(|B;&U@ZSz`5MJI8hT;)8c{-8Qg~f)&h#Vcb3Z#`FkXAS{dowt-N; z#$#|>JU2GT5KWB@?wha}T(yF!&Bdi~Td#3~&Wei}oJMMng4yAlixQqXYK{bE;rXI@ z<{GSp@y*sXfl8Ycm)n>S=leS#sU;&8jH^` z+obRe5lo5BFyBCM`rR&U$B}4TrokQ|ai(aCqj@ZY?SSTy*h40>+3KNYvxJ8%=32l_ zM`$yaSrX`^^UCIH$P@^3yL*n8R>&@^Q`0owx?^ zwkxxYFe0>_O20&@gP`W{woo&yEi{P2|7wJV^){BlCqytbYHVxQ#J*{><}F$}IJNJ9 z3$mSD-8y%1@9N>{)y><-w|kGCy?XcY9~clAG-z;e$dI9-Vc`+#VUe1s=;0$`Vn>27 z!KF8NBk^N9&^Rz?c;je(dk;(SuqIZ+Lw1d98#S@TPhv|X5~)-!mlrC8-wviUyXt@O zyVLA1_b+}In*HVeErNIHzwqZ1GT4RtRvUgZ)LH-oB0}+VL-?MG2FmbWP&A~3()f$~ z$rOc(m$hlpdroHT!1T5ix`&-;{LZ?hU3<;mx_2!~6fah^NZ~>%r9v)~N_7156ix{3 z5hx1n5YhtwLK?q7E&9XnMvMONyU(IO{PwcwkCUSQR$)EJAVb;EjiR~oi{(le&y_Bb zE1jC_FIRTH$>zEK`sVt}kHD*|ANy7eDAnuwiqC8BW#2243*QnyhK_$K`Y1a4#ZQFe zp9KiN7W|)3PDl&C5Xb#V_}|*k7bcw8U1z7u$*lPIZS=oiq5PThL)2}% z-t;`wrs(kEmV+(oTl;)%;BeuzkpGg^ufM#~gA96|D=p}iP@Z(m@NZpA@6zYG%HU{t z+17P8N}yh%WWd^I3OL+mO~7df72IO<^zF?L|L4AkmzrDawQlE{5}oT*Qo_m#3E%&^ z1~8!5(G~si+uy6)<2Edutb!`v<*rQ*=(W1{yWO=HELXzFyY+{AdC9;#PL}9=Sq39w z9nZ|vDB)*V^2#trJ^tj@Ge4f5FNe>yPL3aTA7Hkr104l3ORU6 zHqII_QVtdy4`u}Zse+&@-`78{CV>l^JzE?&q5{vZZ?gI{R)FQK>?MwN3OL$5y4Tz- zQi#8qTKxC6x#c) zx%+PnKnrYOQ!237Np9I#Ef)Dssn=nrT zeP_q4dY3JQy}Q~y``cFnlPA<4|1Mnyix>ZXsQgy|>y|6_toWpaS(E=M-Us#K@IQ;5 zZfPZlsyErZtbq!; zevWb;F<1(d<928631Q^?6k}j47--y2)As5lvr?{n1nk^N){f(psW|;zM4&3P=6j@!{~= zpuJM)Zq+;fl8+Rm!_y|j)CP!I*GOaaCqQWZ*@xb>R>HFTb1p1ctpwNa%SWWy$zk!D z+YyHrqn^LGTv~QP2}{?{npAq71d7zKYVUJi1p|KEySHee4DOX0H`k`B5{h1)*>TE6 z8H`V?XyY?k4&g;Sx^zrYf=pgv(jh+;C}vgH_H8YPa(h#kHy$p9f6m|i_UyC-jy~La zvT$#dbGwF%CDrB7b-QJ$>m?PCpZ$H|*e`DL4*-X&JsY|HD}`Q1qNM)lw0@p#>tD1R z+Jmos=bW9Q_hSFA?7@v;ZRUS}CI{!;`*NHvOJR7$F-0o(Qo-9MU40ssSHYF3Ujq{7 zC}88YJ?#hlB>|tbRb?;4OF+K8&E|Ut6mWBINzb>Nr7&;Bpgz41E5UE%^1uGsD1~u_ z-t_)wiwt%s(ob#tCjsC^h@+1GpK{B;t* z^oV{>JjzO7j;7J1e(mK@{&B@qfiq+h^xq zJAmtNH_e@0RPz7K?k2RmD<6d8wfPK1iEiJOQ2fH~S;Yp+pt1d>r8gH#;Zh~#@cwfF zZZ)0v;Z;8s__nFGrFmt5+aG(qPIwE@;`*A>i!uNnSeNcB-6VsGbJwQa`Y3@f-@h)1 zEvbU!Sr5-`yeWmL#R~7<)ma6nUY#47T*^lp2#EgHntCEY+!~0=8vYOgV8!3U+PZULRgu z24@~CtCx3{!?cF4c62KR(8u%D^6yO*(A4{~L!X-p2z*{@SV%DmD9-kpxCZreL56D~ z=Lk9c_HpB|{hj1cr_JLlhD3i3g{F4RT79-c{PG-HthF8d$7w$2UU>8GlHc$Jetc(0~YZVXaD zYU4hqC%0FCb<~#&1N$q$dCo5XgG1%uU_DIH6!oTcY*W8Oo)TzUC~3v&^(r`RGd-p> z+W9{m-iLSjset3EPkm;;l)}lEe;tW-kb(B|VL&*f(p8wj*c3xk-?mxnq|%}1PI=`p+0s$baOp2@g0r}XJwJf zo*k8-Dy&iTKCXmY+tM6=ER~}Fl`p&ZUID!;UpVwSQ3XZnecAQr1vw<_I@#mJHwjGt z!ztrkj0&=n-bD5Ktb}n=E60%OQs{bT=%yCGDWKVg!I!Jo0(jiN@d)d|aBf3hJD5|M%N?8LSLw*Q(ki75F)y zw0$vL2@^^``y0N>plN#BMGb36V3w-rvw7&JtBo8{=3FN!q<()sw0pV|X3M`m^!rT$ z^QuN{t36rVb!KNA&lhvDR%ek?*dLzArlU4dc}9V}>4! zRzTsWmnN58Cx@T54${mP0HwYyirDXl{&o9??eb4j__xOV`FC0Sm)`+gJZhd=c|{7xIwe&aHBSi+g|;@Gj1y+3-(`W#(Qj|b88ml9X_R}_ z9JdX<6cB&m&Gu#;<#6czRM!qaCE(n!gw6PD?4LFj{;oJj4sX9yoawt?0_Dax_nC?E z$ZXs4SzslAgwefrek&}2wA%Zp9;hUT?Q;i>?(HsvQx;42d13q;WixN(zt|5Irvwgr zRYC=uPOBdbLq3mn>=5NV2B6Buz`yoQkiyU!(O=?T$-%3bOO<2al#u?t)Xd0#RLecnKE$c1@)^){x~k3%ii;9gmG>9wSWI?{8I*l9Olog7A%Ek<>pscOv3rk6x+`4qLeVlb=-eCEK7W)0sNcS3 z$^OTs&|`a#!DVp%Wcz&TvRj=c@FQ+#(76{9`1rNR&VaKRuMC;ACTcy-o2o8(^B3BU zr^mar*^co?gNbE!H0>*gmp_+}**8}K{q|N^J?tL|w75EPrk$?}=M8iBmme(!|K)`y z?R3HQ3)$c=d*bErb@`sS%EeVstK-};W3Qo{p9EEpOq7A=1FMz?pD5t-#?ddO_hj&9 z-oLFHT1uf~t76w|W-7rWe)9Z{jd1?+q5JVw7*C#GwEnQ)YB@COxuWXKfeP4S^Sscm zC8$r$>upcyr+~VnHl>}#I3apU-O!3d0JN9?m~OdDj`AHdduDkhM9YS0n!c65k^!Cl z-CC(&!|^*)IuB65zQFRMwP~o|jfU72LcitWmEw~Aj}(g8&KmC-Ac3fdtDnagmO`VK zFDB2xIRDbaQ9-@YKdYzq3Q5EMwk=v)u{%==z10>A58A3=+=Yg%evD8-6Sq>|HZ4%V z+p_24W>*6UY4Wm7S{W4#K9`!-&Jn;n*<)(6hBByk@ZBu=2MN?zUcU7WkU`Ng>z<5y zigENrTi>Xo3aB6ZtZa3h*B-Dvc=%vXIn-`qHKQNKSv|B>6FkbvVVttYt}%xdaKe3e z-GymV_|Vw)z@V*i=(g?0t+N;x)@kua-+z*nP^6_Q?r)qQ92y{4|$O$n^f-WyvrPzA$2x?g+s zQUW_q^zi;YQ3@WHE_f2K!R$yH-)b+EY(YWz3ht<(%7D9Z~-4KHvMAfb(4Wkq{Y>23U9Fl+DeOa%l3l(<#M11-QR` z_V#oR^4Y0D$dOAj=)cKo$dVBN7Bfctx%q_>wj{g1Y5Wf7=c7+q_l{FQgT>jyI^jIp zF>&?%qZr4H-#riDvjqN~{^HK?&QfqZlX!o(jRIUV;+k4LSHVH24r^}xE`uZ1(+3Bf zl|hH;-FB;im&Emsr-M{YR@zJ9@5ZgV zO}T~h=t>z&Tm6pn@7>ogmq7oUFe{^3aBBq&TUtH-Pdl8yL`JV{)mQ@OPWfa)arE1b zBTC+vDPh`!2g6UamBF&WpH_>uO5k*y=Qo!KC9KUk_`2l<^sDLW$Uv0@&K8e)@y=2O z_gf!0J-DO{f-Spvw{MAdCC7H<)iEkaUE@@}1J0*vojBl;GYw$ITc>~yr7&Kp-LT># zH}tc+HjEot8sN^@5%ac>S3noKeeT!?TgvDR$ zybW&$@Z5gUsy1s>@a9S38pp!r(9+F6#HTU9RK?nDPtfm6vxlxeTM6y&S*yUP<^UbM zy)2&j$zg7pg=ekZq|o1ef&WY7zglAX2i|p5Ffw!P-TgMW{?Rl2lNHV%W)>~BXamaC ztmb#Y!*Xr06v+|HvqgJC{zx3)+zTrp-tV%i_)(+#P62~+xtF%+Wmm-y} zefmoVep`!g=rL6ZwO>vj6^(ZEXq;bGTa@R9MXP829;1Ydt786cDwTrw?wDcwiensJ zqQUKTXg{y2D<`_lQ9*CZT4hI}AIQ1vQzQ7I3O;0Q4IXe&0T-f1eqW}N!JfdPL5p#` zEcIBib;~$8T-?3eNBTwv`@T-S`Nw(*j7|zux%O1T#*&*M4(GE`g$t#;{8J8zM+2tK zoG1lbua2EB@03Bqksr4oumRXsD|3W$n-oU6+!*XsSPm10448ht3i@%o5y!p)>c4%- zlRg(zFur)9oS@4p__LB^(5++{d^-Ip-4Wybv#VFm#P9}Y4vqDld|LsvV4?ch0T~qD zu%Ti6H6_?}wkp*22mzsua;JUSk&qe=o$uiFK{&NM~EB9h_d5pJy?A`0K?3M&xF0JV~xP}5s*RD|e>lc6} zGv!M(3AmnGR_j@NwG1*w70%hxSqAp4YRSIiI?IRsb92rtmqNMDlOFs34d8b&vedx7 zN?7smS$cV#=X_kCnV@k|z+JCT8(s$~!0pVeC@*V_tEP3-G#n;@yYuZXeTm2TbaeRx zHF16OqGQwIUo{xVuhJHiIv}4`TVP3JDQx`_zU=O5v~P9mZd!0!1+BU~eti++){}jA ztD5vtz|7t)yH+eOhx1=nwVU2t3Pra*EVS7d1^#!!@AEKzY}{-8s?Cuy7})80s1vRi z&U8;%x*69;oPR=j_=Nf=nd#~gqJrzMT{C}N12`J>muK}t3b-yy^*LM?=QkT0#I7oj zfeK7IL$ z{_NhyhVh4`@buxCw_0q^w=ZRSe`q3uVkf4&D2sl1qe=+alkxYSt2n;4J-pWi*Aun`EUL5Zyd0vv ztvCF+PX?F6Qs>rrj{dyOrgM>PrI58bc+38`3UCQHq^)%i`?K1OH8tl*prWN;$sj)o z6k1$n@SIFJ?D*?^+D$77sH}4?eZ%$41#?b(NbZOCWA|EnyU1X=vT8sQ`pfFeO9Uhi zmBOrxVOAHjgP9%xUUpvcoi3ZohYpRR5 zm%w@TjZy1%+{XIj+ua$8apu$8FYo-sc;Mtb-vuWkaU5#4Bz&9@I8A%X4{oXd4{RKO9% zOt;CneiaaK+`=2@(L-)W9nZx1b4W?+LKAc3(BWPk|IZo;>etybascb`hrCI?BNzvtE9XpEcu?u=cU zG+hQIt3H@M`nv?4J=b*aT38BK+&&&|b4~#roRVK!WB>1)ye;wxj*r&6y8T^#uM#fA z?NVR83{WvEtyXLc1*|PJphpi68LY}Vf9rcgDg61MwdJ1Pa=2T+;qP6RDd6APhtD=e zeJk9#_pvq(Qn=?nVZ@RgTt_Na{N#fx_`G4*py0(HWw6v?-`HN80jy5X+k55_+HGe= z=-k~(Xg&8(k+h~VNWVOO??sFgn?GP9ms`bq$#6Uc z%^UN1mK@gV&fJ|D0v(mvL1NKJ8~t`#x6% zNz+wJ4`IKSExA18Yelr1UadP-ZX*TPDi5m+eunEce|GBrwYCgy?eII%wFJ)Z6V80I z!)5X+`+OXhV|;b+LYul--4*a`fYrCbcky{n&W=A-oiP6UZAGIp)p0$t!WY*HX8@+O zsd4jG7dhDW%9-8sxf1p|sl)z|%c1PprXQ}Kl7reRVaaz~ugeHp*RK30TxWCHo_*T| z`)Oc$Knt92XHP5Qm5p(7O0_XbmtU%&>ck1Ey5~^;ZtNOke*o>{!j^Bs@Hs%Iv72xI zn2*mlrao`cCPfNgCnnde*g*!dH)q^-L;q1ZX{6)EJve`U`|r|k89M7%so-UwIr4u_ zE8xuXX|spo^Rjrm&U1(3JTvX6V%@I$a;R5ryyE9SGH7(GP2GX7l#t>5vP0Q^_&n^G zWwQzxhm0F(+d(o+3R^zR*pqNm1|t)aJpOf)f?vI#{Yqkea&0x|(Jk@0Si^1oTMkk| z|H8@{o>l+@TTl2DgZ8_S=4$*D2|k}XQ2x@eHA?t0eeu+^ljxs@PdJ;gLj}Rx&W?Xy z1?Sl{*B@27;r!*@=Gv9Y%OI`O^xZf2DPTt)&pS zKFHAt$L+++uUZ#tBM0jZ;p(xd7c~z?^xll)X8vOLv;8pMUv|G+PR{iZ3X82JOni%73=3htgIIbUzdergZp9+|B?Wf{(MFrd*(OmAnM+y}eEy(c1b(iy* zn;f=h;1n>s_TIA{6i_8|aGV?Z)$%D3&MRZ&Fnhm;YRgo#?~i8oZ+%q)9V`92+Nqrc z)<5mnqgtdCmK}co+Pjz%N``G8eFEcEMfk$G3x;4EUZr%(p_&rt_nY;-&*b1N}Wu>=LUbQInk~Q#s%HV zwt2gDr4mMM@b6f@l@waOk6(KP?Rv!GR!6(HP{RJL?-p0UdDQ{csQnF4pFf6-Xj^C! zuESnx*r_hA+j)=HbZddn@q7xU)o+LMpe@a}oxW3A3fGTbb9}e~r|ZnZmiv#tWZ9z384 z!}a8UvL7rxkMWwTL-W&LAD|vzbbWm6Gx}wV+m;p?a>%saaxfI1L#2kk@cfQ^uWxpy z>^zK5n_e7R_nc6^kj_IQ+IDUVxbAGzyixm5DZJgQ7^3_Dupv&K;QUYy z3*V+cxaf@Yr=|7nc6Y(`&Awkg*2m2;zfXJbzIp&a>2rVX4M%&LcHzxh=NV{Mb5`%T zg6mNy2j6Q_{uSW*U%il%g=FA$<-O~NcIX%X{Ih>2bZgTxhCP3T{_=j+fldCzd3Nh& zJKSsjCWq+{PPi+FD&gwUVp415&u;Rt*o!!S+_rCOOfs&={MP$Mwf9>TFmj4dDJ}ZR zZgzEs6^)aD|M*=^Uj<5_ZI$H>cSNe-504qnQ?zJDD$Kgu3!lHtXyY|_^&|;M=MR1J zpazcnr;V-LZz;hdWUY;NCk6a-V9LrE+_!KiV+*JZOW>c#2bp49CpfwAYi$*Pu+!OUvAq8b;G zf$ZLmVx?BfU{{abulwOT_JPs0t!8z^eF5M0Zn}f(wh#Yo(0Auy3D_^39bFdZiMRI; zDdOK$0%bp@jd&I$g})rCx_?By>sZ@+VWqcH2)nm3{pJt!tBViKoa(EDoSmO$otZ5I zn<49tZEquiA$}fDPXDWb10~wdk=K<$@!f0F8{@jeiC=` zbfN?{4*d403O;}OP-yP;1l&JycGIpGjThnb`*jBs)?!?|WOb!;`@?WvSV8U93+I(X zSMDw1iR1P}KyZK^KDXJ~e(Z)PMI>N%yV~2sBe8zZrw9K=ebK%sRJ{?-6X!?!SQH;6 zfku;35(5UJJ#%mwJ7Eis=Nlc;i=$nsu_w0Gahzu^zjA*;+0qKg@t&1gX9Mb6kI7Ds zWzoJ*T%8(?@lwNCGY0HNztHKoKPm^|zMMLi>VO(ka6SCA)rsq;@OfLWDL>o31-P8J z>E{)c(-4oV)qCDYJ5g-p@WvnHxZmZ>i!IkA@Hj)Bky%*|canUMmBsauqi0iotJ+5j zFIw#Ua8{1%zoDBVdgA_^h^ddJ4MDqjdBDL-HMUEj^U@|(Q~OCFyl9Ws*AFToQhT;c z-TP8_wZ6#1WB5GgWlX6luV&$M`;-&=HvS=l^_K{1z&ZwochJ4deUtS~b>{SPsyCbkeZx_#DX3b@DxjpSX^Z{O08A zb_)2>NSe9&s}y|4mu_$d*FnEjJ6bgw=dYJLxwQ_!=gdVcOSyHjQ$Wwu#LpLZ;C_i& zF_oU-d}ms*)(Pr23Yh;-n`8D-0PVqlZp;!nL`wRNTe%XSr><%(nU8V(xpNMF2XH@0 z@2<-?+4hq`*5b^*iOv#uGp_0MqG*3VNA-JG@;2IuoJ6awo(c%t@$8ibAIy!Nc|;J}4`1$4@VDNB?;9OHn{7}Uq(J_ zmy&1?&S`V9CubP)K5W_J{#PiwV_`q?eKlFCXoY=?rm_)l$ zwTR~|ot#`cCOoVSe@>CLydV!amA2Zos|ELaGuuzM0VeTGY1K4rXOK(k{>7i6#~gPR zdT_9bNi_5ld&F14KNd*Wbvg*WbJ8%zXNHADZ50mge$OP;w=*mZ;Rif-)s_|nA3NZz z$aWHSU4z?e6qLA$qO5R4>kgrj_ zoLk5boL~H=J^?ylYKo=62K-*~IzeorDd@|Cr*GBor;=Nq*5l_9*4%J8JSPl8G9hEZ?ult~`5c&SNSiPnL7{l$S& zcsvR@KG&O753*RuddCe;TU6jTj9s}!gT6Yp{c)?|B?dWv;DTw56P-k_y?9h14nE;a zSuTNMvMBD5&JAyYHkl-_l~y@_fZ-ds@FWnkN#94?QrN1a7;_< zmEpo9LN2REE*r-C{d-x@_b%|1(3_U3*r&kdBMUM4zDy$i>UncB^xm8exjrFJC?w4G zW`K7&`W(BW!EI&q51J5r@QipQjUz+c)HQn%jcPp_i!gv<)Q#7gEgc-CY20pVKX=h=p#{T6!VU z4|%*h3j6IH^BLqvvdOyN=-YG3GHT&;ru;u0WFSw`DigF8&}$F1s}5A?@%rRQHvIntrO-FdTV zDU}G0d!|yMgKm}*nU4f-4$#$Ay#QVEns@iTzqSnWQS61V2l!u@EsMfdB_`RuzP3YS zDT5eM18wSnqr4+oe^8#m=d*9#CvX@2W`E5!Bj^bFmC4KahQXiQhJu1psATb&TCWB4gT~cUstwzr zm(22C6Uu}RS#9}f7jXA$a+mjY0t?BA556~sd)7QB-C=}&8a$EB*|?fP9?CVOJV##~ zqE$5yfTzTT+$pH{LVech%kqPs&<}UgC2W6dqX7!g;s+sehjkhDc5Ne4H{|MyfAJLzeADr zU|W$5^zhl{K5O9f!Y_|j`3f<~$32p{Uv?um;4o_Ap^l$F8)u%6dN6&$*(bdWKH2Nq zgLyJcBCzt;QX%Mwsmr$Qcq;%u%=0XB>K*jE-uxe5I2q*o@dwU6$Kb;?i8)W*L4CCR z`j_1Tx`_U>G;`pfn&fj*78b}wJhto)1>gNjZko>G9tS%mDSW$)dmZ?2=V9=$WF<;=f8Tb<;;L9&2gY4U@*=mJc?cYFpjQI`dMt|bs zdUfd}Gi3S=RRu5SIZcJMDp2aCP`G6>I{!g_r<_|+cLJ*wYvPRZM% zFYVCv3dXfLwW;K4`<#x55DQ@}lCPie`vde%cXHhbCW z13tR>?4!@!1#~ji0hfJ2u%Z1Cq3 zj?DGozN{_S{>ak?I;)^~ywY11viU)h4L&Y0D$rSyAj~AZuUbYpo!|qQw%0{~7g`Fj z8qpskztIqIUIX~2WnEeaO&^7GwlsMJxsUWy=aPk7pdZ{$aAU)H+`sknalZuUh!?Uf zr?W6GkR~@&1b+MZtKHZkapWnNuIf1sz3`RD=h@u7EQI~@iQSS{3CXpMj9rljp0Hx> zhmkHJjIEOe?2X9H1wL?VK;1C!>U+5RDT7pdeL86a{Va3PY0ZNb&?Q%^n~9tN-{U>Y zeg*vFpX;yVAHOh2hD}bb7W&7s$lt65sGsY&GHV6==;TI`iq%8(vGRufGb0iVlBjgX z^?&}+IZdY|7tzVaDJvdZ_^o|!jNk77&fK3x6R%;gh+C(w^?PK_JIe&6; zMOet+kHO@c9EI#L;ND^+gZq9m@qCyA_`nTy7v3oJmH4|>79W8>)J5ik6~VJ=-uadT zuZw9~r)>wWH$LgJXoKe`eDr$gH1xBv9{M&pZ{UMFgIuY{2r0ktG=|2& zZ?sNVV~Gaeau2DUIfS~oOndn?8gNy~V%JOXny*S-0gIohWb5ATtq!P z$?Y4xDFC0lyQFjPcIbXbQ^IWE2VBi^qu*aeB{LEQOWs5GTKdF{>-#kDf!l`Vu!l+G zucUj~$kQi2f9m#d0RF`;v(jkzWzxR_{0#{FrMGJv56Lr$*ZC@@aSZYZS_?Z*;O7Qw zhGga@K}Xsr(D;#w9Nr6~Eo|V=XKqgvv7%n5##RsZqQ6`-uZSIc#U#!xTlEzMk^55| zRZOHZ$za3p?P9nm83|cOQqR!{!`kSVo)>=4J%UXdeo6zs3c#^!@0U<1V3klrkF8S}$&8jPq3ERTIiD0{^16Tu&bN zM%(*x=gl94D4gcyIryGVJj%XV&?Tv4HuCwp_Wcxcl_xWm9p{r@u~2F``fjDc1(Tyo zSV+%Eik~z1|2{{JMpo3H+(YL5yCzx4!aDbIcGNeOIN86o9W3P0E9%DG(3L|=*;hZE zV32d1my9OBUo1@DIoS3wN%(VDUaxx0)_phSwQtA!dC#W4fP1MStqw=9?E9azx<^W#!SmM)+gw@(RQ<)c>fpp_@slN+j#s=sThEt zTNw9@jSGA!MC-I=)+e0j*Jm5&;qPks8_eXp(1=tZtD^)H_}c61*yeobfX%kLaf7J8 zuXdLlW>Cn&NMrh>1ad?UHjHlg0}kHmZZb)j`&sBYsGh+j6(-MXL*iM;0d~=M67ZRW zwvX*vc*#QUeQ|3b(3iiynxoR;k95u)kKzX}nQUu%qXK>|dhx`Km=^fe6|2(%1Q^7l zrVZLHa$k}Uk|d8nkMR`fA1Xs$ZMK7p^%`_6$<^;4Y2)uH=l<$^N62P_xRdD{ndG=b z^2*=a(1%w3sFH!cG@Uf-Ihjf$)50gD+#G=~_YDLvbSR|ja7TkHbi=e0v3;$Wn^JbZ zY3y~ILVCncy&4;WZz0TcHvs1;>3N#C$OGg)%|-dz*^swW2t8d2ePA@n(f@BEeB<5q zb;p1cOl279T=0+navjl@9D%+VC-pbOmPYR7x_vK>ppe~tM<-^0NA_O%c4-(s;_~KT z^|@N)lg2FqsxXI@b2_Tw?KMI&Wb&$Ab1CGY#v?lp4(Rd`$}wEv1!Cvq(tS`z!g_f{ zPs7g(bK7B_htKonNt(rOCk6@GI~+WH4*pBRL*4%8G$JbVQhgWZa}K6@ZQKdH&#x=O z^5k#uhJ#BChQs0W-u6y1PN0%E+UE|9ucVP9QEx)tu+ho=_vMH6pbzP<`y#dY6aB^X z>%iy>ycZ?GKUb(!;(cuM6F*nz_wV1i1i(jOm-SXLaT20YNqnD!y##c7Q*WI^fzTr<%wryEsM{ms^j^=MxJOIg2n?pe z-*|7{zks^7*kD&YTFxMr>G#eo#oXa-%Ux?DHK0Rj`M;>4QOL0w-xt>K*JV_@#*;B` zk#al7`bhvGu9B2L1HYha-dT|~OJgDSlQRyAf1yVhdVXRD4?j;U^K3VwlFMRpE?GH< z>%_S=U8%#I-JJ;q4fGop{^s1G15~nK{6&*n1>PHQSTag+#hd+PtP|bywIf0LfltX%KC0(A@4$rAErEJkOw0#BNE^< zD6I-VHV+)8ppa`-3BGj8`K{J^UP1(S*vlQE0dM`$)MGl+NvzAFQ^Xng9)J2KMFR=) zQ}Z+v^ed-~u7{Jln42?x6}%66-nV0F?Q$m2@r0F3?TiUA{B<;-P!xQw|Ed0VJkMi+ z*2T%F^NVcl5i^T;j}5;ybNj(lD;^B;G+<7nFt_IJbMy(b+@0awG;)oNb|eb@J~qsD zHYcA(jHEZ+js*`()?HkuupId1q-mSCBn#PIrt@fupGlT$uHimb0RP9j)S874KFH$f z0H;Xcu>K!Ab)ld8>3A-lKwnoJeA>8M5dQVQoF%$agbb<-lw3y6$5O5H$uszvB1dwr z)vRNX+R-;3Yr#8R+0q(aY@ySP9u2fyfS!3M_PQqg+y&zd_nhm%b*s#$WO1$nCB#1* z?qrhTUb9lGZt(Mh>s@mfvdl=TFfOw2Q9mdcj{c-6^J*3S1oNv})Fo zgF$X{Y&jq~f#+NBMC%iBVe5*PANcM`C!5q$m1lJsMAkXsp1uo%bnRcgsDyKR?5L%c zjs@m{?!Qqffv$U_XqABDMH*SAW$7}6x>Kt8vwuw^{7k#6n|6S&y1acklgD7dN49Nz zI71_^Mt;931<#UN>CM_)gx`N(?2;7lN`Au{?%n~s$AKAxCE#aY+fL*(t*4Uf6Q=vb zp>JHLOpBU*C*-O9h?a3sZKg*Y{yGkdikA9w4 zN}?0{#ilI_9E6k=+4&nxF^L>&>JoAIDQ9V)TCJJz^VSL%25N$LBz&J_Yk=-0M%{K_ z9r?IS&e&n($1cdnF6WBDIVmYRKHp9u2W$_Foi#%)_eg8}Jp8_u+8%-3jmReyG3pl= z@dLFlU-%8(#_sPY{iwSX@=Msbi2z?a9KL?&pg-oL`m}4^|DsM>7Oei$&q6q>m(NPQ zMvjADLGC_sFF!5xBK)B@RW1D|9HT=ePXn4Q53R;Me_?&@zy;)sBn!D}_Tzq@y>hq( z`oE2ePM=pL{8p{Xdw-C3OtY>F*wn%x()6g?QG4KX*2JIdIL;u$=lDFXBCoshdm?W- z?&+oA532Mqp%(JI4bbtUSU$+lfG@y>)%|Hhk^KPL}a#=*FgBPA8ecFK8={P`r=1 zF`l8@{NQhEBW+5(r)b3S_<^c0;E=BIw++vUdpF2f}Fmg=)N=XbDJ77`(6U?tg!qp{ip@=g9pV!Qjo7d z)tYu+DUD8w3f5RLix}jzGN))98dMu{KOdaM+|z@04(d_lHiJH#p9ijMbyoTkI|*GVo9b@%fzM%O_2qT64n7;KLR558rko7D@w$@NpXTNjhOZ+Tp)kG|gDpOfX`fjK_8 zEa7e7p-yMB)cq!r%hHhrfbS)Zi5$OMHLs-qYg47I4;G)uU#>i z=ghkubCtrf(X0BP&rTdn*R24atJ9b`>drzwvGLx08OuW6-+X7^_8j@O=jr-}EDd-3vp~&UyIzH&efBt=CP8z@ud-U={B!b1A%ws>B;hUXZ z8kFgTy4|ZAc<0R+c;ZpzeJ2aRW0gjwj=!dpbUps7R;pC8DSW)jI}p$N`m<0w=vr%> z2D+b=Lf5_fulZ94gS4$FdK=n|90m2?WA`5nQp5jI(*}4=PpH{k7yk9E*J9!NXgc}+ zbouG}8Oi&HHF-ZGNJnoZ&=BLQQXAC0tpto}xx_KS@ z?xkqE~9e?q6QYYr>*Kr;WKwj89_VtCBbxg8Jq*(O8 z?`Zhc=igZ5Yqs=bo_E`(Bu{S&nY_1b zlQM7=k^1hj4!MO8XW^%vuu0uL&T$HSWs(^G%v^R=1az>v-WGJQWN5$!q-X z9sGHnC2A|yupnnWq*LvI=QH~5L$fO{<}{a|HwgOxJ=>c*G#$Uc!t^m05i2Tj{gsYkk;fdhDA?(9QflJdRBu_>2H-2J=rMc@PWoo~*0jCwk*!tA-$ zfcn^x(!K_Dj)#T1pA`q;H|Guh8Q|?0C(f>4;F)TbTkZ+t^EGk#oBf}2e7h=H>M;Di zh192a?rAZJ$<^5e{vA}Z&!pt4HgcIsp_6}Efrn4;zGTa#f_)Wz&Fnr814k` zy?AN-M%Nz}BHf+t#FfZG%IMOR)0s4~cE52;+yHbU9h$l9`2M#LF zo>Ck)fIr4_aOHXMfn+On8!z1JeVO}P4WZ-3=P}K+e5oY0a@Khi_1rAAjQa{6ds zB9|2*yLZTnx7J`DQgsUl1H3_5bk5LcE#_0q$^~>Jp}R<^Sd3;S&Vk{0#Rkp3hq_?`>4v zbDSS@tmPh}Xa{7&lFs`)K2&mFGw6VPD16t|T}A2LOtR`z#i5g*Fz;Jnn;`cV`n6|5 z+I#fXtviH{c5qS2Mds_#q8+#oW2w_Jv4nWkZddVvuhVXoTRD%u(YfVp&7BD*F`$dm zPr`3-6#ejV@;mrT-VAF2&L``uvLoWqLI1kUiT)TN`2-GTSQ=k@h(4fN)dTSJ0XKQW2s!ufZT(9urc-E?w)1@K$1@q2OT zTjtG)=XM0JkR4AepE)6a#4Ud3^K*C1h2%@6G5M7`hKNHLb1ED8&s|qN; zqmbo44F7%sp4;w_B+Lpu%=FNvo@?iU18t)B>GQyUoblY>=?kA!ntR!rrFeg;+-nzr z%S%rr=O`!uA4#%}$>_odyma+dk2jO76W!mi|2O7U7R-hDp-1dlx+*M<1LswL!-fYE z$R%z0K)#xqAZ?>)NX$ZzVzKdi*FZlgRGuy@@Y2bkKp2stw5BGkJU(xX%zA5Llq(1Q3 zPp)qfeGjOlidO#e-ZRYAPKPBuLcV8rt=RDR76$Z?Vy(v#$m7a<%zO{r*Q3(d-dl>i zm;3c9XXsDn%VUm2DpQG>fY~J_%u(DB?6b8fqY(F)@-=!!`2BCNcC3O9{jM_gJ}2;p z+SW1d)I9j~O*wvHpP`=xNt}*efIgDH&r}z_#G|I)7u3NcfB&2dI1l}_I=Io={ucVU zN4gvX`3&>)6&1U{)8i<|A3axu-s0<=rty%F296V}p5l3*^h*;j$)l3P7h?*7fbVbb z`XaUo^&xAsLrxF){`BAFAm^Sl5e{Wh|vIaRSaVfb14d4jA2WytK>3|>i(E`JP4^)*M z11f-TjH}+&d!QefW|%)qXvN<%?lahavKJq~7Z)vg zA4$>4>Tl69;lSr*M2B0vMPEg0 zW6Z_1_1o_o!TbEklhgj3$6Jva+Lm2yf7*PmFiM8&=WzMJ@vowALIO6o(n-oG@~9#KYAO! z$>-3F8R%4UH>XnnET<5oZ27IhVZdvzZf54qq5rt@xb8u{6KFkf>f15QxvS}^twHW{ zH|y=0)ymjU;Ify>Sb}+KKMhND=oNq7)@g{|$6lmt^U*8Fm&x+go>18aJU`O?b_F}~ zwfa>KB1!Pa=e&|SWHBeW|8fa!40t1cPOsz(a^ga&fxB&Kq+FS6R=}7-*iy^G_}^l# z($)2iqa^gOZCA=vkej;pkVQwV0DeTq{gQ|Lgv7l}aD14BJqkhxO54Gk%lv+AWd382 zT#K;o4D^+HN=JHS6d{pw8)93bM=qaz6yZA#UGH`q&j@mV>)xqpMW9~h9JSn9t4N5* zl3gnn`UG2KkV(%iy(7<=e5qd&S zR!vMR@)&J8^!Op<>4Mni{_f9&{~6Ld(%eiThu;{jd~XE5&sE9okQVY2;%CF-4B(qI zF#djnzxH>#2uo=pgJf{N{8g*OLN@u*wl?HKZ_8M>)dV<0PGIU-z7o!})q{UV&>7?O ztMgRRA3vv!30qY_*Jl56sxlUJ|M=^!C`0Uha9O(J5Ab(c=-v3KN#v($_XsqU(+Qs& zTZ9wpOTN;0iw5e4$jY+=kD@7L_(1e(yJ7e#1=e(Pa~3icv@B8?IQGF=foo#WwcHLy zYmaV$Z9Y;VUuE7NL)Y|LW%u!qTlU9pugW}Lxl=O!B z_>d>piHnIqU$=kwwu0*vm1I?kZ%L7WKgq^BUjaNcVfp^;L)4ia=jQB2F^}RW#o4s| zIqLe3RbH{U|HeAn%;+0b_$dd>X+H1d@4M-+b7Gsqy<%Q7xJ z#}6M(lg>fE%^ps?@DtBJqnvHMgBNm!B?qsVz^7^sRaxTW&Lk1FpQM{9@a+&paf9Bn znY%Fh9`cHm_oA%ZtFUivF;qA`2mRByQ@5bB;Y-q#vcTsy zjVOEfLam_doHfN;M*V5z z{2x8H;Uq#j4%$=Bpl|mNGYguapKeiey7B}#?M;W31ZY1wl(I(6E(!Cwj~CV^|3Hp1 zZtE0I0V0~O~O2B zKkeDP4s_n@8Hbl*{?FJ`W780L1poR=M>1bPC&|^@oiBj>Y(0-e++!J}QOv$j4f=J! z`=YM=)0j`xeJ{FKl}7y4*GX@DPsqMR)mImxC&aLqUU)hNor~Aw+4W}RIjTciZ*5=_ zo7a{_^Y;kJNv6rZMnAQo@ZGXU-XhjOWsbjq`SkV|c$2 z&wFpqN8$cTE9Dn_!yK}1fA&N#g^awJTeSjuq=e_jg8yx?W4FTR#Mg*?;!loml@;Aw|FH+G03@6)64 z(6P!DK63xEFV6dsE8KIBnlb^r)E+zd9KMNu_+7sP$cLTZ>#$9^1itywO64Se_-1yJ z7gvGLx6Q==)Y4~=!0*48O z8y5lYeyXxT6a8TEcE3-@3hX;{9lLWyoJKyJ*~2NMh&>37^+LVye|MX5{NX^}FiqS= zxoHJ*CL4aMpHQO`Pw(faf7UPw&Ckcl3qo$@iu!{MQh09n_mnh7vyk3_?)oqn;5s{x zj5WYTkLfC+rEN@di6>3}GIXshuVgu$i>EC4 zjPt|atliPcLSl`Jj@lvD+y5ZHD0dpUTd}#4hww)-eN7eXalY2A3QvC?3ti4SY~?TH zbz*bJ2cy!En|ibHmp3nRX9HfpY6S^-e`4c=(JLyUt??I*1K#gc+M*FS2;coxNW3lZ zM!@eQ$+|w!zd9tFl}ykF{O9Dg6M+}R1z!BGD{QYGDGV})-kz;%cI!L*JkAvk0nj&Y zt^Mw=3Ozix-TmPId+_GGOJmtHD5PxGc0ze6gLE59k8R^ezI1+fZUXd9jnK{aUH3!Z z-g5N%URCIN0dgN|d4N|ms}v|2$j997s+LZ`zBa)glkZEZg!Ry#3_0kVe0|T0U!p&V zto^X|C+507T(WX`u?PCdPq%B237uqHt)Zt5)u2abu75S7saSY=5Ox!^0BZC-n8-9_y zioB14|AAT~CfW7HzeZINb4@#K1?^E6*T3xG*2DW%8;vWD=f@s0gS936sMi&y-TGNK}mUIzRTFQKhZQ71;dLhk8B(8=tDx}ubgnCCdBaPH1h zyw|st>TmXg2TLvd@P$5AncK|$>k;;(cAXk{fE@FZ=Uxp(-!ZSMA1vmAK3#bv^3laL z$mx1~s~?L(el={hc-a*ea>jnE$Ufu~vRF?uv&DcD1J1Q*B46A7tM3f`2ZQ+kTVpb3 zg`5Z{x9QdY&s%5S)f)7*Btz;AD@*u0wLwV?N#qetgIY}V>7;FEHcK}2qUAX)9)G|i z0U(a1y(th2z#u;3d!4_qHNGbpPr( zqub!Y5^J)e4B=mI=e2oxcrA1Q_b?`VJMw+Y%rq6_u%9tkJhle>ZHDu(UDs|ZVZ2)= z)A6){P}|LXmIl{*Anz~1h*(*)1wfZeImo%nlmiK^#q;qz~{l(II) ze46ndcK=%FsTnKJoGnhn9t4h_k+(aTqyg`(CH2W_{(Oll(8PA4h&+o+j$qz|ZH{3*+CVsThwvIJ_|@vf;1$wB^W# zEW^HobaK^i2Ky@&4exRi_$>LXCmoR^YSSq`zzQ7ns@-6tc3r#ZbNvo z2KEj(H*a&!fd8*w-B69ZeiYTcNfrElWopyu2he>~KlAkOEW&wS`{1@2bO#ojE|Hqm z_?)+M^h=q-)r$Pp=|fU?Z7^R_EL5BDno2y*9{IOt z2EKhvyM-!vAdkq$re*^M@w+uTWzT@$`Cf)E4f?j1qmOw%eAQDDDLN~hG1nEV8MFN= zbeF+}W<&ICv$zjj2FUSPb~|VuzYAZaT5^6|5x9xnE&IMZ=Gu4OBGwm?^Q5)~ok!ij z7T;1zP8+G~*ye$2tX#!nab*owC(}+K*X3w7vgiw_VIC*7BR`d-L;}az=d}5 z7WJF11BZ+jUiyf-+3;QO(~d953+lC)Ek6jnyUm`KiTd2LaV5VBc&=9P-0Byp6jC5~ zx3Sp<`H7AB%YGo|CPHzZxyeT%_o-RT1JF^w`$~R)dyPi6o?qf0g zwTlxr0NwKG;@_vxpC`YYg`Z#&a|v#_YUG8ME^P>;hf;~KBr6eJMBm-noyd2FPE1~R zWybDC4u;;)QV-p-u0Zaoi3x+a)kVyf`Vc}j`g1sbEBp{azQ4Tt@gDs>WY3SFuZL+R z@_}z&JNGtFdXhpKj+wrkgkP_*Ova$u13WsuUhB_w>}gkCJ@Yw~PFx-tJGy{RTv-=W zAr1YZ{kc-f(#@EkyL-4w^&0C#UZl3r_ze0JS>oV%5&U~_RAunp zZOpBes7CCAUZyhqBGU+cmQ7(eUlKk})9*he4>4C1U>C4DbBcuohFp@$3PPTw>SlZP z9y$qr^+86b5_`1561CqeFv$LbeC8JDwF8`Yx2w>QqYvv$O% zz#@FJ!urlyFYLE)G~QN#IrV71gXO8nmHYb-eS2kwJwI{-HOfKY4_CPolem#L59ZnE zg52=xw4S|%p4eA7{A21dc&H><{ix^P|9eYVXT3im?{p^cPdy)Wi0tw`UeHSqJ>MJG zlY_eZg&Z1=L4NmqQoRHdI$MS+j|Fn+Tv?nsA*U!LfNs+F0Xq3P>uu#P;aAlAgl>C_ zdV5dZ_JQ~`gXHC&uZTgOWYtlI&S4+ux*L;qBQhx@+EwK3Ufkb_S8_u#s2gh5Jgp(X z!!Le(7A!UakD6CBO>@Uy5U+Uy|4o>mFqIkJaszo@t0e}Xr@2=H>Zgnsk1Lq+G?8WwVQAY8-H6Z_I-u1wXr zz~?#|ePl6|K^`jU8}57oU1ft=v*CRvSrN1^L=bvmt1b7te$;`}N}oa!&*IMsENe~c zz#i`2U~c;WOT% zv5=w7+kVHw@7p_W$u?)nMn`0w*38QU;t%{(Zjq6|LyFm=aJGICKDor|rY z3t0W_bru2c9xl6ff@?kIr!;J`IH7Bc?P~e<2>Ib94*b&msC%C&Zg)-tA6k#6d#elz3e``g-?~=`MZ!SU|nA)COb3Y7wWzE*f9V(=f z&99yoUN(l0Ieexess;F9;hxyu4e%{4{MannODA_q!qyCKVqZ7WTM5+M>Khf{^1G^U2$X@qGD>G?$_-aZy`+d|)UC zM*n!=K7#$glWhDKfJ3~pohOTbqEA2Q)a+k_{Mz@S9bd%>$$TcMQi=QjYDLfL&G#wf zXtsly)(D-Xl->KQ!3BMH>t1sdPGUVJ=Cv38u#dlH`ycQPjmR%&-uf}g8L4?PH;x?H zF4fRIJCH|d*D!2*1OH;8zKgpD`;cUMPX2)oTKg$w$&MfvV$qN>7Cnqy&881SdZPGV zft#%6LT4~P!Eax`ZUXouVb8Px{IZFP2S?>+;U6mOt#U}h_fGu%-Fj6SbAOTblx}+( zDfo23{J}it;O_Cpw;qNs682Yg3kFSi9F>;L6683tj~q^g&Q)wWeJ%yMO#NPN+g|A5 z(@V!`U+~|7V??UG9r>KTcxOt;zUl4+^=bX(V2P+)T&&e+T3Z;Xj>Sa#o=hd!|w;^9P_8 zis!DDTVjIT4VP-(6-V%zehn*mH}IJzH^USm=pBDNZ{=>p9#!ufTjZ}%NcQcMW1u%Z7v7wXz}7r1)4hvq>Y@LwLK0}UFekEdV$-3dNUeZMl?`X~Iu ze=o{JG54z5l%!{52_56-kALq4u}|j50f+bC!F}H>RJf7Dm9L3O6Hgc?~_QrTp9yjD512c2mGO=@ZPWtbf>&j z5zq4>;H8!Z<4L%$ulg;2$V~mecSmJHwgsQpN~Plo_*YJ{!$Kr!?LuStGTM7M5LuQrjUN7Xmw*IOffG^M&D$%4^ z48G`aTzj)Mo=aj%>Doam z;jT%P%EI$?*VO%OGsnRGW6?7op%?Nko5`I;{zEh%vfOtH-^5{Djle|0EsPA@5Y4_(2hcAYQNaKz1N} ziP|U13}FU&clOWE+I85Imhg}9_AZs=a#l;_up*~%>UF&${ylrYcaJug(a8ykfq$w7 z_}&U<-cuCdwvul=EABuykk+~udG8mMOkN25Yd3~@*S&sIX27k7%S)dgLH^~$)~s!8 zn`wmga)cTac;B)=t>!v(pL1t#M3o?qqWqf0_6Kl6M4O-VMNZ6vEw!vXA%J>WWW()W z4PQc1@uU{?Cyz^K`1sl3_e2@6jgKJ5#jV7s%qFD!#+6mp3_96&O=sC}N95(FzVuI~ zz}Mjmn&7!cC2CC;`+4!6Ov6XiS0@7xx{jX8eFt6U5OXPDJ-KQa)c&dmc%am6Y#yJp zp?z|%F7hz(tZNUsfS3klEa)ky=dczW0^;30UuR+4+uWhvzO zV)~Pmx6#QeSSZf3s{gX9M;o8z3yE;@MT^*vuc$SmAqUONDs%oS{-d8o0 zf_v(Ekrz6W-j9t}gkln#=!kyo_sqBREBL(sKK*mgOp&*~^~|$S7`Szxm5bOga=Mjg z)h`>s&kFq*XmAj|)NdVy6cF?_`y|g@L)gPy^=zG>J?0IX-e>th@7C7VoxX+onD_2@ z!vplMOT3Rhr@q3zL|MLSuBXT^d89Oi0}u6|=_vc9PA8&oMWUC0=deW2i5FQTw^Nv8 zYw;3#y?o9iBlt%<{O@u+ZNa@(-8p_w4RggVH#s;pfG_l{D_yi1M6}a-ZJrS7Z_Tyv zKacUAV(&MfgZ}f=Rq>h_`t{gc!OT8ObEbi;B3dDO$Pn6&o#<^H?lyPi1 z&ZW($e$qGO5CwX_L77IulFkc>{=@o*F1_1bMex3>_oe_wqgwH-MRpV)$kaLjet zzM=^KLXPX|yXOS@si4#YidZ%F1vlOg4Lbl_a$`QM9``+CEb4jZHoVv5Lzk{Xr;Opx zkzUk;FTn5Rw~Gg{yK3*>9oH~#mfyU^{4DlErLH`-WDNQGjDF@_^fO1(xHj=9Ix#=~ zsYVZd{dg7Sp5#0QdA!WnR#gU(e;d^^aS}RT$>6WnQw$QkDMR}b>aWkQ@=_<@c#2T0 z_Acm>3l9Q!%(LM8fufpM@7W4osXDn?7W43eJ*W5HhCgsUKF)Wc0q3FNR6;0tT}#@6 z6+s{CP%JwWdkb~u{DkdbCH6jaQwkRfv1gt2SO^RBfPu*)v^F{Ht5UMwxZM|ZuKrME z0q$X(#@z1D(A~d%zn{X1eDK(@(NnI-p*FweX@8NA@0FPuuN|WzZ@Dk@>KOE)%f+d$ zD>|Tyjd3(P9fDqXV}O0xO(wD3Wue)Rx-mQasoUlvlenpQ?BQV0$gS=#Lyg|>bIz_@ zeYFPjN3!I}lWV{SJ3lDfLnjCuHhO;#`9nj`@2}Zq;iGsquO5dVA3HNxv2+Xe{m$qe zT8sRXO`UvA>U{<|YO(W0F6z+3wPPo)1|XO7r&-~)5b({uBEFObVBEF^Jw?0lr8!LPRIL z`tlr*7Y-hg{1*?Nn@o3D6vzBo<;9QgM=+<*(U*J23O;&TT=~+y*lXg{+I}7XKIL(2 zrA;69?R5_Sss4s}Q$KDVb9~OwQa9TO@Z-xIUBmlt!S`FqdrjvO_9%Y6knwDsN_1WB z>JL{v#iBB7nb5b(zaXai4ApXKfEHK~82BTdWvzLq6Jh2?9#+;qq_N zVl*klH)IR{6N2x{I?o<1i1V8jRqh+-g}JDq0WS}Bd~ZW!n3fH6w}DRifE{QYXI+;0 zK2^oOxZ%(5e&f6y8DUuQ%fqKJ^8dU^ok=3+z1Q=crV`O427CHp_=39m0zZIzvkSx9 zzoNfc35S`4Kf}M{)Wz$wlTH%tHc+KQ&^LC*KU@dD{E=2?nUgnkFyXM-A9?V-S8y^z z{(?tsDBuZk#oUL2yWp*-@U0{(4%Q*>wfFMKi|fEK2Gc1gBhhCvUB&L%qh4IT|Jdvw z_}03_*Bp7vv3GyppJD+D^v$2`EUjJW*Sq#l*2AAXrZa6{Ie>j+K0%U-$VY3%pO1K- z3f}lL;n}G;%vZ=P=aP_vF7a#T)R+eD<-*)GIa8wvUC z>dVR%yWM7E2Iwk&5}jYja~SC?gSQE{02V{x_n-9&;P!NgreF38qrweQjv}RZW`#i zsT#h~zLC3GPmw3l`ne)oMhBmNyZ4Dtdw_qfU+?FY#2i88-g-A#_=jgAchoDv$EryD zl!*S7o#vYMLk>P`Tb+F&1^Uy(HXp}3$j8gGSsH;~?cR5YV~k+$`f2)UI{1yv3bQqC zUs=EpbH1wluRCWSeP{R;{H`+M?&J`iP#^xzF?=aU)W z+b@TUi-b^L4>+Ihx`IBe!+-VcO7!)_nKM81vY|^WwOAa6Kgnq*-j@O0XJv@C{T&|Q z%E|p#E&=aQ)i_f9nlT4)^7RLnw*3^x*84YB$UU1;78{4!yBfChUoz1o%hCzw3o2EQD8W z<=c681`#fQy`}#4H?JAL?O`Y$)4~706Rv=5?YXSJ>q5 zaVKE|@}%^*1)&&x-^mv%7l#<^3*&KncTEHLKAmVp|D$#%9QlR)C|N4myMZ$dy!V~i0la#CrI7zY3;2?}9h;haXk=LB z(m4eU;N|>Z)p04{bI%+rCSNc~hU}Z%tEh8%99HKJ-Nycdoka5+`nl)rOR{-WRAM3( zKf1C7Ik9q=3xcR8tD-JBc1mMD=8p9GsuL_E)#60PM)0JI9HO6j(U;q@Wi9=Y>&m>w zJu!nE9RKj{uQu?dIC-8pZrp@i?KXMQ&#ElMkGE3p#xCdqZo)@mptnCCKiA#*hekXL z9eiC-?+)x;o>IsS|2@Lj{QvKny1Z3K+WRhWXyb*Em(XiNqU{eG!AJeX%*Z+l+~cz0 zyV`Q(H7@ISM2E^l$Pt9mzZZOrJgiRp zLOk@!4SZ(@7JlOUh~8I^tCnGp%Kr5s_3$bBJ|%H{!9AV|zq-UY81t6jBe!qr22XTb zZ4-n)XZCWmy4DgtmZS=2CH~!Tzf)N+!Ix+2iXWBZ=kN9Xl710B=Bdi}6ZfHOh0Ml2 z)kR)1fO__5{4BmVEp^8pufI(4$za2tUAv*LHf`~l3_*ErF`$&f=XF1)7OfB5s2OhG zpA-+g0#5z(2vyI%9!PZLSy-heq^w-Q+n z_>?>51^d|X^Tm>H%bx)5`4u8_cs&=5G>^xBu-yy%X?NXS@;K%MPjZ&nu^{g}QcYV6 zTv(j&yo${O^W!gkzJ*>#zCD}9Ul05xYijb;0CU&>vG?wAGM4fG|2?OjT^8dUN~0v9 zj8lgL&yBE#RH}d4( zy7lRK^Egx6_vk+EgGZm-*19>3o4bFSy$)TsE^D*l#|P)aSxPvKZ^jttQHV88v(Izvd!S=yhs|n8&q3Fn82#a& zRPPVA*fV}Vjo<3E;oSE&x*z{zYReAO_R{y4gQpM5yo0VA{_B6;U37oe=BDe%eM9eE z(zXrF`Hh}4zEP`mzi}VEH~O#Wqv=Xw>Nr1f%YZaDjnS1(+D!)IMj^rZJOb#7YZ9Z%!8a@SV5P)zgm^*M5V z8#*uUoHF!4D;hsK#GIw6e2V6MnRj7L_BopW_(1)(D+bXzPnN^&UY|kb@To9#{xdXw z>O$?{FAeoVk1=O&e&ur-hdS-Pe#hy#|DufdA0OU>)(?DW-A<|aD2B$&1inS=51!T{ENoh*gGB?Pwxv~@BH(Kzv;R5;*W}JpFTtB$ag;VVgpKl z_5#gCIv?2vO`BA;IlV{O`$4~sG>*jE{=4d9gc<+Z)vG^!8GEE;9dXW7_cd1mS~DAG~lUjsG4y zY00wVQ|bP>-Goj*wxw}3yR`qACer)phHIB?ru*9w9Y32fiNP8kj?jV@4Vl-?4;}e zA?-&kdx6G-*6&xaW$|Ll|GQmll|4%LJsmFja_M<@{|)_H)};2@^kD1WFIA`S<|eG3 z{NQf};lsbq>kmFb^Bm>w|LYVzZy#TxJL_=hgt0ZQ`*|GQ#|0+ee{HvyX`awW+6?;X zMtaWt$eH(tzeMkcroXyq$pIRtxv1>4)=%G)t<0-AhMs31H}<=AWqq0l_txWGd^E13 zl{TY!+5j3S_~EJCy1VFm#rE?atw#NH!ju*bUtd7S`OY`~-i^+yIYI55x!bAV3~chl z4}<7?*oj{p*+kDtx_tcAPoL3q3IF<&7s4I&LdRate~-SJCWJc-4>Phs~2N(0hijFBDj2e@f%vYy+wceU19r z&D#IY5F4uh+-%fZ8t1y9$^Or&Uv3=oz{ORy>3Q3|e?HZMd3icr zuL=D+W%Z_hy|G((+uQ?m|M}@J_gu`N@qNwy%brB%C+B}hZ`r$z){$D#{Y;RaA3XQr z-&3Z&O7EL9KcAzmM(a-nOiwSN^T$IsJ^E6Zo|C?^`S|nw&d_`Z>z|*yp6+`-E^XF- zH@(ko)9IJn-Z#>?lhbzvCX~{=1E#eztI+onlYVSGKZox7Yi(J0_#iz8x#!?(&$jMP z^Mt;Ad}J=2|1*1Sd9N1T?^!0_Qq}#NUifZDjeBn>rtc%m-t9VJJ$?UIckt?i^uFQ; zPpcc={lF-k{P1|^A$@6_+29xdYxf3?b8EZpffZ9}{!?B5qfgTKTF3g!i`qA$dEoB5 zZ{PWO^d6<#gmX_dp!<-nJG+K_G>-C{SDPI_s}b7QSbpm1sq}v6bZF$%74*IPb@i(M zP4D07QjgYvU_XDdAG$H(&VS7Lo&6Zuk3c;VO!rKDqq}|D#9vX72EU6wqBT(;CWUG- ze^Dr!jM@=}|2KZ9wa|PP_UW54XkL+j=WSm~&!b1Dt@6FNg`Ow;`snUGgXwys`NU?% zTVkm*KlDqtCG;GxU6VFjbg$F=s3Ur;=vYYa5#GozT4<){*10S0VC$DkTZ7x4eZc=0 zoi|s!QOW%h)x*$@f89^_O*3*{m}8{(E^XKT)?nIDv9!b>FZQY0d*7&&?@bzLn00+Y zr{+t)dg=PXA9wku-rn$l5shA`nZ9eo?|COP26bGtd-Ry)dFz{Bn0~4F_oBPb-F}_@ z&OaZ1N2fQ?SyQ8}oLQx6we*ZiO8$S^K1(aJ$%`dmH=f=8)~0HE=4Cc^xA^ha zC8JAweDiML$s^fW_{Zkel?47+kE$^0FYK^J% z;mz$EHMs5H!WIwJtkS;kBPEqw>njZ!dfTqeBgeETo;vUJC-Wc7t-sha@xjdtdKc`d zcY5l+#%XUJ8q==oA0Gc8Q=Lt3*Gn(BqhZfs-EUsAA<*{y%xgRJSaP`6!@Fk>_}zWm zz+XqbTI$YzXLzmQJ4dH$cTBo?d86-4f$i<{3;y2t+wdXVy;4K_AG#VXZy_0#c#HYp z*4GWon|{gaWUuS&jjUc;c6{h(RyP~I9zT-RPy039e`j@6FJ$#bmQbSe+if>EZUQUe_F)G?CSsM0jn4&0-3Vb&Hr zMO7=Y_V91Z{r9mp(PUSXCt17rrP>F7d{PE*a-?4UB zd&KrttSvV0TYQ|g$Jx#%KYiBe=H154!A3jQj@{SrOnC31=a2j}d|%P8FFySIpX=Op zi&M(64c?!UHXyUIfvjDB8!JChWpb|tkFrF|v;Z|(QY&nj`}vKP|#rlPO|BH?S@?H3f z6y*Ek#Ijv3V*krT;{Sp^UFxDFrGt_oL+Yv`FJlKD+7@!>@>;m7;BJMx5pD?XZn)pT zJp}hO-0$K30ryw9Vx;tQ5zJiq-kD_b{Unu#eD6YX`M!tb@|_i`eBVrR`Tj4-<@+Xz zOupYra{0dLMUu;QJIUqyWn%g6N4_MtImzXFOJeyxmjZ{F0c_8Z+d%?yKcZb~v&>tH zi~Y|we`gvCL%X!Ge>+J)ZiqY%$mFbF(Q6m+INcU{%w_#-Uq1sAYZ?h!jZ>r3RIjYp z(8xNCm&Ob9BLUn0Y{8G1?0@;j`e&x_zUFWmGa+cr^k~CIpJ@mgg3e!A&<3ju22%|| z7p_Tub?A2TTGDAqe2btDSp;3E4Y~Ic_Y(9zdM|8!T+n)+5Om%r1#Q?t{@H@wlSkti zo)h#YFFhxEop>hYe~zFx&!^+o5<%~v?M(1byHH zh5uF11ZslX|xV{78@K*`eW%C z*<6j*J5Qst(eoeEyBb}1sYdVzGzRl3dVaH3LxZ77cZ|FXtlrHgrsUaJimwFX~? zR_DvqYON+MEv}%|MQUlazH77wTYarQa2?h54dmBYs}D8T3gMPoeVCplm^*59!A@Gi z)=g{hccXWWJ+vBI53SDorq&R8Q>(YmB%RqLo2}J3-qPwVb4Wf%tM$$y8}qap>wK*? zFkef9Fv)L$Ruf!6ansnT&_1o+w_huG4pRCK(KCxLN%o~yYdNgdcn@o75D|s_N^9_b zr4@n~wL0Nnt>FJptMSlx3ZdpYt+@rQ7u-{)_4K4x)=Q_g^wQA_6`G5npH3U-N6%9F z>$LvG#;PV0SACs>~*ep;t-&~rtLQ>XPg={a$>P8-SAX(Bl~T`*6l3FYZ@wt+f& zFsRd52kCU4BAv!tq@w}!I(@*S)0l?n42~f>eW;ki(EBf6sZJ9trSIpm0(CPdmblT7eox%DH`9DMc&yrnw?`wLFb2H!}XCNNSbSYD!dUeakTqjkE_7>aw0PHP*hGla(Kw88N@op~bZO{8#> zs0?1wX&tXndL~o6^sGlP=yf)OUI-fWnh=duarDybO}%MumomM^Ka||fdX0(Rv4v_F zG&XvM=BsDWnCcq@@3jVvpT?Yc%?6FPkwNg>WYAdYS!n2Cl20^fJ+Bz_;mHQUw88U~{tE_8_-}&{Hl%4R zX*35*Mw%u>-?|1f)3lB%X@cpRG>wUj!EvNJo}P0~Ow)v4p%<#JrfE#{+%qsOP4A%h72bsu zj>h>|7gHR8G<|Son&5ap&EQx~_E)DFOlv4jYtjtfHFO2CK22jjPI1wdjX+~s%|@fa znr_qt)9HPDWuwMh*{JhYF=_%;j9Q1us4-Wk_1kM0Y0@ilYmr;qCTPdPI_DWR{&_|^ zjvEE@0@7Jv)CU((+;5Z4A|pLqGtvWiqrtI^Y`tgH2HqogxlwCdZq#^}8};556fR&i zcvl$(-x^8_eUD(;V>E>K7&X4VMgvVYsIi5Nx^ReON!eHiO$1ZYQ|i;r4<1B-~uM9=OlI z9SwIf+!=7^!(9gV1GquByWt*y`yJfVaDRjQFWj_NJU=G5_2D*#dmG&LaJ$0o3HLF$ z4!DEhmco4j?l`zp;m(G;5N-hOI=EZmeg^k2-0$K34EHa%LTjFnN^onzZ3wq1+}3dK zf_ooa8{GbIbKn-i9S(OC+(~ey9u)4w-}rmi(YpZJOk21crZJi#AK`9#UyKZ(Z-Urn zJ4?_7B9xzWE48}{a3&p!Lg<==j*a%k}2kH2%fS5Dcs?GcB? zV$*6gy3g|R-hHfj^XE@px>Rq?mtST*v~=mopN9^e`ReZ7_g+70)LY|s?Xq5c{`r^B zUc6X))e}#gnSB5KyZ(tpDtCGBy`SGda3Ieu2}KYjk9Ne()aDR&z~qRetlLj zIH2sq4>uqC@4svBo;GcH&n8U<72JM%{}(!U?(*mP^V*m8?0I-#+qO^ke&?M(_Wkff z+rQ79OaFezkZDT~A1=vi)v9l^+O<2U>-Cwh?by-hz8i0Jy|rb_)0S(lX?n-&ug|Mw zFjQ+fbLN_=Mq@_f8Z~Zj;PuWr`u+EJ?>%#-Nw1r4&VO;$s=YszmCdb@k2rr}yab-He_+4+Q%4J3Z#}&wH#7g$8dsd$!rbOP2ib%Rm3r8GFw? z+h#uW(3iPw+B{l)%$VsD?!EW(AOHT_M6Zd`F1`5TNWaY%8GhGY-ENvYcin@F7ayPB zyZ7%;Em&~LYqbUquf95=^VF&DHG1o<4W9PxyPx~>Pkr`=4M&H4@WG}PM~;+rZPX~+ zY%*DXxO}<(f4~1;^^^Vk3rFtV+w+>t%vw!q)@--s=bu|{wA+uhd*hAyOj+FOwb$PM;>3wNej71j;=xm=T2I`$^PZwR?s(!zVd00GS6-R4 z^5DUo*}Z!0f8gDB!-oqBRxf+(v5UX|@rUvApMJV&x68HSk7u5leE;(0Kbq3huW_$i zcQ7)1__!W7-Q<4qw%dx^Uwdui#}_UKoh_S@%9mzK`%bp7>> zUVrexZ=D~1{7sdK6USDYFkwvCYu0StlbgH5*S-7UG@Z_H{;$6@*H*1s zW3$t_U{Jeu_T`U1{&)UIABF0U9XsXCO`H1NdEIq4-#ll|M_(N~*8a?e3pJb1nDPD% z)vLGJpP#?}-LJm#7$;92-)8#sMYqnH^}$^Y8{Sa+<(H@K`te8e%b$Jrz>-HFy=-gR zboe_*k3OTDH0jkR=FPj1F@C(aew8Y9U7vh%M>KbnzpP{9Cww{h=0h>f9NmIXBp5qPc9@7W|dF=Cj=OOYS+&O&{mS z7t3FqLvX$H{)TNnxIuc4!!~PQ{z%^cH+QWy=-mKqA)2#NzKw(3U|;TUeT2I~xEA_m zm2H7M?pg+d;hOU~d&;;Qf$JH{ISe;~c+CBHK7#f6aoy2?yVj8i57$TEjIhm0-*~Vs z_%U}waJ@7~ihT2I;_ThbT{gUc$wON?hv5p_;=>8sIs4&C;TA1j(pql+%KsPN?mM=oC$3x>u&iA-)B zvvPu0G>upPxmp5OOW z>Q=kmUQ+7J9&FDZIM|+7<}A(;dJhqN7a)Sl&bmzI6$)k&WM5>QZLK0 zXXO{=xQc}#>GZKVZN=P@tGL)*Eck@tbkT63t1#O$f>~yMCdseFRVw*iqewumGrxf8 zn#tdpz($bgD)r>& zurU2NmF5?^+_^c<5zNog$!Z@|Vt3{YDk~|qyM~v#ii?~DcFKUeSX3Cu6<9Ltxn)J! zr8GL&J}kdNfgge#SAmO?Q0&Te6}yVE z#ndf^EZ12|S$7T3c6nGXS+D>^RET!U6P3TqS!^$Gie)9!TPxQqE_RNv7r2V@N(V9< zL79x26LRF~2C+&BBCaLP~L=ix=`?nRi}+JIg6ne^};QR8}DRotF7U zGix8}EGQGR9Fd7jM|fO0PBGC^^cQ4eF^oM{l3p#ZwEPl#EF??wI0&fDixOIZ55i&> zt4MneEB|7b*eqv6MJ4Wnp{_WYA2QZ+ikyY69J{BO>=&1cZF4cCr2~uI!(z=U5a-Pj z8I!G*WaR746{|-}-J&qs%XW%L{db_)pFglK`$3+MFfp)Qt$8s5o%31H0^~?)#0^Zr<%FwHqs)B_~Y?tHWQ3vapRi*JOKOCHhhlL#bL@p>rLN&r zXy{ytqF7(@8Yo<`6HRWMNMwSU^f91Tg$_RhNXKs`^#hBt3&pZp43^XbB9EXmU6FV+ zS!@H>C7a_8UG`Nke@*N1*Ab zf})RC@}UXb0-}%qBy>8H&M_9s{{wycrK1ywvskz{Kd*=mpRBRdp|$s5d#Rhw!J_DK zL7(NM4p)1yYlO#{Uo1583>Mmy2v5=Q{j9+`xvlLb1D)+!wHB(C4s$sN+g<$QAiFS9 zLvb8UqnLu*(=;*b>zV(4<{w!n_y2#zWNhI6JvY+P7q~AR{jeV%AI6rrUKob>dSql?>(3a6j+)v}r!>?*t zUTI1T`u|t)mxkF>-Ho9~C)#MC@6)-QB_o6{DTMDmCigAWYIyTK$E?s4Xo8kb+vjz3 zE|cnF49#;8weShIuuUgPKh=q6RGM;$>TjZ+QaZ`N4AUwAR4RXnzaKE4V1WIG-)6s| zC8Ezv_8Xyjq$$#(9CxAchu)P_MwdMonVpZxKaI7xZ}i#jLJzJpzSrj$Q8|9}q$E6UGx7Z(a4JspGS z=#@`rZSgYkkiJCtoGkeEv+@hj^j?&>qwF_GkB6u?oTSn*WI0Q-2MQC@a`Wj*RG5;M zUzA@eype`lek-lalfx3VAdT|6TSNWoUHZ>Q&oPNpXj5&Y?bF1sL~oh;(~C#REG?AO!Nsg*2Dr|4O`Hx9Q8yV5Blnu3ucJ;r{0 zC)uy}EIn7#^FsPBUCi!F8OZMV4D^FnX~u=n5$YGhYxJLg3auw5glTpgGI*N(MglD5 z;Y;lQ&=NfzzDhV5b44QcKtW-(*r*e^36QGvcvyv{*lX zLVA%&y;UeKn%`ES&YoXt_ml~zGtoT%$RrwDrPxI*Oszs$a8oM^W>W3AoQ3wpBdIWh zjQO^*mhWG}`f-RRPNZM@Op1PK(k?3cGHT1>=cdBBDs<*KPi8&h`AH@@Q>8@o68z3jhH^xtrL7Vr&0h$h&gYFWlCM&_{J@Y^xFe{;K+CA(uxqTSzNccO{1e2z{Y z!aGbr=P}`AHD-A=6a2&k8|gpa7O_u%$EK)KGHseAViaVQfcgE7JWhScYDn4n(Ct6_0?f_Q*|-zE2?w5JIH{4KC^p_ z{WlACBLsn2VoE2AztdwDU#=lqe5D2~POCv>c8qe#ExuVJc5)XkR;OZkpT1I*PU^y5 z6Z*9RouPgukw($Ok(%_K~zCbn(i zYz-m9DFk$4i=Rs;#bUa3l&*x18tBr6j_DLBJCvn~&SB$VA(HMcaPIj@dHp4Sa z6unouMEILh5?sQr_xuYoq{HLiHK}-yu>uIsWTMb$Cd$bXrq?2vCVKss&b=0qS9lWh ziu?tyb>tN|EtcOoR(|{fFIX$?;%{#)`PJVSwQ%`2xt7#ZX4ax^_+G6N;j3E8OTf!D z71w~?+B(5YA9)JlN5m^YS8*X#R!J%Kf=@^kWP=QRy(uYlb0uu8UCb{vj?|Ve1dfuD zKc9s!rJul^^y76gq_1eTbZy9=Z%nRJVt>X}>=vfgA$eyef0}91XTDl?_5FSwQM#6- zp;jb_bYm*r=_f=BCTiV91tWw*b%qt^)5XEpb;z*WnVn51PhnpjcDo>inOT}r*1+%e zm)CI>3Ln=IZy)y5!F@QLGV9>3VGOM<7WQgb3f!#tU#6o^I;*A2wb{jzv)DzG1By@G z#@ERgX4EMZCe-y%G^^{f3#D~+%ZeC%QdcmDkJXCAleqAvMm!6-?ZV=k>}eakXQR;A z$Mq$4;Y4lz@wr{tR+louZu*N|c~s(bJy7V*DWhj=Lt6PN8+kF|Tzho^)p=mezD+km4X<8DA7svNHDtrEzL`_B-}2+{7<`Ks9bmHm}$fyzFk zl_Jb^cr#^4`3veI27mO|EAt7bg(yZU6{9abLaCxO8-10@o+&U#WAlV{UX8;M($MgU zaGFWnJT|Y!YV}nQ)ec+}su$4)H340K{c7d%U{zlYDuaxWkx9e4pw_SBa#J|d|6oKD z(%2%M9ezzjV+mCcY3V~#`p(o5)H$FfIw76ItB>EQYM0r z_|n5^p_=~3{S9m$pEjVOy43`&zB-Y#$jt$RKO>SBtR1(CM2x+~PQERZ0zoA!8c@Z~XEbkWj--|TF{PD)Ds6|<63sZ{;7^2pr|AaMut<@y8x2QM!Crq}jaXtW>$?T(QqbA_fMhpQ%K;x_C zqvJwEX+NY1npk7?Y8^JS&0E=bbFiss!{5ql@TCWIK`Kl~p zOGszozs%njjFzXv>eG1B!iu5`7`(EYl$r8TRfa12HJ+d@r1R=1{Z^lzez^)OVULH( zTtnk=8gn;Xm%D)~k`7gb#cH8Cj@e~(Lv1;riQK||gN-OjVge+WRGAsC#^j?09&HW| zAM17jI=cGk8(*`PhJBG`v(;qwYAI=cI*K}cjeM0u8X7?73C0x)Yqn&_OV+&92k8J{ zvIex)pw3Kn9c0~zMQWh#Lu0x^dQbRnzh=-_D%o#qHEj2iv8zDaD-CF_9y$~G*|Q|t z=7P;Pa9#_xd`?QVeFpY|e*jyLaQS7h4_u!nonZDu$GN;C*mQ#PQ{XVI$;h^GU@JWm zVcTl3<8RK#!2xj1>$v@hmhN+CdjM?FarS~k{W-q{HV@#uUXnXF?*rQcoX-%`^znjY zE$7M&IeWk@z+Uh}U>|re*bklt4uDsJgWwR@@)3{k0@w?#dp(a|SjXj^!B((`n3cCQ zzH<~<8s|A3ERFYED9Mj-dut{6NzOaLHkx~#ZC^_IKXN_^4*taX0yuJpv(e1c6QH$3 z*;b#Jm1p=D&Kd0*&H)F( z(}`Jm3K6cq5G;*{T?>}R#qI`6<72-82WYK8ww(ccGdce!=~v}k`34@JqZ;RWU~6^G zH-o)3ICmgsMH@ViL7A(+QA#D2@%;pSXTiqt8ADTOaZTEmJ zU=P>|ehX{^?*Kc%|A1*e64BmGH=};QJ;6S3DcBF54Gw@efrH=(I0UZUl-m!3dw>JO zc>F`brs15IN=$R1u@k2`@jycA3PBp00+TA@ELFjd`UgYv(u-D7kC&|Gp!G7=oZ~*)}I0!b;+953d$Y^e_C0H24`5~|u>;hZI za`|Ymh2}P9+dGmRybEjtp9MR>)#+}W#qR;P0(-%I!9H*)I1GMO(x;eBLg$LKYji<*4z76aLcLN8&Pl0KU9x?u6a0vV=n4ai~@^`=y@J6sOfy?)U zP2f{tGx#5{1zd|J6=UUR1)IS(a4WC_+zadhXM;@>dHm0Tt>9O{5%3DIFp2B$0{g+I zz#;H|U@xtm$F`~#p5DM@&W*voS2^Da_JiGEvyaQ?f^A@$Lrlzn5S-D9Gn)gOZFhow zQ#iZ9LGWxzPLFKab_DDPn`qQDD__SnF7E;MfuED))46;(*aQ9n>;+%jhTHRj`+)u6 zG2j6B18@+0790X!OOv><^a-!?_OnGFPObTW!ojN3EcV)ZqE$P0$ac{ z!B+4_Z~*)z*gK2ckAQ8nIoD{X*uVXptziE=&JJ(@{46*KUI-3>cY?#<7;T3-9psE(He{a$Zj?-Y@Lqyc2TMLCy!kp2M6^L*M#6=Zlbs>6I1R zuDzS5*Gq#q*k%ETz}>)BTBC<;{lT{DI2VBhT1$j&&w{;;I8OpwZs5Fvn5Ey-mGdWH z??asTLO){Td<^n%4(Icb`|>!OI&piJ0?v(zS$p=oId=d%Xw4J0JqET-;#>eWzruM8 z*fWLmR7t*s^L%h*3+Gi5@8!H1Z2OAyVQ?7yD>2JIdriwWZD*AKUz}@$*=Py2-Ac^# zgJ}klAAsCnopTmAMDy*j?HNh`I?hwUwp%zalH|=euK|Z>?Ju@%C1&Lpxs~(RV3URO zC9oN6wsL(7*b26Sv%og+Xs`qP4%h?U3ig730QN7Vvzq75ov{0saQ;0bc@p!413e_2_o z(4OZnBFSkDP`1^%2l>B?^Ic#Q_-U{i{4&@A4uGxTgJ2u@AFu;_Q#T%;2iz0v1-rpM z@K~_)J>P7wEtjWvH8?bi^ByVuJkDXTXFlg&!R7^=E8WY}69HcfcD%#oEx^8ooO^=J zi#ZPfd*9`p1CG%6B(^;Z_ATT57FeM9DcSZB*a|)l_JZ~I@$`kkZNS#$Jp5x|8+bU_ z0bUOFfcJpC;Ge)gu>O7?pC5b^H~_v690X^BL*S9%FxU@{fLDVBS`&|Ld%-5~X|Nfr z?atF<0bd8Uf-PVh_-?QR{0P_sE(H6*WfHFZd_04_vti z>KEJ;902zOTfgD)Wr1yAw$>LrUOK>&!5;7;uot`m>;oSL`@v_x0kG*oZa)aV0~`WB z1s1;L>3bgR1J4Hg!RsYH%Jshi)7-6M`CkGD!RDSk{t);ca2Pxg909)yrpaAJduzZJ z@Ii18{0BG$uK5t+`<{ny3l4)H14qEa!NPH_KMQOEzYn&7w}ZXlAHboLJiNXakKg4+J~F&x1YS*3i{}HXh!O@5XzB1K=#M^><#LCB&@1m}v|q z+k9Xvcs1AoJ_PoHFM|Ex>w2R+z*cYwoC^+vCxav4RbT<%xBo~i9{<3V`*4=Ne{Tzx zzJnhCmcEA{4VJ!(Uj}CL9kcBdFdK==wh-7u^B=SA2Vzz}mdc#}f;>p`BC{>CFPB@Z za=saCqcv^W)*0+Daqc7WwVX$R1K=6NEWe@axqLC?HZ$jqkXvu$ychB?_!Q*6+qnE+ z$OT#>mTk1iAa7sybH0t3K8_9dHCfi*(e~r^gY;DZ+Zuy~Ih=bEi^nVQ0LZO#xqLL(23`tw zfcJtu;Im*axW*Gaejm6U*bjaj8~_go2f;JJA@C>QF!%&G0?z1<`t?225j3#PTx^;PxHh)?g2~2iP``>*q@P^Er4|`wgK2obnBIHACh*f>Gk7T20)7>21uq5Lz&pSW@NuvQd>QNo-}n^jAACR9 z4;}~(fX9P_;HBUYcrQ2%{swG$o9Fi|*a}X28ubM>gCk%o*!vC-{{+|v_7IEbuZ3Jb z5_0Pz&Xd3v`WlCAbHU+doVSC0?{WT$nAtP0;rtWW@*(Fxp>JBpIn&P5FMQ1TPOu3) z5Nrm&0k(j*gRS5{z&3Cr2g(QhFxUh3g1z9CU?2Ed(86b7QdS2hJU!Z^OJjkAWRv`np3*zXv=L>;=yR`@kO&v-qTWfW8Gw^8uyh zpnPf>sZa!=CRmy$r~@%8FE6cW&9=c{>$RNcfc@8T-T)3ZL2>2-Ug&VkB$VK@#=G+u)0zUvYgFRpi*ar^W#KW%v zhnsNz8XN%|^AO+7Tz&)C1nvwrg9m^u;Ag;A@M~ZjcrDlgJ^=QBPlCPR|G++Qoq;@k zesC)=t#cvPM|ZFnJW!H1=kn2#9J~^2xs}V0fF0n>d>)^rC70g`c7XH19`Ng6FL(>s z2fhIIgBuLu_9NhXzyS-7&kYWO-vWogyTM`bMQ{Y%WH9Qp6}Q(PYyyu4o58EV7VvSf z4_vE&+oQEa#PaR}cF>w4Y%7$w9p^W}L0V&kZJ$cv!GD9<8YFCMQHb&YKM58(aQSqw z3A_Vr2A>C8z)g#|JuCPLunjx}>;O*!d%%mqUhq1w5Bvq#4?YXF-NnBoLGTK22)qXz27d>RfPVuET~K~QczR9XCSWtTJ2(J#fxTUM_=#X!cg`!p5%70l z#{*ohE9UW;ALM*1IMS1IU$Cba=iy*4c&ZfsVJ=?{c7VT-!uRI#b5eM4S_$Is!{trE zwEm9RKkflr!C7D%cr4ffUIO-jLtrmB0``Nemh$+6;AY?uxH~uurmv#J^Q#T>@A-(? z`A(XTZ#Gz(mv5yc$NYR-!O}c^^o0*U-#^OpdjTxX-={C*a%mpFdf))&^J@W?=Jo3i z_FZTr>xZHKz&C-z;D^A%i#)x9z!vaium`*X><51V4uF3H2f>Yp zqddIa{#{@b_%W~2Y>KZ@(8Kg0E<`5|kArFkN60Y_$VeJe3* zUx9ZyKOyll&O^bz0OuKCKX`+r4?YPFg43Sm_Cw%?62H&w-3bnS$aw%b2!27*2QLDL z!P~(R@M*BHmfOpGj>m5T-wrl|9|rruZb|+T4?jtggO`B=;H_ZmI<9{l90p$od)9Ng z`FWlmFZdp?4_pBDgC~Lm;053ycs)1-{sJ5Z{{Xgb;PIcA^uZY~@b)6jAKC^i%_C|9 zOY?~qgQfXIr%Ce7-2Ml|tUZOnhrki=dFY$AaQ&Jua(x^4X0Qj`0qg_!0!P4huw^T^ z_X5}fehusaF9!R-YlvC@iq3-ymgYk}50>Udt?A|Z(!8j*fu;FTA0!s@zn!ON09e?? zc`%sPl@r)D7VH7P2^PNP@?~J(_nbchJC1YSBgw%>!9nn^VABb%pD_~c58NCa{DI56 zfkWUda2Wh7I0Bvy7Ebc;%fTk_POupq23x>?gRS7&qtG6}7O(@{1MC62ME26u96bK1 zko&;%!2$4U=m)`J$V1?>kULIsd)L0i)8hfR07t-gfxR@}1lxK^{3GZ7V8>6KbHSD~ zoS%{O!Q;R_@CKdl4uQpnAJas34f z{zB4+JS@ro=K7gqd31)I@E#9;2y9u-`75vkd<^UZ{{RkxE05#p^RD9IZv^|n zEx{phcZr*2i0OY?;^v(5z(Nbo9f0J_7lT#7zGJxGPv%&%psUV||A~#4LU@<}-f|a%q0{<&fJT-w1g>@L9;c z;Qt_(=3%!?;^w-{Uoc>w$_I0XI=$>15_x!~F0m0&-33;1pDL2v-9rJ}7y*9$=h z`%e%WfCZZKiEZsA#`nwp!QuD0oGy>W@S)Y57lXZ!?*s=S{~2tC+(dD+_ydr)2L};f zHrT(4+kXXYT|ocPwqBC2;QSld^A=|_1!MNj?{a<|Y@Nk2V{N6w4DVLH#T?Gtc>?#tNr1=vB)J=pe> z#ME!uX4G?gp;4U8VAC|tZNa|RIkRE*EPe;wm$NM&Y`%}DcZ{Te7iTu?o#|Wd& zC9tD}^R-59FEosE8?fgE&NguH8O{Y@>vNnZNb)?+?6C|>pU=hl6L9DT&c~$i*K$5D z@%5Z*(6s^!AGw)xTd?gHG5f-UVC$cp2ZBQp&ZEJm-#O0*d(U&GnYTpymVY?!2m5#O z_)Vu43`~Z|7{5xDDrfz`o9$izM#K zc{t=Mu2Z&Uv=PS)8{?{3Pd-65r4H64=q3bIqze zJ+>a4Ent5?&Ni^;JtMmB$dwKZAVDmoC-N3ekob$lJCOrI9u!)^mY1<(2jhs(|BLN=% z5;#zW%dfA&;}?vaJ4;-NvlHy^&G~t-^-<1q!66IhAlTNG^9iuyAQxoSRGh z0Owv{Pe;x}z>fPk&j4H6a^4K~wC(r?D|ds&jV;M}MdkKfvqb9=B4Yy`b#=x3 zMbp<DR>~~ zX#4aic({VS3LdZEDGHvY;Q0z(tl(7&Ua#OSoTK>RzQqWizmw6puhv9yn;eFE(hX=k5U zv(Kt0)BY;$KHAx5)l+GoM*DQyU!(nX+TWmk2JLUsK9lxYw9lsfE!yYMK9_bs?el1# zPx}Je-=_T?+85Hki1x*_ze_v2XI)DBGTPsxeL3wbXb;f7lJ-@!zfb#W+Skzj0qq~s zPLrDpAJM*!_Vu)Hp#5XoH`4wI?Lpc%(Y~2>_WAc#+PBfZo%S8H@1%Vf?Yn9Jl=eNe z@1^}S+CQf~L_52G-cS1%v>%}TAnk`}|C08@w6o8|*{9)O)BX+ZFVp@l?N`hB|J`yn z3w*5_m1%43G;OVHO5FJ6Cltc?iHOCy)Kh9mvl~}LNt|*yr6SFcT#mea8(4oMr5&zQ z0b6lXJf}7(pZ=L?V%lLRTh>CFHamWm3~9ZNE7Fclsa~;Q(yAR-q!OWQ<8AWa-LfKilb4lq6G9tX+~!P0@Ez z5^+g^ifoCMa*Sd9m2$MOI7>NNn2fzVExsyDIa+LD^Q0>AGWk^bvLG^VJ74D|iI6W$ zl0+!36p%!g*#6~lVsQakSaGU;1+(Q`*y14S-u8sFF&hX&OMKC4HAw=h$1bhBq!NhM zm`NTR6DEs|$r59ub)Kk;$FE8wiS7Q0FGFA)y{iiKt>rglX(*{Wsorp6OW zD}E)ebHh}x*tR`xQJo5AfJKz743j4f>$C7hcvNCi&uFSVk*vJrr%Y*7m{@H5crLCe zB1>w_myT>DE_ubsMAAAy>H(#-M#?uJ#t~hMD77_dVIsMfxDZORQ+`QQsytW6BuUTn z3Kew=N!Jo$2Q*rZh!!zQNNssxXi=7mhepPOjP%FRerv%EY+6_X}kTGS~q<&Y$)Dw$NhlH>~F0#nIy zm7tg;Qwe%W^Ax?`Q>l-rEJ?oN5Nt?Oh39aTt{1gU4p zB91Mfl=u)SiA;7jk7*=%%9Kn&ev~UmC;Ch$nH~2C6LtK?h#`)1T z#^jz@ZA|8cRlwywv=BHgJr?gHE<+~w64wxudq}H^MVBB`6S76g#6`=J3HefHaw(Q3 zlX? zO4*)#vOq3dD$kvp;~XK_2bEB(98^|PDn1Y{rUhSF3f;wA#LU{Iwa4wl^69x1t!$h< zn6D%TBwJ#{wC)^Ja%Zs>>E%9@xBQ|!ds%62d$~6j*=FW) zTm{saX-zg-FrA+3QI^Rw*I7!*cMZ>Wc}i))R?&~G4^FG$Q951DVl1tls8C$&9AT#g zr}Nl@I?&~=&}z7G zo~-RDRugBs@(S*Ot; z2~903p(WE@L)o&%1#UOhO4Oe>LV5OC1o2H%R8}-j(NDh4JvXVgz$B&LZoBwu(aDx6ZPmJc0ed7YUJoXd z7tsTk)C!)mtdt7Ql+r?4`qi1|5_RY-F+5p1q$fe@xrn~CODSg8wobY

v(OUi2Mf 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 GzkdMX!?Y6s literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/linux-arm64/sodium-native.bare b/node_modules/sodium-native/prebuilds/linux-arm64/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..972ede4fcdf1a8ccdcd8311d206942fd82cfd575 GIT binary patch literal 604912 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

T38a4QN68y_z${$Hu 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 i^UzgYPQvLCauh}X=P<< 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�Pe>+fFLS|MSB%D$?N_0@49qtgpl_STzUS6Qj>o#oQRB!1_#%&_=EmiL zn>gGv%RMmHzVkM*J&&9xttI#@>i)I3rsBK3~Yfj`4F1&c~=Asey z4126tx&WUc`d+K(AnrrVc+t)TOXN#@qJwq7+iDK1HBg8C-&3&HDi{2ilVg>?4(_oj z_xy6bd%&fSM(h3S;1_$^-_N`Qo~&lYJ+cvfsKCJJ6&HmJp3m-J1HRl|_`P7wW9)&r zVji83&oR@>&s|i&BK;3miwyx6I&8G6-h3T6WHkT62h`2l@46p%d_i7Nx5;$re&F40 z$LKdvpSw5l2q=N)YKF|Ne33#Sc|s5B8|{#v*p$2E2Xbzr6qo5+{1j47%V1eRNB!<6 z^?mRfooqe3C?MDsb-8t*p#|q>?gm>Y7i<8A^|OV)&!9g~d^f#xlts)Xd1W6VFSK}Z zZ4e`jMnt68h}Z)9?#`|R{!gh7`08+&@HR-WSSV}R%Svm@y1;hG8j;G5UZ3(!U6({J z{BxZUcEy#`pTZc#wa&=N6@23InkywT&>vc#D-n`QyPA8(-3`@U2Zs63O-K5?>~h# zm@5i&2wZt{l1hR?FGyzuBTw@1R%_-S1_^ofew}tH_GpDCXuXqTl6`r(EH&u0{ag>W zE76go5ARXDXp6lHb9d>{kKrdDPX5c9htJ=&xv6^@oy;$d_d4XjBB>oA!z)v}_vU+HU*YhN$tU2UQe;qRM4Mle&`UH_xE^1FSUHWH?}(qb@vOg9KM45?%Bj@NfvarbY(s(yMg(ZRjAzn@>p4y{AoP_gA}4h0^5@#B-w9b@pQIeC**59|f;p3@K5jQI(Zb;D{m zkf&8zzHo6r&b8att7~yTmLD`bkcwr~Fl-uNQW+rt|A z&9gQo?Qg57bptQ#L0@-yvdR@c*P-Zx3t>!Bqo8N7^96L34W^9-VSXop7n&bnl=5_r>r(x|u^ILtD1}j)C8|cib?*M-YCtj;q7t-yOs%hDCp#5`-g{k{P<>|IP7oOqCrT%Ca6jp`88 zAMc+wk&B?;J@_N_|9;FT!}{+Y1!HgISQh0)CH5CC^``wE#~zVFk7YLg-~ntQmTl)psPzNTrXIGSmW3Q~~8d=MH8rkydS^h;M_?W||YNMKf59Z6n_ili1aqhEP znt1Wio+9{pO@@P0@G-u`H4RLxLu=f74mD} zhjx6GAmnC;lu{|~|Ep!)E4P$W$e~O}Q_T?uNiHt?tIiF5ck5nr6i#A0Dek=&{;+R= zM(ZE&4fV(`rw095i6>-f6;ERO+6;s2Y37?a~q8Wl5 zN9Mr;DbTs@m`t5XhAvaRm)E`rdid1harzhhI%teYx3(gm^XOasc46$dJd^h8`w8gK z<{cm6Q-Bi}H>w?}!d&C0KABqhytYeJTlVKN$kjLYA`vl!q�DwYwYph#qV<&Ij&% z$!m6cd?j+ChyAE3x$yHObo)4^(a+D2+jkF8iBRVFnw4G1v)hvKlb#e(reP>ih}=xu zyMGoN4d6eWUUXWn5__gnD03Fj3nj8w$}TcS?uJ`A=du%cO`p2WMtAU;26uyGVdx!y zyl!W2!X8zh8)_S`QAp<9`g`;m=oF9cDTK*m?(zKe4MRM?Cc7ayKj>AR%^YSyfeccZ zQvYT<{HApe=a>b$*gJJP?G-^zmHW~uVNqoo8QvJ@bb}rJ=ecm_wgyIbmzP{?S{;_WI|Ghg(pVv3x^V%r2 zJq7>DN^+c!gpTWxI(J8WJO2EEkq-iP$ODL3&or38-;xKSykPVysD<@I!8zYU`o>$|!Y&y2-S~K3W)%fl_ZM}=Uma^a4VDS0j7yjlO+OUVroYl(% z{Y`z{a{ImB$a`)5^{5}dKyR32gZv%vMaLsrTWs-M5|U$X05`mrR}kEU`umV#OoH|@ ziJi!pnyESFi*FGZN+FXlgn48t2WW)1B0)L>&(}jk=eOM~6Z?3+g{c@%;;-DZo-AovoMPZgOWO!D^hpP!X$uqQ44A9L^ljbw8@lFnj7 zPUFPuYI*#7$Nb;cZ7F7uqmupql=bm_6fP@HP=MPCzws@*2i-tM^IBxtFB+LR7xdR* z4D+sg{U=R%P>A>(G79oW2oNh&+noYpVSZ z;Dm@4f0^@Km)GjZ8B`xKZY zH)zQO*I(2D3+ajb(3Kl&qeuSVE1J)z+syeKzTVw6Z*ze!b6QysmpjwQ%LT!-OSo4n zqwUtGWJ4beXpI_J2j1r!w9}-Rkfw2=Jyku(3mr`B!^SH@F^)-aLO=HJ@N54HJ|AGF zcc#MxdF$I9Uil)xt!6f^;={=4mY!C_d?Le)v+qwdImQ&|8irdhHs*9_EJ~ zYlMzr-k{-KhA;GPEiIj?+o+E@Z;#YIM*q67qV7}5E9^^L&;N+~8S+b>$+ee&hx$&n z75`FY5V1kg=tbZ;)aY4>0$b#E@)PZ?UP7`=Lf5v`Rf|c)+HF_o2&4X1T)Xt=3EopodE*)AKR?~%uZg2ykIm*yn^_~DF8#Q( z0e;|}-mZs1cyDP5lAOah7po324==^Jv>Vk+{DvH&V9%H65G_1!wb;uxoH!5s>OGej z(6i!3LcblNqb{}Q8usD&9Fr=U2d-lKI<)fua8hKl7w;bUWu1pTNB-iz=`rhicJQ*u z`DH5{H5`EFZ5oCLccBg}82{48uU(IByQ>ep=UCCBwKfg;n}60Tvfc*rr_vR*{|8?+PK4JpBMPbh)nQ=eprJ9W*uCWx7-o9e|k}>dl z<+h*On+VxwR$WhPMb5)FCNJU==DO@(QABfkKX5%R)^ENR=b`pQd>D9LQ|i18K_6?AFFqA>8+GRFXZwLt?0x8>IL~&BCsZK_9w!C*^fX8+5TT&PHcT=!G}>IhNdF5&K`A-9pYmP?`)-ELcxva;NbMP4 zla0LSds{Bc$KmsQ6kS&!1pc;7B{stVI!OnGV`Xa%ax%T&(sV=dJt=yd!&FXUUiiwE z5t(n;3mg@{z>B^S)f!iAvjDyMW9y~YnA5oF`#U2Lb4WTJ+FtHg39&w9H-CBn{2_nG znztK}>+n?gYa-4hx_brrBiRWN`|RDDR*YWRDp2U>e^l(8>v_|x0pIBy3>m^K0%;nNrfeA=waB9U`G zYxz#nh*%<%BkcfuL7iN|AHcnt`IlP1qQBXQgd1P#z`x_%xx#lRgCsa?pvi=yZ|sb# zSp&bkPP4t(*#|n9NchZ;9QfYLxLBco!J{_h@rAl!?nBN)==L-CR#GMVtC08FdvWB& zb>JBNspR94=rcFn#LJGMUR*4HV)_q!YfZvy&YY##yKnaAjvxj4=Fe7Yb0_-su6+~L z@Fx#zPaP}m$38OOU@3Xzqc!8sM!ZV_Z~PhGaUvG;73-FAOUgo*_%(fEOda=fes;Gr z{F05O_iC-+>$iF*6|aGRseXXFD;m7$;qfzuk>`=~7pHCuM}CgeqVRsgKJYe)J-&SK zWwyPm_@v^4+|iYdR}Vt>+7?q4&zl0D?zfPkfr}@g7nX#2uI?h_8$(g1S_S!NhgTBTs7niW;&%+uk7b_k7oo!+Jm>f!r)4Ab zleSRl(^%=m{hH(LcYRq zK@t}$hjJF731*>hs=#g3AKYv4ym zCs^(=@G%E6Ob6BoAx}6SYWvBDMzm~hbq#|r=D0ll6J!rcV4k_k!}ReuJL} zUp%X^=YL;BQeMS^PSjVqmSm#8n*_OSegxmhY~(@4GvrA$e=f^hr;X3Q-RJ1XJ;1-V zulKEx!W=>A-fH*t@DEQ#?xn9l}8Q?c|%S>0ff2D#SW_?xqUw6(t^w!`j_+4qlgNY#qq1F7( zGI#=BR$ygpjQ(D%r8Kv>4LWaO`_pOQ+b;+16bPffTDY9-yo^4qEpYWT5Bhq-^r;`Z znb4&bnye1MpX4%-=uL<2!xO4?>>eL*<;1?r7l3zYDx4|)jhKTt{`x)l9{3WE)Y;TG z!5^5*iFhgi9PgS*`+ra4`Kj;aT+p4S#%1@+7Ep+jjFV~-eqI(MP$|O+IvBsK!M zi6g?PQ_xc?mcIQKcn$g0r1)^jarC)ow9v!tz~RB+UVPB)-7}Iq+V4XLdVE^#kvrys zLf-xGfZkZSF8ryGB=|?$zw7zNRI);aXK>DgNks0yR_ptY+*?m|cEK#>ff9v<_rgDW zHZR@ok9yd>K8$_GGUTZ)u5hLySJ)8Xc`tqg@}!K|dEqPgzLPIDu8vo*FO1Lq?KO4W zkD3wjCpP$=3(dLB!&{K&-monoiXd0ABx<9yCicMCjEtSAK|OOi@lO+Y@R#4_#bH9w zgLXZ)I)u6X=PP6-@AAPH>;CvN0eZyydX3B%=dh=-=1DHI*d7t7deix$QAt9=;wGs z5xk>M%Gd<@y_VTkbsS659b)-cbqqSgb&8%i`dD#F=f|V<=zp}X_=CT&A0s zhtuYavDr*;|4$J~=y`|v20 zr2I$R`@pw3?*IR3n{G8RMObHLodq>Pk@Zr9*^yrzTWTqy01U) z`?|0Dy06@~mOYOGTyO$hw zH0x@QKP;aTEu)n)jof2V7`6*x6Y5(1&xO4Co68boc`{dGbjH2Ni+A~ z@4Dqr@}8+hc?C0W^fC_ZxZ%ssnXkS5o{P^rmHVh)k8fH&pK;IShiuKA$a;-Mb2{&- zKa7c-%%2t?%yF~z&?ddbBpSI=Ma6Yov)oOs6dzmGS3eexk^6csbS`qr^Ge}6mO^E)ReJVop&*z`N{hJEb5pMfw^@LBkkN@SDH(H)t&2xPG&wcgW z7tFKn@%K58{mT6KJy*ZB$NNUZQ#o&*I)U-ieYY*SVcCJqlWw;CdcX|k89VnqbUo`s zR(yB!;LlrFzwqLoUtZ(ly-)j&Kl2jSb&e~!zu+>iCmwxt>9~1Lj>idkGxz;F?`wSR z{!c%+ih0Ss>i@kD_f_^>IQO#yxDWV`6)QK)-J9n%9?&rBwWG$fZsyll%C4dRKCJV} zo(#r6w|(?sBjeLD*QqP7Jc0FCS((qCv?sq;dfv9A_z->vT=ldyo%@t02Bv(v3+Yc= z`pjV$G4A>G_JhwmXm_LG?QfTCns+AS&kG;A=74g3CwS>@PhXhKdgm`+F-~V(_|$#t zSMPi+zaRhX=3nX`VtxAxBb;`ek9uRHHc<^__j>^FP4|JGnSvqpXowDHI59@>|A&{zC*Fa1Kh zpK9&A<73uuo$lMRshI2Wz`cjfTJizEzx=EFQq$3l8-71;pFFP5j@*B0eGm6t#=UiI z`A^I^U-cF5%h|*C<72f(!_@sgEbtd`KW4A}pQycq^;;LM-evGAp3`^cKc*hZd2wCi zwcUrae)P($`AIu}&2wLt4Zg5o3(r69-rM%frM%}UXT!|kEu`H%@zgbC=&}$Z!34^VAa= zhpzmgdh12B>mL{2b}QH0cNcxN_7K+d?Rrdi(_fg6{ZHrTH|?>I`x}3M=@q%(cIo4H z*r(0l`FIB(={amG>uoML_Om;eUq&rUAkJhuIR-21&~B69P|XEN5QAopj@I#&fto_05lGPvLs+H)qq^H*y`@dG_W^|F`_! z&J)wNT>A_6BM!bQ*tU)P z3hT0WdB}YQ_aA?pbpBTyFH7$q%x-y=-*Id;?kmsxIdR!fv)3{HzcP1G>&>hO-Mh4M zZA%N~Us+(j=4`HeX8qA{5%b;W`OZ6R58^fZ(<9DUyc@rpyVLu(Q-4Y|ytMT{#!t`X zIY$?Ly!C75+wZtK<;SwJ6vJ)1@6%t;bzIxu=49G$=Q*JzM_&5vbmo~$zI(oUG53eu z_dKzxn{}E`T+^4_#P7+Ty?BpXna|!lzVwi1_vSgchisnRz`BmZlXp6J+@Dz|_|n%G zO?sE#E9NdcdsmLrI~%S0-oJu={`l!X+c~e6wa*6k2D#7h&%w$Z&-<){EB^B?*WSl*c3|@F-|=_qZv8VB zt!AC8?|_d#;<$YM%9DS6ZcpahPW(}kQ zZ#~-0_2>KFpYZEWtnZug`vMo|r+L5s`=Afr;yqH&6n@vv{6Wo2+ZvbL!~JH{M~@`$ z%KN9<(*LrG^T%oXpS`%3dD6SrY`&@VJDzv&>P?Tn%5~3c&Kc*u$Nk(RkNf`6=f|_| zq%W`SPAAVDNMHT;UHH9(>l@4Ra<2Q$Yaie6Df1vFe0txFM-=j$(B{nxFXH@fI(_X^ zX0G>g{&vvBD}FK>{`Jo8C+>F@zmL3TWx<`V^83F@fAxOK{faNE4&QI(i{lMny|nrG zE6-w`*som4GyL9tpUJyzCH!|NSEW zabXm~?}DG@zwz>)fg>{fH`h#|4_EtqwEs0n7QbtXmYU`tPSUVzRM(7Jl0)fe#{WP5 zBU*T##Rcv+cjCDs!DVkh$$WI(xaS&fS<8IF4`;vE`B%mp2j4Yg{6WlXoc6ta74vs9 z4>)pd%KbbS_4-quIrcK{A3Si$<&S4EUwzRtN6ULlryP3Y$xT~1Pd@X&gew+P@7KP* zbq?1_OUrM5WIXp-Y^#5ovgFznL)yE(pD*Se^2a{$UY)#0{@_9PAM!5wEl2HhfxJ(C z{i3g)l6T5atvv2vd9VCmUz`1#yj%YIX*cg7@0VYC*qsH9_M@--=(qM49{cAD-~4&a zpJr{@ZOggMi;lnd)4yasxpdX|4M~4qy!-379&TBClj&^d`LAE~$Fu*cePUeCL(VM^ zz4_)P5BYDK^ZJi(Km6vdoy$y?E3DrfvZ~H`O3%tR$3N<~U3=yk$1T0=?ZaEv9hlPg z&MoJ@@$=5TZ_jCb;?px0yf^ORgAOv^I^m@QbEi!?Gb>cT3e>r>HQVg$KUiYqLFX%A9q|stu>leb4jfpRYKy;)g}|IImdnShcx&U0qu8JFZ{1zuxd& zWpVR=R&0Cyr|K);uKhm-%>T9i_j@|~b7_MQF8p!2w8LS?p4KmI;rr(u3#C1BUnu-p z+GKK9>Wk7Y56zwYjI>S0!pr_4?NgAPvO?PE^((4Qly-7G=RaNAYLj>Sr_x?m+;QVi z(q_-zzt^$SZZmg(XMbrs_W_rDB<=U{DO(xcKVn@8?Kt96NK7S>mHSWlNF7NK#ILPvWHUfx#|`m7Ld0#!0+n zocZHt5;N&5FFae~W=7VP=Sb|VUjOP55uz&yYBJ@VmeLTVkoD@S%+o zPYcd__brL3_wSs&S>o#I%?qxR*jlmrxz8lNg3tYUzQkDBVUtdfIJ@e}fn^eF{j6KJ+FWJIf=c4&$?=}#Ghy00pEUj+=1_nU(-JAoz=Ik-}k%T z4?er;AKzB5zx;<==HB$nD_2aqYSqO9;~rnSZuwg`Etv51F56x=EmoGH(wa^ z9CXXM{l9*8%#&BVf5D{EIj6WL+bjRC@&A83d`4_;nvgb*X~;0ny5!;$%a52j^YB?& zmtT<;`MThW%F0WwzT}F_uV($%CG)SoqWqF;F0-FGCuvH`v4vB4cOWN??xoC$@!iP1 z{2FM7Zs>+SxD@t7AJ zl=a`w@vb)5<>fcPFvwhF5A5I?(>R^weXk}NtT6vI=JcSCu}cjc;GTXnEbidi0cJ4P z3c%iX!Tl`!`s>IFKPL-fLykI5e#ts zf?n>SyP>_8`hXTc{xGYLdN=?-=EjO(;rHYVng%F8G%&~2107qb_XBCCZKMm0LDGdC ze~>N=Fqi0q-W1jv!R~Q9gDD%oostc9*s*gm_u6^R8FSLj(7YRC7TC>i$AU1h7r({j zd~2D^nj`4vTB8mcSySSLHrDL-K=*XsWjcfO_QxMu4`eP4)?{<-5B&!v8(h$CWjmOc z!x{@{W^I`1VCtJ|LK}3lw%Y**kHH^y{}2AKjkQue(8gL@BlD_3uDPu+|0MDSb53Ed z3uZAV*bMvTQVwW6Q|^&cj*QcFEinY~tQZ2dv`Sq#w3a@>^c!hk7sPH|Q|^O7;Vb7*p24oNKri z7dvZPyI})sO@grEdh*BbV^-h5b})-Mdk5^giS1y^&6Eoc-opN1*+S|MdKQt-!`bdO z>JRqc$^Kx)Jv^%vwl2XR_POzg#s|sY5!A!O)C2S~Ms>o$$4DRAp1>dGtfV}!vlag% z4Tg13lP_pzZmAMxJx{$s%S*%;EQ38T<7LVNbA8DMi;en(c9`)x`GQ&PYzK>BE39~v zc7g*PYzMR7q8?^aKX0=?Xnc?DU@okKey%Z^VL#U{oiOu5@(FDp5l7rdC|yrIzzv@e z7qFLm^YUI(!{@XYto?%g!uo%ZU)b71{jvVj`fu_JZN20dmTsb)aD$)x!rm{*FElXM z-3@EMC9YuochnEp^DW<#U$~mN`f^zR6WfU%Ag*BdR`v($wvo?S^fSMaPiWxYo&$C> zqIbc*WPURN&CCh+z+xDLrZm=IvhLIjZ7>5CLFZ|_8y2=e7tChP#0yK7fF{)f0bk9@$Y`Q#tAU&NYZSk1Mp7v@~W{$bM%?Dsh0t_FXY$6Q7^ zEWL&N!s=SqRKr@>4eMb)Y=Fk&InH4wY=ZK;=@wW7EeqK%tbi`q4_jgOBIa5}hkn?7 z8~e{E&hDnXFq^pv2kdcEURcXqcQdSB&ifgsEo=wNequY=0h?i7fc?NG7=SI%bRzvEw7}Ic z54OV+xDHmrE?5UQKo9JNUf2ga;Q;i*K^TOFUnuWM#Kl(X8*YH*@;7tfZrBaIum^TR zKlHO2Fc^6gr>-I$;@f!E)FP1F#cjr*dx|c0%)M z)CaV}vT@`K*279@;n@&wn32X@IqZUdxB&)X4s!>Yr;|R+gPqU;yPy-+OrSil4fE?#j&tGr5zzXPvRj?CQLqDvA zL0AvXXA)1)3NyI}Q3ShSC9KBtFkv_D-4X_9n?#cGB1G=Dj zFSdu>uoG^8e%K3xun(F`NEce+AhbhXkZW*2E3ARN&;#AvYw^KW*aQ1u5cWg!*`x!l zFaYgv5ISHGI-y}Q`GQ8+4AYIpps$@&WTMCvIRXbV1h@>>svQ5iihsHQT{5C-quN{og^n!K_B= z6IL%_Kf-4GVddla!{C$T?_ApTY4Qb|U!=a^y0z3h^mgD6^WLMrpzSl#KaaTalRm8Y zf%<_Pej#7bx|MvvrLY6KxCa-2MXd2O|CxT4xm`PK%i^~p(0ov;p&1&u=iLblkL0&g zFq^r0vx9hoR#* zEQg*v(t*ve6}G|-=!HGd2Lo^eH2;Nof>ziE?Qj4(;2?BDGxyBgFcY>y3+#Ya*aK}a z0DD+tWW9jn6xv}wbie>~!XR`(V?Ol+P0$C;up4H=erSQlGSY{cFsGEYv#^|d3zaaP zxlI=wgssr-puVB)eDVQ(tkpKpqZ}8c8uDP*e71wx7qQj^=0Gp3fSs@j`eEk9>~}tY zLknz%d9VeRz*blZy|51Ypa*t9FYJV!up9be4-CRSXkI{mpcMw79S%YV3_>R~R8TIM z2Ag3z^g%Q1hFP#5=0jsS@$pyEgN4_U9(41YsY>XFF4zy7VF3DIW;N-++8fCi+`v8I z%nLcbZex4c1IwWw*1&$~h5^_LgRlb{Z>Qa%2?n4OnlB<#I-nUkVFq-;OxO&wpbuJMH?+Zi(eER@ztWFD8*GL}(0xDY zz*gvn{s+hxG(AYZU?%iKD-6OsXs)E(&9qfdetH=k;dV%dOXMb<8Us(D!aR~d~p?zT1 zI{aZV?1%NxbOqx&XoaQku^lXfPFMk5Fu#+0!a~>$i(x-3g~lrUVJ57AHdqCVU^Og< zb+87ypc}ejEA+q)*bIAMD-1v{G+jym04=Zs=D|)_0=r=)?D>GW5q?NIFy|xc5$3`m zbab)(RkQ=lgO#uZI$p&NEW5A?$p7=&%md^Pn2t*{;1;X3GmUC;?P zKo{(V&9D#p-~jA~gRmb4`AtBklfOSE9a!`U^#w~{4Rk;^EQhVI5_Ui*?142f0PCRX z8uAY<&<*oo6D)x(uoAYxI=C8oU_11}b+8k5K|kC8gRmExuOIDw^*>5#*@D=d{ zgMH*58owd`&;&iu481TDc0vpELn{ozTxhA{YlNbd&X?`QG_eF5qhdVV1t*bm(>cPsgVMX(bth5fJ@8gHatU?yyZHt2;# z&dJRWJ0IShEWUCbGs58g?CLFxSvOLn};&c9;PjFbg_iH){(#um^gf zA9lig){ghXLTJ2+`hc0R6xyJFPuAqY+)1PZ^PvkC!e&?ueXtaE!!paa>JMhZ zYG{LXun5+}a_E9J&<))%n87ooU@mLO{IHX?My6Yc6KH{sO!5PlLMJq{R?Y+SpcmR< zCoF<~SOSC40nN3^n>umN_%rLZ41LE}Q&4Q4`97Hg(q z5p=*dSOe|TdG;A>-=Fq^>tFzOLDM3RD`@5;y=W;UKJoh65-cOoLvS4m)86 z^g{~_!fa?>%y9^9*bN(CKU@lpb(9xo!WL+Q zZLkRXU^#4uHLwG^;X2p~J7EXxf<3Ss2H*y0x|KMD7T62(pdXgNDl7SfX@`&=OlM7{ z4?1BF9DqTX&l+*dZNv?0OiN&=jeNjv=!Q<#kow?i*aP#AX1})+2ha+$bJ-5&z)F}4 z>tH_gz(VMS#jq2WLO-m8L0AjT_0$uzK@Ti~0ayw1W|0rL8hYjLW2j%)1OqVbShl}| z`a7QO;5t|iyI>960Nt<`w!%Kx0S90YWMR7@0MnuAPRau*LRbQ;p%b=3H}pd< z?1!B&0R1osgU~peeBDJ{Ln|~xJIsO(Xn{_c4P7t?Hp3umZ#rPwN#qNrLz9a*g%+3v z^I#4vf%&i!mclw%20gF>dZDe5`hvz&iNm|e56pySXoH!s2wGq{9N@QEb+COd+rxFR z6LvvA+yH~H7n=V@eL^c7fOa?t9k8UB`iJXaGt4=IbYL#@!xm_~2mMU8hpn&#dSNB> z!8+IhJ+KpcVK?lAJ`dOW5zlv zdY~IN!&cY|JD?Z#Kpzai4rscMdWII*4f9|REP;Ml3HxCk3_uSYgkG3?191lPU_Z=< z#``HRw7^!F2a9f`JzyP_-zT;}7wm@3&`?8v1502Jtb;+=12Z2W-J2;VtcB&!xRC8( z25g1JuoKq9e%KC8OZj^daRIY=Mu#2RpabSXC$vKsG?NASB;9bP!C1X-(iGEF?QhXD z`B!m$k|9S^LjQ?w<6kX$UW{(xdlCOy&aCXg(wl@~;_xOA=p-P5WdmNp>3_8TW7+f68`}kCq#f3|TPpk!?!& z*Cx7RJF!bX+HQ<*cZiswrPXr(9vX@y-;rF0$`n90 zV^5EhzAR5PE{t!tVGoRAFTw6##Iq6N?B9uf5W5ws^6y4B)~V}V+S`jg?N-)V$o3_s zeR8B-?i+W1+9MMlHpxEuh#yM`44&JP485cHNqw;%gn5Se`?Fv#WsP*A{T1QYe`jJp zCw{dq)=wnJmj^$~-&hAS%r8_*DId3x4Sn~pJ_C+c58SGyucW>c_?c2TzN!3m!}d3_ zUTyfTzK?Ytl3uB4pZrMuKQLjb>5+*Krz1=L9Qbv!7Bn}3A3qm0_#b2)M*_cA{Bk|S zRRX_m{Ope;8Ojp)acjy@)0DWp79+>a^2B~c`1x3`)0Lq9nA$d!vwo*Z@;6HSdhqLc zf@c7Q%Mp%qPi&k^{4%v|@UZSDPxh%c$bCHl*F{txXww1xO{>C1Ch=oiN5ZyCq=?DZtMwW-ceO!`tECHM#496e4YADn8* zJnNdIeI2HKiuL7uWcP>7nB*h=t@wAm&3dRY`uE^p%6hD^rf(WgoYN`EaXXfJ&%?iv z^{Uo3Ho+iyrY-S{o-PBOHQp`4O#2maZgCr+22ks5No7+boMk4#SV z@~+}6DPMy2k$e>4-}bM>`EcU5nv>F4$|w0~#=mg$*z?hif9_X_^AW@^pY?QO&4+a- z#!sxf8*6W6y^d|I(kvo)16%g};oR4{1Ns1iH`vBtCE0@T=c8 zdV12YI`C`wEy++3r(dnXz9FdYS7mz-_Ow6L+e?0Z*o(K1o?nR{KYsN|yt_8uajNUT z%sZ2AD(?szrupmN&F7%uGCr+;jzpevDPfz07iC=$qGSABA58Zf0 z>er3kIwSG^eE4-9oY>EgU*#dA=S%i$;%c$}u*7~g{F)CR-A_CI@oPVl^^bANS%bZY zL0O{lVl#eqM_#LvoLJ5hQ8{JLi)_RHLrG0L&Y3CHht{9ON&*sl^l&+$BqW|ZSW z>dlQ`^X&Nb=EdI5dT0NLbfW!PKezb@>)QxoUIEBiSuem=Uf2eHS?M*zEZt~wu* zPxEf%vshjKR_r$H4QH?(*~lMb7@wEpU&C)mZDaIz<6nC&>(=A>$DFSuKOOjYp3m_( z27f7E0RP^3@ylo4o%)+U_VU^B@4IO1<#XcSf9crE*NlJe6=N@7H~vLetIKDR@?)=X zvaUSAagn(P=lE+`A3ox|H2gTTV9!wON9r$#-Rz>5zJ@oT&_E&`6*bu+|DzSSS`8~micp6?VH-1aq@$1ivy%l@B`s>D?dw=5k3*wit zG=BYM?!`C{yQ===ILgDG^&sVub{d*j89rYo?Np9m=0nMbTJh73cf?+Yy@ubNq)9tz z_UL&<_S1~L{1M_V!G1dNb2P=@Pd|3w^7#8PO=4dw5|_t@U(;jp_fvwMh1hY+n~|v`OI!T?Sg_ae`<{61W5-_ke0V=``UPpn zO8m-S;MoGo<1JmA?GZmWenqPjkI#Jg1zt|PUq62Rukw4XQTh|<4@{G}ulE|`5AjRT zKWp)ie^q%ne&mvSrX zn|Z{T`87$;v^Uo|o$=2PR_sOCeTx2+uGCP3z3&6!gzu4$=;i1e(2Wrh%KmE5JJ1~` z@`vuY7rO_$VGn*+0rYmMe;;-;_S&#L-hB{1ewFx@OTP8(>Iv0?R{kj*wq}065l&Bk z-^hx+2fKa99=#tX+ZSOs>>1x)iQR(TCEE}6m!bBOdU9cJz#dyqqBo=0=ychiyoag+ zJ(usH^LaEsQfEEbYq4wnj8id>95arTB;+IeGn07bB%XbsDWU&Fx1u`~x*fepp*zs? z6uJ}Ls?c5NnK~WG(9C}(^cu;E;{4Hpy#l+|E`_Fj(jQ6Y4LYHZZ13kk7xp@lblXe0 zjQeohW6u+N_#@k8qMI{P4Edtz#!GU1eA+f{Pvhx;%a_748?J_rr#dlPmEv9LKY;6ZpCD z>pGs_Rf!+xli~LTLdUD*(}!P2eoE**bDZ-IZrVrcvmbx&?2&P8E8<#yXWxxIUR?KJ&n*}k*8y|~ zdcLHqh--5edBa{Qai{Mu<^EI5c|+R4j{oYDQVc8sQeO|p#EZ0p6aTIvekUl$P52|a zD~tBzccxxBpM^h?esdPdmJna!ue#ojNniZC@$WvDIFooEgTHYabv=*Y4NAOG-VyiP z9vVLHYQsNw0l!-mfBNxw@$SH{wVZTui{~fh)}CK*;mEl3uzkKl_oC-0^iK3Fh3-dB zSLi`>gF-j&M}J7ZNA&;bz34sC?}R^j(2m|*!S5o8D?_EK{=)YkQw#S_JvlS=lzmfA z%}Onju0!k3>e#-Ri?DSfjG?`}`1j%8HU@t=j{Nvn+`+p w!uNxT@RGoHtu&-pUZ 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 SCj8lF$}hdhTGeySj{F6oEj1|s literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/linux-x64/sodium-native.bare b/node_modules/sodium-native/prebuilds/linux-x64/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..1cfcb768e54fd08adfcb912b4888eba6b3a5fd7c GIT binary patch literal 1162784 zcmeFacYG98)Hi;%q)?3@iUn9A2ucf~t6=D$lt4h~n~-b@q>)V^AV_Em2vQZ077;Xv zVgO4(kO+u~2%(6mlnAH+1%jv`puFeK+_Q6Lc4rgc_xXLEe}3WfWzKx(&aLO3d+wdP zGn2da>SncAfc|XI0mPXj-l|X$@gz8BZR0S#eD$?hrCYtq+`w#Rh58r|01={^yiD4!?2H)MM9C__VASwB=S;#B0bMCP+Z=97-OvZ?4u z_x1lNGftPDN%^AH>H!%IM9TY4%uyNR@sB!cPU%Q()(`I!`TVbc;(mcVS#IO8ri_q| zl%6<>vf2>c`wWCPQ=VGdXHA8&`_{JvTyCEOyBc6fCRrA3QK~8OH z{l!cZ{#6rxg9-nM3IDwbf60XZ$Aqtf73VAewN3ai6TXWHKg5JjGvRYg_{AptJ0|=N z6aJJ5f7OHs)LUQmQ^SO>XTrBM;X9e|gG~516aIMemS-e5y%2vrPDHCj3e?c)sdk1MD6TX)T z-_L{}WWtX&;d4y*nI`-zCj1f;ezgg|&V;Xq&RaF84DgZg;s6FK|KqrhgS*0if*l0^ zepL@}Lh?ELRpKPt5%JgPE*U;h<=abVWVGZR�cmG8xY{>_j5|(wZu9UOE<`)m1+F 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 z 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ⅅ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

4k!0VQeAX9`3Km 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 n^y*nNEamF?NEEyc{hNZPaRE(vHF)Z4k-rr3 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 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/linux-x64/sodium-native.node b/node_modules/sodium-native/prebuilds/linux-x64/sodium-native.node new file mode 100644 index 0000000000000000000000000000000000000000..0e373ec3f0f1a6ed7ae182e52072d3dacd275b66 GIT binary patch literal 1050120 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 ZQm-HMddukwB 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 z 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%0A%)a`+|kauk(l3tJ%~x3bw_N3m5}feIui11L6I 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�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 literal 0 HcmV?d00001 diff --git a/node_modules/sodium-native/prebuilds/win32-arm64/sodium-native.bare b/node_modules/sodium-native/prebuilds/win32-arm64/sodium-native.bare new file mode 100644 index 0000000000000000000000000000000000000000..720386658ed29a8e1610b810eb505481790b1ef5 GIT binary patch literal 539648 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

3D z#s;wCL&mv~{|R`y|A?5tE9Z9mchg31jxA8ZyLW&dcRT%=HC&#pZ>* z1Fj1UD9#HHPQ5X(h_*IUr~XXW z?()mWE}f&9=&#B5#No6E~K*&Hq zo1_pFK_N<-O2Uv7Sd31f5{N?r8ntm|NFbnr#34dAw^RK#Afi^qr&j^)WUeXp9Zi$Jl$ozo9Q>jKyF2eBI~x(EnG*n2ax>b?-4I<4eZbzdFWbe91WL zJ;r2w$vFGpjge>6Wtxit*5X}FU1xrQ#IsS@6e6Oz+Kg2=hUN=wdTqtj?B?J4UXz1W?!DF*+RLw4ru zAG$L~@(84tv?J~|121u2>e#9r3v`&gW-LFV;j*7{7=E~e!#Jd_$%psn?qK*p;MhnYkG3J72G(Gk z!cu_Wjn7u#$fn=HQ-Na>fgIX~T>2e64fs5*1sSvrne;n&x;B(?p|4?CL*K!>tYPK* zDC>WGd{3DLtYvb6Z(1gLlyG}(cfP6iAKlk^YSu4%+PV4foAnM2d#K~u@Q03!u{?Ba ze8fZDmC0YAlfj>cVMi&tnU;L+XJt+}L+G7m_B~sIzT(B%`0h;iu>YxjgPl#S<1TIe zZS0FNURyWZs)^lEWuIK_C->Z=Eq!9Pmcck}sZP{3VH5H!WA*Thw`r}FeYMr>4KDw| zZQ22BKZ;0mxEx!k>f5ygmHo7x*p1l9Z#DadhpO+;+A5Q@PcFkI0=pBu{+h4tjv(Ag zz_DYg91w&%8Q5HKlY{UIfZYY&z#zOrV0VL;5`^afb`N-|L3mSu%>ys(GTx!^hMd*x zPwKW~mFbsp55)@n7Hxk5wlmfhIe|8bUD;~(FZU0`CMX8h6JU%R^n!8`$v&3ow#8^>BdOhOl|+oq#H`ysGxM?C2p3s zKc95h5_fY@y2%nZTiZW{bYqCi4@x&p;%?Q%7OZVNaZ`fQ-7ayrY5V7rZt{wp3#4zE z6_j?K#NV#%FDC7@6*)`NbIMxg2Bm*M;_uM*FCzWzk+Uj!t|m5Ntf2RC5zl`^{Q;FIK2&f{vxxh~~~vWAo!%TBvyYZWPD$_{MAMyt9Z=gEb6 z+NsJFIV<7c$NSi|UtkM(a0_;W&#lNgRgS&Wiz{;0r`=HY3FV0G*4YiWX(y|(|5~>q z=OpP*uS?Jlt-Dow?6zF3bpv&B(XNeRJ2<**6=k+-&nocmpE*%Gupv&nI{k*SkaWSF#Q1>sH^hQ_=ViRpuDgK6 zXa}WUX*ZP}*buGV+i$XVRr*zBPcL*}msgP!l74mB`LFNM4m?ni^LU>EZ8f-$&nbkr zvFF=h)lP4?TYDDRtI#AgJ-h6DY(viDbEZ(QNbLZ5K6(FC?X-(=vLQk{V1-uU4LMt( z+p3i8GNH%sNcZ?0r*;lLKd>QOd#2AV+M#BPc4#0pNovRmrT$MZoTi;mC+*D@x;>`Y zx=B4w4<*f*3dYQhWrv1Ixzi~pRFirbWzW#gk7>~9F6Eqow-0Ox(GD;+4qn@kb9Vf9 zbvZQ4tew8OA*Vc<`6S6iJ!X>6O=VBrKTG>|azoCBG}=3tI^EuoGbepq+0rL&)&86| zwrqP^cG($t|LnAeoaa-r%4*VnSXQ5wQ&xtpUSpcz-JzX^zt29J;*tSGm8ix zZpe9&Ja>chRr(L;Gx~B#LrzTUh_W|G|J#)D@LfaB&*;y``^?q;oxVL-2~R%Pkn`xw zyL5ZMa%}DvLx(@Yud~xemmMNaDE6Zd~B>y{oMdD?B#h2fsulP58ot)T1U-3NW=bu4#x0+4WKfSE4=x_V= zWqn1muCMqRYpJQ6YYyluuDPtQNU=R1q_60?mikxp6~SvMLtimM*H`opT1yQGT1zEg zUQ0cO9z&TP?@DCtb%Hxr&j#r$KF>>Zorb;veZ^VUqoS|)EG^Ns9(X`san`S|_@qyw zYa8nb(N~-e(pRj%vEOBV1-3hv^%Y-zkG>*C4s+Wyx$R#!Fn8ub_5 z-%I!)&~o>#>&&&f-lp8o)qaiUywBHtV~)0M!jFHPDb^LsI4d$IHHO%CtP>sJe0&a= zLSkKZ;16?0c`G`g<6XaB_has1&zP;a9@ocZJmVwQHVB>I33Xug7nAzBeoX$8mGH*H z7e8Bvt&A-Zo!FN%`?}uu(@pe+XQ@BuysAI#*Ozk{<;}(DTx9I+!_Sb=`u&^wxnjs? z6}p?V)MZu0C+i+T_w-d>jLS(rZ$i(P^m#4BmPh~Wi!kV;aW~H^y3Q!hrlRZ7LZe*s z$$t;J*W>W}6nszA&Up$82jKk9v z*EY&+L0_m8?Lc1`Z@Zd1iat$DbiD??@Je5$Z}kx9{p@XFE*Vo_0_WUZV{WSAZlw-q zXvY(bw^jB}*1f~LvTaVH-u5{9;g`gVj_qS~9xtHtn>fJY*2gRQH|`s%J~pEe}eW*S)ztbs@7UPlXtsT+)z+rqa)E45A1 z+O|}XE`sku&5?RT*%@S_1!0kV7l3CaoJ<%+IEgTta3Wz0;RM21t(E&j7KFtSN;~4U z*4Q06N33^f^Y7`S`ND72&d$42>rTI>Y-CzS+41M@)|MhWJ&6Ps4-7AR=0}RQ zWMP5!DEDdXNJXwezFC@9s4YpqzU=5{_i%@hNmJ7}XOMbhS&M5&PT6v^Ha>N9*|KLG z+RxIjEt?-1qRmeoQ)WV@EVqSeM}9v~yYHqc+Szc8PX41cH}%cVyfmvJ}gH@ zZ`rUTN94#yX5OOxHhp-R^wquhJGF(TY1$X*Bg?j?TvK*7?Z&bvQ!~q!EVO9fZrqU* zhb;CivU@vn<9=kt!^p^O$dvP!higlgPuE(9Hsmb7afWshIdN%Pg!WnLsIqU70godK zE}ImoiH!Z!6SK4%(z7^^VAbxsf3}vFI=D*PtKFHY;L6;HZT6B+X)GN*#f_fp!ZvITwm zX@`+17a(gEBNJYgc753?WX}1?Nm@}}e@)KS974v-MNV7^zMR1+N}H<{_Zh%*mv*9B z`Yc)7|Dxo{86;%N`Q%+mdk(Clu4#8`-)v~e`H}M;e2fg#=EtOHCtT2HV*}?v*t@3w zhqjPM+B|K7|J+AWWGee^L(1eV)4l!D7`y3O%d~u7@>S?GDwAuEjW0wmQGkA8@k4t7SrY0-fANx>ZxCB3-L?e(9T%|6F2aTYn>*~vl*FnSWd^n{ zy4~3g*t1*(tSE2dMdLh3f@hJZ5WBn|q_yOmE_Rz0-|1`dQ;O}qC ziS2(@#IEGdVWzCiWtM?9;yQ*X+r2~0SwA?9?esz{{+T}WTsnI#jsYhVICIt{y;?tJ{8%nC=JW8qG= z2<~Q!D0`%t#MSDf=zIBR=ut~Kji zr*TH0B^(FyIKj)KFobo*fE`7Z1ccM7#3r&!K*Zx}=# zf%NgD55&jt{uO;KHmmPnZg&EX2ea7rmzL2xXUhI9vez6<>Fzo~333%vb+9&5v1LvUST(#h~ z56kB~bhzg*`m`ye5!_DFwAU-{)mKO(`4{%eU(R9o$iGtfB!W6dQdcW=j&fgG#2q5| ztd%h$@`;QO@!ukL$LAO?at9v$BKC)x+=JC(t{iv$ead0kLC$u~Ubk+bW+qW^x%^OSCn#+h;AkZC#NN&FVE zag}?q`q@5Y3}Lf2ntIu!4^qHu;Xblt2{}{VUqbT!0rhF&zRg7adw{2p9`^Ud5q<#Q zV7r#s@|-ivI||?5q;G@Y_gC7tADU&~et^C|OdirtXZ`(@2_3zZrdJfxHft?h5;=hq_vfX!Ru+%fjc8PK6TQrrvm_na8 z;G06mw81w+=*#ukeB~3uC*R$70e@VCW?f4-r?XRh@AaLhpXl@3c-7ZEUfEts z|MX>C&ei+JxLb`r_8{YV#&gFF{V6tR&^Fz33j8YeZ`!Eu_(RN95$DI~@u!TlHg^D1 z0x+XLJhOlmS^Rj=P41GL22AEunH$8f&ozA8!+Yj65!j}%Ksvo|J$7KqWtd4ncQOuG zQ7CwvC3#{cHr`?Cqd5Pp#dcZCr>+7Q+dB5YbiY1QUce7hOE~;$W$%VNrM@}H9AGx` z`AYIJsgD+gt$5QScBfzr;o?y`WESZjom+EyK4z{|L{R?|GCD$N`(hZ@Pe6fY1ko)y`$U=N{&&66WP9`g_Z8-Z^&_N`1u9-Fm1Y^Kv=u?;26?7pSBq^o<| zN2a9CL43~($5tJi`iyQza|^a`gW*}`UTo6);gc%S6GqvG8DorR-)}e*A!DP(ym5}) zaU}i=3gBC*`(ysPi(RFiG1tQXIlV?1$yun`5A|+Ccb-uNanD!PrG?D}gfbtcE2a~i_0;byr7fNe^6wrcb5`J9 z%@yOmcx{NKQr`AhDw!?u}y*uJ*Ff9^bU;CcRU=M((@Hu>ytI`f|I?@O+5-9CG0s*xt*(PoFdC#}fQz3hyi2yQARWSng|8xT|%SS-CtG zHY$t-_@k2kuex|ka{;07R7)}EDc~;^UN`=qX2x!aCj@^_t@N1%KYa(m5&6v+9|?>P zV{C+DXMJ{v;#U0iJ;m679}>l$TE?=Oca8VJ7#4nz{|QcDL(eMGBAa-2 z(`HEBb zGi>(_e}LzTO>Q5uhxDh&h$5q{xXnJcf_f)g5!1)XAdDR z(w;5jCOGal#L2w6ImVtXb8B$i`^0f3fi~E)Wu6X>dyBYDw2yz?OO_Sp+TAA06r0&H zrEoxmt%LWhk&(7YzAXyxg^{+*`4*duDfX-RH;C`3L{AAc^6`KE?o8e%{&l4MS6D~R z4J9s&e{(o%D+~8vN9gkhx>;yo+~X<#WBFg7hc41?x&L$(be4V+xk4SFpS9Bac{6vv z?Seki&$;prJ*59zLzUSLwExGn<$d~D9~02@aoWgP+HDuew`G=6+dyBs_(v8&OT8cS zm0Iq5+rXM~+Y06rk-bxteofu;p(%9;QIebR6GY!8d-9mS4-o$|C8fHH_E&u%w&sbQ znaEV>YDi}rGDC^E?-W_DTwu;RJTNco>Wp1=7V>Q|575_Ea(8nZd9j9b_g8iLkCwb- zojPKW%uA`Bt|f)gssNfzhIW&nVPM^A{ErN}$XS9EkF>AEl%k(GS%kisGl8B6?%u=B zs7ZLTUj*j^(WQI&*Ji2xnihpAH_qd1?1PIIj+OiBI9C&u-TFU+UD&@o*it=<|{CF%%w(Xip%@KvAW8G0oc2**H0GIL} zr({QzE*xu{FtwRGn2q>t&v5#mcg|4bCrXWOdK3OBgI69ZSv2-*=yn8N z_?W(Wu%vA4BjBc+LOQjKD4W0+=Yq>_8@aA#&rqdkbkvYY9kMl&H z?%wted^C@?#+5!Y_Bz^I#QhDjPa);SjhNJ|!{MXB&}kktkozQ#5xCI=&OWIcEf&I)2ZOF?9m=~~V^&CRZIgGvQDdvYb#qR?S+_q5t?AW869h)OE%n(^8 zA;ZXB;=V%F%Uo8 zr_gsn?`s{Uoil4j;m54Ou58}}Mz0Y5TV@tryx z>UP}M*Cpr2N>iEJ-?qAKBm26k`>+W2Lf)ri*&Ey{9^k9=)=-2 zO8rXgpu5$(@5Z|L$ELLtb{@kq^S%9p)(f`9*t<(B`AG zc|5$)K22!S&(i?SOD5Vs)EJvp6O|7)qi@yMoZMH+xvLY76$vnnu}hk2HqcJP6j7c$NBYT z9O)D3kG`HtaDHZ0YO_hZ(VW;>%=+fk;fZd&JZxzrXs?m)cWIvRrxEOkZ~VaGYA4?Qe7TkdJ=8VO1zLzLpV;08?s8TAbhARsYgGGo{=Fyg#pf6XO@(f~ zX;Da>y|@39^_*w-eRR2=h2OSAzaDj+@;|TZ+l;9z)%6YH+DA=xdy!v`GOwkp5uIYs zC}&KMp|dMpQu3ku>C6wsFQc5>TS5Egkw$1H@jAWWAEB4<&!*Bh#;xEHy5)j98{F2) zT(>??!b=COcAt!`LrHcYWiSV(+y1Vv3BHrFFX4~Jl48b(T{+vq%e7qAq=k_f-{c+qSR%**5?cGKk_la5Z?>5qLpIE6apLG5>eAifZ`s27$tkgDvboUtP z21~kojC4PcxQV3m$Kiv(veO?oLgFToZl00udPz6WNOz;eO(vZ`4&ODFo&LBVD%+j# z(R>qj-?VW7w&E+;k6am}utzFw*YAxp+8wUn8~0tit^PP^H)lk3ngrU-{);C*JRqjbMMJrm{@$T7|n6rAXWlqid$Q{C6 zeb%wLS>Yk{_2~R8bN>lhahVgdVl9)hLMKelx<;vZ`4smMj#gD`4RX-odz&2zDtATR z`=w(xclvJSd*c9nL*DnL;}rL6eyOO|;=7t1?Zsy738IqRbtXQ?lxp~!QXGkKxB105y<*HYl zTUKpxnxa(g)T{=5op~i+%H2CHUm&x5-j0kTGFldL&esZaQtK!4BQ_%JJG|G6X$`GzBZG!r{QOLXJ^=T2ngT>gU>6ZLs6DE%6L`rlH&{n(s*WbWIUhdsl7>@eAD!Z##7F~hN|z(%By z|9y#RU{i%@piTq1t53=_jr>{N+t6Ze=aS}fb3$h&>m2Drm3uM1Mwif%lwjJ)W$^Y7*#?w7aA z`41wy%zk#LAy22$KjQaz2(t2ibQEpKhX+Q9&dHEV(MPS{D0>FT9EXPFWr=>_AoH;3 zutkS1J_XFs@hWr;tR3|If-ktA109p@Ke|6{m9>J%YNeDJ(1(ieiFo2f2kAo>`hC79 zEXqqW(+Am4L?CBdDyr(%Ap58H&DGD}OFdXKZ(pk*!?0&>iD;}#XN|d^wjr}@mo>=v z5c>%evVh=XYn6yUK>fRr@5?wA14m%2B@^*8sN<9dCK!i$24L?9 zj;iY4?qD3dfg`ZjbsUq9vpX24!oU&O&vl#-9j84QN6EbmL+3szKAN9yoXDI0Cy_$1!MH*aPQo9Yo^8YOMBqlqvHrHOUE&2x~2!t zJRL`1gLE8&rtTg%MLLea*u$pIMLJD)_rRI2;|L6WR$>Hx*@dRNo~X z*Yv=7SjQ3AOFE80Q+E%XM|2#4J*VRsG~L|;=TRL;V9RwJgQo30aDJrY2<&kk$DnCM zXfS;i>o@{?P{%Q7n$-j6F&#%>#X62b)50D&kLx%Bo1^0xG%f9c^MsBguo*gzLDMxo zaGun01XiHq7&LYFzz#?><$D6az zg{=v~p}i;MJ8SEjWYJ9*`v0w#t9RE$C?EEbwY6pBnmYco$tC{(Yed%*&1=xpxr6eF z=z3Cz?d}14N{6-gfIY3lBDl+2%98)JrRy2?$?=^DEF!cjIRH281h9cx66uz`Uk|di z7a7@s?9+~%EbD36*Ag3<{m3pI=z7|QAjc%26K)AT---@Q3ECfSLGRj*PqvmVs;cf6-wLJ@&WP2O1gTGd4L*VU6)Fb{|>`=tU3Au=k<@LPZAn$G97`~Q`J>gHePho*i zmwP-C{}XT*vxjpE9f9n#+phjj_R;r((La14@*uL&nI(QZqMZTVsq9}F?R9gGQ*;{o zJuI~ABkn|xC@C51#?C_Y8tFe(b$_A}l#%{p^#t=Lej3ps(td*`CQrH48=Z8Z-1n|f zuFzJ}9jFYnEfHN;f=Alc-4=fSJ9`SVHk7ssy#*gzrS+rP@0Yu}#8=tJa<@d1Uw;g& zf$u?lx1vw!-uc}#J!ZF_>h?HS0Z zt@+}^j{X@Uc_et&bFWwt`r~$FS9o~Qd~n)_*!6c+f6vw5#V$koX$N+zBBKheMAs~G z>H~gy^}YjT6f)U)+7$2$F8izFFDma!d(6m(8hMF6cP(;=_<@!EoJjWD$v3g$l2Us& z=YGYHGBWlF@uAHBrmh8FR^u51r6%sAGq0~J!H@DK^iF~O^Hc2cUkXP*OTG&JvF-5K zWbzSRR5`wx%LP9ieE*)lp-)b?r7u(5=@E)g#@RO^O5$BS|7iUxeM4PevhWD+c_%?k0wXu6%LQK;ug>G71KQXRyaL1xl=t;NU!DI;@Ow$^t{wn&^(1S9l6sy(~9ib zJNbT>XHmu!+XTW6$~dLQ*p8`Tjt(W#c2Es<>`|j^PBp|ffjLG~qHPlyADq=7KGeZk z9nPjC*x2u~;p@RRy~Lh9;X!-0rkH`n+unuecH+nOxEdZAZ;E%AO=icZ@awZm9OsZi zB3F~gWN2_)jf98eM* z5~sgEHUM~-t&;BvPua8MOyQB7m$8KtMl$kbDq%F#XUpr{2 zf!D4^*u1L6#-70pbpA6Oz-o9F@o1z)Z#_eNym9Bxj4WUl9{gq4&}G}QfH61DaPW@4 z&W3)^RxsZ_W>AP-i)0_C#foiMaX51obI;B&^cQhjdwD^&*IbazL7GvP_|!gLvn9Ku z+>$Li1(_Gm{q=75ndW=kS3*XOVda-X61W1FNUTMvrnMLRG;0_$NdxXDrvI6Jkk`==qB97eNAi3 z5lw&RtkM$l5xo7>CyUVgdV;&eY-(zM(n$ZGzn@XPz?9tR-I?g_7&67}Rw5c#L%$=7 z?7lIy>nM9D_p7mu7PEzWdm|gIoY{)pdwcbf5Bj=m)bQ%Jxd-=o>@7M+^>;7Y=cqnD zW`O&^V!Q8c=#fF0-z>5FjzgCRyB0S)cH3X({9-kB8;wVaJFcotxzJz{@So*mxT4S# zH7b!!N8pDyX~&(^cd8QA6scI7#^B?rj_)^>=%%@Z|HktbXJbd>L#Hoi(iY>_vn3xr z;g*ov{qXBIzZU+8bDw`8-hE-6;yX8Yp!@XgDehC9{3~6e-wK1b!}t$|)IP&^?S=B@ zM&_CanI{U$BV7?ZS1BC{f8@d@4j`5mJM(XX74m(`CnZ4 zj;Xgoo7Kzy>Z;Ak&^1K0)K$^O-Oy$vc|E9@>gc!n3hGfq z9$x4YS^j5N33O{+p5*%5@~>RXQ*}qx==y2Uz(d--2%ZFw_3xawP$|H<{qvOl^W1^;#S{Z=VT-5|wW z{}g+oE2ztB%f50wxqP3?WDc(%u>6m%xaECa2e?nlMIQgTyr1hU@|n(kP<7w@ns3FN#>Ngx4`?9J#6^0-VM$tN?P5s)Nj}FFS%PPw0_9)1lP#r%`WE1 zy8FQ0t(xmc?AftSVVrKEt?_DnUFOBb&8_e`cX-vmLzx-G6+rWhJyWZr=x+;jT1kFG zfzRKYTivNf)gNd4)lhB~c!xGdyYGd5hc@#~46?O^=3FkZhJX>-Xu+&LuPoe3UiS!>(gj^K*P$ZGygP5T+wiKd9^ zE^J*st%gla z{cgshg)zE)>7O`zo83_Q3El+fLmj2l_SWT*nV4OV(Uu<34pY*YHCi<|3a^lH% zQ~8&!7;rb2r!w{wz5nBYMXHgES5rN5P@SA{dAs~ST~pza8Kl`qev!0!pW2tPIiPMA ze0T)B_ATM=6F0+;;K?|Cv3#Iw4de32?RMWo%qJt52c|RcIm-9C3d*Bhsmxv8VIl6d z<@;P!<=6`hGrJ3Tca;C$<$XPrckC6IYeqpo?=Z#Zh1a9^7FK&1BkkT%2YP}r~^JctVUM9&m;5B-oCWA4yDJr8>T@iR4^Az7c;zp9s9{TC{&H3&n zV;%uTkXit9!GKU5@OiidCvUG=Q z%(4{MsAYe1WtrmO<(T?oNp|0LYE0ci=I>*y%Q{sv|AEx{Eqgv*_b~8IQ~&y{jKN1u z1M5!Bo9Hei&tuq>a36jBx^nU}CDn0}LjB>`N$yTlXx)8#zgTxaeN$1cxMZx?GtUfP zs=A8zOs+o2cN}x=(4`Ho*73**d>t9^h_+K1JM5`i5$$7n=ncNAlmYP%rt%3%_Kkv31A! z4<1EU7>=xv1@C?{rmvg4tG_}1NC1biUi}Sxc>IGt?rG$om7}_jd^E)^d@+Lg>?krq zD>CkWS@ zWbw5km+V#}Jo|_f`J_>e^t5t=Z2Pc*?lr`FfbWl;suhCc;k$c z_g${dO=-awP;r^ybufpwcPc();CvJVJ*t(jKebC*SW% z9J08|oa#gWBYGMW>vCO3!XDkizJ_k*zuTwlHiv$3igDI;p^w-Wza;AmS)1$U6JAt& znb?S16eT+o`|t>P58<6VB`nx$W?~y|!B#Ufju1P|%tS(LG&B1XVxO6rLWpf<<{(0B zGc&IuyoxZB5Sz=)YY4Hi%)E{eo65}5gxFDLjwKvRIF4`}p`Fl9IDv2iVF6(Q;Z(w@ zgwqM96V4`_O?U_49fWrg-bGkMSVYJ=+j1`$ePje z6d`Lv(FaAcrpjbZC3J{fiVf)&bad~b(-}I^oyR=aF@BPJ3;*gPA53<)@t+>Hx1jpi zX9e!oo3V9co;<|7H+}Dv>JXK?LDlH$14Coo4rFAJ1rD;-InIBW{%`6SALovO_p|m) ztY(ef^cLeHLs6=2j4_c9TB{Y25t~|uaE6YjAY-s=A@FKsY!7qnHKv#*2k$jJjK}KE z_oCh2`Y3lM-y#b>pz{nmuAS!E{iNUWZ`_%Su1WMvsS@|1-S@XdLl@I^VW#`kI=c`4 zFzg{K(R*3Z%`o3{&M#YdMdy>8JfEVD|B7|PXxR&04G)%>?A(2A&(37s%AS38Nm#G% z$X?$uy}tYO`tH~3JGs|)TCeZHy}p0Y>)Y1rdql7A>wA6Q*z5bIUf)0L^_|!2ds44& zN3U;ZukV??zHjUGJ*U_AJ-xmc^!mQP*Z0C+-(|hNf7I*yiC*8&^!i@j^V>_`TQVYM zS=6E#%Chu?OZ@9jF>iHODmpI-@0fD)d~zS_<+F6=Fm%R!u@mTrjct-X7wP(0bR04l z$(cGiZz6UBUgq}lUm54L5pfgv^ zR(Ch^spt|V&72QN&)s*zw^b&CU#r3h;nS)}Lim%j`q?G$CA#+P68MojF0xDD!>VLL z_^&FB5WcG#ObEYK{eTcYtFjToUsWRr;j60a3E`)z8wuf~s+$PmpQ;}c!Z%fUgz!t% zBtrP4%0UQ!R5=OZi>jG~@I%#Ygz!Pt976iP>K;P+y=nm={atlGA^lvnkdXeZDkG#{ ztA0dCe^xy~NIzCRLrDK|7Jc*@+HX;lug_wxTLT>|1C%~3TR7{g(>2jkwOq+gev3H+ zn4DjEa%=YnZV4Q>mU>oG#~SMQJat=1eyUw56aCc-)bT~?m)BqEQ>{kZUZRe*)USfN zt)O0e)L7dp>Lt3()zmA-6mNT$daZ#5v5IPY3B6qv_2OP<&d=Qc^Dh(=db&uPq~pJg zzD}80T#@g2=;HL|h3F!qN$<#Tpht_=<3;Z#^H2eg=+sJ%PaY%lo%}aT;|;rTIs5hm zdT{P^x7|Z1XXRApF~i4!;nTpF?~FYf{olwsDfr*`|F{1ld%fS!FG0ML@r%Hn?1`Qu zul|3JSGi%T%%Eb+;3YSxs?J{UOPZhJ)bi}J&n*OHib`eP$B z0DJ#r_l3WTyfx52#~J6hgr{U~lQW8(r(zxp!8R$B{VUGq@b3LU@g?r*-tY#tOr`9R ziLL(@La(WB=Wgx>lJAv-#yLc>7fbZy%)&ki-S5Vg?9YgtxM5@Rzg=HdcMh8;*$eYl zN;!ht-=knNJQ95D+-&+j7;z?^oq6nMQJ)LEzhI%Q*wJB!Ry(Y=$)im~c+jjof^WQR0@UPO( ztzd(zRo>flBe&H*oBl69cO8fSbM$V4s>iu}-v*WU+IZGb}>MeDC{M+vL19c44&qSVwDMR2=r}xSK z0Obv`CQ{{sf<0&Q)4$Hd-A`C6h1Tj(#UyV8H;Z> zc5ld}O~QX~V1Hf3-KrmbY&!o&p6PtxJg}4z*i)4>GOmROHU*_cPS}oo;oC^sD$)k; zk#?K8A8sJBHfK4F{|@(+nT_*O<_g9ob{Pk#kA6OiJt2!dkG*ZB)||bTC2OmGaQpzgAe?{(F}=b8u>)$oGDKK9w?0^=AwXU@RpwPYrZmXp?y= z#a+djE%7-g_L;)d;>*W40}z6}rtrEkZ+Smbe0l8W%6*jH+c_Wg&Bl}X7V6C7-Z!x+ zcmhDP;&TH;J^dt;Ct4MF*Me zi6&0p^Czw3vxWRkgze1uVmjWeU-3cTuZ`Ao=P6X+T9PT>4 zf5La9|NG~B*YO?W|9*w)o;u^$<|Da@{&Mc4C29(+gG%A?a>=gYpH9q^hL{mmcbj2O6H^dG;52W5wj}tsAX=C7@c)#=`@xsUJsjKl1Gi=`%5GQ=>gO9U? zk1GRwJis%TIN{?r=yyrq%2V8fml^Ao=p8Qe@TzewNfkL|l>J6O``C+>lFs-q3qK3) zB)u*&j^y8*=*g4v!;~3;I>{Ky3E&j_d6u>PSi$>u=6cD`4;LNp^#R-=N^Rg>_;rr7 z6WC_>*@P}}F5f%&Pw8_#-!u6Zy4s+tw8`*;Wz@+SV+o#dLc?%-*ZjP^i$#8(ACxj^ zL{XmU;tQnz4LlftFXh_~4;H~!XDUN$ON0jrTX}Sv`R7LAGw)8tH<)kiJW1U_2ND7)!p#dUGUjl_-zjScqeBx4Sw7cZSbQ? z+p-i>^%RT!3jW zZO|fX#cn;{sk)xddO6==;G?Vkm+_wWmmkRQP0G!pTxrWft!bU(x4Rp&DBH1Ox0Kh2 zO_6TzBxg@${1lj!MC5@)_&@Pg!od3U%#tX5-V2<|lX=frM~Dn-@`!xoWxd+`m+lQ~ zSesWd&**j}j9c*$5wIDlV$HvnHU4|D#wSi>pXHmoH_SK5c{lDo(L;O^vF`bU{HN)Y zGfSp2Ccazubng^@Z_(~ci$$lcd=rp;q)q|(&-;Mln~O|ol#!s3_re*pA-GTRg+KKK*!RMpr0ZJF9Cxrz8NO^Edx_{gmhR&&wHQ~< z(l1=zA=vs1akz&rjdyh*dq!b*5xMLO_TA!LM?NsQui^bT{sU#NaQM=%T$9+xJ#ww$ zyN39Q?B)J&snvC4DBnw)TqbNKV%SeSg3No((ta)ldxBX!a;|zfd#=~8&#Gciki48U zA6VQ`?Oo@^)Y*Qvj3aPdszJ;b2o6wf}{&)ZqRo<(fE*gr@eu~7ieR1dG|_+{`Ba%!E}NLkn; zv|JtIa>IXF?1jiaM-BUR!oS|3QSK7LBSWIy1@g^2acQmC9jDu_V?Cyy7lY3(!6(N2 zVc6)(7}V!6_+|5du#dOVp6wm--8?2TS75GyFS9!~@-O$#4KgQO7sXrvJzqtBka_D8 z^gKo1Ql73WI5o?E1{yx@x?nK@;f{pxYyDsFpd;8%Nd1%iz(lZap`?tIgx`bbaHj&->d9M0D z%r9N?t)H{BO~qE(csJ(FKmU+`^OTS)DNKMQV1?VTSHnwejD z-%mLrHyzsqtT==+x%-_^x%{2rc^VmNBj+JoflC>Qarn`ot=J*1UuRNmqDR38qD{`a zpPFU(mlB_%GWS1*&&M`o0r?+smYloGIWx*5GO74_kaU~7jX4w@^fqI?Exrd6Jrk!X z>t_Lz^`yf5Dt<-J%oSf;JN5Ic689K!lCDA4S$9=D(pBGml=mli<8pc6OL+^WU$zLn`|JJYp0Ty z#yQ2i1K<2Rs=!skIgieJ1^>DO|4!N=^eNvv-wgb}6Fo0%H1f>-e8`Lc!+2_(j zvr9je{6h3~krSSgI?H&S!n>>mExhY%!Sr0;Z{(j1Pe5bFOFlFYK2!dw-tUIaF5UK1 z_(mVgep_)}Z!*j9X(@gT7{8wf&Q-|x#WsjG3GYcCh0sT4kF3W}-GVFv->=kp$T%}# z_>oMvRZxc4Y{xf)dZGb2R(vQwjy-+}xNpFF7UZ&9X~RdnFYu?A^Q=FC2NOjm;2-gv z-ljyGoR7ck`_gR8I~htYcUXy>k#55$gC@G8?w#m=W`(*h@$Zs0NZq~6dkvi9SfH?; zRuujGta@hy_t8Qt+A6%bpYy?X#oi^ls#fk_X-QYQ9@EEy$Wo%aGupOD<`CK|eb6B~ zF6PC1{B*y>|KQZDiL7z_dZ8=SMa5@T@46IN@JTE6!4Kv4)+gV5QOWl(6mw8Cb5IOx(OA}`ap*eYMdts!n|aoZ?m&1%{NQ+z>lFKrajLyxoXMVd z(XxJGR^+&-n22$SF>#80d&)S@2q7zZ^Q~FQpHIrd=MC{GFU$=PlaY>5}tlNEDM=%yBA)uTUBfloPM;PmnV)oGTG~_xNi#6LbN*2Nz|I^<%@LYoqc-4>bp8`$|`ya3Vc)X?&&KEx`l)ZyG&I?_3vZWtqZs41#5zAgK z;JK=#^x}citczJ0O6^89!tl!iJ~+0`_zRQzN?Z2RH%H8Iwxe_H+ZW&i`rO=!S(joR zSts%fv$_%rvJMZNoYihlwt3B=wu28V+p%S`eq~Cs{@om6MP76iEAiIdrU-{6w<_Up z<`l0 z$~lD-O1$Gw)1OUPJ$+TepqaG^v8E{NDN{cyvZLcoCCzHZ2Sq7m#Lurvs8UlL#cHDC z2lLk?r0`u_RGE-vO117%Vyr(Q?|bo!F+z=V#F77A&Rrn$IKuCLDdB_ro=-@;w<6*5 z`(8*mim!`KlhyiyDZwgby-A)$oE`Z>jd!fhtw}hdnjMP0B4K1+ZNjsBzluMPR3*YX ziaM>~oW~Y(lH*T`#rmKr(UCo4O@h}H=lJoAnuJHDS0?nIQI&8F_4uVJhO3vX)--c0 zbP9FsHpM%b(;QOgz2-1SCiO3!U!AaR{__dXLCa`0!I}fDI+X#AXQA&~YG23O(Cf+j zsuP-&{*EuG_ksIfOn8LvR{W)XVj7xuP@aeF+kb}-j>##nIIm+&WvR*5YZ*WH;(z1n zv?%8x!q-z$oLfVbk#ok>C4Z8h=v<92j@K9`!#|vq6@nj*Z|2#zZ%t2ehT)gPtwuPi z=;I^!Ua5vQr_E8^jcwn)3SS*t@zwFWRj)gx--j}GL%5skI{U}tO3cdkU8>b_koyiw zw}fT2>IT+#xlvvJF2SA(uM5H*)IGb;twm` zgT35|VXHURjb{uG!Efjhb)Y`hcA}3O-)pRuv@d!2!F;9mD02hnJv#T^US7n#;78E!Xp~*F+I~^XP~NRrtz1N2oGoc~Fs@4% zm5gmK%^b_#KE4PeJ1dFv^3M$|WqzN>Sq@~3t|c>=Gp93mPGb&rGMCw$0NJ&(Ni`}6kK%@&;I zb$^;w=!ZTP9Z{w1QCc{A8lnF$bXj7&;+r3(Y%2<}Ya*i;D0W?b(EYQsf8^~Ba~IRM zty`GGkP}4LBKug)pCAkE%*}59EH`_xN&TXuDL1?G_qo~Sm)KuszCO~Nn|<_8x#;f- zto#$Q#Yd1MqtM#^nVQ}H*WBzy84hbllbYS}b#8V|#uRJk@73%#GNxLOG^<9MKdIRT zg8x@F+xxYeZNb0y;xN_(TSUGz>LT?x!}mMXr5s(S@TAmrjj3;w@SmCYa`rg`b3Xoy zut!_+ayx0(=Hbs1UhIUw2EmJqz!!gO0pDUW?~8wt9m0!Y%T8{B7X`N@a+#hUdz0$5 zCTsN~_;C>YxCnl<`}tAQDd5YUc58V`IOj90uU+`^#1wpr3eQSAMCN*)KGNkcWc;=A zKHl!TBr*X1wKMoHJvFNU-V8oVOaIM{z-Mn{k3M__Upgi9-I|L9x=*f6^ry(Xvaei) zJ&ed;Li;uNrI^P$%nR+Skcrx%`D^@KInN2&2)q>uLpX1#0nYsS{-f8rA74%Mr zFQv{~;QuwIemY<0^B&CCef@mhK^@)jwFADcCOiVaiVwXS^2or4p76K$h70sr5%Vs5 zU)#z(1Uj!nAK`U0A+sf|@VcHScfvVj4}q}8&+j$xdoFyh@6EvXf$=gQpH-hgLw&xx zHE3?U^Lyq|Kdd`n);RbFT@s@6^ncM^50N#Cu~w5YFMHjef84!c0c~s}F0e0Oi*Iq( z^)}hp9&ZGPNlIQ!^Fv#wDS$-evQqR-KwP(m*=EHzLD}DV8JYaXD+h|bkFDSQ? zau4d|e&;tx_TV22DnHs^{`dJtH~b(O{!nEdA$5@Tr|6QT4l-_apYD3Qr4AwboGa~q znexTf!6+X;P<}m!+&eKlsQjZ5!fV)5uzu+6o4psk-}z_geg1ps{T%CIo!-<_W&Xk! zmVVF3K7ZN&1nuAXpV0nK|A6)n^s37ke_iVRb@?az0b2ZX{jlvH^uvT+bxHKsrRpE` zNu~0I+~FX+(29OU?+Fa;CUFfD`J+A-p0^gdd0S zia61J9KtK&#QSjwuZYvvk3)DxoB@6u!YksW`f&)ah?C*RA-p2a)qWhpE8=ANaR{%7 zGu)3uctxC%ejLIp;@sfJA-p0^wjYP^ia0rb9K!F#fnRhUA(S&Nfp^PKCq8XiW}0Qm zDRg+@AusU?@d2A`!Y|~XBmCHd7fbnX3NI2$dAgj2`*nEl=rXH+oLCC;w-=6Jee!h4d5dbVP2j&*5{8@~uDoAj z!f$1$VF&&MHs4;>0TBgNGb5Mbze3&gBeAhqPdS!l5w7+j_NU9k*w4!FxQbS)TG2`q zk69~8R((}@Q?iRzhVUKA6UGzHW8sP5iR7{JMDaxP#PG!O#A#L7LwNtO`qFLgVFC-pWvpQjU;TPm5haywy3~;H@3_ z(G*&UY#{43;juwc7N=Li&k2uucSFwL`P{we=ebPffuE}rTFaCP`^(UMYvbWRbk*F$ z2wz5uEeNffLG_jdgt>?oe5KGo{PF(%iGZ!C$WMO(U*@7J z%2T85zRloE-2*nHgD4YUIFHIYR@Q}LSK~D&Oo@nSPQGDt!a)4*Z;-SW>Y=FPze-p7 zE-Gf-VX-tPD=QKP2J#8EMHL$c%J%%4w4;r?OFozVFWDQg&?ZwnZDOvMy)V18+5awi z^ww{DOufWjdOy6CXYW@lwD{;kchYnI{?zAlGNo^N=NG8^_r+zh7T$&b zuVjB&^qGF&kfgb_SDpcWl)gx(o`NHLk`i`T%GsrO)^dH&FD1BrTV$Uw(d~V`??WAL z_j~Bb2T2bd`>6jzRgb0iNr$gnr=ySNK8-+slyIj;31^%wUAfJD&n$1YsC}E{Jgw-r z?#1@)eePW`)BkUT6;$`dKk`SW#LkbM%IuAC%Aya;2rv*m1pn8jWd-88*=1( z+WCz$@tgDVYtbRjBb3)N1l!j~*fSz-C3C|8!WVoSXSSqQeS zYAw`ZA5TVALyiwva!iP`2wS~YdGJa5D!Tojhlfu)lrQ%shiWZDD{?|;Gk$Vv=c(q- zmKUy7poFjjew1YUm+ghEk zZC$#@6~1b}GksMn-+9{Bi+Rl!z9aPST!L(wEz>3UOV{z4niq;;SQxw-S%t zvj^X5S`^>Wd@Hn}MSKqrsB+F9u-18ad_~SH18SUY1D|sq#wYMsdCG|ut2UQatlCtD z&*iepRa?pqOxRr3GGSBM{t2&?wN2Pkrlwr&e32)Qr-erlCuX@dyv+5mZKH;JK z9XTny&*hoDYP<9B>UW%Bz&{8X`|!W|CGrg!4Au|CTb&8JBjy^U&&7oyFkKOncJ#r_iwve-$?N;SsC; z-MN_X;<+#_mG_IQw>$4790}|baNj39mo~!rR?1dqaY~M}YxTc7pG|+t`BhrBGbL@L zb9&k+=gd{Va$XHD>O7IQ*x8)+xby7lUpZ%z&-%0*oM%#RDjNe{ z25G|6hdQMW{dre_{UZHG&b(Dyoxas?Ip2SFtMeRB26gyl`V-Fn;bR|Gh?|-AYv&U3 z&jX$fOs^k#Y)+r={4DKt=ZDno;9n=<|9b4h3(^-jf0vT&T$S>)^YQe@N&B8t_%I{o zm(C~BpLB+%Z>2xBIg8SZoCi`~b-tGN8veH5C7*Zjuf2sj{f73v;uM~)O?k~J{C<7P z>(0Zj$=c$SP0lv%eN+~hox<-mtM@xKo<%$ko-7^FnwSI zYm4m?u-i?twTmmL>5~cUc7wEC2-W}E-PQzZ8%R|spo|*xe}C@x`%NZeu^TRgmE~Kf=TEY7F7=Pk zTEslZV*kZiOa2tdF5NJ#`e&cFS3Um)d)4IGAIn@a*2*sRPt3aPB476WnZE2Pg?D9^ z7H-P?cWZ3seE+4HzxOZ7T;!jWIX^Hq{4;Ax_)_-6dK^CgnKdc=sSR_MsE7Mk{^;Y$CJl^#AYBH7CU(Dp0N%&`jZt;&$!FT zrS%2tSN!YD@2+_5+K%gPMZSn1D_q%Da)6YHF1nD`zuAC z$y`=cmpPX`1noz|m#aCF1`C8ya_X171H zzXh8s3;bl~?Dl8(2eChEum^Urm+Gz?tnI?x`Bq?J6V4$=TYytz&JrjHYrRwaOAqbv zW5Yc}dfC^nJaY>+;K#59KYCl=Ki+)Xz?-YF5f#_83Y(FA7FMlfzQ z+|6dbuOOE**~VI}Z{kZiOPt8MaoC~A+VJnKE9Yid7u!=S2lUK%acl4r=l&%3pQCl@n62h*t2uPTT2SZWlSJGYI$*nZ)JQ| z)iS%NHq&>1%Y<29Y`!9J|Mw?YGv-~vJ|~&Q*7RjIeoc5G8{K{-eeg=PsdfK9O;|f) z?F9Pfl|?hwP3X9!W(@MSRmS^2SfB$8+dJ(+7^QS z|Ce_7*z4@8OFLB14i;^a+76X&JA|^V)9Y!66aO4(ZSV#AcXP(bA8CWu%etm*pbe7D zOP!>?TWaSnkslzH_7!Ibp>uwl=AYCC=ZIHMZHGSMIo@I%dxA7-i+I3VY!|*TttAl3 z46%mgt}*uFGRmKg|75{n`Oz}pwEiWHJ9a#5TYJw1f^D)Jn1epDk3PPDb1w@xQ=>3w zt=3+?og2 z+F2F>XRU7$et<7Zjp68690OTvG%)Gf32?aVm7of5%UIXatF=?#9n zvl4bud9r35^SR_%NFLVuwny<%;@?=vZ;$wn}ZKO$F=fj#8U7p=NI8u#_t3C8fpd~-hbQR!^Bv(M=#R(P#1=)dP^=A(gvct z=r7(L>4zGQ4HvGaPX9ukz_|t5W~b!UnkVVbbo`0E-Gkq3&vx2sA8oaWvf^%AeZy@l zJ$JpwwrZxWOn$emz{9jv4{g=Ny3|7WL^zDrUdp#6t-aPV52Exn)%etDE47p8A%ARi zf8@N*u-ChdE^N_F--*}SQ@m>&_J~y)Dss-yjPuUw{GjnQp+EL=PV?!4JZniOecSOn zIrE2RzNXA7-Hlv8hOp;2bBL+)HrkIzeiUMdG;dR@c|_88YR<;_w$d&_@21TM39lY( z1rI)F50-8wPNFJ_?KPb_h%Vi3GKSkz&#(%ECk z2Q7qukadJgFZ+=>id8}Ar#zw`@>BE*D@_>K6{HgmL2&TW7Nw=-T-qg>q<7OUchlwy zu9sGG?QgR-iuT*uG}s`=uRD z7Z9J)Nu5l-lF{=yu>wvU{p;%koY|DoO8QfG@(VJyHgiSzZ~MN+*U&d8KLg=QVlX^iFm0;z2xGDBT0RU)DP= z5%G0gr}SE16SAgo9;NS41#oHW2U@@(pS>=d{X5_PEA*n^3D(-_v1-N9f49QguCt#` z5}O@oUB7HD$u`*`y6?d+{dLnu`E5z!PF`PMiA`UDO<&F$B4>_cKQS6=FNdyx#pEg$mJ z*XOae5+A#(8g3@7J)IH<~!F>zY{-TzH=S*JFx@iJJ(UaPj$a@9rgPq?su-EekWeQz*qdh zX!RpjzUZJ<%y+J%ekVr2eCImqcj5!gcdny;CpN%*=Q`^5QujO8QNLg3e&_m* z@6;C^ureBmEJEia6LOIW`R|Yk&U{dQo9)U5c#^)QePrPKIjq6sOf%^(&9@%Gc92{; z_lZjQoq1-L-!F3cojzjpr{qwL&X8bj?34UVUr3n~65j{K_ryVoU-hg$AQ{3w?+@4+ zc7G6C)8~um+g9~u8=jYJ5H3dUY0eMXhu?quXmdp98mABbUnp0yBfZ?OU7*|p{};^Wat9AJH`&gz}j zrn7SVj8lR>e^Z$+qrZZ<#~OI17#jk6SL-j@!t8e-y*$@vKl?#!jhD;Vqm8{&m8Nds zuA{_4W;R&C{@Z+0bH2h}Y#$^>o4K4LvJsl_!^jpW!v2u`?TL_u>@a zbpIdN0Kddec-0r##@_qkSJ6qDV`6XGwgxM+|5eJ_g8K4d~p6nkt1cu>oWhu{#~wJ@mY9% zqCY<|k@p4G#Qt(O{lGmxZ5;?$3GX}S(w&;`pJdX_C+(@5e681^cP#4zL*tl&46B|s zVyhR7Gw1uV&TpDo-}pD!)e-j0z$V&S6e~6F*72?xdtUwhzsiXrU{38gWn-r{VQU>O zYQ8REWeg}wsjVJ%DXOM&mk zy4PR*D02i>YcFStd$CQj^^`_`7dkU$0NHi>M4=y9#m$f6e7Fk#IKCQZ(LbmwdS`)8izsJB^6XSari?K#HtZ!d`dvM~5 zDKJLlk2(1dyZL?OJ)DyFpUKPf2!8R=Z#9?h)z5>sRrpxFPh)3hrQwt{j8nki^cmp( z(1qI@C<=QpOr0jC*QqFTIR9{++T8qFllOQa)}3uV{U_S4u90!TNABlrQGcX;{)Xu} z7ZYQ3@jw3X?*@I@b-QTSiNpeY|T@Jg;kdeGD$K-t+qA(x(ghbh-3t(|ge; z?&6^}rvvx+;OTezoQvppz4(q~&nsp@ano7{uXVJu;3LOo(E8GRVwNYht)d^@Oh5V< z{pjQLqfgL}{)&ENS!K@)#tbhHHUzq~JKKF8&HprT4|enc$BtGV)gM?pL7(Kz8f2fx z=MA$1&v|RlUuWH&CqG}OJjHjTTdJoL)6sL0wdm!5wVn0o;eC}>seCAsY0+ahwf9|Q zm1xWuJvO#|GihUfYtesly_fV4@~dL}<}1HEp{vz7H-V3LdksFK`$$vhvlf}}yXHFI z8|NlI%=ao69)5E6jLQ%I9yp9MN`6cp(ISd0kJFa~KLQLr>#W~$lYVmBtN67(LU|L{ z-H^2KRrDYWw}5Y`@uqfkQ+B9vY`b{C>EGJ2Lz|p6P>z7Kgaconfs~tc`3o`SFD3rZhY~nN@@iD?`V{fL&%Y)}=p`jdS)F z5)Bk1#kpYHMT=#E0c?%kw2t5|cucOIo_@^BH`H7K}F8_p| zoNTp=@AtjvYkdvh5^c8CrVT`=PlJc(R1N$tYz_JDy4YVJuXAdm4}Bb`O{3^b;V6Hh z`Uz|6!}8mX*1qsX_=#MrJu=o>n3@)!sfoSUH+<3~zIFSZ^Xl~N#fzXxX5{X2%2s}d z-jmx7l7@Barv5Qt39k^mmzu`KXKO0Iz38{<|8-jB-LfrG@zMHw57#sDKmPf8j)3ds zl{_Z4ulgBq7at7Vb6`{+ekb2Lx=edJ?4-`xV?yg1WJ9f{uFg96Jm{R?hMY6)ozBNj zy93A7i&1o4ZqZEkrej}6$Ip8jf7I$0{P)o6u(d0s{>}Kru~ifox{^0wf(-Sqswi+0z--$OQW-=Lldrg;kW#iiuyQBvV4nFI2EVKNL z4(bJOnf4Pei=T%3eP@f#bx-AIuTK9?-PwnKRg^a3cgilGnXrhL#2=6xt-VzbFP+-v znQH>im0?E&gAPr$3=Zy_OMNqev2Aafw8eM{|z-*Zo<&q`EX7inMG z8EOiBk$B}2t3JrsV(#fk`yu*vs5r9eit)sXGY%QQmbCM&#KlYNp3b74zXbP|A}cX& zOr(9#H?HncXc6>9STh~W(zEs-W&Dxd;G0nQ*e>eE?@`7V^viC^Kl)vJ%N%^zx{i;u zN6JG@Zy;}m+rQoP_bSn6zO&zx|DsrTFZRCVwA!$SdKR)bsPxVW*6_wz%f~v@4IR|M z# z7khNj{w31?KLF01*kPaJr+I+qkt<#r{DymLE0#3%`6n@+%dN@k1ANoJW zasLQ8awc^ToVq~ko3mvzJZ1XJoAix0u&=&Lxf6e9eOUc`oDUxWXO!Mq5NUt2-`{$Q zxX{6dF|9HBTz?uKQ(g>$)|vA z_~CSU@;J8OEO^oAv}x89BU@>kpF`)WK<1%E%p2zqRBkK&_#Nl_0>y3iK*Q0#O8PwW zI;_P?_<-GenUz$#gs!u4`j%Vmy_ZFjN8yp^vC1TNT6YWl+DqBAdG%=W(a3z}^p#KX z?aKE#tv_+|NiL6;Pk!wu(Id)Z>eEZiwNsaF)x&%bSo_Skdma5^c;cnXWDhjsy}_&I z-QaUpx}jScdvK)E?f5X=BH0ezdajHlbw+k*a81{uL1%2>=$lFX8fzFlJ|vko$@Dwb zQ+0lAuF+oxm&gThQ999S??uoB84^OiN8yJ)AgO7p#9_SUj0FEZVN3TjNc}Xh00{&q> z8|%=kpMG@~ntA;+O`ep@=DX*k_xWPoJ7|pp9t{^{r;=`x^TPjmCq&qg>e}1NR(kc@y95NPot^4fXqvS+{k3fnNhZ zPfnd#B|FKni*LskisEy~yU4mld(U^`mm6fR(6rHG@XUH=j+%L{WFKP;^S<8o?=Y4K zem-)PIgDqAzOnv5eL(XR`lj{MBfh`vexHqAWv`0jM&;F92G>d_ZSW_N2g|^v#b@1O z`?lcv>`=~6b$U_Qa=TGG=M!+uf8aABBUbJ03T7tb^})bPD^;hZWPPz4p!q zGQwwwq5mHF%sfzL`Q6eb@}U?T0bBA_#((%wMvOhRx2*gT<5)8&S`YhlhiyoY?jBF5 zo{Y(i%+|PHeuUB5$xGh|PBpa6y2ArhW8Iuw?IE!@lw!EiS}IpCLbVU+A^N z5qul!FB;EBXpjHk`fhlrtlgwZ!q4xPPT#@J@S^(VPV(q^fcNs_{y99qL;63FcC>Wh z&e*wdNN#Bi<;ht`uQ=^nC0X5AELnRvZ&z_5R7BhzKj|3aHC9Kz6gl6;7(=@4DtIf^ zPtm}-r~vaSs$=R{*y1mp?@c+KZaKaG_sa3)fM~9J)!QzwGJYcCcS?~HqubSv?AD$H z(N9HM>6dMH&SZ`i8+(dx>Y+aT!jhf#rpSYneN&sFSC^Nn|4+%aj%*=DtBbSPKesH> zu5sxuVlmD#4{{xC`Rgx4j-JSw))ZpAP*54_Kh8c+A=z8pZ`OS_<2-yyA>_HnKZVeG zeK?YwRT*kBYf90vk0%Eo?ih1^vHID|=!-4jQZ>PvLRodar2jA0lSN;xH2%z*^#zGq z_C5g4LcJ@39T!hWn%Y;GC#S9^SbD`$8mr$I-UJnv-nqNXaB9+l9b z%B9CK{5^4KSrrH^LU&cSV!JABKfjl&Lrvc&&zj21`|qR9-zSgmXK}v*8h)SOPJ9s3 z7k>*azc2mBb4>aW|AcJan_+Y`h#@=_H=Rj;{JEF^<)RFzx}qJp?+fYpkwFl!mnFH z-0Q&%YYKLW!MPWl?J3-|=X;~>3+3zJJ8@s~{r2G}S$l3_OR+7Hh+{S(hKi7SpmHZ%A z>D%hc%AOB>xU%P+d@wAR?ITVf1E0OQw9&_%^|)bk3J*drD{b@O+*7{AJ{i2QSq&PA}J@PP?)9G>H`D85;B6>R#>msK!Iw18toQ%Cp4qFwJTEFw z-lgY7?(;R}$&GrxCZ&uNS(#oxbj%*Bu>jv;Mq)GhE>usiJ>{$DgQwNz_O0c~D&)W) zO&qf`j!T92?e_pr#JyYpxtx_3V%9FdXkpxGwqgmrq ze2TtZ8Hr~66edkdd`kP5!E_X5fsXU~M@!q8UkmqOEKVpnIjE^Iig+mBB+LUMV z)jIjieSQV=_PJrbGaMnez|t{<6QA7_brp z^Q*u|-kLh1-_g~Zy9-u)=&4c%uYns2faAEhr#X0+gA zjMMLaN*`Aol=O|-RdW%K@lL!eUD-Q%=QO2-{tE~0`L_|Y6-`>y--pJZ(Af2N$u3|l zd^rB#TFx`JN{WCTm3)J@KJhy92;c1P#!ukzz4oconB)n3 zKZV$VKS%e-o_`X0)nKa}=2>$wsWNSduT~Lfz#jS@Efr_*P!{uf?p!(c;pzveTbH{g z>QQ1uJGjSS$ZIBsLiNw>EMh-E&f6+9eYM-3Y~G*Bo#!(?hCFzBBYh|C@6dRN{d#iS zeg}^X4*FV;uV)V%hu-*P^V;Bz?XP{gyp_JsGv@{KtoF^t7yMc9h!d-7TgHa!E(Dht z&-1}$-GoU^f+={e|DbIJd7r^&QbgOz*QvfC8;o{86)+szwM#l>)bcJ*Y|+A&kN^~=LFwuV9v!3J<0m7ChEBStC8~>D;&b^+5l~; zC`b83ryykshd&Xw=auy;_mWF$YbS1P*teE0Pi*V02MbsyvQB*&8Bl=_Ek=K^gZp=s zXDhVp9^H*;|a78tB?$lw~wpfI%jG6+dc;ke#N`zXK{9*`r)LGB?Vg?A6-Gfsy|O3 z|2TG7K4rJ4UqY)E(nEy3(LcSoB+gkv+gT^KiTj?w)UXd;qHivIM_PEvOG~^(Vk&8# zervF#>^`ghebblTUC#aqg1Pfg1!i3$X^u<RLH0d!!%QwBWTQbFKsGKmF^&Q7c6{BrVUcRGme;yJm32w_@vT9yfg9~ zh<_cLr+~Km;IAC{m4mkW3URc=FYj{X=2ppJyU=R2ZA<;a*r=Xd8o1}jL%Oboe!Yit z6q;xITdPR-D0-;nQNN>W=+wGP5nB71L_VBHer=y+9npC#>lu5; zfv@vkYv2pU-_Je-?d*Ba?vPFySm@{!;h^$_hh#`}exy}tvnV6ZRp}diQyJsl@&<9X ztCN8&WPKK8+4xuOw%^e%4HsFD$DpbD^nYcN^OPqJa35~9AJbU#K(jgPK+VdwRf-!uEjCCyLg@n(b zYip`}Fa6iO^yQ@Adg1h`;|}4}NIqz@&y+=8&0*N&2k$UCr5!(qUy9)Ck>A)p zLe5uhk8=${$M`qKv}<00wADMg7cNgepFx~~ zl^6fU4eils)+YPd{oNbDD|oMoYpJdZ9^7HK1|Ny$@Xc@CQcH}Ht|8Jykth4;{~7RA z0GOT~g)HqZgO;+DO+4n5y%4W@5_LU}EltFM?87z)ysrT`e9O`KC9+@FIJDSD%w&$n3BuiaDI;0) z>x`u0C`sG>cjQsp&zh@ZDo6IEQStcgFdq59otuKgC)04)IvNhW;PBgF99FtGC=Ob( zFdc`H?d8xzb+Ks&`4_c6IlQnsy-ltKUTT{x<~bd9di@Ms+U(un&Pjt?bV0bOal%96 z@HW|PT309fV;3*fJ_S}rY)2;YHF!zK5^SH6D&6}!N{hKyjEKdaTu1ShsI6gueaai4 zTwQ0<2IpwQ$y^0DNZu^qVD~fj%RQuXA=hXx1ZX7tTVt6HU@6w`DP+GB|2nDdIn6OM ze&?NRpzeL}J^N{FKkCnI+5paB&X?2smv|?h5iLiHA&=27&hTCR;@70D8R{2#ZO`*8 z7{B7Gy(&hN7Yj_iQv40>S#eIh^)Maj`%D1oeayvCV=>Wnibq#qW&zWqt6-+mwj4Y}+uBiR8%IB+ z({>x>+C*OVynC;-y^pl1v~6(lzL)DSFF@P>Hfg+hb1$xcxKHK1aD9>( zs=b?O!`rDuU{OfwV`%P>O{-~sl@6(L0D0?aPALH05 zcjTD)=DIFyn+U%u-f2#l^)u{8>)cC5brDCW_ZIiqN9LaS%P?^yt3wl+i{Up1`gL*b zmh+pzeVl6}zo~jZCZ#<0-jv6j;65og`8*Kc*~<7e@g%1=f|9juhksH6v7@C)`&_UzW*a<&BS`W)d1pYO%~ z-!2?wkAcSse)Hfu{l}Td6}1ulRi762 z-?e=OSF294ucMSH8D{K_G=G-YpNpVf4S01h&QLoUT)u_vZP|-@fKh|ZT*LJ@%-73) zwo?8MPZ((@TbU!Dzdd>6Gj-l-mtV$wqt$Bpe66YU^5V*mDs*mV-7W+CO8;E~4w$5s7e90a0$(zJOU&y}`ryW{ZOI3X0hGZ~1*rYy}iF{h) z%dKlhc6st>E%JylPd9D9Z;*YBynZtgKG(Xksl*UX0$fSJQNHN}^oc#`)v&#dogYxM`8Ey16U5BPKqF){ci z_KF^T(88Y8SZ&WaIxWt+zDJO)KVn@X@pVbjLTjm30(bJnNc&T)EnC5T99d&ewA#&g z$tda_eEEi?Xkb%!Lx?stG~*TZKAR4b;Zqn+I^=w+0e+VQ_H|u>g3d=96!NKQx~gU>$APGwZ2dE zo1Mbv8oPE-_ktC+B>(|(z$&uguOWMLHkw;C@q z`pMkW7t{wFKF0oW*U_iWU3>?;sw5wFRcL-@Yw_vp@nHp@T}V6D;9t^r$5wlH{}OR9 z+ilj`(@w?~DROD$1FyG;^;6%rQ|8CkiYJ&K%Vd5m$o!b`pZGFOtWd~}z3stg>-1sA zSD8tAyCd8rKW>nCT;iRZ3aNXLc-({X=@w$U(jUqqb4?8HICL^=hO){cm-iosHGAcE`LWev{HNKc3!4f zKzN{BbD3>s-jV)?EY6AE%^3%jCp`!+pda0`)8ulhpJ5g4Ui0@im@+z`kAYq4l#l$# ziT?c<1M}VFyX?CdZLTzfu8kLS+uNb%Nc#?1cPg$jIj7X^huv3$vnktM=OMWoBaL}? z-H_ksap=05-@c)5&;dL9LD2ym%(zW$COgPCG1d(|x>=w8u+~DR=6Oi#1L)7nN4*XG zTA<%q-sO`=`ZF~>Wtcf$$$G`veG-@kx1fo!puIJx?2HxDZBL88biNV|1Yd2dexF)T zl_hnEQV?X<|py8H~rHh)gv%dh;tDUmm7DTf%uWT(zHY5e~Wdv7?!}O{Q$l3{e}aT%tg{cB$HO(f52n(|!Iya=;Ls+r z)An^CfBi)lvu;uQuZ&GpPIO{dSi85qnKEC6KX1Fju?HmAy>dL72>zK>DRv_30=@n> z$Q})8ar&$^)p_eq(D5Hn?eDv7fKF)^uLttv#?^zr568!KxWXo~J zYV;GcA3|?nGWJNYt;)qIOY#nSKLBr5Q3pG_9N)xnKE?klk9Z7x65^+kYn_JY@YKEr zhS5U>&ksEty^!*3lKt|SiQ_Rc-N?ffy=T539LDd@wO3T| zmPV4P?It`~WATo*E7TYt9%?~m`gdKNfR_&Y8W$xhu|*=txqDpPduUhAD;~97Y5Spe z6%VL>N9H;FHqLEZz0U!bsmlxhXYK3MU-saTj67wpblOAv2dJ*DUUKTyY1-tJ4|`wr ziczl{yn4|loS75$+T~FfZ`mPw_hod3X^)h(E$RGV=v_O^44>s(+nTWfM6>(dveieMEo(|TAIuru&v43uS0xWTdn8DHWSUd=wQk+lUSjHALqC&! zB|X=Zw&um5>yJ!)&+Cfg7+N3f$V%;*(Zl#gYt4HZv*_%a8e;9mJ5$TY$+kN+8JRbo z>k@v~@N2y>^7NS%#ZA$-U+f~?UbRh(u@(DmwXFuvMW3iW@3$CR{lVBm#y6{eUSqRH zw84>)1%K(QZ={bM!?sw0R)m^zfSH=d(7;zaYhq0AwkGy+Kzi@We%;&bf`SRey@Wx&PpSVJ=Ub>oh z#3lABb_v`hpMH*Q@pHz|8o#K0Q~QjCKk_gp zcl22YlJj5b3Z{-VK4FbJ-wpn&&KTg7)w`q=I%5OPNnGu`V{O+MW81s(#H?++mbQou zj}=E<+i3V9MNcw5J6yBd87Gi;^-SQKaoO%aKQ5!L?--X&8^OnpO!DT0sVjIpWqEQ? zGJFhW78DX=fPCx$hZ^dTiM;|ojQNJ`InEL=eZ=C=;cMxaca(9;?!BwjCWh)l<(+07 zxL2NshkV>M0c+nMsguTbA@PShR%E;vz7VYE(_l$Hsc%H6!wbMt|2DA9I4;lFN0Mn5 zo~IsJANtARnA<+W)r0>u<(e@Z-!yL1nC>aw33dbJ>iP?OM5C5t+J9s@=3M#e%D9&u+Kv?M=uIzm4qh;tv08{IvEy+51r!$L|^(N3LZV*}jgv(3m^6O!}L-8SI?j z5ziTw4ft2Y?DJmZP77OG?PRk~LeDX9weh!AF>b#o-`c)ynU%bqvPGNkk>BX<6q~^- zciA?0M7s1h@g?E4))&b*jAg;_UiJE1V4O_@B))buoAo*DZTj=UrRO{kMX1 zF*p}6|5XFsK0v#mD>+{>lH@!f=YC!!xx~B2wl4AROCrguz56+lxX&AsuN9~kzTZ%|!tcjASKa)PETd zA8w|vyrMHQ;Rll@rB9;6x{+sjKKL2k()}#sfAufrIZ9tv|I(SUO2>Tv_EYF=`Nw{( zcZ?;KPHCPOeBQr88ueAzx7)S>y{x>@+_A4y%2s-#Kbh0fS&&{^di?0jD>?l&Judu4 zWM^FdY9DQNLnQg>ekVS>iudV#|GmJIe%Ufh@rv5hG?Fajr+qqV@Y60B1!lS&PLC&) zK8d>c<$@pj#`M3t!Bg$v@qVhmX(u#_QQqYLMR|U=yj<|EK`uyEyg;0^?xU`}_;a%2 zP0}|YD}=*q$i55GF-4E|(C=Ai`Y>%?O*>bwL*B%wA2B7{k=xrB@J?xtIWjtIWKYWY zahQ&dyn`;-wxzPsx@$IUJYR#{S^&(34GYiT&YW6W2X-I`1v0@b*(jE`own}d#3LnBb(yb&3#uQpV-ehh@U%;{h4g*{_3(| zr2ZTGi<=fa9-jv9hA#szL)-F-cG|HnzjNEPeb~>c!&J8pi|L0NYfK4ZzvE|-uFsgr zzEsF;__wr$Ih(jOWpUL#PWgq{h0(Wf+!negdY<{v2aAiQJkqs!&G}G1@{9DLUaM5` z&5A4M43?GbUtBV9PuB%~4h}s=8#fKpd$NOT^*!*(67Zb_uGcU(U5f08e&NP#eRn&! zEG(MzNSyW1HgPPBl};l&SI3X(JcX%O$BC&7AxCy_J%ituINo~NZgq_>mSgM!uF{o- zTtkmKb(Qb9g?b29F=Hs&;jq2Q`PK{_@K@zLG|5V8tuHdrEo<7#SE6AHF&J!u!&QZYlQeVf*6_ zUTRxwj!*j;9+nQ4oo?P053hwAbjKhbKYDOJLmyCDUwLL?8g`y=@X|W%B)iUO7tJ3; z*DWi>M=V*fCy1U@-aKDsVhi)g&O5XJ-yXYjQX+n-)w&k=$DnD1`GxzKUoN8GT}3$| zuF-WI+sM`QzZBi?)bqzfajmbTHwOY%;;j=}6Kk0@v04uy`{NX6BA&{%e)1jqwc>Zq zWgA}KGr7DVVY7!FKK$w}Uub!xn6>j|zWll#;yU2d?46UWdi7cRCp)X3p`Y}yUqDFo zd#*g$`~ho~Xc%FgLdgAIMBiY}yuBgEmtb6Z5_84g0P04U??)zlD!X{+l&d zgO0?1Cm0>{+gXLqIy;?R^Wm_3Tak8RO$;pYQ90xL6VoH5*awNF*vicDmS%FLpO=;~ zM;4{*x%j4+5_`a!h3rpP%+)@4E9GV0fH|EY>An#R`FF3~x5zo?0n{*vp<*7)!*YOK=7$UEp8U)Rc5_Xn3pmiz$O zLcJ2q?X7&4^(d;RXnn_StN1N=Kr!H|&xWfld~@uJ$~;Ct`v!mY((gY)zLn4|aoeWb z?)uOi>n>us*=w2gNbsZQzgi3oi+tKYI|{$O&N=eKanhsMJ4Wv~aVFR(VaamY9@|(K z2YpVJZSuFnC-Xaz6~Z;db4YxaC{JqMiM~I-H~rg6rw_|7MJ&OHys|^_U$v{fB=6rf z1|>zOdHp_hK2SE5c+zXvmSW>iX3wPAiG~X6{D!sYHfUK(8u59kFjg&I|6qPZYjRdz z&fHB4G~94&Mxypp83~*3%iV8t-EZl-bqJ4l#(}Y?jjwG>Tczd!_t^74+)n(`hGxlF z*$c?bZ8t`elc{$zbnIvRspl5#8QCk+U7kI2Bkk7X*fV=<)g@*Atd6#Rf;`)9bk?E; zNGo_R0uLQw>>=TtKBsUK?dip1k`9KG{Xqj#ilYM{m7 zff;5kh3qtF*;a$xlukIs8NH`wTR(v=br$CxhSaAe`>B)Uehq6p$#bQ~piB8h`F-S) zaVxI6ByYtD>Ob+487pkwWpjS7ovpo5GV14lY0rxJ;k6Uyhl?i6zrp(PZ0RTFJ^Md_ zZa83-p8SNBXu<|j{tu!fG@fZ7-)_l|rE`}^A2hHZY%TegqX*ctujE$ny@+ytcVJv1 zP>9V-Ug==bw}-XCf1~fbUz@`m!+{L5?jwWe8>GNu_Zqw zGMDl)$^S=SzI?z={Oz2`U9T{&{F#d4rdQBKzx2(x`W1B1#kHSaqV{=(_^{z`)7@{k znYD!%19O5eujxN-%_x=ZmkyNt-+(UAIFa~}ZqX@7d0Aidt!yBk&W0bd?zL7*S2j^z z9pyDq-XA%~LUSxxWBeCLH{GNg=L=*@#*U-xCVytrr=7A@uF79|5ZwcBBwqXja)a}Z zG%gt&)z9mU71PIJKVp76>W;-E3w+30`p>CJ*is$5FJ!E=3wb2j{J>?__UD*`vB8Ju zZuCp_b@cW7|HK(~yw7Kj{2}^LDm)vRe2}=SR^apjC)1aa$S&{v{(Q6MCexh3A-apN zLwvi6_sCnb7Uyq)E0{6C1cn*U(l<|0SMVxHeFx4)#(MH0S9vaV#;nEUQQboLSv=e{ zF8&^HVvOfDLj%!mG+(vFpZa5}zM`)a*H4TNeNBE~;2yTy%{)l8`W*5?zJ$Y`uTb@n zOumLIcoCO5(zoToabk|VaoWiFY4v&8nTm_^O34 zANJ2Pr0vCC(KUj6(tJq={P+ZG7o&`u`p6pvMhjQ^m)S4%hzsZT3ewC{oN-?NE@0@p z_^^=cXnJXgPAT!?(j5(cUw;i{Dy}t7nW<$x>6W#fvQ)3sx%AYrs~aOv`G)7ZB@3Pa zmu7IOVSdD;8+1Hnt@MrX%MZ;nFfZnfAI`H^oz`b)Zd3NV=Es;D3!e#Ow5^A43bm)g zf0rlw;914lv;T3}-E*Bh&VKPo_LJ&V?rtX9Ic3y_7Hc`h0YGq28?Hu(F%(p zajaWBvX;Ioow|X3CBE%p@70aO^B5TTxYS2}1<%z0JKc|R@ws&SM)mh(7kZC89sf&w zZhRMfG{={Yi|O|x_}SN{x~oocr;qRP`gkfGsOKKrt*7nMM6xPIypQSoDKsDIH^zQ< ze9Tp%^}$NBp8)oM>ELmG0bl9hY@gP%Ys|aVi>p?-eSAN4-{$wf1kD*!J=}MEm`BoM z!utZ{4lj`QOj)G;KGNsHBYm?|-m`ByXS6abzLN}T?9Px(a$f)w~=CppB;zv`SY~oilBZ|%2@&z-fU%cECx?a*57DsWU;uaVE;myzrFRF?h( z(*ou(>{|Evu=Vlb`V|7B9$IL=N#BS0Z1naQecvk&AQ$%u$B)w<{-FUOEdeox;wSyh-Jyv+&YMy@!{; z0UH{A8jb(c;@6Dq0ly&lNk)gpSUJYmh3+dGGwtspT%*;I)_h;ya>*9Vj=g7|)9UTGh+9vt)+pLo>Ys<|S~6WPQJXx^fa`ITdjGUm9CwCtPn0riWKk;Zqabb3xy-bJ4_QQPP$v>l~ymk2+i*ApG9UCXkx-xsEL$6TD_*FJ**FBnP zTql}!a&5J4SzP5Ko*CN}K5d_*`ez#3%E*=|@>O=0U>V*R<6G4tzbo%8-rtN|z)w5B zS^5W=7II-}3{yLSe9$fg+!*Pv2fuWg>e0=d`)u~3`JoxJY7Rqt$r5zQJb0u%-|3r& zbG65nqrM-4DzTHLJHCI{*o!9Uu@-+J+?PnN|58U&! zQEf-)u*aM~+@Y~p!Sm+%H~3WCXQzGB{qaLS&co6D_`Q(#cEpLTkYATMu+>reWpuy4 z-K?>^H?r-0?C16|Xw>s5BcHlg| z5Aufxt>sde>}-o*%>fgYKi;Tb)*-%Z+tadxOKuUm@R``5uG@&p2dyY$$t?|$V_>B0t zbMUn0H9o+e39Xs=P3%3H46+}1oV9<2>?LkzM9f?ZYu;G%=iJ}M{TixZ{2h7hSt=H4v`zk9-duNYnE%&ki24?{DEwH2$ z9@H5kA<4r5$EOTViGKk%@#LWEuh1T{7Jp8EPu+Li@oT@%_)Kkg23np|n;JgV**9ue zf4G7+J;Pi{*4PMp_{VZi(gyf!a#*(?9*?i2H8{Shm^Ll$3^!fj%W67^-;>yeI`x-> z^kdztzw`yhhvW2_AnnzMy+pgLRNQ`)-+1!A5*XhmeK&!+kLMTV-EHWfL%_>KAFlCb z)y=~WIRwnH%#SjUV%`b1Vy4YI(!J=GTcB)_xZT{_lSIivQp~ zx6q!sVs?#zVEkg83uleEnAa9-(ma4v)zcjrR_e4EOB_(-}ZChOoFCQ zvbXp_-9wLm=QC*UJ&|$K9 z((QQhg8m#jkMv(PGv4nD#2&PR9XkqqzW&+BP5bk{M~G$H6PtDuaV4xT=Zv-7{GB_D zoY+^6{BhQrMHugwknZlOj9-wS(g$mt7@LL4t8^_-;(r5%dM{d1qTz z`@8ACMWiiYET-Qu{^Ap7Z!*zMvPS-mp7mDZr>Be_PZr~UXT3qYWVPmH`wqD4u(2Cc z{W7yjmrWU;hkunu{=pXHisHORq@%4h7dP5B9)-y3@^9}{yg>-sWf|l^pRF}-W1X|6DRU*{5bMy?m|z_=3OdG$z`S4 zmXc-~@3OuaIlqBDUrw;68aDL8FnhS1WX`bImvyMvm)o=ef4cT?>%`YNi?SR#Pip%X zF-h_jK1E%=08H(@qB3eI<8GcC{P_lt$>Ssru zO0LOvlrI%~d|z~Tq%=<5#G6+NkKI-&enRNX818Lf>xZFH3wz&0saKS-W1N1TnrD`q zCqmselJBSNbuRlehAvRQ?#m_Ch+iM;A)>(Mx+6NlN~&L!0$X|F(3$c!;TuRU;9csT zEAr_U0SCH-r?T(I6zrJE`hhz#XshSj`|CdrKD?YCHdMR#?N)Fd^pEM^LVKp-`x-tf z)v@P|hNGXO><3+ZJ4V5GOfI;R_Es0)@xWD{e+6IJz^S_OI{{gwlHha`{0n^qvN>3QB;ypMh_ z(uxl3UyDzs2L6rFf8=wB0e67$b&YH{?yrFEnzJ~89TjS{61BUnR{5XkYlrfX^|p2D zLD^e<*js+`H`0$VzzJ8O#O z`?%Ug#L!?H%Act;;|!eK@YC3Gqsh4qd>>wS^P}PTul0e}B=(c$ScY3rr1`P4GY%8s4 zdXardcY$jPmUwTpN zU>P_B{H1@x8mzwA#D%BZR+Y~D#0mB(8DTTIw$&VL?>^ED*;eW4z<I$j?vX*IFcL1XWz|EleMzR8CQ$4_puS>qEZ zx;&x&aF{i621fDl`Z3YllmV?jN*VBXwPcjaMv*w}K=~i`%D+I~n@l@R4a3ukpT9Wx zaFRB7eSIZs3M=4$#T5*%C-8xkRcKi{Q)C^uQf7{9B0cv!?CqW5j05C{(Y~PSGd}?C z;C;a(rVfqe_+ET%t2t+IcOmBuL3{BRb=Tbakna8BNvBR>;EQL@9Q7NXJ##eBI(Qj8 zQ|T-HHMXmKE$`r&`&@e*f52!w^G(_Dq#5Fw^mM5_llEcsnC~&Zee9poSCDm{z8a}p^E9qOx8{d4iLsZRVW-(Yf}dsDA=0jKjPz=O zZ%lvRn}e(W8r#l;>*&E@c(37W7QB{$ciJuKF;t?De1VeB_kj;`&&V>pA32_Md_njW z!$y`?>TGCpj&k@G@d4*jw$8Lx+4$V-TQ#?mw?SjGqtH}wV#bH|LhW4zzT6G!zv?fN znT1^6ErxM4e1)6-hVV1<8IInToOEnqf1Ba~ow4sx#=d#|`ziM+;{8&`rg`A-B)V5} z;hXGzC0kl}Y0P!|7xEs_d&!nozKLgca)$g5a#p>u8(8c7`G?eoF@Jv3#|z*?`nz<0 zxu zAq1_16Tc=~qIzkORovIvm{S$xEHHc~nVr{a?qqAQlXN`WzV|1>MV8qU%jvRc@#2x0geg3!5kZ-r}E#0T((QVl8?(m;{7M@+A@tAxh zKAU|_IqNj+tidkv`t2CzxqpZLa{4dnC`)6ai|D_GkJ5bZo?YPCCeWe#66pGlxKz_0 z9RJtt=tS}KKXJu}P%IwCkI=4p5e$-tJF=J~VGi{+?ul6}k)P%B+;cWf3H@hl&9U<2 z-!p&GaLlLqK=$Yur+qU{*^dwJzo2=^jba3?4fAL*-krfGH;HR5ed`SC*|WU+>BIrK_h$Yi%}+R5Ted-G&;A|eD@X3i52ko2 z<_6#|WIa4}hVjTl_#xq&?&dMhT-Q0qVUoA+(8-UwIvJiy)yajf9ruLnKhg~8?U}?EXit3hTDns{2A(Sz)9L)` zUi$vvlUDuhIdNj*a@%Giuk8Je)p?({rw8BIS-?G=%`1hcHus-KOm&}Ytqu)_r} zS@kXG*C^lFXE0pA_X>QDWx(wuT`Jsj@V|j)*;#^R>|yf9-TcbCnY^l(?2fa6yyZ$K zdT5*`9~SFw%{h(xp`qGg7gtk%Xm=J|wQdqS!Srv9*VWhASAWzoY7uOi}chscYJ>-d9=6IF}|yO?eTB? zu(OHRq1+nyMzEPzpRB$xjr4l%12@I}o(aSlt3@_pmoChPX1_J*ym5%57v(=p+b3+( zYT|%Bd*xPO%3hJ)^K6qoaD->sCoFnbChK)J(07YQ?i04D5*Ssk4Za!}5$@CX35!4X z2z%(-buG+&G{Zm9FMZQIcX1#8;y2j`*Ir(BiNiB}d5q!b9Gn)#XHd|BZvdV_z7mgy z&O4zw)Pm<*-24&v%09Zoz{1zKx{7jaU@6X^7XO0w84f+~mJOU1?>lFQs-INx&6G`g ztwYO*Ro&gpxjI^3Abi(yUu0d9)9cbRi}yh*Yk3*z9{|>gFYlaIU}e_z1;(~j(cgN& zVS~Xfv#yG|JwV;Etjy&NZrx5&w`FqQieT{7#M!F3t%Gs(M# zvZ|n)XrTV`2i8;kKKDyIYT=10n!ez?wXRLJv5EImKK+0%DBUs!xrz}?((kIrKv9)nG1htU(&h6zJ!tM z#PgPLp2MMH_B3Zs7r7T~VjgeP3Feq>_K>$pH;Hf3>7M@b#%RWFqt4Q8yWwf{jM*E! zgK`ZnONZ?r@jEdhMqg~?do^()uk+4>>FgV>J-sG5_Mi**E5L=;tU=3byMa8K?~(jc zA1miMy&R<*ZG16AFXlNtJ3gIW3y4$u-_j``IyJx1@ZgVA>L^?_w%E;kBP+nIW;!~J z_c`x|dzwva@uxV8)NzqhpV8*e99bg0{08Gtr+~8y`$KfnSwRfqw#!y{ zkulr9=B$1rl5eeEOg}!uSr5!>o@zOEee#8iBAXiU{p^BYCDVXmWaAmma@fYcM+-=& zGb(<_`o%c$>DkU2h<$TX%0>R>sLWq6&j^h0H^4(>2)BjEJh9({GTnlOJP50cT^93@dM(*yQ|L5&j_bvP(y}+}ngVIjNuXqlAm#u<)Hs_7qF~QfQGNRZS@}a5z zdCVQF?+WiNz*zuX6iOcFn04>PS1p=s0ypSc{eAVR!1P1AupP>*{C=Iyc12;;8@taA z8XvXbSt;=D0N&9vgL|VB@|y%N?_R4_ZFmjwMO%!$mzQSm<>3!4-_`^Ca?;O-rk+k* z2Q1+rAGw+TCymPcpmZ$$#ahlcDC3MVy$jJdkc*po194)N(Gfn$LH4;~T={L{SgXc3 z^WY}G0~cPI(sl>+)4Q8^r{^2ELKkCWe~o;eUKC$_!1p{-hvuMkMW=~FFao@*SQ}*^bH|+`f!(Q4y?2|nmH1oTe z$X(6vGPXM;9%TN)(Dw!M#x^Wq$~)Gb2~M#Mx1Vn&|2lZ2lQicvUjfZ(;lVA;MJt`+ zP84r3n#>!mu75%L-)Q}!yRW#BBPrv4`GrDiBi6_x3zJ&!B)!Kwv)(k=QrWIGr?M0O zfc>xe6O}z`yxnMU(FuPJZV|rE_X^kG+M9`=&DR#(wC=q6qUL)pg!2zCfO9$>4BYbf z4)^S~J>kcH?dWYU{_i+G1rs;1p1y;f7>BpD?>aie#1jst`Jaa4cAW9< zYm9B5B-W~sImJ`V0Y5{Gx5~>m^vG8`?#W|sp(hx(w9L{T9L{+;4vq5qk+rMYrx2N! z+xDPKm)l8qmVVcPZ{j#G&6qT8TyCZOIeKVhJWWB&dfY~y%bv~6+qr}B;bFzX*z!5K zu`{xjBm*MMtLO8+jdMicZDT`!UHy^!5%Du_`VKdK=4-zj>7z9KKZ@RT@Ixo2#8qjX zVato`8$--w*Erd1_J&Sq5vR@v&3PT{hi#YNE&3SVPKl%X68^e8&PczXtIkKy;Htiq zdVYsj);|#Qr~IR~qp?GV$Lwm8E@)wBgkMjziN43ROpEa?OW*e}4%Jfv=C{MxS?2p@$??3l_wyWQow;|uLA))%zEs3^ z$KCm z*)zVjZ-Kw&f${N#KgU|a7qD%{!3UlmxP(|SttsJ*!-XxG*2;n{R(&z{euy$`<`9+c zCG?1WrPV%~Y@AMhcp|ywa%(TVpqS9)S|4-3Syo~}fc<5l?PS5i2SlB)NvE{QK9y~z z^tr6xRT}zJm^tR^L)a0Fe@eRi1y?sPwthY*KCNYNXLaoltd-)qMu+Ey@;!6+^uL>S zY-jZ+j_<54&*e;n{Z@To0@ssP{W{V{_p_dtvKsu;>UOi9x?%Iw`oMUuZBw1^o2RZM zU0%cf>GhTResa2-Z~Dr=)cYNC>Nz_IxO1HMJLatXsCj=`{eeuqzs!Aq*~*WY_r>)A z^S;=9U%Yaec|W(ll08Bi_Rn?S&s}-Fc|WiIK3nhSx$oz#WE~0R&aXd!@3Ue5eE0qQ zl}pU~1@!^*eu4Xb!OE-6`;z)f_5f|zU*f(mS$VnMSCrP@r?Vn9lsfM#N>^$gsiET9 z`U8yZ8a7<(zQ1;5q26zPe|09YB*#$ zR5pTQ#ZVTh<&b$CG87w*S{7C!W&uS{nU*w(Lq3>3l|wcsYAQ;DWG1M||99_wwjNQd z_kI7@_kQ1XeO%YR&SLGg*Kn_U-Rqv#y@sdH%877(&o6#P3&5euQ_DuoL;lKzXCfGP zZQK~s@Dy;RjJh}{l)XS(-<}a`z$I|ITMlK#$4}l5!e`l73%8<=51>!!)H8uHf|pM4 z-%MUIxG8l>9ZvZ28^L7{Yd0X^i-?B6W&kj001O5)b_Zi_#25t^XA7?Ra4{2HyjvS{ zL{_v97iY__4;M4R#XIFaxVTYp&WDSc8(Iz@E&1T0#Sa%V!Nn0;{uS9tez=&Kcg66b zT7GQyYz^mhT+Gai9X?RYZ=bzU!#N!nGxORHcWe0_vMqkNn3>mM_|;l|=j^STd@k$iB`;)jcw;9|6ve@%9hA1-Dl zUNgLvjSooAREW^Dw|W|(an4rZDg4iOqQ!`vXtqUGCt`3;5ylAmdI zoYf~n=SO9l8=Z%HncyD!h|c&Vk2(S!O0k);leuqra8&Zt!{A?XBhQGG$4uFo(aBQ< zABhXl#7VuC$CjPLZE!Q0cY|lD;e)|Vp=~L|1=>e@#~y9kGRqtoGy~u7BUdbosAC-+ zgO-mpg~sg+42=r}-%eP9;vOXK4#o**j!COT2DujdAxNV`yi|!GD9cCyRayy8aM4DQL8I7oyPe z-Rwh*^DI5*jwH=Dr(T{0gPSOO!qR+*eCPjOd?sZd|0}ry`XT(d=HHNv{w*1KG5~!a zy4-GY{7Q_X<-k-qi7mk+`ei3_gOrKkahaS$&h3L2`p0Q<7qUPOagoDK5ngPsBPO=; zjL0!J<$lrRpn^bMerz_~6#C_(k1X1oIk{#C{0DTQoA`>9b9Q8LK~BV)cb<*ltbNvX zzH{?3u8aBUIolx1WEQTiJX6;*(rc+MpnSm3kL;xV&z+_y?T*=M=JhQ9=VxCQ`6oY7 zc_)2|?&d-6>jeG}N_wiEzF*Q0>FIkVJxfn#kcOtd*=$T_@7w#7cNb$!H>cD@nwnL4 zfL$thD0QV!E`8RWHS}e5D(Chk?^g0Az`Mv9nTc|KYN5Lprz?&Bx|pr`QvIHU+$Md0 zRQl!X`!q@W`aW6GzP@YY^YvZE_fPtsPPzJhPb05>-|xLd-}Qd`+kJF>kHEa>QScUi zPx|3B^+D#wUk5r+$T$kY9o8MT31UAomNH=GL~a0v-S0LcjjuYqZ^cA=od^@s-th3LZGeb4qJ#~*#57@lxch@bE{ZsB)yBJ^pci$iWoA2wN zE1BTe50Tv}=tug4Htp=I%v%RJ3ythnhh0+o<1d5jcydne`3N~hWCV#F1U9$O9wMoq1SqcT$e`pPP{XJ&9(nsMYmx@-BsUJAt#bskP@P7nQ?@3;$ogU6IRo zf_wQqVM@-dgjR{}KNZ$A3 zy~Hzx-tMU15C3_Lbn0=#8tv8229}!mje+-ZVw(!5ZI`*Gr;OE^kjVKeXI26GTL3;m z-ERET#`Ly+L$@x+0sKM6~`dWH~U!(3*%m;m2 z=#L{hTrOO<(Dk^kwsZXuUbF!IA%iHV;%9x?O- zUh^#lZ?T`VTv;^OWEB;UajCsN9QMSUWeYnz$^6opBE)25??JKD~Ni_r%tFzW_`2f z!=7f1l}+thQ^x!(p?;|&g*t>6k~p4)d>3FcH7-gtOU!-m+te$5e8$=ddSu|Dz_4>` z$IaT&aLpIf{%^~DuiFs?9)C`I?|eV!ENjuJ_PVdL`wMKjv(@&K7Uex<_}y`yMb6fu zAB(HCSkV{Qh@WGRdl>m>5_B^ef61ntjhcZB6wBCzhm0b=fnnFuZBTNyrD@!I=)48? z6ZsB%&IplP=RG=OQA~oI6+zE9b6MWn_m_@v6LU6Fg;W;;M`v&C97)ws)?VeFM^-iZ zv;WRnyXfbHj$6TbFKcsk&hyX1+vsN)WE?`r;jPw2 zn!>Y$9;YU%?f0QaN>0;#U{AjCq!63yVfJ_bzSAD}`)s`Ac>`m8{}rCSBJ(GBMqS)h z6gL3-|1$7L<_)~#9JiUiTd=9wOJrF%L& zOfzsWnehn@p2NMcIPAsQ22RR(29bHfnPWMdwxkK;tA~I2A%Bf~`*-?qkG_xe!#%sK zbIviz7#4vKMc{FU5C2BucM;l9tvNM8+gOnHAk-}P( zHT?%L`nxrKZk^~d$9nidk;B>V*nck6a~pTUR^U4%yx4O3n*YN&K1uW<74>+qvB)cz z+8dH(4}t$mCiZrv#I&(kV#RKPUu5n6G;Ar1V=u96IOl>GsKOreYwKCYtMe=8cz$C% z=f@R0FOE&A*fV9VDwC%)==8v|yrJxE!V?N_X!NU`e&MenJ_&C+2k1KdROk^j7atSO z#z?+Tx6hi3%bwqJlG+6(Jpi!y~Fu;jOzQL4*v@F=AnFR==|>RjZyp~ zoTAkX6HmdDHYkcwNpv9KrrcG71X4ofU8B4}KU6($ihbrYxwc?Bo zD&Ekir(dN?;nQ|#{3O2veSLbKKE*KpaQNB7j}BaPgqSQ&;CHyasVHDtM$Mph&ZXTB zl*Q+qu{3saHVK|q(?LCR+R;;Z?s65=L(ZBf(!SI!d`Nd}M!H`GG>SPFT#T`+Zlkbg z6VEk!PDJ8V6FSRp6T9aMpC|N1_P#ylmQ{5@s`LbY>jm(c#~tp{+RNROD_GN`sk2`j zS5_2wc#`#TV~}cm+=2gHd+s}DJ?2BJucr)q{K&}e`nj7M8>z-1T;tZhpVq=}~`epHj z=9(VALmy;Z!e1_fr;kEk$^LNm``P%c$(r)d`u~f8S9PF`s+jHLkbm~s_ z7_UxWxOeL>?yKIV&dGYnv{|yxqX*%foo9s9TaF&(Vs*z9{eMX7^W>VQ z;C*>?Q*fayKE_tlBZsrvh3KtBmU@)&&O$#sbF7@LA?75yiyZ8j=>z%2j#`3)#hzJHIdyW4)~3)Pa9RGBI7#ALD)~y}ebJkY z(djxef4#VY_&uj3awaVSS>@awqtok4)7ud6wJyo5$u9;hYJsV&eYuA!wz+#@uNeau z-M|^d?$e!11$NRm!N;YE(Ya0&v6kpta!>3#(m!I7X|`iv=1x+jI^6K<25w`4+Zf;` z{$Az4P3*trz)kGG#lTH_ufeTZ@dx~0?gzJWKl`to^AdWRg3Kp(rZ0o$Nvw$iml_pM zUq@eWF1m&DZvm7^?y5?~W;==)JIP($rQ*x@JZrlr-yu(wMxqxVgWYH_=hI~TqIZ$~ z(m5rwCUAY%+`)`*aBW%qeD+b~%*Mo4&mMvdoz8h*k>CDj1!hwxUFAN_=EX_- z@im&Qx8?QKUDkwHP8+)B#!_!`qr{>(#xj_(Bm<9P^fAfD(RrCddJJM75~(wxjoCY> zjX8cE^El`Vb9_c5^JNMMOg^sS!>A)Gn6=2eEEBPg*vqrN{%LZqsiwyw^aR*QtD@PH zr5@e)B%(MiSQ}$!54LX6p9rmq_IrPu@t*J8NyIJUoyZ$2!IS<;X0I+Uh|8{L1pBbJ z4&O@QuR?=Wx0^XD3!ci}_B47vZLdpeBeX%ziigG}@V%@T?!4%hJOMp6w%l-2v!G=5 z>%-8qLBhLY>q^7+sPO=zPiKEi4pLL<*GZqnZm-oXbt0E^lX`Oa4RCNb1$FIao@Bl3 zWA7e~zsfbxOZ+XLK4Fgcjs|xEsRJCVeu8~3h%pW|g$8A1{NAf%!W>0;{`FCZR$l|w40Z32I!ag{gQ-(up-Wx!sVkGZurpV2 zHfPk&^hx?+)RWA6p*aRFIJrwh<~oM&_fuAbgO9IuLo?lsOZH^(kASz~+^*UC!{`5e zU;ZmOd=vF_jN!aKzoJhuXht`8bgt-}#4q1p?+}^Mb~NB z)8MJYGQ3LeJaw9yZ?yo!v$V2!=7=BLwDj(yK55s*KD_3buDg)`J=oG~c`tIGoL?5+ zN8lfo)IE2fxhXydo*ny>&f#*t;4=PZO-)UM)|s1U&8AJG-_qwCbLfyt_F3t38}7lq z0Jm8$6(S2k9|eAb+g|{~ztchJe5Ij>*Lh0eK_p%nGWv)&@F$qW|M(ofiJtY%HPA$f zRk{vdy9`+`hq#)~uP2F~dyUwDBz~P1OIG62GA4Picwgz;b5emXw)4h?)Ngz%F*~(& z+Ct~GjBhSOKQ8IWue;a018js&R0uyzzn-RFq7Tx1=Pu$;sg3JAe_422;`|zY%b{;) z|8HT}`kD$qr)bj@K56J;`h0Uv7b84{(seO!8uqYR z;F`}KrtxLuIfA=NqxQP?_)b9#3zTS z?f8yo4^=sN=-E~WhNCaF!rKtnuo4}4P#7{O?H~kpYcPHK&JyxVGBVb7Sl=OcnW;h5 zY~~M|-8hoChZ4I|=9vG7$6SYPh_c*Qtih`8tgo%7$!X?n@%Pey-JWT{trD98{u;G` zml4x+OXgaE<4o$8amd}%+p(F{*SEyBlK!zDZi!uc&cB24osAoBiIa7u#TX`zK~8IT zskCtz-Z~chRSf+To8Wb{LmV*rdZ9i@w;StgLFy9!)_v5K?yD0|n0{_K5DRLy=W)q>RwLwTBXm-u)~w zcJ;SOMQe~X-i}nIAAw^Ne6TTOiu=#OYPdhFwy_TV`<$iW*~fpWXZVq`jr(~7htJ95 z=hIEWIgtgWuM!7W?CvsW(5Yg%hIzI&)DZ@Cy%f z*RJiTYFm+R9^$Tj7dv4OY*peXf1JKwGqQit>YE)!U1uj2vn@sF48r7_w}4d)@hXo&Vfd-BW%W1q|G^@9*hf^!Cny zMQi#AeQH^Jh@|U<8>9Tww{__%J z*Ps4Zf|Gl}QQ@8I)76WW+Xro`UslTb`_<&&yyG-=^M())0bDOWOdIKD)_%0|x}uc# zfmxp3*+IHrP5nJo@G^kChdPcrqprfgN>#fW=j5GF*Y&;2Xh&$Hhq`lU16d?)7IiPe zKicc{-*YDnnVD>DbC)h+w+uKxlj!AGUD9eN|OAh#348C;*w*|)% zz_FYt=&~tL!>@AiE0%Se!&(!YdIJA1q8_7;y;7b!4E*%}mi=7b$$DH92@Zy`o?Nse z-y3@2`mn8!Z^uSn?A*awJ+Kxl2i*nsa`;{9j*xM{lW<@8C~V8|hp>a?M4 zGvX@m^UG^mp1yV+x~dX%2gx(o--y-x4e!4i=w2&yYzg0P;Qw^?!KjVBaz#%g^{9ZB zxi0vleDv=UTV3kF9yLnrJ3>b|TOKccx)t3*ip80=m6%7zleqr|c~SU;zw%eT{o4!q z8=Dq`;zB##xpPN4Zi}yBA$=8Hr0^Q)=r{f#27#9`ILmtERsyScpcC&2Z;Tt(%1JIVAh|$I?H23a@5(5 zbF$dJC4TZz;%s1xFfW2_dGjp@l%p^ z)5Q;wZzu4)L;X@mSL)ac9QUy=N_&lHPvXdlJTQ{yUFx(`pVaRUD`?kh>35{5^@B0g zA7;ym5StG4Htrm4xVYYaF|y1eo`pPKo~L=9;<85Jih!L6DeGViiy z58}Rq80cdtala&frTB#4>nL}XWCNQ~(D-b|H)Eu43WN4_2 z1>JJE@Nvt*Aq{Ta#gZiHHZso8tiz0x{90##=(kn3YpCD&U)rdIE*xS_90V^9priPa ze(%@DDn4YyhK6^%7~KeBJcsz^Am8Y|X%~KnJz%jxGyiHoTKl!Wwv2lgVwLh-&Jzt! zD7;~m-~9`Jr62CS6@BJL3;qkH;zRKMLUZNrJmJGmf~yjK9!q52Xmvx}kAAPR=bnry#PmUxO zuGHU(`td!iAZ;SOx4Ej_i#+rl|L+A4BU=go7FN9ZPbsTLCUZ7l^2NpmO#(kuc7w~* zs1x8Ydc>n5e>a0ad5M0>8qjbspqVCX#~`0PS1-RAvhX7EWZySr?ByFQUIj1hfDXAM z&=Ueb^yrO6k5Sx$bK|UyLUdOdEmiojHi1Ple!<_F*tm?bM@bskW<;DDdk(g`bkP71tP<=u!91Snjlu zdphFSW93_UC$_yKNpe?sS)cZl3ou{aTJ9sMT7=&S_RR&X*?_*m4TZ*CN%}DG7d|Mw zZ>xr}Hg|3O`u4e#xfAPnSMDvO4Y|)FCdio^LVZVjdipr2vvR*Gy^gVIxaH$BTf%21 z`{fCr8OWNHcs~zc>t2gbZ1F5`r6S4VP1x8o_X%(yl^AFSFS!j~QtVNC@Wo3&XMVgZ z?Ep8?TdrfS+SCxg9eu?~aN{_Au9=M;khv1NRo+0STVfYWXPye#gC*{Vqz$^2ZqO-W zc<6pQO^btx2~y@zJ&kw7*6J?bR6>_bzVBt96FXuh?G2>ghb-9mX#W7?*hgPv-UX+% z{-$A@dYtpP@WOjn^e;l^Tw8f9^`T$B7TU87T$BA$%G-Qvpd5dd{n$YLX+bmkg|56w z4fR0pi|cMy=mwe>V`pq)_+ISO_5kA5Qnms86I@JZP1Hco520f?2u|wsQ|{#yyp%md z{D{MfZ>29MpmDNZ`DP6?%G=_Tzt?v^_*LDKEWXoa?y%x~>JCt&haM zWcD_6s>ORKCuh^Y=Qkou)!xCc@GFsi^0hx5{VTag^L6#x&t;F7z21LMllza^=fz(a z8tW+jSohN`M&Y#jT%2z4Uu{{u8rV;SXPp54JP!Qy{U$VS3o!g6O%>s1T3opz5!egd zS`=H$VzI4@pGkzo(2Dsynij%T$*2bSJNBGxMVL7nsYeF)J66Q(QQgB1))L5 z*(++{T~4wuoMKG**rewHM<;iXB*SY~%DJG+(7Aw9qH7Qx!c5p0zVEirURA;XjfBkMD76;ovDr^?*kVXJW4sV@%Revcmp=&8m;p$ zFE&N&_Zv;#?}5qDNN8QIkJg3iw9d?$6j~?y?Xe;5(i--`6X>R{hTi>-ZYTr0i_kO9 zn4Cw?#OGURnb5Jg#-7q}p=0emeIhL_vVyT!3k~aM3CMa~qi4`AXyIUo#0% zpU0lDg*9=4ICTvekF%_2ZVdc|@aO^jpX1w8jJ-nS87J#e#xM`KZ83N1Spl!IKgrDc zYzl0e6?bHu*rkeVWxVan`s4tYgV^Rp_TI<36Tk4^ZzFCvg^UZTN;cXkhFUp?GMEVph0zHuR*kH@b(veAI|rBzXw~w zw+8$AeI5NCO1~TU`mKL|vG&7@@sHQqFJ|1A`d(m(gF1ReDIZofi2m>5?gTk!v=2Pg z`CQ~p-}pKJ*8uQPFB4u>eu*-*?5`8d&G4^kTD9eD8TMRXJ;Br?=lIIc!b?B%G@m#} zmzpEF6K746#d*7d|1s!$Eq)D>7fl_PYKzzz-B?3m`um8gqI!Li_W}5U5pQ8Dw7Y66 zb){HBtIYfg9!zEKyYhe!UhqNAT;taz=QhHtHvCeDe{WbZwut8PzwymP-uJr5H&So( z&vm0}fXzU@(buak1Ft~$n9q~IzRp_L&X-rP2d?KqF6G)#HRUAVB=TO;d*F)=`f!x9 zT=io*9%hY;?)wPq8#!|;vgKPMXJ%$(Ope1};>c;>0zOK7Qqj%aNB&Qiz~T~=U317&d(c6f6!Y`DL+}aM(SNoy-uqsR|TTe+#5Mr;`B)$-=UAm zzL=5!rjKsYvUdK9g{am#tae?IQRz2aCi7moXIFKyhs`-kI>KX2U1lpD!f zma+TB9Y5J`-19Cq?tg2%$ab+I#430EQSK_7$DRjnd9P&t<&Ne!;=RQNxEJO|ZHWlT z$n3>kPH_PlalNny_X?2MUwoI$H_SCS=`0SSd?4jxGO~I(+kFy|gC8!uVy_s=3a=r1 z))TZVx|+JPwrZu!yt9AuC{ADFTa9&%h1CXf;)jGcl==X{=s+giz^$kP_{Zv z?uGKJC|9|{cP0z{lK+`3IgjOkADHxA{`~Q)g8qj2^|zhg--S;4yN~fWIlrh{Tw7Zy zJlT5gSOfO;?LR*WJ_DQc;bYiA_4O;T5jZWTJ<%@?;T&8vZD6P2|FGg$_tY&B7|oca z$F)LE{yd*}R$99sCe-SF(Rv(bX+M=c`49Re@!CAhvDEnueRq+T@1%VBM{-W@+&B5Y zxK>|nheyI+gfW)N++0l8Y`{skYw7pr0gI#Bz3kXI>o#&HJNL26{S$R*rg-|P`|n3} z_KHjy1Dq;(e{}Zj-W3j0Q3ABWr9?+dEMn%q0$h6m7{J@cN!mu=83Q&2?$vW7)YSRm zpXfLL4!)wxG;9UJXQwj0P4LXef$s~9*Pw+ZzemRPZok_qbNIp zemd!+@QyNum@{?V$OmuL6tS7ML&ox;^A-9TL%h9oc+Ob-%>D!iVz|eL`#l%Q9#BZ# zat==T^$hAB32hUfQ^6@CPG95=F?vt1{do7FXor;VJwFK$hkP>I=+d_ zkPKeuBTp>i$+$$UZGoFYZw$Y($j!I{l*ABJ^^Hts0`UJ`d#Ux&I4>|cys@WPqQc>(m@$FPN0^1VV2 zA@Z0%K0w!|#P(Jrfn5*gt((YHsr1KrrF(LrPWPrrUPY)UuRAc`g6y2mIe>tl9$DB~ za1&ciK=7kGJLjbi>pVBOQ5?aK4O6V`lS z@eQ<7zl@VI(Bsuk+H=yLllB6g$+^i|JR9`are&Hf*jS&2T)^7=T-Ihe_*B6-_8`L> zIDZu10f{FOKtB_xyKWjWy?VC1J&D=$G&v z=tX>TtRBZcO3fM(&HZ9!!2T7#wq$&=W{G_>{IB+dtc|9c$yGjm^k=I4?(2a>c&B*H@dFW*E!8)54BYDx} z@fhXWNZ#e-@fdlnC9em0JVss%$-A079wRSI^7@j;W8^iGyhQSNjJ!a}8%Q3Hk!O=U zIq$+_za#${v+eA=62Etz0`BVJf6puK+E?Yb z*j>Al-$k=*-e<ADX0Y;*=v#-D!ccynQ# z5@Qb+JGPuX;&8(1o;*4D$mg)$o04YFo^liOlYaKR7I7}X&#~atrOq8KV4v0A&l2C_ zX2mb@|E10yWwOpC?z@|P2RzFXTZzzC%gjbz(FyCiN!`A>8G6Y+kgf8U-704-lV8M6 z0u8(oTS*RQXW#**TtWUk($H^wf)7tlx774Vg5O0h%099oX=)JlGp6bT+ zu3mR*>Q05Paq*q-Rx-ZGYLn<2HNS(4#adDPi9C^`di4~0P6hoHdvHKN%O?Fymh3U~ z&CU0LlGmVBlYTSxyj1c;FC{TkBG+58bNFAGmfdrq6XX%j9;KsGY+q|>oJD#Db-JHVnA!$irhJzIAF=^m<`MS$ z6jSr6s_6N73(&VX`TogfWxW=_D}H8+Xi{e~Yj<@tyepz>rKMrqGE-2M_!7@B1!{Vh zblOcewI5O>e)!U6Lp9}Nc&H$?bVRTzXvnfZBeUC^^G7tCIb>=gw%FG!YIGGkhW097 zlNGCi@R=e$p2&i+Q?k|yeiY z9GlLrYvIp5I+Ez}q2_0<^LE0Eim$)y`Lmge$PiUs3BFX~PZ*it&Q2m-NX*ia^o4Ow z(fp77WB{FBT+BZ}uU~wJD>#?>C3}td3W+_I_!-3>_V60oCVu?tY4A4@z^c}cTmn4- zpSnkrC-YFrnv(w$bsi|JGLUn@;P_a_(maX9Abl5`fu=)e3?pO==rzRG-!1xj-#F5M zC;rCO0l?px;2w@Xc>AFC$#KLED2=(fS=RsybJtN3euecQX=1*H^E6k@bEWLaQ*~?b z*C`gB=u6}Wrv>>IzFgK6zAHN-`KFdRmv`XljvU{b&(YWX!oRayAZP4&i07YUTFKn@IS&!itm#6 z^a2{hjkonR-A_XC~#%{Uy_Dtc;ttd za=!jBcqeP2D`{lvQIRHV_CD$lfcK028Tp&}h?$Z;S(!ougQP{r)VVV>yFpXf$sIih`z)*7vtQQxJG-`VYp5t}MQ8KaU0d2YL?1Ci;)3o&Nd{-XEPktGCFt*TE}D z>>%W(IN5hZem=~&{qD#e>?$Yn@X9{(x(#ke|`PiLzOMYA3$4u@ey*OWf zKL0B;So9-rBYVpH3GER15TBZ2p&#}23)!0Qrl*O-GB(Zx;g{OP$r+|(?C6GVW&3w} zyct>ZmA`5Fi{hii3zPSG8hmSd$alg6hk3dMT$bvUW$n*Baw1f!@iS zNtqkSho6X(v#TsOpC0slJ)giiJzD13R1A&pmcgEc{$aJ;%Mgf-CX;pox$FK2Yq1$; z5X<06UPq1<-nTpYqOp{hdl=@SyQzd0=IFG3L{7Ad2afm{G%bFC^0J20DZ7k(DWmb> z_13~UdUsB)mA=VXQ~7p2^~~V=8NTo9>)py(%K>8s)Iv9iQ)$N+o%o3CaYrmoiUT~@ zssr4$k~bS%PR7SX(ix=lp$n<_1Q>KlUq=Q$exTXN4PKw~Mx&QA?il=p((xlLqF*sH zQ)*mMYI_(y*Ul(+t@wp~PG9`}NrlDh|2X_-_cy=z zgTlMA$Hf8HY~eq!|3gcKFA*OxTU-e+8l%PSYF7NGO^83ad`0u;Ed=PGl{*MJUuehIVG}5Km*k{nQj`Qtcb>}LA>}o=5erV4BDMXeKE8!Q4^tn6 zwmbFvvdft#m0j|)4r;0S9qE>!NR7X0z;OOfH+PX}KobwmcMw{n;h z?R^9N3{3fdVGKfxq)iWF(dwW-nje{8`_L71-pmO;q8E?rp|4%pTaYX++9&zG&QD*i z!{-9Jr0wV1k$t7ErtGn@=Zf4W{^Bjc8(DksubM0u6O|NSh<#{=FRo{dDUp3w^>9G6uf;+k&LeH&zdX3cB7-NpRk>&F2zL8kmqjgUg3)R(HSDmU|R8x80Pt*|jMzmhU#h z7s$7X9(+iA-xY!5cei?(Zw_kT*wIB_tgd~O>yMpr4t<#8QQLoXShq^OTK%f*n>6zF zpnKRHQua-%bzp7<_buwQ(X+##kpd@e9)>5g_o!}9m_@g4+B!p-tK`msjqF$KJGCh; zRlOg$6o98=IS1l$)ip?Ut!prrb0987T1i^rL|4Wq1Q=6zv z)f=H({es=U$(o+Quk6(>7jWc>a(il{Qa!b)u4O~V@gyp9bu{{gvF1)aLcj-?)m;)D zoKVs>EV1PBR!JpM%IrP+ja8M54K|gG3p1D8-O5su#yk0bEcS!3#L<#Aq~5W_PjdnL z)O<<1dbl1S{eYyyB^^vU_`f<0Jqy59$1fpgT+r8NRy3$XTwZyE57QYPAS z50&4x@_TeiP1MmvHEH~x>QY1HcO1V0uL9sDIy3seU0^J*2A10e?gD?~TY<5_T40_E z>XbI6{sLegjCl}ki767Q7-a$$YU;4@P8L( z{`frr{5~Rk0qfY*Du0-n$HJ51QPo!xXTro9h4zF5WQ^_Q#E(zGD_j-P%yn6drj29T zMMt&@4-4rKSMSe%GA@#KXDi(eMs+^IQyHoMoH=!7g+JTo`nEfZT6c?OwiYC_cfX5}_mJnz}U?`_6w@ z$qn4U<+Em;3F1rU+?uGITiw|?LkAHH(vZ{rf3-HEd~FaTGLicR1>Uc5C!e$}_{+VO zqb}9%IM2)xR{L6w_L`x+PeXex&|b&fH;3i3mJ(RQ`z@BOZJu)tYbP|6-+}zDXmx1( zCZ6n8orW#sNvoN$v-3w?h7o&oq5Q6ByD_gF_RAHj&HOazuo+yJaY}tsk5)(TsPUV6 zM^nek!#cmxd3+nnqvu>*ziz2d9(kVz?PW}??XquXDEDt}Yf`RK=j@>Vu#|LL_7MVs1V@Wzvt8=&X#i(4@T<)7FA8cdtbJ>Y}Ww`gPU`vT$?w zpR;=?vAb3~mFW`<9;+e)+`ol5-3ymPdqaS+WsbY1El;9LYyv@BGrm%*?pD@MwtJR+ zV>87baRs_hRzPR}t!%}V@g53h-{$#=e$A1zYg=AQ@X)F`{HC3ryfd|;|5oMk!R+Yt zg;6}x#*s!LTcw=<<~p|BCwYk~g|LdksJ+1Aw<;6sOmM1WnqnyQe0SAFWCa@4VtWoc=yUe}7!Bi#E5* z*!}0rz$@c7j=8U7?(EE43iG#@_4W$%z>=O>V`e=4p>G4}%N%w25w}V@>1NymXzvwe zE#Ax=CHm%U3v-s}+LD*XlgM19R3ud$T(Rt%vR&uq%c%2kBhyx79rX2YJ@bpau+@=% zSB7Ywfp%-TYgG|n#S*Y}KmD1*V~np{@J3mxKGk4oKuewU`{lIxxF@B?j-39gC$h$% z0~_FtcvqTJma>+2rG;gYYvmnld-e6F6L#`0e*V#vUNPzS_u_rLGreQ4;-lyIBjHVE z1zd;(u`r(K1qmgIZgX`ka8I41N?daiOU5oRl|(NPp48-p z_ks5`RmTAHIbn~MNEwfHhF0d~u)ZbvR=r;xPu8uT4UC?mojJ5a8(XE^3g9&>_|cM; zTD#`zL9`<<%vUe<_E@L${>9z}!7otek&-#eg#2NucG8xNQR)_06a@Fx#wKGlVBkN4 z!V6ht{(woLZ{Ez%RpEt%4>K`8GyUdg7V|@1=}h0e%tA-X|MBnvJ!V!!PS)G-^x2>~ z_4LqJ;j@+1)5k-fwRfbIGL?9gKK7_qs)>a$3x1@y+|{la_f)~-RLZ4NF73yu3uh?{ za5rxkzCvKyW@6A6GS))I>QQ~q)+OcA+{j^W_*uS9RkPqnFD&Oje!E{IvWC{DtQ9+#$QR^KA%6<>X6?l$2Fyn=e?9iI zo~+d=z1RbW$Q;!lQxtI&E(bR^1KTKNXD;mUH2eZ*(e3)fQ(4RUMDYmR&CaquZFp3x zsPPG{+Ke{`^FNPzIcmH$cvJ6oJd!`FRlD&~FGr7;eD$(xydB&t%WDT|O@EiR3e;U8rD^<+hi9NM_ZuYr- zE`fc;EcQ`nz*{Z0ZGkY~typo%u>_bz42TvWBBr zt9u+x=JJopvcW``~%W`TD2u{-4g5 zZyqi+?teVq|KWU!e9#_RAUu>m?z5JOV-ipm1>fbLKSp>`^2g}kRA<67@vT>Qtm_Vt zhFrmF2%Smwdl$WA34%|ID72b;~o=Z-04;`mF2&%RK$6E0LYd!R{iFMMdTufJ}Ec zzxVJvN3}chvASY@zSDhDF}^vS9?QdyvO{>pimo1b#Nn}ZXI{_14x)tp`x|OlgCugG8C#h>JdOS0FyeRa(ZghB2e3Qr%)rwyp*9XzV)CaC%^1T&Z zT^e>0;ufz?qpnn`3)$~tdz2a30UltrTl7HGXZ`)roze6oN%|>u@J{MTqmI^^dSk0(XD==oqE6`y>6! z75sy8*RA{ex}3-jR$|i0{+^D{gk}9T-sQwyESQ~8^z%PxL%t8-d-lI@d?~Ujn(MZ2 z!zL(ww<%So*>}&z@nx*U8hHyFr0dMG@n>5G529{OP9Z6T%}J{VfreDK`JkM+y1V7`p}c@opnSAHhtM{+*g zc;^h!`ziej#b0D7??SO1ZY$Se`xgFL{fJp9zpgX-y+ZzWe;L0fulnLRN}LIa-Qz#+ zh4>ID#&#Wcmk7TeG}m zzAgESF&VU{5T6ejf5AT}>!Hr){y{kd{}Z^^@bBQCkKc07e^8Enam18=&~|>3sx4r> zEN5Jet1jLCxmc;pDY1WU1AJ){bVqy*Bj5i{IbT4m>c85XQh|HRe*$-CUM%NqE;ipsIU^jh z3OqAM?$*-p_@&?TOMm2--r$$s?3ez;Fa4=sdWT3x3bgMR5Fe(7KQ z(!cqo|L{wn^h=-dOPdqUjo0p%4)jYm^h-DKOE>dNbGPnUxV836NBgBO_e;n5rLXc! zckxU2@JnCqm+tGAPV`F;^h*!+OAqr)b4KfIKRKs$HqBYBvuVz2N&0iahrx+jx|(!n z&YI1FC)3geHaTmfr#INVj~MBFHt!T8ZMJ(KGSbm@?*t>AX!kx~q&cH@pOKzr_u}*F ztKaUu$4GCmd&e2+eReNvO)q11c<(gQ(GKrzMmo{q9c`q?I=nX;=~)i%2qRtK@Lq4E zH#odQjr2Z;caV`bJG}#qbhOi(WTX?FUbm4R>-3^f*ZVWe>Al)W7dX8=jr0bmx0{jP z=k#_q(&hl~RYp2Gz>BU>uO~6U8)Kx$2EZ2^^#^#PjdVc(cftGeHw1X)T(LGU`vSZz zjI=q>+ssHu2Xc>xer#?jIv8m!s(9R7vhOKN$&X8{B?p(;O7>bB7eiN%Do+P*i}#3^1iyQ5 z*#O@6r(9A=#p8)32P6CQeG>H~7F9SB@L~H;q2QnT|Ns6!4*`?OWHwu^Rwsw(ca6zPxl1o=e9bT8v)G&snnw4$<>|vy#(vu; z{Koq>bR-UY=fnwXV!rn)`QJ+Zyz}_&5ot|E?|$J#!4I`Rgw?AgWX0rLLO;3AqCOno z^qQDLlZq`fr4}5rsrP&5r)`dRsJeIdecHoiQ*Y)s9DGGfyLvJFsnaXJP%1U}!x!%S z)uCP*>Urgv#~kXi)7IoJYt8DG>Q$F7UTRlUzmI$9h8rwugvV0W|1*nvc#8Yq3pjXI zci+b^-sd);t<+=JEI7V-kyV{&w{d3n9;MzL+BYcZxKdq)zWmstE;co!&x)P3Yz}?B z?k{ceN)=4l-8|+!r5-u>`xP;LQ7T7lsMyifq-H)9Tf5_Wt4c4P`natL2N%CsH2Rq- zR+WFx(oT0bu&G}TeAJ-BF0`Ol3#`vzG+iG-k7~5*oq?Cl1( zGOzEy{p`WluC}UmD~2up{C2ZSyDnnwgqs{{SK0PLz9?o>votW7F;d{*LG0&>QZ?buAx#F7R!yvw$5A68j=iMe%@b+3$`F$4E>CQ#F zUae4SdV_7BzWakoUHQFhSkXv~&iR|)I#uLQ9n%V5nSYO6-SzfYIX#cq)Re^Mckga# zR{MW!am%6C9qP-HUOQhJVo~EfFIpbu0@(W=?dp8_2fMP*8rx+3RGXS$-GA5CYwc=F zN#sh~3s%+gUjv?AS7}wdD+XM>Kg^~YoyoneH^IBNggrX##@ROId^5_`ythOB5a*dc z2W#tz1Dk9ED@^LtJxf}CUS?Cdy%Lw@eCbeM4Q%(utyfr8a?;#E=Gz>q{pAmY?7hmS z{&VZ8QE&7FzQtF6zI~lV-TtEaxi#}m>hQeOKR>?GqHIeS-+sg8R<&bla87upReiH9 zCp`LPtJ*WN{fN81v#9%KsDkJXO8xTiw@cr>$)Y}Oa;9}z8#jBQ1)K;Mo5$0jcw}h z=*toJ9iHMpaWL3<^Hs@J9E|y3qM3N>s;<1xn4sa%gOj&ET|So#-{1chJ@_)a_oCB> ztg8R2cg`eyW>ybHOb=`|+M$kixo%{K<_@*v@snv~Puo=C7poIfSDMtw?JqUmHqWH2 zZ}cwyVXaMlwWjg)M~lsB;R|=)ddvHEl`?hd%C`&6YKHUITi)h?^uKK1a@fbJY>A&c z3QKM3h9jZ3{fqhk-=agy0!}|!I^3cf+FpHm-BWhea>Zo@KpVeZZj9U(XIJe`ZrPSF)2wD6%>I4Mb!K&I|9}79l@pBtbq{Sie9EE{ zhg|hs*1wcGF!{aVO%OtJ9{J_xH<~)s$nJk^{hZ)_|6BC0b9U2*tA4Sn1V?q#7OcaY zUby$07w$Hx`?`JGrR+|t+IVH=`!~0?sh1Z_pZ1Pjsjjhy`k$Pm)cpJJI54a!hczZ# zHRlct2F-tr*fcKJ!lkW8%=dJ$sx_Tbdv;4lv$e6diS1XV=Cm9BTM>-z?xRKCCkeRl zzeRVS>ifO*Zq{p$TwBB8r|qi2wpC9A-(yi7yMFroS4+(5)0Xy!?({14b+?7be!c^z znBI}E^*{*t=J@Deo%wVzMkYf(*>EN^mckWH2R-e~RyE>rH@=jiT-8d%i7 zf3!z6?{8H(9e)1T@Fq&#di~E!Pj^Gb}CJ`c8V@-E2Mk z@Q?Sa$E^-^|L%`I8FQyuS??abErx#W`}b2<*mLB5O7Vb**5l0o9h4cTVqPItSa7>ZR-Z!Tr;Ix%6r#i>~^kyVcE+L zwK;nJl}aF`Xr998-H5)!K8SL+I8ZwjAjEJD(_IBiho|IskP&# z44q?BeQqNZI-Xk}_bdD~Hrb@s{**neV~|7j9(Vf5uo#DW=(guAeJ3e(&pofLN?B)9 zUv?kx!NwG&HazqFk~z~XT&uTw_n@YB)oc4(9SWM8)k|+)W&f;HsnI76WWVsIS$+S* zzec?Awo*%eY;pIiFPhYoH|`i^KWSIH67Jm5VwOV<-#lsJLlZ3O>ATv7ZGA?m^w(dB zWBS$bce55 zTx(XJpRUZh@msrk(t2`VN_&%9*!upG%OA0*1Jk0j1K96}F742u3IkolCwd-3>TWH5o z^7U?yb;7^BpJiMR_U+fs-0gih6u7rOGw7AkHZ^bCuWxi8XjSk1_IPqqok{iY&@g&t zE%Vbm{MCr3t?Fn^#DY=pnpCryJw`479*6t%IyA1OQcpcH`pr`TCbj+YcOPHd(yHF@ z-u=ieLoI4kqvzkb0sePl^uiabn1_hDCMSsmAlORoxIg;IfZS+10nFn=E*+%Btqg`(ViPYfLKDKD2P!5Qkd(#(%0O!+!=> z?|#$X#jNf~|4mK!1!d}_)^o09ADL14P0j@Ptivsr>?{ex>7!xC**AnMHSg4wnUCyp zsCRcyf9b~?;g4VXA}wlxMGY9u8TYvswdIYiLtF1Pt0q%oA8Ojmq$+kFeKPEGvpV(o zp(o--Sk#W%iFew5F{@B#=RbP6?Z_=VM}NjTx^L2tdDA;O)Zo*NGFoRlRI>)RbuYmA zW%WCcRetuJQb&&Ldhg6+v%2DFw<&)tw5nY(H_rV02Zw5Mcf{~9tjqpQf4Jc)_}Xv3 zs9N5UL$i0sFIo_pP7t_ei=u3EkbmZO8eBcmuAWXV%6Z{Kuo4s;u707zH^;f-Soyy_k0WOB}=^THh;vd#w>Ntd2@hCnJo9ztVS_@a_MSM zs|F6$ZlHJiqhA2$19wF|SY}bzSG4F=dcdYm6h88k`3H;obz#-j9YV}%;MKujL@%(b zVe=kaRCpEg&#@cVy#znG_1Tx-Pg!PFSKa(V>jh(N>b2-f=UdN#Pd#GacfkYhu6C$b)_pg3aH>tc zGp_j~yS9VhS7mnQ9tbtyhAjiWecP;pJ3TS;`ZSZ8xNlkIya2Ph>Zc=*<-+HGx^LQD zx3E7y@c8JA?aX(lpv!Hm4kNEV(CC@cP7XC=TZgOveAuD73~F+!Xt7NlZTgAlNfcxm zU4H7lJXLlMk z@k5)6n{udW6msp_PNnac-fUHucWIG(2Yl8|yIMarteI8Ku(x?@`ujGuVd$!uXYfWn z*0IytyI;4e;U#~5T@GJ(MbF!Af1AVkfxR4_SCJ1s8vDuSdwxg0T7O4en@#MyZ-$m# zcB4c6=bASg2WKeN@To6e`OeLLkTltP^8)0&mnX#B@RdouuDWoM87h#8usaDBOJddb@)`Xnct_{RaIT1(0hj4)a}nawssc${*knzlpSMCYWm9~ zr%eiXsHl#Oa`(2dE9+0|f82A*rWU^6y8O8>Z7S>QZ*vDek37<%DDz++n`*iAmWY}G zN-au=`mpc>d_&hJFJE_=LltZ~xM}Yqv-<4JH@^=A{wq%WaPleST(meBqE#yZYI_y8UAK>3!dq4cLUzcg2^RqQ7cvRb7r=yUF&B zO$|MI=;-D%^z+&)Gd}p#qV6nek@?)i3NP=6mlq$gtJgjr`fJB(1xo+{;)RjwW zv#&*tc9$*N^C5iP%vB4OI$=^(^N)P@&|tH2|GR9@s%V=^-s|bsqSB#C6O!`3?q|WZ zVg5a7*pPc`OzOqHU#^|>oJGC;YTegIPqFWAd*_p>b__Hxa^cwwvnt-B zJRLn&)$Zf5`3s+=zR?cvk@ujVZRZwlU1Cv(ri7NC+K9(~$2;470KL9p?(;XDSYcO* zk5ufM5o=PdT3=~i4INu`%PmJ2b;8KJ`KpfH2^cf?NY2v9@CT*IN18WA-*ND6N0%47 zn$@cvuO2@4Yvkybd!N6$AM*FA-JdmN|9$F-z1`EVv8n9mqvkE|jQsN8q!+L5Xi}eS z8hKbXVBhX|f8#wCyUMAkcxXc(i^>~U*W%gNO=`2}`cnh$x2u9PrN8vr#=iRP0}qaK zm{fU#iASnK9BR)sYd7E1*rL)yhKxw;1zkDQ>BXJX9R#3Fh)P19YPVtSuroPI?4qZIvC;A^**1TfG6%IA^aKZQQ;^bLy z^S6JrKz>*d6#VQfz;#f|A3xp;Uz@PvzTy3#e=i*>{L_-jp}>Y$kKG=FT;*J0>JOhB zF!RRJUE|@?a`OMEhR=&?bN}u4r&-m`pxq0bvR*4cer(z@@cO44Zff3Ps!6@He%*b2 z;g=eIG@;jJeI2SMu;mwjthA_<*BiWY)8lq^`A_qwO@fYo=t=p#5Ab~D*<}m*O}4B5 zyfpdMZf3I@v1)SmI}PB&8(#U%3h3v~2U?X4c-o^9D`g}jAzLzvva+I#j0Q3z8j3_{ zsL=VIzs~1h1Tn(TSSwrnTFYeRGhI2m( z%ESrDUp?x{%%_rbySh(lETWT3_Lf&#gwe<4Jgff@oPUL-PmEew#Gi|8!R7^vq^_Wx z?5(GfpAA3z)q(SyZYNy@ydhT|yblKUG018X<5FElBa5=KHiW*$mmKX8WK*lexf#AK z%Z14ju8Fess@-%_^7v8yB}}4J?;9A%b)pf$Jo)3&88p)3tJUuc+^&AFrc%ZE-*$w+xbp}#!m_A_|G;;+)<-6D{r;q5e#x=ka)K8qG|_t1#K zw$-#b=qxj(Q45W?sDy9Nf~*ny_II z-NtKY4Ml;gLbTmBoS~3`Xu0RJp}?o-`O74sZ?>r`a{X}wj!*97q$=b06wD>@o2Vpj z-YH?=HtL&l4!=mi$o$xoWaiPl%sRT4s~CU)fA09C`29?jFPg z&yLt}9r$t6k&NWKt~7F7r^`_Tdg0Z5&u-p@KBD!H@ROf7f0V1c_3c=sYhw54{A)t0 z&Sn~j!FcYXy)>%e1;4qo-aDBe_eQF=0 zDMX0dVyTSdo-~dl!oy*hM2(m?GA- z=$B%*7F$1dppt8Crv=;a?c@|02Pu0I7BPGK&aEH;{j^Z9sE3PAxCZ%m{ncg=cc0Hn z2jdvTc8ibw|2l!Z^}bC<1L(w3L(@VQKd-=8pE3|YAt}L{Yy-Hj(XE!J1TNEwm4cCt zu_lX9$~IfuqQ1&${?tB*KFTS$`;Mv!jquZ@POskyeqO=9JCcV=ejF?t6a@di&}TW+ z37wczxNC70>ST7pW%C39=txB-t19xCgwxtcXYwa_$A-0Qw1Ky}(yqzIyFm|^bYb7O z7`(dMC;eU@{{GPIZybO#NBYL!`~x0%a{b_qI#=AoPIFC}YtXY~ZVDPOQO7iYR4=gw zPP+CwVBjwP+~+UnOmOb1W!t)THKI>=y*=a!Je+>WD#rs4SQ$Q zQ$FIldzys>jKi-)pzE(ncX_(ekwpSIYwvD-23~i@`|Anx^V8-6wT0DquS+Z=4}PT( zomk!-(!ei|IkFFRV`^v7h-t{SWa!^VSA+!GP>8ufhpjtslf@g~o3&SHWU0u|mGg5H z^69hNA-zRZ(ysfXLbaJeG&SnSMe+Vi0`pxz;(n+U?$74O7h|>h6}oi1AVlc+GA3!s!Sz=`!0FL zFF;4)r;L)5cFsGN{M@&ozfamNd9oTfc+8ROA)00#5M#&9$SG z-GsbmKM}ezmqOxJeJ{9V!5~~;`DYH>(TT70*?VblrvEP1HqczhBy$~q9yb7=F4^Z3 zZ5zNO$AY=n%s#`tWDNCxfStYVh1ue#_<5!UiGQ1zq_1??)D-ujwb<~( z&^z#qhm=!ap$ABjw2Q+XbYisgYRDX%@!Bh_n~(5bd6(X@`y+(9X{e&JQk6<}3%?US z^$B`Ss?MQ5QZ&+g&!SFmG5CE%<6k+*Y$&OWe3z40@!%>~4WZLV{E!dV2TLiR_Vu@WTix7i+kjK1Qb#USGwTuBUY3A{Y@r z2fc3CCVe~qPv~sB3V!$P!h1U2Z@mS48_SXne*-5!TXmuK#W;(I1YBatG~@hr7hX^( zLw$_dI(ZsCfR69ozWHeQ8^NEqs6L~TKLPbJLKwjG?g{JDMgLe?drtk%L-6NsUvB=* zVv+`l4<*IGQC$O5Zw*CozTNfZJ=9nvTqEY-?hpnsU;jO49(vc8Lu|$s;6c0dm-+In zVv+Hqk@N=*4AOWjB-{ahS*YBeC=c+=S5=Jk!nbs?W|cqV-vb)i*sCgY{40|T9~jr< zHG>~k&8;K=9CGoTtS03QmE_KZJ&fp~k#iBX`d@UZ#A3}qv!(d^=$)&y&ToY;wjtkq z>q!aa<%`^lBxEO8v_eGCVP_xeGX{eZ{}K()pRx%lE-NR~UB+{L|#j@#E{2E3nKr!M>X0-bzf*%S=|XD8^q`7_dq zdiy!$VgMGyHYR48o(!jwUalLwji@UzD^s^wz@N0c{JuNhhe0mqw>l3%KRXgR7aNH1 z>TN4pr#;T$q^sv06X2|jYBwt<_`rwl*YEg+`*2zD{G5{u_{8RMWv_VP)Qc}-Rsok( zey9w0F95FVE6q2dvq(jXg>01pcwwr0YdkxhD7dqW4_}2YQ9I0iPK-%T)V%V`i(!!m z>mEkw_EU(f=FMZ4xUWYNOwYWRW0DBh7n3hWfuo=Amf>4~|5tS0Y(pUK|3}m6C0x)C zeBNunOJ$JA*Z&w3LJZR9xtYH2A(aTl-WWE3?$R=vqg*fy3iw;9xJi>ighx;L>7uXl zKXcYf@}iUQQhio#FzWmJtL7>l6r#Q2%WaMA6p}GwX1vOkN)jrjCk}Ap3kFXYoUa33 zWjMt|-LMA^7hd-4ktBtftrH#mg+71s)-_2_=qXcS^D330z!@6p_S>b*UIzc8GM6dDRtZT0vGJ(RsEKh#3VjhR@(gAsATJOXj&!ex^vvNszY0t zq%?0TP5`{BjOA0h9_RUoou?YxW$3WaH|WSfw>xm&ZT}Ydct&im)@}z6%H5pb@Mam6 zbXC1pf0qRuvoJenPzT+sa`(#C9zt>iA3AkV>EuAl@~c0evxxGmx?`*1XV?qKb$){W z%a@p>aFrAEw=9W9c zhkEHaW-y1}J430F_d4*YVw;0ZxdMFl#QsMQnwjKJ)mz`K`Yh7B zLbCkm5nAu)B<5THP@5L`)6KPVMSG!dn$G@Mi>0hPLZglW2$uzAn z)YXOC_u8RHJvlWf&;J!e6?|*#p0Lq~Vf*y%neFI{sj22VXlo(EXFk72zkDllTs{>% zTSe*KKFM`-a%HG)AJc(JI;uFSqWJyf0?&B2fj{P#1bfv(k6CBZy=pp_LCysk@pPh3 z?w6B3!{J9GR{n*GUr$hon((a+_gq=zn0}a6P$%k$z_o!R@L$4I4Nu*^Od-^0hshxc z-20JDg8O=zWQkpx_yHXTc~BOV!&=Tyzo zsbqGbu??~xk<9b*3z+~fcaYnA_aM$i!@7?$W)$MvvY#fhm`1LyDm=T1oknPb-JCp0 zG*W0>G+_oEyX?G_;5CHde*Z1bc>~?{UFv$%`xO+T5EJgs3!d0lYR_(^NFlsGUU`19 zp^{8xk$pdK?zE*2#H{#6C8r0I`g`WlSK}UC4L-;u3-^CsYYe9mar^Y@0#ypJx6uFC z@P$Fj7OO?lWoU$}D6M}Jbjj2aQwHM$o~wMO(jF>-4*D2Hzj0$xT8NFmeda@L@pwv!t04( z0h92&?lt$>g+9no^WwtaOA{*nH&;L>BK*Ac&6^p-#*4K`L5@l)?CWneh1E_rma>X4s;-B9NbG$|)S% z6bt`8y*wffxH$gyissVO;DrJ%x<|k(9g>RK4RCMktZl93;M?5a>6`VDokHaLR(-3$ zQte8Ek@9Sum(DRZv5nw~(e6e|xO^yNfZH$KftNO13$rXjU(i{1Y^4oyInvxN))GO` z!y5$ax}L&sI}-Fy?HeI49_RdP$8)mR?+`ou7IlL2oX4gaI`S@!W4W&>Hw&ngz6CL`mV~+D-@3PxOO%zmw8JiUo+U>Rl|=N_u>iqdJVq)v$~Qy$7rM`P%bQU5PE8bMB5?Y zk=cOVj|ImWjfY5mFR=q;GiS9z8b0({@US|WY%EkexC*PbbW4`i`Ba8UUl zbd37RCllKlWPT%c^!6Ww#r>D9Z-fpyyQ)gW9sKo$j;@L|d}elT9$g(d208rl@vpXf z$V*)FTJZ^dCxlZa!ex>{q93SME1V@{C$Wn1il-A-irK}aB>1VxDwJs8`sQY3i!$U% zO!RK$$ePi}_qb8h$66FJc~S8S2kP&yvu0CE`%otq9t-9fFv#h9pT4@mnDhT_raw%j zl6}S7E2(3suSy|B?jbZXFuHC3)ip56_)-Kmq=wn7x2 zayk%BsDo`~jWFROS?Ywnu+5<>S7DL3Hnz#}%{+ zp&uk3SUC#a;Du{VL;ODU$DSuQY<3f(`lma6Spkcjyce#q)rCUNt#T@9ETxn9-pRn! zYP^R-+-EBPK%ZOK>~;Gug=B4T*ZzJ9`K*2Nq8&J=4e?$}Ly`C4&`7zi2mFy;@3o{C z_gbc}@@Xob&n~+vyWRfK+s!hfo|LkPMu}1$pBsbNFB%nouK|Bfj{QMS7H}$kmGjF+ z-0y81vo8HC;+4>}eGj&|Tu}DU{|r6mg!9U(BlRqzrXAZM$qWBjC|S$l2=vacdm??O zs3crfIH-M?MIPNtG2H_{;FYt++7;kqhaKfO>`^z~tmsb81l|`JUnNA{2RwVxX}>h` zH(i?9>@0N_30OMNa>9W^G{4CE?A?KUjnbveTtVRc{5Lf*&;b(@%!D@J_u8~GkV7;9 zeR<%_-I_xPy?R-Ud2$f4;Zky%w+)L-D?U81tQdNf)XJAW@)VNVWU11v2>(y>#+|+) zN~{dnzTUEgpfDf#TI7;~6Tw3Q+pWkU)18M4XYb`N;X&@;WQ$cODJnF{NB z4L$9&eNGqrExk<>2D(q+|2l*v#^dMg=8Y9y#77}*dbc+7855%8oEMZkPA5gAJCHQc z$k-g$@OJPHClTH5E$}z*zUW(H#|Pf>Q_kTM^ot97>`om*{zd#_;jixu7Kt~mTs@5Z zNwv>UA?;gq61#2v8D8WSxHykYo=O1!df_s;RgXd5op*Y9X^KU}-NnLP_rfottcZ)m zzfZT$nN|m$tI6WY!}s2jdJTDcE9&*QEhYCvIC6Z>cgm{LsAP@Z1_u>I_zk01@6w^K zj%q$>+H-+PJP)5UsBmDA2#NE@Wv|00>|W0!l#e{YdqbzpK|;FM$~C<*W)QK@D+-NI z!PmX-E zfXhGrj?BKuB9c9?8XBPYW^Bmx4Sq%;p;mVSd>)|Bamnf4Q$YWqujKPb?%;E^;+|no z23gmwS5^I-Np8#U{7|b-BRg_l{nL@4k)ew9t3&rdSGXUsR~FBaT_xKp&z4G7R#z)d zGx6VlY00KNgm12K`LBr@Z2>&0%_P6#^=1B|Z_g;K+j@n8 z{6rL=K#n_f>njfBZRn5f{(aAMpo2&p?d{!umqDy-dK*VQStPHO`Rxe!g>K&ZiV6+r z+xu=_k{_Xwn9m=V`=+4JWOzPpI|4uE19c$;zJbI0@1=LefIn_(Kf8*1_GeE|!7p~` z(Z9LkTX@hX)=czVLr&G~@YSDhp@Zs9{%kjc-?FSD>d7PI6h9vO$xFdGex|osY`rAv zjAhn|W2H% znazW`_gQ4lrR=RQ^hcRO&#nnO2K2Z4Z?<3vXvLUUA`Lp|HffRX*T9~ z%cOoPL0>d;U+P{2+`)*hyBvtVq2b);17Fssci`rzHT>s-z3<+j9=~Ud#~d!Dl4qy; z>N9F+L}W{{O%wF6Th5igF^7byxdq5 zZ=v6HX8#&r$|OHeR5|)u!-uOEbDX%3`e^oTp34-vh|Y^7W8k2Q__NZcrpQG+G3yNh z-~C4J7);|H2RX#a{qmo#;Y@xqK z;7`ne@jomKuOHanWR6_z{AEU@@onfvbJwqTYB5Mi&;iBUkDwQCc(^3(GLW_F6Kq!Q)=`SuCF zp8=bH+*MHqX_tJHYI_1WSG}Iys|LEUQTKCS@X>8T`sKsJiI$Et`%-Tl)!Uh)Zj^{*wb5BgQ9MXTbeHTZJ_ ztLHEJpijwmJdr@X&w6F~p3MXLkZaS-5b*Jq5`mK5An5YdpBufAXWd6 z1ODSVUGl^*m`3)bw^U{sL2qzTptGdm3k3f@63#&-t)$jBdXeL(%isF%$MQ4Dk1qMdO{y$X?Q8TZ z{4SGx-zxCzI(RUZyE*hD{IY8SCYM?*@#kZX&2-?tNaSeNd09edT_G7QKS(9ps^Tp1 zamn7Cooq3}EW+Q@_;INNd;o)%>M-y^vz6?78BdVks15K`1O920Nou9*pm0tX#(zZa zBl+~%_?1r35AMadaNs;1QvH0wF9tf|xiquMG|UMkZ5+x2zy18pX4FIydCEn+9Veg{ z_K19*&OAURT%S)GO5GqN)9PB(k}U9qB{RSFYGEst>en2ur^wA+u5zhG-7tRn`mtdf zlRWbNWN!)mEOo#^ylM$_$yLfmA}7K3_}#d!f`9yT{&V8PIFqDUW>l)9e{f#=%btV! zDZ`UmDdfi>xAPRuAES>ws690GaW#{~%DX!M&p)0|GAQwR46=E`oX-k=>+3gq!@Gbp z4`o!Z%Y~jQCAWH7eH#5*UoLs@3H-T?xr|H^Dw+QfL~d@Rko~&LRrapKeYcPG47CLx zxUKBOACA5f{m|U>1Mr8k$V`wNcvi*Riw}U;#kN}{X#&^l+50Y7;`s?5zZEhG{cN;@ zv16kT@WK57o~dF{AMQ8P4>=g(hlyNg9)h7Rl(JcsA?bYo&Yc*F)9 z@8oaLzk)VQi+@OGk}$^rmGA=iHu;Sf-YVdY7Rg(w5#U?y!Ie`csGFP`i*M3_s|prg zc7xY^lYbeo@R>$bUrm0#whuWHu@UBZ)HD0#7bCU=;B&VZJU^fb-S2ops3rV>8)+_# za$XvlTAjl-4BczdGb5g#lfVZq8y3SJCQtvwm8K(4AN#7!<#9j!i+x6g5%9~_{t58c zCGeL9C7zmWVi9l8GL~K>@(B29hm-iZLED2-&pZF^_Mnrb z(n(N^_Rd`o~2#UbJsC=Nk3HL_B=hE{#zX*{%!_RkQm_a;>ewZ?(Xk_}@ zE18x<_%ac`)I=_vPeHj{>BZ=~CA#PIkF!xp$HxReNAUlHc4|-AQGYT`jC=QerDEvZ z{Q(#1o8tBL^OdbsQrAPyV>+ZQG|yY#}|FW@hx25)VxUbD!RSI+$2HJE++ zX~2J~1@C8=L-{xErP?~*#Qouf__JlUKS7;SQwZ16SOMQ8)NSwELKeCDW0oZ#&Lkhh zw)tNNo^m~O?MZwebX)C%hk8W_*{EbD86U(Xl4(T`hNgiRR<2L8ugBa&(UkJ|JcBT& z8h@}qL*I?CnSPGhufO2n0bdGMKVz2m3Fo=b?df;;yXyYB zQ`t^*B7K?NZZ!+|+WXt+wruEt4OUv$2T*@|3=57jDdhLZr^#PeBS&Ow$!v!|VC$po zvMvsDKfgPUD5tPUvHq*d;Akp2%q9AEHGJkk&Cz}Te_>YXxJxa8zWl9chQ@$D@_gz< zxFC4R*XH^+is0v>=TF{_Y=mE3yecU`h)FyunxWky_a#*oCv^;ZjF(XFP!aNK)2%%0 zH=$!mts1V=z<;NZ`RDmtLbmB%w@=>8A}4I)m;K#=KD6vt**fS;lX25tUlZwMQuw5_ ziyiRg!Ttc|PJCI=(bigL=!Qurqh2>*Zc4%Nj-K~D3h9tM-7`7_-$I!0VF1ok+^Zx> zkt*aqjYS1oIFPrK4LMT?ePATc&VN1@zOi9VwKZ^p!8&F#5B#Hfo?{wPAE7T^m!40t zqLb20m!J7z6k_=L_?Ic*kpowMTzC&3adAVC@=PW2Nn@q~WthXtI1^qwc$1Knby<&` zGb!YVTAd9yH+1FNU!x1*!_gCQa-t&pmi=mM>8fQ($ zmeI+v@HfG4I2fdS_`y+a=tDX(_|byM5+Y z(BD$M8yY34WOViKtT#@ClzEO=2Y?^E`1@h?AJlVw^+g`F=)X&^$W#9vL++ZVo@)Sk z4emCJnj37uONl!ux@*8Am2@60`2pNAGymvxLhs%-2bMxv2y{Ky}@IF<0pB zqmpdfT8yY9BW*`(nICf4vIY{BS1^x6tF7=$W03_jyUlmvkrTXfK;zy^@F{7jU=8Hr z)niJQeFomBP+eJf0)G9Svu*vlL&!6pjb73Pe#^<;T&9;qB}x6E{G4pi%d z1KgQgp?@Ym9PB7)N5>I-5lcbw*mdyvcK!PfE9o>6{o3}_YUuU` zK08e=Lyx4etUb1(ZhstObb9T^Jz{$!G>`~?W7xR&H|p9#txf*O112#`E_Gdmxx;&A z`y{TZL5EWJ@2a3vi1pOPE(`eU>y%!O#be$g;a-Ntvj9Szr6_a#f1qpLUy?RWr;<}& zr)=fsp-1fT`osku?ny85YS~L8m&7(YrDY(lbKRx>YBlEU?thV0L%*R4He}` zib^z#cGgV@vdH4?;>)db;Qv?@T2KYxgDjj0aJU8>*86L>7W8w!on8wk(bwe$+MXJ& zfPeijgH21CkO9U1f=kHxm~DOj>;-&Gkz*M*D`c3Ya^%g2O7Ko+j-;nfR?ulij$bzW z4L#E&>ehDnxxe*N+%s+g*YO%ptjD>!yjt?z(dR7kzSF4CydC^J=hn-aJ2Vphh0bLM zf9mm>y|3EP4>a;_X?eq6HP|htod{ff&4G8?4vW3-ajP7b`hw@1^Gy8{a$z!gix2_t-zB%Lab-t@&g|{Tdp%^~KDu*gRCL^etI zDQ@&nO%^Qpc@o08m$!p=#QglqQ48HmjJBg(8Tq)>rBUyZA3L`xYB5hF&PhSuiSI2G za@gwdsGAXTxyPEKzr*iarr~k9{VDPZdCZ!H1^hsbOXvPVx3QW3q!a#-LjDNr)f3=r z+oQKkj`(9f>a|9t`#kETSfT|L?e{ohh?=WFj0_^s+CrE|zTCRtPmY-wbY zwT$q4;rropRz#m|J;5aJ&kA_lKwfv*&shFs+|vs|@01v!$SqzHTUPcP^8=0-S3Ctz zh+1yM3`SqORIGYJ2S4Y-jZSvXcc=q}6=$~MeB3{2*kovi_q1xW(OEwDU=PCl(;WzO z+Pk-=@4?r;_MAEv0o~YO{7jq?{DS8EFu8KfjqwfL69j*gxMo@CGeIYICk~f|0*AaD z8?^NpKs|KH;5faAPL@ZB#hFM0myevf(sv7UBEQZiTymq6XH@0g#Ucoh4>J*VZ*+e(;E7a02r6r<;<><&zjBFGt**m4`35QdlZ_or6Z4 zVz*}XUW7hbW^j0OEsNYTOe38cOtLc0nA=+ez7xwS==CA^M|vYO>tx~2pEteIlTRbs zvdSi%@i+&OYAp-+IbE}AV`aVYTX^@!E{>!Tdv&2@so+7=Z0Xm?pdfJk-H0P1)}&av7@ohJ24x$*WH~ zS&?JNGu>2hy$4>97M`D1gF46x8PNASLeKKtcJvQ{zhT(#Pl zz~i-+wa-o_Jj0pnVQ_to(@d zi9QBN))u^Bu0$hSu8fuWT*mXh^&-Rux|X;@fBUmS=(-R8HGFDil4kL|!H@>zC}{tl zxc_333c(NCErHjxS2h@H!M~pNUdUY&!5}}|7N4m(fqX%zbYMLj`i(;U$Qbyd{kqR$ zE4G3+25PuQ<38DL|8y<)1(S$Xbv~bjZeGo0xCm{Ryba8k^jd*_aB)xKaZl)VcN!M$ zq7tHYa$}*r9hLO>?Y)@RN=Wk36;rj1;Q!6{k4;mM->9uV-;4U29)13A+;hy;%Pc(_ zfV{AARNuKs85TLTh*6n|zWdeD>ci}P%;%IXDSp}kAC~gQEf#p@&ys+t``>}n-uzwn z4EYVEqkgwE7lDWQUp%yX9DQb6>I%Ip$cz5wxT5Gm$fQ^{XVHyA7zY*}MJ>RB^T?D?}#eDQ{@geB0Iq~ZD z(CN3#JkaL`UtNB+a#|C)kVd!Q{QJ;3Z`oFuPTa;`h+uxxlh6&L>mBsZ@zKdd#PeAj zoZG|k^+MdhjdQm%D^z+h&%0wwoR<%Ud@beNq5vF4qL zInBkMx}oo&XZtJB1l5JF?6Zd?4Oj+0q;L`e5pz zrajQ{qO({=>KADwv1HnD1ohk~vEbxR=%wXGpD%p*z#uF6k6ir@-Qg}HCR`r8BH^j< zdN4|%Yyt3 zHZH?l%Ki(3arphZB7;o_gc$BxFWFRqc}OJ{ZYFqxg6Pa1 zUkS{o7(Ec$DFxkS^;Wa#t1NOxLzvF};=2#zih@u^k4Q$WL`Fv@le0$*G zO(F1ISG~+jZf6nRPsJwopD^#6V->S;5c;)OOwus=s_L$l$6I-5_p#v`1%w4C2NX32j`Q$r|6g@ zbkKRH8PQ)K2|4}P@8ir0yECQ-l$0@F#5N^|0M)a6ZY_kEa#eo>U=vsC^vlc*M~oWh>JR<9s0*L{-uQWANi5NId&(Y^OCkTVgU*XTW)M%Ux*8tz z4R_f)Zkc$mE=?!bSj_?#UZZdRGe=0kg9?Q+;0Yea8FzN>g+36NVBj=HC#hbaCk{I! z_szA|>lr8V3wK>)^??I7dmfYvuf*TCL9?(X8U9b)DbKsmnF}X_jbE>a&ug{GJVFaO z1DbYH6m)WFq5PpbMf9KkUQIzd^5u6O(={b!dIN>TwtmrkGy#2ZHpXb+GW5iDB_V~k6tei&p80X$IZfL*VRq58b*#e2(LV zrYD7Io9!NrIS)Rz-O~OKf+#D(MTEnL3im3%+*eY#?>L;V^}Hn zeoTc4JtSZK$!g?r*L_GG2JY)neA?1kh`g8ktujaGPsWQQk6lxs5hEd^3-XwwxV_@F zm1z-$xJNz^*WQcY|2BIoFLda)C5h!rfj_pYjxJBkf=^$c;TQTD`dQ%WGZDX`k7OS- z(1I^fSO52%GI-?Q*_i-O=%(e;(g%h*C{9JUdcgkx#*ar z_Lz`b?vuQ2c;5DYNsXNksA%9+$s^e`>vgW6cC~x@~@Ejz40OBF_CasSEU)J5dI!F^V8&l3%^<6OM6A04d|q@M0wH`qzqei;GOgg( zS7X0xAn(9+y5GT$MJIpfHWi&|M;(^CC}*LExwz)uQwKld-~R}bv%!U(+AuO60=#)f z_wwe`z?n(D2cK3JU{QL>LAT^<;F-0jIoy%oc$P;I2{}$7nH1rf)4)f<32&0B+~B8D zPD|tZ6LV^KR1fgomv_n86UUGv)?0LW%`?nrq{q}mpfA34J+dIO1Ub*u0usT%zm_J} z{$CQ|gEmHc%)tK`6I6M%5;~$0?O5{hd+<#@honqFr`mXDB5`gph3rk=q#6_oyw-Ck zHERa_$C=N0KkA)O)8W%UtTE@lReP&Aa-W9m_oh}UU_XJ=0UDDH^VEK7X3Eej<_4?P zM9Z-kDcyMFD)MFP1u9P}?f{2_~SF)ajokyCwS;m0euvBBYH-= zU>rH|l}eWlt?1-|0?)LN9))luJ_r>Y#9XDb^BX%U=wUmq7AYb(b@MTGr&tdBh?Mez z$AW}h?~bv1oQ6FLD-Rd8fHxQU{n^a=$0V7iq3tQ?D>anXs7ywfQQ zzEzXpxC`espNpGUG!#1RLX7$_`1grL=elC@QAb*c@AiH|R`32jEDOD8k-CF@%quz> zDxTf206lsnYH7xM03>`;E z>ZyhIi>c#Q@F&d|ng=AIv&d@?y%s>8eCPGZF!c3Pj|Yo+PSZ$QnWRd>YWR~J z{NIa#hrXB%4?aen*>!ftW(4yne$q?pHD95w@8b22!u{9Vslkf4O@p6u_<@r-biuRz z=C{E2EOI$~ z2m^oZy!`0XHww91XZBw64T}iGZI?F1=Qao{di!i0^!WbQv)?g45or@A2YR1M(b?f}8GcU=hncv%K%6gk;3i*Y}~HT2ch=o_GmcfN^b6nx4jI*s-2m?5tGz_{ z!OK>i?~^)>JX3i>;|gKmY1{p`cZnkJ)1mg*uFM%eaxdq&<00e<_m|QVz5p+^L=C)x zZ=!SMq2FQT!#oez?ocRzZ@#ERAx;p!nT^zWUhw(mspwgC9VWT_^DkQld~>c}Wm`pn zCncNsEtJ5wj`=GZeMW8};zRpDF6zO@U8}0cM1Z^76gS`-{K&$+Uf_8{2Rtn7sUYiPhd$Bn#UlBAPD{SxF%HvCmSxs^t|d|sWItzZ$lpRa>A zgxu66HAiZt@!ZPy7d(xilFt72nouX;IvbA^ap0mS3`NnxW)``?m!xwEx>lNZ{KlQ< zF$cQPq-}z{is!nhjSse=Zx7v0(R&Ep)c0lZ&i;g17Aa@}nMg zMolK8GOZT-2R2nS%7Sm#g%z(DgAQV4I%s_u{H=M)L&XgJ^Hg}BQCAIk@!F>CF_#&{ z$0a*L#+*U?g`=NXChT`82(7=MFY7SoG%&PE6J~-pvzf=F8hPLPE_XDKzI^zQ*So^@!?1Atl#@j5%Bj|yp}KYuU4ss|G%AAz<*|wMlA4x zq)^xYx`O7TkGX-y(A(3sjPCw~pSN_0Z2e>%|WY*>86T%?r zrdj^SZox0`ig+WMhrKtHA332hRI=PE3koxrWf^W*8>VMt{-C!p#FpYN&(C z6GtyxxJ4u5iklMlUuP1p7m~W_ADCp%@;&1lZy@g@>wma%FN^FO_peZr!(7vDs}-kE z7uR&RF4xBU-8ynTKUxrb$aEzN1W~Vx4cc{*pfmh*ydR?V4LE&|Yw}&3!^FwuMp-HF zN4!_6wxLdpcn6nihcU?Xx$3-x&6wvnD|`0-BD~kZ66H6Cz=NfK|GEf$swA^v`JX!M zNqu>`zX~~KwpZS@c|S3)suLvUgg#wz>{{JK#|L5&_){P4EwYWXB+vaBQ zcPazpm{Q0i8U!}#>o7?3?sRH8^rFQXjUIF05gT_OySerzaMxPGYQ&t82LH<&*3k^Y zKPe=W@fUek_9DAT_!pl2jm1|nSHXQ}ZTtxO$O<8$*_dP+`RjOM=Ef%mQTDhZtEPiG zBkpos1J7smOS>>h+<$3%8@|dG;IC8fy8e~p{A6$Au7jS>NIpW7@`nFvay`C(H55Ci((f#1Rk2B5NHO}fq$*ZZ`plR0y=?&ft-uRUo=O)$ zH`}qpUL)fui##vbYPA}CEj{q+(`_ff%gU6buLk4&^n9040**|Y2>VLMKehk%WDWrr zaJ9JX*2nWXY;(GBH~zbsSS3#@`25?N z-t}KJ&n!g!cH)nSf5ae1#|KzB9hfIx_FXCizLIDulQ{>!uP;$4?VA9DWRE+4`1l9& zG~qA$XJ272jQ`8+a?#j>!ykDv9sas+bH@5$PV75KCO7=1u)k7n&%>nzK1(*cy&ZBy z%{%iCvjYb`n`f3LAm7qfs919uYh{Ax#&Rt4$O1E z5P$lz3HhrtCejZrF<+9uvNEQRMm*e({o6kU-#)U%R0%wgPvk>=gD#W!-5r@Y#f0BE zyiOnq`nI>7uW>JY)zhmJb}n(mTvycgNX;A2T?T$P>_Oi)y8ezw7dalYcH8YI9>N!S zB=vnv4!DWSCB57obM3qD5{vW5dD5B#JyG{>MmHAa93^Dd=4azH`t0q6lYQLCAzbKs z_~w!x_7S`DFJ6Gp5OKdnWDxfuYOHW~tO@cZJ`sUh;BAkOuGymo{l7EsfN3`PF*ldE zpBC=15zlX4o%_J0k4B#Q)xj_JuzHZ551y=I%JXp(`cU2;y`H5MGI&1o1v~JiX2H)q znJVmoh%}DK#pjrQEx=Ql$0Gd?B}9jS3vD);)@->295Rx7;REVs?N9AbyT*|h)NV9d zd<1xR$0>R$>T}2DWrB*}x#~ePtGW^?Bxl9Lrwx|KPi)TS{DqvG2*q*gjsS&})6!Un zp`-r1DD`vjCY`8yviS!(p)R)!)Hmb&e80{9aw%*8hFROfd>i!VuRo2hoMaK>)yp?N zLSAUmqT0)h5E>DdVke>t=)1eyV+C9pM8EH4YLp>zFpS#98t9hQIUC#b^_j$_I&8Yo zmk`?Cxueml@IzJz%<~_@d-V5M@A(mZJybnb0DSZ2*}=>vS7D zz@wvU)aPyy!lAHg>T?K#IMwOdIe|}Hm5D4~3;m(xm3+aXZJ3{Xc(hF9GxjYNsAl8= zXPvb^(9PHceI>u)WDW3bxlhjrpLTpf$wM;EQn-lMOP7pctEb47n5Y_?wK!M_Ja6bIhk!`xbdQrJQ0Ws2{+Qum_Ia>%~VmV%E{ z|97t7G3JT_YywuLPEg6^;0w}efyk4T-DyeR&mciP@7C=s!5*#9SdC#>COMRo%~FA0 z+rRXorXn3V`p`~=OBUFx@ckY=q6&Vpb;3OBH+=r~EsY&Z=;Zg}7_Z|tERyshXe`|g zJU#Jm?zFK2zk< zdD50<1fQmm0EYhSchJetTI_hx4ZotsH)O{k>TRjARh8rmC^y_HkM9)e>)-UO9z7M`v zt>vGi7epf~%{CNl*-j@*)lywvP=NcQ1RkYkQOVG@9e<+d53KU>Sm=GIB* z_`_LWnL99N%{n5jr~p3sIC0ldJaSRz9rMkh3z*M$I*I^yzc0FZl4lL(r_?OdmO|GS z+t>J`4*6j=Tfw!0sC%C&F89v>A6krP%d+$1Jtk*p3#ntC^{LgN0e0+NOdkCDFc-Nx zL803>px-^5llp%@=9Blj!;b>7H*z$C(p8E5g^Rsuf5)&#q`-ZNxgU4{ zdyq*h`uZft{nC%XMeY%k?y9y`mAI5runO zAl4|b7W1ufmmcjegrC>AcW@Fu#*glz)o;K*CRVUzZFa-w{TLh~2mN69n2_%2+t7ik z8*LrP+r(6+k)jueM`kK8H)-PZRxfmW{*m_Hj>!O#Qm()W2vUwRR^e*Mxz^~T9dj{MrspMQu;>8~7JrYF;kyz&@mP z9rkn3K`TEcuY@Vyc9f17S7VD9f)4W<1Qo#cEvXI%9ib8w~n(M?C;i-gXLs$kHB z&rY6gnjpuKe(Y!>bgq1Z$+HR2WoiyAx9Wr*KDlU&K92u=d6Y=Ev>>1J=*LsdmDq22 zHu=xb)6k)fUwnv31WsJkpmL%bbB&*S*Ve-4wcu24K9bEKH{MtYheZ*R_#b&+0v_Yl z{(TZlP&8^^S|hcjh<%A#LqZS{5-qAtCdnijS!T>kB3iYprKnx1+FDu^Eu}O?l@_Iz zqO`PqOKT}gE!7s)`hMp*_j#7d%w+WaU*G?`uJ7T=ncs8nbD#U{_t}q@Zy5I#&LjGu zee7E3o!?YRa9*y9b)qR_1H)HgKCgbyQ^AeUp1atZ^+N+$?G=|p>mI{;_C$7hL|y>< zuuI?i?_u4{!5{BG-MkOxpPXf!EwsR;=H>q2x}CQ*7PPYHCaDdmMe^&Ay1g z&y&uy7>n_$Bl{{OOqy7Vy|-ld_dPJ*)THoM>2*DE?v(S5lML%rADQl`^H|#w>}>OS z);AwQ`*XC;k**&=udbNaWpH=&f2*~6dRJ%Ek0ZYMI~x7*5bv5fR!?C+_=yGu6W*VVeqn=F1HMB4;k~sVo^670 zre>VA*pS#oMm!_X1yw9~cxF7wmw+b@u%)~fu?(4VS zt=9wYhn_!IGYRVfOwZoj(;xF2S6`nu{3(o|oT>J6N)q&^es#ZJk8!lC?;rfKe$Ucu z*A~aPwOF@W&X(RF2<70{S+PfIVBRzP#M{4i`m+S~%|?xz9DwtV!oE0jehAKudbvf- z53%lgbF11F`q)abuy*6N|BCv4@66b8M?XQlv`cUI>OQ3NusfHxp?pv8Iy-4YHumYH zJu+=@67K0ZpSQQuESxv@&Vo~;fH#&IRc~}3oI`H8P$KVp%n#ImXxZr>a1ZSLq=_p_ zV!rp~A37a8jQwM&5BEAz2j`A(omi6th4yW73`KC_mv0kg~*e52VKY#Y?aZiOE z#5rV71)Zpj@wd)Rs+tFm!g{Yxcej3rd4UsC8|-QMF8YfZsS!^mB3>3Qp7SR3hHqQ8 zs?`qlZ(#tg9v@hmB|UnnWBgOtU%Z-S1-w_9m8w&@@%I0eU{$s)Y_uHlo7*MwucY5f zK{j)AFtl zJz0{KoA7dY5cK_LPrbhFHH`bXoNvy059?7{e;a826MDkSUyN%!x)Sz-m3?+gS}oL< z>yoOB-->yOhAoG8!}wF)i;fyKD`387R_}){pT|0`Dy>RyS;5$`H)m8$EM1BvyxP6| zUskM_|MkkLtBWzOQ)BWk)m|;Z!uJdtR2}KmfBN|jbqk;m+Ad_jeH!C3LxRdet!MN5 zOg?b(E9e97+b`WhICmYmIxrIJVdj;4d`K?JY26hs|4^qX`UOK>$8WwB$fhqp-u-p- zD-I2{Puz)qeYZuqdnPo(dcN7G7PanLidF4*@$(MvlwfB%j0xF|@x`0--d=X9RcW?r zQu(Wu{zg6Ubfc@AFs{6J*DL4wxuR>U_1qVH6!UuPLr<@Qe!22MP+`@~66~9QYP~TX z<*M#0Nlll$jq$&<@&Ne)?2UnGJox(&|4Fp%c*x3>vXp`J51<}`K+nuCiNbSd8xm;w^)o0 z`WNYo@?*~69Ol9=Lu;pFzrmg#myf}CcSJ6d*WE(B&6FL3mXKVMZO40E}c>l`7-H3 zuSLIO9b&EHS6+E30`c8(?u_SxksoSwK0dt^#;>5`B=}PIG>=| zhFia4{O`+ZGgA9wyrtEEt&J~_#dvAAy^rS14PZ+TSHCg z64uu*Jr(o;+B0kaxnIq4<8IEzj z_x^KtUv_EsQv0P5FQWb(b9dAGnb6|{>dc9V!MNm|k0(Xl3dH?Dv-Z{<&~~qn>Tmton6QeyRsKdMZfOz*Y7;X(2gB!xzRCa4eFVZznK5C1?N5- z3s`$+EzVglmog;~;{o4YeWv6W&2U~-tHgFa#-g74WXP6xP!8vI{w?kz#@&Dad+xN#0vHq}6{vY2~Xo`81{JnKAV?KV)jsI*e+Y#se-sm~xajbtz z+R=R5l8;KWB`0 z#<=6knm_EWdI;yFy;)<)PmOWj%^6o-_f;j>F4vg;&8wi@dvZq0c?i$Xk2P6W8~wMg z;d7Vw!8pm60Tt>V*ok#ACw_mU=M>zN(yRT{@DbQAJp0M>jep0vz_S+oQw8nDtON5t zdF~&KH~)NK`nTApv24s=%O_$VQskH2^X>B)d)AS3$N3-hAJ#^No({vhj=WZX_peu) z^&D8M#>|HpGyO8^#L5h;7k=q{!~65l&n+mG@lSp1Kie|;T<$a2r*QDZ+Z&$4Jo@W% zH6e#Fu*jSbdai|DeLCx{j$PlzKL7JSb$=Q9cmK$s@)uB^);zkr z$JF<*PNwQZbLwH;(3pso3u?8(Jlv|)C1-aDU}L9rtht}zzO0cIrq@RPT|R5m*tw&y zFY3&9qw*@?-iDdex+P)U?YqOxCq|*+aORXBd#EkWi#vPq^k2wt&zvv)T+QZ~r|CQX zV*3t3Z04;Oo~SmW1T!rvUEz(Pm=}y(RqIday(`vEKX4uG+jEaji=F-@{K-60eN1#I zw$Kt*qVW{88`1N2hGM?_({6`1X1;)Nut%re{BtGdy&tX=H05vfqr%>)HpPa0A1!ig zuQ`NytA?8g@4$MmffLSu{TlR`-q#inpNV#6nXTT3>8LLzeDqoTee}0N7k(SOvLepi zPq_DPtpJQ~-aZhx?+DuKm_b)R!Te-O_iO1}zQcKBV4=p)BoLBFVQ zxU28X(OBnSFR<%0te*>h`n^pH2ch3qf54b(n3w7Llgki5Fie!6Kepee5jyiz~DC-<`4p<2PmgF||7ac{WU1JM1s?&nHh9 z*<}Eq7irKk{OOXcb4bqS6=>i4PqMY&ig}}i^B*ifg!LrdZa=)DNq2<5#|vpc4}kug z`0b$T4Y7}4%fL_UO)-Dym>Km+E6ihUUikAuv|lS;x4r&nGt9Gou_JwL0LGtw={m-` z0qf(NKlE&0^snL)h6G zxO%1(E3xyhxB7gBe%ZQVv9W01H%7F%)&3yHdEYy{{|5BiD?{I1R|oa$(^(^q%s@Nb zz2Yy1fLfn2j`ynYSiDcdTZ{(a)BSif4ZU|NIAXy*=o`{@M-D|2TO6wY9N)u}TO^Jjk9Xb&)cvd4C_ft&An4+HtsvQ@?1{FY@8QX&3^jT&L|%{&)56xIoxy6?N~G4=&)q$+do>pS%dY} zFfaDi&$kz1JmRO_T~>VkJkII-s?zs+s^grL#|s8kS%&)te_9rI82z8`KK*A|_?KuW zhTW}TLA_da{*Beuu#PGJk)Lh*D`1~$mkW~`C8FI*TK?4+80UF++kdA0wYoHGKjzel zwlk3KO|QAy9ox9%$j@oJ(f*Yq9Ub6bZ_Itl7$B?VAu-HcPE>!*;>%=zYJYO62N!3{|S`RnI z{+JDopD0WVWJ`vnEp3N>(&%8*#p-C6zgW@q+3{G{wd~a@zudq&xSD6VSvi!9fV{=g7Jw34E;x3ArteF2iyJ8xAr{v^LVQxNllO+Umm}=5wAyn zp1Eo}^x9Zg%}SH*BcIPZcQI)X&e41O{I&iKa4*EFq&+{OeYj!W^kePMupYMifjjds zUKv)y`Q4q{xR2<^t(V(w#5pR1o|y6p<|$76yeRkz%JHw$=a=dC682mEF|$YeW9TQ^ z>n2SGUHmr}wr+nG^H>erRN4Z6r;p2C{tf!eH+Q`I=_c?WIQGgLqcM+}z2(PWKEk-x zl$&!7MPj|=#1hWrc{g!y+LEXNqy7$JKlctB5EF;-)jb`@T%CgI`SacZ?_-`f*A@Os zFX)Y3rl+4;G!Ob#-u|b?kH&hakZFVZ{etm{UAr!n{T$)@HEqi9^@yKS%SNr4j&rD+ zzjk77bBv=dVcnYM;(Y$(`lx(i+jC& z7vtlvI6tm@pd@>@#jd{Ppg%2mY2Ne88eyFDY@53c8)KaD;A72>VtvSpU&h@2?FQB_ zY^i!acLwf#dMs$573(@nCoJrqjsC=&Zx)m`yHFm>b!z+AV%+Qa@xl{_92l3ZHudzQ zm{+MfzW>(^F%S6dig!--uZ8m(8_w?Val0U_o4LC+DHrv3^Mh-@uL1q%r7sW9fqt4a zqwhN-dSE@4sm}X7t75;>rZ)59!mtn6{$A5y%u`0)s(qpY_}42~-#iU^&)q3ahCcB~ zNw)X$yr0Yip?_Ll%Was7eS*U)y=Mu;dgt?7OFj<0@ZAMR3m?kE{_(HJ{66(HtZ!dY zvgRkyznb=sJ=7cfu1}S%IkFk#J2r4zm#VQipKttyL)B|xym@MHn|INV+cId_o>on; zZm!q7#A?u6*R|e$sW0l&uWpX8Sge@e?ruA5UW0PfsP;GA?qEFcsPpw3lX0KIh2$5O zU>thm&ip4+n+LHM-srzG>IdvIx!Ypq*QL?UG@sSwkANF+=z8tz-QJvX1Lq$f zuhnM#aNP6M;$+)}1&D_OEN}VqSU+{U>dvc=m1KP;Uu!h;ORPhk*K_b$jQg)DyXoot zKDa-y-_gmNq3`}!Z`0W$=Ss3}>yDkR8wEY|onQ0+NJF~*lm60V^tWfmT=*;u>-ipj z^7zu{FdqBo!EauyJRb8Ki$C1T=i7#_oEBNHG0w+p(t1hrKd{~=vE$d%FkiT^>y=S= zFs{A&BS+PXzd#PF`Ps3xA%Dt>fV*gq;)c(gQLzc;Q4Vbx+!5V{HbOj^v64^=DvsVf-m0xtxCJQ zSeH6s$44LkgL%*@a~DMajB(ON6T&aY%AJwF)lGb;Ds(FpT_*u zrE7y~qrdl;Yw6w>(2qSh=xm*Hm$BdF&#p(??kSDRf8X6`tlJyj_TpX_#zmHY7gRd` zUBtN!c-l$U~qw?kKN!#<8bN&{~7DK3lyS;eV%lmE1w-_jLGYb{fXJhi)I*yfX4@=!sSX zCRW0}x#=Iw>U*;k`|yuHOP&~lbB@xE{qZx#+ow58TuVwS!Crdg(JNEYkJ~V-SDnZy zI43lr_3+D&W1KnRmreN-F+Vi_l~rqwW1Z%z+>3!rv7hYy^vaVlo_#iGaM=5`a1L(R z*@)R#*U>VtY?IQ@V4dKHKc`jSkNt|_%LYA+ayorZ)5jLBKt12}@!ulRuBPq`eB;f% zC^s1m&z~QT{je{8_3bWhfWXODx@X;r5x1C0WN<^S#rrlxAl-KC|}GOQ;W< z*V}*medrtScRiem`TgKezxl1=e%yCEW&G0L7h=D9hfinR#yrD!x3gL-Ie>L=anDr9 zTYz%bDDdxJfJ;@n(s)84*12wPc+XE07W^V7304*mt_9c+8?&28xSeC%pG z^b5@Aw(fGZ*`^?@JGt0t!*mzU9SAO5TmkzfW?ZVjJQe-^Dxa-9c>?1gJx(lmp;a`_ z34QDA_%yWtQ&VlRM^XQ+; zFpm;B{l>Gk(GTgqulteNSV#H&D~-=y3t-`oy!Z2Sb1^@3@yPhO>#^Vc(VCU+VE!Gd z9`1nPe}3nG&@mFm-`x0({|VxM7)m5z^qIti-aa1XuR@5$@5&d2n?g@4*~8j*#ZqCZ z@=+}RH~t{E;5>`O`Mb*ET#^&>X7ZZli{~ntSIGRl`fz*aekc2H?etJy zh2Zpu8=Kz{C^z3<#f8y?$N|2fA9bH(Fqsc9Xqh%fVx>-n#{;3^;+h~5r3^c zHL>ofdSfcrJap!n2X$8*KQ0TGgUi7E=YDg4xu4v>g67k^&xve5;>*8wZhrf_&6l3} z^r;RvD%}|J)`YHePdry=ZNZwLlL606d}PPumi0e-vHT#{vpXFBy#K?vRi(dw&2{6o zUAwHWoqMU*j%#~g-}UgpW##MJnqCT9Gs)HG`*$`B`*!M`ynzF{6lCvhxq4rt5*t1r zJLHq!9y+tP*PK-+2BdsZI{k?!s!T5TVWaSRwVU0`ZrZPMh4AMhQ?f-QA zt|ed+MvYP;U5SthIfV=*J6 z8*Sdcq0Of9bvpD}b27I77fYV`&DJdA*9otC-*1#0s89J8bqSo=!71o{Qya_0tFUPw@1zO?%-cPqX(I zR_n;qt?eV9H{fYEzoGR@o_@#r+<1eh;n@cL!+APxJ~88Eo|cv+>qheQ%nfWZgs17m zb1QRrx*q>4;$xn+o8v1@4Ttf3aJBL7p*$~~-n8I#o*#ZlS^qN6 z6RS6l?8NiMh4-%Z;(4QE+X+>8{zxrxBZlXZfEL}i^L#RA(d{EVue8{aP@3nL8UwF= z&GSs~JC;E_-!wLjc$(*(!lT<-@%*#z$gx76hvL^p4B+|b)n8_v=6Pv#^lLxz{FE|u z{~n&F4or_Y%k!1*ldmFDk%kx-L^Xff#K69+SzKrL!D;-j6@%$G0 zSjyu(&t3X>!Vf&(RUNf=BhPzH;vHvs{##;hc=>RbMqdPdy0hNrg)bd_?3Xi#zJBrB z%lSuhejVHY#oxEusyo)CUoX9~VBhjRFQ$}xufm-jB@4P%s@qnf2f1|9@X{gv*kV!*&m@GwY@IkGwx<$;4~VBraL7eMQ`i`rnqF z`OA`4@Bdxxsk3))yt#Y$nO~kC-7%sNJ28w;yfr;4wN=};EjyTUY$o|L#g>(2by{sX zPFXKYSC)LcIVaWBx>Z>6D3`^Qd4}rylVlztb03*8)?}wG)tZ|fIk1<)qhy)#!BuM1 zG1U)k+M-Q(r*%ZPlFULfHS(&W18k-vg)XZ!v8{F`1g<@7vDmcJ+TU~V6X*96SVF2}{ubN8!3f1T*{S)BjI zbgaUY^X0N|lb4|ycsXybqhsp?D~p#)f$jOM44M2J$K~*HJFbpPJIt zVF*N#e;iCM>v%FJz~o_=h?n!3gqOQVSC>KUW|&e}@G_WOuD9@Ve^%k;bm(F!avg@r z?Z3gx?XeVzHHL|;EK2;~r}B78PiZI9GeCZTiTK~i`N`)|V4gPeS?Gpm0`vHn4~7~I z7+q!q#?Z0>Bisf&*A35e!`OOYpx^9;|QNk@g$NUh*ABn5Qv+>~45AVJX*AH}}yG3;sO6^JibWz>nMM$6aemev|f13Cr;8r1X*Ylic|2bF**Z=6*NXOMVyK{6FW0&$!|5 z-SBlcypOPquj6j`iW~h-H@w>o51uUIL+00fHyl1m*vtI6l(5V%JBc1cQOaX?vp-4Y zfwv9(DIm=2aQ+-2deno;Q|N9#LHIB2XHOJZy6;B#adKaS_+dy=d9IUt6X6X+UzczO z;fB)Q&HXsSV#o>eKW_28ny_rMGblbJ{dICL<(o?MvOelIz!?9tiM}GqQ-k=)@PreV z;jcmRHz4{WgzHQ96n<&HlyDQWXD;ckR^+sL1#QCPG^JlO{_%G{E_xf@i`7h~12}}Obgk}CpA}r(QHpPcj(%kvG*Kh9i zlY9AguMgboC-?k6mExnS2rfHPD8k#~O<_jAAkq4kvRk znf1vmPv$+MA5A#8GKG)KIQrg+Ov&F)_#nA2NjSf;aDTB8g@^D|GM5nDY%=YS2)e=2 ztS7Kcdf2uI2k{M2BG?^wc3&>0&^UN&aZUgZz zd|BX=#CNr%Be`n4BJ2z22=hA8*C2XE@(m__JEsV`)nsOnyHJu}@?T2fye{d9PX_Vt zMrItDi8BKESTPWmsf-xn3Qg&7i*?yTk^lw$7{|i54KB!Vj$Sd`# z-Grqc)P}+<_3DchK3*U3=X=uAWV_px=%rqBj`&HvW;9``7bOsu_1$seC)=$L$X>Q{ z=VJo=sZaK@og7W}QZFb;_OjibL0Go4bqGs6EsNYgCfKv>WH0ruD`amX`*Vcr z5xzzAQty~VSn5$%2unR@7-6aBY$twFuX7P@MEutgM*dfx`V_xXk9mvuNj+&8(KjXf z7{XzM=M!!&F}ZI?_#ol-gsYH$SW2Nhoyfie;dO-hSSNpW6aTIPvL$5Sjc@|lM-WaW z+=Fl=;Yh+u2=^php5*C8cm~<`CVY?l>qGcB;l6}p2**l#a^IhDN#f7PefSee^iK(h z`)Wk_=Hoy7nL1nGp#rjB?yO7dtQ>TY}ZQ> zzBpgdV~M`<6fPDRNBb$y>Lmh~Av~4%Vd__TWc~UO;ZX9wJmCVOuRu7O_*azlRDbcc zjr=)DIGFHM!j%Y1eFaOilt=0-l?m4%{#6Kv7YO;Wk8KFGk#Lq-{D!H#m_#(Lv zA-s>$`*Fe}37;hTMuhVzexD$mLGm;vypQ4!OWBm?HtC62s-Zmj zq_2cYd*X+sgUVAt^0Xp6mE>j^ieD_TP@Wo;{#Z({ zJkjKSsI;f>SqSeVoJn{!@y{ZhPyELdE~NMkAO++k`B#!~A^8_Xcq+wzS;Eo8uN>ig z^1r-vPw5j(ID_0*CcKaAs}L?j@>U}}nDR?4!m}xTA0>R7@^e$d1*8{uBpgcoyAa+- z;pstm9MNYIE<@o7Acbll$y<`}YVt3La3RT8mT)-Xa)irJe3mC%gZj0#2yc+`O84Yn zCgEt3KY$dp!4$tG39lylAi_1IJcL8ZzjBhE?8_6*C-=1ohZB8A!Zj#80!YC-N%^HD z;lX4dMED}bPg%mNiN2h~GCl~GA$e*^drIGqglov~lfqbrkJ$nX=6mid|RK1#oU z7Q~2|3%pvUPmI7PNuF|X0!PdGakRh%GXE03Mf#`I3%d(4CiQTN zMplE;VFcM%Aw85JGf}_&Bz;&tN3_G=5-vmi>h}qsA^W9-k5Iq-6~Y-bZt$g~r}2an zgvXJ8#|SgBe@D6}c|Rh2k;W@_6OJbP?+J$!mi>SNlJ_9lpQLj531K!@gl`{V+0T*v zq;M){uSt4xpGo)%#h>iQ1(W>SA}#|=Wszvbk^EH`ew)ZXiTW*T3Cn(r?6;L6`#a~~-x5>Yqgm+SY z`HJvyD#vA|J%#@$;X*1;{~;Vr@y+M$`BOmlUkJzw$o*!*Q^|f8VLQolobYUt_btL@ z2)|2s1I5Q_iAnx>gin$@X9y3b_}@l&HpTB@!e@y8kA#m<`h7?EI`RL3a6Z|eA{v$yKZbB8vTsH> zpW@p|xIEcEM3_vl1+ZMvn#BV!c7x^d0RhCkCr;_~) ziVrzX!zg{_IK%hkzC6)~Q~Jtrk9A}($AOZ_y^H8el0B(CtboF|p6r7uJaXJ)63J76 z?DHvn{Rs~v`%uDVsD2(!_!jwBmv9S;4>RF|r!S2wx<5 z1`w9xl);40Pwuw!bd2)qX@4f`v!zhQuxyeyU4yi;TmM0M))FyXBOf4BySVK zvq|1;!re&TiG(AGzBA$L)IPpM_#XM+k#I1%pF~)WBeo!XgzR4@e1__ik%ae={JDg~ zsr(KioJI0HLO7W6*FwVADL*CeNxm6`lSrO736G=vx|(o(^1mA4+r)n`;nC!Ob;2#k zzafN6QhDe^cs7M^GU4z!qP(pl97^)#5l$j`mJpsn^3)`pLHX$!!o$cugz!$XPbC~p z{C5zx6aUW$*C6{1gyYD*P}-Bc2MCuT{5jz|>G>()Xv*&& z6OJSMm4s`M{i}qth+l2Ox5>Z7gu9Xa&k{~0`qqRukp1(7cT#=Pjqp?|FVhL%qws|j z9!Kdpj_`4^??Bj2_Tvd}C;K{tqvwe9e~$1)%8xmOuaLZt65dDhB@$jj_H7Awqx?6T z@FeojL^zb%qh!M8$o*r4^Jfcrk_bnVeH+3iN{=@PU!?r<0^zsFzea@jk-e308S>vo z*iPXoLHIVw{}bVz6o0b`FD3bw5gttZH%fYn&ozXPkUrIu@IH!PJ7K7>|lmFapJmF}pDE9Sl5?1uO|1;8$$68?dFM#>?PtRcj)BfRH zaKHXZ_on|(Q(X)8xbYJvPMZAEl&RCEzdU2+tXF2wnLBU(f`y9;US0g!lGopObLq0> zE8cp0<*L>1tXaG6-S^gScz@%j4>oW4u<)a;+qQqap1q&%+yBLZgNF`( zdF1G^ua2Mi`kRxdzWwg||NL zy7%`#_vJpwGG)s>RK7yRhl49UQn^aiYSnAhtW~?tqmR`!)eCvNeuIXMLZ4{dq-j{Q z<}F&bYTc%7yY}H7p6uAEbC<5&%*iRKmbCN?>+sC1>>QhYgv05|%^R6N>iK7eJ^Nf@ zl6U(TM!z^_?EiN7|F`}Buj4%UMBc17#J|A87XV7&S-z|Tk4VBDM#p#2LB@b8~=uMdxZ;nlm~zsq>2 z{~y7$OE7Dp+Eigx@LPNh#&7wHQ~4QSB6FwrFSHs}Fw=gEUjYHUHr!W1=t=p%iTw~s zWOl3Q`8%_V{bbP&GHE}XX`7%IHEbMHm{WBdUJp75&XmL63;I&j;PkU~_DglYIW^}Y zAE-0;`R{IcIbZ#w_cs`BuEQQ-)RP!~bNVtBHTxR6-<**1kdNM9&R75F{k>=^!!p1J zai}LT{0;;fr?W4>Z+E}B1I|nG*89)->z^?IqoFKweYsC=)+lb5X&J@hb8}M7K>cjO z?CG!yjE|-qi_(3LwdJvdj9eCxo1W{$08sxF7mGK$ScKidl5^A2EEx3YXLhi7i=FcW z{~XSb^)d6`S)9(w$Kk-6B_>+T$xxC(pOS%Z;K>qlEzD_2$#q~buUWF08=MC>aDPiG zi?pP$o|a_B`wm>DXVA%s>xVN$V*B@tf*HYo_l|uk0)ur)0}~Q@gDxow2V8Z*xlMTS zpN;N}J0|gV>C&0uKkJOQQ>V@h|5dUPFzCU@J;J&)R`ynfJ^>yL@#0$py!G4HSN4(RD!V}$Gn1Lglw@ETWICA= z-OR~EuQ-cL2NR#Wb@t#dI+xi@{cysbnUTX=P$G!G#p#kCRM0 znVDn`Co_%AR5DY@OkhJ5_i+pv6;A}2{C6szrlx*)O#H_vJp423*ROeMYI6d>X=ZDd zCDr7znVc3EUS3*Ec8ASwak#jP6vrsL%a#ZWhsBj_%SSPD>b|RAiqL^WjwIIjaC(Cc z%AX_G>=43%4rN<`ViR^^Hbik*Qe24+i#gSnBkC8BNxAGJGtAD6M5oJC+g(ROifEng}`~1#59L3J5gG*6kBdqDz>(}OzD;!i^I(KtaGPY zI+;_ETq7;!OrB`=+~h24iXc(=YjlFfoj|h}-n(;n-jt2H*pzHBnR86m9H+~ilVUO1 z(o6}X?3UCBhl5w@c$~S(kjqbE(ECg5FUu5HzF(gENyZ%hv15LcF=vW7%j`(B<+}V5 zlle=CJnR?89H)Q&`box+wf$n4fpTi`k5uF%C7%3Zt{?q3xXMXrkZxM%t z`0c=D_fK*Pr=QeFXAw@n=_#Ck)5~!B>p-*$#nGGuz``4r@+&6#vu%?FD+0>K70C8dT^!2xzlHV6NOj zjk4#8o|LM$rq~>oL|Jy#wg5Gv8=V==sRw=1YH_6{T5=TSQ^+axQ%+w*{VYl@^=DuF zQ=#)i`S+KfeeQk)506 z7JpJBw>c86IaXLodZDSym`YS)C|{*=r=y-jqDEolqiXy*3PZe+9IAgRBjTg)cPN6= zccl|xg)?+=^xs9VNAzPneaCo$pywSqv&-f%rPvb9Bh5Stlt;_&)DJ+X$bkYSIx@Kb z5PcR1ZN-p`@{l~4`H8Znw>bHMTfFDOd;6NbY}t+WMg0@@yz8R4SNlD@f1@ixVkiOS z&JmSwb;UVsDR78(RXLmTOW%qhY~$QvE~WOnwGoKiegZ#K$q#?JwZvE-z?G8&oq zZ$YBftDZ?TJ*ZKNCl)$;r```!n2DmsX-&^b>^>wRDqioeP7gD9Y--}$oz6eKJeqgB zryU;^5##2gmvCy{d2xr1AiAQm!E5BqNtD5&J}=5nd_qJ*l$(EU?u?G~#mbXoB%M$9 z#$xA@gHQK{;^@)27ytFe^+DX}i}QoH(-(Ko?)3RV%LLl6O}~g9hLkBbA9#1F6ezua zy7HiT&GV7Fr*K)Uzuw%5aVR;S~nLnY$=)2M*FV+svn<&BEzdn zvneOcY`02xnA@-=BM4FXb_{2tp|#tbRu{(qOgXvP+=3p}o<7^`&Ma#-;y?|naab;v zTxVOd{i3tFypPUEUR)H6M`b||F2+~Ja&zoRaAYvVoIeg8j2iupEU*1My|~Orf6zde z%#+P&eO_zJ+{QVH+MMVI5#q@|D#Vi=idbT@4bx)9M=Iy5jISnIi=)QiZ?S2_(-U)T z7JWX$oSIAj0drw`$h?(zXJ#Uw4p7u>&etm)QAj<_lAV&x*Njp9BN%XfU9Cxy%}z^V zjx8n2%n7~IsU+NcUA;2WVTL=ce4;;rFq_0@RbRAZKW}khI!X3BoQVPt%E`>Jjm$Aw z@>38qP;3?M=+B}9um9G=oRyVqMtz{hx+yI;Cq;Fk`OnpIE4n*Q44;cx1rwh=KsVN! zVpi#8IH4RWKI*VCQ9@$K_z?BEIZL%8dc9(SIv0=}lD)5fo>zLQ9;wq9N~>rfmvZs> z41_6)vE?uoO6lOeQnu_9-o+-V@1~&D~a~ptSmq26;egw z9O!8xFPgJPnnyYL%nhH(!`x5~=f|hLo2B9hJ&B2FW~U2RJAEftLAU@2J`pGL!yV^;l<;nsQwX;yA+{4O(u*8dh%TD%GOI=w5= z6CZ=#MHC{yUi{E9$=NdH>v#y)56ldW`bD)1pLfVj@Pq z5dR`{T0HU2r8=IZ)X{cjQrlboENsW8m~;4KC$D0m6bbc<>=b&Xy*4SWtWQ$mQk%`fjHT0@ZBbdt zeBir2qH^fWQ1hv8dV4NNm52C?eh9uu|1xY27ta)eO8qYTE10*=LBO3DZ4p!kK4@oo zx2I@-#?6uDpDuq2ABmqTf;L{shtYDOs0u5so>j6XZ?zN)#H&&%XW4SnO_m&6Zn_8x z@zwd4n9PT2WjI5iK!SaU)=s*R7N~kmq**Fewu!S&x&)e50w`tAwoejh^!ZZH;7)GitvumoRZW!ok($MkUGTvfb`C6&4F3Qz4S>P ziZb}Y1q(q>^4~ZN(fe1tH*WqE@4%SeM6a){i$4i>D5)R$O12P1!{R%C`R5LUf{EVRo1#7{;<6BXrj|hefRK#xg8(I)#2k7ZPmSl71; zUOe>VpNI#euIt4)!so$X-k5lC;N3r|GkbRE-JPaOdvfXBof@uV)iy-P^>4GV&bRK@ZhhRZu5qWvN(W8HCLe$^{uk|*n37z6iK2rB2J|f1OLyzr? zbe1r%h<9kmini3g=yQsMMyDUg_lSszDC!B4F2tuhnK=Hr_oa?_;}G(E5xEWefme4$ zTO0q}6-{;j+&TZHoJCX7KmT}l^WS+X>N#Zr=D%kUf`w)O-Zk=7G2tE*+q-A~f&Gf+ z`xMPr_imVIzi5hHuk?G#$EqF{+dsC4m}qx%;@OFJdbRymMu|PU z_9!2X4oiK-vrF&(YWj+2msFp7s2AMyGGEToK4X|hOG;f68y^)FStQxL&?_p3Cvtas z{jj!24?N358iNNPLVV=IqEr1vvK0%#0>vW1_rswte|g4~O9b3~^yr@t2gdfuy`)h? zqa;&ezuvL#z9C;4`e*L$^@_h|CZ5KF#CR8F72SZ4NB=Q_sl{*0A_8jTbBZj=46|W2 z$pi+->K^Dk&pr{oKBHl*PaU^(D;vB_D+NiJPq5^RjZOG65KA*LaTh=E=@^U{N9Ctv z4;9ECptM}g=vCZd#YwF`H;P_&f}8`lG?~e)@^zU;h~XEtIOOejdZHN z?qpIveP3FNq#YAx}VhHguS=%CSj{D4|2Sl*O7ejuSjvqKim>CWsD8V!HuC}g@(4{$>hT3Cn0Dr ziz|MV6I162*d`Xol@g~V!r2p>==cY9{v^#|5e_K6J>@$rx6Dl;w%E&RkF#Mb*C=>E ziyRXyj%>`C@u}i|7FUK%*)+(@Ut+c`H8%@8$E-Q>SRy9pW8{ZK%!Xp}IXwsaT=^s9 zpyi#YM=34jcik5e&QxnU)_+PWgiEOqFaw}4f=HT`;y~MHCO57bX)vt87yEd&1P9TS z@YSGLshWd@(0r|t&JP`bkM@+Iu$?U{OXrMXU5w2!%0!EJLZ5nK4e!zm1e2?yYtrws?;N6|9os8=SJUWx%@Z}#Z zEPqh{JUWy9De4P4iK9vud2kp2w@3jgtIKs{(1=wJaFQP64iD3OaA{ z5P2dNT`7d#=%{UzWHQ{I>LG=O@})}ejjugZcunCn@Z*k&k21~61tg4RUm{$Dv$5d7 zmV!^jhZHo_GPLbB5!;M&K;UMtKx$2k?&Fn?Jn|I`{p3f!yZf(x_D3#_81iWGX-|eK z*ea2R;U$rq9>z1fQvF+m7oE!cTmR`Ua;k+RKtGwl(PFFr+)> zHOz>r>8<>RIFg@{9)w~zI62FlX=w##(D%eIZGKwRY9=UOe3!iTo$3*?ApMRX-Jm>D ze&6%<2@$;#2S#C7RLZA~M8yq^>e+j++jo!i@bL))iI~f0SfAWKEO*PAMJ9WF|4VP}ZqNH)p6oUKM3x@6_z?L_vm}4@@vB*CavA1Yb@FQQYjCB8 zM<34y3i8)idG<>0xf~nFWqi5ke`SnPPf2p{dQSgYb?>`9(VP$;@=umyZ}wXG)hI+l z8TrVNYO;|%*E5YXgvN9(GRH~QYPfhg^Ta^L2WKB2-@AXTn}9n1jWbh4{P$>W@ZS@K z^xtg;OS+TowVa@G`|hzlQfITch*~){>SG2X(2*R{KbqNc|L)m8m006bOuG;r6%iRF z=C!zxc*uX<_=j!=$)mljkBoF$c#ZXvkxKQ?P(SHuNFIYd2F?dYMGoo_6{)9G#Fz3L z==F0Yf=cyQzA+d@`PVms99{yc(N}h-x{3o=#z3uzPz0> z5Xta)nA6g`=lMaKm(loA{c5n%yYpDz>#3#xMtw_9p|F$TAbwhUxlBcF_Wh!mvU7?(%!|&)|sUD<+-!_(9L!u@NyW!eQZq{}FbpGa@#= zx1afhyN??bAMGxmn&k0OV3yGPsVFK|k}rkRV>moIHpaJ_1^x|xkB$xT#Y=tMKtAxH zN>27gZ0I{*D`s#Y`Dy(t&-S9;*6hfgz8%yowfv~`U-TB_PUas~7Ac3iR#fjuo} z->*OPS)2;t7Cx1QyS*Rfj)pF%U|`nSoMnl{R-Xi0Opo4?^qI+h^*FO!`6TDZ>gVy3 zS8;Z#+}K1PNPeX~l^V3z>#CeZqMSa)-Fc$Jm^k*ty3z4NfK*qSJ1t+6FPteJG3#i` z#XdUaY7Fv6>Q6YYQqURW*;D!mI&Gdon`*`JN&MhTg&+g#Im8gO_@YUlPs*!ooCQD6 zU-^DOyUWq84fa9XxvZ_)2y(tpaHKWOmDrlFQEomS6fv+@|JYW&TM7!V_K|`>zYpAE z#Wq@pDMD;bGqr5i+Jpmc2&Qt3Gl8?5m`Q!goRw>7#YK?vC;-?kexaWVLA|t#x_KL8 zd`gFszr2@8#+Tr#`ez&$(ByE}FQt5LdMwVe<>!>y9I49gEF4NjQ;1DXnEB(olErkV z!=kLd;Adtzn<*j~<5!t=FcB4w(2`3q+Tj?4^jz*N)QQ7}HTgt+qq!(TNc?#{FDJu% zP^EA_T+bu*&GOGDW?QeOBb$7=UA8z?j+pmlB2h?oj?pBw7jQO6XlYF@} z`m6RBigjspCwnx-I+O9^qh0kSt=Dl1uZ~Dg=^y4jy_Lx}hMX+Jr>3JZgBppo{Hf&^ z54pOCBh4MxQ^Z8IdQPzxBp>dyaQPF_)y1jypt*g!AP&>4>_*m)wR)` zZhXh93&lGbKFa@weC*Su(LYsAjQ{v_rW-Faj`PW725Mn-OFZ(A*T;OPxl$?n@=2?Y zJ^I5J3HWj@<3+Ep(}b@oVQWLi7ttx*DSEs=4rDy4dY2}ZFa93tD}IoOa;Bb74$?o$ zkNSj5^oIkv*Y_*9!r|3VH~%n>DG%-TEi1Vb>8+g)Rh&Ocd*uhYOeaO3)}JTk%>!@w zNep~@bEUSUy76(Tz0)}{-kloi1I&Z?q?GZ@=Sz4M>Wx^^De3Qx2tFI)-<;)@(p$XX zykDOMh4|~rmtXX}T=^uF;gkJhZ^T5WwF8DD3%t2fcU7b%ad1fnXh#1k4CF@u38msnaLkrdH1Hz8XXsP=iaJ&r1zAbR=#Xl*HRiCDzWV| zKkzl+bk4L|PZZ%n^6KhUw|3Ue1<~_%wulPmMyk&bXlMN*m+7U{1OB-1S`X;Xb<fsTg|QxZDHL z^LbEzl1G;wz6EfjM>_bXCpmCbJU^FFqgC6Umd3V+=;ifLngcgFPw{9xkKU_OeLSk? z)O({Qe`J5(dwC%Vy7JgN6-$@9{^g+tPd^D@0rc`VmxhEUAC zJ5l13;)#zh`9-g<-{=TOpFVg>Z>r}6E1#~_aCz%bxYglqk&O_#%JX0awwfOW&D&^M_&X_VfJ|0Qj)59YXLTKut^fqw*V*ljf*l%j$6WLnwBmY?) zu3QWZrCOc#EHe&g=J(%Zo9!}x+N+)M538{kY zEFnwEP32uC?1#-!J}23-bF4U(Gb;-!D5#S7)>m7aMqeb$q-5Eg*iB0mNw^%`%un*w zr>>492^AGWm6zr+Cudo_QNdp=&|(L-NymieV|V*!o;6S;kq=UEqrZ(1zsZUOs=YbK zmNP2bmg_X-U@?Kyjwt7LA0dYRk$?TYZghVqreAFuy-8ymguSv z6V50$NpG1-C#RL6_UI|(I)(a5snD-m5FbLciGHq2@&i2$Q^X|y}!y_Fy2wR*NFYlQN2{Cam`5mlbc%SD0Pd4sM)nk6QY8YN=&+mKhz)~Jl0E^q z$nyJhod|#^V;Pv__9hGB+Z8NeF?{gcG zeli?9EyW|`j)U!3qsL!3U@ zfH^()Nz#jS&L-DVuHh=?cV~y;zG~^82uG?LPEqj)sd+ zeU$mnhLDR#)L+9@%cG8${Qb6NCc=@BxH~R1Td{gwh$RGOe`ux$O2!D}3 z^xyUQqv&^$5A@&p-SfPikO%hjJLq{S)vya~RF;alzQ9YJ1L9;Yfa__}-U%N# zUn|iIy+PKCIqG-W4of<&0r2`q!#w2L7ha$7oG&T3sUcoJ^6*Pro{xpzkwJ2Z{AI^i z@$`e-4#cd)qCM8IXje2W95Jm1rC zB24JLIOj>p&)G;}@kGJ}|1HBOkj$47$$E*$sd!S9^h;N<2%m;UKY;V$xidwjdtRx> zpGWA$lY^Mzda=a3CD3ExUbD|v@~?)?2$7yX7je$}E0Ujx7hYS7N8k}Emg#7;&sOba zewX$#JQ52%jOR4*2>V#Hm*UA*%ASmB2+Bo83g@SJiNyd#(Jw*<0mLYzavVu z7yLCW`W+e;{SFQDo<clHh|<4{eV8uE5#%9|AFYgh)3xEu_~7Ozx*QVafzhFhdJbhFw^#7hJ7V<~B;T|fM^=NncBIqTO`u|ht&x=R+m!M+Nn)g$&(0hBUSm?bP z7J9FSh2E=Sq4#Q7>b>%d(0e74daoYyR#3x2@71u-do?V=8?DMK^Ro=EsDHYv_9FcK zq4$eNl#f0t7W!_4iiMsShZ;jXq8*G?abFgNycLVTF|0Lf1T+`VWIyepuUp+^Y%7Q#iD-W^_h4?`PQ(IPs1Ypx~ude z{PC<8xfgm~Ulj}bC>0Amue*wc{Sc&|ctrd>rD72u@j5K}|MH6nuSA+2C%?$@8Aluh ze~F~t#&ePMpT|#c6$`zsmx_hn7NuelKanaH@z-6&BEM=_gf~L97kXQ7}$;{8qWn9-NxJtR?zM&h^7Peo5s z^pvucGLywxg02F4kGx01>mvT>`zP`n|89n+o=3hIzdyLV+$VqJ z6(fJVHW6VJ;pNg4@1EQz{hN=FX|W}C_7&$pcb}v5Gxcs;2+#fSKOesHF&QyV zlcl5+mtS%y&VP~e4yD(ng5U^g+z5Dcy=@;8SZot6!gh5X|J$T4ab24s`OiRzO z4$sWW&av4?IGnEBypj2%Rz^$c=W+iU&Xbr#aF+@Qn=j za)+5Hj*CBz!(BwW%(Ri=KJX_0o}VA`$+bCh!?W1jD30=Q7mxWN-@oCl-!#qMeZ^15Val|(y1%%B6EINV^TEq#>;VxhjV%1#na4qznNRo>sJSBr@Xj} zB$Hk-LyXs4>O)&h$#Fjdv&fYTf`6tKbU!LJDYa*2O87nV^IT~Z%g)n%c*TU|KHLX}n*)ll^re@?%5%j$a`nN_a}oBw_1s2c8F6hF9#rmN`&656Pc1J}BxG!wWxt&aYnwc}VxZYc;;O zJkgk_UIO?){Pc>pOiN7Czde7BIIxT{?CuKezbvk>8BWNFHD9pC^iyz-Sq%7Q&{M_P49l-Tx@1CAtapU!TWwZ_R1$;h;kNop_9g8w+@*wjU+!s6M zer%X+5i1$^dXpURv*IhCDb+^u#e9vFu{im%6zTXnLaVZxiF4#DStUm?CnUMK&j%Ep zhvM_bd~U;&WPFC@-^;_-fIA@@pXHLXCvv7soBuG*Ur70QOvxE7zPiy0Ie5tVx-T1M zJY;C~Gch8}p5^89FLD(pU+t;qF8t&xt@%niEnS3+p84^)wiHOnXJ%ZCuap(@R6Ly7 zn5p7v&G!q4v@zx!E$m!kf5NYqP|ijfQ(cRPr4gmZ1%Pkx6T%d+g8gkzlvch=>~1D~ zE9j#a3iI}QqkDIHiI?sYbQuiy=?ic$aPqlC1nP%X}>8>ysHx zW)hhWGUt=IhRp3`9wzfAGXEg6{0`zvW+yV^$V?-144L!E+(PC-GJhcR4>HSqBKX!K zvoV?7$&4d&IGK~kTukN$GIx{tJ()MjEQz?}Pc1TAkr_$mP%_iVw39iD%r#{0B~wd; z;Z7VHH$2zrO5{451GiTuiqlL%0z1AXF)=MSCxzdKnK%-Yeu>JFr*<2L;W-yhgRO{` zMC^V{#qF3*>{R5dO8Ix}+H+YFEe?mxVf-R}GCLgRQP?q=X5j=nH_}JrS9sZ)*P|M5 zWiG(*#is1*G`hnrwb{5Z)IjI3z*BTuj9ca^?pIDYsbHSmdf{19MRNIESF-K9||@e$KHI(qR{jbQkOgCjI1 zM9B|@bI*F*M~8)P??sXzEpTE7Q9E!>Z=OXt5m5c&v}NIwju5V$NCi*f#YR-yNHs%q zf5aCqmin20Rd(;f3;gD)3x4I8?N&po@=~G3gksB6R-|}QJ1&t2yWG6Q5xJIJ1j**e zWXdhksY-J2;E5+_R}kaX@h9}w0j{w-h*kMKh>jl#0OwHYf@m$9Xb z0$EHa#xBB~`b7ZihBtapAd76o*v?vbLDK@}xknf~0z3OZ`1TlMOMoLmmk+x#CdSGG zC*bV_yEx!ZO9EMof-2U2 ziz^6VZ%qkcC+9+z2?4Ck%m7vgtzFZzjBU8USm6}Lx{U#gk&K<00l6nIR%b3_Z!KVK zHC8mt?-9VxbqHYd+Xt}1!2xXdpaAxL{{VJmAb$4=U>9QoSokpT>lMH@Ajj~cRRbFu z6HszmV1vwj2V=9X0c=uM0Qx`}2 z8o*X>gv=WP*qM*vb~9xE6g(3l9~McbCLm1DAMDBU(Q^r2n3t1`!vU6nvSIhv2p0eF5)eyvy)@iuVHE ziU+_KZya7H-o=cu(W4a43jH;&tGC2k+N-&*S|I?<0qUSOdHr z@ji{$hIazq#dtU4J%acDwD&b&QB_;mYknOSbu_cd%qAtB{2l)a3u{oYv9LxZrLu$s z8wzn!G%Typ%&@G;tf(vp7-0CPvf`F?N2MCeY9uo>D~!oYWkuyJEX(g*=j?%D0IhrP z_uczFPxH8a&sux!|FzfIhqKSxM-c|T-;JUXQW5S)s6yC_a17xre>b`SAs)ewuohtp z!Zw8c2u%pTBMjWrjV2+?MzABSMc9I{4dDR7cL@4A)Cb{Ggd~I&2pbV95Z*@k2SN)% zpAV21LNdYw2(KdifG~7#H@X&K3Bvsd_s?^Fzf)@i!dKy6@nY#9fYF@eLn6+V-Rczw<8oFyob<;pgP!%h9FEs zxB=mAge?d=5WYm{_DMH7AK?mwTM?c@*n#jN!cPbhpQ67I#vx2Yn2oRqAq!zW!cz$4 z2-^_q5so7C{S0Xk#vxpaK%~G7R*{-Cq@`}8qwds$dQt@SqTbX8)2A=>qtmEAolXPj z3^LG}G?31sL3B0^rgO+h=h6@wN|AIP4Wr>?qVs74jfAg&(bzXV7JKQ&VPD+@>|>ln z7tn^u-iSQ|J=9lq}d)ITbtEc(?0x?BKOxpX}w>=^T&U+Pt^ThF$%$v3ELw zuEzHr^Y9JHHTaI@I+{<{(+#wMlJN9+Bc8|jS$q+mA$c$Q&DbHCj%PLgKG%V-lK6{$ zekxpnr@$;c(cMmW&?>rLrQ{6Q*Xj?lnEMAhb98WMS#>p)XT`Wq1ovaEae(0(&gb}hRl)3Vv zP`Z{Dg(rC}NbTd=?_FRQM<*4)-`yO^Y0&kI1=3Sp#xj0*YoCdbk&YEVnVjR6lV&3h zCO=sY^45%#<|1})z+K+S#X{d6oLn-*uOrXJBsu=HuC4WUsTdLuMae$g3Hp!}w_14DkJ-;v$fE~q~y^=ESA zGiLr^uC2Qd{)Bw!+wDJ*tc$+GU$&R7bYzC@o8@}R3A$`}r)>;wrs$+zh&n~hTg&V` zbrBKNek*sNO}|B#T{GT z2GhxXyDg%t`*fH@*xmXR`)gYFcZ9a)(lIBfQF? z$LEB{i5b?(x)1gsH5p%nwmx#m47@Z;#=r6Au4AOlOs9xuKgNGRWI-DIesooXuuW6p z_u{bnhDnFrk4`S!;SLope)85xn`2Ja5Ef|L7;=&pw+f!3`mJ(Z)m#|=jzx)x&c`Pt zveS_XjXzm?I>>e2oDO1LwWjqMtYdpxqdIR!v4@bYhZThKSBCGZ!4dgvej zi~@stH!6(&OAqCK`b!Vxe)w+RK#U0T#}M%3+87Wfv^o(>pJq?aQxTv@+lwB$DuEbqhE`6HZ~()S4Bnh3w{_V(dQXapPrDIEiL9g# z705JZ8uq9J_-dMM25)UUCS5OCjN>a(;?puxW9XMK&OACt$@2I@54+@MqF0E9hH$Q0 zo(VVpobSaFcR99=WwiE5bVuHd6taYH6QnZ=z@+)i?W`e`$uZpO1iT8Q`EU#m(e)eZ<#1$T2A?IQIp8 z{%Mc{%9_gC)P7~ooXlh#g5ltfokzdPoD`voq*O@~e3}Kf0%i1;I4kiAb+I%S{oCk- zw8g10%cK_Lil%T3^RC6;Dp_{vV(dKQy^kwYT)wPCw@cTO649N~_3TtR=5C3alXg4C z?qSso{B1NXIUQ8ELO;@VTwE4y3W=Q)kCh>cPN7_IF*kUHm6{@{rxZsusu|1XqLh?r zJdtqb3w^4JpEfhu(K;8uQpKkxujo(-`c4(UBpKQ$>1|vV#;v(M2Yq+8dM5rJmo{}} zW@^Hcd1)!B)9lGh=??X*<*7?o+ESNFU4%`l)0QlkX7EP!>}2d@jceNys?*HQOpjl( z0+BMCOIYw_23xW!h|K<|J+7cfL_eII^#A>aP)*tgDDxJsdJN;rt$e8^JoFb za5`Z+AWRv|3(?p0OwY+|)r{9QbJ9~&9rT_iL0WTT?{CngkVZQKVkeB z-fbBZJ2%EQLlD80#mVs=vgk1-sqSr`P8(=!>_sp^u1!7&8Ty7Zs zDrjuuqkWgl`J5Y)b_}lf#mf1t3QK2Xxt)Hc5@oCo=3(_|HK1!i&*Hkhci7iM7iioG zdN$Mk!@h{_fyURvXpZN$?2GsH=!W!%MEt%SS^lFin&m_DKP=+w_8va$>)kWZ7)E~s zdJdPr5Aphlz~^D{oIW)E4bY+ae-GNi_1lQ-djuNCDlGc`3fx0AadokWO@Z}@4;>3X zX!ai)Y)_t`>vqfS8=x_p{BSSy5c_MgMhw&~Ka*H5!*f*#@#2T*>a(0O~ z_;lv=5ps10S+0K{=4rr_+H`<<{dzOcgnBbCiCKoefiWVl(0T;>KG>J)PVyNPz(T7On5Sa?_U3sh>;UWOR4z}nEj>goB1CRK%8=yhkYhxTfC_TK zx!W^Dj{5>zTq#t~dWFQB!^*1*YcF(C?%Vf#5ikplE5h2gCrthTXh}cBSoKGG+yqo@ACj&%5IJJ{@+!@k0YxNfWgWS$H{A#wLeYuVA_2m$f>^tbzaK-v-a>X&La|ed^CvFM79Z!fezKjZ$U5R5`CtD zEdMFW$du?2XED71d9t2M^GoD87j0NxH<1&K8U&$1=-UC@SK@w?gf^|<*fE0wQa=d( z4dA2S4*SLr4h%$^{vl~@MxJ-68+U^a z)yr%p#(1pU#~&hZn{I#JajS)q%Iv7Q<_5jKxK5pAM4afL?m>g)dVXQA_{Sjk&6=?QR9JHHQ;~2Jr z4$bca@OFjq29sCU7d!*PAOy~P8}h;@6?Ds<5r=)l&IrsyU#9szzF`9bvW~p(@68qF zbw(28yrX4JO@y3xv^)_8a{qtgAH)iRKG6s7XME4a=N7GNm%GB++@EEI-J1-X=v^)6 zy%7EUdAG~zrXM~$g8RbDaz3aW7JMJ`_1m)kEmSv*-`>5kQS|zD>fYA>QEH>fd-MK{ z`}Oq?)kjGDiJaHPNFTg^-GutoVSRwyBqhWBM^{&?3gA8?;Vm40fTQI#&23!&khzLo z;0EqTuFqkgl1+Bw46dKJhg{N0yi~rh6MBq?2I={)H@y*fJR-qkTY=9&utOd86{qF4qx{>!)pl3_f*YR{}G;@95eZ7-_b_2J2DfbE5 zz;im9uf@IVLX6))E>qBxK#v6-9J4(t%%zZg?nl~Gf26c_e3bh^tl4=@dM46k9QKW1 zL-8=j)%ynU#I~b8yiU2T?gFm(n6ts_1KsZl9`^_0+ufJTAfJc0m32`pFHKtRi>JU_ zCH2L4$*xQH!bG_Yw$nlT_620m2$PlUrLcuO*SOET=gGPl37X~WYUTT!o}9WKpnEZI zM`R!seeR9CY|lEOtE0KBH=zw!&`I`I+&3gUEUsbKb#-rR11ML*YoPC;cC#ni&pN^F zkHED~T=&9tcX91NIs0bIb`*W0zYY9-oAAhiMaNkjC!UY^87p{SlAfc)J&D^Kl!*+H zk?JgD5`%sJrccf5(>yAP)k_og1` zKP~8Bn+AjCHnG05uJ;AaW6$$}`?vM}Ep+KIrNxwud&>Uj_K&Tvs2`cO#{)GOBCRQ~ zW;7WTM4vpqzkmJ4dcCl>e7kInBf@j4Jch_qnqzf7O<*qCbS0PVLpDlHfS(s%>a_A4;BWG@WRznT- zT5?~ZA!L2R59D9Hpkep*heSnUQGd)gI<&qmt$x2&N@s|Z(@BZ(Uv|8lpMIvyw;=6B zQrqQz47NR&(*v3E$T3k{UTG5OR5{ zc(yZaw|K5$?J3p&T<}n?#FOos6SgkEdZ7o6cN|C9%;AeXi(W-u$OTq2oi5T(5tv05 z;|-k8J$0gLBc%R6gKWBf5?|IU3TW~D9nT-RFIXSU;8B*W?*qf)k`OmY;c!$eUjg1@0 ztUu&a!Ya#o)gv#PR99c?y@U17e?RQw18r?KW1h)&mFJ0kuY!%%pDm4(+!s>+hP5Z_ z5#)j374-?dZ%N}8rr*0EdmN#u6M5WET6G}UUmG@QDDp84>8HzcbTZ34(7r8p#Oof{ zP_&TY`Oo^O6o@sPM8gJ3*iT?z%ukl{kCg418G1PaG|z?LeF1AD1J;VLA#MF4uT{Vk zZ97Y>6X-uJbiAB#}t0Oqf5vsyl^C0^&c z?aAIHY0G-KjvkEfv`)rcvR7eal~k>vOoaZI$$iP=dxlhwtUXIXqioDqxqmI7@hpJ0 z%kj^lUc;pLHd}lt^b{@^VBg#8+=pn}n^NBG+jcSX93%1NGKO;B-P?XVk8jtIbqB^% z)blK)!MdZhzoS5plj#Et4i?-M@OP%T1^sMq$B zq@RcToTM-JbiB{;Tp!hdaYxuD^14FNv7V+uTJoy9(bK4_`g7Ut&N@k%vriJ2a*{ZC zj<+9g_1Cax2mw()Jd5chyMuYS5^c-iaa-T9ZJ0-N@LQz)4mQQAmCyyc9JFzUtmC?7 ztX&a;bnuyz@27Vm?`53#qaE{BB5&vSxECWtAa6#d4L?9HLGuqbQ_s)pVwyE#z8Ejy z{KD>ccR;74Hr&&ukF0-OhOPzn?U=kKm=ClfF!H!DUIe|JzJSpOJOrkKxSR(CEK9&DC^K8?b97W-|*ijx=M#NnGS1n)a!WQys))2uW2zy z5hsr`-@BB^tGu_C68dOqz8ITKT<3()unYS0q;&GU#@~r0`#f48-V;c4Plb$lo|EV? z0#~4)u?C?-vW0ASKSlo=FXz0&#%4I`Dm|BowMVdj14b=;a%gF-s4M=~8-;a|>g|YK z_wUmA*7?*^y9L@2#Lr|>eI%O}mfwcqcz!|%&Sz9p`ZfJ1-+T1ZlTwf?BlnpJd|M}R zO-6pQBI!ASk)K)hN9DYj4*vA;bH+bR>l2KUoG6p&zkdHaJz&u5oILN{&nhLfx@Fw9 zRYvFEWwZ#ntslsAY`u)W!$R&`8Q)yEu&`y-st z*6-S7`Q^?#@B8kTUrvAinrps(=(5Xp{o35zGp3^A$P0V--n1Y;|F^iRs;`D_-u(AD zZuifDrAr@w+Uvb;`O7cwIP}|ZgQh(CXl4AcVK=8=aKW{AU3zKEKY#vNdC%_MSJ@{{ zoIk6u@aUc|zLUEtzG*>(VRK|{M(*AcGi&X-+VL5Vl*Z-9zTB0%IBW* zy>#7m-|W5l=GPy5=bh;{z5e?CrIROLvFY;5Kh2Gg-&>uS*mUpv?_d6^-+#*+-+edY zs?yRgzWMdn0qdqsd*i8@Ge251VZzmY@4a`^{c&;ce|hYfUaeGWf4}?g)h?T@IV(Ck z_Pi}yUb({KY0RHB>&NR03VwH5EMCpS58r?3#*G!{KJ&~rM^u#c`+xpZy>Q#M&u)9^ zrR`M*4lJK~?zsz%dcFCJ6DJ1#_T!Je|6W(Oc=fyQ#v39c`VTwpv`IUU92xuif(3^r zJ@G_-c5LkKF=w1H`O(_ic~=(~|8V@SyVl%3Wy)o~l$7#UuD|{ti{JYv4Z!DVp$RnO{k3Hu8AP~6lhm|WI`0yY982^CJH!b7B3$Hn_ zc=5}M2Or$<+=m~gY`*f!x)~)U4fW~iTg&Ip{pH7_N4vfM)mP`eotj#8^!D2yx~#JD zOW0Gxl2=~&usJI$`||V7TQYyln59vJ21U**D*Are)~#UTT|3C9<|`s%(>0|s0~*Qq5t(lTF0>-92j61esTnU2^g zqpeQH!1ppbevnc9ql{Ss&A-TW^RF`2t7X5N0fDjF_I@~{y2*6CPDW1;8Mg`?)U&<( zL_s@R`D_(W{TrYE+2|)no?5OeiFdCz)-Br0cghnd_-~wi=j3a?4>R(wtF-?bU*F|V z&d=E8?_VqLe>~Nxj{fWV(7^wRhAEV4d9fvG6TMtOm(#@fAF9BAIh+5_Cq@^& z*R1I#-JgQiJ%}tGdfi3xR(9ebdEMN~2)p=i$A?viEa!AyUx!ZakLK<&HUv)YH#a~?1LHGkaRu8p}gX6}v2DQ!N* zEz2@fEEeiauGR0jkm0;Llau@$rr~QI{sCV>+L zS_H-mOca?V@z-)n=1iA#43#<`XE6^|Spui@9M+MSMxt8kWiEn?|H+c?_{gX4Y?{Y@=X}%fg z!lo1tko`n6vR~;MAp1RMIreeR$o|k7*>^f4`<(Ux+2?sZ#{;E!yub@E4U}l3kQbN> zyq<JNTmS1ds4Ij{W8N%r|03$%NA8c+9`@$Xsn*Cjm0!?yw1 zSNLuq`w(Y&_9@P|IT`Pbfb38G2#|fM9|y8O^@t;=#}d>B$iCG_0omU=Bl~dY^z65t z%Vodr(cm|&fj@6x&3)K|31mO-SwQylz72Bh>wN?BpTvGDAp1aP+MEyHCRlALmT7KXazpr}=Rp`#opAdxy+t|L4q)d`IT9KXaC6pXSVG-{&mP{?D1u zKG2!ZKI)mze(JfO*cUw0>`y-e?PH(%9;9PG`;6>spOJmjS4aX`K$q!DYzwCOYzsy{ zkKzdUnZP^At>7~#T0rwT6zXQoW1t?$XH^UW^4S$8AfI0`3HF-Lw3rCm{w&%B#Cs*O z0r6gml7M)xL=GU{E0Gg;t@=%dG#^ad3wYJNk#LF@6CRNeQG2O5B+P*Ef>1!x8y zRH`T%7^_lIJn)EGj<;!4G#~URoeEywU3l}XB0K1EU?wmsLgvQCs3&?uE8)ya{I{@th)&s4;lrvP60IUTjG5<^zr88cjqE$fmWYiyM zj7I%|6Ju560XlC~Q4KJ9v5ID)UiJ(X?FOB_L`C&L{ZbVLfZNuo=qPa2L#XeM(5D;~ z>4By^6&Zo%0u_w{ZuO{WhSIG#UW)pG-nJF}4%|?S{st!2pi z=mpYI=)-6=9im~%2B04Fps{K)0{f3w(?sCjNoukJH(a2m`M_0^)zqtpPMJMTP3fQm zv1-Z!I^xu{7Fcan)5`8TrD?XBHi6Ebqb3)y8CcG832J!xAEGD+@;Dy^)_@|LOy8H)AF#ALJ!a?y*_@a8{6Q4Kr>{jasF zsTq7*2HN>g^xLg!iU69ItH}V|whrwBZhk^d@xbg{H6;QgpHh<@XahQcYXw~m%mSUh zS&e%##^YHvUiNUyeTrtOso@P}32P7ie*#em`N} z0guseWuQ<^{Xu(5)no$N%hVJFOsH1V^~zz&>gUz)#j%Fsx1!$QSHGmDB;eM+V?2Ov zFX{<&Zbv$1wopd79XO{{0ztxe@vUjA%mt0$o50F#b!_7uawF^#vw= zgZgs(w`y7iG=Hb24L}EQGf@4#tjB|Z<)HC?jA}Uk2k14&|A=}5@qUczfz7}MVD2&0 z7g!5C4m=9fwIKgr(62zeKO-a1_q&?Rz=23d{nY4gJ^z+zomg@E~wv4}2%U z@j$L8-pkQ(=J(V{{k;hoaSV3kbnKS~#-F93TNOhU+Xi7@J?MzR8ayA6!Vbhp)^aHm6n}9xGf0KqpcR-SkoS?=K^sTOa*4pr-H>iH@AY<)0q93P ztz)o{4E1aVrjeHt@r}hQ&@@g1yS`Il1Ma7(3e$LuGvaL%H1sY_RU0R2sJr4#rD>9e z3c>dS@y(UOae;=8sb+M`x=2GG(p07WVhv6=@lr1EJfIgi1!#;$`%q2`@E|a8iiYAS zM&SZpjrbPe4A7QKus;{^O~89;y3%o}oSzFA2e~F7=V!9W`P+a@=Lp&lOhx^pVr1k! zRSzn6sgh#R|2!^n&?lf7csA16fc-)HfRRA^bPeoSjKTw)g!l$vI`}P@X>fWA+F@mV z@{$F}?XwHo1!VaqLF;C4yJ8ecK$gn}&O*KFfvMci%jI@CfHM*A1+rX|K>ZbRIS$}9 zlu!8nq6wG?Jj(T)iGAwFfmdoM1y~KtQ`9PLHVsa3iBb4~Gn8*Bt@vJI6XJ7#F^ad8 z{sfEzXyery+;`A^flgo=B)oIEKc_16^YA?nS4G= zZod`Cfr^ZVZN9$G?WZ}Ht=2YDLqR# zeT*W?p`qVEN8QTwR7DMt>lL+>`w99A^rJjSCie&W0eC0MvnR#VunFmNfyaS%e6L_Qfqn#z0$Nsb`WQtPa5>6v25yJ4&+0cPN^GJnwBeQh6$Rg!>iw09}x)2Ks@vjXW+>RklYt z|5}A^6PIUE+JVIO^)c81AkKrO^A$cN&UHn5Y88fD9)F7>5x5-n@&n_Lzu`%yrzvxQ zeHE9fTu))IF48AGjd=(3ZkFe918_9t_0Pz(8OU@J@ETwZ&;xn?{^VYYReFFmOmE@# z>{K)WchL@|#|1qHp9*-sPglC!8hQ?BE5dgON*y&7YiJPAREBv4j4FqngWfwTG&rSc zr&3?3!6{6&3VoG4Zixb20;8(&jR?}^03AT%b7&8+>3Q@w;|u6dVD(G54>Gw!lh@7STiDN;KX zynolA(vcI$_SywBfv%~AK5J*Fyzjt1fOhPb$J6w#2B%2XDjI;-DB_e+?~8dWum;F_ zq4Q%M!1)4se$pNdPOrj!3-~?eUv?eO=jqDC4|tx}D!jn8koWJ^kQbP}kH_ULRn$kg zpMl0X!X(*wU?F)G=8v%+0KWmqcEflOcEEMSnmK$N-fqEyHupoQYL7JMvMD_mui3;K-;@(sT`QpL&n6O zTB-p}5n7DrRHYZlcGB2OOK)I2nt=Dxc9j$Ry74Kxw3nN(-m&5vvkCYG z^xoeOe8p6SuD=%ZV5-6eT#b2Q9H5o-$^v{5`eHR`$%1^01G&8I3I}jLX#Pgw5$Ht? za5eb;v$fEVSfy()x5J`n0=@{l;yOo*dAd_!H=>ng9pJ{;}jdYQD;g!yjd4$p}n}){+V6vS`T+Y=}WRAb(pNfpr~! zFU-i_0Xu;FZLb^1-|hN={LSoq)Qi8F%f@*(k085EXo{>BL^-@UbcA5 zig81F7+Zhvb)2>+by=qHo+_7e2?U}umo8tH$=+0%0*wQMmcza2N|^*>X(~>Qhr`|! z+tRcZ@Ns%m>at)Q%eO|yWg#WIYmLW|tLesc{(s8w9^0b(R>@<4H z@I}e#%TkAr4Q3NPwl$ORGNQ+Z)+c&wNNuCX20P>u_6YQU@#ojlUSywCWG|{OYA$Li zsxGc6_7?k!>x&zTn~TY#^XNSWkI`fDm_1P*tHf} zJ@uZZvSu9ft1mZ}o69Zbw(_KMN4c{+r`%OuUG6RSmp7C*;}Bqdg|Wh1VX3fHBvm*n zoE140u8QgkZ-u|2p`sZ_1nVn}mF7xIrL8il(oyNG%&Bx$R#$o}{gn-s%{V|a~Ys`I>g{=9~~W*lOy&o}0q^DX(d{G@zG zzB4~3-<4mT@6Gq;H{>_th+}<$p}<&RDlivB6<7+a1-633f}{d_fukU+z*&%8kW-Lb z;41JGR2S3~cnfOWUboNfcQ?43+|BM59FMFk)E62GjfJK{b754WrO;YvD@-g*Dzq0m z3bP8Gh1rEUg}H^ULQi3JVNId8&{ya$tS@XRY$|LnY{B8mx*~m%p~zTdDl!*YimXMp zqQoK|Nk>suk+UefD5og5$W`PisxGQ2@)r4u{21egq9$pasaRL6FE$h#i%rGm;;3Rv zv9;J%oLHPxY%g{cXB9h(vx{?zbBnDQZ#%|1Ta2}j$Jx{3(UllVOeIkz){?{$dr4MF zc1doDr=+IDS5jZnRMJwSD>amwN~21xrHQ5X(yY?#(%e!{X-%oGw7#^dw53#6W+*e2 zMU`3063gsmS!LN}xn-WRnlfKmeOXgkOPQ|RP;M%ZDz}y=mfOp-%CpOJ%RS{a<-YRz z@}}~Za$SX?!c-AeVXa84uvcVNWLM-?cq(ctd=>Q-O%*K_x=KT(sWPh4TA5gBugt2< zuFS3URMu4bD(fqoDqAXbRfZ~4RaBL=DzVC5l~t8pm0RVhs;Tl-)mJrDwXhyFYw@=g ze3RocxJ<4nm(`W%vb(Ze*{)od$5rF_g`n;yRmONd)A>WiAm2b^Y%(v%fHA z8(QOm#`p^A3z`aA3UqFR+vJXNTiuCnyF1IB?ap<3+%?dpdT3IMTL&F7L4T~!9Xs?U z8#?2GzWAUkP0$k^bi`B?1^q~bZm?$LKr5=D5q@YxGmhxiLkrB%02@Z%fsxNCb`@8{ z3iyQ$&}06aJr>OUB+PrKC&%ORRAbirJq?~_9Ph0!F_xH1EG4#*q!LGovm~d)RZ?Bz zE%BE$lr-b;Z+)q;)Ld#QwUs87I!c|TIi;@B>QZm1zqFyW8ApTb%Zz2_GE14QEUC;< z<}Ax8bCp$>dCUA|4gV7s1@DWX4*xIgi4nHM0y~lf8{&lhaKUzX3;YEQ1{FjQ19D?Nw7(Zsa8U|CTyFlAbu z<7~B4W*r8obhdSxN;6Iu2Br(uw;DCe(?#ckHmDiMb*nJn=j(G>YwyjP*&FqIfB*b^ zJbcXJv)=o&KI`*&zhCdy`~A7Bi{JOrpezW21NcApzhv$|2Dttx)_rbxV!+$&B zhh-Q2cEWx^J_kM^R?HV zG${x!Jue8Z%~S-dtJ|;l)o%$V){H1WI0&vD5(L}Tsvu~;n3f%4E*njWuFHd9s40s6 z2JOSbmnaYF5w$<^fA;;iEt%0ZH2CxQAgFv}XmGabY#A0jtOwN(3z`pi57D2tVZkQ< z(41m_*>}RwU<&_8?i>;%ZPU%IXZ8*a?xMY0{ya2Ddf}YEC*6MCM{nofkG_w0R+IJa z1%pvTYfifD+C{f73WC!fqw-sj`2m0H`J3}!lE{g5`J3}!l5Rce z7At7pk#`NoA#mJ2a>GqqJ=n)s{elz#=4(G?n z-L~Ym25y-?rmszX@7hN$dD3my-E=d8rqAj7pn@M=w2xeh(*OUzx6lLqb!AU%o1bXi zTN`BWN(7x#gT~8y8iI7is#LbODM)WhRA-*&|80pN(^nN_H;)Rkzr3RC{w`FpJQ1{| zw#-O(B}Qkuk=af;YFF7eDw(Yw5^PF=BAucc~BOn*I0`LQ|uwLYf5K8K9& zuQ>+{-d{_QHT^X;xOEP7#r4;-^jA$;aGH7NniJB0rT5)$ zsOQb}&1rg8Oy4Y`yjb7VAyaDKoPcbxzFC>uH|@tqebe&Juy5X}_R=?>+TXrulARsU zy7%}TJ6q%ItfRors!``(_+%z}Hmv(GJ;J*#X$uc_L*^2Vu(QfK2mu=L~G&U+be*)R|a%1~jQpqFJ zf3f=0mZ~WW`)G&SU7gIH?)&I?+1|OW{Y?Yg-mj>qdss57XY^pN&rnCB)r&1D^mKjB z{V(R;Yd>Oy5tYPe%r~PM}ZK{}v}JGxw@)`ml_?olt*Hnm*BGPp+1eV zk8P9}>x-w6DYY+tifmzDeB9x*>5F7eUnHl8eenmikG`nR*`(DZo4m+-Ca9CV(zJKq^ z%)5~>eOr}-!w$o`!M&4J_ux2;eZ3>psaePy9HuWn<==5%Ub!XJc&x=?xa%wBuAgdc zySgr?4*KYyZ_@7i_vgRd_f|WNt_{MypXS{{?%fsf#~o@TeRTSM z=$p8Af1(^eJ*0KVRYP0%&a^srq2iGa$CG*sc+zBe()b{|W`I8Fr2L)2Wq3^W@L=ou zq4;WiXwSMxN4|%Q>63NI8HQ)3?N zk)5IUcjoqg{p3(jzo@zYFtsz) zeq#C`zP$b5^tUuNbsC$YjLopty>&TblPI&XVr^M|tT>IaA*MWAZHckp8z?_tV?!UB zu^C2x(&nE2sNd%zW5%W*4qHM0^)facjLn)z#*fWu$o9>299DI~kMhQ*fFDcVj1ByF z@zBBf@lnW%Q+>>hO(T3;F|NjD1LL9bSr}Bjw4Cy8@J_maz_7CWs{`WJTG!U9mE*Qu z26s+4?i@@{|Ac-`$%h9M!m&G+XBmu{mdsvf#t$5=)A(J$_?=Junlpawr>0-^<3#-0 z%C#B4np4v++w$gAdm_DtYhlhy{CzXN{x`JSjbU?cyuX|BVwm%1WXu>YEFSN7AX|Vr zZH4jvj-eKF&{??OX<@%Tqc+m-hkKnzuL|OQVw4&m?}O_$-jBhYwo)+XPCd`+bzYx* zpYmdu^F?Gz#hgze8-qEfU*a%F@}*+V^~efyI$qxwb8_{15xCRsFy}vW`@el!*#93@ zUD)prEBFf+-5ZZN@RC!EZ)E(;7&y#nOLd)WFbDnJBAqpuli0@}lr%QgYD>)6Tts=X zu{jBuQpctW+5H(C$(K4d0kRsKtM_AUQn_POe{wiBhpH~d=CZeQZ0h#$2X<_V_=6u_ z8b3DAQ(l+j4;IDvgI^-!{lSzX{-6z6?++$M{vfiO0)HTR?++@9_=5+Kl|R_=nzfsn z0sO&)9DneoA^AM;BI*z(lhLj;SXOgVI9}h-J#458AFv5OV&eUHA7Jds`2b^2vKws3 z*pqyKx2JCk`#Y2efnO~h+6td9$(Gd4cJhVPlZSI3^KC@0e&pJ?W2xg99c6}Nh<8mH zN)Docb6vr28~4DA;9Py;Mfmf9IM+Lo^)}W+f8x_apRgIebs9Nf&+oPqt1KE4EZ70| zhkiFPCbNJ#g4cN72pb2KfoDFK(arsnxUZZR<;^Z1)9Lduzo6gD_%xmxj?X#BD<5V0 z89aN<%9#FF4ubN|RPq?(Ym`f?E~|X$ZgR>g^U`a8&MPgG>Y;S`6Qif-g_g<&hl z_00?OE1fC0!fJjaefc_nW4Kt`4dThYjwfS-K38J$_TpmX6#s`h<8W~(?{k`Lk8vVj zwRJgtC~n*HT*R}~9%FmYC1=c$eRMEpjN7KBNXB!qCy?!%Zn;=Wb)h4E+>Fn{PxmZ| ze)lr+#`db+_%O~r4blBya9_MBZhW4gKg{^lj1I@=Y2>~AR2H)z<^Xc-=SS3M#;>JE0IOD?8dRhFwum6-?CR&?!W;_2g)YgY#4FZD3?)VU>9Uv9XVslR1X z`VTy-7mQySBwkwKWoi=XuTb8A&CRLk7`Hi5KDXkS#P}P6@)1+YDn_h?XNL9F3{T%< z-@iFkKQ8?RuDh{`u0)XjAie;fz1G`7N_~R<=>6WT{#-~Mar*NS%8TjGdypwre`X`Q zKl*bu@`LHm8Qd?bKaGcl`g0!gUVlDKKMsn&1L;r8#8~|~g}MjRpAl*+`m@pLPjy*w z{i!b7SAXizAFm7J3Up!JB~}+Udff@er~gfQk$7`_tAqOD^kNI;#;4;46yq76Uf>I! zM8@a^zMw)rea*nW;77=MUr;We4o2nSN}vu&y$9NYrd56X{& zDS7<(+l&i%!5qw_h#z;Ik$%XQ! z_=Pj^3*=Ddt8FoSxsmdJm0zIU@(b$^v~hJ$b(yo3%FH#$nDMKgJ>#wsj32(Ix0gQd z*td`8BHLHzVszC7zwzUD2Kkd+1-c=5Gk)mC;^Bkq#%aiQk(+7WZO4zL3JZ2jPiC3_ zIBs{IUX00{j%>?ro0q9j&Zn+WFUFWTZ_Pm;t$NXmkGp!?r3;@LYx6Pqw!4ldKeMdj z!D@6u+#^p<(47gCDPNIk&RzZ*-T92aZXA_f!8LWq=~1)c7e(}F z{l!*~n5*BCnvR|tc^3SrQy;ot^# z-Luf!OJ!y@GDde6f=mt5)tAsJ{V(cyiW9E=2PWU{r z(SfZVC(sSew;FvwXOvSk*Wi%muDJ%2hNhdj_Bm3YzwU-BZz3M*f&a@V@=n<^(c`?> zhdgPk-q-pg>YASZq^-9z1$KR$Yw=j|{MZo z-oGR3vFe)0=SBKf;PWK!v1(2cpLYkc!m6isTC8Fj-+(^vqsV%!>XW_=;`0`%Ua;yX zuHF{($@siDA15y4{Gi7uVVW>XW8A(iAE%UuF#1?CD#WQ9^gP)ibBaZAs`0oyoVwTQ z#y~g)HXWM2+sYW6x>I_Sc=I?_p|-~0)ajI8nuAkiF*sF)jK`@yjqM;f6(H+zs;8nj zPD$S5)JAcdUN}uh{9MWAxx527b)FmFF2-*loO%&ik5h}4t7)R%2I{Tz{4T<&r&KRE zHOg*2c$9S0F3A`0kGVkDZQpd>Fs6 zB~>5BPMw-VmktO+7O8&x@+#Z^1U#f3GWY3jmHx!B3@7R_f;ZhVM~oeUnB*eS73 z+*{Jv4N<#du;5h6i;Z0+GNq2)o_Fov*h#+Bv3mhoja{mgu~R&QFX)DgDtGzdt2x-- zb)1iT^TzH~)z8?ST5RlUCdZFm*JK~}cBWdU`M8&HJl)2|~p6_!`ZE41j+hy{o}f9^ zSerM7k64={=N;xQh)<3)u}aGD#DvLf_c!IloJ)smZla`k^BA=&W(+T9=r>FSvKwwKONbZnE*U$^GW!Iwtd*mN&>7kn5NuUr2m0P_E+;WIgX& zAud4tk{4$b=#=E!v(yciv*vHmJXrQZ+79o#!i{^Q)}jzYu6!rlpLYf4wxrrC(?9n8 zA5^6``0K{%^g6Cr4lUc-WOL4Ksm6oS-=$1>o?YZhc91jaXD&tYRvCJ4n)#lPZ}y`QRhQ1d1~{aJ8-*Vg{ito#Y-M&7~rQF6KB zdFz6*t>L^&FfRR3$`pUd7i^pVlhz%);~T7P+q1O1bx%`}-ds2QiCNEo{NBa%pPf%} zF>6N!v1HCZh{&(q}e2;RYf5cZ>pWSEmkA9By?_2uq{G-1hOanTIKJdRv*flixK;2cJU+wT`p{9b7}K+Z4(8 zzP}mSz9lx+Egu;yxSPC;awOf=v$NVmu^IjESz>>ud9*pmONaWbUf>@q)4%b3iVi8} zD%2aT5k?QP{l{Bo74p075J zbI*TlXmIGd@`@W1Z}czd#)foX>#av~zh;Zm+nN*8x6y}Q=Wq7?T|YhjVSkN2OJ-q# zK3_{&_wlw~z4z-K?!C!vZsK0C{RI8s)7L3)m(6QG!SLW#u-2}XTj*`9GSjH` zxV46T@=bM)uQx<8UWac`8{rKu_Pwb7U(;9H^-k!V zpI6lU`6txAU9=CJ$7kHS9K6%>Eq@=Ac{le1=GVKycsIY^?B~}XwPOKCn2>&+Yd>B+ zw%qsut!p!TUCM@TEu(Jb($|*-k9w?1IV@Ni)^%|Dt6Y1mGWWs%FHxrXR{0Rw;WX@} z%}qN zOkcK9e_UVwP47Zq*1U4%a$ooU&4ib zUp_*eVPE232kpy5evDeGZeFc+$Kd(hloyLpZ$!r6Ih?fE-0T8meVpUxWX9AScdQR2b(J#5dzV8pfz#Ntj<~OSK;rj>CnjAKkipuf^=R z_{QK;lwUBor2K*@uMgv!wp7c>K1Rh)9Y5gQZ0Kj;C4keRk?I7l8Ml!#4aBKF)QLTHH9%494 ztGHclxzi=MHGW!tz^wmT$Q;`RLH50BdkhxbN%qEQ251M{84qevysZo zVq~l?rDoi982kc0)7wkjfiJUo7Ud-_L$Rto)ZldmnNXGlLcOct!V{+|(Y_T}pcrft>W1xBd*YK~=yx^G3Ok}Mt&7M(l zus9L**5=L&Msdd^)jL1Aw$atwK7zRSN*fDj!G>r~aBSun$?m`h_a|pOtoff_d~gRo zc#YSSDE@tIVbD5K^5olZaCLW)&);k=aq?>6hlv;ta=e~z2Yi(RG1&a z9<)DZBQkR&!@pPY@8^j{H^C2j;i}#6THYi33S7L#t_ej?r=&k*b$m;zt2V^c?P}XX z)@M39*|YRg^mQJ3dkOk`F>{O;v6tZh!-KE`liPFoeE7zs^n0y+bZY+jC4XI0W9Ar* zJXq}bA~KWG;)}+fS`JIU%eIGlhNUmC*UiG>bNw|KJ)7(PrhV<{^(OKGuN#}{EXAfi zt@pGx)s~wB_%7w-S3;XwG-_X)x(}Jqrlj|S*wiPG4Q)zwS)1xqJRfIMk`HZ4y1!;% zo4O8J+0^=fI-5FZV4HeBvY|~KM7@L9)I8OTO+Di3Z6^;lkWF1GS#ML)``&?VYF8r2 zo+Wu~>V8)@$GC(x^?HF#%|JG^Db0-yVp9`UFE;flS8okIMRP?dY(jY}XH#~*9sjZL zY;tb=1>^A(hnXA{*IQDJ5zjk?I?db`_HfG^@*ATwdtSe^_4TG?b|0H)%CQM_U;6}2 z-PptpTzgy5dLDC)O}yZ*v58)PjZJjfYjS~yrr*bPuKiCShAgyy;xl9ai=F)|_Kvgv zbFlxyd9oj$8}jxonzMf=&$I0wmY!*^jSZgVud%_?xz_yIfAhCLF$CXsFxW5(j5q|W zIJEWkC5PePM$5l-{!0F>$@#Z61^(@3{2S}tR?&tyTl^j6-;piiC#sJi-m1iY!1kVH zk$-DL#@OPr)Qr9{=tu+pt&Zo^Ml#+9J%DWAgVw+Gs4lP^|7L7)CjRZU0^cclV~f?P z85>7acVb}QxdPcPeCM;TSX=DEf9^nU%sRF_zd0t;gsic}b@j-I{HCyD9~+N+TT=C6-(Pk0wtyXP+{n5oY#aMOF7la2X8PEVEcxUX=Qp(mXdfFt zGW45MRW~;N8CQ2Z*dg1fTQ>ed`Nw6fv0j9amfg$Vt7ivWXY=ok{QF`3dlB4`fA3>I z_|(nlb02a(f2H}O7x1Ca<3l&$LwoR{-T2V13+SWUbNnc4xE5I3U>6I&%)?;k~em}5KdevJE87cy+b79 z>;3|=UH7s6?;qB#TMomnu@l*K7G3D+FLPr)Ci8E|8oTZ%A1$uki|_7$w_@LxYe#nd z5!Jgix%Np{ZlnjkTrHa3mh6ry|vVvpkD0Twl}itcd6dF$+h2f_0|(> zzOe+G!8VLtKj(jgT{Ax;d1Kelk?)dScfbqQz=yGKTX$sF(^dEM@RnFt(m#w`Iwl*(~tmV|`cf{PN z58d97Et>BzF`UbH7{7Bb^;th+*ASa)^v&tymQ+iHUz^vgyqV@~`#ZEY??Ci?1p0mu zdOxyt?-G-X@4Q>O)8TZdS8;q!j$u;aE^OcHj)}+eI8|jv^43={Z!5j5qwZS0gU8V*e^Q35 zIMu&+-2tO^;3JH$m@Hr6v2RSK99iot(4E-z$&v27G@E+iR2O*Nf%oj3Ykft29%5|f zWyu;}!JKXE`s9cMJ}p`J)G4msE@BJe?nHF5Vp)}R(!@)v(7%O0W<3Uf4St|!UuMj? z2798j`<|yhgM(n{B%^n%PsT@NZ@d_txCq^t3kJT6eGqnyGJ4e}&g3{xv+@TktnRgG z&5+|f;Mf$;d61tJah~>J>5m{^$mbRj|HxO&5$7WxGMj&E{Xj4NL34MS=eq_QDvX6b zM*EX~ZV;?rXxp+yIf$$MHTtd`hvJ`K@VCE7dOw_ZJCJuAf!-g~y7xw-_iaY+o1EUS zDbRcJdYhT6x<+GQ^*(Q(?md)qPHQFm>5Sf&kuTGl_nu{u-rcJ9>P*IEvuE@vSI~fN z*72O$NXGMm_aO`4vS%{F3ASTT=zUw5hmbFN5BX>Df;I4hChBeQ^+tMsqUr^U?{@Xp;JbHX zui{9r;lrczDaU3`lB|h++?+=p_102v!q*$=eU)Uv;w7%$dN4On?|tsg#TQ18h#kuK zcOT=P%Q4pTTdkk&1)ICU<}U2~XU~W60XjW7{dx4n*b2Vfa-ZtVIJMz|WcGc#9X{VE zJGlrQnu{*I3p=@xbN6!W1bc9KHe)B!dv8B3&qf|2%(Jznl2fBRTl*pD57;&|r-EVW z>+Ns1q`GR-T8l6Uc3U0p7#zF5o8(<$bog1yi(z*=GNod7E3z@z9qDiZc1ylg?7kOS zVfQO9I=?>%cHf6=so4Dq)eCk%e*%Gn){gMT{H@JHD!R}-Zc9ZK0u{(K4 zgx&3tK7NGyJa#{}%W~Ma1-sEn7q1$fjN;Wp40eY&jeRW#rwg$>4!aw$uR`oTkoFg1 zH#TSVJ;ZMGJrBDFo|kEBEn!|}+bqT)M(=BAOR;&GaU{!yv$2HC(I#7^D>d% z7w{p;TfPe)Dl#wg2fYJ)=wzoygU!o4jjZLn#ph*ys(P`fajxFM=4IANR(fCJyv#$A z$EFfq_wfq@&C5KDY?wnXGB1->z1Y-0Hd_qPyo~T(`(mW0Q~0YK(`?PbfccuQF?*zD z+j*Ido^znf-TEy)A=g*r&dc<`L;Soo;X0@Ld6~{s5SgHvPow|9M&Q#+8eqN?Il{_?>m%)!{UWVTq zKN8K$jKqH(j2{~X7dnJ|(V@y0S$iUPW6!59$QNA?7a|U*);q@7(?yg&AT9*2)I8?| zaxmNH%l}9Dnv;+*_C!u+igLAs=_S>zco>B1NGLGIi3)4 zp%>pty$#8==ev59uic40hzn)mvr%4WZ004&%ARHsvxvLZQg4EKd-vr+yIu-fpOXAs z_W!uL8}WU+8r(c5dK#T4QkD4wvc{gs>ui)gbrj}xqMXrBRPXfU+9O=O%GbWg+9lad zV%dS_{59EAH}>T1OF7&1{5#i{l#4CQ?JT0~c{t!E@k_XCH{2Kwn!O!cD$LH>xS8i;KS0L#zw7B!_O_^e&(h1#;Y-owdFb>daI%ZxWZ^u|KCz4Pz{Zx~ zYEkSmE%JZZnDc+e#=5OMHZ~-E9@oZSVPh$Ojg8H+GRDTv=3050Kk;{fJWX3Ed7ASy zE-`j?8|7Ea&L(4LI!{LHNebeE1?o%Vw_H4oUJVo%oP(^-)1;!cDaLQb^jWM$lL^B6*raRPX5I+M8UxjV@19p;!`J*V>c9 z7{IIpB!{CMjbH1Y-JBZ(Oz~@rOn%Pm+!1;fdi!3ZZv*f1_B!QqG|h^W@3VSA&Zowl zSAq=qJT)&z^EoTSdhiM9&q`;S28>mkONmt+0pZ7X!wsO_Fu7Dsy1?s)1wGne3@eQZGb^wQ*<8lEqXrwu#NrRW)IQeaVq&h8>iYjC#CQ3dP<(h#i>ST z9q%wY8}bft@J1`YMLEXBIr@8@^tU5tzmYpD1#VH&o}&uA2bfo=yQfoL4D+gxDHZbq zWMeST=x!Y5NxoFf+k7_ffR3H#bzu<9dlA`EG4CnWi;him_2yyTgwiqZvwb0tHTv`r zV`lOm?NyctGzLL^AP35 zFz;?;O2xd}kli25lYFU|cNMb2yvJWCj(JxjTPo(Ar+U%HRj%H_Fz!b90;ip0A@id(B{8%Ne1LPS^9nyd~_h{C|ph=x>O5=&!}R0q0ekO^#xX z%guGb?+fQuI4A1YGkKR7{oO@*y?i#dsFSg z$(YQykTv>Cd}7ui?-QRyG1V7U@ATx_t=*o&N^HU zFYIZE;;GMbKgqte_4rcll>xKJ$J%qmzTtJO@%T{3zM}ewXaCGzY@=gK2AwC#^{dUA zGkL}0qVc6+{+D=0epPcrxw-M{c~+n`HVf&K+&xB#sQrGP;8L{<+xwR5lNvWCl*>0} zQx@_K`3J2@8IKkT+H=b;RFf2Ym9B2OnEU*a2PVBa)Q_2v45OE@}+WuO~?v^ zlWx2Qi-Vp=wp32=JJpLG9OvrI;{>Oa&I#^&As=r;PSAK@XbXSRv%sM$ZwqfHC#WAD zae}U6-WE>qVYN3#Z&p)Yj1znsnNm5y2a(+$P9XVGIl;S;6({)KrsAC7N@Ppr1WDD4 zK7Q5JI~XUJE!h$|!EusBAMbSa7Ucx!XsMi_tUyOYP7p-r)Ssm1;~PG-_5U#^Kz~C{ zfc_4~3FfeVxfD+D^BKI0)!)4R@2^r`j1&9;nNm5yPmnF-1UKLx!#KWx6G*;PPVh}+ z#R6|ICBl=J#Xa==DFNxXA1pwoWSVs+rbIi&*WWV z^!Fc>7vluKN2XLx@Iz$xhZ9J?R8Fu8S#g3r-By1G;{>abEtL~|UiHEW{_g5EYZ(T} z6Fel@K{&y3?ib|*EysmA)~x#A1f8$^?{k8G;aR0}g7eibY;U#elcJnJ{$W2j!A+aq z0w=&eT%N$#$6MtD*)w?87~43OJ}AZsDv&9a6Kv%<`@;z&Un(c~v)%y=KEsXIV4UDD z$d<|pex`cSgBovhx$~vU4V5@w`s-*7Og<+_jty<$w|W+wV5GN&x04gp9~g0hmdS4m zC%94VjnSJgQ(lY{d>ollIY9%m`@;z&Un(cK2w8E0hr5b%f{T$Yl@pwydeO&wUA=>G zf-@ysA}6SkEc*BfS8q{HfR2{R2__flXvhh2zGpW{&&M}h`;Y%!PGI;!G+)YElmk5{ zAXhxOSe~G>lsv(YPUl^${^sqG@1wjJC-^lorE-GrBOAjBItR)VNWN4~@Kt2R33fkM zoD+Nv*-|;dovIg3(BtYIj1#Pu>>!-r6Wn*4piOfJmIp?22R(}Q+oQ9bKCk-V1iyK? zBu>zolP4fvwsQwOqf=`~lqWFH8z4{c9-dVyCz!2vVS8V5eNvPY$Up1{Cpfn!I+EU3XpC@Qe)mMa^V56P|C#dkYFfb=zJ#CfG6BwOwd4kRq=b^bgfzcnA zCumM}ReDaqGixm;NN7Gb|63X42&~RDxVhM-g1K1tt&Ho{))<|+pYlbTi=CD<>+U9K zE_S-+@XFkKR%SkejM15etU=Wpr#j|KYxSH+#?Rp`MAn}{U#`07A94hd&P=B6a4%YA zM)F2y`q_&Xdxl3e7dr=8t-b#GvldU~w+A|d{z7Dp&a7lFTI~59(Om4Qs<$?|_TOE- z^4nf#jDJQia@SI?_c}8IovDh>g5Pw_zIy`_Y6o+(1`}BSx!T6mTT;QyP>;?)#;pHj z-ulBY30DXHwuZsZuBm1}PLJk!!JmJ#IBImsVXDz3#q!92Ib+hF_Sfi=KZ9QDLF48y zL!Dxb2Rmo%$?5Sr)lYdb9O_1vipNWk}nm9zK^VMXp|rOLDn@rifpMk^flEB z4rTx5e80z`+3X424;*^@@f;lL%E6(QVWIwfQ_sTAUU<>@JMU6`R(Rg!G=3X*M&r9E_h&Sk zGi6yT(ObuUyxJhdG>=!)^?cR|+~dYcyuqG#d4S~y*m$n(Yi&XIFxC@b_m^vIIQx=! z+LGd1tiQpY%sT2IIwx=z^>3sc8Do>LSvxd#tMe|+Z|g^zbGLhBtMu_&%5%@bEVYkc zIW@kI$Lk&G<9{vE$7U_D*0is&YoCQff27X1KHf^X@8dq5DLqIZ{~1~J@fog<`EF|1 z$E;adP3o*&pVMd=T?lRZ<^_G`pLH&dtj+w`kDQ`E?VhZ}PGweU>QQv32j>W|ac zjd~aQazv57jMLX9ejC@9|4F&;%VPTaSv_CtTK;NrWl((uYjXAVVft12YWfLI6Y6VY zbOzgf)F0|AoTaF~f)7St6K|fIB=t@)+~k9l7vm=LkSUd$oQ3TEa1+Uw%1tI9D{k^h zH!g#5lZnWd%1uV7UbxBiuHKNFFt+={O^#*k3->Ml^%U9>$4zS95&D)e2_xLS41HN3Y?d4#j{oyvmsjgmLI#rj6`{kbOUZlLbEee3=lvRw_ywJ-d| z+I)+6FEO}Tg9vYr_Fs+3d>&b&TdZxIqO%=p3)ePAy!Uq1OMar$)!T)S)w!7Fj7hC+ ze9HUFF_~t`l1JElW^(N;&g)(!4wIJ?f#%8YJH|=&^ zVzbLF5ck{MLJJrT4zWL^Ce$_4o`uQmqpamN`wWYmcZbfHdD|_vE~9UES?s6$M6(ad z$h1_MeNbF?rs}KBKByh|@5c_<{kYB+>~ZI&chlx~tN&hMy`s)d=RIc^thGFm`;B~a zV<$1e56X8x{`yt?e!lO6@tO1W`|JF19t*0)!U!&i1?)l&0hW)_-w%{ zAB;bY`l{t<(>GVxcOr(YNk8VV>ub~B<9hb8!ylZ*9_zdK{sQ$dM>yK-lbrHK{Zo`Z z$~$9MBh0?8Db>k)`}huq_PKQA2N zQoeET#j5i$Q`UZ3`b5h5uD|7bQyN#k`doR%OYYksjA^Ag2dM9$;4=E~6xX)SRM$9j zzL(Z(Y9F58KPT?`JZHiuIDhm7#$e|!g8SS5Y5WxLT%8`xbNcJ@_YduDFx=Cg5zyq~ zlr;shuRG`B;gjPr;AzU=m9uwfHg;9Gcj$3s35n`qsD6N4`;S?YcVi?|L@a_&e6mn)SjB+BcDN zRz#gWD+0YS_UP6_7<<(EV_SY=l;^+(mFL(oI+@*lRnYq31a=4x=dO9aoo6<_8m)OQ zgO^8kG&VDr`vKp)*4Zl8mhFCAI%RabtbA)3Hg!e0)$PUn^}4-+XU5srr)(RIeRbGt zY-WZzBf#tb63Xv-BVYe@hOO8CmF$Je)&J{tFJbk(n|zWuV=p?cGxIM&zZ-W%`mHrb zh2K|~e=~6vI$`}=fo@O3ztslWt<&Ol`)K;de3J?s55Gx88*+0m0W#LV75`4@W}d@2 zNcQX^Vr1>j^tx@%YUdrJ^A#&IlDGbi{cEvj0Y$p~q}~CJbCT2Tdi2$NlZvri&vke0 z?7VLd^#6QcF4IaK?FkcKGLF;DH>uF$Eve+VP>=tLjNvl)%<)E-$+Mt$JFary+hE_e zzPDlYwebj_uQPg_VT=m&n7ZF#&T7|rJj%Niev?XLc!N31!HuDCBX^&K`<8a2-rw@y zJdW~h%1;wMF>Yp0EHh!A{*vWR2Ti=$1u$2hB#80xes|W zh7L!{@^GXw^8xOw&+}}``S&O257YlG!^8gn1oEc;!TTSv?p62__YJMM{ueG$Zv40M zrQ5-d1>lDE-A1@ECi8x^DQCWew&mc)n9Moc=X({W_kbHI;fBtBN6)(XM#yPk#a;4; zIhgS^o|X50_~a-)s!9LKw#(?ky7KKf3CKo%cWmZ0!;Pyl zU)A#m@V{#qPwWOgKOwZ6|5Cm1)K^#+X8i9`?bo@4vA&owzlgH|=5m&+JsZH-4sp9% z>t(P@bH%p%-X6ZhG2V^dn|wG*4#38&pPKi8(JGHIS)^Uuf^FVC~7s?1`&51d$M z*1izze!OhiIKxRF#-^-2%rJXv3++huFF$GQ8gBbDuKVW0C*N54>a1M*Xsk+K#l7&H zhUJ{o0Ds-McivNdo{zF`_;O^-^BQZ+S(zKLWpQ9rMxNqb+~4@ddm;`SoMFyBm=ZKT zSyA5p>T|iz491%Cs6(zQ{{{{-?+RBPYq;v{Uj_Fkw?%$j9Qm#A)V(J%&M|)Ac>1>( zPaTPju|wHP5uUn}=j;zpm3*l@^*Ox*_A>LC;ym?rWC!D^PjX*8brpWx#gA=1esnyQ zT*9fLoov#xFW~$?Zzl}{^3-NOABXO3QJ%u_RLVo1+NM}Bm#1D4!&86FGjn-rcb;vG z&8*_S=c(uB^3(^)jL&%(9j+)hF%|DJJuN?w_r5L$Tt>OIVQVMobeqmrkRMPC=k%O9 zMw{=x-4*G1TM9k@AaY*MbGRz^#-`uTy@9yuuYMieUvIf8vem{8W4NmQ_ANL%7*{=C zv0nU&K|pZ@H@11;Kh=E0E{CgvE2o(`zZkB{y-I^oo~xc#sNZna^VM$a$Ebh0 z!KjF<=6{on7|CJ>IS+#!%75g>NR#2H#n-8z0a(&U`n!M?A67<_NWiYm(}Rqg=~cLBkVgDz-fzes~`I zFpO=R{Ws4&UMPm(x>@Jj{=;5($`@&G4CS4vt`i6RCYi>s6x{gb@$uugo$_MeB>N*W z9yjhPaz6JuWIb-IaOXbx@e6TdozI0;W+ZRM58W_l0jwGL+^2_;)mniA-1s#PvR0rK zS;KA63v(7gUEw)9QH*h~>P0VJdD`klyL90#e3NWMq$^wG`^9aHu5|hLuFgE5XA*Dy z59`{DuE6=@&O$MI5lk_;5UveZO6TZ{Tf5YpYCq9%C8ICsj?2Rv-T91_r!5EDZ<2K= zmm9^aI;&fHR7$LRy4uY;g4G2a;u@6`BYnfa&l0^)PJHCfeGX$;*_LA2r^*cG_mhjc zk~)%n^Re#^@?8F#sgi-$Siex2nT|}2zNMLfXN!l_5j!>!@2-hte7t+4+B848_M>iG zTR59SXDZ9a$Ld>K;8u@vrpaSMzoYtpM}O_ap1a|){#(oathJb?_VJxweWzIMt0gCD z=B&U@-@XxQpT4Ww!MZ1%bw%4vzM3|A8Q;F`$I(8x`lY^ooa+bnnf4t{`^stGZrZWA z_Wah0vf&xUT8!_ORQ*Y29TV4J$r$sEXU%s-^HAjfRJZcCvxu=3yVtsQ(4N9}JSkb` zp-yt`sLz?-+NIb%TrV~z^Axf*I!~gXykaa5jO=P>L(uvo)lJ^A%GKSd_#Iu>IUBnb z)2;MnRcB2zIE4+n&FHe|w6+e4O`a*9v#3$#6HdkrB@of6OpRfqy8hVoP4*i9a7y}2e_eAz`ZRxCe`@*^uEqO>1Lpa})c9@1%WbK~QRaIs z{_OIe+GO^SZ-W(^%z78@m!~K2dwYKKo3rJV`Y^_pZ&o?B{Jn06O>e@Muhm!J@0?2A zCED_HlEs#1x^@g^%U#Isk1cOh-PrOZSNCAH{3~QjwdL=rUTpbbSMS?w%lO97mhp$y zmRB1bwYF@pk2SVzuG_6Gn`>;`*)s9Osos{`6x%sl#uiT*%$A$uZ27rwg|^InXUmCv zZa#(m#}}5cw(nB)pN;D~bL09?QeKRkFVr~cOi%ci@uzDB=3jG=E#&4G(vM+WKN>t= z=&`yoBl%Lf`6sqx&LdJp#896gvhAUD_emBP)tro@lmNZMSCoBxyFmdeeaLAH>a`|*q8 z=8`X!o3Gb9z|D_x<2M*L-+*kX-24&Mi(U+K^}bbZ{%hubYwS8$a3S#Aoa<;k`1kZo zd@>2?LAkltmsfN2Mcmx$i@3SHKH770qdSh98{Ki-91c3la`QKd0rS-67!3FX<;5`I zUy&&l11>;ze=tDurDDLz$ZD*=@Z|nuz)Qaw00WXIhJ4^`)ei=I!jJ1)!GJEi7JP%^ zhpxAd0nbg2AHRcWb1@8fh2NHn0e?bve=tDurD8z4-T@3a(v9C>7_c7MQZXQ-deMua zuHLtb0Y4&V7J~u!_bC7ST|E;F*!t}M0tTQvAqJp3AqKP`ZZV*#jQIS3*1g9ES^1Eu z;sE$%lb`D-$j?=ipQ{S8^VHrr`=|UQ<>#uB+3F$8+YtwC&x^Y%GyjT=(I4Wj#j$Z$ zlta4!S-$&c*P&3C_a9SOW4W35%6~(%n^>xg`N&Vdw;=yce)4EN&#o0Aex06v8l3Dg zb`+gGd>Jw(|H~Y2vl#>O@5G|p=AX+s>}6)1h{x7kf9=+uGnPlCwf0Z1&0sA@QiT%gbFED~2I>WB1F>{U5u>9nP7tYsuloEfYeYc!%m|>>mHy+rW$8 zW}i4tZHpPd3n(w<6Q?3$#*ewKVma%>kli1jDEU%-;_Juo4*0|?-S`dW6W>6#RG;{~ z>P0VRyL#WMPkey26rr8x^5SG7)RmX@Onl-AURTKD#pSHgH|8&n^f_zz(WJEF#b)2R zq>{A{(Pe zor;g+;w#CQsz)~A3%?eHtU(au4$df2Ia$%cigI39Kdlaax6!>xsNxmM>{9Q>rpN5 zQ%sMBAXBOyy~1<$M~@_5sviAG?|>dnFF}uI&yGBaZ&B$g+plaP$;)!O;x{8IBGg_8fgZb0%HPKO9b954Ce) z*iV!Pxkc?IZfN_9vs30Ew#~2OJJw~Me;fPUZf(!tyxS8B|1LA@bYpmT=Y=KYG{@`N zF?}^h{h+=ghG7nFYgx>CgX1LQc(++!x@O><=4fO+cU#T3RJQYuzQ4>`rGjygyytFr z66dV@1_$E5wFQ0GVReDSrpeoW%I zwiy=}7nyNsV~h+|b{(F>wae04tJI@hc;j(~cfZ;3`i|Z;X1xANd9m^OsboqVuZNJ` zpYf7>spHj*tj6o*-$UX5>Jys}s1j#qRJ^K{k8 zcr7V5UNy&;FkT0|ZR7Q)iSgrg0PQU{UN7+5QpfA}$nMX0Nxsza`k~%|@v3|iAnW?pUL-JVx>lxyXtyKJ)dbdvXe~#$c7uNxuFX>(vj^^?Go!Q?a!#&(bR81v$1FVu zj=1c9N{BUT4$X@-?)N^E^LwJ0b+n($X-;*WW4`ZgLdX6w{p-`E9AX^Axf%y3;mL%qsa(b?3)=2XyD~5_IP$$d;-*-&DQmPWjuUJKGmn zU%)tS(f)0_)~GturstqLTb?PZJM4=HbqBqelyyEi@vAScf z2iKjpQt}-asofTL^7b=+jPhdVLS2Q7*PS^W<{S?o26yJ0~J5 z-MRZW7I%_^;Lb_NdfnMr1b3=bFS@hD)!XQCXF|-mP_v0I92OOxPxqJHH3ytY=W^Ct zQbDxevPREBf9gxopTM3^hYlM3xzAz`JkOp_hi))OY`^ho^rU{QStD+)YbM!qq4HzW zwo+o!^)>Oj@(Sg}V$x1zjINXrldeU!ASN|>GEhwV;Y)ICGUq&$->ALBq$7Nv?i-WR zXNRR-Olta4F{$aNu48RXTBr4|2Qn8lqIK8OgId94dyYYe+dtD=uuqupQ*UO@=p%Y| zj9smv-0Zy|7OOs#Z|9;j`UYChx-y3)m6^{VWBO_x{#-h`rp&HeZHQ$2y3h|H+jpal z-^*D?rahl|b~T;4=SRQ08+l__SMnRq%wP@U0pbiAY`gcuoNYm0kbAY~fILCp zY|y`3P7ZPJHsp22==c6)ac|esi|DJltYd!{vA;cQfI8Yz?AK6?Y3fT(PU{?y?Qohu z3}s*N1+=l+w_!}?Jhfpb>x`6-*ZU`U|6cMW9e%w~&bra(g4Pq&2G-Nv{cCIg?Yxt| zZKidjyR`2!TthxKa}u)k+uRx^n6cc}(Qb!E@yi+1nBIAA390zdA3+_QmM5i?NOVY2DDQpls{itm)+bmQ>@&^zD>s zO{!U=3f^?{Y@Kx$<^YH(S5dYJPSXpg>0vK&*R*8zBda;DfPIeUIW?ow*Vt#`tIkX> z^w;RNImaNe&pc;aDfyOl)$zLhGUdhMi{DA6#CY&=WMkqBg9UN<7Rejk24jllTUwA6 zw!iVKg7}@>iq`*j*Cy>b2K2Aafmr#KoLn^+9-ciBL}zb&M|Gmp|NP^i@jGjIs(d_X zFelQ5YLjm(pQd#huFFDJl-{4?ZapN zt8X9pwGI332LpB9h0ptzfj!;IH`dwQuJGlL)TuM;6#rDODl_W*&v*$kG^FZ@Z27Y58(Z%^k2EoJ=ak0RSGuzaDexEo^tj36#riMrMR;ryJdUA zY=_HwuNL=S%D46`^FE+5^CQarS$us(&NckHoG*=-UOIoz$m0XFwq&*Oouka!k~hC10#ba6iZ)||shUrx|9 zI+yFGy4Anvr1biWU&Tg!zjjS9=Ng)R4WfND|3dv6ZT}gp%Tt~$}PnO@J}tc80N84K2BS%1bgvFaqxZJHI2Xpf>9FZQ%59}SM>Vr6qF zSh8CiX97mrCE6w;vSc$KRzGJ+YIvrLTy^u{C`3NgbU&_7>*gO%87E>^z!pB5|WC+xDq zV#sTC1cZKsayx$R_o&HAcRs8SAe&6`NS$Pu0|6UiRqdg{GJ<`od4B5hww^qoO1ULm6;XDn0{N9nsJvoE2bR3%yViZ8J`Qd5!t>6Z7yKLXzIGk zM}-$~y1m+F+=_ne^aUh)|oW#RLE-3yTIYD%tc`-Q`VL-6Sf-MOZ- zsQ3H!H`@Dp3$iB1b~9~Z?`spBZU?eG9iF?5$y|gC-$L0(m#(7RtuH{&eLJc%@1fkR z@x3{j{nAsy#nG8PuV2ns=zOKi7@JEOqj}^VE@A)t5WnW2S>H6#nqI~i9yh_{S9fT? zZUgOcd69FeyM~;=&g+xe*T{?X%=6D3o0-VHr1sOzn>}OKh##U}J)>7+it6n%4eY9zf@29GauXp=+ z>Yd5{U*G@q>B3>btvXj&^B=W*3q!n1^B^}QgLHM-@Ryc@X%&0wpL%#m@F?%!ru9yX z=nL&PMt5yqMeot%-y_PaJfr84Q#s8&FRA9XL4=qj_-ZzT+@xb(_-GGdJ#D?`5$7STuwP#W!U!L zvFYw6`V0=-13%H(q&ipV1;!XZm;K#^!Tq%Tv<({nF1vTmJg5Em^wIvA?MJ4^bKT8a z^_~XX_aEY&8hiRr-$wl3z`gzso!gd=1ACU1jsdr+KVvXpCFPgpV8Ddo`(nUyWIP5; zF=wj{i~%1&)?+|VrCHBo?7tf<2r*!^#eh4JZG4?r0Nc!dmUkZ&VZ*iDYvJs@zELTA z-sv`Uz5`uZ<8>ukLv%5+UCWYdTYv820rt*IKXl&dYm7>ybpbAP*mKv6E`kNh zL7HnYLOfNtAPk81#$*4~UGMhO?s_R`jo%+1@MzB;)Iyse13@`@gQ`JEXoazd^VZ=)Ds>@-pv?a!B{U~ z%;z)qm%}kGYeg60IYuze&*2)rp|!^5e2}HI&Een_o}+K2?OK-1?g0mT?(uD|$_(Y6 zIlu89caHrMa2L$ogbmvFiZJ1yNAP}}FEZElS3T=F-e}@%WpsTP*c;*4k(s{HL00lf zop(Nqc_n|&2mQ6F*JIL=A>VjLb%SH4xw^$;)`2(c!86TEoV#rNgHym7olm!%GI0=L zkIpL>kKH_)c2H*4kAgiDC}S^Jo)7O9c2y^{o575~W1G+8D|+kbCwxKoJn}_X$&Zia zOp~DXQx|Z~_|U+{nD}wwfX;O>Jchn8ebnLmD8l1!>OJN&|L@+z@EH0>7^QPvx^u>5 zgZihp|Mag=H-4d0xs1cPUSV>jCz&&*%{5rH#FxWkZn5(4i!;*)`RiavdN|iT!j|Mo z>7o7_tV)E}N2UX=yQiZAYwQ?YN*ijPgLhPs1Lj_ToiJwga|klQc4V43du$ZXM#p;-JiB&Zoy{K3v(bqw+_PI47jHY#+3}2-)vH+{ zcB%fZJCfN;J8jNr&(a0x$$a$Xa`fgh^ygA=YaVm57PqWUTMlHd9S1VkVAzZ3o^Wdy zej}H&JWJc!b?y!^%N)f*z3x4DpF({4rQQS1QtRHM9(&(|pU}G)d*`}pMAgZ%h_|0{)0#5}^HI)_iogin+SvqF60-9Jh*IQ$sxufdN)!s{c`Be`acJs4s47YGxk ziigl=W)HCXFBcQs{(?)?e=(S_l=5P^oPR;aU_uGGob!>*&Ebr9P(oJ9B}di`^0cQm!p0wC6^PZ9WniOBIU($ zIirv<{Z>LQXLnT;$N5~2@4GOL%gNFr;f7ZJZQ=Q>-rDl*^&Q8e|$>ltWjLYTZVM90NAvWOaJT^Q_xyOd1e&=Jbfpa-V z|6DG|Tss~Um&^GMb?;9u=S#>d2HMu{aFQ5ipj^(Eku5csvt0Gc{$0KMoy)qka%}n3w9DlfoN&3E=2ZI#pUW|} z>~cBAmZwr@DY=}#)!AImYGFf6F6Xr|5e5{?

8#$>r>!&Nv)6j=m|D%Q*-cg99bx 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 iasLu~ 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ξ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